From fbb7c2253c86d58583d7e3b0a8a44d0342c43c73 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期五, 25 七月 2025 17:20:52 +0800 Subject: [PATCH] 完善单容器多物料场景的优化重构, 优化ERP回报信息的处理 --- api/DebugController.cs | 70 +++++++++++ core/Monitor.cs | 189 +++++++++++++++++++++++-------- api/ApiHelper.cs | 43 +++--- api/ApiModel.cs | 1 core/WCSCore.cs | 30 ++-- 5 files changed, 243 insertions(+), 90 deletions(-) diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs index 2466c03..54515d1 100644 --- a/api/ApiHelper.cs +++ b/api/ApiHelper.cs @@ -371,15 +371,15 @@ return BuildSimpleResult(3, $"璇ヤ换鍔″凡鏈夌粓鐐�); } - var cgDetail = db.Queryable<TN_CG_Detail>() - .Where(a => a.S_CNTR_CODE == task.S_CNTR_CODE).First(); + var cgDetailList = db.Queryable<TN_CG_Detail>() + .Where(a => a.S_CNTR_CODE == task.S_CNTR_CODE).ToList(); - if (cgDetail == null) { + if (cgDetailList.Count == 0) { return BuildSimpleResult(4, $"鎵樼洏鐗╂枡涓嶅瓨鍦�); } var endLoc = new TN_Location(); - if (cgDetail.F_WEIGHT > 2000) { + if (task.F_WEIGHT > 2000) { // 閲嶉噺瓒呰繃2t锛屾姤閿� if (GZRobot.TryGetInteractionInfoId(task.S_CODE, out var id1)) { if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo { @@ -400,9 +400,9 @@ //return BuildSimpleResult(8, $"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触"); } - return BuildSimpleResult(8, $"鐗╂枡閲嶉噺{cgDetail.F_WEIGHT}瓒呰繃2t"); + return BuildSimpleResult(8, $"鐗╂枡閲嶉噺{task.F_WEIGHT}瓒呰繃2t"); } - else if (cgDetail.F_WEIGHT > 1500) { + else if (task.F_WEIGHT > 1500) { // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-2灞傝揣鏋� endLoc = db.Queryable<TN_Location>() .Where(a => a.S_CODE == model.EndLoc) @@ -412,7 +412,7 @@ .Where(a => a.N_LAYER <= 2) .First(); } - else if (cgDetail.F_WEIGHT > 0) { + else if (task.F_WEIGHT > 0) { endLoc = db.Queryable<TN_Location>() .Where(a => a.S_CODE == model.EndLoc) .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") @@ -423,7 +423,7 @@ .First(); } else { - return BuildSimpleResult(5, $"鐗╂枡閲嶉噺淇℃伅涓嶅悎娉曪細{cgDetail.F_WEIGHT}"); + return BuildSimpleResult(5, $"鐗╂枡閲嶉噺淇℃伅涓嶅悎娉曪細{task.F_WEIGHT}"); } // 娌℃湁绗﹀悎鏉′欢鐨勮揣浣�@@ -645,8 +645,8 @@ return BuildSimpleResult(2, $"褰撳墠璐т綅{model.startLoc}娌℃湁璐т綅瀹瑰櫒缁戝畾鍏崇郴锛屾棤闇�В缁戯紒"); } - var cgDetail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == locCntrRel.S_CNTR_CODE); - if (cgDetail != null) { + var cgDetailList = db.Queryable<TN_CG_Detail>().Where(a => a.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).ToList(); + if (cgDetailList.Count != 0) { return BuildSimpleResult(3, $"褰撳墠璐т綅{model.startLoc}瀹瑰櫒瀛樻斁鐨勭墿鏂欐暟閲忎笉涓�锛屾棤娉曡В缁戯紒"); } @@ -855,7 +855,7 @@ return BuildErpResult(400, "涓嶈兘浼犲叆绌虹殑鏁版嵁鍒楄〃"); } - var insetRecordList = new List<TN_Inbound_DataRecord>(); + var insertRecordList = new List<TN_Inbound_DataRecord>(); //var deleteRecordOldList = new List<TN_Inbound_DataRecord> (); foreach (var transaction in model.stockTransactions) { @@ -886,7 +886,7 @@ S_SUPPLIER_NAME = transaction.supplierName, S_INVENTORY_MAN = transaction.inventoryManager }; - insetRecordList.Add(record); + insertRecordList.Add(record); } @@ -896,7 +896,7 @@ // return BuildErpResult(500, $"鍒犻櫎鏃у叆搴撹褰曟暟鎹け璐ワ細{JsonConvert.SerializeObject(deleteRecordOldList)}"); //} - if (db.Insertable<TN_Inbound_DataRecord>(insetRecordList).ExecuteCommand() <= 0) { + if (db.Insertable<TN_Inbound_DataRecord>(insertRecordList).ExecuteCommand() <= 0) { tran.RollbackTran(); return BuildErpResult(500, $"鍐欏叆鍏ュ簱璁板綍琛ㄥけ璐�"); } @@ -919,7 +919,7 @@ return BuildErpResult(400, "涓嶈兘浼犲叆绌虹殑鏁版嵁鍒楄〃"); } - var insetRecordList = new List<TN_Outbound_DataRecord>(); + var insertRecordList = 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>() @@ -948,7 +948,7 @@ S_LINE_CODE = issue.lineCode, S_BATCH_NO = issue.batchNo }; - insetRecordList.Add(record); + insertRecordList.Add(record); } using (var tran = db.Ado.UseTran()) { @@ -957,7 +957,7 @@ // return BuildErpResult(500, $"鍒犻櫎鏃у嚭搴撹褰曟暟鎹け璐ワ細{JsonConvert.SerializeObject(deleteRecordOldList)}"); //} - if (db.Insertable<TN_Outbound_DataRecord>(insetRecordList).ExecuteCommand() <= 0) { + if (db.Insertable<TN_Outbound_DataRecord>(insertRecordList).ExecuteCommand() <= 0) { tran.RollbackTran(); return BuildErpResult(500, $"鍐欏叆鍑哄簱璁板綍琛ㄥけ璐�); } @@ -1220,9 +1220,9 @@ } var cgDetail = db.Queryable<TN_CG_Detail>() - .Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First(); + .Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE && d.S_ITEM_CODE == model.itemCode).First(); if (cgDetail == null) { - return BuildSimpleResult(3, $"褰撳墠璐т綅{model.locCode}涓婄殑瀹瑰櫒{locCntrRel.S_CNTR_CODE}娌℃湁鐗╁搧锛�); + return BuildSimpleResult(3, $"褰撳墠璐т綅{model.locCode}涓婄殑瀹瑰櫒{locCntrRel.S_CNTR_CODE}娌℃湁鐗╁搧{model.itemCode}锛�); } //var countDiff = new TN_Count_Diff { @@ -1231,11 +1231,10 @@ // F_ACTUAL_QTY = model.qty //}; - var countDiff = db.Queryable<TN_AG_Count_Diff>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First(); + var countDiff = db.Queryable<TN_AG_Count_Diff>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE && d.S_ITEM_CODE == model.itemCode).First(); if (countDiff == null) { - return BuildSimpleResult(4, $"褰撳墠鐗╂枡鎵�湪瀹瑰櫒{locCntrRel.S_CNTR_CODE}鐗╂枡淇℃伅娌℃湁鐢熸垚瀵瑰簲鐨勭洏鐐瑰樊寮傝〃锛�); + return BuildSimpleResult(4, $"褰撳墠鐗╂枡鎵�湪瀹瑰櫒{locCntrRel.S_CNTR_CODE}鐗╂枡淇℃伅{model.itemCode}娌℃湁鐢熸垚瀵瑰簲鐨勭洏鐐瑰樊寮傝〃锛�); } - countDiff.F_QTY = cgDetail.F_QTY; countDiff.F_ACTUAL_QTY = model.qty; @@ -1247,7 +1246,7 @@ using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_AG_Count_Diff>(countDiff).ExecuteCommand() <= 0) { tran.RollbackTran(); - return BuildSimpleResult(5, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�); + return BuildSimpleResult(5, $"鏇存柊鐩樼偣宸紓琛ㄥけ璐�); } if (db.Updateable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { diff --git a/api/ApiModel.cs b/api/ApiModel.cs index 567fccb..2ec251e 100644 --- a/api/ApiModel.cs +++ b/api/ApiModel.cs @@ -277,6 +277,7 @@ public class CountProductInfo { //public string cntrCode { get; set; } public string locCode { get; set; } + public string itemCode { get; set; } public float qty { get; set; } } diff --git a/api/DebugController.cs b/api/DebugController.cs index d948cb3..f83777f 100644 --- a/api/DebugController.cs +++ b/api/DebugController.cs @@ -4,13 +4,15 @@ using System.Web.Http; using HH.WCS.Mobox3.AnGang.dispatch; -using HH.WCS.Mobox3.AnGang.wms; using HH.WCS.Mobox3.AnGang.models; +using HH.WCS.Mobox3.AnGang.util; +using HH.WCS.Mobox3.AnGang.wms; using Newtonsoft.Json; +using SqlSugar; + using static HH.WCS.Mobox3.AnGang.api.ApiModel; -using HH.WCS.Mobox3.AnGang.util; namespace HH.WCS.Mobox3.AnGang.api { /// <summary> @@ -170,6 +172,70 @@ return ex.Message; } } + + [HttpPost] + public string AddCntrData() { + var db = new SqlHelper<object>().GetInstance(); + try { + //var locCntrRelList = db.Queryable<TN_Loc_Container>(); + //var result = db.Queryable<TN_CG_Detail>() + // .GroupBy(d => d.S_CNTR_CODE) // 鎸�S_CNTR_CODE 鍒嗙粍 + // .Select(d => new CntrCodeCountResult { + // S_CNTR_CODE = d.S_CNTR_CODE, + // Count = SqlFunc.AggregateCount(d.S_ITEM_CODE) // 璁$畻姣忕粍鐨勬潯鐩暟 + // }) + // .ToList(); + + //var cntrList = locCntrRelList.Select(c => c.S_CNTR_CODE); + + var result = db.Queryable<TN_CG_Detail>() + .LeftJoin<TN_Loc_Container>((detail, container) => detail.S_CNTR_CODE == container.S_CNTR_CODE) + .GroupBy(detail => detail.S_CNTR_CODE) + .Select((detail, container) => new CntrCodeCountResult { + S_CNTR_CODE = detail.S_CNTR_CODE, + Count = SqlFunc.AggregateCount(detail.S_ITEM_CODE) + }) + .ToList(); + + var cntrList = db.Queryable<TN_Container>().ToList(); + + var cntrListToUpdate = new List<TN_Container>(); + var cntrListToInsert = new List<TN_Container>(); + foreach (var cntr in result) { + var oldCntr = cntrList.Where(c => c.S_CODE == cntr.S_CNTR_CODE).First(); + if (oldCntr == null) { + cntrListToUpdate.Add(new TN_Container { S_CODE = cntr.S_CNTR_CODE, N_DETAIL_COUNT = cntr.Count }); + } + + if (oldCntr.N_DETAIL_COUNT != cntr.Count) { + cntrListToUpdate.Add(new TN_Container { S_CODE = cntr.S_CNTR_CODE, N_DETAIL_COUNT = cntr.Count }); + } + } + + using (var tran = db.Ado.UseTran()) { + if (cntrListToUpdate.Count > 0 && db.Updateable(cntrListToUpdate).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return "鏇存柊澶辫触"; + } + if (cntrListToInsert.Count > 0 && db.Insertable(cntrListToInsert).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return "鎻掑叆澶辫触"; + } + tran.CommitTran(); + } + } + catch (Exception ex) { + + return ex.Message; + } + + return "success"; + } + } + + public class CntrCodeCountResult { + public string S_CNTR_CODE { get; set; } // 瀹瑰櫒浠g爜 + public int Count { get; set; } // 璇ュ鍣ㄤ唬鐮佸搴旂殑鏉$洰鏁� } public class ReturnResults { diff --git a/core/Monitor.cs b/core/Monitor.cs index 9fbbcb6..1fca4ea 100644 --- a/core/Monitor.cs +++ b/core/Monitor.cs @@ -37,51 +37,64 @@ 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 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; - } - - cgDetailList.ForEach(d => { - if (!needDeleteCgDetailList.Contains(d)) { - needDeleteCgDetailList.Add(d); - } - }); - - // 闂瓺S , 鐢╨inq浼樺寲 - var cntr = needUpdateCntrList.Where(c => c.S_CODE == locCntrRel.S_CNTR_CODE).FirstOrDefault(); - if (cntr != null) { - - } - - // ERP 鏁版嵁 -> CG_Detail - 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换浜哄鍚�- - locCntrRel.N_LOCK_STATE = 1; - cgDetail.N_LOCK_STATE = 1; - - locCntrRel.T_MODIFY = DateTime.Now; - needUpdateLocCntrRelList.Add(locCntrRel); - //needUpdateCgDetailList.Add(cgDetailList); - needDeleteDataList.Add(inboundData); + if (locCntrRel == null) { + LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細璐т綅瀹瑰櫒缁戝畾琛ㄤ腑鏆傛棤璐т綅={inboundData.S_LOCATION_CODE}"); + continue; } + + // 瀛樺湪璐т綅瀹瑰櫒琛ㄤ絾娌℃壘鍒扮墿鏂欒〃 ( 閫氬父鎯呭喌涓嬩笉浼氬彂鐢�) + 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; + } + + // 瀵规煡鍒扮殑 cgDetailList , 寰呰鐩�, 娣诲姞鍒板緟鍒犻櫎鍒楄〃涓�+ foreach (var cgDetal in cgDetailList) { + if (!needDeleteCgDetailList.Contains(cgDetal)) { + needDeleteCgDetailList.Add(cgDetal); + } + } + + // 鏇存柊瀹瑰櫒琛ㄧ殑璐у搧鏄庣粏鏁伴噺 , 绗竴娆¤缃负 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 (needDeleteDataList.Count == 0) { LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細寰呮洿鏂扮殑ERP鐗╂枡淇℃伅锛屾殏鏃犵墿鏂欏彲浠ヨ鐩栵紝鐩墠寰呮洿鏂版暟閲忥細{inboundDataList.Count}"); + return; } using (var tran = db.Ado.UseTran()) { @@ -100,6 +113,24 @@ if (needUpdateLocCntrRelList.Count > 0 && db.Updateable<TN_Loc_Container>(needUpdateLocCntrRelList).ExecuteCommand() <= 0) { tran.RollbackTran(); LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細鏍规嵁ERP淇℃伅锛屾洿鏂拌揣浣嶅鍣ㄥ叧绯昏〃澶辫触锛� + JsonConvert.SerializeObject(needUpdateLocCntrRelList)); + return; + } + + 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; } @@ -126,31 +157,75 @@ 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) { - var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First(); + // 鍑哄簱涓嶅儚鍏ュ簱閭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}锛涗絾瀹瑰櫒瀵瑰簲鐨勭墿鏂欒〃锛屾病鏈夋壘鍒扮墿鏂欙紒"); + 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"); - actualQty = 0f; } - cgDetail.S_ITEM_CODE = outboundData.S_ITEM_CODE; - cgDetail.S_STORE_KEEPER = outboundData.S_STORE_KEEPER; - cgDetail.F_QTY = actualQty; - cgDetail.T_MODIFY = DateTime.Now; - locCntrRel.N_LOCK_STATE = 1; - cgDetail.N_LOCK_STATE = 1; - locCntrRel.T_MODIFY = DateTime.Now; + 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); - needUpdateCgDetailList.Add(cgDetail); needDeleteDataList.Add(outboundData); } } @@ -172,6 +247,18 @@ 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)); diff --git a/core/WCSCore.cs b/core/WCSCore.cs index b243075..c1b285a 100644 --- a/core/WCSCore.cs +++ b/core/WCSCore.cs @@ -153,10 +153,10 @@ return; } - var cgDetail = db.Queryable<TN_CG_Detail>() - .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).First(); + var cgDetailList = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).ToList(); - if (cgDetail == null) { + if (cgDetailList.Count == 0) { LogHelper.Info("璁剧疆缁堢偣璐т綅澶辫触锛氬綋鍓嶄换鍔$殑鎵樼洏鍙峰湪鐗╂枡琛ㄤ腑涓嶅瓨鍦�); return; } @@ -171,11 +171,11 @@ var weight_str = data[0].parameter_varchar200_up.Split(';')[1].Split('-')[1]; var weight = float.Parse(weight_str); - cgDetail.F_WEIGHT = weight; + cgDetailList.ForEach(d => d.F_WEIGHT = weight); tn_task.F_WEIGHT = weight; using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) { + if (db.Updateable<TN_CG_Detail>(cgDetailList).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) { tran.RollbackTran(); LogHelper.Info("淇敼鐗╂枡琛ㄩ噸閲忓け璐�); return; @@ -210,7 +210,7 @@ //row -= 100; // 111-118 => 1-8 // 鍙綋涔嬪墠鎸囧畾缁堢偣璐ф灦鍚庯紝鎵嶅皾璇曡绠楃粓鐐硅揣浣�- if (cgDetail.F_WEIGHT > 2000) { + if (tn_task.F_WEIGHT > 2000) { // 閲嶉噺瓒呰繃 2t endLoc = null; LogHelper.Info("閲嶉噺瓒呰繃2t锛屼笉鍏佽鍏ュ簱"); @@ -234,13 +234,13 @@ return; // 瓒呴噸浼氳嚜宸眗eturn锛屽鏋滃浗鑷猘gv娌℃帴鍙楀埌涔熶笉闇�鎻愬墠return } - else if (cgDetail.F_WEIGHT > 1500) { + else if (tn_task.F_WEIGHT > 1500) { // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-2灞傝揣鏋� endLoc = db.Queryable<TN_Location>() .First(a => a.N_ROW == row && a.N_LAYER <= 2 && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y"); } - else if (cgDetail.F_WEIGHT > 0) { + else if (tn_task.F_WEIGHT > 0) { // 閲嶉噺鏈秴杩�.5t锛屽湪鎸囧畾璐ф灦闅忎究閫夋嫨1涓� endLoc = db.Queryable<TN_Location>().Where(a => a.N_ROW == row && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") @@ -249,7 +249,7 @@ else { // 娌℃湁鎺ユ敹鍒伴噸閲忥紝鎴栭噸閲忓嚭閿� endLoc = null; - LogHelper.Info($"閿欒鐨勯噸閲忎俊鎭細{cgDetail.F_WEIGHT}"); + LogHelper.Info($"閿欒鐨勯噸閲忎俊鎭細{tn_task.F_WEIGHT}"); return; } @@ -332,10 +332,10 @@ try { - var cgDetail = db.Queryable<TN_CG_Detail>() - .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).First(); + var cgDetailList = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).ToList(); - if (cgDetail == null) { + if (cgDetailList == null) { LogHelper.Info("鏇存柊鐗╂枡閲嶉噺澶辫触锛氬綋鍓嶄换鍔$殑鎵樼洏鍙峰湪鐗╂枡琛ㄤ腑涓嶅瓨鍦�); return; } @@ -349,9 +349,9 @@ var weight_str = data[0].parameter_varchar200_up.Split(';')[1].Split('-')[1]; var weight = float.Parse(weight_str); - cgDetail.F_WEIGHT = weight; - - if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) { + cgDetailList.ForEach(a => a.F_WEIGHT = weight); + + if (db.Updateable<TN_CG_Detail>(cgDetailList).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) { LogHelper.Info("淇敼鐗╂枡琛ㄩ噸閲忓け璐�); return; } -- Gitblit v1.9.1