Files
NKC/AppData/ComLib.cs
T
2019-08-21 12:24:58 +02:00

335 lines
7.7 KiB
C#

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