From fbb7c2253c86d58583d7e3b0a8a44d0342c43c73 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期五, 25 七月 2025 17:20:52 +0800
Subject: [PATCH] 完善单容器多物料场景的优化重构, 优化ERP回报信息的处理

---
 core/Monitor.cs |  339 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 231 insertions(+), 108 deletions(-)

diff --git a/core/Monitor.cs b/core/Monitor.cs
index 11ed38f..1fca4ea 100644
--- a/core/Monitor.cs
+++ b/core/Monitor.cs
@@ -8,6 +8,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.Linq;
 
 namespace HH.WCS.Mobox3.AnGang.core {
     /// <summary>
@@ -15,144 +16,266 @@
     /// </summary>
     public class Monitor
     {
-        public static void CheckCountOrder() {
-            var taskName = TaskName.鐩樼偣鐞嗚揣鍑哄簱;
+        public static void InboundDataSync() {
             var db = new SqlHelper<object>().GetInstance();
-            var info = "";
-
             try {
-                var orderList = db.Queryable<TN_Count_Order>()
-                    .Where(c => c.N_B_STATE == 1)
-                    .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc)
-                    .ToList();
-
-                if (orderList.Count == 0) {
-                    LogHelper.Info("杞--鍑哄簱--鏆傛棤寰呮墽琛岀殑Order");
+                var inboundDataList = db.Queryable<TN_Inbound_DataRecord>().ToList();
+                
+                if (inboundDataList.Count == 0 ) {
+                    LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細褰撳墠娌℃湁寰呭悓姝ョ殑ERP鐗╂枡淇℃伅");
                     return;
                 }
 
-                var detailList = new List<TN_Count_CG_Detail>();
-                foreach (var order in orderList) {
-                    var doingCount = db.Queryable<TN_Count_CG_Detail>()
-                        .Count(d => d.S_COUNT_NO == order.S_COUNT_NO && d.N_B_STATE >= 2); // 鎵ц涓�-                    var allCount = db.Queryable<TN_Count_CG_Detail>()
-                        .Count(d => d.S_COUNT_NO == order.S_COUNT_NO);
-                    LogHelper.Info($"杞--{taskName}--缁熻{taskName}鍗�{order.S_COUNT_NO}'浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}");
+                var needDeleteDataList = new List<TN_Inbound_DataRecord>();
+                var needUpdateLocCntrRelList = new List<TN_Loc_Container>();
+                //var needUpdateCgDetailList = new List<TN_CG_Detail>();
 
-                    if (doingCount == allCount) {
-                        order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц
-                        db.Updateable<TN_Count_Order>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
+                var needDeleteCgDetailList = new List<TN_CG_Detail>();
+                var needInsertCgDetailList = new List<TN_CG_Detail>();
+                var needUpdateCntrList = new List<TN_Container>();
+
+                foreach (var inboundData in inboundDataList) {
+                    var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_LOC_CODE == inboundData.S_LOCATION_CODE).First();
+                    // 鏆傛椂涓嶈�铏戝鏋滃綋鍓嶅叧绯昏〃锛岄攣鐘舵�涓�锛堝凡缁廍RP瑕嗙洊杩囷級鐨勬儏鍐碉紝榛樿鏈夊氨瑕嗙洊
+                    if (locCntrRel == null) {
+                        LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細璐т綅瀹瑰櫒缁戝畾琛ㄤ腑鏆傛棤璐т綅={inboundData.S_LOCATION_CODE}");
                         continue;
                     }
 
-                    var lastDetail = db.Queryable<TN_Count_CG_Detail>()
-                        .Where(d => d.S_COUNT_NO == order.S_COUNT_NO && d.N_B_STATE == 2) // TODO 鎴栬�鏀规垚鏌ask
-                        .First();
-                    if (lastDetail != null) {
-                        LogHelper.Info($"杞--{taskName}--{taskName}鍗�{order.S_COUNT_NO}'涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑锛�
-                            + JsonConvert.SerializeObject(lastDetail));
+                    // 瀛樺湪璐т綅瀹瑰櫒琛ㄤ絾娌℃壘鍒扮墿鏂欒〃 ( 閫氬父鎯呭喌涓嬩笉浼氬彂鐢�)
+                    var cgDetailList = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).ToList();
+                    if (cgDetailList.Count == 0) {
+                        LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細璐т綅瀹瑰櫒琛ㄤ腑锛屽寘鍚揣浣�{locCntrRel.S_LOC_CODE}, 瀹瑰櫒={locCntrRel.S_CNTR_CODE}锛涗絾瀹瑰櫒瀵瑰簲鐨勭墿鏂欒〃锛屾病鏈夋壘鍒扮墿鏂欙紒");
                         continue;
                     }
 
-                    var outboundDetail = db.Queryable<TN_Count_CG_Detail>()
-                        .Where(a => a.S_COUNT_NO == order.S_COUNT_NO && a.N_B_STATE == 1) // 宸蹭笅鍙�-                        .First();
-                    if (outboundDetail != null) {
-                        LogHelper.Info($"杞--{taskName}--");
-                        continue;
+                    // 瀵规煡鍒扮殑 cgDetailList , 寰呰鐩�, 娣诲姞鍒板緟鍒犻櫎鍒楄〃涓�+                    foreach (var cgDetal in cgDetailList) {
+                        if (!needDeleteCgDetailList.Contains(cgDetal)) {
+                            needDeleteCgDetailList.Add(cgDetal);
+                        }
                     }
 
-                    detailList.Add(outboundDetail);
+                    // 鏇存柊瀹瑰櫒琛ㄧ殑璐у搧鏄庣粏鏁伴噺 , 绗竴娆¤缃负 1 , 涔嬪悗姣忔 + 1
+                    var cntr = needUpdateCntrList.Where(c => c.S_CODE == locCntrRel.S_CNTR_CODE).FirstOrDefault();
+                    if (cntr != null) {
+                        cntr.N_DETAIL_COUNT += 1;
+                        cntr.T_MODIFY = DateTime.Now;
+                    }
+                    else {
+                        needUpdateCntrList.Add(new TN_Container { S_CODE = locCntrRel.S_CNTR_CODE, N_DETAIL_COUNT = 1 });
+                    }
+
+                    // ERP 鏁版嵁 -> CG_Detail
+                    // 璐у搧鍒楄〃涓殢渚挎壘涓�釜 cgDetail 璧嬪� , 鍙渶瑕佺‘淇�F_WEIGHT 鍜�S_EXT_ATTR5 ( IMG_URL ) 涓嶅彉鍗冲彲
+                    var cgDetail = cgDetailList.FirstOrDefault();
+
+                    cgDetail.S_ITEM_CODE = inboundData.S_ITEM_CODE;
+                    cgDetail.S_ITEM_SHORT_DESC = inboundData.S_ITEM_SHORT_DESC; // 鐗╂枡鐭弿杩�+                    cgDetail.S_IN_QUANTITY = inboundData.S_IN_QUANTITY; // 鍏ュ簱鏁伴噺
+                    cgDetail.S_STOCK_QUANTITY = inboundData.S_STOCK_QUANTITY; // 搴撳瓨鏁伴噺
+                    cgDetail.S_TOTAL_PRICE = inboundData.S_TOTAL_PRICE; // 搴撳瓨鎬讳环
+                    cgDetail.S_STORE_KEEPER = inboundData.S_STORE_KEEPER;
+                    cgDetail.S_LINE_CODE = inboundData.S_LINE_CODE;
+                    cgDetail.F_QTY = float.Parse(inboundData.S_IN_QUANTITY);
+                    cgDetail.T_MODIFY = DateTime.Now;
+                    //cgDetail.S_INVENTORY_MAN = inboundData.S_INVENTORY_MAN; // 搴撳瓨璐d换浜哄鍚�+
+                    cgDetail.N_LOCK_STATE = 1;
+                    locCntrRel.N_LOCK_STATE = 1;
+                    locCntrRel.T_MODIFY = DateTime.Now;
+
+                    needUpdateLocCntrRelList.Add(locCntrRel);
+                    //needUpdateCgDetailList.Add(cgDetailList);
+
+                    // 鏈�悗 , 灏嗗鐞嗗畬鐨勫叆搴撹褰曞姞鍏ュ垹闄ら槦鍒�+                    needDeleteDataList.Add(inboundData);
                 }
 
-                if (detailList.Count == 0) {
+                if (needDeleteDataList.Count == 0) {
+                    LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細寰呮洿鏂扮殑ERP鐗╂枡淇℃伅锛屾殏鏃犵墿鏂欏彲浠ヨ鐩栵紝鐩墠寰呮洿鏂版暟閲忥細{inboundDataList.Count}");
                     return;
                 }
 
-                var startLocList = new List<TN_Location>();
-                var endLocList = new List<TN_Location>();
-
-                var taskList = new List<TN_Task>();
-
-                foreach (var detail in detailList) {
-                    var startLoc = db.Queryable<TN_Location>()
-                        .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
-                        .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE)
-                        .First();
-
-                    if (startLoc == null) {
-                        LogHelper.Info($"杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�);
-                        continue;
+                using (var tran = db.Ado.UseTran()) {
+                    if (needDeleteDataList.Count > 0 && db.Deleteable<TN_Inbound_DataRecord>(needDeleteDataList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細鍒犻櫎宸叉湁鐗╂枡鐨勫叆搴撲俊鎭〃澶辫触锛� + JsonConvert.SerializeObject(needDeleteDataList));
+                        return;
                     }
 
-                    var endLoc = db.Queryable<TN_Location>()
-                        .Where(a => a.S_AREA_CODE == "SFQ")
-                        .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
-                        .Where(a => a.N_CURRENT_NUM == 0).First();
+                    //if (needUpdateCgDetailList.Count > 0 && db.Updateable<TN_CG_Detail>(needUpdateCgDetailList).ExecuteCommand() <= 0) {
+                    //    tran.RollbackTran();
+                    //    LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細鏍规嵁ERP淇℃伅锛屾洿鏂扮墿鏂欎俊鎭〃澶辫触锛� + JsonConvert.SerializeObject(needUpdateCgDetailList));
+                    //    return;
+                    //}
 
-                    if (endLoc == null) {
-                        LogHelper.Info($"杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛丼_NO涓�'{detail.S_COUNT_NO}'");
-                        continue;
+                    if (needUpdateLocCntrRelList.Count > 0 && db.Updateable<TN_Loc_Container>(needUpdateLocCntrRelList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細鏍规嵁ERP淇℃伅锛屾洿鏂拌揣浣嶅鍣ㄥ叧绯昏〃澶辫触锛� + JsonConvert.SerializeObject(needUpdateLocCntrRelList));
+                        return;
                     }
 
-                    detail.N_B_STATE = 2;
-
-                    var cntId = detail.S_CNTR_CODE;
-                    var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName);
-
-                    LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�-                    LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�-
-                    using (var tran = db.Ado.UseTran()) {
-                        if (db.Updateable<TN_Count_CG_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
-                            tran.RollbackTran();
-                            LogHelper.Info($"杞--鍑哄簱--淇敼鏄庣粏琛ㄧ姸鎬佷负瀹屾垚澶辫触锛�);
-                        }
-
-                        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();
-                            info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}";
-                            LogHelper.Info(info);
-                            continue;
-                        }
-
-                        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();
-                            info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}";
-                            LogHelper.Info(info);
-                            continue;
-                        }
-
-                        if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
-                            tran.RollbackTran();
-                            info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}";
-                            LogHelper.Info(info);
-                            continue;
-                        }
-
-                        tran.CommitTran();
-                        info = $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}";
-                        LogHelper.Info(info);
-                        continue;
+                    if (needDeleteCgDetailList.Count > 0 && db.Deleteable(needDeleteCgDetailList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞: 鍏ュ簱淇℃伅鍚屾: 鏍规嵁ERP淇℃伅, 鍒犻櫎鏃х墿鏂欐槑缁嗚〃澶辫触! " + JsonConvert.SerializeObject(needDeleteCgDetailList));
+                        return;
                     }
+
+                    if (needInsertCgDetailList.Count > 0 && db.Insertable(needInsertCgDetailList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞: 鍏ュ簱淇℃伅鍚屾: 鏍规嵁ERP淇℃伅, 鎻掑叆鏂扮墿鏂欐槑缁嗚〃澶辫触! " + JsonConvert.SerializeObject(needInsertCgDetailList));
+                        return;
+                    }
+
+                    if (needUpdateCntrList.Count > 0 && db.Updateable(needUpdateCntrList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞: 鍏ュ簱淇℃伅鍚屾: 鏍规嵁ERP淇℃伅, 鏇存柊瀹瑰櫒琛ㄥけ璐� " + JsonConvert.SerializeObject(needUpdateCntrList));
+                        return;
+                    }
+
+                    tran.CommitTran();
+                    LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細鏍规嵁ERP淇℃伅锛屾洿鏀硅揣浣嶅鍣ㄥ叧绯汇�璐у搧鏄庣粏鎴愬姛锛佸凡鏇存敼璐т綅锛� + JsonConvert.SerializeObject(needUpdateLocCntrRelList.Select(c => c.S_LOC_CODE).ToArray()));
                 }
+
             }
             catch (Exception ex) {
-                info = $"鍙戠敓浜嗗紓甯革細{ex.Message}";
-                LogHelper.Info(info);
+
+                LogHelper.Info($"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
+
+        public static void OutboundDataSync() {
+            var db = new SqlHelper<object>().GetInstance();
+            try {
+                var outboundDataList = db.Queryable<TN_Outbound_DataRecord>().ToList();
+
+                if (outboundDataList.Count== 0 ) {
+                    LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細褰撳墠娌℃湁寰呭悓姝ョ殑ERP鐗╂枡淇℃伅");
+                    return;
+                }
+                
+                var needDeleteDataList = new List<TN_Outbound_DataRecord>();
+                var needUpdateLocCntrRelList = new List<TN_Loc_Container>();
+
+                var needUpdateCgDetailList = new List<TN_CG_Detail>();
+                var needDeleteCgDetailList = new List<TN_CG_Detail>();
+                var needUpdateCntrList = new List<TN_Container>();
+
+                foreach (var outboundData in outboundDataList) {
+                    var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_LOC_CODE == outboundData.S_LOCATION_CODE).First();
+                    // 鏆傛椂涓嶈�铏戝鏋滃綋鍓嶅叧绯昏〃锛岄攣鐘舵�涓�锛堝凡缁廍RP瑕嗙洊杩囷級鐨勬儏鍐碉紝榛樿鏈夊氨瑕嗙洊
+                    if (locCntrRel != null) {
+                        // 鍑哄簱涓嶅儚鍏ュ簱閭f牱鐩存帴瑕嗙洊 , 鑰屾槸鏌ユ壘鍏蜂綋鐨勭墿鏂欑紪鐮�, 瀵规瘡涓繘琛屼慨鏀�+                        var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE && d.S_ITEM_CODE == outboundData.S_ITEM_CODE).First();
+                        if (cgDetail == null) {
+                            LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細璐т綅瀹瑰櫒琛ㄤ腑锛屽寘鍚揣浣�{locCntrRel.S_LOC_CODE}, 瀹瑰櫒={locCntrRel.S_CNTR_CODE}锛涗絾瀹瑰櫒瀵瑰簲鐨勭墿鏂欒〃锛屾病鏈夋壘鍒扮墿鏂檣outboundData.S_ITEM_CODE}锛�);
+                            continue;
+                        }
+
+                        var actualQty = float.Parse(outboundData.S_ACTUAL_QTY);
+                        if (actualQty > cgDetail.F_QTY) {
+                            LogHelper.Info($"瀹炲彂鏁伴噺瓒呰繃鐗╂枡鏁伴噺! 鐗╂枡缂栫爜={cgDetail.S_ITEM_CODE}, 褰撳墠鏁伴噺={cgDetail.F_QTY}, 瀹炲彂鏁伴噺='{outboundData.S_ACTUAL_QTY}'", "Error");
+                        }
+
+                        var currentQty = cgDetail.F_QTY - actualQty;
+                        if (currentQty <= 0) {
+                            needDeleteCgDetailList.Add(cgDetail);
+
+                            // 鏇存柊瀹瑰櫒琛ㄧ殑璐у搧鏄庣粏鏁伴噺 , 绗竴娆℃煡鎵惧苟 - 1 , 涔嬪悗姣忔 - 1
+                            var cntr = needUpdateCntrList.Where(c => c.S_CODE == locCntrRel.S_CNTR_CODE).FirstOrDefault();
+                            if (cntr != null) {
+                                if (cntr.N_DETAIL_COUNT == 0) {
+                                    LogHelper.Info($"瀹瑰櫒鏄庣粏鏁伴噺涓�, 鏃犳硶鍐嶅噺灏�", "Error");
+                                }
+                                else {
+                                    cntr.N_DETAIL_COUNT -= 1;
+                                    cntr.T_MODIFY = DateTime.Now;
+                                }
+                            }
+                            else {
+                                var actualCntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == locCntrRel.S_CNTR_CODE).First();
+                                if (actualCntr == null) {
+                                    LogHelper.Info($"瀹瑰櫒琛ㄤ腑娌℃湁瀹瑰櫒{actualCntr.S_CODE}!", "Error");
+                                }
+                                else {
+                                    if (actualCntr.N_DETAIL_COUNT == 0) {
+                                        LogHelper.Info($"瀹瑰櫒鏄庣粏鏁伴噺涓�, 鏃犳硶鍐嶅噺灏�", "Error");
+                                    }
+                                    else {
+                                        actualCntr.N_DETAIL_COUNT -= 1;
+                                        actualCntr.T_MODIFY = DateTime.Now;
+                                        needUpdateCntrList.Add(actualCntr);
+                                    }
+                                }
+                            }
+
+                        }
+                        else {
+                            cgDetail.S_ITEM_CODE = outboundData.S_ITEM_CODE;
+                            cgDetail.S_STORE_KEEPER = outboundData.S_STORE_KEEPER;
+                            cgDetail.F_QTY = currentQty;
+                            cgDetail.T_MODIFY = DateTime.Now;
+                            locCntrRel.N_LOCK_STATE = 1;
+                            cgDetail.N_LOCK_STATE = 1;
+                            cgDetail.S_STOCK_QUANTITY = currentQty.ToString();
+                            locCntrRel.T_MODIFY = DateTime.Now;
+
+                            needUpdateCgDetailList.Add(cgDetail);
+                        }
+
+                        // 灏辩畻cgDetail閮藉垹瀹屼簡, 涔熻繕鏄細淇濈暀璐т綅瀹瑰櫒淇℃伅, 涓嶄細鑷姩鍒犻櫎 ( 涓嶈繃鐞嗚涓婂彧鏈夊洖搴撲箣鍚庢墠浼氭洿鏂扮墿鏂欑殑 , 鎵�互鐗╂枡涓嶅彲鑳戒负绌�)
+                        needUpdateLocCntrRelList.Add(locCntrRel);
+                        needDeleteDataList.Add(outboundData);
+                    }
+                }
+
+                if (needDeleteDataList.Count == 0) {
+                    LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細寰呮洿鏂扮殑ERP鐗╂枡淇℃伅锛屾殏鏃犵墿鏂欏彲浠ヨ鐩栵紝鐩墠寰呮洿鏂版暟閲忥細{outboundDataList.Count}");
+                }
+
+                using (var tran = db.Ado.UseTran()) {
+                    if (needDeleteDataList.Count > 0 && db.Deleteable<TN_Outbound_DataRecord>(needDeleteDataList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細鍒犻櫎宸叉湁鐗╂枡鐨勫嚭搴撲俊鎭〃澶辫触锛� + JsonConvert.SerializeObject(needDeleteDataList));
+                        return;
+                    }
+
+                    if (needUpdateCgDetailList.Count > 0 && db.Updateable<TN_CG_Detail>(needUpdateCgDetailList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細鏍规嵁ERP淇℃伅锛屾洿鏂扮墿鏂欎俊鎭〃澶辫触锛� + JsonConvert.SerializeObject(needUpdateCgDetailList));
+                        return;
+                    }
+
+                    if (needDeleteCgDetailList.Count > 0 && db.Deleteable(needDeleteCgDetailList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細鏍规嵁ERP淇℃伅, 鍒犻櫎鏃х墿鏂欐槑缁嗚〃澶辫触! " + JsonConvert.SerializeObject(needDeleteCgDetailList));
+                        return;
+                    }
+
+                    if (needUpdateCntrList.Count > 0 && db.Updateable(needUpdateCntrList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細鏍规嵁ERP淇℃伅, 鏇存柊瀹瑰櫒琛ㄥけ璐� " + JsonConvert.SerializeObject(needUpdateCntrList));
+                        return;
+                    }
+
+                    if (needUpdateLocCntrRelList.Count > 0 && db.Updateable<TN_Loc_Container>(needUpdateLocCntrRelList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細鏍规嵁ERP淇℃伅锛屾洿鏂拌揣浣嶅鍣ㄥ叧绯昏〃澶辫触锛� + JsonConvert.SerializeObject(needUpdateLocCntrRelList));
+                        return;
+                    }
+
+                    tran.CommitTran();
+                    LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細鏍规嵁ERP淇℃伅锛屾洿鏀硅揣浣嶅鍣ㄥ叧绯汇�璐у搧鏄庣粏鎴愬姛锛佸凡鏇存敼璐т綅锛� + JsonConvert.SerializeObject(needUpdateLocCntrRelList.Select(c => c.S_LOC_CODE).ToArray()));
+                }
+
+            }
+            catch (Exception ex) {
+                LogHelper.Info($"鍙戠敓浜嗗紓甯革細{ex.Message}");
+            }
+        }
+
+        
     }
 
 }

--
Gitblit v1.9.1