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 | 436 +++++++++++++++++++++++++++++++----------------------- 1 files changed, 251 insertions(+), 185 deletions(-) diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs index 8ad85b5..680d804 100644 --- a/Services/MoboxService.cs +++ b/Services/MoboxService.cs @@ -13,49 +13,9 @@ 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 { - - #region 妯℃澘鍔熻兘 - public static SimpleResult BaseBound(StartCntEndInfo model) { - var 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(); - - if (startLoc == null) { - return BuildSimpleResult(2, $"璧风偣浣嶇疆 '{model.StartLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�); - } - - var locCntrRel = db.Queryable<TN_Loc_Container>() - .Where(ExprHelper.LocCntrIsBind(startLoc.S_CODE, model.CntId)).First(); - - if (locCntrRel == null) { - return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{startLoc.S_CODE}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}'"); - } - - var endLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.EndLoc)) - .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty).First(); - - if (endLoc == null) { - return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); - } - - return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName); - } - catch (Exception ex) { - return BuildSimpleEx(ex); - } - } - #endregion #region PDA 鍔熻兘 /// <summary> @@ -69,170 +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 == model.StartLoc - && a.S_CNTR_CODE == model.CntId); - if (locCntrRel == null) { - return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}' 锛屾棤鍙嚭搴撶殑鐗╂枡"); + 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 鏆傚畾閫夋嫨鏈�綆灞傛寜鍖轰綅椤哄簭鍏ュ簱锛屽悗闈㈠緟淇敼 @@ -256,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(); @@ -271,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 鏆傚畾閫夋嫨鏈�綆灞傛寜鍖轰綅椤哄簭鍏ュ簱锛屽悗闈㈠緟淇敼 @@ -325,13 +301,13 @@ } var endLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.EndLoc)) + .Where(ExprHelper.LocBelongsToArea(AreaName.鍖呰鍖�) .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE)) .Where(ExprHelper.LocIsFree) .Where(ExprHelper.LocIsEmpty).First(); if (endLoc == null) { - return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); + return BuildSimpleResult(4, $"缁堢偣浣嶇疆 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); } return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName); @@ -371,13 +347,13 @@ } var endLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.EndLoc)) + .Where(ExprHelper.LocBelongsToArea(AreaName.鍖呰鍖�) .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE)) .Where(ExprHelper.LocIsFree) .Where(ExprHelper.LocIsEmpty).First(); if (endLoc == null) { - return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); + return BuildSimpleResult(4, $"缁堢偣浣嶇疆 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); } return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName); @@ -399,11 +375,11 @@ using (var tran = db.Ado.UseTran()) { var order = new TN_Check_Order { - S_NO = model.No, - S_CG_ID = model.CgId, - S_ITEM_NAME = model.ItemName, + S_NO = GenerateOrderNo("鎶芥鍗曞彿", "CN"), + S_ITEM_CODE = model.ItemCode, + //S_ITEM_NAME = model.ItemName, S_BATCH_NO = model.BatchNo, - N_COUNT = model.N_QTY, + N_COUNT = model.Qty, S_END_AREA = model.EndArea, }; @@ -412,10 +388,10 @@ return BuildSimpleResult(2, "鐢熸垚 鎶芥鍗�澶辫触锛� + JsonConvert.SerializeObject(order)); } - for (int i = 0; i < model.N_QTY; i++) { + for (int i = 0; i < model.Qty; i++) { var detail = new TN_Check_Detail { - S_NO = model.No, - S_CG_ID = model.CgId, + S_NO = order.S_NO, + S_ITEM_CODE = model.ItemCode, S_BATCH_NO = model.BatchNo, S_END_AREA = model.EndArea }; @@ -428,33 +404,37 @@ tran.CommitTran(); } - return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛锛氬崟鍙�{model.No}"); + return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛"); } catch (Exception ex) { return BuildSimpleEx(ex); } } - + /// <summary> + /// 鎶芥-鍚堟牸鍥炲簱(PDA) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> public static SimpleResult QualifiedBack(QualifiedBackInfo model) { var db = DbHelper.GetDbClient(); - try { + 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) { @@ -507,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) @@ -549,6 +528,34 @@ } } + public static SimpleResult RestBack(RestBackInfo model) { + var db = DbHelper.GetDbClient(); + + try { + var locCntrRel = db.Queryable<TN_Loc_Container>() + .Where(c => c.S_LOC_CODE == model.StartLoc) + .First(); + + if (locCntrRel == null) { + return BuildSimpleResult(2, $"璧风偣璐т綅 {model.StartLoc}"); + } + + var endLoc = db.Queryable<TN_Location, TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) + .Where((l, c) => c.S_CNTR_TYPE == locCntrRel.S_CNTR_TYPE) + .First(); + + if (endLoc == null) { + return BuildSimpleResult(3, $"涓嶅瓨鍦ㄥ悎閫傜殑缁堢偣璐т綅鍙互鍥炲簱"); + } + + return TaskHelper.SimpleCreateTask(locCntrRel.S_LOC_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, TaskName.灏剧鍥炲簱); + } + catch (Exception ex) { + + return BuildSimpleEx(ex); + } + } + #endregion #region Mobox 鍔熻兘 @@ -584,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 }; @@ -596,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.F_QTY), + S_BATCH = model.BatchNo, + N_END_NUM = model.Qty, + //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; @@ -657,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.F_QTY), + S_BATCH = model.BatchNo, + N_END_NUM = model.Qty, + //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; @@ -685,8 +693,8 @@ try { var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode - && a.F_QTY > targetNum). - OrderBy(a => a.F_QTY, OrderByType.Asc).First(); + && a.N_QTY > targetNum). + OrderBy(a => a.N_QTY, OrderByType.Asc).First(); if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠� { result.Add(targetCg); @@ -695,28 +703,28 @@ // NOTE 鏍规嵁鎬婚噺閫塪etail鏃讹紝鏄惁闇�鑰冭檻璐т綅鐨勯珮浣庯紵 var sortedMaterials = db.Queryable<TN_CG_Detail, TN_Loc_Container>((d, c) => d.S_CNTR_CODE == c.S_CNTR_CODE) - .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.F_QTY > 0) + .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_QTY > 0) .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) .Where(d => (model.ForcedOut && d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸") || (!model.ForcedOut && (d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸" || d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮"))) - .OrderBy(d => d.F_QTY, OrderByType.Desc) + .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; } float countNum = 0; foreach (var mat in sortedMaterials) { - countNum += mat.F_QTY; + countNum += mat.N_QTY; result.Add(mat); if (countNum >= targetNum) { break; } } - if (result.Sum(a => a.F_QTY) >= targetNum) { + if (result.Sum(a => a.N_QTY) >= targetNum) { return result; } else { @@ -729,6 +737,64 @@ } } + /// <summary> + /// 绉诲簱-鍒涘缓绉诲簱浠诲姟(WMS) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public static SimpleResult CreateShiftOrder(CreateShiftOrderInfo model) { + var db = DbHelper.GetDbClient(); + try { + var locCntrRelList = db.Queryable<TN_Loc_Container, TN_CG_Detail>((c, d) => c.S_CNTR_CODE == d.S_CNTR_CODE) + .Where((c, d) => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.ItemCode) + .ToList(); + + if (locCntrRelList.Count == 0) { + return BuildSimpleResult(2, "娌℃湁鎵惧埌寰呯Щ搴撶殑鐗╂枡"); + } + + // 缁戝畾鎿嶄綔锛氭彃鍏ュ嚭搴撳崟銆佹墍鏈夌殑鍑哄簱鍗曟槑缁�+ using (var tran = db.Ado.UseTran()) { + + var order = new TN_Shift_Order { + S_NO = GenerateOrderNo("绉诲簱鍗曞彿", "SN"), + S_ITEM_CODE = model.ItemCode, + //S_ITEM_NAME = model.ItemName, + S_BATCH_NO = model.BatchNo, + N_COUNT = locCntrRelList.Count, + S_END_AREA = model.EndArea, + }; + + if (db.Insertable<TN_Shift_Order>(order).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(2, "鐢熸垚 绉诲簱鍗�澶辫触锛� + JsonConvert.SerializeObject(order)); + } + + foreach (var locCntrRel in locCntrRelList) { + var detail = new TN_Shift_Detail { + S_NO = order.S_NO, + S_ITEM_CODE = model.ItemCode, + S_LOC_CODE = locCntrRel.S_LOC_CODE, + S_CNTR_CODE = locCntrRel.S_CNTR_CODE, + S_BATCH_NO = model.BatchNo, + S_END_AREA = model.EndArea + }; + + if (db.Insertable<TN_Shift_Detail>(detail).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(3, "鐢熸垚 绉诲簱鍗曟槑缁�澶辫触锛� + JsonConvert.SerializeObject(detail)); + } + } + + tran.CommitTran(); + } + return BuildSimpleResult(0, $"鍒涘缓 绉诲簱鍗�鎴愬姛"); + } + catch (Exception ex) { + return BuildSimpleEx(ex); + } + } + private static string GenerateOrderNo(string snType, string prefix) { var id = SysHelper.GetSerialNumber(snType, prefix); var date = DateTime.Now.ToString("yyMMdd"); -- Gitblit v1.9.1