using Newtonsoft.Json;
using SteamWare;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace MagData
{
public class MagDataLayer
{
#region oggetti public
// reports
public DS_ReportTableAdapters.PrintJobQueueTableAdapter taPJQ;
public DS_ReportTableAdapters.stp_prt_CartellinoFinitiOdetteTableAdapter taCartFinOdette;
#endregion
#region init classe
public MagDataLayer()
{
// inizializzaizone classe
initTA();
setupConnString();
}
private void setupConnString()
{
string connString = memLayer.ML.CRS("NKC_WFConnectionString");
// reports
taPJQ.Connection.ConnectionString = connString;
taCartFinOdette.Connection.ConnectionString = connString;
}
private void initTA()
{
// reports
taPJQ = new DS_ReportTableAdapters.PrintJobQueueTableAdapter();
taCartFinOdette = new DS_ReportTableAdapters.stp_prt_CartellinoFinitiOdetteTableAdapter();
}
///
/// oggetto static/singleton per fare chiamate sul datalayer
///
public static MagDataLayer man = new MagDataLayer();
#endregion
#region helpers e utils
public static string redQueueConf= "MP-CTRACK:MAG:queueConf";
///
/// Restituisce un array JSon x le conf delle code di stampa leggendo dal file
///
/// lista oggetto Json in formato SteamwareSDK.queueConf
public List queueConfJson
{
get
{
List answ = new List();
string dirPath = HttpContext.Current.Server.MapPath("~/Reports/");
string nomeFile = "queueConf.json";
bool fileExist = fileMover.obj.fileExist(dirPath, nomeFile);
if (fileExist)
{
string rawData = File.ReadAllText($"{dirPath}\\{nomeFile}");
if (!string.IsNullOrEmpty(rawData))
{
try
{
answ = JsonConvert.DeserializeObject>(rawData);
}
catch (Exception exc)
{
Log.Instance.Error(exc, "Eccezione in decodifica file conf printQueue");
}
}
}
return answ;
}
}
///
/// Cache redis della conf delle code
///
/// lista oggetto Json in formato SteamwareSDK.queueConf
public List queueConf
{
get
{
List answ = new List();
string redKey = memLayer.ML.redHash(redQueueConf);
string rawData = memLayer.ML.getRSV(redKey);
if(!string.IsNullOrEmpty(rawData))
{
try
{
answ = JsonConvert.DeserializeObject>(rawData);
}
catch (Exception exc)
{
Log.Instance.Error(exc, "Eccezione in recupero dati queueConf da redis");
}
}
// controllo se vuoto rileggo da file
if(answ.Count==0)
{
answ = queueConfJson;
// a quesot punto salvo in Redis
queueConf = queueConfJson;
}
return answ;
}
set
{
string redKey = memLayer.ML.redHash(redQueueConf);
string rawData = "";
// salvo inc ache per 1 h...
memLayer.ML.setRSV(redKey, rawData, 3600);
}
}
///
/// effettua la stampa di un documento
///
/// Codice UNIVOCO del documento
/// stampante specifica (da postazione o std da web.config, a cura dell'utente
/// IP del chiamante
///
public bool stampaDoc(string keyParam, string printQueue, string clientIp)
{
bool answ = false;
// controllo se esista UDC
if (checkDoc(printQueue, keyParam))
{
answ = reportPrinter.obj.stampaCartellino(tipoDoc, keyParam, printQueue);
if (answ)
{
logger.lg.scriviLog(string.Format(" | {0} | stampato UDC {1} | stampante {2} | tipo {3}", clientIp, keyParam, printQueue, tipoDoc), tipoLog.INFO);
}
else
{
logger.lg.scriviLog(string.Format("ERRORE | {0} | stampato UDC {1} | stampante {2} | tipo {3}", clientIp, keyParam, printQueue, tipoDoc), tipoLog.ERROR);
}
}
else
{
logger.lg.scriviLog(string.Format(" | {0} | Richiesta stampa per DOC tipo {1} | stampante {2} | key {3}", clientIp, tipoDoc, printQueue, keyParam), tipoLog.ERROR);
}
return answ;
}
///
/// Verifica esistenza record da NOME CODA stampa + chiave...
///
///
///
///
private bool checkDoc(string printQueue, string keyParam)
{
bool answ = false;
int intIdx = 0;
//cerco in setup queueConf
switch (printQueue)
{
case tipoDocumento.docBinPre:
break;
case tipoDocumento.docBinPost:
break;
case tipoDocumento.docCart:
break;
case tipoDocumento.docPart:
int.TryParse(keyParam, out intIdx);
var tabPart = taIL.getByKey(intIdx);
answ = tabPart.Count > 0;
break;
case tipoDocumento.docStack:
int.TryParse(keyParam, out intIdx);
var tabStack = taSTL.getByKey(intIdx);
answ = tabStack.Count > 0;
break;
case tipoDocumento.docND:
break;
default:
break;
}
return answ;
}
#endregion
}
}