From 2d2342157638cab98a4c59b0c687808cc2f98ea1 Mon Sep 17 00:00:00 2001
From: 杨张扬 <634643841@qq.com>
Date: 星期五, 25 七月 2025 17:24:57 +0800
Subject: [PATCH] 增加空托堆叠和空托入货架的新逻辑,增加拆盘入库和回炉胶和废料的逻辑

---
 core/Monitor.cs |  132 ++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 121 insertions(+), 11 deletions(-)

diff --git a/core/Monitor.cs b/core/Monitor.cs
index 42f7747..5669c96 100644
--- a/core/Monitor.cs
+++ b/core/Monitor.cs
@@ -469,22 +469,38 @@
                 var startLoc = db.Queryable<TN_Location>()
                     .LeftJoin<TN_Loc_Container>((o, i) => o.S_CODE == i.S_LOC_CODE)
                     .LeftJoin<TN_CG_Detail>((o, i, s) => i.S_CNTR_CODE == s.S_CNTR_CODE)
-                    .Where((o, i, s) => s.N_ITEM_STATE == 0 && s.S_ITEM_STATE == "鍚堟牸"
+                    .Where((o, i, s) => 
+                    s.N_ITEM_STATE == 6 && s.S_ITEM_STATE == "E绾ф枡"
                     && o.S_AREA_CODE == Settings.Areas[7] && o.N_CURRENT_NUM > 0
                     && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "鏃�).First();
 
+                var typename = "澶嶆E绾ф枡鑷姩鍥炲簱";
+
+                if (startLoc == null)
+                {
+                    startLoc = db.Queryable<TN_Location>()
+                     .LeftJoin<TN_Loc_Container>((o, i) => o.S_CODE == i.S_LOC_CODE)
+                     .LeftJoin<TN_CG_Detail>((o, i, s) => i.S_CNTR_CODE == s.S_CNTR_CODE)
+                     .Where((o, i, s) =>
+                     s.N_ITEM_STATE == 0 && s.S_ITEM_STATE == "鍚堟牸"
+                     && o.S_AREA_CODE == Settings.Areas[7] && o.N_CURRENT_NUM > 0
+                     && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "鏃�).First();
+
+                    typename = "澶嶆鍚堟牸鑷姩鍥炲簱";
+                }
+
+
                 if (startLoc== null)
                 {
-                    LogHelper.Info("澶嶆鍖烘病鏈夊悎鏍肩殑鐗╁搧锛屾棤闇�嚜鍔ㄨ繑鍥�);
+                    LogHelper.Info("澶嶆鍖烘病鏈夊悎鏍肩殑鎴朎绾ф枡鐨勭墿鍝侊紝鏃犻渶鑷姩杩斿洖");
                     return;
                 }
 
                 var endLoc = db.Queryable<TN_Location>()
-                     .OrderBy(a => a.N_LAYER, OrderByType.Asc)
-                    .First(a => a.S_AREA_CODE == Settings.Areas[1]
+                .Where(a => a.S_AREA_CODE == Settings.Areas[1]
                 && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�
                 && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny()//涓嶈兘鏈夎揣
-                );
+                ).OrderBy(a => a.N_LAYER, OrderByType.Asc).First();
 
                 if (endLoc == null)
                 {
@@ -496,15 +512,15 @@
                     .LeftJoin<TN_Loc_Container>((o, i) => o.S_CNTR_CODE == i.S_CNTR_CODE)
                     .Where((o, i) => i.S_LOC_CODE == startLoc.S_CODE).First();
 
-                if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, "澶嶆鍚堟牸鑷姩鍥炲簱", 3, cginfo.S_CNTR_CODE, out string taskNo, cginfo.S_SPE))//鍒涘缓鎼�浠诲姟锛岃捣鐐圭粓鐐瑰鍣�+                if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, typename, 3, cginfo.S_CNTR_CODE, out string taskNo, cginfo.S_SPE))//鍒涘缓鎼�浠诲姟锛岃捣鐐圭粓鐐瑰鍣�                 {
                     LocationHelper.LockLoc(startLoc.S_CODE, 2);//璧风偣鍑哄簱閿侊紝
                     LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�-                    LogHelper.Info($"鐢熸垚澶嶆鍚堟牸鑷姩鍥炲簱浠诲姟鎴愬姛锛屽鍣ㄥ彿{cginfo.S_CNTR_CODE}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐箋endLoc.S_CODE}");
+                    LogHelper.Info($"鐢熸垚{typename}浠诲姟鎴愬姛锛屽鍣ㄥ彿{cginfo.S_CNTR_CODE}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐箋endLoc.S_CODE}");
 
                     Task task99 = Task.Run(() =>
                     {
-                        WMSHelper.InsertOpInfo("鑷姩杞", "澶嶆鍚堟牸鑷姩鍥炲簱", cginfo.S_CNTR_CODE);
+                        WMSHelper.InsertOpInfo("鑷姩杞", typename, cginfo.S_CNTR_CODE);
                     });
 
                     Task task27 = Task.Run(() =>
@@ -528,7 +544,7 @@
                 }
                 else
                 {
-                    LogHelper.Info($"鐢熸垚澶嶆鍚堟牸鑷姩鍥炲簱浠诲姟澶辫触锛屽鍣ㄥ彿{cginfo.S_CNTR_CODE}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐箋endLoc.S_CODE}");
+                    LogHelper.Info($"鐢熸垚{typename}浠诲姟澶辫触锛屽鍣ㄥ彿{cginfo.S_CNTR_CODE}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐箋endLoc.S_CODE}");
                     return;
                 }
 
@@ -536,6 +552,100 @@
             catch(Exception ex)
             {
                 LogHelper.Error("CGOkCheck鍙戠敓浜嗗紓甯�, ex);
+            }
+        }
+
+        /// <summary>
+        /// 鍦ㄥ妫�尯妫�祴鐗╁搧鍥炵倝鑳惰繕鏄姤搴�+        /// </summary>
+        public static void CGNGCheck()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            try
+            {
+                // 搴熸枡鐩存帴鍒犻櫎
+                var locCntFeiLiao = db.Queryable<TN_CG_Detail>()
+                    .LeftJoin<TN_Loc_Container>((o, i) => o.S_CNTR_CODE == i.S_CNTR_CODE)
+                    .LeftJoin<TN_Location>((o, i, s) => i.S_LOC_CODE == s.S_CODE)
+                    .Where((o, i, s) =>
+                    o.N_ITEM_STATE == 9 && o.S_ITEM_STATE == "搴熸枡"
+                    && s.S_AREA_CODE == Settings.Areas[7] && s.N_CURRENT_NUM > 0
+                    && s.N_LOCK_STATE == 0 && s.S_LOCK_STATE == "鏃�).First();
+
+                if (locCntFeiLiao != null)
+                {
+                    var reuslt1 = db.Deleteable<TN_CG_Detail>().Where(a => a.S_CNTR_CODE == locCntFeiLiao.S_CNTR_CODE).ExecuteCommand();
+                    var reuslt2 = db.Deleteable<TN_Loc_Container>().Where(a => a.S_CNTR_CODE == locCntFeiLiao.S_CNTR_CODE).ExecuteCommand();
+                    LogHelper.Info($"鍒犻櫎浜嗗簾鏂檣locCntFeiLiao.S_CNTR_CODE},褰卞搷鐨勮鏁帮細{reuslt1}銆亄reuslt2}");
+                }
+
+                var startLoc = db.Queryable<TN_Location>()
+                    .LeftJoin<TN_Loc_Container>((o, i) => o.S_CODE == i.S_LOC_CODE)
+                    .LeftJoin<TN_CG_Detail>((o, i, s) => i.S_CNTR_CODE == s.S_CNTR_CODE)
+                    .Where((o, i, s) =>
+                    s.N_ITEM_STATE == 8 && s.S_ITEM_STATE == "鍥炵倝鑳�
+                    && o.S_AREA_CODE == Settings.Areas[7] && o.N_CURRENT_NUM > 0
+                    && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "鏃�).First();
+
+                var typename = "澶嶆鍖哄洖鐐夎兌鑷姩鍥炵倝";
+
+                if (startLoc == null)
+                {
+                    LogHelper.Info("澶嶆鍖烘病鏈夊洖鐐夎兌锛屾棤闇�嚜鍔ㄨ繑鍥�);
+                    return;
+                }
+
+                var cginfo = db.Queryable<TN_CG_Detail>()
+                    .LeftJoin<TN_Loc_Container>((o, i) => o.S_CNTR_CODE == i.S_CNTR_CODE)
+                    .Where((o, i) => i.S_LOC_CODE == startLoc.S_CODE).First();
+
+                if (cginfo == null)
+                {
+                    LogHelper.Info($"鏈壘鍒拌捣鐐箋startLoc.S_CODE}鐨勭墿鏂欎俊鎭�);
+                    return;
+                }
+
+                var endArea = db.Queryable<TN_TN_SPE>().First(a => a.S_SPE == cginfo.S_SPE || a.S_SPE == cginfo.S_ITEM_SPEC);
+                if (endArea == null || string.IsNullOrWhiteSpace(endArea.S_RETURN_AREA))
+                {
+                    LogHelper.Info($"鏈壘鍒拌鏍納cginfo.S_SPE}銆亄cginfo.S_ITEM_SPEC}鐨勮鏍奸厤缃俊鎭�鎶ヨ鐗╂枡鏈厤缃洖鐐夊簱鍖�);
+                    return;
+                }
+
+                var endLoc = db.Queryable<TN_Location>()
+                .Where(a => a.S_AREA_CODE == endArea.S_RETURN_AREA
+                && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�
+                && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny()//涓嶈兘鏈夎揣
+                ).OrderBy(a => a.N_LAYER, OrderByType.Asc).First();
+
+                if (endLoc == null)
+                {
+                    LogHelper.Info($"鍥炵倝缁堢偣搴撳尯{endArea.S_RETURN_AREA}宸叉弧鎴栬�宸插叏閮ㄩ攣浣�);
+                    return;
+                }
+
+                if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, typename, 3, cginfo.S_CNTR_CODE, out string taskNo, cginfo.S_SPE))//鍒涘缓鎼�浠诲姟锛岃捣鐐圭粓鐐瑰鍣�+                {
+                    LocationHelper.LockLoc(startLoc.S_CODE, 2);//璧风偣鍑哄簱閿侊紝
+                    LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�+                    LogHelper.Info($"鐢熸垚{typename}浠诲姟鎴愬姛锛屽鍣ㄥ彿{cginfo.S_CNTR_CODE}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐箋endLoc.S_CODE}");
+
+                    Task task99 = Task.Run(() =>
+                    {
+                        WMSHelper.InsertOpInfo("鑷姩杞", typename, cginfo.S_CNTR_CODE);
+                    });
+
+                    return;
+                }
+                else
+                {
+                    LogHelper.Info($"鐢熸垚{typename}浠诲姟澶辫触锛屽鍣ㄥ彿{cginfo.S_CNTR_CODE}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐箋endLoc.S_CODE}");
+                    return;
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error("CGNGCheck鍙戠敓浜嗗紓甯�, ex);
             }
         }
 
@@ -643,7 +753,7 @@
                     {
                         var cntCode = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == startLoc_3.S_CODE);
                         var outTimeCg = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == cntCode.S_CNTR_CODE);
-                        if (WCSHelper.CreateTask(startLoc_3.S_CODE, endLoc_3.S_CODE, "杩囨湡娆″搧鍥炵倝", 3, outTimeCg.S_CNTR_CODE,out string taskno, outTimeCg.S_SPE))
+                        if (WCSHelper.CreateTask(startLoc_3.S_CODE, endLoc_3.S_CODE, "杩囨湡娆″搧鍥炵倝", 3, outTimeCg.S_CNTR_CODE, out string taskno, outTimeCg.S_SPE))
                         {
                             LocationHelper.LockLoc(startLoc_3.S_CODE, 2);//璧风偣鍑哄簱閿侊紝
                             LocationHelper.LockLoc(endLoc_3.S_CODE, 1);//缁堢偣鍏ュ簱閿�@@ -1002,7 +1112,7 @@
         }
 
         /// <summary>
-        /// 妫�祴婊℃墭缂撳瓨搴撳尯涓嶅悎鏍肩殑鐗╁搧锛屾弧鎵樺嚭搴撳妫�+        /// 妫�祴婊℃墭缂撳瓨搴撳尯涓嶅悎鏍肩殑鐗╁搧锛屾弧鎵樺嚭搴撳埌澶嶆鍖猴紝鏇夸唬浜嗘媶鐩樺嚭搴�         /// </summary>
         internal static void CheckNoOkCg()
         {

--
Gitblit v1.9.1