설비 상세 대시 보드 기능 추가
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
159
Assets/WorkSpace/Personal/JYM/Panel_DetailDashBoard.cs
Normal file
159
Assets/WorkSpace/Personal/JYM/Panel_DetailDashBoard.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4b37d249840384748b25745e32b67620
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user