浏览代码

完善单例报警

林豪 左 3 年之前
父节点
当前提交
b7a53f4091

+ 57 - 10
Projects/永冠OPP/WCS.Service/Extensions/DeviceExtension.cs

@@ -38,7 +38,7 @@ namespace WCS.Service.Extensions
         {
             try
             {
-                if (ExDevice.Any(v => v == Entity.CODE)) return;
+                if (ExDevice.Any(v => v == Entity.CODE)) throw new WarnException($"[{Entity.CODE}]--触发并发管控");
                 AddExDevice(Entity.CODE);
                 act(this);
             }
@@ -253,7 +253,7 @@ namespace WCS.Service.Extensions
         {
             try
             {
-                if (ExDevice.Any(v => v == Entity.CODE)) return;
+                if (ExDevice.Any(v => v == Entity.CODE)) throw new WarnException($"[{Entity.CODE}]--触发并发管控");
                 AddExDevice(Entity.CODE);
                 act(this);
             }
@@ -352,7 +352,7 @@ namespace WCS.Service.Extensions
         {
             try
             {
-                if (ExDevice.Any(v => v == Entity.CODE)) return;
+                if (ExDevice.Any(v => v == Entity.CODE)) throw new WarnException($"[{Entity.CODE}]--触发并发管控");
                 AddExDevice(Entity.CODE);
                 act(this);
             }
@@ -599,7 +599,7 @@ namespace WCS.Service.Extensions
         {
             try
             {
-                if (ExDevice.Any(v => v == Entity.CODE)) return;
+                if (ExDevice.Any(v => v == Entity.CODE)) throw new WarnException($"[{Entity.CODE}]--触发并发管控");
                 AddExDevice(Entity.CODE);
                 act(this);
             }
@@ -633,21 +633,25 @@ namespace WCS.Service.Extensions
         {
             try
             {
+                var code = "";
                 if (Entity.CODE == "SRM3" || Entity.CODE == "SRM4")
                 {
-                    if (ExDevice.Any(v => v == "SRM3-SRM4-Out")) return;
-                    AddExDevice("SRM3-SRM4-Out");
+                    code = "SRM3-SRM4-Out";
+                    if (ExDevice.Any(v => v == code)) throw new WarnException($"触发出库并发管控--[{code}]");
+                    AddExDevice(code);
                 }
                 if (Entity.CODE == "SRM5" || Entity.CODE == "SRM6")
                 {
-                    if (ExDevice.Any(v => v == "SRM5-SRM6-Out")) return;
-                    AddExDevice("SRM5-SRM6-Out");
+                    code = "SRM5-SRM6-Out";
+                    if (ExDevice.Any(v => v == code)) throw new WarnException($"触发出库并发管控--[{code}]");
+                    AddExDevice(code);
                 }
 
                 if (Entity.CODE == "SRM7" || Entity.CODE == "SRM8")
                 {
-                    if (ExDevice.Any(v => v == "SRM7-SRM8-Out")) return;
-                    AddExDevice("SRM7-SRM8-Out");
+                    code = "SRM7-SRM8-Out";
+                    if (ExDevice.Any(v => v == code)) throw new WarnException($"触发出库并发管控--[{code}]");
+                    AddExDevice(code);
                 }
 
                 act(this);
@@ -722,6 +726,49 @@ namespace WCS.Service.Extensions
                 _ => SrmFork.货叉1,
             };
         }
+
+        /// <summary>
+        /// 检查同组堆垛机是否有出库任务正在执行
+        /// </summary>
+        public void CheckOutTask()
+        {
+            //检查同组堆垛机是否有正在执行出库任务的
+            DB.Do(db =>
+            {
+                switch (Entity.CODE)
+                {
+                    case "SRM3":
+                        if (db.Default.Set<WCS_TASK>().Any(v => v.STATUS == TaskStatus.堆垛机执行 && v.DEVICE == "SRM4" && v.TYPE == TaskType.出库))
+                            throw new DoException("SRM4正在执行出库任务");
+                        break;
+
+                    case "SRM4":
+                        if (db.Default.Set<WCS_TASK>().Any(v => v.STATUS == TaskStatus.堆垛机执行 && v.DEVICE == "SRM3" && v.TYPE == TaskType.出库))
+                            throw new DoException("SRM3正在执行出库任务");
+                        break;
+
+                    case "SRM5":
+                        if (db.Default.Set<WCS_TASK>().Any(v => v.STATUS == TaskStatus.堆垛机执行 && v.DEVICE == "SRM6" && v.TYPE == TaskType.出库))
+                            throw new DoException("SRM6正在执行出库任务");
+                        break;
+
+                    case "SRM6":
+                        if (db.Default.Set<WCS_TASK>().Any(v => v.STATUS == TaskStatus.堆垛机执行 && v.DEVICE == "SRM5" && v.TYPE == TaskType.出库))
+                            throw new DoException("SRM5正在执行出库任务");
+                        break;
+
+                    case "SRM7":
+                        if (db.Default.Set<WCS_TASK>().Any(v => v.STATUS == TaskStatus.堆垛机执行 && v.DEVICE == "SRM7" && v.TYPE == TaskType.出库))
+                            throw new DoException("SRM7正在执行出库任务");
+                        break;
+
+                    case "SRM8":
+                        if (db.Default.Set<WCS_TASK>().Any(v => v.STATUS == TaskStatus.堆垛机执行 && v.DEVICE == "SRM8" && v.TYPE == TaskType.出库))
+                            throw new DoException("SRM8正在执行出库任务");
+                        break;
+                }
+            });
+        }
     }
 
     /// <summary>

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

@@ -233,6 +233,7 @@ namespace WCS.Service.Works.SRM
                     if (enterPriority != null && outPriority != null && enterPriority.Priority > outPriority.Priority) return;
                     obj.EXOutStock(obj =>
                     {
+                        obj.CheckOutTask();
                         //获取当前堆垛机所有的放货点
                         var list = obj.GetDeliveryPoint();