林豪 左 3 年 前
コミット
fcbcd4f08a

+ 18 - 0
Projects/永冠OPP/WCS.Service/Exception.cs

@@ -0,0 +1,18 @@
+using System;
+
+namespace WCS.Service
+{
+    /// <summary>
+    /// 警告异常
+    /// </summary>
+    public class WarnException : Exception
+    {
+        /// <summary>
+        /// 警告异常
+        /// </summary>
+        /// <param name="message"></param>
+        public WarnException(string message) : base(message)
+        {
+        }
+    }
+}

+ 14 - 4
Projects/永冠OPP/WCS.Service/Extensions/DeviceExtension.cs

@@ -38,10 +38,15 @@ namespace WCS.Service.Extensions
                 AddExDevice(Entity.CODE);
                 act(this);
             }
+            catch (WarnException ex)
+            {
+                InfoLog.INFO_WARN($"[{Entity.CODE}]--{ex.Message}");
+            }
             catch (Exception ex)
             {
-                InfoLog.INFO_ERROR($"{ex.Message}--{ex.StackTrace}");
-                LogHelper.AddWCS_EXCEPTION(ex.Message, Entity.CODE, "待定");
+                Ltc.Log(ex.GetBaseException().Message);
+                InfoLog.INFO_ERROR($"[{Entity.CODE}]--{ex.Message}--{ex.StackTrace}");
+                LogHelper.AddWCS_EXCEPTION(ex.Message, Entity.CODE, WCS_EXCEPTIONTYPE.无.ToString());
             }
             finally
             {
@@ -238,10 +243,15 @@ namespace WCS.Service.Extensions
                 AddExDevice(Entity.CODE);
                 act(this);
             }
+            catch (WarnException ex)
+            {
+                InfoLog.INFO_WARN($"[{Entity.CODE}]--{ex.Message}");
+            }
             catch (Exception ex)
             {
-                InfoLog.INFO_ERROR($"{ex.Message}--{ex.StackTrace}");
-                LogHelper.AddWCS_EXCEPTION(ex.Message, Entity.CODE, "待定");
+                Ltc.Log(ex.GetBaseException().Message);
+                InfoLog.INFO_ERROR($"[{Entity.CODE}]--{ex.Message}--{ex.StackTrace}");
+                LogHelper.AddWCS_EXCEPTION(ex.Message, Entity.CODE, WCS_EXCEPTIONTYPE.无.ToString());
             }
             finally
             {

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

@@ -7,7 +7,6 @@ using WCS.Entity;
 using WCS.Entity.Protocol;
 using WCS.Entity.Protocol.SRM;
 using WCS.Service.Extensions;
-using WCS.Service.Helpers;
 
 namespace WCS.Service.Works.Station
 {
@@ -27,11 +26,16 @@ namespace WCS.Service.Works.Station
             dev.EX(dev =>
             {
                 var code = dev.Entity.CODE;
-                if (dev.WhetherToExecute(IstationRequest.扫码入库)) return;
+                if (dev.Data.VoucherNo != dev.Data2.VoucherNo)
+                    throw new Exception($"等待任务[{dev.Data2.Tasknum}]执行--凭证号不一致[{dev.Data.VoucherNo}][{dev.Data2.VoucherNo}]");
+                if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new WarnException("无光电");
+                if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new WarnException("设备运行中");
+                if (dev.Data2.Request != IstationRequest.扫码入库) throw new Exception("有光电无请求");
+                if (dev.Data2.Tasknum > 10000) throw new Exception("有光电有请求,但已生产任务");
 
                 var bcr = dev.Entity.BCR();
                 var barcode = bcr.Content.Trim('\r');
-                if (barcode == "") throw new Exception(LogHelper.SpliceLogMessage("扫码失败", dev.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                if (barcode == "") throw new Exception("扫码失败");
 
                 var info = WMS.I_WCS_GetInTask(barcode, dev.Entity.CODE);
                 var next = dev.Entity.CODE == Conv_1028 ? "1030" : "1031";
@@ -59,10 +63,8 @@ namespace WCS.Service.Works.Station
                     dev.Data.Goodsend = task.ADDRNEXT.ToShort();
                     dev.Data.CmdType = IstationCmdType.扫码入库;
                     dev.Data.VoucherNo++;
-
                     var msg = $"下达从{dev.Entity.CODE}移动至{next}的PLC指令。";
                     msg += $"[{dev.Data.Tasknum}][{dev.Data.Goodsstart}][{dev.Data.Goodsend}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]";
-
                     task.CreateStatusLog(db, msg, this.GetType());
                 });
             });
@@ -90,21 +92,23 @@ namespace WCS.Service.Works.Station
                 foreach (var item in obj.Items)
                 {
                     var dev = Device.Find(item.Entity.CODE).Create<StationDevice>();
-                    if (dev.Data.VoucherNo != dev.Data2.VoucherNo) return;
-                    if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) return;
-                    if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态)) return;
-                    if (dev.Data2.Tasknum > 10000 && dev.Data2.Request != IstationRequest.请求分配目标地址) return;
+                    if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new WarnException("无光电");
+                    if (dev.Data.VoucherNo != dev.Data2.VoucherNo)
+                        throw new Exception($"等待任务[{dev.Data2.Tasknum}]执行--凭证号不一致[{dev.Data.VoucherNo}][{dev.Data2.VoucherNo}]");
+                    if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new WarnException("设备运行中");
+                    if (dev.Data2.Tasknum > 10000 && dev.Data2.Request != IstationRequest.请求分配目标地址)
+                        throw new Exception("有任务无请求");
                 }
 
                 //获取需要进行巷道分配的设备
