From 59dc2aa6e3fe7f699c4f2d03b774763142c5698d Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期六, 05 七月 2025 17:31:54 +0800
Subject: [PATCH] 添加货位容器关系表锁、调整货架行号和记录表同步逻辑

---
 models/TN_Loc_Container.cs                                                           |    7 +
 Program.cs                                                                           |    3 
 wms/LocationHelper.cs                                                                |   16 --
 core/Monitor.cs                                                                      |  120 +++++++++++++++++++
 /dev/null                                                                            |    0 
 api/AgvController.cs                                                                 |    1 
 .vs/HH.WCS.Mobox3.AnGang/FileContentIndex/34ca764b-7d34-4fbf-b885-47b92ae831ee.vsidx |    0 
 api/ApiHelper.cs                                                                     |  165 +++++++++++++++++---------
 .vs/HH.WCS.Mobox3.AnGang/FileContentIndex/1b7f29d3-94a7-4eab-a19b-3b99fefb9d52.vsidx |    0 
 api/ApiModel.cs                                                                      |   10 +
 .vs/HH.WCS.Mobox3.AnGang/FileContentIndex/ccea7477-49f1-46b2-a1d0-45ffab1fc2c9.vsidx |    0 
 core/WCSCore.cs                                                                      |    2 
 12 files changed, 247 insertions(+), 77 deletions(-)

diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/040fc824-81e8-4390-903b-5e7d705a18ce.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/040fc824-81e8-4390-903b-5e7d705a18ce.vsidx
deleted file mode 100644
index c8c3172..0000000
--- a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/040fc824-81e8-4390-903b-5e7d705a18ce.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/1b7f29d3-94a7-4eab-a19b-3b99fefb9d52.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/1b7f29d3-94a7-4eab-a19b-3b99fefb9d52.vsidx
new file mode 100644
index 0000000..7c60500
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/1b7f29d3-94a7-4eab-a19b-3b99fefb9d52.vsidx
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/34ca764b-7d34-4fbf-b885-47b92ae831ee.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/34ca764b-7d34-4fbf-b885-47b92ae831ee.vsidx
new file mode 100644
index 0000000..7f4c111
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/34ca764b-7d34-4fbf-b885-47b92ae831ee.vsidx
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/5ccf4a7c-ee31-4f90-9aba-eb5f05866b98.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/5ccf4a7c-ee31-4f90-9aba-eb5f05866b98.vsidx
deleted file mode 100644
index 410db45..0000000
--- a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/5ccf4a7c-ee31-4f90-9aba-eb5f05866b98.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/67c4855d-af0b-4d46-837b-fbaab232d736.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/67c4855d-af0b-4d46-837b-fbaab232d736.vsidx
deleted file mode 100644
index bb3f97f..0000000
--- a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/67c4855d-af0b-4d46-837b-fbaab232d736.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/ccea7477-49f1-46b2-a1d0-45ffab1fc2c9.vsidx b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/ccea7477-49f1-46b2-a1d0-45ffab1fc2c9.vsidx
new file mode 100644
index 0000000..d34272f
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/ccea7477-49f1-46b2-a1d0-45ffab1fc2c9.vsidx
Binary files differ
diff --git a/Program.cs b/Program.cs
index af3c7cb..84cf1fb 100644
--- a/Program.cs
+++ b/Program.cs
@@ -129,6 +129,9 @@
                 tasks.Add(GetTask(WCSCore.Dispatch));
                 //tasks.Add(GetTask(Monitor.CheckCountOrder));
 
+                tasks.Add(GetTask(Monitor.InboundDataSync));
+                tasks.Add(GetTask(Monitor.OutboundDataSync));
+
                 Task.WaitAll(tasks.ToArray());
             }
             public void Stop() { Console.WriteLine("work stopped"); }
diff --git a/api/AgvController.cs b/api/AgvController.cs
index b807d60..617a9ab 100644
--- a/api/AgvController.cs
+++ b/api/AgvController.cs
@@ -17,7 +17,6 @@
     /// <summary>
     /// 璁惧淇℃伅涓婃姤锛坔osttoagv涓婃姤銆佹澀濂ュ爢鍨涙満銆佸浗鑷猘gv锛�     /// </summary>
