From b079910e5de15863c26e479ffab15cc45d706f1a Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 19 五月 2025 16:25:22 +0800 Subject: [PATCH] 测试修复轮询出库、抽检流程的问题 --- Services/MoboxService.cs | 786 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 589 insertions(+), 197 deletions(-) diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs index 0fe26c0..1e82ed8 100644 --- a/Services/MoboxService.cs +++ b/Services/MoboxService.cs @@ -1,57 +1,22 @@ 锘縰sing System; +using System.Collections.Generic; +using System.Linq; using HH.WCS.Mobox3.DSZSH.Consts; +using HH.WCS.Mobox3.DSZSH.Dispatch; +using HH.WCS.Mobox3.DSZSH.Helper; using HH.WCS.Mobox3.DSZSH.Helpers; -using HH.WCS.Mobox3.DSZSH.Helpers.Model; using HH.WCS.Mobox3.DSZSH.Models; using Newtonsoft.Json; +using SqlSugar; + 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> @@ -65,170 +30,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 鏆傚畾閫夋嫨鏈�綆灞傛寜鍖轰綅椤哄簭鍏ュ簱锛屽悗闈㈠緟淇敼 @@ -252,7 +232,7 @@ /// 濂借繍绠�绌虹鍏ュ簱(PDA) /// </summary> /// <returns></returns> - public static SimpleResult EmptyInboundGoodpack(EmptyInboundDetailInfo model) { + public static SimpleResult EmptyInboundGoodpack(EmptyInboundInfo model) { var taskName = TaskName.濂借繍绠盻绌虹鍏ュ簱; var db = DbHelper.GetDbClient(); @@ -267,11 +247,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 鏆傚畾閫夋嫨鏈�綆灞傛寜鍖轰綅椤哄簭鍏ュ簱锛屽悗闈㈠緟淇敼 @@ -321,13 +302,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); @@ -367,13 +348,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); @@ -382,6 +363,265 @@ return BuildSimpleEx(ex); } } + + /// <summary> + /// 鍒涘缓鎶芥鍗�+ /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public static SimpleResult CreateCheckOrder(CreateCheckOrderInfo model) { + var db = DbHelper.GetDbClient(); + try { + var orderNo = GenerateOrderNo("鎶芥鍗曞彿", "CN"); + + // 缁戝畾鎿嶄綔锛氭彃鍏ュ嚭搴撳崟銆佹墍鏈夌殑鍑哄簱鍗曟槑缁�+ using (var tran = db.Ado.UseTran()) { + + var order = new TN_Check_Order { + S_NO = orderNo, + S_ITEM_CODE = model.ItemCode, + //S_ITEM_NAME = model.ItemName, + S_BATCH_NO = model.BatchNo, + N_COUNT = model.Qty, + S_END_AREA = model.EndArea, + }; + + if (db.Insertable<TN_Check_Order>(order).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(2, "鐢熸垚 鎶芥鍗�澶辫触锛� + JsonConvert.SerializeObject(order)); + } + + var cgDetailList = SelectCgByTotalQty(model); + + if (cgDetailList.Count == 0) { + return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ユ娊妫�); + } + + foreach (var cgDetail in cgDetailList) { + var detail = new TN_Outbound_Detail { + S_OO_NO = orderNo, + S_ITEM_CODE = cgDetail.S_ITEM_CODE, + S_BATCH_NO = cgDetail.S_BATCH_NO, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, + S_END_AREA = model.EndArea, + }; + + cgDetail.N_ITEM_STATE = 3; + cgDetail.S_ITEM_STATE = "姝e湪妫�獙"; + + if (db.Insertable<TN_Outbound_Detail>(detail).ExecuteCommand() <= 0 + && db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail)); + } + + LogHelper.Debug("鍒涘缓鍑哄簱鍗曟槑缁嗘垚鍔燂細" + JsonConvert.SerializeObject(detail)); + } + + tran.CommitTran(); + } + 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 { + 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, "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡锛� + JsonConvert.SerializeObject(model)); + } + + cgDetail.N_ITEM_STATE = 0; + cgDetail.S_ITEM_STATE = "鍚堟牸"; + + var startLocCntrRel = db.Queryable<TN_Location, TN_Loc_Container> + ((l, c) => l.S_CODE == c.S_LOC_CODE) + .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) { + return BuildSimpleResult(0, "娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�); + } + + var endLoc = db.Queryable<TN_Location>() + .Where(ExprHelper.LocBelongsToArea(startLocCntrRel.S_CNTR_TYPE == "鎵樼洏" ? AreaName.婊℃墭瀛樻斁鍖�: + startLocCntrRel.S_CNTR_TYPE == "濂借繍绠� ? AreaName.婊$瀛樻斁鍖�: "")) + .Where(ExprHelper.LocIsFree) + .Where(ExprHelper.LocIsEmpty).First(); + + if (endLoc == null) { + return BuildSimpleResult(3, "鏌ヨ锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅"); + } + + using (var tran = db.Ado.UseTran()) { + if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => + new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(4, "淇敼鐗╂枡鐘舵�涓哄悎鏍�澶辫触"); + } + + if (!TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, + endLoc.S_CODE, TaskName.鎶芥_鍚堟牸鍥炲簱)) { + tran.RollbackTran(); + return BuildSimpleResult(5, "鍒涘缓浠诲姟澶辫触", false); + } + + tran.CommitTran(); + } + return BuildSimpleResult(0, "鐗╂枡鍚堟牸鍥炲簱浠诲姟鍒涘缓鎴愬姛"); + } + catch (Exception ex) { + return BuildSimpleEx(ex); + } + } + public static SimpleResult UnqualifiedShift(UnqualifiedShiftInfo 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, "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡"); + } + + cgDetail.N_ITEM_STATE = 2; + cgDetail.S_ITEM_STATE = "涓嶅悎鏍�; + + 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) + .First(); + + if (startLocCntrRel == null) { + return BuildSimpleResult(0, "娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�); + } + + var endLoc = db.Queryable<TN_Location>() + .Where(l => l.S_AREA_CODE == model.EndArea) + .Where(ExprHelper.LocIsFree) + .Where(ExprHelper.LocIsEmpty).First(); + + if (endLoc == null) { + return BuildSimpleResult(3, "鏌ヨ锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅"); + } + + using (var tran = db.Ado.UseTran()) { + if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => + new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(4, "淇敼鐗╂枡鐘舵�涓哄悎鏍�澶辫触"); + } + + if (!TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, + endLoc.S_CODE, TaskName.鎶芥_涓嶅悎鏍肩Щ搴�) { + tran.RollbackTran(); + return BuildSimpleResult(5, "鍒涘缓浠诲姟澶辫触", false); + } + + tran.CommitTran(); + } + return BuildSimpleResult(0, "鐗╂枡涓嶅悎鏍肩Щ搴撲换鍔″垱寤烘垚鍔�); + } + catch (Exception ex) { + return BuildSimpleEx(ex); + } + } + + 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); + } + } + + public static List<TN_CG_Detail> SelectCgByTotalQty(CreateCheckOrderInfo model) { + var db = DbHelper.GetDbClient(); + var result = new List<TN_CG_Detail>(); + var targetNum = model.Qty; + + try { + var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode + && a.N_ITEM_NUM > targetNum). + OrderBy(a => a.N_ITEM_NUM, OrderByType.Asc).First(); + if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠�+ { + result.Add(targetCg); + return result; + } + + var sortedMaterials = new List<TN_CG_Detail>(); + + 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.N_ITEM_NUM > 0) + .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) + .Where(d => d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮") + .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) + .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); + + if (sortedMaterials.Count == 0) //娌℃湁婊¤冻鏉′欢鐨�+ { + return result; + } + + int countNum = 0; + foreach (var mat in sortedMaterials) { + countNum += mat.N_ITEM_NUM; + result.Add(mat); + if (countNum >= targetNum) { + break; + } + } + if (result.Sum(a => a.N_ITEM_NUM) >= targetNum) { + return result; + } + else { + result.Clear(); + return result; + } + } + catch (Exception ex) { + throw ex; + } + } + #endregion #region Mobox 鍔熻兘 @@ -395,40 +635,49 @@ /// <returns></returns> public static SimpleResult FinishedOutbound(FinishedOutboundInfo model) { var db = DbHelper.GetDbClient(); + var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "ON"); try { - if (string.IsNullOrEmpty(model.No)) { + if (string.IsNullOrEmpty(orderNo)) { return BuildSimpleResult(2, "鍑哄簱鍗曞彿涓嶈兘涓虹┖"); } - if (model.OutboundDetails.Count == 0) { - return BuildSimpleResult(2, "鍑哄簱鍗曟槑缁嗘病鏈夐」鐩�); - } - using (var tran = db.Ado.UseTran()) { + + var cgDetailList = SelectCgByTotalQty(model); + + if (cgDetailList.Count == 0) { + return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); + } + + foreach (var cgDetail in cgDetailList) { + var detail = new TN_Outbound_Detail { + S_OO_NO = orderNo, + 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_ITEM_NUM, + S_END_AREA = model.EndArea + }; + + if (db.Insertable<TN_Outbound_Detail>(detail).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail)); + } + } + var order = new TN_Outbound_Order { - S_NO = model.No, - N_FORCE = model.Forced ? 1 : 0 + S_NO = orderNo, + S_ITEM_CODE = model.ItemCode, + S_BATCH = model.BatchNo, + N_END_NUM = model.Qty, + //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), + S_END_AREA = model.EndArea }; if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { tran.RollbackTran(); - return BuildSimpleResult(3, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order)); - } - - foreach (var detail in model.OutboundDetails) { - var newDetail = new TN_Outbound_Detail { - S_NO = order.S_NO, - S_CG_ID = detail.CgCode, - S_BATCH_NO = detail.PatchNo, - N_QTY = detail.Qty, - N_FORCE = order.N_FORCE, - S_END_AREA = detail.EndArea - }; - if (db.Insertable<TN_Outbound_Detail>(newDetail).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return BuildSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail)); - } + return BuildSimpleResult(5, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order)); } tran.CommitTran(); @@ -447,36 +696,51 @@ /// <returns></returns> public static SimpleResult FinishedOutboundForce(FinishedOutboundInfo model) { var db = DbHelper.GetDbClient(); + var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "ON"); try { - if (string.IsNullOrEmpty(model.No)) { + if (string.IsNullOrEmpty(orderNo)) { return BuildSimpleResult(2, "鍑哄簱鍗曞彿涓嶈兘涓虹┖"); } using (var tran = db.Ado.UseTran()) { - var order = new TN_Outbound_Order { - S_NO = model.No, - N_FORCE = model.Forced ? 1 : 0 - }; - if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return BuildSimpleResult(3, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order)); + var cgDetailList = SelectCgByTotalQty(model); + + if (cgDetailList.Count == 0) { + return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); } - foreach (var detail in model.OutboundDetails) { - var newDetail = new TN_Outbound_Detail { - S_NO = order.S_NO, - S_CG_ID = detail.CgCode, - S_BATCH_NO = detail.PatchNo, - N_QTY = detail.Qty, - N_FORCE = order.N_FORCE + foreach (var cgDetail in cgDetailList) { + var detail = new TN_Outbound_Detail { + S_OO_NO = orderNo, + S_ITEM_CODE = cgDetail.S_ITEM_CODE, + S_BATCH_NO = cgDetail.S_BATCH_NO, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, + S_END_AREA = model.EndArea }; - if (db.Insertable<TN_Inbound_Order>(order).ExecuteCommand() <= 0) { + + if (db.Insertable<TN_Outbound_Detail>(detail).ExecuteCommand() <= 0) { tran.RollbackTran(); return BuildSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail)); } } + + var order = new TN_Outbound_Order { + S_NO = orderNo, + S_ITEM_CODE = model.ItemCode, + S_BATCH = model.BatchNo, + N_END_NUM = model.Qty, + //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), + S_END_AREA = model.EndArea + }; + + if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(5, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order)); + } + + tran.CommitTran(); } return BuildSimpleResult(0, "鐢熸垚鍑哄簱鍗曟垚鍔�); @@ -486,6 +750,134 @@ } } + public static List<TN_CG_Detail> SelectCgByTotalQty(FinishedOutboundInfo model) { + var db = DbHelper.GetDbClient(); + var result = new List<TN_CG_Detail>(); + var targetNum = model.Qty; + + try { + var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode + && a.N_ITEM_NUM > targetNum). + OrderBy(a => a.N_ITEM_NUM, OrderByType.Asc).First(); + if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠�+ { + result.Add(targetCg); + return result; + } + + // NOTE 鏍规嵁鎬婚噺閫塪etail鏃讹紝鏄惁闇�鑰冭檻璐т綅鐨勯珮浣庯紵 + + var sortedMaterials = new List<TN_CG_Detail>(); + + if (model.ForcedOut) { + 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.N_ITEM_NUM > 0) + .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) + .Where(d => d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸" + || d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮") + .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) + .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); + } + else { + 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.N_ITEM_NUM > 0) + .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) + .Where(d => d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸") + .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) + .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); + } + + + if (sortedMaterials.Count == 0) //娌℃湁婊¤冻鏉′欢鐨�+ { + return result; + } + + int countNum = 0; + foreach (var mat in sortedMaterials) { + countNum += mat.N_ITEM_NUM; + result.Add(mat); + if (countNum >= targetNum) { + break; + } + } + if (result.Sum(a => a.N_ITEM_NUM) >= targetNum) { + return result; + } + else { + result.Clear(); + return result; + } + } + catch (Exception ex) { + throw ex; + } + } + + /// <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"); + return $"ON{date}{id.ToString().PadLeft(4, '0')}"; + } + #endregion } -- Gitblit v1.9.1