using Newtonsoft.Json; using SteamWare; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AppData { /// /// Classe con metodi di supporto per COMUNICAZIONE /// public class ComLib { #region definizione classi impiegate con PROD /// /// Stati degli oggetti TAKT e Stack /// public enum CStatus { /// /// Programmato /// Programmed = 0, /// /// In corso /// Running, /// /// Completato /// Done } /// /// Stati degli oggetti Batch /// public enum BatchStatus { /// /// CSV importato /// Imported = 0, /// /// Nesting richiesto (In corso) /// NestRequested, /// /// Nesting Completato /// NestDone, /// /// Nesting approvato /// Approved, /// /// Nesting scartato /// Discarded } /// /// Stati degli oggetti PANEL/SHEET /// public enum PStatus { /// /// Programmato /// Programmed = 0, /// /// Presente / letto su PROD e pronto su scissor lift /// Present, /// /// Stampa in corso /// Printing, /// /// Stampa completata /// Printed, /// /// Lavorazione in corso /// Machining, /// /// Lavorazione completata /// Machined, /// /// Completato / scaricato da macchina (anche su tavola di scarico) /// Out } /// /// dati del materiale /// public class MaterialData { /// /// Identificativo univoco del materiale (DA ANAGRAFICA db) /// public int MaterialId { get; set; } /// /// Codice P/N del materiale (cliente) /// public string MaterialPN { get; set; } /// /// Codice P/N del materiale (cliente) /// public string MaterialDescription { get; set; } } /// /// Dati delal lavorazione /// public class WorkData { /// /// Percorso del programma da eseguire /// public string ProgramPath { get; set; } /// /// Data inizio processing /// public DateTime DtStart { get; set; } /// /// Data fine processing /// public DateTime DtEnd { get; set; } /// /// Tempo di lavorazione in minuti decimali /// public double WorkTimeMin { get { double answ = 0; if (DtStart != null && DtEnd != null) { try { answ = DtEnd.Subtract(DtStart).TotalMinutes; } catch { } } return answ; } } } /// /// Singolo Pannello da lavorare /// public class Panel { /// /// Identificativo univoco pannello /// public int PanelId { get; set; } /// /// Materiale /// public MaterialData Material { get; set; } /// /// Stato del pannello /// public PStatus Status { get; set; } /// /// Tempi processo x fase printing /// public WorkData Printing { get; set; } /// /// Tempi processo x fase CNC /// public WorkData Machining { get; set; } /// /// Tempi processo x scarico /// public WorkData Unloading { get; set; } } /// /// Classe che rappresenta gli stack da lavorare /// public class WStack { /// /// Identificativo univoco stack /// public int StackId { get; set; } /// /// Stato dello Stack di pannelli /// public CStatus Status { get; set; } /// /// Codice dataMAtrix dello stack /// public string DataMatrix { get; set; } /// /// Data inizio processing dello Stack /// public DateTime DtStart { get; set; } /// /// Data inizio processing dello Stack /// public DateTime DtEnd { get; set; } /// /// Elenco dei pannelli(sheets) dello Stack /// public List PanelsList { get; set; } /// /// Numero di Panels da lavorare /// public int NumPanels { get { int answ = 0; try { answ = PanelsList.Count; } catch { } return answ; } } } /// /// Oggetto globale TAKT /// public class Takt { /// /// Codice univoco oggetto TAKT (data.num) /// public string TaktId { get; set; } /// /// Stato del TAKT /// public CStatus Status { get; set; } /// /// Elenco degli Stack da lavorare /// public List StackList { get; set; } /// /// Numero di Stack da lavorare /// public int NumStack { get { int answ = 0; try { answ = StackList.Count; } catch { } return answ; } } } #endregion #region definizione classi impiegate con NEST /// /// Classe gestione richeiste di processing per il NESTING /// public class BatchReq { } #endregion #region metodi helper di conversione /// /// Helper x serializzare l'oggetto /// /// /// public static string serializeTakt(Takt currData) { string answ = JsonConvert.SerializeObject(currData); return answ; } /// /// Helper x deserializzare l'oggetto /// /// /// public static Takt deserializeTakt(string rawData) { Takt answ = JsonConvert.DeserializeObject(rawData); return answ; } #endregion #region metodi x data persistence /// /// Salvo il Takt inviato /// /// Origine del dato: SERV / PROD / NEST /// /// public static bool saveTakt(string origin, Takt currData) { bool answ = false; try { // calcolo valori redis string redKey = $"NKC:{origin.ToUpper()}:TAKT:{currData.TaktId}"; string redVal = serializeTakt(currData); // scrivo per ora solo su REDIS memLayer.ML.setRSV(redKey, redVal); answ = true; } catch { } return answ; } /// /// Salvo il Takt inviato /// /// Origine del dato: SERV / PROD / NEST /// /// public static Takt readTakt(string origin, string TaktId) { Takt answ = null; try { string redKey = $"NKC:{origin.ToUpper()}:TAKT:{TaktId}"; string redVal = memLayer.ML.getRSV(redKey); answ = deserializeTakt(redVal); } catch { } return answ; } #endregion #region metodi per PROD /// /// Fornisce il prossimo TAKT da elaborare oppure null se non ce ne fossero altri da elaborare per la data CORRENTE /// /// public Takt prodGetNextTakt() { return null; } #endregion } }