林豪 左 2 years ago
parent
commit
68e35f256b

+ 8 - 11
Projects/永冠OPP/WCS.Service/Works/Station/一楼入库.cs

@@ -67,9 +67,6 @@ namespace WCS.Service.Works.Station
 
                             db.Default.Set<WCS_TASK>().Add(task);
                             finishTaskList.Add(new FinishTaskList<int>(task.WMSTASK, item.Station));
-
-                            var msg = $"下达从{dev.Entity.CODE}";
-
                             task.CreateStatusLogAsync($"{dev.Entity.CODE}创建入库任务", this.GetType());
                         }
                         //两个任务一起创建
@@ -79,7 +76,6 @@ namespace WCS.Service.Works.Station
                     //检查对应的任务是否已创建成功
                     DB.Do(db =>
                     {
-                        //InfoLog.INFO_CREATETASKIN($"[{obj.Entity.CODE}]--生成任务{JsonConvert.SerializeObject(finishTaskList)}");
                         foreach (var finishTask in finishTaskList)
                         {
                             var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.WMSTASK == finishTask.FinishCode);
@@ -122,13 +118,14 @@ namespace WCS.Service.Works.Station
                 //成功分配巷道的任务的任务
                 var finishTaskList = new List<FinishTaskList<int>>();
 
+                var devs = obj.Items.Where(v => v.Data2.Status.HasFlag(IstationStatus.光电状态) && v.Data2.Request == IstationRequest.请求分配目标地址)
+                                           .Where(v => v.Data2.Tasknum > 10000 && v.Data2.Goodsend != 0);
+                if (!devs.Any()) return; //无可执行任务
+                var taskIds = devs.Select(dev => dev.Data2.Tasknum).ToList();
+                var devConvs = Device.Where(v => v.IsConv());
                 //变更数据库信息
                 DB.Do(db =>
                 {
-                    var devs = obj.Items.Where(v => v.Data2.Status.HasFlag(IstationStatus.光电状态) && v.Data2.Request == IstationRequest.请求分配目标地址)
-                                           .Where(v => v.Data2.Tasknum > 10000 && v.Data2.Goodsend != 0);
-                    if (!devs.Any()) return; //无可执行任务
-                    var taskIds = devs.Select(dev => dev.Data2.Tasknum).ToList();
                     var taskList = db.Default.Set<WCS_TASK>().Where(v => taskIds.Contains(v.ID)).ToList();
 
                     taskList.ValidTaskCheck(devs.Count(), db);
@@ -149,15 +146,15 @@ namespace WCS.Service.Works.Station
                                           .ToList();
 
                         //下一个目标地址包含取货点的设备,此时获得的数据是旋转台
-                        var turntable = Device.Where(v => v.IsConv() && v.ROUTES.Any(p => p.NEXT != null && allIn.Contains(p.NEXT.CODE))).Select(v => v.CODE);
+                        var turntable = devConvs.Where(v => v.ROUTES.Any(p => p.NEXT != null && allIn.Contains(p.NEXT.CODE))).Select(v => v.CODE);
 
-                        var putStation = Device.Where(v => v.IsConv() && v.ROUTES.Any(p => p.NEXT != null && turntable.Contains(p.NEXT.CODE))) //下一个目标地址包含取货点的设备
+                        var putStation = devConvs.Where(v => v.ROUTES.Any(p => p.NEXT != null && turntable.Contains(p.NEXT.CODE))) //下一个目标地址包含取货点的设备
                                       .Select(v => v.Create<StationDevice>()) //取所有可以到达取货点设备的信息
                                       .Where(v => !v.Data3.Status.HasFlag(StationStatus.运行状态位) && !v.Data2.Status.HasFlag(IstationStatus.光电状态) && v.Data2.Tasknum < 10000)//筛选出空闲的路径点,此处因输送机都是一个动力,因此可以先找路径点再找设备组
                                       .Distinct()
                                       .FirstOrDefault();//去一次重
                         if (putStation == null) continue;
-                        var taskInStation = Device.Where(p => p.CODE.StartsWith("G") && p.DEVICEGROUP.Any(d => d.MEMBER == putStation.Entity)).OrderBy(p => p.CODE).FirstOrDefault();
+                        var taskInStation = Device.Where(v => v.IsDevGroup()).Where(p => p.DEVICEGROUP.Any(d => d.MEMBER == putStation.Entity)).OrderBy(p => p.CODE).FirstOrDefault();
                         //RGV是否有正在前往这个地址的任务
                         var rgv8 = Device.Find("RGV8").Create<RGVDevice>();
                         if ((!rgv8.Data2.SystemStatus.HasFlag(WCS.Entity.Protocol.RGV.RGVRunStatus.空闲) || !rgv8.Data2.WorkMode.HasFlag(WCS.Entity.Protocol.RGV.RGVMode.自动))

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

@@ -1,6 +1,5 @@
 using DBHelper;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Linq;
 using WCS.Core;
 using WCS.Entity;
@@ -23,27 +22,27 @@ namespace WCS.Service.Works.Station
 
                 //成功处理的任务
                 var finishTaskList = new List<FinishTaskList<int>>();
-
-                DB.Do(db =>
+                var devise = new List<FinishTaskList<string>>();
+                foreach (var dev in stationDeviceGroup.Items)
                 {
-                    var devise = new List<FinishTaskList<string>>();
-                    foreach (var dev in stationDeviceGroup.Items)
+                    //没有请求
+                    if (dev.Data2.Request != IstationRequest.堆垛机放货完成请求目标地址)
+                    {
+                        InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-堆垛机放货完成请求--4");
+                        continue;
+                    }
+                    //没有光电
+                    if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
                     {
-                        //没有请求
-                        if (dev.Data2.Request != IstationRequest.堆垛机放货完成请求目标地址)
-                        {
-                            InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-堆垛机放货完成请求--4");
-                            continue;
-                        }
-                        //没有光电
-                        if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
-                        {
-                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
-                            continue;
-                        }
-                        devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                        InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                        continue;
                     }
-                    if (!devise.Any()) return;
+                    devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                }
+                if (!devise.Any()) return;
+
+                DB.Do(db =>
+                {
                     foreach (var dev in devise)
                     {
                         var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.TYPE == TaskType.出库 && v.SRMSTATION == dev.FinishCode && v.STATUS == TaskStatus.堆垛机完成) ?? throw new WarnException("无任务");
@@ -89,36 +88,33 @@ namespace WCS.Service.Works.Station
     {
         protected override void Do(StationDeviceGroup obj)
         {
-            var timer = new Stopwatch();
-            timer.Start();
-
             obj.EX(stationDeviceGroup =>
             {
                 //当前组有一个运行的设备就停止执行
                 if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("设备运行中");
                 if (stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.光电状态))) throw new DoException("设备停止运行,但有光电");
                 //此处逻辑为货物离开后报完成
+                var devise = new List<FinishTaskList<string>>();
 
-                //成功处理的任务
-                var finishTaskList = new List<FinishTaskList<int>>();
-                DB.Do(db =>
+                foreach (var dev in stationDeviceGroup.Items)
                 {
-                    var devise = new List<FinishTaskList<string>>();
-                    foreach (var dev in stationDeviceGroup.Items)
+                    if (dev.Data2.Request != IstationRequest.月台出库口任务完成)
                     {
-                        if (dev.Data2.Request != IstationRequest.月台出库口任务完成)
-                        {
-                            InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-月台出库口任务完成--3");
-                            continue;
-                        }
-                        if (dev.Data2.Tasknum < 10000)
-                        {
-                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无任务号", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
-                            continue;
-                        };
-                        devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                        InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-月台出库口任务完成--3");
+                        continue;
                     }
+                    if (dev.Data2.Tasknum < 10000)
+                    {
+                        InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无任务号", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                        continue;
+                    };
+                    devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                }
+                //成功处理的任务
+                var finishTaskList = new List<FinishTaskList<int>>();
 
+                DB.Do(db =>
+                {
                     foreach (var dev in devise)
                     {
                         var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum);
@@ -139,10 +135,6 @@ namespace WCS.Service.Works.Station
                         finish.Station.Data.CmdType = IstationCmdType.月台出库口任务完成;
                         finish.Station.Data.VoucherNo++;
                     }
-
-                    if (!finishTaskList.Any()) return;
-                    timer.Stop();
-                    InfoLog.INFO_TIMING($"{stationDeviceGroup.Entity.CODE}--处理请求到反馈完成信号耗时{timer.ElapsedMilliseconds}");
                 });
             });
         }
@@ -165,31 +157,31 @@ namespace WCS.Service.Works.Station
                 if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
                 if (stationDeviceGroup.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
 
-                DB.Do(db =>
+                var devise = new List<FinishTaskList<string>>();
+                foreach (var dev in stationDeviceGroup.Items)
                 {
-                    var devise = new List<FinishTaskList<string>>();
-                    foreach (var dev in stationDeviceGroup.Items)
+                    //没有请求
+                    if (dev.Data2.Request != IstationRequest.请求分配目标地址)
                     {
-                        //没有请求
-                        if (dev.Data2.Request != IstationRequest.请求分配目标地址)
-                        {
-                            InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-分配目标地址--2");
-                            continue;
-                        }
-                        //没有光电
-                        if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
-                        {
-                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
-                            continue;
-                        };
-                        if (dev.Data2.Tasknum < 10000)
-                        {
-                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求有光电无任务", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
-                            continue;
-                        }
-                        devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                        InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-分配目标地址--2");
+                        continue;
                     }
+                    //没有光电
+                    if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
+                    {
+                        InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                        continue;
+                    };
+                    if (dev.Data2.Tasknum < 10000)
+                    {
+                        InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求有光电无任务", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                        continue;
+                    }
+                    devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                }
 
+                DB.Do(db =>
+                {
                     foreach (var dev in devise)
                     {
                         var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum) ?? throw new WarnException("无任务");