Files
EnglewoodLAB/Assets/Scripts/UI/MachineDashBoard/MachineDashBoard.cs
SOOBEEN HAN f1894889ee <refactor> Octopus Twin 템플릿 적용
- 기능 외 UI 구조만 적용
- 프로젝트에 걸맞는 UI는 재작업 필요
2026-02-23 18:20:09 +09:00

281 lines
12 KiB
C#
Raw Blame History

using System;
using System.Globalization;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using Cysharp.Threading.Tasks;
using TMPro;
using EnglewoodLAB.UI;
using EnglewoodLAB.Management;
namespace EnglewoodLAB.UI
{
public class MachineDashBoard : UIPanel
{
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;
#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 TextMeshProUGUI AttributeName_10;
private Image Circle_10;
private Button Button_Close;
public Panel_Effect effect;
public override async UniTask Init()
{
MachineName = GetElement<TextMeshProUGUI>(nameof(MachineName));
wordno = GetElement<TextMeshProUGUI>(nameof(wordno));
sttm = GetElement<TextMeshProUGUI>(nameof(sttm));
totm = GetElement<TextMeshProUGUI>(nameof(totm));
workseq = GetElement<TextMeshProUGUI>(nameof(workseq));
daynight = GetElement<TextMeshProUGUI>(nameof(daynight));
statusnm = GetElement<TextMeshProUGUI>(nameof(statusnm));
workcd = GetElement<TextMeshProUGUI>(nameof(workcd));
itemcd = GetElement<TextMeshProUGUI>(nameof(itemcd));
itemdesc = GetElement<TextMeshProUGUI>(nameof(itemdesc));
pjtcd = GetElement<TextMeshProUGUI>(nameof(pjtcd));
matcd = GetElement<TextMeshProUGUI>(nameof(matcd));
cavity = GetElement<TextMeshProUGUI>(nameof(cavity));
cycletime = GetElement<TextMeshProUGUI>(nameof(cycletime));
moldData = GetElement<TextMeshProUGUI>(nameof(moldData));
eorate = GetElement<TextMeshProUGUI>(nameof(eorate));
workdt = GetElement<TextMeshProUGUI>(nameof(workdt));
planqty = GetElement<TextMeshProUGUI>(nameof(planqty));
goalqty = GetElement<TextMeshProUGUI>(nameof(goalqty));
workqty = GetElement<TextMeshProUGUI>(nameof(workqty));
goodqty = GetElement<TextMeshProUGUI>(nameof(goodqty));
badqty = GetElement<TextMeshProUGUI>(nameof(badqty));
badrate = GetElement<TextMeshProUGUI>(nameof(badrate));
efficiency = GetElement<TextMeshProUGUI>(nameof(efficiency));
progressrate = GetElement<TextMeshProUGUI>(nameof(progressrate));
porate = GetElement<TextMeshProUGUI>(nameof(porate));
goodqtyrate = GetElement<TextMeshProUGUI>(nameof(goodqtyrate));
Slider_eorate = GetElement<Slider>(nameof(Slider_eorate));
Slider_planqty = GetElement<Slider>(nameof(Slider_planqty));
Slider_goalqty = GetElement<Slider>(nameof(Slider_goalqty));
Slider_workqty = GetElement<Slider>(nameof(Slider_workqty));
Slider_goodqty = GetElement<Slider>(nameof(Slider_goodqty));
Slider_badqty = GetElement<Slider>(nameof(Slider_badqty));
Slider_badrate = GetElement<Slider>(nameof(Slider_badrate));
Slider_efficiency = GetElement<Slider>(nameof(Slider_efficiency));
Slider_progressrate = GetElement<Slider>(nameof(Slider_progressrate));
Slider_porate = GetElement<Slider>(nameof(Slider_porate));
Slider_goodqtyrate = GetElement<Slider>(nameof(Slider_goodqtyrate));
AttributeName_10 = GetElement<TextMeshProUGUI>(nameof(AttributeName_10));
Circle_10 = GetElement<Image>(nameof(Circle_10));
Button_Close = GetElement<Button>(nameof(Button_Close));
Button_Close.onClick.AddListener(Close);
await UniTask.CompletedTask;
}
public override void Open()
{
gameObject.SetActive(true);
effect.ActivePanel();
gameObject.transform.SetAsLastSibling();
}
public override void Close()
{
effect.DeactivePanel();
gameObject.SetActive(false);
gameObject.transform.SetAsLastSibling();
}
public void SetDetailDashBoardData(CompleteInfo data, Machine machine)
{
SetTextData(data, machine);
SetSliderData(data);
}
private void SetTextData(CompleteInfo data, Machine machine)
{
MachineName.SetText(SetNameData(data.worknm, machine?.machineName ?? ""));
wordno.SetText(SetTextData(data.wordno));
sttm.SetText(CorrectionTime(data.sttm, "hh:mm"));
totm.SetText(CorrectionTime(data.totm, "hh:mm"));
daynight.SetText(SetTextData(data.daynight));
workseq.SetText(SetTextData(data.workseq));
statusnm.SetText(SetTextData(data.statusnm));
workcd.SetText(SetTextData(data.workcd));
itemcd.SetText(SetTextData(data.itemcd));
itemdesc.SetText(SetTextData(data.itemdesc));
pjtcd.SetText(SetTextData(data.pjtcd));
matcd.SetText(SetTextData(data.matcd));
cavity.SetText(SetTextData(data.cavity));
cycletime.SetText(SetTextData(data.cycletime));
planqty.SetText(SetTextData(data.planqty));
goalqty.SetText(SetTextData(data.goalqty));
workqty.SetText(SetTextData(data.workqty));
goodqty.SetText(SetTextData(data.goodqty));
badqty.SetText(SetTextData(data.badqty));
badrate.SetText(DecimalPointCalculate(data.badrate).ToString() + "%");
efficiency.SetText(DecimalPointCalculate(data.efficiency).ToString() + "%");
progressrate.SetText(DecimalPointCalculate(data.progressrate).ToString() + "%");
eorate.SetText(DecimalPointCalculate(data.eorate).ToString() + "%");
porate.SetText(DecimalPointCalculate(data.porate).ToString() + "%");
goodqtyrate.SetText(DecimalPointCalculate(data.goodqtyrate).ToString() + "%");
workdt.SetText(CorrectionMonthDay(data.workdt, "yyyy-MM-dd"));
SetMoldData(machine, data);
}
private void SetSliderData(CompleteInfo data)
{
SetSliderValue(Slider_eorate, 100f, DecimalPointCalculate(data.eorate));
SetSliderValue(Slider_planqty, DecimalPointCalculate(data.planqty), DecimalPointCalculate(data.planqty));
SetSliderValue(Slider_goalqty, DecimalPointCalculate(data.planqty), DecimalPointCalculate(data.goalqty));
SetSliderValue(Slider_workqty, DecimalPointCalculate(data.planqty), DecimalPointCalculate(data.workqty));
SetSliderValue(Slider_goodqty, DecimalPointCalculate(data.planqty), DecimalPointCalculate(data.goodqty));
SetSliderValue(Slider_badqty, DecimalPointCalculate(data.planqty), DecimalPointCalculate(data.badqty));
SetSliderValue(Slider_badrate, 100f, DecimalPointCalculate(data.badrate));
SetSliderValue(Slider_efficiency, 100f, DecimalPointCalculate(data.efficiency));
SetSliderValue(Slider_progressrate, 100f, DecimalPointCalculate(data.progressrate));
SetSliderValue(Slider_porate, 100f, DecimalPointCalculate(data.porate));
SetSliderValue(Slider_goodqtyrate, 100f, DecimalPointCalculate(data.goodqtyrate));
}
private void SetMoldData(Machine machine, CompleteInfo data)
{
if (machine == null)
{
Circle_10.gameObject.SetActive(false);
AttributeName_10.SetText("");
moldData.SetText("");
return;
}
var moldDataTitle = "";
var moldDataValue = "";
if (machine.typeOptions.Count() > 1)
{
Circle_10.gameObject.SetActive(true);
if (machine.typeOptions[1].Contains("<22><><EFBFBD><EFBFBD>") || machine.typeOptions[1].Contains("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"))
{
moldDataTitle = "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>";
moldDataValue = data.moldseq;
}
else if (machine.typeOptions[1].Contains("<22><><EFBFBD><EFBFBD>"))
{
moldDataTitle = "<22><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>";
moldDataValue = data.moldcd;
}
}
else
{
Circle_10.gameObject.SetActive(false);
}
AttributeName_10.SetText(moldDataTitle);
moldData.SetText(moldDataValue);
}
private string SetNameData(string value, string machineName)
{
if (value == string.Empty || value == null)
{
return machineName;
}
return value;
}
private string SetTextData(string value)
{
if (value == string.Empty || value == null)
{
return "-";
}
return value;
}
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 == string.Empty || 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 CorrectionMonthDay(string value, string dateForm)
{
if (value == string.Empty || value == null)
{
return "-";
}
DateTime.TryParseExact(value, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsedDate);
return parsedDate.ToString(dateForm);
}
private string CorrectionTime(string value, string dateForm)
{
if (value == string.Empty || value == null)
{
return "-";
}
DateTime.TryParseExact(value, "hhmm", CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsedDate);
return parsedDate.ToString(dateForm);
}
}
}