From 968d603a08117e7e6707ffe07c6da9c325e36c08 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期一, 12 五月 2025 17:04:17 +0800
Subject: [PATCH] 完成并测试抽检出库的逻辑,修复相关问题

---
 ServiceCore/CheckCore.cs |  123 +++++++++++++++++++++++++++-------------
 1 files changed, 82 insertions(+), 41 deletions(-)

diff --git a/ServiceCore/CheckCore.cs b/ServiceCore/CheckCore.cs
index 9eee55a..4fdf160 100644
--- a/ServiceCore/CheckCore.cs
+++ b/ServiceCore/CheckCore.cs
@@ -9,62 +9,103 @@
 using HH.WCS.Mobox3.DSZSH.Helpers.Model;
 using HH.WCS.Mobox3.DSZSH.Models;
 
+using Org.BouncyCastle.Asn1.X509;
+
 namespace HH.WCS.Mobox3.DSZSH.ServiceCore {
-    /// <summary>
-    /// 瀹氭椂杞浠诲姟锛氭娊妫�笟鍔℃牳蹇�-    /// </summary>
     public class CheckCore {
-        /// <summary>
-        /// 杞鏌ョ湅鎶芥鍗曟槸鍚︽湁鎵ц涓殑椤圭洰
-        /// </summary>
-        public void CheckOrderState() {
+        public static void CheckOrderState() {
             var db = DbHelper.GetDbClient();
             try {
-                var orderList = db.Queryable<TN_Check_Order>()
-                    .Where(c => c.N_B_STATE == 0)
-                    .OrderBy(c => c.T_CREATE).ToList();
+                var order = db.Queryable<TN_Check_Order>()
+                    .Where(c => c.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟)
+                    .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc).First();
 
-                using (var tran = db.Ado.UseTran()) {
-                    foreach (var order in orderList) {
-                        var startLocList = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail>
-                            ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE)
-                            .Where((l, c, d) => d.S_CG_ID == order.S_CG_ID && d.S_BATCH_NO == order.S_BATCH_NO)
-                            .Select((l, c) => new { Location = l, Container = c })
-                            .Take(order.N_QTY).ToList(); // 鑾峰彇鎸囧畾鏁伴噺鐨勮揣浣嶆暟锛岄殢鏈烘娊鍙栨晠鏃犻渶鎺掑簭
+                if (order == null) {
+                    LogHelper.Info("鏆傛棤寰呮墽琛岀殑鎶芥鍗�);
+                    return;
+                }
 
-                        if (startLocList.Count < order.N_QTY) {
-                            LogHelper.Info($"杞 | 褰撳墠鍙娊妫�殑鐗╂枡鏁伴噺 {startLocList.Count} 鏃犳硶婊¤冻鎶芥鍗曟暟閲�{order.N_QTY} 瑕佹眰");
-                            return;
+                var detailList = db.Queryable<TN_Check_Detail>()
+                    .Where(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟).ToList();
+
+                if (detailList.Count == 0) {
+                    order.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓�
+                    db.Updateable<TN_Check_Order>(order).UpdateColumns(it => it.N_B_STATE).ExecuteCommand();
+                    return;
+                }
+
+                foreach (var detail in detailList) {
+                    var startLocCntrRel = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail>
+                        ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE)
+                        .Where((l, c, d) => d.S_CG_ID == detail.S_CG_ID && d.S_BATCH_NO == detail.S_BATCH_NO)
+                        .Select((l, c) => c) // 閫夋嫨 LocCntrRel
+                        .First(); // 闅忔満鎶芥锛屼笉鎺掑簭
+
+                    if (startLocCntrRel == null) {
+                        LogHelper.Info("娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�);
+                        continue;
+                    }
+
+                    var endLoc = db.Queryable<TN_Location>()
+                        .Where(l => l.S_AREA_CODE == detail.S_END_AREA)
+                        .Where(ExprHelper.LocIsFree)
+                        .Where(ExprHelper.LocIsEmpty).First();
+
+                    if (endLoc == null) {
+                        LogHelper.Info("鏌ヨ锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅");
+                        continue;
+                    }
+
+                    using (var tran = db.Ado.UseTran()) {
+                        detail.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓�
+                        if (db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            LogHelper.Info($"鏇存柊澶辫触锛氫慨鏀规娊妫�崟鏄庣粏琛ㄧ姸鎬佷负瀹屾垚");
                         }
 
-                        var endLocList = db.Queryable<TN_Location>()
-                            .Where(l => l.S_AREA_CODE == order.S_END_AREA)
-                            .Where(ExprHelper.LocIsFree)
-                            .Where(ExprHelper.LocIsEmpty)
-                            .Take(order.N_QTY).ToList(); // 鑾峰彇鎸囧畾鏁伴噺鐨勮揣浣嶆暟
-
-                        if (endLocList.Count < order.N_QTY) {
-                            LogHelper.Info($"杞 | 缁堢偣鍖哄煙鍙敤璐т綅 {startLocList.Count} 鏃犳硶婊¤冻鎶芥鍗曟暟閲�{order.N_QTY} 瑕佹眰");
-                            return;
+                        if (TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE,
+                            endLoc.S_CODE, TaskName.鎶芥)) {
+                            tran.CommitTran();
                         }
-
-                        // TODO 鍙傝�鍑哄簱锛屽鏋滆姹備换鍔¢『搴忎篃瑕佹柊鍒涘缓琛ㄥ瓨鍌紝鏈夐渶姹傚啀鏇存柊
-                        for (var i = 0; i < order.N_QTY; i++) {
-                            if (!TaskHelper.LogCreateTask(startLocList[i].Location.S_CODE, startLocList[i].Container.S_CNTR_CODE,
-                                endLocList[i].S_CODE, TaskName.鎶芥)) {
-                                tran.RollbackTran();
-                            }
+                        else {
+                            tran.RollbackTran();
                         }
-
-                        order.N_B_STATE = 1;
-                        db.Updateable<TN_Check_Order>(endLocList).UpdateColumns(c => c.N_B_STATE);
-                        tran.CommitTran();
-                    } 
+                    }
                 }
             }
             catch (Exception ex) {
                 LogHelper.InfoEx(ex);
             }
         }
+
+        public static void UpdateTaskState(int spotStateCode) {
+            var db = DbHelper.GetDbClient();
+
+            var detail = db.Queryable<TN_Check_Detail>()
+                .First(d => d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�;
+
+            if (detail == null) {
+                LogHelper.Info("褰撳墠娌℃湁鎵ц涓殑鎶芥鍗曟槑缁嗛」鐩�);
+                return;
+            }
+
+            using (var tran = db.Ado.UseTran()) {
+                detail.N_B_STATE = spotStateCode;
+                db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand();
+
+                if (db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 2) ==
+                    db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO)) {
+
+                    if (db.Updateable<TN_Check_Order>().SetColumns(it => it.N_B_STATE == SpotStateCode.浠诲姟鎵ц瀹屾垚)
+                        .Where(it => it.S_NO == detail.S_NO)
+                        .ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info("淇敼Order鐘舵�閿欒");
+                    }
+                }
+
+                tran.CommitTran();
+            }
+        }
     }
 }

--
Gitblit v1.9.1