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

---
 api/ApiHelper.cs |  192 +++++++++++++++++++++++++++++++----------------
 1 files changed, 127 insertions(+), 65 deletions(-)

diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index c5fad07..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;
 
@@ -23,13 +25,15 @@
             var taskName = TaskName.浜у搧鍏ュ簱;
             var db = new SqlHelper<object>().GetInstance();
 
+            var startAreas = Settings.Areas[AreaIndex.Q鍙栬揣鍖篯;
+
             try {
                 // 璧风偣浣嶇疆蹇呴』锛氫负绌恒�鏃犻攣銆佸惎鐢ㄣ�灞炰簬鏀跺彂鍖哄煙
                 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 => Settings.Areas[0].Contains(a.S_AREA_CODE)) // 鏀跺彂鍖�+                    .Where(a => a.N_CURRENT_NUM == 0)
+                    .Where(a => startAreas.Contains(a.S_AREA_CODE))
                     .First();
 
                 if (startLoc == null) {
@@ -74,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涔嬮棿鐨勬暣鏁�);
                     }
                 }
 
@@ -150,13 +154,15 @@
             var taskName = TaskName.浜у搧鍏ュ簱;
             var db = new SqlHelper<object>().GetInstance();
 
+            var startAreas = Settings.Areas[AreaIndex.Q鍙栬揣鍖篯;
+
             try {
                 // 璧风偣浣嶇疆蹇呴』锛氫负绌恒�鏃犻攣銆佸惎鐢ㄣ�灞炰簬鏀跺彂鍖哄煙
                 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 => Settings.Areas[0].Contains(a.S_AREA_CODE)) // 鏀跺彂鍖�+                    .Where(a => startAreas.Contains(a.S_AREA_CODE))
                     .First();
 
                 if (startLoc == null) {
@@ -198,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涔嬮棿鐨勬暣鏁�);
                     }
                 }
 
@@ -261,6 +267,8 @@
 
             var db = new SqlHelper<object>().GetInstance();
 
+            var endAreas = Settings.Areas[AreaIndex.H璐ф灦鍖篯;
+
             try {
                 // 浠诲姟鍙峰瓨鍦細缁堢偣璐ф灦鍜岀粓鐐逛綅缃负绌猴紝涓斾换鍔′负浜у搧鍏ュ簱(PDA)
                 var task = db.Queryable<TN_Task>()
@@ -305,7 +313,7 @@
                         .Where(a => a.S_CODE == model.EndLoc)
                         .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
                         .Where(a => a.N_CURRENT_NUM == 0)
-                        .Where(a => Settings.Areas[1].Contains(a.S_AREA_CODE))
+                        .Where(a => endAreas.Contains(a.S_AREA_CODE))
                         .Where(a => a.N_LAYER <= 2)
                         .First();
                 }
@@ -314,7 +322,7 @@
                         .Where(a => a.S_CODE == model.EndLoc)
                         .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
                         .Where(a => a.N_CURRENT_NUM == 0)
-                        .Where(a => Settings.Areas[1].Contains(a.S_AREA_CODE))
+                        .Where(a => endAreas.Contains(a.S_AREA_CODE))
                         .OrderBy(a => a.N_LAYER > 2 ? 0 : 1) // 浼樺厛鍙栧ぇ浜�鐨�                         //.Where(a => a.N_LAYER <= 3)
                         .First();
@@ -375,11 +383,15 @@
             var taskName = TaskName.浜у搧閮ㄥ垎鍑哄簱;
             var db = new SqlHelper<object>().GetInstance();
 
+            var startAreas = Settings.Areas[AreaIndex.H璐ф灦鍖篯;
+            var endAreas = Settings.Areas[AreaIndex.X鍗歌揣鍖篯;
+
             try {
                 // 璧风偣浣嶇疆锛氳揣鏋讹紙鏈夎揣銆佹病鏈夐攣銆佸凡鍚敤锛�                 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 => startAreas.Contains(a.S_AREA_CODE))
                     .Where(a => a.N_CURRENT_NUM == 1)
                     .First();
 
@@ -393,7 +405,7 @@
                     return BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙嚭搴撶殑鐗╂枡");
                 }
 
-                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" && Settings.Areas[0].Contains(a.S_AREA_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" && endAreas.Contains(a.S_AREA_CODE));
 
                 if (endLoc == null) {
                     return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
@@ -446,9 +458,12 @@
             var taskName = TaskName.浜у搧閮ㄥ垎鍥炲簱;
             var db = new SqlHelper<object>().GetInstance();
 
+            var startAreas = Settings.Areas[AreaIndex.X鍗歌揣鍖篯;
+            var endAreas = Settings.Areas[AreaIndex.H璐ф灦鍖篯;
+
             try {
                 // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級
-                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && Settings.Areas[0].Contains(a.S_AREA_CODE));
+                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && startAreas.Contains(a.S_AREA_CODE));
                 if (startLoc == null) {
                     return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
                 }
@@ -459,7 +474,7 @@
                 }
 
                 // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�-                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");
+                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" && endAreas.Contains(a.S_AREA_CODE));
                 if (endLoc == null) {
                     return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
                 }
@@ -604,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,
@@ -626,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}");
@@ -675,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,
@@ -696,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) {

--
Gitblit v1.9.1