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

---
 models/TN_CG_Detail.cs |    4 
 Program.cs             |    6 
 wms/LocationHelper.cs  |    6 
 core/Monitor.cs        |  132 ++++++++++++++++++++-
 models/TN_TN_SPE.cs    |    5 
 api/ApiHelper.cs       |  139 +++++++---------------
 api/ApiModel.cs        |   15 ++
 process/TaskProcess.cs |    6 
 core/WCSCore.cs        |    6 
 9 files changed, 203 insertions(+), 116 deletions(-)

diff --git a/Program.cs b/Program.cs
index 1e3de45..4cd32be 100644
--- a/Program.cs
+++ b/Program.cs
@@ -138,17 +138,19 @@
 
                 tasks.Add(GetTask(Monitor.CheckCntAndBoard));//鍚屾  TN_Container 鍧囪瀹炴椂鏄剧ず
 
-                tasks.Add(GetTask(Monitor.CheckNoOkCg));//妫�祴婊℃墭缂撳瓨搴撳尯涓嶅悎鏍肩殑鐗╁搧锛屾弧鎵樺嚭搴撳妫�+                tasks.Add(GetTask(Monitor.CheckNoOkCg));//妫�祴婊℃墭缂撳瓨搴撳尯涓嶅悎鏍肩殑鐗╁搧锛屾弧鎵樺嚭搴撳埌澶嶆鍖猴紝鏇夸唬浜嗘媶鐩樺嚭搴� 
                 //鏍规嵁S7/Modbus鍗忚鍒ゆ柇杈撻�绾跨殑淇″彿  鍘熸潗鏂欎骇绾垮簱鍖�>婊℃墭缂撳瓨搴撳尯锛岀┖鎵樼紦瀛樺簱鍖�>鍘熸潗鏂欎骇绾垮簱鍖�                 tasks.Add(GetTask(Monitor.CheckS7Devices));
 
                 tasks.Add(GetTask(Monitor.SynchronizationEquipPro));//鍚屾 TN_EquipProDetail  TN_InventoryM  骞存湀鏃ラ噸閲忚〃
 
-                tasks.Add(GetTask(Monitor.FullOutTime));//婊℃墭杩囨湡鍑哄簱 杩囨湡鍚堟牸鍥炲簱锛岃繃鏈熸鍝佸洖鐐�+                //tasks.Add(GetTask(Monitor.FullOutTime));//婊℃墭杩囨湡鍑哄簱 杩囨湡鍚堟牸鍥炲簱锛岃繃鏈熸鍝佸洖鐐� 
                 tasks.Add(GetTask(Monitor.CGOkCheck));// 鍦ㄥ妫�尯妫�祴鐗╁搧鍚堟牸锛屽悎鏍肩殑鐗╁搧鑷姩鍥炲簱
 
+                tasks.Add(GetTask(Monitor.CGNGCheck));// 鍦ㄥ妫�尯妫�祴鐗╁搧鍥炵倝鑳惰繕鏄姤搴�+
                 //tasks.Add(GetTask(Monitor.XBChekcFull));//绾胯竟婊℃墭璐т綅鑷姩瑙g粦
 
                 Task.WaitAll(tasks.ToArray());
diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 0cb6082..ef52fbb 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -202,10 +202,10 @@
                             && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                             OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//鏌ヨ鍚堥�鐨勭粓鐐硅揣浣�                 }
-                else if (model.cgState == 6)//涓�骇鏂欎簩绾ф枡鍥炲簱
+                else if (model.cgState == 6)//E绾ф枡浜岀骇鏂欏洖搴�                 {
                     cG_Detail.N_ITEM_STATE = 6;
