설비 상세 대시 보드 기능 추가

This commit is contained in:
정영민
2025-04-24 08:36:29 +09:00
parent 7d48614334
commit cacf21f946
68 changed files with 546245 additions and 48216 deletions

View File

@@ -5,32 +5,46 @@ using static MQTT;
using WI;
using System.Text.RegularExpressions;
using UnityEngine;
using System.Linq;
namespace CHN
{
public class DataManager : MonoBehaviour, ISingle
{
private Machine[] machines;
public Action<Machine, SimpleField> onCompleteInfo;
public Action<Machine, SimpleField> onSimpleInfo;
private Dictionary<string, DashBoardData> machineTable = new();
private Dictionary<string, SimpleField> includeFields = new();
public Action<List<SimpleField>> onKPIInfo;
private Dictionary<string, UsageMQTTData> mqttDataTable = new();
private Dictionary<string, UsageKPIData> kpiDataTable = new();
public SDictionary<string, SimpleField> includeFields = new();
public Dictionary<string, SimpleField> simpleFields = new();
private HashSet<string> samples = new();
private List<SimpleField> simpleField;
private string simplePath;
public KPIData kpiData;
public override void AfterAwake()
{
var machines = FindObjectsByType<Machine>(FindObjectsSortMode.None);
machines = FindObjectsByType<Machine>(FindObjectsSortMode.None);
foreach (var machine in machines)
{
if (string.IsNullOrEmpty(machine.code))
continue;
if (machineTable.ContainsKey(GapRemove(machine.code)))
if (mqttDataTable.ContainsKey(GapRemove(machine.code)))
continue;
machineTable.Add(GapRemove(machine.code), new());
mqttDataTable.Add(GapRemove(machine.code), new());
if (kpiDataTable.ContainsKey(GapRemove(machine.code)))
continue;
kpiDataTable.Add(GapRemove(machine.code), new());
}
var fileds = typeof(DashBoardData).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var fileds = typeof(UsageMQTTData).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
//simpleField= JsonConvert.DeserializeObject<List<SimpleField>>(simplePath);
for (int i = 0; i < 4; i++)
{
@@ -38,17 +52,66 @@ namespace CHN
}
}
public void SetKPIData(MachineKPIData machineKPIData)
{
foreach(var rows in machineKPIData.data.rows)
{
var id = rows.workcd;
var name = GapRemove(id);
if (kpiDataTable.ContainsKey(name))
{
kpiDataTable[name] = SetUsageKPIData(rows);
}
}
SetMachineData();
}
public void MachineMatching(List<CompleteInfo> machineInfos)
{
foreach (CompleteInfo info in machineInfos)
{
var id = info.workcd;
var name = GapRemove(id);
if (machineTable.ContainsKey(name))
if (mqttDataTable.ContainsKey(name))
{
machineTable[name] = SetDashboardMQTTData(info);
mqttDataTable[name] = SetUsageMQTTData(info);
}
}
SetMachineData();
}
private void SetMachineData()
{
foreach(var machine in machines)
{
if (string.IsNullOrEmpty(machine.code))
return;
var machineName = GapRemove(machine.code);
if (!includeFields.ContainsKey(machineName))
{
var simpleData = new SimpleField();
simpleData.machineName = machineName;
simpleData.machineInfo = new UsageMQTTData();
simpleData.kpiDataInfo = new UsageKPIData();
simpleData.simpleField = samples;
includeFields.Add(machineName, simpleData);
}
if (mqttDataTable.Count != 0)
{
includeFields[machineName].machineInfo = mqttDataTable[machineName];
}
if(kpiDataTable.Count != 0)
{
includeFields[machineName].kpiDataInfo = kpiDataTable[machineName];
}
}
onKPIInfo.Invoke(includeFields.Values.ToList());
}
public void GetSimpleCompleteData(Machine machine)
@@ -58,27 +121,17 @@ namespace CHN
var machineName = GapRemove(machine.code);
if (includeFields.ContainsKey(machineName))
{
includeFields[machineName].machineInfo = machineTable[machineName];
includeFields[machineName].machineInfo = mqttDataTable[machineName];
}
else
{
var simpleTest = new SimpleField();
simpleTest.machineName = machineName;
simpleTest.machineInfo = machineTable[machineName];
simpleTest.machineInfo = mqttDataTable[machineName];
simpleTest.simpleField = samples;
includeFields.Add(machineName, simpleTest);
}
//foreach(var simple in simpleField)
//{
// var machineName = GapRemove(machine.name);
// if (simple.machineName.Equals(machineName))
// {
// simple.machineInfo = machineTable[machineName];
// onSimpleInfo?.Invoke(simple);
// break;
// }
//}
onSimpleInfo?.Invoke(machine, includeFields[machineName]);
}
@@ -105,47 +158,69 @@ namespace CHN
{
return Regex.Replace(name, @"\s", "");
}
private DashBoardData SetDashboardMQTTData(CompleteInfo completeInfos)
private UsageKPIData SetUsageKPIData(KPIData kpiData)
{
var dashboardData = new DashBoardData();
var usageKPIData = new UsageKPIData();
dashboardData.wordno = completeInfos.wordno;
dashboardData.workdt = completeInfos.workdt;
dashboardData.daynight = completeInfos.daynight;
dashboardData.workcd = completeInfos.workcd;
dashboardData.worknm = completeInfos.worknm;
dashboardData.workseq = completeInfos.workseq;
dashboardData.statusnm = completeInfos.statusnm;
dashboardData.itemcd = completeInfos.itemcd;
dashboardData.itemdesc = completeInfos.itemdesc;
dashboardData.pjtcd = completeInfos.pjtcd;
dashboardData.matcd = completeInfos.matcd;
dashboardData.cycletime = completeInfos.cycletime;
dashboardData.cavity = completeInfos.cavity;
dashboardData.planqty = completeInfos.planqty;
dashboardData.goalqty = completeInfos.goalqty;
dashboardData.workqty = completeInfos.workqty;
dashboardData.goodqty = completeInfos.goodqty;
dashboardData.badqty = completeInfos.badqty;
dashboardData.badrate = completeInfos.badrate;
dashboardData.efficiency = completeInfos.efficiency;
dashboardData.progressrate = completeInfos.progressrate;
dashboardData.sttm = completeInfos.sttm;
dashboardData.totm = completeInfos.totm;
usageKPIData.eorate = kpiData.eorate;
usageKPIData.porate = kpiData.porate;
usageKPIData.goodqtyrate = kpiData.goodqtyrate;
return dashboardData;
return usageKPIData;
}
private UsageMQTTData SetUsageMQTTData(CompleteInfo completeInfos)
{
var usageMQTTData = new UsageMQTTData();
usageMQTTData.wordno = completeInfos.wordno;
usageMQTTData.workdt = completeInfos.workdt;
usageMQTTData.daynight = completeInfos.daynight;
usageMQTTData.workcd = completeInfos.workcd;
usageMQTTData.worknm = completeInfos.worknm;
usageMQTTData.workseq = completeInfos.workseq;
usageMQTTData.statusnm = completeInfos.statusnm;
usageMQTTData.itemcd = completeInfos.itemcd;
usageMQTTData.itemdesc = completeInfos.itemdesc;
usageMQTTData.pjtcd = completeInfos.pjtcd;
usageMQTTData.matcd = completeInfos.matcd;
usageMQTTData.cycletime = completeInfos.cycletime;
usageMQTTData.cavity = completeInfos.cavity;
usageMQTTData.planqty = completeInfos.planqty;
usageMQTTData.goalqty = completeInfos.goalqty;
usageMQTTData.workqty = completeInfos.workqty;
usageMQTTData.goodqty = completeInfos.goodqty;
usageMQTTData.badqty = completeInfos.badqty;
usageMQTTData.badrate = completeInfos.badrate;
usageMQTTData.efficiency = completeInfos.efficiency;
usageMQTTData.progressrate = completeInfos.progressrate;
usageMQTTData.sttm = completeInfos.sttm;
usageMQTTData.totm = completeInfos.totm;
return usageMQTTData;
}
}
[Serializable]
public class SimpleField
{
public string machineName;
public DashBoardData machineInfo;
public UsageKPIData kpiDataInfo;
public UsageMQTTData machineInfo;
public HashSet<string> simpleField;
}
[Serializable]
public class DashBoardData
public class UsageKPIData
{
public string eorate;
public string porate;
public string goodqtyrate;
}
[Serializable]
public class UsageMQTTData
{
public string wordno;
public string workdt;