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
}
}