Browse Source

转圈交互点分配目标地址

林豪 左 3 năm trước cách đây
mục cha
commit
750d01d83e
1 tập tin đã thay đổi với 57 bổ sung0 xóa
  1. 57 0
      Projects/永冠OPP/WCS.Service/Works/Station/一楼出库.cs

+ 57 - 0
Projects/永冠OPP/WCS.Service/Works/Station/一楼出库.cs

@@ -148,4 +148,61 @@ namespace WCS.Service.Works.Station
 
         private List<string> devCodes = new List<string>() { "G1469", "G1561", "G1538", "G1574", "G1509" };
     }
+
+    [WorkTitle(typeof(ProductHandler), "转圈交互点分配目标地址")]
+    public class 转圈交互点分配目标地址 : Work<StationDeviceGroup>
+    {
+        protected override void Do(StationDeviceGroup obj)
+        {
+            obj.EX(obj =>
+            {
+                if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
+                if (obj.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
+
+                DB.Do(db =>
+                {
+                    var devs = new List<FinishTaskList<string>>();
+                    foreach (var dev in obj.Items)
+                    {
+                        //没有请求
+                        if (dev.Data2.Request != IstationRequest.请求分配目标地址)
+                        {
+                            InfoLog.INFO_INFO($"{obj.Entity.CODE}无请求-分配目标地址--2");
+                            continue;
+                        }
+                        //没有光电
+                        if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
+                        {
+                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                            continue;
+                        };
+                        if (dev.Data2.Tasknum < 10000)
+                        {
+                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求有光电无任务", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                            continue;
+                        }
+                        devs.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                    }
+
+                    foreach (var dev in devs)
+                    {
+                        var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum) ?? throw new WarnException("无任务");
+                        var tasks = db.Default.Set<WCS_TASK>().Where(v => v.TaskGroupKey == task.TaskGroupKey);
+                        if (devs.Count != tasks.Count()) throw new WarnException($"可执行任务数{devs.Count},实际任务数{tasks.Count()}");
+                        dev.Station.Data.Tasknum = task.ID;
+                        dev.Station.Data.Goodsstart = dev.Station.Entity.CODE.ToShort();
+                        dev.Station.Data.Goodsend = task.ADDRNEXT.ToShort();
+                        dev.Station.Data.Goodsnum = devs.Count.ToShort();
+                        dev.Station.Data.CmdType = IstationCmdType.分配目标地址;
+                        dev.Station.Data.VoucherNo++;
+                    }
+                });
+            });
+        }
+
+        protected override bool SelectDevice(WCS_DEVICE dev)
+        {
+            return dev.CODE == "G1389";
+        }
+    }
 }