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

---
 ServiceCore/OutboundCore.cs |  191 +++++++++++++++++------------------------------
 1 files changed, 69 insertions(+), 122 deletions(-)

diff --git a/ServiceCore/OutboundCore.cs b/ServiceCore/OutboundCore.cs
index a42caae..29e3cda 100644
--- a/ServiceCore/OutboundCore.cs
+++ b/ServiceCore/OutboundCore.cs
@@ -1,171 +1,118 @@
 锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
 
 using HH.WCS.Mobox3.DSZSH.Consts;
 using HH.WCS.Mobox3.DSZSH.Helpers;
 using HH.WCS.Mobox3.DSZSH.Helpers.Model;
 using HH.WCS.Mobox3.DSZSH.Models;
 
-using Newtonsoft.Json;
-
 namespace HH.WCS.Mobox3.DSZSH.ServiceCore {
-    /// <summary>
-    /// 瀹氭椂杞浠诲姟锛氬嚭搴撲笟鍔℃牳蹇�-    /// </summary>
     public class OutboundCore {
-        /// <summary>
-        /// 鍚庡彴杞鍑哄簱鍗�鍑哄簱鏄庣粏鍗曪紝鐢熸垚鍑哄簱浠诲姟琛�-        /// </summary>
-        public static void CheckOutboundOrder() {
+        public static void CheckOrderState() {
             var db = DbHelper.GetDbClient();
-
             try {
-                // 鏌ユ壘鎵�湁鐨�绛夊緟鍑哄簱 鐨�鍑哄簱鍗曪紝鎸�鍏堝垱寤哄厛澶勭悊 鎺掑簭
-                var orders = db.Queryable<TN_Outbound_Order>()
-                    .Where(o => o.N_B_STATE == 0)
-                    .OrderBy(o => o.T_CREATE)
-                    .Mapper(
-                        o => o.Details, // 灏嗗瓙琛ㄦ暟鎹槧灏勫埌涓昏〃鐨�Details 灞炴�
-                        o => o.S_NO,    // 涓昏〃鍏宠仈瀛楁
-                        d => d.S_NO     // 瀛愯〃鍏宠仈瀛楁
-                    )
-                    .ToList();
+                var order = db.Queryable<TN_Outbound_Order>()
+                    .Where(c => c.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟) 
+                    .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc).First();
 
-                if (orders.Count == 0) {
-                    LogHelper.Info("杞 | 褰撳墠娌℃湁绛夊緟鎵ц鐨勫嚭搴撳崟");
+                if (order == null) {
+                    LogHelper.Info("杞锛氭殏鏃犲緟鎵ц鐨勫嚭搴撳崟");
                     return;
                 }
 
-                using (var tran = db.Ado.UseTran()) {
-
-                    foreach (var o in orders) {
-                        foreach (var d in o.Details) {
-                            for (int i = 0; i < d.N_QTY; i++) {
-                                var task = new TN_Outbound_Task {
-                                    S_CG_ID = d.S_CG_ID,
-                                    S_END_AREA = d.S_END_AREA,
-                                    N_FORCE = o.N_FORCE,
-                                    S_BATCH_NO = d.S_BATCH_NO,
-                                    N_STATE = 0
-                                };
-                                if (db.Insertable<TN_Outbound_Task>(task).ExecuteCommand() <= 0) {
-                                    tran.RollbackTran();
-                                    LogHelper.Info("鎻掑叆浠诲姟鍑洪敊");
-                                    return;
-                                }
-                            }
-
-                            d.N_B_STATE = 1;
-                            if (db.Updateable<TN_Outbound_Detail>(d).UpdateColumns(c => c.N_B_STATE).ExecuteCommand() > 0) {
-                                LogHelper.Info("鏇存柊 N_B_STATE 鎴愬姛");
-                            }
-                            else {
-                                tran.RollbackTran();
-
-                                LogHelper.Info("鏇存柊 N_B_STATE 澶辫触");
-                                return;
-                            }
-                        }
-
-                        o.N_B_STATE = 1;
-                        if (db.Updateable<TN_Outbound_Order>(o).UpdateColumns(c => c.N_B_STATE).ExecuteCommand() > 0) {
-                            LogHelper.Info("鏇存柊 N_B_STATE 鎴愬姛");
-                        }
-                        else {
-                            tran.RollbackTran();
-
-                            LogHelper.Info("鏇存柊 N_B_STATE 澶辫触");
-                            return;
-                        }
-                    }
-
-                    tran.CommitTran();
-                }
-            }
-            catch (Exception ex) {
-                LogHelper.InfoEx(ex);
-                throw;
-            }
-        }
-
-        /// <summary>
-        /// 杞鍑哄簱
-        /// </summary>
-        public static void CheckOutboundTask() {
-            var db = DbHelper.GetDbClient();
-
-            try {
-                var task = db.Queryable<TN_Outbound_Task>()
-                    .Where(t => t.N_STATE == 0).First();
-
-                if (task == null) {
-                    LogHelper.Info("杞 | 鍑哄簱浠诲姟闃熷垪 鏆傛棤寰呮墽琛岀殑浠诲姟");
+                if (db.Queryable<TN_Outbound_Detail>()
+                    .First(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓� != null) {
+                    LogHelper.Debug("杞锛氫笂涓�釜鍑哄簱浠诲姟浠嶅湪杩涜涓�);
                     return;
                 }
 
-                var headTask = task;
-                if (headTask.N_STATE != 0) {
-                    LogHelper.Info("杞 | 鍑哄簱浠诲姟闃熷垪 闃熷ご浠诲姟灏氭湭瀹屾垚");
+                var detail = db.Queryable<TN_Outbound_Detail>()
+                    .Where(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟)
+                    .OrderBy(d => d.T_CREATE, SqlSugar.OrderByType.Asc).First();
+
+                if (detail == null) {
+                    //order.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓�
+
+                    LogHelper.Info("杞鍑哄簱锛氭殏鏃犲緟鎵ц鐨勪换鍔�);
                     return;
                 }
 
-                var locCntr = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail>
+                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 == headTask.S_CG_ID && d.S_BATCH_NO == headTask.S_BATCH_NO)
+                    .Where((l, c, d) => d.S_CG_ID == detail.S_CG_ID && d.S_BATCH_NO == detail.S_BATCH_NO)
                     // 濡傛灉涓嶆槸寮哄埗鍑哄簱锛岀墿鏂欑姸鎬佸繀椤诲繀椤诲悎鏍�-                    // 鍚﹀垯锛屽彧瑕佷笉鏄鍦ㄦ楠岀殑鐗╂枡鍗冲彲
-                    .Where((l, c, d) => (headTask.N_FORCE == 0 && d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸")
-                        || (headTask.N_FORCE != 0 && d.N_ITEM_STATE != 3 && d.S_ITEM_STATE != "姝e湪妫�獙"))
-                    // 鐗╂枡鐘舵�瀵瑰簲鐨勬暟瀛楋紝瓒婂皬瓒婁紭鍏�+                    // 鍚﹀垯锛屽彧瑕佷笉鏄�姝e湪妫�獙 鐨勭墿鏂欏嵆鍙�+                    .Where((l, c, d) => (detail.N_FORCE == 0 && d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸")
+                        || (detail.N_FORCE != 0 && d.N_ITEM_STATE != 3 && d.S_ITEM_STATE != "姝e湪妫�獙"))
+                    // 鎺掑簭锛氭暟瀛楄秺灏忚秺浼樺厛锛屽悎鏍硷紴寰呮锛炰笉鍚堟牸
                     .OrderBy((l, c, d) => d.N_ITEM_STATE)
                     .OrderBy(l => l.N_LAYER)
-                    .Select((l, c) => new { Location = l, Container = c }).First();
-                    
-                if (locCntr == null) {
-                    LogHelper.Info("杞 | 涓嶅瓨鍦ㄧ鍚堟潯浠剁殑鐗╂枡璐т綅");
+                    .Select((l, c) => c).First();
+
+                if (startLocCntrRel == null) {
+                    LogHelper.Info("杞锛氬嚭搴擄細娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�);
                     return;
                 }
 
                 var endLoc = db.Queryable<TN_Location>()
-                    .Where(l => l.S_AREA_CODE == headTask.S_END_AREA)
+                    .Where(l => l.S_AREA_CODE == detail.S_END_AREA)
                     .Where(ExprHelper.LocIsFree)
-                    .Where(ExprHelper.LocIsEmpty)
-                    .OrderBy(l => l.S_CODE)
-                    .First();
+                    .Where(ExprHelper.LocIsEmpty).First();
 
                 if (endLoc == null) {
-                    LogHelper.Info("杞 | 涓嶅瓨鍦ㄧ鍚堟潯浠剁殑鍑哄簱缁堢偣搴撲綅");
+                    LogHelper.Info("杞锛氬嚭搴擄細娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�);
                     return;
                 }
 
                 using (var tran = db.Ado.UseTran()) {
-                    if (TaskHelper.LogCreateTask(locCntr.Location.S_CODE, locCntr.Container.S_CNTR_CODE, endLoc.S_CODE, TaskName.鎴愬搧鑳跺嚭搴�) {
-                        task.N_STATE = 1;
-                        if (db.Updateable<TN_Outbound_Task>(task).UpdateColumns(c => c.N_STATE).ExecuteCommand() <= 0) {
-                            tran.RollbackTran();
-                            LogHelper.Info("淇敼鍑哄簱浠诲姟鐘舵�閿欒");
-                        }
-                        else {
-                            tran.CommitTran();
-                            LogHelper.Info("淇敼鍑哄簱浠诲姟鐘舵�鎴愬姛");
-                        }
+                    detail.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓�
+                    if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞锛氬嚭搴擄細鏇存柊澶辫触锛氫慨鏀规槑缁嗚〃鐘舵�涓哄畬鎴�);
+                    }
+
+                    if (TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE,
+                        endLoc.S_CODE, TaskName.鎴愬搧鑳跺嚭搴�) {
+                        tran.CommitTran();
+                    }
+                    else {
+                        tran.RollbackTran();
                     }
                 }
-                    
             }
             catch (Exception ex) {
                 LogHelper.InfoEx(ex);
             }
         }
 
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="state"></param>
-        public static void UpdateTaskState(int state = 2) {
+        public static void UpdateTaskState(int spotStateCode) {
+            var db = DbHelper.GetDbClient();
 
+            var detail = db.Queryable<TN_Outbound_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_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand();
+
+                if (db.Queryable<TN_Outbound_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 2) ==
+                    db.Queryable<TN_Outbound_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