using Newtonsoft.Json.Converters; using Newtonsoft.Json; using Rs.Framework; using Rs.MotionPlat.Commom; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Rs.DataAccess; namespace Rs.MotionPlat.Entitys.Trays { public enum ETestTraySlotStatus { /// /// 有产品 /// Have, /// /// 无产品 /// NotHave, /// /// 有产品且真空异常 /// VacException, /// /// 光纤异常 /// FiberException, /// /// 所有 /// All } /// /// 测试盘状态管理类 /// public class TestTrayManager { /// /// 测试盘层数 /// public int Floor { get; set; } = 1; private TestTraySlot[] slots; public List Slots { get { return slots.ToList(); } } private TestTrayManager() { slots = new TestTraySlot[16]; for (int i = 0; i < 16; i++) { slots[i] = new TestTraySlot() { Index = i + 1, IsHasProduct = false, SN = "", FromIndex = 0, SuckerNo = 0 }; } } private static TestTrayManager instance; public static TestTrayManager Instance { get { if (instance == null) { instance = new TestTrayManager(); } return instance; } } public TestTraySlot Slot(int slotIndex) { return slots[slotIndex - 1]; } public List GetSlots(ETestTraySlotStatus status) { List results = new List(); switch (status) { case ETestTraySlotStatus.Have: results= slots.Where(s => s.IsHasProduct).ToList(); break; case ETestTraySlotStatus.NotHave: results = slots.Where(s => s.IsHasProduct==false).ToList(); break; case ETestTraySlotStatus.VacException: results = slots.Where(s => s.IsHasProduct && s.IsVacException==true).ToList(); break; case ETestTraySlotStatus.FiberException: results = slots.Where(s => s.IsHasProduct && s.IsFiberException==true).ToList(); break; case ETestTraySlotStatus.All: results = slots.ToList(); break; default: break; } return results; } public string GetNeedTestSlotStr(SchedulingMaterial m_schedulingMaterial) { TurnoverInfos infos = new TurnoverInfos(); infos.Instruction = EInstruction.LoadAndUnloadResult; infos.GroupID = m_schedulingMaterial.GroupID; infos.TurnoverID = m_schedulingMaterial.TurnoverID; List testLoadTaskList = new List(); foreach (TestTraySlot slot in slots) { if(slot.IsHasProduct) { TurnoverInfo ti = new TurnoverInfo(); ti.GUID = GuidHelper.Create(); ti.FromType = slot.FromType; ti.FromFloor = 1; ti.FromIndex = slot.FromIndex; ti.SN = slot.SN; ti.ToType = TurnoverType.Tester; ti.ToFloor = Floor++; ti.ToIndex = slot.Index-1; testLoadTaskList.Add(ti); //ti.taskMode = taskMode; //ti.Instruction = sm.Instruction; //ti.GroupID = sm.GroupID; //ti.TurnoverID = sm.TurnoverID; } } infos.Infos = testLoadTaskList; string content = JsonConvert.SerializeObject(infos, new StringEnumConverter()); return content; } public List GetAll() { return slots.ToList(); } /// /// 重置测试治具穴位状态 /// public void ResetStatus() { foreach (TestTraySlot slot in slots) { slot.IsHasProduct= false; slot.FromIndex = 0; slot.FromType = TurnoverType.Unknown; } } } public class TestTraySlot:BaseTraySlot { /// /// 真空是否异常 /// public bool IsVacException { get; set; } = false; /// /// 光纤是否异常 /// public bool IsFiberException { get; set; } = false; public void AddProduct(TransitNozzle nozzle) { IsHasProduct = true; SN = nozzle.SN; FromIndex = nozzle.FromIndex; FromType = nozzle.FromType; SuckerNo = nozzle.NozzleIndex; Task.Run(() => { SqliteHelper db = new SqliteHelper(); string updateSql = $"update TrayStatus set status=1 where trayname='FixtureTray' and slotindex={Index}"; db.ExecuteNonQuery(updateSql); }); } public void ClearProduct() { IsHasProduct = false; SN = ""; FromIndex = 0; FromType = TurnoverType.Unknown; SuckerNo = 0; Task.Run(() => { SqliteHelper db = new SqliteHelper(); string updateSql = $"update TrayStatus set status=0 where trayname='FixtureTray' and slotindex={Index}"; db.ExecuteNonQuery(updateSql); }); } /// /// 通过真空判断穴位中是否有产品 /// /// public bool HasProduct() { return Ops.IsOn($"测试{Index}号穴位真空吸检测"); } public void ResetStatus() { IsHasProduct = false; FromIndex = 0; FromType = TurnoverType.Unknown; } } }