-                    cG_Detail.S_ITEM_STATE = "涓�骇鏂�;
+                    cG_Detail.S_ITEM_STATE = "E绾ф枡";
                     endLoc = db.Queryable<TN_Location>().
                             Where(o => o.S_AREA_CODE == Settings.Areas[2] 
                             && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "鏃�
@@ -213,7 +213,7 @@
                             && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                             OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//鏌ヨ鍚堥�鐨勭粓鐐硅揣浣�                 }
-                else if (model.cgState == 7)//涓�骇鏂欎簩绾ф枡鍥炲簱
+                else if (model.cgState == 7)//E绾ф枡浜岀骇鏂欏洖搴�                 {
                     cG_Detail.N_ITEM_STATE = 7;
                     cG_Detail.S_ITEM_STATE = "浜岀骇鏂�;
@@ -227,7 +227,7 @@
                 else
                 {
                     result.resultCode = 6;
-                    result.resultMsg = $"鐗╂枡鐘舵�鍙兘涓�鍚堟牸1寰呮2涓嶅悎鏍硷紝涓嬬嚎鍗冲緟妫�紝3杩囨湡锛�鎶�湳鍒ゅ畾锛�娣峰悎锛�涓�骇鏂欍�7浜岀骇鏂欙紝濡傛灉涓哄叾浠栧�锛屽垯涓嶅鐞�;
+                    result.resultMsg = $"鐗╂枡鐘舵�鍙兘涓�鍚堟牸1寰呮2涓嶅悎鏍硷紝涓嬬嚎鍗冲緟妫�紝3杩囨湡锛�鎶�湳鍒ゅ畾锛�娣峰悎锛�E绾ф枡銆�浜岀骇鏂欙紝濡傛灉涓哄叾浠栧�锛屽垯涓嶅鐞�;
                     LogHelper.Info(result.resultMsg);
                     return result;
                 }
@@ -421,7 +421,7 @@
                     if (
                         db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() == 1 &&
                         db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() == 1 &&
-                        db.Insertable<TN_Loc_Container>(locCntList).ExecuteCommand() == 1 &&
+                        db.Insertable<TN_Loc_Container>(locCntList).ExecuteCommand() == locCntList.Count &&
                         db.Insertable<TN_Task>(task).ExecuteCommand() == 1
                         )
                     {
@@ -1828,7 +1828,7 @@
                 if (model.new_IsOK == model.old_IsOK)
                 {
                     result.resultCode = 19;
-                    result.resultMsg = $"浜哄伐鎷嗙洏鍏ュ簱锛岀墿鏂欓渶瑕佷竴涓緟妫�竴涓笉鍚堟牸";
+                    result.resultMsg = $"浜哄伐鎷嗙洏鍏ュ簱锛岀墿鏂欓渶瑕佷竴涓悎鏍�鍜�涓�釜涓嶅悎鏍硷紙鍥炵倝鑳舵垨搴熸枡锛�;
                     LogHelper.Info(result.resultMsg);
                     return result;
                 }
@@ -1857,6 +1857,8 @@
                     LogHelper.Info(result.resultMsg);
                     return result;
                 }
+                cG_old_Detail.S_ITEM_SPEC = model.old_Spec;
+                cG_old_Detail.S_SPE = model.old_Spec;
 
                 var startLoc_Old = db.Queryable<TN_Location>().
                     First(o => o.S_CODE == model.old_StartLoc && o.N_CURRENT_NUM == 0 && o.S_AREA_CODE == Settings.Areas[5] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "鏃�);
@@ -1920,13 +1922,12 @@
                 {
                     S_CNTR_CODE = model.new_CntIds,
                     S_BATCH_NO = cG_old_Detail.S_BATCH_NO,
-                    S_ITEM_SPEC = cG_old_Detail.S_ITEM_SPEC,
-                    S_SPE = cG_old_Detail.S_SPE,
+                    S_ITEM_SPEC = model.new_Spec,
+                    S_SPE = model.new_Spec,
                     S_ITEM_STATE = LocationHelper.GetStrByOk(model.new_IsOK),
                     N_ITEM_STATE = model.new_IsOK,
                     S_CAR_CODE = cG_old_Detail.S_CAR_CODE,
                     T_MODIFY = System.DateTime.Now,
-                    //C_ITEM_MERGE = model.new_CntIds,
                     S_ITEM_CODE = cG_old_Detail.S_ITEM_CODE,
                     S_Separate_ID = cG_old_Detail.S_Separate_ID
                 };
@@ -1936,7 +1937,7 @@
                 if (db.Queryable<TN_Task>().Count(a => a.N_B_STATE < 3 && a.S_END_LOC == weightPoint) > 2)
                 {
                     result.resultCode = 11;
-                    result.resultMsg = $"缁堢偣绉伴噸璐т綅{weightPoint}鐨勬鍦ㄦ墽琛岀殑浠诲姟鏁伴噺澶т簬2";
+                    result.resultMsg = $"缁堢偣绉伴噸璐т綅{weightPoint}鐨勬鍦ㄦ墽琛岀殑浠诲姟鏁伴噺澶т簬2锛岀箒蹇欙紝璇风瓑寰�;
                     LogHelper.Info(result.resultMsg);
                     return result;
                 }
@@ -1945,11 +1946,6 @@
                           First(o => o.S_AREA_CODE == Settings.Areas[9]
                           && o.S_CODE == weightPoint);//鏌ヨ鍚堥�鐨勭粓鐐硅揣浣嶏紝鍘荤О閲� 
-                var endLoc_NG = db.Queryable<TN_Location>().
-                          Where(o => o.S_AREA_CODE == Settings.Areas[8] 
-                          && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "鏃�
-                          && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()//涓嶈兘鏈夎揣
-                          && o.N_CURRENT_NUM == 0).First();//鏌ヨ鍚堥�鐨勭粓鐐硅揣浣� 
                 if (endLoc_Ok == null)
                 {
@@ -1959,53 +1955,48 @@
                     return result;
                 }
 
-                if (endLoc_NG == null)
-                {
-                    result.resultCode = 16;
-                    result.resultMsg = $"涓嶅悎鏍肩殑鐗╂枡鏈壘鍒板悎閫傜殑鎷嗙洏涓嶅悎鏍煎尯缁堢偣璐т綅{Settings.Areas[8]}";
-                    LogHelper.Info(result.resultMsg);
-                    return result;
-                }
-
                 var taskLog1_Old = $"鏃у鍣ㄥ彿{model.old_CntId}锛屾棫瀹瑰櫒鍙风殑璧风偣{startLoc_Old.S_CODE}锛岀粓鐐箋endLoc_Ok.S_CODE}";
 
-                var taskLog_New = $"鏂板鍣ㄥ彿{model.new_CntIds}锛屾柊瀹瑰櫒鍙风殑璧风偣{model.new_StartLoc}锛岀粓鐐箋endLoc_NG.S_CODE}";
+                var taskLog_New = $"鏂板鍣ㄥ彿{model.new_CntIds}锛屾柊瀹瑰櫒鍙风殑璧风偣{model.new_StartLoc}";
 
                 List<CreateTasks> modesCreateTask = new List<CreateTasks>();
 
-                var newTaskCreate = new CreateTasks()
+                if (model.new_IsOK == 0)
                 {
-                    taskNo = WCSHelper.GenerateTaskNo(),
-                    from = model.new_StartLoc,
-                    fromArea = startLoc_New.S_AREA_CODE,
-                    to = (model.new_IsOK == 2) ? endLoc_NG.S_CODE : endLoc_Ok.S_CODE,
-                    toArea = (model.new_IsOK == 2) ? endLoc_NG.S_AREA_CODE : endLoc_Ok.S_AREA_CODE,
-                    taskType = (model.new_IsOK == 2) ? "浜哄伐鎷嗙洏鍥炰笉鍚堟牸鍖� : "浜哄伐鎷嗙洏鍥炲簱",
-                    pri = 3,
-                    cntrInfo = model.new_CntIds,
-                    spec = cG_new_Detail_Ins.S_SPE,
-                };
-
-                modesCreateTask.Add(newTaskCreate);
-
-                var oldTaskCreate = new CreateTasks()
+                    var newTaskCreate = new CreateTasks()
+                    {
+                        taskNo = WCSHelper.GenerateTaskNo(),
+                        from = model.new_StartLoc,
+                        fromArea = startLoc_New.S_AREA_CODE,
+                        to =  endLoc_Ok.S_CODE,
+                        toArea = endLoc_Ok.S_AREA_CODE,
+                        taskType = "浜哄伐鎷嗙洏鍚堟牸鍥炲簱",
+                        pri = 3,
+                        cntrInfo = model.new_CntIds,
+                        spec = cG_new_Detail_Ins.S_SPE,
+                    };
+                    modesCreateTask.Add(newTaskCreate);
+                }
+                else if (model.old_IsOK == 1)
                 {
-                    taskNo = WCSHelper.GenerateTaskNo(),
-                    from = startLoc_Old.S_CODE,
-                    fromArea = startLoc_Old.S_AREA_CODE,
-                    to = (model.old_IsOK == 2) ? endLoc_NG.S_CODE : endLoc_Ok.S_CODE,
-                    toArea = (model.old_IsOK == 2) ? endLoc_NG.S_AREA_CODE : endLoc_Ok.S_AREA_CODE,
-                    taskType = (model.old_IsOK == 2) ? "浜哄伐鎷嗙洏鍥炰笉鍚堟牸鍖� : "浜哄伐鎷嗙洏鍥炲簱",
-                    pri = 3,
-                    cntrInfo = model.old_CntId,
-                    spec = cG_old_Detail.S_SPE,
-                };
-                modesCreateTask.Add(oldTaskCreate);
+                    var newTaskCreate = new CreateTasks()
+                    {
+                        taskNo = WCSHelper.GenerateTaskNo(),
+                        from = model.old_StartLoc,
+                        fromArea = startLoc_Old.S_AREA_CODE,
+                        to = endLoc_Ok.S_CODE,
+                        toArea = endLoc_Ok.S_AREA_CODE,
+                        taskType = "浜哄伐鎷嗙洏鍚堟牸鍥炲簱",
+                        pri = 3,
+                        cntrInfo = model.old_CntId,
+                        spec = cG_old_Detail.S_SPE,
+                    };
+                    modesCreateTask.Add(newTaskCreate);
+                }
 
                 startLoc_Old.N_LOCK_STATE = 2;
                 startLoc_Old.S_LOCK_STATE = "鍑哄簱閿�;
                 startLoc_Old.N_CURRENT_NUM = 1;
