From 6abc355aeb4e6f7960c11795dbbcc26396b0c888 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期五, 16 五月 2025 17:20:45 +0800 Subject: [PATCH] 博实物料下发同步接口开发,满箱入库、出库逻辑测试与优化 --- Services/MoboxService.cs | 273 +++++++++++++++++++++++++++++------------------------- 1 files changed, 146 insertions(+), 127 deletions(-) diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs index 4ff7773..680d804 100644 --- a/Services/MoboxService.cs +++ b/Services/MoboxService.cs @@ -13,7 +13,6 @@ using static HH.WCS.Mobox3.DSZSH.Dtos.Request.MoboxRequest; using static HH.WCS.Mobox3.DSZSH.Dtos.Response.MoboxResponse; -using static HH.WCS.Mobox3.DSZSH.Helpers.ResultHelper; namespace HH.WCS.Mobox3.DSZSH.Services { public class MoboxService { @@ -30,169 +29,185 @@ var db = DbHelper.GetDbClient(); try { - // TODO 灏哖DA鎻愪緵鐨勭墿鏂欑紪鐮佷笌璐存爣鏈虹殑淇℃伅姣斿 + // 灏哖DA鎻愪緵鐨勭墿鏂欑紪鐮佷笌璐存爣鏈虹殑淇℃伅姣斿 + var cgDetail = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo) // 鎸囧畾锛氱墿鏂欑紪鐮併�鎵规鍙�+ .Where(d => d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮") // NOTE 鍐椾綑妫�煡锛氱墿鏂欑姸鎬佸簲璇ヤ负 1寰呮 + .First(); - var startLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.StartLoc)) - .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty.Negate()).First(); - - if (startLoc == null) { - return BuildSimpleResult(2, $"璧风偣浣嶇疆 '{model.StartLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�); + if (cgDetail == null) { + return BuildSimpleResult(2, $"PDA鎵爜鐗╂枡淇℃伅涓庤创鏍囨満浼犻�鐨勪俊鎭笉涓�嚧锛� + JsonConvert.SerializeObject(model)); } - // 鏌ョ湅瀹瑰櫒涓庤捣鐐硅揣浣嶆槸鍚︾粦瀹�- var locCntrRel = db.Queryable<TN_Loc_Container>().First( - a => a.S_LOC_CODE == startLoc.S_CODE); - if (locCntrRel == null) { - return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 鏃犲彲鍑哄簱鐨勭墿鏂�); + var startLoc = db.Queryable<TN_Location>() + .Where(ExprHelper.LocCode(model.StartLoc)) // 鎸囧畾锛氳捣鐐硅揣浣�+ .Where(ExprHelper.LocIsFree) + //.Where(ExprHelper.LocIsEmpty) + .First(); + + if (startLoc == null) { + return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�); + } + + // 缁戝畾璐т綅鍜屽鍣ㄥ彿 + var locCntrRel = new TN_Loc_Container { + S_LOC_CODE = model.StartLoc, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, + S_CNTR_TYPE = "濂借繍绠�, + }; + + if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { + return BuildSimpleResult(4, $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴澶辫触锛� + JsonConvert.SerializeObject(locCntrRel)); } // TODO 婊$鍏ュ簱绠楁硶寰呬紭鍖� var endLoc = db.Queryable<TN_Location>() .Where(ExprHelper.LocBelongsToArea(AreaName.婊$瀛樻斁鍖�) .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsFree) + .Where(ExprHelper.LocIsEmpty) .OrderBy(l => l.N_LAYER) .OrderBy(l => l.S_AREA_CODE).First(); if (endLoc == null) { - return BuildSimpleResult(4, "婊$鍏ュ簱鏆傛椂娌℃湁鍚堥�鐨勮揣浣嶅彲浠ュ叆搴�); + return BuildSimpleResult(5, "婊$鍏ュ簱鏆傛椂娌℃湁鍚堥�鐨勮揣浣嶅彲浠ュ叆搴�); } - return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName); + return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName, failCode: 6); } catch (Exception ex) { return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); } } - /// <summary> - /// 绌烘墭鐩樼粦瀹�PDA) - /// </summary> - /// <param name="model"></param> - /// <returns></returns> - public static SimpleResult EmptyBindPallet(EmptyBindInfo model) { - var db = DbHelper.GetDbClient(); + ///// <summary> + ///// 绌烘墭鐩樼粦瀹�PDA) + ///// </summary> + ///// <param name="model"></param> + ///// <returns></returns> + //public static SimpleResult EmptyBindPallet(EmptyBindInfo model) { + // var db = DbHelper.GetDbClient(); - try { - var loc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.LocCode)) - .Where(ExprHelper.LocBelongsToArea(AreaName.绌烘墭鐩樻帴椹冲尯)) - .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty).First(); + // try { + // var loc = db.Queryable<TN_Location>() + // .Where(ExprHelper.LocCode(model.LocCode)) + // .Where(ExprHelper.LocBelongsToArea(AreaName.绌烘墭鐩樻帴椹冲尯)) + // .Where(ExprHelper.LocIsFree) + // .Where(ExprHelper.LocIsEmpty).First(); - if (loc == null) { - return BuildSimpleResult(2, $"褰撳墠璐т綅 '{model.LocCode}' 鏃犳硶鍐嶇粦瀹氬鍣�); - } + // if (loc == null) { + // return BuildSimpleResult(2, $"褰撳墠璐т綅 '{model.LocCode}' 鏃犳硶鍐嶇粦瀹氬鍣�); + // } - var locCntrRel = db.Queryable<TN_Loc_Container>() - .Where(lc => lc.S_CNTR_CODE == model.LocCode).First(); + // var locCntrRel = db.Queryable<TN_Loc_Container>() + // .Where(lc => lc.S_CNTR_CODE == model.LocCode).First(); - if (locCntrRel != null) { - return BuildSimpleResult(3, $"褰撳墠瀹瑰櫒 '{model.CntrCode}' 宸茬粡涓�'{locCntrRel.S_LOC_CODE}' 缁戝畾"); - } + // if (locCntrRel != null) { + // return BuildSimpleResult(3, $"褰撳墠瀹瑰櫒 '{model.CntrCode}' 宸茬粡涓�'{locCntrRel.S_LOC_CODE}' 缁戝畾"); + // } - //loc.N_CURRENT_NUM = model.PalletCount; + // //loc.N_CURRENT_NUM = model.PalletCount; - locCntrRel = new TN_Loc_Container { - S_LOC_CODE = model.LocCode, - S_CNTR_CODE = model.CntrCode - }; + // locCntrRel = new TN_Loc_Container { + // S_LOC_CODE = model.LocCode, + // S_CNTR_CODE = model.CntrCode + // }; - using (var tran = db.Ado.UseTran()) { - if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() > 0 - && db.Updateable<TN_Location>(loc).UpdateColumns(it => it.N_CURRENT_NUM).ExecuteCommand() > 0) { - tran.CommitTran(); - return BuildSimpleResult(0, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 鎴愬姛"); - } - else { - tran.RollbackTran(); - return BuildSimpleResult(4, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 澶辫触"); - } - } - } - catch (Exception ex) { - return BuildSimpleEx(ex); - } - } + // using (var tran = db.Ado.UseTran()) { + // if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() > 0 + // && db.Updateable<TN_Location>(loc).UpdateColumns(it => it.N_CURRENT_NUM).ExecuteCommand() > 0) { + // tran.CommitTran(); + // return BuildSimpleResult(0, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 鎴愬姛"); + // } + // else { + // tran.RollbackTran(); + // return BuildSimpleResult(4, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 澶辫触"); + // } + // } + // } + // catch (Exception ex) { + // return BuildSimpleEx(ex); + // } + //} - /// <summary> - /// 绌虹缁戝畾(PDA) - /// </summary> - /// <param name="model"></param> - /// <returns></returns> - public static SimpleResult EmptyBindGoodpack(EmptyBindInfo model) { - var db = DbHelper.GetDbClient(); + ///// <summary> + ///// 绌虹缁戝畾(PDA) + ///// </summary> + ///// <param name="model"></param> + ///// <returns></returns> + //public static SimpleResult EmptyBindGoodpack(EmptyBindInfo model) { + // var db = DbHelper.GetDbClient(); - try { - var loc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.LocCode)) - .Where(ExprHelper.LocBelongsToArea(AreaName.绌虹鎺ラ┏鍖�) - .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty).First(); + // try { + // var loc = db.Queryable<TN_Location>() + // .Where(ExprHelper.LocCode(model.LocCode)) + // .Where(ExprHelper.LocBelongsToArea(AreaName.绌虹鎺ラ┏鍖�) + // .Where(ExprHelper.LocIsFree) + // .Where(ExprHelper.LocIsEmpty).First(); - if (loc == null) { - return BuildSimpleResult(2, $"褰撳墠璐т綅 '{model.LocCode}' 鏃犳硶鍐嶇粦瀹氬鍣�); - } + // if (loc == null) { + // return BuildSimpleResult(2, $"褰撳墠璐т綅 '{model.LocCode}' 鏃犳硶鍐嶇粦瀹氬鍣�); + // } - var locCntrRel = db.Queryable<TN_Loc_Container>() - .Where(lc => lc.S_CNTR_CODE == model.LocCode).First(); + // var locCntrRel = db.Queryable<TN_Loc_Container>() + // .Where(lc => lc.S_CNTR_CODE == model.LocCode).First(); - if (locCntrRel != null) { - return BuildSimpleResult(3, $"褰撳墠瀹瑰櫒 '{model.CntrCode}' 宸茬粡涓�'{locCntrRel.S_LOC_CODE}' 缁戝畾"); - } + // if (locCntrRel != null) { + // return BuildSimpleResult(3, $"褰撳墠瀹瑰櫒 '{model.CntrCode}' 宸茬粡涓�'{locCntrRel.S_LOC_CODE}' 缁戝畾"); + // } - loc.N_CURRENT_NUM = 1; // 绌虹缁戝畾鏃跺鍣ㄦ暟蹇呯劧涓�1 + // loc.N_CURRENT_NUM = 1; // 绌虹缁戝畾鏃跺鍣ㄦ暟蹇呯劧涓�1 - locCntrRel = new TN_Loc_Container { - S_LOC_CODE = model.LocCode, - S_CNTR_CODE = model.CntrCode - }; + // locCntrRel = new TN_Loc_Container { + // S_LOC_CODE = model.LocCode, + // S_CNTR_CODE = model.CntrCode + // }; - using (var tran = db.Ado.UseTran()) { - if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() > 0 - && db.Updateable<TN_Location>(loc).UpdateColumns(it => it.N_CURRENT_NUM).ExecuteCommand() > 0) { - tran.CommitTran(); - return BuildSimpleResult(0, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 鎴愬姛"); - } - else { - tran.RollbackTran(); - return BuildSimpleResult(4, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 澶辫触"); - } - } - - } - catch (Exception ex) { - return BuildSimpleEx(ex); - } - } + // using (var tran = db.Ado.UseTran()) { + // if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() > 0 + // && db.Updateable<TN_Location>(loc).UpdateColumns(it => it.N_CURRENT_NUM).ExecuteCommand() > 0) { + // tran.CommitTran(); + // return BuildSimpleResult(0, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 鎴愬姛"); + // } + // else { + // tran.RollbackTran(); + // return BuildSimpleResult(4, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 澶辫触"); + // } + // } + // } + // catch (Exception ex) { + // return BuildSimpleEx(ex); + // } + //} /// <summary> /// 鎵樼洏-绌烘墭鍏ュ簱(PDA) /// </summary> /// <param name="model"></param> /// <returns></returns> - public static SimpleResult EmptyInboundPallet(EmptyInboundDetailInfo model) { + public static SimpleResult EmptyInboundPallet(EmptyInboundInfo model) { var taskName = TaskName.鎵樼洏_绌烘墭鍏ュ簱; var db = DbHelper.GetDbClient(); try { + + var startLoc = db.Queryable<TN_Location>() .Where(ExprHelper.LocCode(model.StartLoc)) .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty.Negate()).First(); + .Where(ExprHelper.LocIsEmpty.Negate()) + .First(); if (startLoc == null) { return BuildSimpleResult(2, $"璧风偣浣嶇疆 '{model.StartLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�); } // 鏌ョ湅瀹瑰櫒涓庤捣鐐硅揣浣嶆槸鍚︾粦瀹�- var locCntrRel = db.Queryable<TN_Loc_Container>().First( - a => a.S_LOC_CODE == model.StartLoc - && a.S_CNTR_CODE == model.CntId); + var locCntrRel = db.Queryable<TN_Loc_Container>() + .Where(c => c.S_LOC_CODE == model.StartLoc && c.S_CNTR_CODE == model.CntrCode) + .First(); + if (locCntrRel == null) { - return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}'"); + return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntrCode}'"); } // TODO 鏆傚畾閫夋嫨鏈�綆灞傛寜鍖轰綅椤哄簭鍏ュ簱锛屽悗闈㈠緟淇敼 @@ -216,7 +231,7 @@ /// 濂借繍绠�绌虹鍏ュ簱(PDA) /// </summary> /// <returns></returns> - public static SimpleResult EmptyInboundGoodpack(EmptyInboundDetailInfo model) { + public static SimpleResult EmptyInboundGoodpack(EmptyInboundInfo model) { var taskName = TaskName.濂借繍绠盻绌虹鍏ュ簱; var db = DbHelper.GetDbClient(); @@ -231,11 +246,12 @@ } // 鏌ョ湅瀹瑰櫒涓庤捣鐐硅揣浣嶆槸鍚︾粦瀹�- var locCntrRel = db.Queryable<TN_Loc_Container>().First( - a => a.S_LOC_CODE == model.StartLoc - && a.S_CNTR_CODE == model.CntId); + var locCntrRel = db.Queryable<TN_Loc_Container>() + .Where(c => c.S_LOC_CODE == model.StartLoc && c.S_CNTR_CODE == model.CntrCode) + .First(); + if (locCntrRel == null) { - return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}'"); + return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntrCode}'"); } // TODO 鏆傚畾閫夋嫨鏈�綆灞傛寜鍖轰綅椤哄簭鍏ュ簱锛屽悗闈㈠緟淇敼 @@ -394,28 +410,31 @@ return BuildSimpleEx(ex); } } - + /// <summary> + /// 鎶芥-鍚堟牸鍥炲簱(PDA) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> public static SimpleResult QualifiedBack(QualifiedBackInfo model) { var db = DbHelper.GetDbClient(); try { - var cgDetail = db.Queryable<TN_CG_Detail>() .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode) .First(); if (cgDetail == null) { - return BuildSimpleResult(2, "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡"); + return BuildSimpleResult(2, "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡锛� + JsonConvert.SerializeObject(model)); } cgDetail.N_ITEM_STATE = 0; cgDetail.S_ITEM_STATE = "鍚堟牸"; - // TODO 涓嶉渶瑕佽仈绔嬩笁涓〃 var startLocCntrRel = db.Queryable<TN_Location, TN_Loc_Container> ((l, c) => l.S_CODE == c.S_LOC_CODE) - .Where(ExprHelper.LocIsFree) - .Select((l, c) => c) + .Where((l, c) => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE) // 鎸囧畾瀹瑰櫒鍙�+ .Where(ExprHelper.LocIsFree) // NOTE 妫�煡 + .Select((l, c) => c) // 绛涢� Loc_Container .First(); if (startLocCntrRel == null) { @@ -468,7 +487,6 @@ cgDetail.N_ITEM_STATE = 2; cgDetail.S_ITEM_STATE = "涓嶅悎鏍�; - // TODO 涓嶉渶瑕佽仈绔嬩笁涓〃 var startLocCntrRel = db.Queryable<TN_Location, TN_Loc_Container> ((l, c) => l.S_CODE == c.S_LOC_CODE) .Where(ExprHelper.LocIsFree) @@ -573,6 +591,7 @@ S_ITEM_CODE = cgDetail.S_ITEM_CODE, S_BATCH_NO = cgDetail.S_BATCH_NO, S_CNTR_CODE = cgDetail.S_CNTR_CODE, + N_COUNT = cgDetail.N_QTY, S_END_AREA = model.EndArea }; @@ -585,9 +604,9 @@ var order = new TN_Outbound_Order { S_NO = orderNo, S_ITEM_CODE = model.ItemCode, - S_BATCH_NO = model.BatchNo, - F_QTY = model.Qty, - F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), + S_BATCH = model.BatchNo, + N_END_NUM = model.Qty, + //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; @@ -646,9 +665,9 @@ var order = new TN_Outbound_Order { S_NO = orderNo, S_ITEM_CODE = model.ItemCode, - S_BATCH_NO = model.BatchNo, - F_QTY = model.Qty, - F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), + S_BATCH = model.BatchNo, + N_END_NUM = model.Qty, + //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; @@ -692,7 +711,7 @@ .OrderBy(d => d.N_QTY, OrderByType.Desc) .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); - if (sortedMaterials.Count == 0)//娌℃湁婊¤冻鏉′欢鐨�+ if (sortedMaterials.Count == 0) //娌℃湁婊¤冻鏉′欢鐨� { return result; } -- Gitblit v1.9.1