From fe3167683576e5dd943fd5acc52e713652365def Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 09 六月 2025 17:13:06 +0800 Subject: [PATCH] 优化ERP下发库存/取货信息流程,添加记录表和header判断逻辑备用 --- api/ApiHelper.cs | 228 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 193 insertions(+), 35 deletions(-) diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs index cce68d9..5bf38d4 100644 --- a/api/ApiHelper.cs +++ b/api/ApiHelper.cs @@ -31,7 +31,7 @@ .First(); if (startLoc == null) { - return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦紒"); + return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細闇�锛�锛夋病鏈夐攣鐘舵�锛�锛夊綋鍓嶆棤瀹瑰櫒锛�锛夊睘浜庡彇鏀捐揣鍖�); } // 瀹瑰櫒 ID 鍜�鐗╂枡 ID 鏈寚瀹氾紝鐢辩郴缁熺洿鎺ョ敓鎴�@@ -45,6 +45,7 @@ S_LOC_CODE = startLoc.S_CODE, S_CNTR_CODE = cntId, }; + var cgDetail = new TN_CG_Detail() { S_ITEM_CODE = cgId, S_CNTR_CODE = cntId, @@ -65,7 +66,7 @@ } var task = WCSHelper.BuildInboundTask(startLoc, endLocCode, cntId); - LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�+ LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿� // 鏃犺鏄惁閫夋嫨缁堢偣璐ф灦锛岄兘绛夊埌绉伴噸涔嬪悗鍐嶈绠楃粓鐐硅揣浣� using (var tran = db.Ado.UseTran()) { @@ -122,6 +123,7 @@ try { // 浠诲姟鍙峰瓨鍦細缁堢偣璐ф灦鍜岀粓鐐逛綅缃负绌猴紝涓斾换鍔′负浜у搧鍏ュ簱(PDA) var task = db.Queryable<TN_Task>() + .Where(a => a.S_CODE == model.TaskNo) .Where(a => a.S_B_STATE == "鍙栬揣瀹屾垚" && a.S_TYPE == TaskName.浜у搧鍏ュ簱) .OrderBy(a => a.T_CREATE, SqlSugar.OrderByType.Desc).First(); @@ -141,22 +143,27 @@ } var endLoc = new TN_Location(); - if (cgDetail.F_QTY > 1500) { - // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-3灞傝揣鏋�+ if (cgDetail.F_QTY > 2000) { + // 閲嶉噺瓒呰繃2t锛屾姤閿�+ return BuildSimpleResult(8, $"鐗╂枡閲嶉噺{cgDetail.F_QTY}瓒呰繃2t"); + } + else if (cgDetail.F_QTY > 1500) { + // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-2灞傝揣鏋� endLoc = db.Queryable<TN_Location>() - .Where(a => a.S_CODE == model.endLoc) + .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 => a.N_LAYER <= 3) + .Where(a => a.N_LAYER <= 2) .First(); } else if (cgDetail.F_QTY > 0) { endLoc = db.Queryable<TN_Location>() - .Where(a => a.S_CODE == model.endLoc) + .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)) + .OrderBy(a => a.N_LAYER > 2 ? 0 : 1) // 浼樺厛鍙栧ぇ浜�鐨� //.Where(a => a.N_LAYER <= 3) .First(); } @@ -166,7 +173,7 @@ // 娌℃湁绗﹀悎鏉′欢鐨勮揣浣� if (endLoc == null) { - return BuildSimpleResult(6, $"璐т綅{model.endLoc}涓嶅瓨鍦紝鎴栦笉婊¤冻绉伴噸鏀剧疆瑕佹眰"); + return BuildSimpleResult(6, $"璐т綅{model.EndLoc}涓嶅瓨鍦紝鎴栦笉婊¤冻绉伴噸鏀剧疆瑕佹眰"); } // 淇敼浠诲姟缁堢偣涓篜DA鎸囧畾缁堢偣 @@ -230,8 +237,8 @@ var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); - LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+ LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+ LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { @@ -294,8 +301,8 @@ var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); - LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+ LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+ LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { @@ -322,6 +329,90 @@ return BuildSimpleResult(0, $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); } + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + public static SimpleResult CancelTask(CancelTaskInfo model) { + var db = new SqlHelper<object>().GetInstance(); + var info = ""; + try { + var task = db.Queryable<TN_Task>() + .Where(a => a.S_CODE == model.TaskNo) + .First(); + + if (task == null) { + return BuildSimpleResult(2, $"浠诲姟鍙穥model.TaskNo}涓嶅瓨鍦�); + } + + if (task.N_B_STATE == 0 && task.S_B_STATE == TN_Task.GetStateStr(0) + || task.N_B_STATE == 1 && task.S_B_STATE == TN_Task.GetStateStr(1)) { + + task.N_B_STATE = 4; + task.S_B_STATE = "鍙栨秷"; + + var starloc = db.Queryable<TN_Location>().First(a => a.S_CODE == task.S_START_LOC); + var endloc = db.Queryable<TN_Location>().First(a => a.S_CODE == task.S_END_LOC); + //var locCnt = db.Queryable<TN_Loc_Container>().First(a => a.S_CNTR_CODE == task.S_CNTR_CODE); + //var cg = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == task.S_CNTR_CODE); + + if (starloc != null) { + starloc.N_LOCK_STATE = 0; + starloc.S_LOCK_STATE = "鏃�; + //starloc.N_CURRENT_NUM = 0; + starloc.T_MODIFY = System.DateTime.Now; + } + + if (endloc != null) { + endloc.N_LOCK_STATE = 0; + endloc.S_LOCK_STATE = "鏃�; + //endloc.N_CURRENT_NUM = 0; + endloc.T_MODIFY = System.DateTime.Now; + } + + using (var tran = db.Ado.UseTran()) { + if (db.Updateable<TN_Location>(starloc).ExecuteCommand() <= 0) { + tran.RollbackTran(); + + info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触"; + + return BuildSimpleResult(0, info); + } + + if (endloc != null) { + if (db.Updateable<TN_Location>(endloc).ExecuteCommand() <= 0) { + tran.RollbackTran(); + + info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触"; + + return BuildSimpleResult(0, info); + } + } + + if (db.Updateable<TN_Task>(task).ExecuteCommand() <= 0) { + if (db.Updateable<TN_Location>(endloc).ExecuteCommand() <= 0) { + tran.RollbackTran(); + + info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触"; + + return BuildSimpleResult(0, info); + } + } + + tran.CommitTran(); + + info = $"浠诲姟{task.S_CODE}鍙栨秷鎴愬姛"; + + return BuildSimpleResult(0, info); + } + + } + else { + return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�); + } + } catch (Exception ex) { return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); @@ -463,8 +554,9 @@ internal static string GenerateNo(string snType, string prefix) { var id = SYSHelper.GetSerialNumber(snType, prefix); + var date = DateTime.Now.ToString("yyMMdd"); - return $"{prefix}{date}{id.ToString().PadLeft(4, '0')}"; + return $"{prefix}{date}-{id.ToString().PadLeft(5, '0')}"; // 褰㈠锛欳N250525-00011 } /// <summary> @@ -496,8 +588,8 @@ var cntID = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntID, taskName); - LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+ LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+ LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { @@ -559,8 +651,8 @@ var cntID = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntID, taskName); - LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+ LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+ LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { @@ -594,34 +686,67 @@ } public static ErpResult InboundDataSync(InboundDataSyncInfo model) { + //return BuildErpResult(1, "娴嬭瘯"); + var db = new SqlHelper<object>().GetInstance(); try { var err = ""; var cgDetailList = new List<TN_CG_Detail>(); - foreach (var inboundData in model.stockTransactions) { + var recordList = new List<TN_Inbound_DataRecord>(); + + foreach (var transaction in model.stockTransactions) { + // 鍐欏叆璁板綍琛�+ var record = new TN_Inbound_DataRecord { + S_LOCATION_CODE = transaction.locationCode, + S_STOCK_TRANS = transaction.stockTransactionId, + S_ITEM_CODE = transaction.itemCode, + S_ITEM_NAME = transaction.itemName, + S_ITEM_SHORT_DESC = transaction.itemShortDesc, + S_STOCK_QUANTITY = transaction.stockQuantity, + S_IN_QUANTITY = transaction.inQuantity, + S_TOTAL_PRICE = transaction.totalPrice, + S_STOCK_IN_TIME = transaction.stockInTime, + S_STORE_KEEPER = transaction.storeKeeper, + S_LINE_CODE = transaction.lineCode, + S_DELIVERY_ITEM_NO = transaction.deliveryItemNo, + S_SUPPLIER_NAME = transaction.supplierName, + S_INVENTORY_MAN = transaction.inventoryManager + }; + recordList.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 == inboundData.locationCode) + .Where(l => l.S_CODE == transaction.locationCode) .Select((l, c, d) => d) .First(); - + if (cgDetail == null) { - err += $"鍌ㄤ綅鐮亄inboundData.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�; + err += $"鍌ㄤ綅鐮亄transaction.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�; continue; } + cgDetail.S_ITEM_CODE = transaction.itemCode; + cgDetail.S_ITEM_NAME = transaction.itemName; - cgDetail.S_ITEM_CODE = inboundData.itemCode; - cgDetail.S_ITEM_NAME = inboundData.itemName; - cgDetailList.Add(cgDetail); } - if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) { - return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触"); + using (var tran = db.Ado.UseTran()) { + if (db.Insertable<TN_Inbound_DataRecord>(recordList).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildErpResult(500, $"鍐欏叆鍏ュ簱璁板綍琛ㄥけ璐�); + } + + if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触"); + } + + tran.CommitTran(); } if (err != "") { - return BuildErpResult(2, err); + return BuildErpResult(2, err + "鍏朵粬淇℃伅姝e父宸插啓鍏�); } return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛"); @@ -632,34 +757,67 @@ } public static ErpResult OutboundDataSync(OutboundDataSyncInfo model) { + //return BuildErpResult(1, "娴嬭瘯"); + var db = new SqlHelper<object>().GetInstance(); try { var err = ""; var cgDetailList = new List<TN_CG_Detail>(); - foreach (var inboundData in model.materialIssues) { + var recordList = new List<TN_Outbound_DataRecord>(); + + foreach (var issue in model.materialIssues) { + // 鍐欏叆璁板綍琛�+ var record = new TN_Outbound_DataRecord { + S_LOCATION_CODE = issue.locationCode, + S_ORDER_NO = issue.withdrawalOrderNo, + S_ITEM_CODE = issue.itemCode, + S_ITEM_NAME = issue.itemName, + S_SHORT_DESC = issue.itemShortDesc, + S_ACTUAL_QTY = issue.actualIssuedQty, + S_ISSUED_AMOUNT = issue.issuedAmount, + S_SUPPLIER_NAME = issue.supplierName, + S_ISSUER = issue.issuer, + S_ISSUE_DATE = issue.issueDate, + S_STORE_KEEPER = issue.storeKeeper, + S_LINE_CODE = issue.lineCode, + S_BATCH_NO = issue.batchNo + }; + recordList.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 == inboundData.locationCode) + .Where(l => l.S_CODE == issue.locationCode) .Select((l, c, d) => d) .First(); if (cgDetail == null) { - err += $"鍌ㄤ綅鐮亄inboundData.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�; + err += $"鍌ㄤ綅鐮亄issue.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�; continue; } - cgDetail.S_ITEM_CODE = inboundData.itemCode; - cgDetail.S_ITEM_NAME = inboundData.itemName; + cgDetail.S_ITEM_CODE = issue.itemCode; + cgDetail.S_ITEM_NAME = issue.itemName; cgDetailList.Add(cgDetail); } - if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) { - return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触"); + using (var tran = db.Ado.UseTran()) { + if (db.Insertable<TN_Outbound_DataRecord>(recordList).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildErpResult(500, $"鍐欏叆鍑哄簱璁板綍琛ㄥけ璐�); + } + + if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触"); + } + + tran.CommitTran(); } if (err != "") { - return BuildErpResult(2, err); + return BuildErpResult(2, err + "鍏朵粬淇℃伅姝e父宸插啓鍏�); } return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛"); -- Gitblit v1.9.1