-    [RoutePrefix("agv")]
     public class AgvController : ApiController
     {
         /// <summary>
diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 9b0fc26..3fe27af 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -9,6 +9,8 @@
 using HH.WCS.Mobox3.AnGang.util;
 using HH.WCS.Mobox3.AnGang.wms;
 
+using Newtonsoft.Json;
+
 using static HH.WCS.Mobox3.AnGang.api.ApiModel;
 using static HH.WCS.Mobox3.AnGang.api.OtherModel;
 
@@ -30,7 +32,7 @@
                 var startLoc = db.Queryable<TN_Location>()
                     .Where(a => a.S_CODE == model.StartLoc)
                     .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
-                    //.Where(a => a.N_CURRENT_NUM == 0)
+                    .Where(a => a.N_CURRENT_NUM == 0)
                     .Where(a => startAreas.Contains(a.S_AREA_CODE))
                     .First();
 
@@ -76,9 +78,9 @@
                     if (!int.TryParse(model.Row.Trim(), out int row)) {
                         return BuildSimpleResult(2, $"{model.Row} 涓嶅悎娉曪細鏃犳硶杞垚鏁存暟绫诲瀷");
                     }
-                    // 璐ф灦鎺掑彿鍙兘鏄�0 - 8
-                    if (row <= 0 || row > 8) {
-                        return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�-8涔嬮棿鐨勬暣鏁�);
+                    // 璐ф灦鎺掑彿鍙兘鏄�0 - 8锛�11-118锛�+                    if (row <= 110 || row > 118) {
+                        return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�11-118涔嬮棿鐨勬暣鏁�);
                     }
                 }
 
@@ -202,9 +204,9 @@
                     if (!int.TryParse(model.Row.Trim(), out int row)) {
                         return BuildSimpleResult(2, $"{model.Row} 涓嶅悎娉曪細鏃犳硶杞垚鏁存暟绫诲瀷");
                     }
-                    // 璐ф灦鎺掑彿鍙兘鏄�0 - 8
-                    if (row <= 0 || row > 8) {
-                        return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�-8涔嬮棿鐨勬暣鏁�);
+                    // 璐ф灦鎺掑彿鍙兘鏄�0 - 8锛�11-118锛�+                    if (row <= 110 || row > 118) {
+                        return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�11-118涔嬮棿鐨勬暣鏁�);
                     }
                 }
 
@@ -617,11 +619,25 @@
 
             var db = new SqlHelper<object>().GetInstance();
             try {
-                var err = "";
-                var cgDetailList = new List<TN_CG_Detail>();
-                var recordList = new List<TN_Inbound_DataRecord>();
+                if (model.stockTransactions.Count == 0) {
+                    return BuildErpResult(400, "涓嶈兘浼犲叆绌虹殑鏁版嵁鍒楄〃");
+                }
+
+                //var info = "";
+                //var cgDetailList = new List<TN_CG_Detail>();
+                var insetRecordList = new List<TN_Inbound_DataRecord>();
+                var deleteRecordOldList = new List<TN_Inbound_DataRecord> ();
+                //var errList = new List<TN_Inbound_DataRecord>();
 
                 foreach (var transaction in model.stockTransactions) {
+                    var recordOld = db.Queryable<TN_Inbound_DataRecord>()
+                        .Where(r => r.S_LOCATION_CODE == transaction.locationCode).First();
+                    if (recordOld != null) {
+                        deleteRecordOldList.Add(recordOld);
+                        //errList.Add(recordOld);
+                        //continue;
+                    }
+
                     // 鍐欏叆璁板綍琛�                     var record = new TN_Inbound_DataRecord {
                         S_LOCATION_CODE = transaction.locationCode,
@@ -639,44 +655,58 @@
                         S_SUPPLIER_NAME = transaction.supplierName,
                         S_INVENTORY_MAN = transaction.inventoryManager
                     };
-                    recordList.Add(record);
+                    insetRecordList.Add(record);
 
-                    // 鏌ヨ瀵瑰簲鐗╂枡
-                    var cgDetail = 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 => l.S_CODE == transaction.locationCode)
-                        .Select((l, c, d) => d)
-                        .First();
+                    //// 鏌ヨ瀵瑰簲鐗╂枡
+                    //var cgDetail = 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 => l.S_CODE == transaction.locationCode)
+                    //    .Select((l, c, d) => d)
+                    //    .First();
 
-                    if (cgDetail == null) {
-                        err += $"鍌ㄤ綅鐮亄transaction.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�;
-                        continue;
-                    }
-                    cgDetail.S_ITEM_CODE = transaction.itemCode;
-                    cgDetail.S_ITEM_NAME = transaction.itemName;
+                    //if (cgDetail == null) {
+                    //    err += $"鍌ㄤ綅鐮亄transaction.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�;
+                    //    continue;
+                    //}
+                    //cgDetail.S_ITEM_CODE = transaction.itemCode;
+                    //cgDetail.S_ITEM_NAME = transaction.itemName;
 
