From 00aaf49a223be04fc58f6f7c09d95ce4b22ef087 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期五, 11 七月 2025 17:06:18 +0800
Subject: [PATCH] 修复盘点计划单、盘点单的状态更改逻辑

---
 models/TN_AG_Count_Order.cs |    4 
 util/Settings.cs            |    4 
 api/ApiHelper.cs            |  100 ++++++++++++++++++++++++++++++++-
 models/TN_AG_Count_Plan.cs  |    4 
 api/ApiModel.cs             |    5 +
 core/WCSCore.cs             |    1 
 api/MoboxController.cs      |   12 ++++
 models/TN_AG_Count_Diff.cs  |    2 
 8 files changed, 122 insertions(+), 10 deletions(-)

diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 10aca34..009a34b 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -1100,7 +1100,91 @@
 
         // 鐩樼偣鍔熻兘锛堟柊锛� 
+        internal static SimpleResult CheckOutboundOnce(CheckOutboundOnceInfo model) {
+            var taskName = TaskName.鐩樼偣鐞嗚揣鍑哄簱;
+            var db = new SqlHelper<object>().GetInstance();
 
+            try {
+                var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_CNTR_CODE == model.cntrCode);
+                if (locCntrRel == null) {
+                    return BuildSimpleResult(3, $"瀹瑰櫒 {model.cntrCode} 娌℃湁鎵惧埌瀵瑰簲鐨勮揣浣�);
+                }
+
+                // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級
+                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == locCntrRel.S_LOC_CODE && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && Settings.Areas[AreaIndex.H璐ф灦鍖篯.Contains(a.S_AREA_CODE));
+                if (startLoc == null) {
+                    return BuildSimpleResult(2, $"璧风偣浣嶇疆 {locCntrRel.S_LOC_CODE} 涓嶇鍚堝嚭搴撴潯浠�);
+                }
+
+                // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�+                var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.endLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y");
+                if (endLoc == null) {
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
+                }
+
+                var countOrder = db.Queryable<TN_AG_Count_Order>().Where(o => o.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First();
+                if (countOrder == null) {
+                    return BuildSimpleResult(6, $"娌℃湁鎵惧埌瀵瑰簲瀹瑰櫒{model.cntrCode}鐨勭洏鐐瑰崟鍙�");
+                }
+                countOrder.N_B_STATE = 1;
+
+                var unFinishedCount = db.Queryable<TN_AG_Count_Order>().Where(a => a.S_CP_NO == countOrder.S_CP_NO && a.S_COUNT_NO != countOrder.S_COUNT_NO && a.N_B_STATE == 0).Count();
+
+                var cntID = locCntrRel.S_CNTR_CODE;
+                var task = WCSHelper.BuildTask(startLoc, endLoc, cntID, taskName);
+                LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+                LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+
+                using (var tran = db.Ado.UseTran()) {
+                    if (unFinishedCount == 0 && db.Updateable<TN_AG_Count_Plan>().SetColumns(a =>a.N_B_STATE == 1).Where(a => a.S_CP_NO == countOrder.S_CP_NO).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鏇存柊鐩樼偣璁″垝鍗曠姸鎬佷负1澶辫触锛佸崟鍙凤細{countOrder.S_CP_NO}");
+                    }
+
+                    if (db.Updateable<TN_AG_Count_Order>(countOrder).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鏇存柊鐩樼偣鍗曠姸鎬佷负1澶辫触锛�+ JsonConvert.SerializeObject(countOrder));
+                    }
+
+                    if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
+                        it.N_LOCK_STATE,
+                        it.S_LOCK_STATE,
+                        it.S_LOCK_OP,
+                        it.T_MODIFY
+                    }).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}");
+                    }
+
+                    if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
+                        it.N_LOCK_STATE,
+                        it.S_LOCK_STATE,
+                        it.S_LOCK_OP,
+                        it.T_MODIFY
+                    }).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
+                    }
+
+                    if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(500,
+                            $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
+                    }
+
+                    tran.CommitTran();
+                    return BuildSimpleResult(0,
+                        $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
+                }
+            }
+            catch (Exception ex) {
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+            }
+        }
 
         // 澶囩敤锛氱洏鐐圭浉鍏冲姛鑳斤紙鎭㈠锛�-----------------------------
 
@@ -1401,16 +1485,26 @@
                     return BuildSimpleResult(4, $"褰撳墠鐗╂枡鎵�湪瀹瑰櫒{locCntrRel.S_CNTR_CODE}鐗╂枡淇℃伅娌℃湁鐢熸垚瀵瑰簲鐨勭洏鐐瑰樊寮傝〃锛�);
                 }
 
+
                 countDiff.F_QTY = cgDetail.F_QTY;
                 countDiff.F_ACTUAL_QTY = model.qty;
                 //countDiff.S_ITEM_CODE = cgDetail.S_ITEM_CODE;
-
+                cgDetail.F_QTY = model.qty;
                 //if (db.Insertable<TN_Count_Diff>(countDiff).ExecuteCommand() <= 0) {
                 //    return BuildSimpleResult(3, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�);
                 //}
+                using (var tran = db.Ado.UseTran()) {
+                    if (db.Updateable<TN_AG_Count_Diff>(countDiff).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(5, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�);
+                    }
 
-                if (db.Updateable<TN_AG_Count_Diff>(countDiff).ExecuteCommand() <= 0) {
-                    return BuildSimpleResult(5, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�);
+                    if (db.Updateable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(5, $"鏇存柊鐗╂枡淇℃伅澶辫触");
+                    }
+
+                    tran.CommitTran();
                 }
 
                 return BuildSimpleResult(0, "鐩樼偣宸紓瀹屾垚");
diff --git a/api/ApiModel.cs b/api/ApiModel.cs
index c6eb912..ec2f874 100644
--- a/api/ApiModel.cs
+++ b/api/ApiModel.cs
@@ -233,6 +233,11 @@
             public float qty { get; set; }
         }
 
