林豪 左 преди 3 години
родител
ревизия
87475a9c5d

+ 13 - 16
Projects/永冠OPP/WCS.Service/Extensions/DeviceExtension.cs

@@ -103,15 +103,14 @@ namespace WCS.Service.Extensions
         /// <param name="type">给当前设备组下发任务时需要的请求</param>
         /// <returns>true:不满足执行条件需要进行停止执行  false:表示满足条件不需要停止执行 </returns>
         /// <exception cref="Exception"></exception>
-        public bool WhetherToExecute(IstationRequest type = IstationRequest.无)
+        public void WhetherToExecute(IstationRequest type = IstationRequest.无)
         {
             foreach (var item in Items)
             {
-                if (item.Data.VoucherNo != item.Data2.VoucherNo) return true;
-                if (item.Data3.Status.HasFlag(StationStatus.运行状态位)) return true;
-                if (!item.Data2.Status.HasFlag(IstationStatus.光电状态)) return true;
+                if (item.Data.VoucherNo != item.Data2.VoucherNo) throw new WarnException($"等待{item.Entity.Code}执行任务{item.Data.Tasknum},凭证号不一致");
+                if (item.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new DoException($"{item.Entity.Code}运行中");
+                if (!item.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new DoException($"[{item.Entity.Code}]无光电");
             }
-            return false;
         }
 
         /// <summary>
@@ -206,43 +205,41 @@ namespace WCS.Service.Extensions
         /// <param name="type">给当前设备组下发任务时需要的请求</param>
         /// <returns>true:不满足执行条件需要进行停止执行  false:表示满足条件不需要停止执行 </returns>
         /// <exception cref="Exception"></exception>
-        public bool WhetherToExecute(IstationRequest type = IstationRequest.无)
+        public void WhetherToExecute(IstationRequest type = IstationRequest.无)
         {
             //正在运行
-            if (Data3.Status.HasFlag(StationStatus.运行状态位)) return true;
+            if (Data3.Status.HasFlag(StationStatus.运行状态位)) throw new DoException("运行中");
             //上一次的任务还未执行
             if (Data.VoucherNo != Data2.VoucherNo)
-                throw new Exception(LogHelper.SpliceLogMessage($"等待任务[{Data2.Tasknum}]执行", Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                throw new WarnException($"等待任务[{Data2.Tasknum}]执行");
             //没有光电
-            if (!Data2.Status.HasFlag(IstationStatus.光电状态)) return true;
+            if (!Data2.Status.HasFlag(IstationStatus.光电状态)) throw new DoException("无光电"); ;
             //没有任务号
             switch (type)
             {
                 case IstationRequest.无:
                     if (Data2.Tasknum < 10000 && Data.Tasknum < 10000)
-                        throw new Exception(LogHelper.SpliceLogMessage($"设备无任务", Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                        throw new WarnException($"设备无任务");
                     break;
 
                 case IstationRequest.扫码入库:
                     if (Data2.Tasknum > 10000 && Data.Tasknum > 10000)
-                        throw new Exception(LogHelper.SpliceLogMessage($"设备已有任务任务", Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                        throw new WarnException($"设备已有任务任务");
                     break;
 
                 case IstationRequest.堆垛机放货完成请求目标地址:
                     if (Data2.Tasknum < 10000 && Data.Tasknum < 10000)
-                        throw new Exception(LogHelper.SpliceLogMessage($"设备无任务信息", Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                        throw new WarnException($"设备无任务信息");
                     break;
 
                 case IstationRequest.请求分配目标地址:
                     if (Data2.Tasknum < 10000 && Data.Tasknum < 10000)
-                        throw new Exception(LogHelper.SpliceLogMessage($"设备无任务信息", Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                        throw new WarnException($"设备无任务信息");
                     break;
             }
             //没有请求
             if (type != IstationRequest.无 && Data2.Request != type)
-                throw new Exception(LogHelper.SpliceLogMessage($"有光电无{type}请求", Entity.CODE, WCS_EXCEPTIONTYPE.设备异常, GetType()));
-
-            return false;
+                throw new WarnException($"有光电无{type}请求");
         }
 
         /// <summary>

+ 5 - 6
Projects/永冠OPP/WCS.Service/Works/RGV/RGVWorks.cs

@@ -5,7 +5,6 @@ using WCS.Core;
 using WCS.Entity;
 using WCS.Service.Extensions;
 using WCS.Service.Handlers;
-using WCS.Service.Helpers;
 
 namespace WCS.Service.Works.RGV
 {
@@ -25,24 +24,24 @@ namespace WCS.Service.Works.RGV
 
                 var obj = Device.Find(ConvGroup_1030).Create<StationDeviceGroup>();
 
-                if (obj.WhetherToExecute()) return;
+                obj.WhetherToExecute();
 
                 //筛选出有任务号和起始及目标地址的设备
-                var dev = obj.RGVGetTaskedDevice() ?? throw new Exception(LogHelper.SpliceLogMessage("无可用任务", rgv.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                var dev = obj.RGVGetTaskedDevice() ?? throw new WarnException("无可用任务");
 
                 DB.Do(db =>
                 {
                     var taskids = dev.Select(v => v.Data2.Tasknum);
                     var tasks = db.Default.Set<WCS_TASK>().Where(p => taskids.Contains(p.ID));
                     if (tasks.GroupBy(p => p.TaskGroupKey).Count() > 1)
-                        throw new Exception(LogHelper.SpliceLogMessage("任务组ID不一致", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                        throw new WarnException("任务组ID不一致");
                     if (tasks.GroupBy(p => p.TaskGroupKey).Count() == 0)
-                        throw new Exception(LogHelper.SpliceLogMessage("无任务组ID", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                        throw new WarnException("无任务组ID");
                     var gw1 = obj.Items.ToArray()[0];
                     var gw2 = obj.Items.ToArray()[1];
                     if (gw1.Data2.Tasknum != 0 && gw2.Data2.Tasknum != 0)
                     {
-                        if (gw1.Data2.Goodsend != gw2.Data2.Goodsend) throw new Exception(LogHelper.SpliceLogMessage($"{obj.Entity.Code}目标地址不一致", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                        if (gw1.Data2.Goodsend != gw2.Data2.Goodsend) throw new WarnException($"{obj.Entity.Code}目标地址不一致");
                     }
                     rgv.Data.TaskID_1 = gw1.Data2.Tasknum;
                     rgv.Data.TaskID_2 = gw2.Data2.Tasknum;

+ 7 - 8
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -9,7 +9,6 @@ using WCS.Entity.Protocol;
 using WCS.Entity.Protocol.SRM;
 using WCS.Service.Extensions;
 using WCS.Service.Handlers;
-using WCS.Service.Helpers;
 using WCS.Service.Log;
 
 namespace WCS.Service.Works.SRM
@@ -41,9 +40,9 @@ namespace WCS.Service.Works.SRM
                     return;
                 }
                 if (obj.Data.FinishedACK_1 == 1 || obj.Data.FinishedACK_2 == 1)
-                    throw new Exception(LogHelper.SpliceLogMessage($"堆垛机完成任务WCS反馈信号未清除", deviceCode, WCS_EXCEPTIONTYPE.设备异常, GetType()));
+                    throw new WarnException($"堆垛机完成任务WCS反馈信号未清除");
                 if (obj.Data2.VoucherNo_1 != obj.Data.VoucherNo_1 || obj.Data2.VoucherNo_2 != obj.Data.VoucherNo_2)
-                    throw new Exception(LogHelper.SpliceLogMessage($"等待执行{obj.Data.TaskID_1}-{obj.Data.TaskID_2}", deviceCode, WCS_EXCEPTIONTYPE.设备异常, GetType()));
+                    throw new WarnException($"等待执行{obj.Data.TaskID_1}-{obj.Data.TaskID_2}");
 
                 //处理堆垛机已完成的任务
                 if (obj.Data2.FinishedTask_1 != 0 || obj.Data2.FinishedTask_2 != 0)
@@ -62,7 +61,7 @@ namespace WCS.Service.Works.SRM
                 DB.Do(db =>
                 {
                     var task = db.Default.Set<WCS_TASK>().Where(v => v.DEVICE == obj.Entity.CODE).Where(v => v.STATUS == TaskStatus.堆垛机执行).FirstOrDefault();
-                    if (task != null) throw new Exception(LogHelper.SpliceLogMessage($"[{deviceCode}]有正在执行的任务:[{task.ID}]", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                    if (task != null) throw new WarnException($"[{deviceCode}]有正在执行的任务:[{task.ID}]");
                     //属于当前堆垛机未执行的移库任务
                     isTransfer = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => v.DEVICE == obj.Entity.CODE && v.TYPE == TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行).ToList();
                     //判断是否存在调整优先级任务,存在初始化isTransfer值 让本次执行优先任务
@@ -146,7 +145,7 @@ namespace WCS.Service.Works.SRM
                     //入库口设备信息 找一个有任务有光电且不在运行状态位的取货点 如果找不到代表任务还在输送途中
                     var st = arrIn.OrderBy(v => v.Data2.Tasknum > 0 && v.Data2.Status.HasFlag(IstationStatus.光电状态) && !v.Data3.Status.HasFlag(StationStatus.运行状态位) ? 0 : 1)
                                   .ThenBy(v => v.UpdateTime)
-                                  .FirstOrDefault() ?? throw new Exception($"[{deviceCode}]等待入库任务输送到位");
+                                  .FirstOrDefault() ?? throw new WarnException($"[{deviceCode}]等待入库任务输送到位");
 
                     //根据上述筛选条件筛选出来的入库任务 找到对应的设备组
                     var item = Device.Where(v => v.DEVICEGROUP.Any(p => p.MEMBER.CODE == st.Entity.CODE)).Single();
@@ -170,7 +169,7 @@ namespace WCS.Service.Works.SRM
                             var tunnel = dev1.Entity.ROUTES.First().NEXT.CODE;
                             var task1 = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.STATUS < TaskStatus.堆垛机执行 && v.ID == dev1.Data2.Tasknum);
                             if (task1 == null)
-                                throw new Exception(LogHelper.SpliceLogMessage($"设备有光电有任务且不在运行状态,但WCS找不到任务{dev1.Data2.Tasknum}", dev1.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常, GetType()));
+                                throw new WarnException($"设备有光电有任务且不在运行状态,但WCS找不到任务{dev1.Data2.Tasknum}");
                             var loc = WMS.GetLocalIn(task1.WMSTASK, tunnel, dev1.Entity.CODE, Entity.WareCellForkNum.货叉1);
                             var locno = string.Format("{0}-{1}-{2}", loc.Row, loc.Colomn, loc.Layer);
                             var oldTask = task1.STATUS;
@@ -196,7 +195,7 @@ namespace WCS.Service.Works.SRM
                         {
                             var tunnel = dev2.Entity.ROUTES.First().NEXT.CODE;
                             var task2 = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.STATUS < TaskStatus.堆垛机执行 && v.ID == dev2.Data2.Tasknum);
-                            if (task2 == null) throw new Exception(LogHelper.SpliceLogMessage($"设备有光电有任务且不在运行状态,但WCS找不到任务{dev2.Data2.Tasknum}", dev2.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常, GetType()));
+                            if (task2 == null) throw new WarnException($"设备有光电有任务且不在运行状态,但WCS找不到任务{dev2.Data2.Tasknum}");
                             var loc = WMS.GetLocalIn(task2.WMSTASK, tunnel, dev2.Entity.CODE, Entity.WareCellForkNum.货叉2);
                             var locno = string.Format("{0}-{1}-{2}", loc.Row, loc.Colomn, loc.Layer);
                             var oldTask = task2.STATUS;
@@ -287,7 +286,7 @@ namespace WCS.Service.Works.SRM
                         {
                             //堆垛机当前是否有正在执行的任务
                             if (db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == sc && d.STATUS == TaskStatus.堆垛机执行))
-                                throw new Exception(LogHelper.SpliceLogMessage($"[{deviceCode}]有正在执行的出库任务", deviceCode, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                                throw new WarnException($"[{deviceCode}]有正在执行的出库任务");
                             //找出等待执行的出库任务
                             var q = db.Default.Set<WCS_TASK>().Where(v => v.STATUS == TaskStatus.新建)
                                                               .Where(v => v.DEVICE == sc)

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

@@ -179,7 +179,7 @@ namespace WCS.Service.Works.Station
             obj.EX(obj =>
             {
                 var code = obj.Entity.CODE;
-                if (obj.WhetherToExecute(IstationRequest.请求分配目标地址)) return;
+                obj.WhetherToExecute(IstationRequest.请求分配目标地址);
 
                 DB.Do(db =>
                 {

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

@@ -1,11 +1,9 @@
 using DBHelper;
-using System;
 using System.Linq;
 using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol;
 using WCS.Service.Extensions;
-using WCS.Service.Helpers;
 
 namespace WCS.Service.Works.Station
 {
@@ -14,13 +12,13 @@ namespace WCS.Service.Works.Station
     {
         protected override void Do(StationDevice obj)
         {
-            if (obj.WhetherToExecute(IstationRequest.堆垛机放货完成请求目标地址)) return;
+            obj.WhetherToExecute(IstationRequest.堆垛机放货完成请求目标地址);
             //找到当前站台为当前设备且任务为堆垛机完成的任务
             DB.Do(db =>
             {
                 var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.TYPE == TaskType.出库 && v.SRMSTATION == obj.Entity.CODE && v.STATUS == TaskStatus.堆垛机完成);
-                if (task == null) return;
-                if (task.SRMSTATION != obj.Entity.CODE && task.STATUS != TaskStatus.堆垛机完成) return;
+                if (task == null) throw new WarnException("WCS无该任务信息");
+                if (task.SRMSTATION != obj.Entity.CODE && task.STATUS != TaskStatus.堆垛机完成) throw new WarnException("任务状态不是堆垛机完成");
                 task.STATUS = TaskStatus.执行中;
                 db.Default.SaveChanges();
                 task.CreateStatusLog(db, $"状态由[{TaskStatus.堆垛机完成}]变更为[{task.STATUS}]-{obj.Entity.Code}", this.GetType());
@@ -50,16 +48,14 @@ namespace WCS.Service.Works.Station
                 foreach (var dev in obj.Items)
                 {
                     //当前组有一个运行的设备就停止执行
-                    if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) continue;
-                    if (dev.Data2.Status.HasFlag(IstationStatus.光电状态)) continue;
-                    if (dev.Data2.Tasknum < 10000) continue;
-                    if (dev.Data2.Request != IstationRequest.月台出库口任务完成)
-                    {
-                        continue;
-                    }
+                    if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new DoException("设备运行中");
+                    if (dev.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new WarnException("有光电,产品未离开设备");
+                    if (dev.Data2.Tasknum < 10000) throw new WarnException("任务号错误");
+                    if (dev.Data2.Request != IstationRequest.月台出库口任务完成) throw new WarnException("无完成任务请求");
+
                     var task = db.Default.Set<WCS_TASK>().Where(v => v.ID == dev.Data2.Tasknum).FirstOrDefault();
                     if (task.STATUS != TaskStatus.执行中)
-                        throw new Exception(LogHelper.SpliceLogMessage($"{task.ID}任务状态错误", dev.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                        throw new WarnException($"{task.ID}任务状态错误");
                     task.STATUS = TaskStatus.已完成;
                     db.Default.SaveChanges();
                     task.CreateStatusLog(db, $"状态由[{TaskStatus.执行中}]变更为[{task.STATUS}]-{dev.Entity.CODE}", this.GetType());