-                    cgDetailList.Add(cgDetail);
+                    //cgDetailList.Add(cgDetail);
                 }
                  
                 using (var tran = db.Ado.UseTran()) {
-                    if (db.Insertable<TN_Inbound_DataRecord>(recordList).ExecuteCommand() <= 0) {
+                    if (deleteRecordOldList.Count != 0 && db.Deleteable<TN_Inbound_DataRecord>(deleteRecordOldList).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return BuildErpResult(500, $"鍐欏叆鍏ュ簱璁板綍琛ㄥけ璐�);
+                        return BuildErpResult(500, $"鍒犻櫎鏃у叆搴撹褰曟暟鎹け璐ワ細{JsonConvert.SerializeObject(deleteRecordOldList)}");
                     }
 
-                    if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) {
+                    if (db.Insertable<TN_Inbound_DataRecord>(insetRecordList).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触");
+                        return BuildErpResult(500, $"鍐欏叆鍏ュ簱璁板綍琛ㄥけ璐�");
                     }
+
+                    //if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) {
+                    //    tran.RollbackTran();
+                    //    return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触锛佸緟鏇存柊鐗╂枡淇℃伅鏁伴噺={cgDetailList.Count}");
+                    //}
 
                     tran.CommitTran();
+                    return BuildErpResult(0, $"鍐欏叆鍏ュ簱璁板綍琛ㄦ垚鍔�");
                 }
 
-                if (err != "") {
-                    return BuildErpResult(2, err + "鍏朵粬淇℃伅姝e父宸插啓鍏�);
-                }
-                return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛");
+                //if (err != "") {
+                //    return BuildErpResult(2, err + "鍏朵粬淇℃伅姝e父宸插啓鍏�);
+                //}
+                //return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛");
 
+                // NOTE锛氭殏鏃朵笉妫�煡锛屼竾涓�RP鍙戦敊浜嗭紝鍙互閫夋嫨閲嶅彂
+
+                //if (errList.Count > 0) {
+                //    info = "鏇存敼鐗╂枡淇℃伅閮ㄥ垎鎴愬姛锛岄儴鍒嗗け璐ワ紝鍘熷洜锛氬綋鍓嶈揣浣嶅凡缁忕粰杩囩墿鏂欎俊鎭�;
+                //}
+                //else {
+                //    info = "鏇存敼鐗╂枡淇℃伅鎴愬姛!";
+                //}
             }
             catch (Exception ex) {
                 return BuildErpResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
@@ -688,11 +718,24 @@
 
             var db = new SqlHelper<object>().GetInstance();
             try {
-                var err = "";
-                var cgDetailList = new List<TN_CG_Detail>();
-                var recordList = new List<TN_Outbound_DataRecord>();
+                if (model.materialIssues.Count == 0) {
+                    return BuildErpResult(400, "涓嶈兘浼犲叆绌虹殑鏁版嵁鍒楄〃");
+                }
 
+                //var err = "";
+                //var cgDetailList = new List<TN_CG_Detail>();
+                //var recordList = new List<TN_Outbound_DataRecord>();
+                var insetRecordList = new List<TN_Outbound_DataRecord>();
+                var deleteRecordOldList = new List<TN_Outbound_DataRecord>();
                 foreach (var issue in model.materialIssues) {
+                    var recordOld = db.Queryable<TN_Outbound_DataRecord>()
+                        .Where(r => r.S_LOCATION_CODE == issue.locationCode).First();
+                    if (recordOld != null) {
+                        deleteRecordOldList.Add(recordOld);
+                        //errList.Add(recordOld);
+                        //continue;
+                    }
+
                     // 鍐欏叆璁板綍琛�                     var record = new TN_Outbound_DataRecord {
                         S_LOCATION_CODE = issue.locationCode,
@@ -709,44 +752,50 @@
                         S_LINE_CODE = issue.lineCode,
                         S_BATCH_NO = issue.batchNo
                     };
-                    recordList.Add(record);
+                    insetRecordList.Add(record);
 
-                    // 鏌ヨ瀵瑰簲鐗╂枡
-                    var cgDetail = 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 => l.S_CODE == issue.locationCode)
-                        .Select((l, c, d) => d)
-                        .First();
+                    //// 鏌ヨ瀵瑰簲鐗╂枡
+                    //var cgDetail = 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 => l.S_CODE == issue.locationCode)
+                    //    .Select((l, c, d) => d)
+                    //    .First();
 
-                    if (cgDetail == null) {
-                        err += $"鍌ㄤ綅鐮亄issue.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�;
-                        continue;
-                    }
+                    //if (cgDetail == null) {
+                    //    err += $"鍌ㄤ綅鐮亄issue.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�;
+                    //    continue;
+                    //}
 
-                    cgDetail.S_ITEM_CODE = issue.itemCode;
-                    cgDetail.S_ITEM_NAME = issue.itemName;
+                    //cgDetail.S_ITEM_CODE = issue.itemCode;
+                    //cgDetail.S_ITEM_NAME = issue.itemName;
 
-                    cgDetailList.Add(cgDetail);
+                    //cgDetailList.Add(cgDetail);
                 }
 
                 using (var tran = db.Ado.UseTran()) {
-                    if (db.Insertable<TN_Outbound_DataRecord>(recordList).ExecuteCommand() <= 0) {
+                    if (deleteRecordOldList.Count != 0 && db.Deleteable<TN_Outbound_DataRecord>(deleteRecordOldList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildErpResult(500, $"鍒犻櫎鏃у嚭搴撹褰曟暟鎹け璐ワ細{JsonConvert.SerializeObject(deleteRecordOldList)}");
+                    }
+
+                    if (db.Insertable<TN_Outbound_DataRecord>(insetRecordList).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
                         return BuildErpResult(500, $"鍐欏叆鍑哄簱璁板綍琛ㄥけ璐�);
                     }
 
-                    if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) {
-                        tran.RollbackTran();
-                        return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触");
-                    } 
+                    //if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) {
+                    //    tran.RollbackTran();
+                    //    return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触");
+                    //} 
 
                     tran.CommitTran();
+                    return BuildErpResult(0, $"鍐欏叆鍑哄簱璁板綍琛ㄦ垚鍔�");
                 }
 
-                if (err != "") {
-                    return BuildErpResult(2, err + "鍏朵粬淇℃伅姝e父宸插啓鍏�);
-                }
-                return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛");
+                //if (err != "") {
+                //    return BuildErpResult(2, err + "鍏朵粬淇℃伅姝e父宸插啓鍏�);
+                //}
+                //return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛");
 
             }
             catch (Exception ex) {
diff --git a/api/ApiModel.cs b/api/ApiModel.cs
index 0b61204..b77c8bb 100644
--- a/api/ApiModel.cs
+++ b/api/ApiModel.cs
@@ -108,6 +108,16 @@
             /// 棰濆淇℃伅2
             /// </summary>
             public string extraInfo2 { get; set; }
+
+            /// <summary>
+            /// 鍒涘缓鐢ㄦ埛
+            /// </summary>
+            public string createUser { get; set; }
+
+            /// <summary>
+            /// 鐘舵�鏇存敼鏃堕棿
+            /// </summary>
+            public string statusChangeTime { get; set; }
         }
 
         /// <summary>
diff --git a/core/Monitor.cs b/core/Monitor.cs
index d7c3deb..35739ea 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,7 +16,124 @@
     /// </summary>
     public class Monitor
     {
-        
+        public static void InboundDataSync() {
+            var db = new SqlHelper<object>().GetInstance();
+            try {
+                var inboundDataList = db.Queryable<TN_Inbound_DataRecord>().ToList();
+                LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細褰撳墠娌℃湁寰呭悓姝ョ殑ERP鐗╂枡淇℃伅");
+
+                var needDeleteDataList = new List<TN_Inbound_DataRecord>();
+                var needUpdateLocCntrRelList = new List<TN_Loc_Container>();
+                var needUpdateCgDetailList = new List<TN_CG_Detail>();
+                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) {
+                        var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First();
+                        if (cgDetail == null) {
+                            LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細璐т綅瀹瑰櫒琛ㄤ腑锛屽寘鍚揣浣�{locCntrRel.S_LOC_CODE}, 瀹瑰櫒={locCntrRel.S_CNTR_CODE}锛涗絾瀹瑰櫒瀵瑰簲鐨勭墿鏂欒〃锛屾病鏈夋壘鍒扮墿鏂欙紒");
+                            continue;
+                        }
+                        cgDetail.S_ITEM_CODE = inboundData.S_ITEM_CODE;
+                        cgDetail.T_MODIFY = DateTime.Now;
+                        locCntrRel.N_LOCK_STATE = 1;
+                        locCntrRel.T_MODIFY = DateTime.Now;
+                        needUpdateLocCntrRelList.Add(locCntrRel);
+                        needUpdateCgDetailList.Add(cgDetail);
+                        needDeleteDataList.Add(inboundData);
+                    }
+                }
+
+                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;
+                    }
+
+                    if (needUpdateCgDetailList.Count > 0 && db.Updateable<TN_CG_Detail>(needUpdateCgDetailList).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細鏍规嵁ERP淇℃伅锛屾洿鏂扮墿鏂欎俊鎭〃澶辫触锛� + JsonConvert.SerializeObject(needUpdateCgDetailList));
+                        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}");
+            }
+        }
+
+        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鐗╂枡淇℃伅");
+                }
+
+                var needDeleteDataList = new List<TN_Outbound_DataRecord>();
+                var needUpdateLocCntrRelList = new List<TN_Loc_Container>();
+                var needUpdateCgDetailList = new List<TN_CG_Detail>();
+                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) {
+                        var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First();
+                        if (cgDetail == null) {
+                            LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細璐т綅瀹瑰櫒琛ㄤ腑锛屽寘鍚揣浣�{locCntrRel.S_LOC_CODE}, 瀹瑰櫒={locCntrRel.S_CNTR_CODE}锛涗絾瀹瑰櫒瀵瑰簲鐨勭墿鏂欒〃锛屾病鏈夋壘鍒扮墿鏂欙紒");
+                            continue;
+                        }
+                        cgDetail.S_ITEM_CODE = outboundData.S_ITEM_CODE;
+                        cgDetail.T_MODIFY = DateTime.Now;
+                        locCntrRel.N_LOCK_STATE = 1;
+                        locCntrRel.T_MODIFY = DateTime.Now;
+                        needUpdateLocCntrRelList.Add(locCntrRel);
+                        needUpdateCgDetailList.Add(cgDetail);
+                        needDeleteDataList.Add(outboundData);
+                    }
+                }
+
+                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 (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}");
+            }
+        }
     }
 
 }
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index 7464964..383223a 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -206,6 +206,8 @@
                     return;
                 }
 
