Sic.Framework/MECF.Framework.UI.Core/TrayCoating/CoatingManager.cs

167 lines
6.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.OperationCenter;
using Aitex.Core.Util;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Windows.Threading;
using static System.Net.Mime.MediaTypeNames;
namespace MECF.Framework.UI.Core.TrayCoating
{
public class CoatingManager : Singleton<CoatingManager>
{
private const int MAX_TRAY_COUNT = 8;
public CoatingManager()
{
ThicknessCollection = new List<TrayCoatingThickness>();
pm_TrayCoatingThickness = new TrayCoatingThickness(true);
for (int i = 0; i < MAX_TRAY_COUNT; i++)
{
ThicknessCollection.Add(new TrayCoatingThickness((i + 1).ToString()));
}
QueryUpdate();
}
static List<CoatingData> coatingData = new List<CoatingData>();
public static TrayCoatingThickness pm_TrayCoatingThickness { get; set; }
public static List<TrayCoatingThickness> ThicknessCollection { get; set; }
private static CoatingSqlHelp coatingSqlHelp = new CoatingSqlHelp();
public string ThicknessCollectionData { get; set; }
static Action action;
public void Initialize()
{
InitData();
}
private void InitData()
{
//action += ShowUI;
DATA.Subscribe("TrayCoatingData", () => GetCoatingDataJsonString());
OP.Subscribe("CoatingManager.QueryUpdate", (string cmd, object[] args) => QueryUpdate());
OP.Subscribe("CoatingManager.Clear", (string cmd, object[] args) => Clear(args));
OP.Subscribe("CoatingManager.Set", (string cmd, object[] args) => Set(args));
}
private static readonly object locker=new object();
//打包数据源,界面更新使用
private string GetCoatingDataJsonString()
{
lock(locker)
{
return JsonConvert.SerializeObject(coatingData);
}
}
public static bool QueryUpdate()//从数据库整体更新所有数据,在初始化和数据操作后更新
{
coatingData.Clear();
TrayCoatingThickness _trayCoatingThickness = coatingSqlHelp.GetCoatingData("PM");
CoatingDataUpData(pm_TrayCoatingThickness, _trayCoatingThickness);
for (int i = 0; i < MAX_TRAY_COUNT; i++)
{
TrayCoatingThickness trayCoatingThickness = coatingSqlHelp.GetCoatingData((i + 1).ToString());
CoatingDataUpData(ThicknessCollection[i], trayCoatingThickness);
}
return true;
}
private bool Clear(object[] args)//设置当前生长厚度为0操作数据为一行
{
coatingSqlHelp.Cmd_Clear_Coating(args[0].ToString(),out _);
QueryUpdate();
return true;
}
private bool Set(object[] args)//设置一行数据
{
CoatingData coatingData = JsonConvert.DeserializeObject<CoatingData>(args[0].ToString());
coatingSqlHelp.Cmd_Set_update(coatingData, CmdFactor(coatingData), out _);
return true;
}
public static bool Grow(object[] args)//Process完成后更新生长厚度操作对象Tray PM
{
coatingSqlHelp.GrowTray(args[0].ToString(),Convert.ToDouble(args[1]), Convert.ToDouble(args[2]));
coatingSqlHelp.GrowPM(args[3].ToString(), Convert.ToDouble(args[1]), Convert.ToDouble(args[2]));
QueryUpdate();
//InspectClean(args[0].ToString());
//InspectClean(args[3].ToString());
return true;
}
private static bool InspectClean(string id) //检查当前厚度是否大于设定厚度操作对象Tray PM
{
if (id.Contains("PM"))
id = "PM";
List<string> growList = coatingSqlHelp.MustCleanTray(id);
for (int i = 0; i < growList.Count/2; i++)
{
if (Convert.ToDouble( growList[i*2]) >= Convert.ToDouble(growList[i*2+1]))//当前值大于设定值,传入参数最好加入提示
{
string str = "";
if (id=="PM")
str = "PM腔体";
else
str = $"Tray盘 {id}";
str += " --> Coating 当前值大于设定值";
Dispatcher.CurrentDispatcher.Invoke(action);
return true;
}
}
return true;
}
public void ShowUI()
{
//Dispatcher.Invoke(new Action(() =>
//{
// InspectCleanView inspectCleanView = new InspectCleanView();
// inspectCleanView.SetShow("123123");
// inspectCleanView.Show();
//}));
//InspectCleanView inspectCleanView = new InspectCleanView();
//inspectCleanView.SetShow("123123");
//inspectCleanView.Show();
//var wm = new WindowManager();
//var model = new InspectCleanViewModel();
//dynamic settings = new ExpandoObject();
//settings.WindowStartupLocation = WindowStartupLocation.CenterOwner;
//wm.ShowWindow(model, null, settings);
}
//Tray对象拆分成单个对象数据,方便UI层绑定使用
private static void CoatingDataUpData(TrayCoatingThickness trayCoatingThickness, TrayCoatingThickness trayCoatingThicknessFromSql)
{
trayCoatingThickness.Tray.Update(trayCoatingThicknessFromSql.Tray);
trayCoatingThickness.TrayInner.Update(trayCoatingThicknessFromSql.TrayInner);
trayCoatingThickness.RingInner.Update(trayCoatingThicknessFromSql.RingInner);
trayCoatingThickness.RingOuter.Update(trayCoatingThicknessFromSql.RingOuter);
coatingData.Add(trayCoatingThickness.Tray);
coatingData.Add(trayCoatingThickness.TrayInner);
coatingData.Add(trayCoatingThickness.RingInner);
coatingData.Add(trayCoatingThickness.RingOuter);
}
//传入用户设置的Label名称返回数据库属性名称
private string CmdFactor(CoatingData coatingData)
{
if (coatingData.Label.Contains("Tray Inner") || coatingData.Label.Contains("PM1 Major cycle"))
return "tray_inner_number";
else if (coatingData.Label.Contains("Ring Inner") || coatingData.Label.Contains("PM2 Minor Cycle"))
return "ring_inner_number";
else if (coatingData.Label.Contains("Ring Outer") || coatingData.Label.Contains("PM2 Major cycle"))
return "ring_outer_number";
else return "tray_number";
}
}
}