+        public class CheckOutboundOnceInfo {
+            public string cntrCode { get; set; }
+            public string endLoc { get; set; }
+        }
+
         /// <summary>
         /// 鐩樼偣鐞嗚揣鍑哄簱淇℃伅
         /// </summary>
diff --git a/api/MoboxController.cs b/api/MoboxController.cs
index 0ab6099..3591f09 100644
--- a/api/MoboxController.cs
+++ b/api/MoboxController.cs
@@ -1,5 +1,6 @@
 锘縰sing System.Web.Http;
 
+using HH.WCS.Mobox3.AnGang.util;
 using HH.WCS.Mobox3.AnGang.wms;
 
 using Newtonsoft.Json;
@@ -87,7 +88,18 @@
 
         // 鐩樼偣鍔熻兘锛堟柊锛� 
+        /// <summary>
+        /// 鐩樼偣鐞嗚揣鍑哄簱(WMS)
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("CheckOutboundOnce")]
+        public SimpleResult CheckOutboundOnce(CheckOutboundOnceInfo model) {
+            LogHelper.Info("瑙﹀彂API锛氱洏鐐圭悊璐у嚭搴�WMS)" + JsonConvert.SerializeObject(model), "API");
 
+            return ApiHelper.CheckOutboundOnce(model);
+        }
 
         // 澶囩敤锛氱洏鐐圭浉鍏冲姛鑳斤紙鎭㈠锛�-----------------------------------
 
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index 6363369..dbc691f 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -103,6 +103,7 @@
                     break;
                 case 2: // 瀹屾垚
                     WCSHelper.End(TN_Task); // 浠诲姟鐘舵�鏀规垚缁撴潫
+
                     break;
                 case 7: // 寮傚父
                     TaskProcess.OperateStatus(TN_Task, 7); // 寮傚父澶勭悊
diff --git a/models/TN_AG_Count_Diff.cs b/models/TN_AG_Count_Diff.cs
index c964b45..e260561 100644
--- a/models/TN_AG_Count_Diff.cs
+++ b/models/TN_AG_Count_Diff.cs
@@ -5,7 +5,7 @@
 using System.Threading.Tasks;
 
 namespace HH.WCS.Mobox3.AnGang.models {
-    public class TN_AG_Count_Diff {
+    public class TN_AG_Count_Diff : BaseModel {
         public string S_COUNT_NO { get; set; }
         public string S_CNTR_CODE { get; set; }
         public float F_QTY { get; set; } = 0f;
diff --git a/models/TN_AG_Count_Order.cs b/models/TN_AG_Count_Order.cs
index 06b3ee4..4c42bc7 100644
--- a/models/TN_AG_Count_Order.cs
+++ b/models/TN_AG_Count_Order.cs
@@ -8,7 +8,7 @@
 
 namespace HH.WCS.Mobox3.AnGang.models {
     [SugarTable("TN_AG_Count_Order")]
-    public class TN_AG_Count_Order {
+    public class TN_AG_Count_Order : BaseModel {
         public string S_COUNT_NO { get; set; }
         public string S_CP_NO { get; set; }
 
@@ -20,6 +20,6 @@
         /// <summary>
         /// 0 寰呯洏鐐癸紱1 鐩樼偣鎵ц涓紱2 鐩樼偣瀹屾垚寰呭洖搴擄紱3 鍥炲簱瀹屾垚锛堝彧鏈夊洖搴撳畬鎴愭椂鍙互鎵ц涓嬩竴涓换鍔★級
         /// </summary>
-        public int N_B_STATE { get; set; }
+        public int N_B_STATE { get; set; } = 0;
     }
 }
diff --git a/models/TN_AG_Count_Plan.cs b/models/TN_AG_Count_Plan.cs
index 4ac7a7e..87cbee4 100644
--- a/models/TN_AG_Count_Plan.cs
+++ b/models/TN_AG_Count_Plan.cs
@@ -8,9 +8,9 @@
 
 namespace HH.WCS.Mobox3.AnGang.models {
     [SugarTable("TN_AG_Count_Plan")]
-    public class TN_AG_Count_Plan {
+    public class TN_AG_Count_Plan : BaseModel {
         public string S_CP_NO { get; set; }
 
-        public int N_B_STATE { get; set; }
+        public int N_B_STATE { get; set; } = 0;
     }
 }
diff --git a/util/Settings.cs b/util/Settings.cs
index 4585a8a..ec89eab 100644
--- a/util/Settings.cs
+++ b/util/Settings.cs
@@ -108,8 +108,8 @@
 
     public class TaskName {
         public const string 浜у搧鍏ュ簱 = "浜у搧鍏ュ簱";
-        public const string 浜у搧閮ㄥ垎鍑哄簱 = "浜у搧閮ㄥ垎鍑哄簱";
-        public const string 浜у搧閮ㄥ垎鍥炲簱 = "浜у搧閮ㄥ垎鍥炲簱";
+        public const string 浜у搧閮ㄥ垎鍑哄簱 = "浜у搧鍑哄簱";
+        public const string 浜у搧閮ㄥ垎鍥炲簱 = "浜у搧鍥炲簱";
 
         // 澶囩敤锛氱洏鐐圭悊璐у嚭搴擄紙鎭㈠锛�         public const string 鐩樼偣鐞嗚揣鍑哄簱 = "鐩樼偣鐞嗚揣鍑哄簱";

--
Gitblit v1.9.1