+                //row -= 100; // 118-1
+
                 // 鍙綋涔嬪墠鎸囧畾缁堢偣璐ф灦鍚庯紝鎵嶅皾璇曡绠楃粓鐐硅揣浣�                 if (cgDetail.F_QTY > 2000) {
                     // 閲嶉噺瓒呰繃 2t 
diff --git a/models/TN_Loc_Container.cs b/models/TN_Loc_Container.cs
index 0c58e8a..27a7a04 100644
--- a/models/TN_Loc_Container.cs
+++ b/models/TN_Loc_Container.cs
@@ -9,7 +9,12 @@
     {      
         public string S_LOC_CODE { get; set; }
         public string S_CNTR_CODE { get; set; }
-
+        
+        /// <summary>
+        /// 璐т綅瀹瑰櫒琛紝閿佺姸鎬侊紝榛樿涓�锛堥攣瀹氾細璐у搧鍏ュ簱锛屼絾娌℃湁鏇存柊ERP淇℃伅锛屼笉鑳藉嚭搴擄級<br/>
+        /// 褰揈RP淇℃伅瑕嗙洊鍚庯紝鏀逛负1锛岃〃绀哄彲浠ュ嚭鍏ュ簱
+        /// </summary>
+        public int N_LOCK_STATE { get; set; } = 0;
 
         [Navigate(NavigateType.OneToMany, nameof(TN_CG_Detail.S_CNTR_CODE))]
         public List<TN_CG_Detail> CntrItemRels { get; set; }
diff --git a/wms/LocationHelper.cs b/wms/LocationHelper.cs
index 20adf2f..246ed9d 100644
--- a/wms/LocationHelper.cs
+++ b/wms/LocationHelper.cs
@@ -105,22 +105,6 @@
                         {
                             site = Location.S_AGV_SITE;
                         }
-                        //if (Location.N_CURRENT_NUM == 1)
-                        //{
-                        //    site = Location.S_AGV_SITE2;
-                        //}
-                        //if (Location.N_CURRENT_NUM == 2)
-                        //{
-                        //    site = Location.S_AGV_SITE3;
-                        //}
-                        //if (Location.N_CURRENT_NUM == 3)
-                        //{
-                        //    site = Location.S_AGV_SITE4;
-                        //}
-                        //if (Location.N_CURRENT_NUM == 4)
-                        //{
-                        //    site = Location.S_AGV_SITE5;
-                        //}
                     }
                 }
             }

--
Gitblit v1.9.1