-                var devs = obj.TaskedDeviceGetNextAddress() ?? throw new Exception(LogHelper.SpliceLogMessage("无可用任务", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                var devs = obj.TaskedDeviceGetNextAddress() ?? throw new WarnException("无可用任务");
 
                 DB.Do(db =>
                 {
                     var taskIds = devs.Select(p => p.Data2.Tasknum);
                     var tasks = db.Default.Set<WCS_TASK>().Where(p => taskIds.Any(v => v == p.ID)).ToList();
                     var res = WMS.GetTunnelList(tasks.Select(v => v.WMSTASK.ToString()).ToList(), code);
-                    if (string.IsNullOrEmpty(res.TunnelNum)) throw new Exception(LogHelper.SpliceLogMessage($"WMS未返回巷道", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                    if (string.IsNullOrEmpty(res.TunnelNum)) throw new Exception($"WMS未返回巷道");
                     var tunnelNo = res.TunnelNum.Split(',').Select(v => "TY" + v).ToList();
 
                     var tunnels = Device.Where(v => tunnelNo.Contains(v.CODE)).ToList();
@@ -135,14 +139,13 @@ namespace WCS.Service.Works.Station
                     //筛选出优先级最高的可用巷道
                     var tunnelInfo = tunnelInfos.Where(v => { try { return v.SRM.Data3.SCAlarm == 0 && v.SRM.Data2.SRMMode == SCMode.远程 && v.SRM.Data2.SRMStatus == SCRunStatus.空闲; } catch { return false; } })
                                                 .OrderBy(v => tunnelNo.IndexOf(v.Tunnel.CODE)).FirstOrDefault();
-                    if (tunnelInfo == null) throw new Exception(LogHelper.SpliceLogMessage("无可用巷道", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                    if (tunnelInfo == null) throw new Exception("无可用巷道");
 
                     //开始向设备中写入任务信息
                     foreach (var item in devs)
                     {
                         var dev = Device.Find(item.Entity.CODE).Create<StationDevice>();
                         var task = tasks.FirstOrDefault(p => p.ID == dev.Data2.Tasknum);
-                        //if (dev.Data2.Goodsend == task.ADDRNEXT.ToShort() && (task.TaskGroupKey.Contains($"{task.WMSTASK}_") || task.TaskGroupKey.Contains($"_{task.WMSTASK}"))) continue;
 
                         task.DEVICE = tunnelInfo.SRM.Entity.CODE;
                         task.TUNNEL = tunnelInfo.Tunnel.CODE;

+ 1 - 0
WCS.Entity/WCS_EXCEPTION.cs

@@ -32,6 +32,7 @@ namespace WCS.Entity
     /// </summary>
     public enum WCS_EXCEPTIONTYPE : uint
     {
+        无 = 0,
         设备异常 = 10,
         逻辑异常 = 20,
         操作记录 = 30,