林豪 左 %!s(int64=3) %!d(string=hai) anos
pai
achega
fc89c684c8
Modificáronse 1 ficheiros con 25 adicións e 5 borrados
  1. 25 5
      Projects/永冠OPP/WCS.Service/Works/Station/涂布出库.cs

+ 25 - 5
Projects/永冠OPP/WCS.Service/Works/Station/涂布出库.cs

@@ -57,7 +57,7 @@ namespace WCS.Service.Works.Station
                         if (tasks.Any(v => v.STATUS != TaskStatus.堆垛机完成 && v.STATUS != TaskStatus.执行中)) throw new WarnException("任务异常,同组任务状态不为堆垛机完成或执行中");
                         if (tasks.Any(v => v.STATUS != TaskStatus.堆垛机完成 && v.STATUS != TaskStatus.执行中)) throw new WarnException("任务异常,同组任务状态不为堆垛机完成或执行中");
 
 
                         task.STATUS = TaskStatus.执行中;
                         task.STATUS = TaskStatus.执行中;
-                        task.CreateStatusLog(db,$"堆垛机放货点分配目标地址{task.ADDRNEXT}", this.GetType());
+                        task.CreateStatusLog(db, $"堆垛机放货点分配目标地址{task.ADDRNEXT}", this.GetType());
                         finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
                         finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
                     }
                     }
                     db.Default.SaveChanges();
                     db.Default.SaveChanges();
@@ -101,7 +101,7 @@ namespace WCS.Service.Works.Station
                 const string key = $"WCS:Lock:CoatingAllocationOutboundDeliveryPoint";
                 const string key = $"WCS:Lock:CoatingAllocationOutboundDeliveryPoint";
                 try
                 try
                 {
                 {
-                    if (ProtocolProxy.YG150Redis.Get(key) != null) throw new WarnException($"[CoatingAllocationOutboundDeliveryPoint]--触发并发管控");
+                    if (ProtocolProxy.YG150Redis.Get(key) != null) return; //并发管控
                     ProtocolProxy.YG150Redis.Set(key, key);
                     ProtocolProxy.YG150Redis.Set(key, key);
                     if (stationDeviceGroup.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException("等待执行任务,凭证号不一致");
                     if (stationDeviceGroup.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException("等待执行任务,凭证号不一致");
                     if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
                     if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
@@ -126,12 +126,21 @@ namespace WCS.Service.Works.Station
                         devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
                         devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
                     }
                     }
                     var finishTaskList = new List<FinishTaskList<int>>();
                     var finishTaskList = new List<FinishTaskList<int>>();
-
+                    const string key1 = $"WCS:Lock:FirstOut";
                     DB.Do(db =>
                     DB.Do(db =>
                     {
                     {
                         //验证总数
                         //验证总数
                         if (db.Default.Set<WCS_TASK>().Count(v => v.STATUS < TaskStatus.已完成 && v.ADDRNEXT == "G1") >= 3) throw new WarnException("总数已达3,流量管控");
                         if (db.Default.Set<WCS_TASK>().Count(v => v.STATUS < TaskStatus.已完成 && v.ADDRNEXT == "G1") >= 3) throw new WarnException("总数已达3,流量管控");
 
 
+                        #region 开始进行优先判断
+
+                        string value = ProtocolProxy.YG150Redis.Get(obj.Entity.CODE);
+                        //当前被锁定的不是当前设备
+                        if (value != key1 && value != obj.Entity.CODE) return;
+                        ProtocolProxy.YG150Redis.Set(key1, obj.Entity.CODE); //锁定当前设备,输送线是不是并行执行,所以不用增加redis事务锁
+
+                        #endregion 开始进行优先判断
+
                         foreach (var dev in devise)
                         foreach (var dev in devise)
                         {
                         {
                             var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum) ?? throw new WarnException("无任务");
                             var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum) ?? throw new WarnException("无任务");
@@ -149,7 +158,7 @@ namespace WCS.Service.Works.Station
                             {
                             {
                                 task.ADDRNEXT = "G1";
                                 task.ADDRNEXT = "G1";
                             }
                             }
-                            task.CreateStatusLog(db,$"涂布出库分配出库口{task.ADDRNEXT}", this.GetType());
+                            task.CreateStatusLog(db, $"涂布出库分配出库口{task.ADDRNEXT}", this.GetType());
                             finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
                             finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
                         }
                         }
                         db.Default.SaveChanges();
                         db.Default.SaveChanges();
@@ -168,6 +177,17 @@ namespace WCS.Service.Works.Station
                             finish.Station.Data.GoodsSize = task.Length.ToShort();
                             finish.Station.Data.GoodsSize = task.Length.ToShort();
                             finish.Station.Data.CmdType = IstationCmdType.分配目标地址;
                             finish.Station.Data.CmdType = IstationCmdType.分配目标地址;
                             finish.Station.Data.VoucherNo++;
                             finish.Station.Data.VoucherNo++;
+
+                            #region 结束锁定
+
+                            string value = ProtocolProxy.YG150Redis.Get(obj.Entity.CODE);
+                            //当前设备任然被锁定
+                            if (value == obj.Entity.CODE)
+                            {
+                                ProtocolProxy.YG150Redis.Set(key1, key1);
+                            };
+
+                            #endregion 结束锁定
                         }
                         }
                     });
                     });
                 }
                 }
@@ -273,7 +293,7 @@ namespace WCS.Service.Works.Station
                         }
                         }
 
 
                         task.ADDRNEXT = addNext;
                         task.ADDRNEXT = addNext;
-                        task.CreateStatusLog(db,$"涂布出库分配AGV取货点{addNext}", this.GetType());
+                        task.CreateStatusLog(db, $"涂布出库分配AGV取货点{addNext}", this.GetType());
                         finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
                         finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
                         stationList.Add(new FinishTaskList<WCS_TASK>(task, dev.Station));
                         stationList.Add(new FinishTaskList<WCS_TASK>(task, dev.Station));
                     }
                     }