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

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

@@ -17,7 +17,6 @@ public class HighLighterManager : MonoBehaviour, ISingle
public void ClickNotKPIToHighlight(Machine highLightMachine)
{
ActiveHighLighter(highLightMachine);
ActiveMachineKPI(highLightMachine);
}
public void ActiveHighLighter(Machine highLightMachine)
{
@@ -33,26 +32,6 @@ public class HighLighterManager : MonoBehaviour, ISingle
foreach (var machine in machines)
{
machine.DeactiveHighLighter();
if (machine.machineKPI != null)
{
machine.machineKPI.Shrink();
}
}
}
private void ActiveMachineKPI(Machine curentMachine)
{
foreach (var machine in machines)
{
if (machine.machineKPI != null)
{
machine.machineKPI.Shrink();
}
}
if (curentMachine.machineKPI != null)
{
curentMachine.machineKPI.Expand();
}
}
public void SetTargetPosToMachine(Machine machine)

View File

@@ -26,7 +26,8 @@ namespace CHN
public Vector3 originScale;
public float verticalSpacing = 100f;
public Action<Machine> onClickKPI;
public Action<Machine> onClickKPIToMachine;
public Action<SimpleField> onClickKPIToData;
[Range(0.1f, 0.8f)]
public float minScale;
@@ -34,34 +35,38 @@ namespace CHN
public float maxScale;
[Range(0.1f, 2f)]
public float scaleClamp;
public void SetMachineKPI(MachineKPIData machineKPIData)
public void Clear()
{
foreach (var item in machineKPIs)
{
Destroy(item.Value.gameObject);
}
uiElements.Clear();
machineKPIs.Clear();
matchingMachines.Clear();
kpiToMachines.Clear();
}
public void SetMachineKPI(List<SimpleField> machineData)
{
cam = FindSingle<OrbitalController>();
prefab_MachineKPI = Resources.Load<UI_MachineKPI>("Prefabs/UI/PRF_UI_MachineKPI");
foreach (var data in machineKPIData.data.rows)
{
if (machineKPIs.ContainsKey(data.workcd))
continue;
Clear();
foreach (var data in machineData)
{
if (machineKPIs.ContainsKey(data.machineName))
{
machineKPIs[data.machineName].SetData(data);
uiElements.Add(machineKPIs[data.machineName].rectTransform);
continue;
}
var machineKPI = Instantiate(prefab_MachineKPI, transform);
machineKPI.SetData(data);
machineKPI.onClickKPI += OnClickMachineKPI;
machineKPI.name = data.workcd;
machineKPI.name = data.machineName;
machineKPI.SetActive(false);
uiElements.Add(machineKPI.rectTransform);
kpis.Add(machineKPI);
machineKPIs.Add(data.workcd, machineKPI);
machineKPIs.Add(data.machineName, machineKPI);
}
var building = FindSingle<Building>();
@@ -83,38 +88,15 @@ namespace CHN
}
private void OnClickMachineKPI(UI_MachineKPI machineKPI)
{
foreach(var machine in machines)
{
if (machine.machineKPI != null)
{
machine.machineKPI.Shrink();
}
}
machineKPI.transform.SetAsLastSibling();
var currentMachine = kpiToMachines[machineKPI];
current_MachineKPI = machineKPI;
current_MachineKPI.Expand();
current_MachineKPI.transform.SetAsLastSibling();
onClickKPI?.Invoke(currentMachine);
onClickKPIToMachine?.Invoke(currentMachine);
onClickKPIToData?.Invoke(machineKPI.data);
}
private void Update()
{
GroupOverlappingUIElements();
RangeDetection();
RectangleContainsPoint();
}
private void RectangleContainsPoint()
{
if (Input.GetMouseButton(0))
{
if (current_MachineKPI == null)
return;
if(!RectTransformUtility.RectangleContainsScreenPoint(current_MachineKPI.DetailsKPI, Input.mousePosition))
{
current_MachineKPI.Shrink();
current_MachineKPI = null;
}
}
}
public List<RectTransform> uiElements = new List<RectTransform>();
public List<List<RectTransform>> groupedElements = new List<List<RectTransform>>();
@@ -168,6 +150,9 @@ namespace CHN
}
private bool AreRectanglesOverlapping(RectTransform rectA, RectTransform rectB)
{
if (!rectB.gameObject.activeSelf)
return false;
Rect rectAWorld = GetWorldRect(rectA);
Rect rectBWorld = GetWorldRect(rectB);

View File

@@ -12,6 +12,7 @@ namespace CHN
public Panel_Library library;
public Panel_WorkConditionAnalysis workConditionAnalysis;
public Panel_WorkTimeAnalysis workTimeAnalysis;
public Canvas_Popup canvas_popup;
public override void AfterAwake()
{
dashBoardCheckListBox = GetComponentInChildren<UI_DashboardCheckListBox>(true);
@@ -20,11 +21,13 @@ namespace CHN
library = FindSingle<Panel_Library>();
workConditionAnalysis = FindSingle<Panel_WorkConditionAnalysis>();
workTimeAnalysis = FindSingle<Panel_WorkTimeAnalysis>();
canvas_popup = FindSingle<Canvas_Popup>();
PlayerPrefs.SetInt("isCompleteAlramHistory", 1);
PlayerPrefs.SetInt("isLibrary", 1);
PlayerPrefs.SetInt("isWorkConditionAnalysis", 0);
PlayerPrefs.SetInt("isWorkTimeAnalysis", 0);
PlayerPrefs.SetInt("isSimpleMachineDashbard", 0);
SetDashBoardCheckListBox();
SetActive(false);
@@ -37,6 +40,7 @@ namespace CHN
dic.Add("라이브러리", library.gameObject);
dic.Add("작업 조건 분석", workConditionAnalysis.gameObject);
dic.Add("작업 시간 분석", workTimeAnalysis.gameObject);
dic.Add("설비 요약 대시 보드", canvas_popup.gameObject);
return dic;
}

View File

@@ -0,0 +1,159 @@
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using CHN;
using System;
using System.Globalization;
using WI;
public class Panel_DetailDashBoard : PanelBase
{
#region TextMeshProUGUI
private TextMeshProUGUI MachineName;
private TextMeshProUGUI wordno;
private TextMeshProUGUI sttm;
private TextMeshProUGUI totm;
private TextMeshProUGUI workseq;
private TextMeshProUGUI daynight;
private TextMeshProUGUI statusnm;
private TextMeshProUGUI workcd;
private TextMeshProUGUI itemcd;
private TextMeshProUGUI itemdesc;
private TextMeshProUGUI pjtcd;
private TextMeshProUGUI matcd;
private TextMeshProUGUI cavity;
private TextMeshProUGUI cycletime;
private TextMeshProUGUI moldData;
private TextMeshProUGUI eorate;
private TextMeshProUGUI workdt;
private TextMeshProUGUI planqty;
private TextMeshProUGUI goalqty;
private TextMeshProUGUI workqty;
private TextMeshProUGUI goodqty;
private TextMeshProUGUI badqty;
private TextMeshProUGUI badrate;
private TextMeshProUGUI efficiency;
private TextMeshProUGUI progressrate;
private TextMeshProUGUI porate;
private TextMeshProUGUI goodqtyrate;
#endregion
#region Slider
private Slider Slider_eorate;
private Slider Slider_planqty;
private Slider Slider_goalqty;
private Slider Slider_workqty;
private Slider Slider_goodqty;
private Slider Slider_badqty;
private Slider Slider_badrate;
private Slider Slider_efficiency;
private Slider Slider_progressrate;
private Slider Slider_porate;
private Slider Slider_goodqtyrate;
#endregion
private Button Button_Close;
public Action onCloseDashboard;
public override void AfterAwake()
{
Button_Close.onClick.AddListener(OnClickCloseButton);
gameObject.SetActive(false);
}
private void OnClickCloseButton()
{
onCloseDashboard?.Invoke();
gameObject.SetActive(false);
}
public void SetDetailDashBoardData(SimpleField data)
{
var canvas_popup = FindSingle<Canvas_Popup>();
if (canvas_popup.isSimpleDashboardAcitve)
return;
gameObject.SetActive(true);
SetTextData(data);
SetSliderData(data);
}
private void SetTextData(SimpleField data)
{
MachineName.SetText(data.machineInfo.worknm);
wordno.SetText(data.machineInfo.wordno);
sttm.SetText(CorrectionTime(data.machineInfo.sttm, "hh:mm"));
totm.SetText(CorrectionTime(data.machineInfo.totm, "hh:mm"));
daynight.SetText(data.machineInfo.daynight);
workseq.SetText(data.machineInfo.workseq);
statusnm.SetText(data.machineInfo.statusnm);
workcd.SetText(data.machineInfo.workcd);
itemcd.SetText(data.machineInfo.itemcd);
itemdesc.SetText(data.machineInfo.itemdesc);
pjtcd.SetText(data.machineInfo.pjtcd);
matcd.SetText(data.machineInfo.matcd);
cavity.SetText(data.machineInfo.cavity);
cycletime.SetText(data.machineInfo.cycletime);
moldData.SetText(data.machineInfo.MOLDCD);
planqty.SetText(data.machineInfo.planqty);
goalqty.SetText(data.machineInfo.goalqty);
workqty.SetText(data.machineInfo.workqty);
goodqty.SetText(data.machineInfo.goodqty);
badqty.SetText(data.machineInfo.badqty);
badrate.SetText(DecimalPointCalculate(data.machineInfo.badrate).ToString() + "%");
efficiency.SetText(DecimalPointCalculate(data.machineInfo.efficiency).ToString() + "%");
progressrate.SetText(DecimalPointCalculate(data.machineInfo.progressrate).ToString() + "%");
eorate.SetText(DecimalPointCalculate(data.kpiDataInfo.eorate).ToString() + "%");
porate.SetText(DecimalPointCalculate(data.kpiDataInfo.porate).ToString() + "%");
goodqtyrate.SetText(DecimalPointCalculate(data.kpiDataInfo.goodqtyrate).ToString() + "%");
workdt.SetText(CorrectionTime(data.machineInfo.workdt, "yyyy-MM-dd"));
}
private void SetSliderData(SimpleField data)
{
SetSliderValue(Slider_eorate, 100f, DecimalPointCalculate(data.kpiDataInfo.eorate));
SetSliderValue(Slider_planqty, DecimalPointCalculate(data.machineInfo.planqty), DecimalPointCalculate(data.machineInfo.planqty));
SetSliderValue(Slider_goalqty, DecimalPointCalculate(data.machineInfo.planqty), DecimalPointCalculate(data.machineInfo.goalqty));
SetSliderValue(Slider_workqty, DecimalPointCalculate(data.machineInfo.planqty), DecimalPointCalculate(data.machineInfo.workqty));
SetSliderValue(Slider_goodqty, DecimalPointCalculate(data.machineInfo.planqty), DecimalPointCalculate(data.machineInfo.goodqty));
SetSliderValue(Slider_badqty, DecimalPointCalculate(data.machineInfo.planqty), DecimalPointCalculate(data.machineInfo.badqty));
SetSliderValue(Slider_badrate, 100f, DecimalPointCalculate(data.machineInfo.badrate));
SetSliderValue(Slider_efficiency, 100f, DecimalPointCalculate(data.machineInfo.efficiency));
SetSliderValue(Slider_progressrate, 100f, DecimalPointCalculate(data.machineInfo.progressrate));
SetSliderValue(Slider_porate, 100f, DecimalPointCalculate(data.kpiDataInfo.porate));
SetSliderValue(Slider_goodqtyrate, 100f, DecimalPointCalculate(data.kpiDataInfo.goodqtyrate));
}
private void SetSliderValue(Slider slider, float max, float value)
{
slider.minValue = 0f;
slider.maxValue = max;
slider.value = value;
}
private bool CheckDataExists(string value)
{
if (value == null)
{
return false;
}
return true;
}
private float DecimalPointCalculate(string value)
{
if (!CheckDataExists(value))
{
return 0f;
}
var originFloatValue = float.Parse(value);
var floatValue = Mathf.Round(originFloatValue * 10f) / 10f;
return floatValue;
}
private string CorrectionTime(string value, string dateForm)
{
DateTime.TryParseExact(value, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsedDate);
return parsedDate.ToString(dateForm);
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 4b37d249840384748b25745e32b67620

View File

@@ -26,7 +26,7 @@ namespace CHN
var isBool = PlayerPrefs.GetInt(type) == 0 ? false : true;
toggle.isOn = isBool;
if(type != "isLibrary")
if (type != "isLibrary" && type != "isSimpleMachineDashbard")
{
dashboardItem.gameObject.SetActive(isBool);
}
@@ -99,6 +99,10 @@ namespace CHN
var workTimeAnalysis = dashboardItem.GetComponent<Panel_WorkTimeAnalysis>();
workTimeAnalysis.Open();
break;
case "isSimpleMachineDashbard":
var canvas_popup = dashboardItem.GetComponent<Canvas_Popup>();
canvas_popup.ActiveSimpleDashBoard();
break;
}
}
private void CloseDashBoardItem(string type)
@@ -117,6 +121,10 @@ namespace CHN
var workTimeAnalysis = dashboardItem.GetComponent<Panel_WorkTimeAnalysis>();
workTimeAnalysis.Close();
break;
case "isSimpleMachineDashbard":
var canvas_popup = dashboardItem.GetComponent<Canvas_Popup>();
canvas_popup.DeactiveSimpleDashBoard();
break;
}
}
@@ -137,6 +145,9 @@ namespace CHN
case ("작업 시간 분석"):
type = "isWorkTimeAnalysis";
break;
case ("설비 요약 대시 보드"):
type = "isSimpleMachineDashbard";
break;
}
return type;
}

