using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using MagData; using Newtonsoft.Json; using SteamWare; namespace MP_MAG.Controllers { public class PrintQueueLenController : ApiController { #region Protected Fields /// /// oggetto static/singleton per fare chiamate sul datalayer /// protected MagDataLayer MagDataLayerObj = new MagDataLayer(); #endregion Protected Fields #region Protected Properties /// /// Conteggio elementi in attesa stampa da DB /// protected int countWaitingDb { get { int answ = 0; // resetto conteggio in redis... DS_Report.PrintJobQueueDataTable tabPJQ = MagDataLayerObj.taPJQ.getWaiting(); if (tabPJQ != null) { answ = tabPJQ.Count; } return answ; } } #endregion Protected Properties #region Protected Methods /// /// Conteggio elementi in attesa stampa da DB che fanno parte di un SET di queue /// protected int countWaitingDbQueueMult(string queueSet) { int answ = 0; // resetto conteggio in redis... DS_Report.PrintJobQueueDataTable tabPJQ = MagDataLayerObj.taPJQ.getWaiting(); if (tabPJQ != null) { var selQueue = tabPJQ.Where(x => queueSet.Contains($"|{x.prtName}|")).ToList(); if (selQueue != null) { answ = selQueue.Count; } } return answ; } #endregion Protected Methods #region Public Methods /// /// Restituisce numero jobs aperti (stato = 0...), se 0 = NESSUNO /// GET: api/PrintQueue /// /// public int Get() { // restituisco... int answ = 0; string redVal = memLayer.ML.getRSV(MagDataLayer.redQueueCount); // cerco in redis se ci sia chiave.. if (!string.IsNullOrEmpty(redVal)) { // recupero int.TryParse(redVal, out answ); } else { // recupero da db e salvo answ = countWaitingDb; memLayer.ML.setRSV(MagDataLayer.redQueueCount, $"{answ}", memLayer.ML.CRI("cacheQueueSec")); // chiudo gli zombie (stampe non chiuse)... MagDataLayerObj.taPJQ.chiudiZoombie(DateTime.Now.AddMilliseconds(-memLayer.ML.CRI("zombieMsTime"))); } return answ; } /// /// Restituisce numero jobs aperti (stato = 0...), se 0 = NESSUNO /// GET: api/PrintQueue?queueList=|queueOffline| /// /// Elenco code delimitate da |..| /// public int Get(string queueList) { // restituisco... int answ = 0; string redVal = memLayer.ML.getRSV($"{MagDataLayer.redQueueCountSet}:{queueList}"); // cerco in redis se ci sia chiave.. if (!string.IsNullOrEmpty(redVal)) { // recupero int.TryParse(redVal, out answ); } else { // recupero da db e salvo answ = countWaitingDbQueueMult(queueList); memLayer.ML.setRSV($"{MagDataLayer.redQueueCountSet}:{queueList}", $"{answ}", memLayer.ML.CRI("cacheQueueSec")); // chiudo gli zombie (stampe non chiuse)... MagDataLayerObj.taPJQ.chiudiZoombie(DateTime.Now.AddMilliseconds(-memLayer.ML.CRI("zombieMsTime"))); } return answ; } #endregion Public Methods } }