-
 
                 startLoc_New.N_LOCK_STATE = 2;
                 startLoc_New.S_LOCK_STATE = "鍑哄簱閿�;
@@ -2041,49 +2032,11 @@
                         if (WCSHelper.CreateTask(modesCreateTask))//鍒涘缓鎼�浠诲姟锛岃捣鐐圭粓鐐瑰鍣�                         {
                             tran.CommitTran();
-                            LogHelper.Info($"鐢熸垚浜哄伐鎷嗙洏鍏ュ簱浠诲姟鎴愬姛锛� + taskLog_New + taskLog1_Old);
+                            LogHelper.Info($"鐢熸垚浜哄伐鎷嗙洏鍚堟牸鍥炲簱浠诲姟鎴愬姛锛� + taskLog_New + taskLog1_Old);
 
                             Task task1 = Task.Run(() =>
                             {
-                                WMSHelper.InsertOpInfo(model.staff, "浜哄伐鎷嗙洏鍏ュ簱", model.new_CntIds + "," + model.old_CntId);
-                            });
-
-                            Task task2 = Task.Run(() =>
-                            {
-                                if (model.old_IsOK == 1)
-                                {
-                                    var target = new TN_RemeltDetail()
-                                    {
-                                        TASKNO = oldTaskCreate.taskNo,
-                                        CNTCODE = cG_old_Detail.S_CNTR_CODE,
-                                        STARTLOC = startLoc_Old.S_CODE,
-                                        LOGINNAME = model.staff,
-                                        ITEMCODE = cG_old_Detail.S_ITEM_CODE,
-                                        SPEC = cG_old_Detail.S_SPE,
-                                        CARCODE = cG_old_Detail.S_CAR_CODE,
-                                        WEIGHT = cG_old_Detail.F_QTY,
-                                        REMELTTIME = DateTime.Now,
-                                        SHIFT = model.shift,
-                                    };
-                                    SpecHelper.InsertRemeltDetail(target);
-                                }
-                                if (model.new_IsOK == 1)
-                                {
-                                    var target = new TN_RemeltDetail()
-                                    {
-                                        TASKNO = newTaskCreate.taskNo,
-                                        CNTCODE = cG_new_Detail_Ins.S_CNTR_CODE,
-                                        STARTLOC = startLoc_New.S_CODE,
-                                        LOGINNAME = model.staff,
-                                        ITEMCODE = cG_new_Detail_Ins.S_ITEM_CODE,
-                                        SPEC = cG_new_Detail_Ins.S_SPE,
-                                        CARCODE = cG_new_Detail_Ins.S_CAR_CODE,
-                                        WEIGHT = cG_new_Detail_Ins.F_QTY,
-                                        REMELTTIME = DateTime.Now,
-                                        SHIFT = model.shift,
-                                    };
-                                    SpecHelper.InsertRemeltDetail(target);
-                                }
+                                WMSHelper.InsertOpInfo(model.staff, "浜哄伐鎷嗙洏鍚堟牸鍥炲簱", model.new_CntIds + "," + model.old_CntId);
                             });
 
                             Task task27 = Task.Run(() =>
@@ -2126,7 +2079,7 @@
                         {
                             tran.RollbackTran();
                             result.resultCode = 17;
-                            result.resultMsg = $"鐢熸垚浜哄伐鎷嗙洏鍏ュ簱浠诲姟澶辫触锛� + taskLog_New + taskLog1_Old;
+                            result.resultMsg = $"鐢熸垚浜哄伐鎷嗙洏鍚堟牸鍥炲簱浠诲姟澶辫触锛� + taskLog_New + taskLog1_Old;
                             LogHelper.Info(result.resultMsg);
                             return result;
                         }
@@ -2135,7 +2088,7 @@
                     {
                         tran.RollbackTran();
                         result.resultCode = 18;
-                        result.resultMsg = $"鐢熸垚浜哄伐鎷嗙洏鍏ュ簱浠诲姟澶辫触锛� + taskLog_New + taskLog1_Old;
+                        result.resultMsg = $"鐢熸垚浜哄伐鎷嗙洏鍚堟牸鍥炲簱浠诲姟澶辫触锛� + taskLog_New + taskLog1_Old;
                         LogHelper.Info(result.resultMsg);
                         return result;
                     }
diff --git a/api/ApiModel.cs b/api/ApiModel.cs
index 14f623e..94dd817 100644
--- a/api/ApiModel.cs
+++ b/api/ApiModel.cs
@@ -431,18 +431,27 @@
         {
             public string old_CntId { get; set; }//鏃у鍣↖D锛岃鎷嗙殑
             public string old_StartLoc { get; set; }//鏃у鍣ㄧ殑璧风偣
-
             /// <summary>
-            /// 0鍚堟牸1寰呮2涓嶅悎鏍硷紝涓嬬嚎鍗冲緟妫�紝3杩囨湡锛�鎶�湳鍒ゅ畾锛�娣峰悎锛�涓�骇鏂欍�7浜岀骇鏂�+            /// 0鍚堟牸1寰呮2涓嶅悎鏍硷紝涓嬬嚎鍗冲緟妫�紝3杩囨湡锛�鎶�湳鍒ゅ畾锛�娣峰悎锛�E绾ф枡銆�浜岀骇鏂欍�8鍥炵倝鑳躲�9搴熸枡
             /// </summary>
             public int old_IsOK { get; set; }//鏃у鍣↖D锛屾棫瀹瑰櫒鐨勮揣鍝佺殑
+
+            public string old_Spec { get; set; }//鏃у鍣ㄧ殑璐у搧鐨勮鏍�+
+            public string old_CarCode { get; set; }//鏃у鍣ㄧ殑璐у搧鐨勮溅鍙�+
             public string new_CntIds { get; set; }//鎷嗗悗鐨勬柊瀹瑰櫒ID
             public string new_StartLoc { get; set; }//鏂板鍣↖D璧风偣
 
             /// <summary>
-            /// 0鍚堟牸1寰呮2涓嶅悎鏍硷紝涓嬬嚎鍗冲緟妫�紝3杩囨湡锛�鎶�湳鍒ゅ畾锛�娣峰悎锛�涓�骇鏂欍�7浜岀骇鏂�+            /// 0鍚堟牸1寰呮2涓嶅悎鏍硷紝涓嬬嚎鍗冲緟妫�紝3杩囨湡锛�鎶�湳鍒ゅ畾锛�娣峰悎锛�E绾ф枡銆�浜岀骇鏂欍�8鍥炵倝鑳躲�9搴熸枡
             /// </summary>
             public int new_IsOK { get; set; }//鏂板鍣↖D鐨勮揣鍝佺殑
+
+            public string new_Spec { get; set; }//鏂板鍣ㄧ殑璐у搧鐨勮鏍�+
+            public string new_CarCode { get; set; }//鏂板鍣ㄧ殑璐у搧鐨勮溅鍙�+
             public string staff { get; set; } = "None";//鎿嶄綔浜�             public string shift { get; set; } = "None";//鐝
         }
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()
         {
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index 68db574..041a691 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -69,7 +69,11 @@
                                     WCSHelper.Begin(tN_Task, model.forklift_no);//宸叉帹閫佺殑浠诲姟鐨勭姸鎬佹敼鎴愭墽琛�                                     Task task4 = Task.Run(() =>
                                     {
-                                        if (tN_Task.S_TYPE.Contains("鐐瑰鐐�) || tN_Task.S_TYPE.Contains("婊℃墭鍑哄簱涓婄嚎") || tN_Task.S_TYPE.Contains("婊℃墭鍑哄簱澶嶆"))
+                                        if (tN_Task.S_TYPE.Contains("鐐瑰鐐�) 
+                                        || tN_Task.S_TYPE.Contains("婊℃墭鍑哄簱涓婄嚎")
+                                        || tN_Task.S_TYPE.Contains("婊℃墭鍑哄簱澶嶆")
+                                        || tN_Task.S_TYPE.Contains("绌烘墭")
+                                        )
                                         {
                                             //涓嶅紑鍚壂鐮�                                         }
diff --git a/models/TN_CG_Detail.cs b/models/TN_CG_Detail.cs
index 81fb2b2..d653164 100644
--- a/models/TN_CG_Detail.cs
+++ b/models/TN_CG_Detail.cs
@@ -27,12 +27,12 @@
         public string S_SPE { get; set; }//货品规格
 
         /// <summary>
-        /// 0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6一级料、7二级料
+        /// 0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6E级料、7二级料、8回炉胶、9废料
         /// </summary>
         public string S_ITEM_STATE { get; set; }//货品状态
 
         /// <summary>
-        ///0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6一级料、7二级料
+        ///0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6E级料、7二级料、8回炉胶、9废料
         /// </summary>
         public int N_ITEM_STATE { get; set; }//货品状态_字典
         public string S_BATCH_NO { get; set; }//批次号
diff --git a/models/TN_TN_SPE.cs b/models/TN_TN_SPE.cs
index eba87b9..1b392de 100644
--- a/models/TN_TN_SPE.cs
+++ b/models/TN_TN_SPE.cs
@@ -19,6 +19,11 @@
         public string S_SPE { get; set; }
 
         /// <summary>
+        /// 瀵瑰簲鐨勫洖鐐夊尯
+        /// </summary>
+        public string S_RETURN_AREA { get; set; }
+
+        /// <summary>
         /// 杩囨湡鏃堕棿锛屽崟浣嶏細灏忔椂
         /// </summary>
         public int? N_EXPIRE_TIME { get; set; }
diff --git a/process/TaskProcess.cs b/process/TaskProcess.cs
index b3bc424..0d4ac1d 100644
--- a/process/TaskProcess.cs
+++ b/process/TaskProcess.cs
@@ -155,7 +155,11 @@
                     dic.Add(new param() { name = "IKey", value = "IKey" });
                     dic.Add(new param() { name = "From", value = start.ToString() });
 
-                    if (mst.S_TYPE.Contains("鐐瑰鐐�) || mst.S_TYPE.Contains("婊℃墭鍑哄簱涓婄嚎") || mst.S_TYPE.Contains("婊℃墭鍑哄簱澶嶆"))
+                    if (mst.S_TYPE.Contains("鐐瑰鐐�) 
+                        || mst.S_TYPE.Contains("婊℃墭鍑哄簱涓婄嚎") 
+                        || mst.S_TYPE.Contains("婊℃墭鍑哄簱澶嶆")
+                        || mst.S_TYPE.Contains("绌烘墭")
+                        )
                     {
                         dic.Add(new param() { name = "FUNC", value = "0" });
                     }
diff --git a/wms/LocationHelper.cs b/wms/LocationHelper.cs
index 926ea92..3527034 100644
--- a/wms/LocationHelper.cs
+++ b/wms/LocationHelper.cs
@@ -522,7 +522,7 @@
         }
 
         /// <summary>
-        /// 0鍚堟牸1寰呮2涓嶅悎鏍硷紝涓嬬嚎鍗冲緟妫�紝3杩囨湡锛�鎶�湳鍒ゅ畾锛�娣峰悎锛�涓�骇鏂欍�7浜岀骇鏂�+        /// 0鍚堟牸1寰呮2涓嶅悎鏍硷紝涓嬬嚎鍗冲緟妫�紝3杩囨湡锛�鎶�湳鍒ゅ畾锛�娣峰悎锛�E绾ф枡銆�浜岀骇鏂�         /// </summary>
         /// <param name="state"></param>
         /// <returns></returns>
@@ -554,7 +554,7 @@
             }
             if (state == 6)
             {
-                return "涓�骇鏂�;
+                return "E绾ф枡";
             }
             if (state == 7)
             {
@@ -610,7 +610,7 @@
         public string rfId { get; set; }//瀹瑰櫒鍙� 
         /// <summary>
-        /// 0鍚堟牸1寰呮2涓嶅悎鏍硷紝3杩囨湡锛�鎶�湳鍒ゅ畾锛�娣峰悎锛�涓�骇鏂欍�7浜岀骇鏂�+        /// 0鍚堟牸1寰呮2涓嶅悎鏍硷紝3杩囨湡锛�鎶�湳鍒ゅ畾锛�娣峰悎锛�E绾ф枡銆�浜岀骇鏂�         /// </summary>
         public int cgState { get; set; }//鐗╂枡鐘舵�
 

--
Gitblit v1.9.1