View File

@@ -6,10 +6,13 @@ using TMPro;
using UnityEngine.EventSystems;
using WI;
using System;
using static MQTT;
using CHN;
public class UI_MachineKPI : UIBase, IPointerClickHandler
{
public KPIData data;
public SimpleField data;
public CompleteInfo completeInfoData;
public RectTransform DefaultKPI;
public RectTransform DetailsKPI;
@@ -19,33 +22,49 @@ public class UI_MachineKPI : UIBase, IPointerClickHandler
private TextMeshProUGUI Details_eorate;
private TextMeshProUGUI porate;
private TextMeshProUGUI goodqtyrate;
private TextMeshProUGUI lct;
private TextMeshProUGUI wct;
public bool isExpand;
private float eorate;
public Action<UI_MachineKPI> onClickKPI;
public void SetData(KPIData kpiData)
public void SetData(SimpleField data)
{
data = kpiData;
eorate = DecimalPointCalculate(kpiData.eorate);
Default_machineName.SetText(kpiData.worknm);
Details_machineName.SetText(kpiData.worknm);
Default_eorate.SetText(eorate.ToString() + "%");
Details_eorate.SetText(eorate.ToString() + "%");
lct.SetText(DecimalPointCalculate(kpiData.lct).ToString());
wct.SetText(DecimalPointCalculate(kpiData.wct).ToString());
goodqtyrate.SetText(DecimalPointCalculate(kpiData.goodqtyrate).ToString());
porate.SetText(DecimalPointCalculate(kpiData.porate).ToString());
this.data = data;
SetKPIData(data.kpiDataInfo);
SetMQTTData(data.machineInfo);
DetailsKPI.gameObject.SetActive(false);
}
private void SetKPIData(UsageKPIData kpiData)
{
eorate = DecimalPointCalculate(data.kpiDataInfo.eorate);
Default_eorate.SetText(eorate.ToString() + "%");
Details_eorate.SetText(eorate.ToString() + "%");
goodqtyrate.SetText(DecimalPointCalculate(data.kpiDataInfo.goodqtyrate).ToString());
porate.SetText(DecimalPointCalculate(data.kpiDataInfo.porate).ToString());
}
private bool CheckDataExists(string value)
{
if(value == null)
{
return false;
}
return true;
}
public void SetMQTTData(UsageMQTTData mqttData)
{
Default_machineName.SetText(mqttData.worknm);
Details_machineName.SetText(mqttData.worknm);
}
private float DecimalPointCalculate(string value)
{
if (!CheckDataExists(value))
{
return 0f;
}
var originFloatValue = float.Parse(value);
var floatValue = Mathf.Round(originFloatValue * 10f) / 10f;
@@ -55,24 +74,7 @@ public class UI_MachineKPI : UIBase, IPointerClickHandler
{
onClickKPI?.Invoke(this);
}
public void Expand()
{
if (!isExpand)
{
DefaultKPI.gameObject.SetActive(false);
DetailsKPI.gameObject.SetActive(true);
isExpand = true;
}
}
public void Shrink()
{
if (isExpand)
{
DefaultKPI.gameObject.SetActive(true);
DetailsKPI.gameObject.SetActive(false);
isExpand = false;
}
}
public void Active()
{
gameObject.SetActive(true);