using StackExchange.Redis; namespace MP.Core { public class Utils { #region Public Fields public const string redisActionReq = redisBaseAddr + "Action:Req"; public const string redisAKVKey = redisBaseAddr + "Cache:AKV"; public const string redisAnagGruppi = redisBaseAddr + "Cache:AnagGruppi"; public const string redisAnagStati = redisBaseAddr + "Cache:AnagStati"; public const string redisArtByDossier = redisBaseAddr + "Cache:ArtByDossier"; public const string redisArtList = redisBaseAddr + "Cache:ArtList"; public const string redisBaseAddr = "MP:"; public const string redisConfFlux = redisBaseAddr + "Cache:ConfFlux"; public const string redisConfKey = redisBaseAddr + "Cache:Config"; public const string redisDecNumArtKey = redisBaseAddr + "Cache:DecNumArt"; public const string redisDossByMac = redisBaseAddr + "Cache:DossByMac"; public const string redisDossByMacLast = redisBaseAddr + "Cache:DossByMacLast"; public const string redisEventList = redisBaseAddr + "Cache:EventList"; public const string redisFluxByMac = redisBaseAddr + "Cache:FluxByMac"; public const string redisFluxByMacFirst = redisBaseAddr + "Cache:FluxByMacFirst"; public const string redisFluxLogFilt = redisBaseAddr + "Cache:FluxLogFilt"; public const string redisGiacenzaList = redisBaseAddr + "Cache:GiacenzaList"; public const string redisKit = redisBaseAddr + "Cache:Kit"; public const string redisKitInst = redisBaseAddr + "Cache:Kit:Inst"; public const string redisKitScore = redisBaseAddr + "Cache:Kit:Score"; public const string redisKitTempl = redisBaseAddr + "Cache:Kit:Templ"; public const string redisKitWip = redisBaseAddr + "Cache:Kit:Wip"; public const string redisMacByFlux = redisBaseAddr + "Cache:MacByFlux"; public const string redisMacList = redisBaseAddr + "Cache:MacList"; public const string redisMacRecipeConf = redisBaseAddr + "Cache:RecipeConf"; public const string redisMacRecipePath = redisBaseAddr + "Cache:RecipePath"; public const string redisOdlByBatch = redisXdlData + "OdlByBatch"; public const string redisOdlCurrByMac = redisXdlData + "OdlByMac"; public const string redisOdlLastByMac = redisXdlData + "LastOdlByMac"; public const string redisOdlList = redisXdlData + "OdlList"; public const string redisOprList = redisBaseAddr + "Cache:OprList"; public const string redisParamPageExp = redisBaseAddr + "Cache:ParamPage"; public const string redisParetoFLKey = redisBaseAddr + "Cache:ParetoFL"; public const string redisPOdlByCodArt = redisXdlData + "POdlByCodArt"; public const string redisPOdlByMaccArt = redisXdlData + "POdlByMaccArt"; public const string redisPOdlByOdl = redisXdlData + "POdlByOdl"; public const string redisPOdlByPOdl = redisXdlData + "POdlByPOdl"; public const string redisPOdlList = redisXdlData + "POdlList"; public const string redisRecipeConf = redisBaseAddr + "Cache:Recipe:Conf"; public const string redisRemRebLog = redisBaseAddr + "Cache:RemReb"; public const string redisStatoCom = redisBaseAddr + "Cache:StatoCom"; public const string redisStatoMacch = redisBaseAddr + "Cache:StatoMacch"; public const string redisStatoProd = redisBaseAddr + "Cache:StatoProd"; public const string redisStatsDbMaint = redisBaseAddr + "Stats:DbMaint"; public const string redisStatsProcFL = redisBaseAddr + "Stats:ProcessFL"; public const string redisTipoArt = redisBaseAddr + "Cache:TipoArt"; public const string redisVetoSplitOdl = redisBaseAddr + "Cache:VetoOdlMacc"; public const string redisVocabolario = redisBaseAddr + "Cache:Vocabolario"; public const string redisXdlData = redisBaseAddr + "Cache:XDL:"; #endregion Public Fields #region Public Properties public static string redKeyArtUsed { get => RedHash($"SPEC:Cache:CheckArtUsed"); } public static string redKeyTabCheckArt { get => RedHash($"CACHE:TabCheckArt"); } #endregion Public Properties #region Public Methods /// /// Effettua la masking di un valore (INT) rispetto ad una BitMask (INT) /// /// Valore da filtrare /// BitMask (espresso in valore INT: es 1001 --> 9) /// public static int bMaskInt(int valore, int bitMask) { return valore & bitMask; } public static string ConvMinToTime(double minutes) { // FIXME TODO: da rendere parametrico da appsettings.json... var ts = TimeSpan.FromMinutes(minutes); string answ = $"{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}"; //.{ts.Milliseconds} return answ; } public static string ConvMsecToTime(long milliseconds) { // FIXME TODO: da rendere parametrico da appsettings.json... var ts = TimeSpan.FromMilliseconds(milliseconds); string answ = $"{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}"; //.{ts.Milliseconds} return answ; } public static string FormDurata(double durataMinuti) { string answ = ""; TimeSpan tsDurata = TimeSpan.FromMinutes(durataMinuti); if (tsDurata.TotalDays < 1) { answ = $"{tsDurata.Hours:00}h {tsDurata.Minutes:00}'"; } else { answ = $"{tsDurata.Days}gg {tsDurata.Hours:00}h"; } return answ; } /// /// RedisKey calcolata x tabella HSI /// /// /// public static RedisKey GetHashSMI(int idxFamIn) { return (RedisKey)$"{redisBaseAddr}GetHashSMI:{idxFamIn}"; } /// /// Inizializzazione con periodo e arrotondamento /// /// /// public static DateTime InitDatetime(DateTime dtRif, int minRound) { TimeSpan DayElapsed = dtRif.Subtract(dtRif.Date); int minDay = (int)Math.Ceiling((double)(DayElapsed.TotalMinutes / minRound)) * minRound; DateTime endRounded = DateTime.Today.AddMinutes(minDay); return endRounded; } /// /// Nome della variabile HASH da utilizzare (dato CodModulo / Server / DB impiegato da /// funzionalita' DbConfig) + idxMacchina richiesto... /// public static RedisKey RedHash(string keyName) { return (RedisKey)$"MP:Data:{keyName}"; } /// /// Chiave x CurrObjItems macchina /// /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// public static RedisKey RedKeyCurrObjItems(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:CurrentParameters:{idxMacchina}"; } /// /// Hash dati STATUS x la macchina specificata /// /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// public static RedisKey RedKeyDatiMacc(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:DtMac:{idxMacchina}"; } /// /// Formato RedisKey delal chaive richeista (completa) /// public static RedisKey RedKeyHash(string keyName) { return (RedisKey)$"{redisBaseAddr}{keyName}"; } /// /// Hash dati MemMap di un IOB /// /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// public static RedisKey RedKeyIobConfYaml(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:IOB:{idxMacchina}:ConfYaml"; } /// /// Hash dati MemMap di un IOB /// /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// public static RedisKey RedKeyIobMemMap(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:MemMap:{idxMacchina}"; } /// /// Hash dati ultimo FluxLog ricevuto (ex LiveFLogKeyHash) /// /// /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// public static RedisKey RedKeyLastFLog(string idxMacchina, string flog, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:FLOG:{idxMacchina}:{flog}"; } /// /// Hash associazione Iob e macchina acquisizione (WIN) /// /// /// /// public static RedisKey RedKeyMach2Iob(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:hM2IOB:{idxMacchina}"; } /// /// Hash dati Conf Iob /// /// /// /// public static RedisKey RedKeyMachIobConf(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:IOB:{idxMacchina}:MachIobConf"; } /// /// Hash dati Macchine Multi SM Ingressi /// /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// public static RedisKey RedKeyMsmi(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:hMSMI:{idxMacchina}"; } /// /// Key variabile OptPar calcolata x idxMacchina (ex optParHash) /// /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// public static RedisKey RedKeyOptPar(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:OptPar:{idxMacchina}"; } /// /// Hash dati countapezzi macchina /// /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// public static RedisKey RedKeyPzCount(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:PzCount:{idxMacchina}"; } /// /// Hash dati SAVED (EXE) TASK x la macchina specificata x poter ripristinare in caso di /// perdita valore WRITE (ex savedTaskHash) /// /// /// public static RedisKey RedKeySavedTask2ExeMacc(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:SavedTask:{idxMacchina}"; } /// /// Hash dati Task2Exe x la macchina specificata (ex exeTaskHash) /// /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// public static RedisKey RedKeyTask2ExeMacc(string idxMacchina, string baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:ExeTask:{idxMacchina}"; } /// /// Formato RedisValue delal chaive richeista (completa) /// public static RedisValue RedValue(string keyName) { return (RedisValue)$"{redisBaseAddr}{keyName}"; } #endregion Public Methods } }