Bläddra i källkod

变更涂布出库流量管控方案

林豪 左 3 år sedan
förälder
incheckning
014c3b04b5

+ 1 - 2
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -321,14 +321,13 @@ namespace WCS.Service.Works.SRM
                         }
                         var outDepotList = waitTask.Where(v =>
                                                     {
-                                                        var max = v.ADDRTO == "G1340" ? 4 : maxnum;
                                                         return db.Default.Set<WCS_TASK>()
                                                            .AsNoTracking()
                                                            .Where(d => d.TYPE == TaskType.出库)
                                                            .Where(d => d.STATUS > TaskStatus.新建)
                                                            .Where(d => d.STATUS < TaskStatus.已完成 || taskidList.Contains(d.ID))
                                                            .Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR)
-                                                           .GroupBy(d => d.TaskGroupKey).Count() < max;
+                                                           .GroupBy(d => d.TaskGroupKey).Count() < maxnum;
                                                     })
                                                    .OrderByDescending(v => v.Priority)
                                                    .ThenBy(v => v.ADDRTO == "G1340" ? 0 : 1)

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

@@ -97,62 +97,73 @@ namespace WCS.Service.Works.Station
         {
             obj.EX(obj =>
             {
-                if (obj.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException("等待执行任务,凭证号不一致");
-                if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
+                var key = $"WCS:Lock:CoatingAllocationOutboundDeliveryPoint";
+                try
+                {
+                    if (ProtocolProxy.YG150Redis.Get(key) != null) throw new WarnException($"[CoatingAllocationOutboundDeliveryPoint]--触发并发管控");
+                    ProtocolProxy.YG150Redis.Set(key, key);
+                    if (obj.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException("等待执行任务,凭证号不一致");
+                    if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
 
-                var finishTaskList = new List<FinishTaskList<int>>();
+                    var finishTaskList = new List<FinishTaskList<int>>();
 
-                DB.Do(db =>
-                {
-                    var devs = new List<FinishTaskList<string>>();
-                    foreach (var dev in obj.Items)
+                    DB.Do(db =>
                     {
-                        if (dev.Data2.Request != IstationRequest.请求分配目标地址)
-                        {
-                            InfoLog.INFO_INFO($"{obj.Entity.CODE}无请求-分配目标地址--2");
-                            continue;
-                        }
-                        if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
+                        var devs = new List<FinishTaskList<string>>();
+                        foreach (var dev in obj.Items)
                         {
-                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
-                            continue;
+                            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>()));
                         }
-                        if (dev.Data2.Tasknum < 10000)
+                        //只能有一组任务的下一个地址是交货点
+                        if (db.Default.Set<WCS_TASK>().Any(v => v.ADDRNEXT == "G1")) return;
+                        foreach (var dev in devs)
                         {
-                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求有光电无任务", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
-                            continue;
+                            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>().Count(v => v.TaskGroupKey == task.TaskGroupKey);
+                            if (tasks != devs.Count) throw new WarnException($"可执行任务数{devs.Count},实际任务数{tasks}");
+
+                            task.ADDRNEXT = "G1";
+                            task.CreateStatusLog(db, $"分配目标地址{task.ADDRNEXT}", this.GetType());
+                            finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
                         }
-                        devs.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
-                    }
+                        db.Default.SaveChanges();
+                    });
 
-                    foreach (var dev in devs)
+                    DB.Do(db =>
                     {
-                        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>().Count(v => v.TaskGroupKey == task.TaskGroupKey);
-                        if (tasks != devs.Count) throw new WarnException($"可执行任务数{devs.Count},实际任务数{tasks}");
-
-                        task.ADDRNEXT = "G1";
-                        task.CreateStatusLog(db, $"分配目标地址{task.ADDRNEXT}", this.GetType());
-                        finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
-                    }
-                    db.Default.SaveChanges();
-                });
-
-                DB.Do(db =>
+                        foreach (var finish in finishTaskList)
+                        {
+                            var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == finish.FinishCode);
+                            if (task == null) continue;
+                            finish.Station.Data.Tasknum = task.ID;
+                            finish.Station.Data.Goodsstart = finish.Station.Entity.CODE.ToShort();
+                            finish.Station.Data.Goodsend = task.ADDRNEXT.Replace("G", "").ToShort();
+                            finish.Station.Data.Goodsnum = finishTaskList.Count.ToShort();
+                            finish.Station.Data.GoodsSize = task.Length.ToShort();
+                            finish.Station.Data.CmdType = IstationCmdType.分配目标地址;
+                            finish.Station.Data.VoucherNo++;
+                        }
+                    });
+                }
+                finally
                 {
-                    foreach (var finish in finishTaskList)
-                    {
-                        var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == finish.FinishCode);
-                        if (task == null) continue;
-                        finish.Station.Data.Tasknum = task.ID;
-                        finish.Station.Data.Goodsstart = finish.Station.Entity.CODE.ToShort();
-                        finish.Station.Data.Goodsend = task.ADDRNEXT.Replace("G", "").ToShort();
-                        finish.Station.Data.Goodsnum = finishTaskList.Count.ToShort();
-                        finish.Station.Data.GoodsSize = task.Length.ToShort();
-                        finish.Station.Data.CmdType = IstationCmdType.分配目标地址;
-                        finish.Station.Data.VoucherNo++;
-                    }
-                });
+                    ProtocolProxy.YG150Redis.Del(key);
+                }
             });
         }
 
@@ -300,7 +311,7 @@ namespace WCS.Service.Works.Station
                         finish.Station.Data.Goodsnum = finishTaskList.Count.ToShort();
                         finish.Station.Data.CmdType = IstationCmdType.分配目标地址;
                         finish.Station.Data.VoucherNo++;
-                        InfoLog.INFO_AGV($"出库分配AGV取货点[{finish.FinishCode}]-[{finish.Station.Data.Goodsend}]");
+                        //InfoLog.INFO_AGV($"出库分配AGV取货点[{finish.FinishCode}]-[{finish.Station.Data.Goodsend}]");
                     }
                 });
             });