From b183905d45e279eca8a845f532fc2d2edd540edb Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期四, 10 七月 2025 17:27:42 +0800 Subject: [PATCH] 重构盘点单表结构,修复部分盘点逻辑 --- api/ApiHelper.cs | 327 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 326 insertions(+), 1 deletions(-) diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs index 285284f..10aca34 100644 --- a/api/ApiHelper.cs +++ b/api/ApiHelper.cs @@ -358,7 +358,7 @@ $"鎻掑叆瀹瑰櫒璐у搧鏄庣粏琛ㄥけ璐ワ細瀹瑰櫒{cgDetail.S_CNTR_CODE}锛岀墿鏂檣cgDetail.S_ITEM_CODE}"); } } - + if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, @@ -1097,5 +1097,330 @@ return BuildErpResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); } } + + // 鐩樼偣鍔熻兘锛堟柊锛�+ + + + // 澶囩敤锛氱洏鐐圭浉鍏冲姛鑳斤紙鎭㈠锛�----------------------------- + + /// <summary> + /// 鐩樼偣鐞嗚揣鍑哄簱(WMS) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + internal static SimpleResult CheckOutbound(CheckOutboundInfo model) { + var taskName = TaskName.鐩樼偣鐞嗚揣鍑哄簱; + var db = new SqlHelper<object>().GetInstance(); + + 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[AreaIndex.H璐ф灦鍖篯.Contains(a.S_AREA_CODE)); + if (startLoc == null) { + return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝嚭搴撴潯浠�); + } + + var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc); + if (locCntrRel == null) { + 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"); + if (endLoc == null) { + return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�); + } + + var cntID = locCntrRel.S_CNTR_CODE; + var task = WCSHelper.BuildTask(startLoc, endLoc, cntID, taskName); + 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 { + it.N_LOCK_STATE, + it.S_LOCK_STATE, + it.S_LOCK_OP, + it.T_MODIFY + }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"); + } + + 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(); + return BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + tran.CommitTran(); + return BuildSimpleResult(0, + $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + /// <summary> + /// 鐩樼偣鐞嗚揣鍥炲簱(WMS) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + internal static SimpleResult CheckInbound(CheckInboundInfo model) { + var taskName = TaskName.鐩樼偣鐞嗚揣鍥炲簱; + var db = new SqlHelper<object>().GetInstance(); + + 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[AreaIndex.X鍗歌揣鍖篯.Contains(a.S_AREA_CODE)); + if (startLoc == null) { + return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�); + } + + var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc); + if (locCntrRel == null) { + 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[AreaIndex.H璐ф灦鍖篯.Contains(a.S_AREA_CODE)); + if (endLoc == null) { + return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�); + } + + var cntID = locCntrRel.S_CNTR_CODE; + var task = WCSHelper.BuildTask(startLoc, endLoc, cntID, taskName); + 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 { + it.N_LOCK_STATE, + it.S_LOCK_STATE, + it.S_LOCK_OP, + it.T_MODIFY + }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"); + } + + 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(); + return BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + tran.CommitTran(); + return BuildSimpleResult(0, + $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + //public static SimpleResult CreateCountPlan(CreateCountPlanInfo model) { + // var db = new SqlHelper<object>().GetInstance(); + // try { + + // var countPlan = new TN_Count_Plan() { + // S_CP_NO = GenerateNo("鐩樼偣璁″垝", "PDJH"), // CP =銆婸DJH + // S_TYPE = model.countType, + // }; + + // if (model.countType == "璐т綅") { + // countPlan.S_LOC_CODE = model.targetId; + // } + // else if (model.countType == "鐗╂枡") { + // countPlan.S_ITEM_CODE = model.targetId; + // } + // else { + // return BuildSimpleResult(2, $"鍒涘缓鐩樼偣璁″垝澶辫触锛氫笉鍚堟硶鐨勭洏鐐圭被鍨�'{model.countType}'"); + // } + + // if (db.Insertable<TN_Count_Plan>(countPlan).ExecuteCommand() <= 0) { + // return BuildSimpleResult(2, "鍒涘缓鐩樼偣璁″垝澶辫触"); + // } + + // return BuildSimpleResult(0, "鍒涘缓鐩樼偣璁″垝鎴愬姛"); + + // } + // catch (Exception ex) { + + // return BuildSimpleResult(1, ex.Message); + // } + //} + + //public static SimpleResult CreateCountOrder(CreateCountOrderInfo model) { + // var db = new SqlHelper<object>().GetInstance(); + // var info = ""; + // try { + // var countPlan = db.Queryable<TN_Count_Plan>() + // .Where(a => a.S_CP_NO == model.planId).First(); + + // if (countPlan == null) { + // return BuildSimpleResult(2, $"鐩樼偣璁″垝鍗曞彿 '{model.planId}' 涓嶅瓨鍦�); + // } + + // var countOrder = new TN_Count_Order() { + // S_CP_NO = model.planId, + // S_COUNT_NO = GenerateNo("鐩樼偣鍗�, "PDD"), // CN =銆婸DD + // }; + + // var countDetailList = new List<TN_Count_CG_Detail>(); + // if (countPlan.S_TYPE == "璐т綅") { + // 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 == countPlan.S_LOC_CODE) + // .Select((l, c, d) => d).First(); + + // if (cgDetail == null) { + // return BuildSimpleResult(3, $"鏈壘鍒版寚瀹氳揣浣峽countPlan.S_LOC_CODE}涓婄殑鐗╂枡"); + // } + + // var countDetail = new TN_Count_CG_Detail { + // S_COUNT_NO = countOrder.S_COUNT_NO, + // S_CNTR_CODE = cgDetail.S_CNTR_CODE, + // S_ITEM_CODE = cgDetail.S_ITEM_CODE, + // }; + + // countDetailList.Add(countDetail); + // } + // else if (countPlan.S_TYPE == "鐗╂枡") { + // var cgDetail = db.Queryable<TN_CG_Detail>() + // .Where(d => d.S_ITEM_CODE == countPlan.S_ITEM_CODE).First(); // ToList -> First + + // if (cgDetail == null) { + // return BuildSimpleResult(3, $"鏈壘鍒版寚瀹氱殑鐗╂枡{countPlan.S_ITEM_CODE}"); + // } + + // //foreach (var cgDetail in cgDetailList) { + // // var countDetail = new TN_Count_CG_Detail { + // // S_COUNT_NO = countOrder.S_COUNT_NO, + // // S_CNTR_CODE = cgDetail.S_CNTR_CODE, + // // S_ITEM_CODE = cgDetail.S_ITEM_CODE, + // // }; + + // // countDetailList.Add(countDetail); + // //} + + // var countDetail = new TN_Count_CG_Detail { + // S_COUNT_NO = countOrder.S_COUNT_NO, + // S_CNTR_CODE = cgDetail.S_CNTR_CODE, + // S_ITEM_CODE = cgDetail.S_ITEM_CODE, + // }; + + // countDetailList.Add(countDetail); + // } + // else { + // return BuildSimpleResult(3, $"璁″垝鍗�{model.planId}'鐨勭被鍨媨countPlan.S_TYPE}涓嶅悎娉�); + // } + + // using (var tran = db.Ado.UseTran()) { + // if (db.Insertable<TN_Count_Order>(countOrder).ExecuteCommand() <= 0) { + // tran.RollbackTran(); + // info = "鍒涘缓鐩樼偣鍗曞け璐�; + // return BuildSimpleResult(2, info); + // } + + // if (db.Insertable<TN_Count_CG_Detail>(countDetailList).ExecuteCommand() <= 0) { + // tran.RollbackTran(); + // info = "鍒涘缓鐩樼偣鍗曟槑缁嗗け璐�; + // return BuildSimpleResult(3, info); + // } + + // tran.CommitTran(); + // } + + // return BuildSimpleResult(0, "鍒涘缓鐩樼偣鍗曟垚鍔�); + // } + // catch (Exception ex) { + + // return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + // } + //} + + public static SimpleResult CountProduct(CountProductInfo model) { + var db = new SqlHelper<object>().GetInstance(); + try { + //var cgDetail = db.Queryable<TN_CG_Detail>() + // .Where(d => d.S_CNTR_CODE == model.cntrCode).First(); + + //if (cgDetail == null) { + // return BuildSimpleResult(2, $"鎵句笉鍒板鍣ㄥ彿'{model.cntrCode}'瀵瑰簲鐨勭墿鏂�); + //} + + var locCntrRel = db.Queryable<TN_Loc_Container>() + //.LeftJoin<TN_CG_Detail>((c, d) => c.S_CNTR_CODE == d.S_CNTR_CODE) + .Where(c => c.S_LOC_CODE == model.locCode).First(); + if (locCntrRel == null) { + return BuildSimpleResult(2, $"褰撳墠璐т綅{model.locCode}娌℃湁瀹瑰櫒锛�); + } + + var cgDetail = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First(); + if (cgDetail == null) { + return BuildSimpleResult(3, $"褰撳墠璐т綅{model.locCode}涓婄殑瀹瑰櫒{locCntrRel.S_CNTR_CODE}娌℃湁鐗╁搧锛�); + } + + //var countDiff = new TN_Count_Diff { + // S_CNTR_CODE = cgDetail.S_CNTR_CODE, + // F_QTY = cgDetail.F_QTY, + // F_ACTUAL_QTY = model.qty + //}; + + var countDiff = db.Queryable<TN_AG_Count_Diff>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First(); + if (countDiff == null) { + return BuildSimpleResult(4, $"褰撳墠鐗╂枡鎵�湪瀹瑰櫒{locCntrRel.S_CNTR_CODE}鐗╂枡淇℃伅娌℃湁鐢熸垚瀵瑰簲鐨勭洏鐐瑰樊寮傝〃锛�); + } + + countDiff.F_QTY = cgDetail.F_QTY; + countDiff.F_ACTUAL_QTY = model.qty; + //countDiff.S_ITEM_CODE = cgDetail.S_ITEM_CODE; + + //if (db.Insertable<TN_Count_Diff>(countDiff).ExecuteCommand() <= 0) { + // return BuildSimpleResult(3, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�); + //} + + if (db.Updateable<TN_AG_Count_Diff>(countDiff).ExecuteCommand() <= 0) { + return BuildSimpleResult(5, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�); + } + + return BuildSimpleResult(0, "鐩樼偣宸紓瀹屾垚"); + + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + } } -- Gitblit v1.9.1