350 lines
13 KiB
C#
350 lines
13 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using SteamWare;
|
|
using System.Reflection;
|
|
using System.Data.SqlClient;
|
|
|
|
namespace GMW_data
|
|
{
|
|
/// <summary>
|
|
/// classe gestione utility
|
|
/// </summary>
|
|
public class utils
|
|
{
|
|
#region area table adapters
|
|
|
|
public DS_UtilityTableAdapters.STPTableAdapter taSTP;
|
|
public DS_UtilityTableAdapters.v_selTipoCellaTableAdapter taSelTipoCella;
|
|
public DS_UtilityTableAdapters.v_selUdcByPartTableAdapter taUdcByPart;
|
|
public DS_UtilityTableAdapters.v_selDestinatariListePrelievoTableAdapter taDestListePre;
|
|
public DS_UtilityTableAdapters.v_selParticolariTableAdapter taSelPart;
|
|
public DS_UtilityTableAdapters.v_selTipoListaTableAdapter taSelTipoLista;
|
|
public DS_UtilityTableAdapters.v_selOperatoriTableAdapter taSelOperatori;
|
|
public DS_UtilityTableAdapters.v_selParticolariTableAdapter taSelParticolari;
|
|
public DS_UtilityTableAdapters.v_selImballiTableAdapter taSelImballi;
|
|
public DS_UtilityTableAdapters.ConfigTableAdapter taConfig;
|
|
public DS_UtilityTableAdapters.RemoteRebootLogTableAdapter taRRL;
|
|
public DS_UtilityTableAdapters.RT_PageValTableAdapter taRTPV;
|
|
|
|
public DS_batchTableAdapters.AS400_ComandiTableAdapter taAs400;
|
|
|
|
/// <summary>
|
|
/// init dei table adapters
|
|
/// </summary>
|
|
protected void initTA()
|
|
{
|
|
taSTP = new GMW_data.DS_UtilityTableAdapters.STPTableAdapter();
|
|
taSelTipoCella = new GMW_data.DS_UtilityTableAdapters.v_selTipoCellaTableAdapter();
|
|
taUdcByPart = new GMW_data.DS_UtilityTableAdapters.v_selUdcByPartTableAdapter();
|
|
taDestListePre = new GMW_data.DS_UtilityTableAdapters.v_selDestinatariListePrelievoTableAdapter();
|
|
taSelPart = new GMW_data.DS_UtilityTableAdapters.v_selParticolariTableAdapter();
|
|
taSelTipoLista = new GMW_data.DS_UtilityTableAdapters.v_selTipoListaTableAdapter();
|
|
taSelOperatori = new DS_UtilityTableAdapters.v_selOperatoriTableAdapter();
|
|
taSelParticolari = new DS_UtilityTableAdapters.v_selParticolariTableAdapter();
|
|
taSelImballi = new DS_UtilityTableAdapters.v_selImballiTableAdapter();
|
|
taConfig = new DS_UtilityTableAdapters.ConfigTableAdapter();
|
|
taRRL = new DS_UtilityTableAdapters.RemoteRebootLogTableAdapter();
|
|
taRTPV = new DS_UtilityTableAdapters.RT_PageValTableAdapter();
|
|
|
|
taAs400 = new GMW_data.DS_batchTableAdapters.AS400_ComandiTableAdapter();
|
|
}
|
|
/// <summary>
|
|
/// effettua setup dei connection strings da web.config delal singola applicazione
|
|
/// </summary>
|
|
protected virtual void setupConnectionStringBase()
|
|
{
|
|
string connString = memLayer.ML.confReadString("GMWConnectionString");
|
|
// connections del db
|
|
taSTP.Connection.ConnectionString = connString;
|
|
taSelTipoCella.Connection.ConnectionString = connString;
|
|
taUdcByPart.Connection.ConnectionString = connString;
|
|
taDestListePre.Connection.ConnectionString = connString;
|
|
taSelPart.Connection.ConnectionString = connString;
|
|
taSelTipoLista.Connection.ConnectionString = connString;
|
|
taSelOperatori.Connection.ConnectionString = connString;
|
|
taSelParticolari.Connection.ConnectionString = connString;
|
|
taSelImballi.Connection.ConnectionString = connString;
|
|
taConfig.Connection.ConnectionString = connString;
|
|
taRRL.Connection.ConnectionString = connString;
|
|
taRTPV.Connection.ConnectionString = connString;
|
|
|
|
taAs400.Connection.ConnectionString = connString;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Inizializzazione
|
|
|
|
protected utils()
|
|
{
|
|
initTA();
|
|
setupConnectionStringBase();
|
|
setupElOperatori();
|
|
|
|
// aggiunta x gestione timeout esteso (ove necessario)!
|
|
fixCommandTimeout();
|
|
}
|
|
|
|
/// <summary>
|
|
/// sistemazione timeout comandi nei tableadapter
|
|
/// </summary>
|
|
private void fixCommandTimeout()
|
|
{
|
|
SetAllCommandTimeouts(taSTP, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
|
|
SetAllCommandTimeouts(taAs400, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
|
|
}
|
|
void SetAllCommandTimeouts(object adapter, int timeout)
|
|
{
|
|
var commands = adapter.GetType().InvokeMember(
|
|
"CommandCollection",
|
|
BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
|
|
null, adapter, new object[0]);
|
|
var sqlCommand = (SqlCommand[])commands;
|
|
foreach (var cmd in sqlCommand)
|
|
{
|
|
cmd.CommandTimeout = timeout;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// oggetto static per fare chiamate sul magazzino
|
|
/// </summary>
|
|
public static utils obj = new utils();
|
|
|
|
#endregion
|
|
|
|
#region area gestione config su DB
|
|
|
|
|
|
/// <summary>
|
|
/// Configurations da tabella DB COnfig
|
|
/// </summary>
|
|
/// <param name="chiave">Valore chiave</param>
|
|
/// <returns></returns>
|
|
public string configDbVal(string chiave)
|
|
{
|
|
string answ = "";
|
|
try
|
|
{
|
|
answ = taConfig.getByKey(chiave)[0].valore;
|
|
}
|
|
catch
|
|
{
|
|
answ = "";
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region area operatori
|
|
|
|
/// <summary>
|
|
/// oggetto elenco operatori, chiave codOperatore
|
|
/// </summary>
|
|
public Dictionary<string, string> elOperatori;
|
|
/// <summary>
|
|
/// resetta il vocabolario rileggendo i dati...
|
|
/// </summary>
|
|
public void resetElOperatori()
|
|
{
|
|
memLayer.ML.emptyCacheVal("elOperatori");
|
|
setupElOperatori();
|
|
}
|
|
/// <summary>
|
|
/// setup in ram elenco operatori
|
|
/// </summary>
|
|
private void setupElOperatori()
|
|
{
|
|
if (memLayer.ML.isInCacheObject("elOperatori"))
|
|
{
|
|
elOperatori = (Dictionary<string, string>)memLayer.ML.objCacheObj("elOperatori");
|
|
}
|
|
else
|
|
{
|
|
elOperatori = ricaricaElOperatori();
|
|
memLayer.ML.setCacheVal("elOperatori", elOperatori, false);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// ricarico elenco operatori
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private Dictionary<string, string> ricaricaElOperatori()
|
|
{
|
|
Dictionary<string, string> answ = new Dictionary<string, string>();
|
|
foreach (DS_Utility.v_selOperatoriRow riga in taSelOperatori.GetData())
|
|
{
|
|
answ.Add(riga.CodSoggetto, string.Format("{0} {1}", riga.Cognome, riga.Nome));
|
|
}
|
|
return answ;
|
|
}
|
|
/// <summary>
|
|
/// fornisce traduzione cognome nome da cod operatore (tab in ram)
|
|
/// </summary>
|
|
/// <param name="codOperatore"></param>
|
|
/// <returns></returns>
|
|
public string getOperatoreByCod(string codOperatore)
|
|
{
|
|
string answ = "n.d.";
|
|
try
|
|
{
|
|
answ = elOperatori[codOperatore];
|
|
}
|
|
catch
|
|
{ }
|
|
return answ;
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region area gestione rPI
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="CodMacchina"></param>
|
|
/// <param name="IPv4"></param>
|
|
/// <param name="agent"></param>
|
|
/// <returns></returns>
|
|
public inputComando registraStartup(string CodMacchina, string IPv4, string agent)
|
|
{
|
|
if (memLayer.ML.confReadInt("_logLevel") > 6)
|
|
{
|
|
logger.lg.scriviLog(string.Format("{0}---------------------------{0}Richiesta registrazione (ri)avvio Macchina {1}", Environment.NewLine, CodMacchina), tipoLog.INFO);
|
|
}
|
|
// formatto output
|
|
inputComando answ = new inputComando();
|
|
// scrivo remote reboot alive!
|
|
scriviRemoteReboot(CodMacchina, IPv4, agent);
|
|
// scrivo PRIMO keep alive
|
|
scriviPrimoKeepAlive(CodMacchina, DateTime.Now);
|
|
|
|
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// scrive un evento di keepalive sulla tabella
|
|
/// </summary>
|
|
/// <param name="IdxMacchina"></param>
|
|
/// <param name="oraMacchina"></param>
|
|
/// <returns></returns>
|
|
public void scriviKeepAlive(string IdxMacchina, DateTime oraMacchina)
|
|
{
|
|
#if false
|
|
// salvo in variabile boolean se registrare keep alive su db o meno
|
|
bool doWrite = false;
|
|
string nomeVar = string.Format("KA{0}", IdxMacchina);
|
|
// in primis controllo se in cache c'è oggetto keep alive x macchina... formato KA{ID-MACCHINA}
|
|
if (memLayer.ML.isInCacheObject(nomeVar))
|
|
{
|
|
// leggo data ora, se è + vecchia di corrente - kaMinUpdSec segno da aggiornare
|
|
DateTime adesso = DateTime.Now;
|
|
DateTime lastKA = DateTime.Now;
|
|
try
|
|
{
|
|
lastKA = (DateTime)memLayer.ML.objCacheObj(nomeVar);
|
|
}
|
|
catch
|
|
{ }
|
|
if (adesso.AddSeconds(-memLayer.ML.CRI("kaMinUpdSec")) > lastKA)
|
|
{
|
|
doWrite = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// non c'è in sessione, lo salvo
|
|
memLayer.ML.setCacheVal(nomeVar, oraMacchina);
|
|
// indico di fare refresh
|
|
doWrite = true;
|
|
}
|
|
if (doWrite)
|
|
{
|
|
try
|
|
{
|
|
if (memLayer.ML.confReadBool("forceResetKeepAlive"))
|
|
{
|
|
taKeepAlive.Connection.Close();
|
|
taKeepAlive.Connection.Open();
|
|
}
|
|
else
|
|
{
|
|
if (taKeepAlive.Connection.State == ConnectionState.Closed)
|
|
{
|
|
taKeepAlive.Connection.Open();
|
|
}
|
|
}
|
|
taKeepAlive.UpdateQueryNoStartTime(DateTime.Now, oraMacchina, IdxMacchina);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore in scrittura keep alive!{0}oraMacchina:{1} - IdxMacchina:{2}{0}{3}", Environment.NewLine, oraMacchina, IdxMacchina, exc), tipoLog.EXCEPTION);
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
/// <summary>
|
|
/// scrive un evento di start di keepalive sulla tabella
|
|
/// </summary>
|
|
/// <param name="IdxMacchina"></param>
|
|
/// <param name="oraMacchina"></param>
|
|
/// <returns></returns>
|
|
public void scriviPrimoKeepAlive(string IdxMacchina, DateTime oraMacchina)
|
|
{
|
|
#if false
|
|
// se non c'è riga macchina insert...
|
|
if (taKeepAlive.GetData().FindByIdxMacchina(IdxMacchina) == null)
|
|
{
|
|
taKeepAlive.Insert(IdxMacchina, DateTime.Now, oraMacchina, DateTime.Now);
|
|
}
|
|
else // altrimenti update!
|
|
{
|
|
taKeepAlive.UpdateQuery(DateTime.Now, oraMacchina, DateTime.Now, IdxMacchina);
|
|
}
|
|
#endif
|
|
}
|
|
/// <summary>
|
|
/// Registra un evento di RemoteReboot sulla tabella
|
|
/// </summary>
|
|
/// <param name="IdxMacchina"></param>
|
|
/// <param name="IPv4"></param>
|
|
/// <param name="agent"></param>
|
|
/// <returns></returns>
|
|
public void scriviRemoteReboot(string IdxMacchina, string IPv4, string agent)
|
|
{
|
|
taRRL.Insert(IdxMacchina, IPv4, agent, DateTime.Now);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|
|
public enum tipoCartellino
|
|
{
|
|
cartAL,
|
|
cartALRX,
|
|
cartALTT,
|
|
cartAnime,
|
|
cartFiniti,
|
|
cartFinitiSP,
|
|
cartFusi,
|
|
cartLiquidiF10,
|
|
cartLiquidiF18,
|
|
cartOdette,
|
|
cartMP,
|
|
cartSterr,
|
|
cartTara,
|
|
cartTratt,
|
|
cartWip,
|
|
cartND
|
|
}
|
|
public enum tipoSelettore
|
|
{
|
|
cdc,
|
|
cellaMagazzino,
|
|
magazzino,
|
|
UDC_byPart
|
|
}
|