From 43b2af8956d54dc3a53f211c53d8af582806b6ba Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期二, 08 四月 2025 11:18:58 +0800 Subject: [PATCH] 备料任务合并发料只适用于包装车间工单发料 备料任务增加根据发料类型,调用相应发料单据的ERP接口 --- Tiger.Business.WMS/ERP/U9C_WMS.cs | 2 Tiger.Api/Language.db | 0 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SRC_DTL.cs | 40 +++- Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs | 8 Tiger.Business.WMS/Extensions/Yada/OutExtension.cs | 309 ++++++++++++++++++++++++++----------- Tiger.Business.WMS/Common/Preparation.cs | 37 ++++ Tiger.Model.Net/Entitys/MES/YadaU9/mes_SCMPickList.cs | 1 Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs | 2 Tiger.Model.Net/Entitys/MES/YadaU9/mes_MOPickList.cs | 1 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs | 38 ++++ Tiger.Business.WMS/Common/WmsTask.cs | 1 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs | 17 + 12 files changed, 327 insertions(+), 129 deletions(-) diff --git a/Tiger.Api/Language.db b/Tiger.Api/Language.db index 5265410..d00248d 100644 --- a/Tiger.Api/Language.db +++ b/Tiger.Api/Language.db Binary files differ diff --git a/Tiger.Business.WMS/Common/Preparation.cs b/Tiger.Business.WMS/Common/Preparation.cs index cb21723..9862cc5 100644 --- a/Tiger.Business.WMS/Common/Preparation.cs +++ b/Tiger.Business.WMS/Common/Preparation.cs @@ -1,4 +1,5 @@ -锘縰sing Rhea.Common; +锘縰sing MailKit.Search; +using Rhea.Common; using SqlSugar; using System; using System.Collections.Generic; @@ -72,6 +73,15 @@ }; } } + //鍚堝苟鍙戞枡鍙�傜敤浜庡寘瑁呰溅闂村伐鍗曞彂鏂欙紝闆呰揪鍖呰杞﹂棿缂栫爜锛�1002310010030758 + else if (Order.WS_CODE != "1002310010030758") + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("澶囨枡浠诲姟[{0}]涓嶆槸鍖呰杞﹂棿宸ュ崟鍙戞枡锛屾棤娉曞悎骞跺崟鎹彂鏂�"); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.AddOrder.PrepNot1002310010030758", Order.ORDER_NO); + return action; + } + if (!src.IsNullOrEmpty() && src.ORDER_NO != Order.ORDER_NO) { action.IsSuccessed = false; @@ -79,9 +89,9 @@ action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.AddOrder.NoFound", orderNo, src.ORDER_NO, Order.ORDER_NO); return action; } - - // 鏌ヨ鍗曟嵁鏄庣粏锛屽苟鍚堝苟鍒板鏂欏崟鐨勫鏂欐槑缁嗕腑 - var dtls = bizType.GetPickList(orderNo); + + // 鏌ヨ鍗曟嵁鏄庣粏锛屽苟鍚堝苟鍒板鏂欏崟鐨勫鏂欐槑缁嗕腑 + var dtls = bizType.GetPickList(orderNo); if (dtls.Sum(q => q.QTY_ACT_REQ) <= 0) { action.IsSuccessed = false; @@ -89,6 +99,23 @@ action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.AddOrder.NoNeedPrep", orderNo); return action; } + //鍚堝苟鍙戞枡鍙�傜敤浜庡寘瑁呰溅闂村伐鍗曞彂鏂� + if (src.IsNullOrEmpty() && Order.BIZ_TYPE == BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder.GetValue()) + { + var wo = Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == orderNo).First(); + //闆呰揪鍖呰杞﹂棿缂栫爜锛�1002310010030758 + if (wo?.WS_CODE == "1002310010030758") + { + Order.WS_CODE = wo.WS_CODE; + } + else + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鍗曟嵁[{0}]涓嶆槸鍖呰杞﹂棿宸ュ崟锛屾棤娉曞悎骞跺崟鎹彂鏂�"); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.AddOrder.WoNot1002310010030758", orderNo); + return action; + } + } Order.SourceOrders = Order.SourceOrders ?? new(); Order.SourceDetails = Order.SourceDetails ?? new(); @@ -168,7 +195,7 @@ { var o = db.Storageable(Order, UserCode).WhereColumns(t => new { t.ORDER_NO, t.GHOST_ROW }).ToStorage(); o.AsInsertable.ExecuteCommand(); - o.AsUpdateable.IgnoreColumns(q => q.ID).UpdateColumns(q => new { q.SOURCE_CODE, q.SOURCE_ORDER, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + o.AsUpdateable.IgnoreColumns(q => q.ID).UpdateColumns(q => new { q.WS_CODE, q.SOURCE_CODE, q.SOURCE_ORDER, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); db.Storageable(Order.SourceOrders, UserCode).WhereColumns(t => new { t.ORDER_NO, t.SOURCE_ORDER, t.GHOST_ROW }).ToStorage().AsInsertable.ExecuteCommand(); db.Storageable(Order.SourceDetails, UserCode).WhereColumns(t => new { t.ORDER_NO, t.ITEM_CODE, t.GHOST_ROW }).ToStorage().AsInsertable.ExecuteCommand(); var d = db.Storageable(Order.Details, UserCode).WhereColumns(t => new { t.ORDER_NO, t.ITEM_CODE, t.GHOST_ROW }).ToStorage(); diff --git a/Tiger.Business.WMS/Common/WmsTask.cs b/Tiger.Business.WMS/Common/WmsTask.cs index 9066eaa..852a03c 100644 --- a/Tiger.Business.WMS/Common/WmsTask.cs +++ b/Tiger.Business.WMS/Common/WmsTask.cs @@ -258,6 +258,7 @@ foreach (var item in CurInvItem.Items) { item.STATUS = WMS_ITEM.STATUSs.InStore.GetValue(); + item.LOTNO = item.LOTNO.IsNullOrEmpty(new Barcode(item.SN).LotNo); item.SUPP_LOTNO = CurInvItem.Barcode.LotNo; item.FIRST_IN_DATE = item.FIRST_IN_DATE <= DateTime.MinValue ? DateTime.Now : item.FIRST_IN_DATE; item.PROD_DATE = item.PROD_DATE <= DateTime.MinValue ? item.FIRST_IN_DATE : item.PROD_DATE; diff --git a/Tiger.Business.WMS/ERP/U9C_WMS.cs b/Tiger.Business.WMS/ERP/U9C_WMS.cs index ba66a6d..afe58ff 100644 --- a/Tiger.Business.WMS/ERP/U9C_WMS.cs +++ b/Tiger.Business.WMS/ERP/U9C_WMS.cs @@ -185,6 +185,7 @@ TRANS_CODE = nameof(BIZ_U9_ASN), TRANS_NO = info.ORDER_NO, TRANS_LINE = info.LINE_NO, + LOTNO = barcode.LotNo, SUPP_CODE = dtl.SUPP_CODE, SUPP_LOTNO = dtl.SUPP_LOTNO, }; @@ -207,6 +208,7 @@ TRANS_CODE = nameof(BIZ_U9_ASN), TRANS_NO = info.ORDER_NO, TRANS_LINE = info.LINE_NO, + LOTNO = barcode.LotNo, SUPP_CODE = dtl.SUPP_CODE, SUPP_LOTNO = dtl.SUPP_LOTNO, }; diff --git a/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs b/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs index eb99666..c66af5a 100644 --- a/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs +++ b/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs @@ -12,6 +12,7 @@ using Tiger.Model.Base; using Tiger.Model.Entitys.MES.U9C; using Tiger.Model.MES.Yada; +using static IronPython.SQLite.PythonSQLite; using static Microsoft.Scripting.Hosting.Shell.ConsoleHostOptions; namespace Tiger.Business.WMS.Extensions @@ -150,12 +151,17 @@ return action; } + var curBatch = trans.CurPREP.Order.CurBatch; + curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); + curBatch.PREP_PERSON = trans.UserCode; + curBatch.FINISH_TIME = DateTime.Now; + curBatch.REQ_PERSON = trans.UserCode; + curBatch.DLVY_TIME = DateTime.Now; + foreach (var item in trans.CurPREP.Order.SourceDetails) + { + item.QTY_ACT_DLVY = item.QTY_ACT_REQ; + } trans.CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Sended.GetValue(); - trans.CurPREP.Order.CurBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); - trans.CurPREP.Order.CurBatch.PREP_PERSON = trans.UserCode; - trans.CurPREP.Order.CurBatch.FINISH_TIME = DateTime.Now; - trans.CurPREP.Order.CurBatch.REQ_PERSON = trans.UserCode; - trans.CurPREP.Order.CurBatch.DLVY_TIME = DateTime.Now; var orders = trans.MainDB.Queryable<BIZ_U9_MISC_OUT>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.ORDER_NO)).ToList(); foreach (var item in orders) { @@ -171,7 +177,8 @@ var dbTran = db.UseTran(() => { db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); - db.Updateable(trans.CurPREP.Order.CurBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); + db.Updateable(trans.CurPREP.Order.SourceDetails, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); + db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); }); if (dbTran.IsSuccess) @@ -187,72 +194,7 @@ } return action; } - /// <summary> - /// U9鍒涘缓濮斿鐢熶骇棰嗘枡鍗� - /// </summary> - /// <param name="trans"></param> - /// <param name="input"></param> - /// <returns></returns> - private static async Task<ApiAction> CreatePMIssueDoc(Out_BIZ_WMS_PREP trans, BaseInput input) - { - var action = new ApiAction(); - var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList(); - var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Others.GetActReqQty(q)); - if (noFinish.Any()) - { - action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("澶囨枡浠诲姟[{0}]鏈兘鎻愪氦瀹℃牳锛屾湭澶囨枡瀹屾垚鐨勮濡備笅锛歿1}"); - action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.MiscShipApprove.NoFinish", trans.CurPREP.Order.ORDER_NO, string.Join("锛�", noFinish.Select(q => q.ORDER_LINE))); - return action; - } - - var iInput = new MiscShipApproveInput { MiscShipApproveParam = trans.CurPREP.Order.SourceOrders.Select(q => new MiscShipApproveParam() { Code = q.ORDER_NO }).ToList() }; - var result = await DI.Resolve<IWMS_U9C>().MiscShipApprove(iInput); - if (!result.IsSuccessed) - { - action.IsSuccessed = false; - action.LocaleMsg = result.LocaleMsg; - return action; - } - - trans.CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Sended.GetValue(); - trans.CurPREP.Order.CurBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); - trans.CurPREP.Order.CurBatch.PREP_PERSON = trans.UserCode; - trans.CurPREP.Order.CurBatch.FINISH_TIME = DateTime.Now; - trans.CurPREP.Order.CurBatch.REQ_PERSON = trans.UserCode; - trans.CurPREP.Order.CurBatch.DLVY_TIME = DateTime.Now; - var orders = trans.MainDB.Queryable<BIZ_U9_MISC_OUT>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.ORDER_NO)).ToList(); - foreach (var item in orders) - { - item.STATUS = BIZ_U9_MISC_OUT.STATUSs.Sended.GetValue(); - item.PREP_PERSON = trans.UserCode; - item.FINISH_TIME = DateTime.Now; - item.REQ_PERSON = trans.UserCode; - item.DLVY_TIME = DateTime.Now; - } - - //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 - var db = trans.GetCommitDB(); - var dbTran = db.UseTran(() => - { - db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); - db.Updateable(trans.CurPREP.Order.CurBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); - db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); - }); - if (dbTran.IsSuccess) - { - //action.LocaleMsg = Biz.L($"鏉傚彂鍗曞鏍告垚鍔燂紝鍗曞彿濡備笅锛歿0}"); - action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.MiscShipApprove.Success", string.Join("锛�", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); - } - else - { - Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); - //鎶涘嚭寮傚父 - throw dbTran.ErrorException; - } - return action; - } /// <summary> /// U9鍒涘缓鐢熶骇棰嗘枡鍗� /// </summary> @@ -263,18 +205,66 @@ { var action = new ApiAction(); - var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList(); - var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Others.GetActReqQty(q)); - if (noFinish.Any()) + var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.ORDER_BATCH == trans.CurPREP.Order.CurBatch.BATCH.ToString()).ToList(); + if (!sns.Any()) { action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("澶囨枡浠诲姟[{0}]鏈兘鎻愪氦瀹℃牳锛屾湭澶囨枡瀹屾垚鐨勮濡備笅锛歿1}"); - action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.MiscShipApprove.NoFinish", trans.CurPREP.Order.ORDER_NO, string.Join("锛�", noFinish.Select(q => q.ORDER_LINE))); + //action.LocaleMsg = Biz.L("鍒涘缓鐢熶骇棰嗘枡鍗曞け璐ワ紝澶囨枡浠诲姟[{0}]鎵规[{1}]鏈壘鍒板凡涓嬫灦鐨勭墿鏂欐暟鎹�"); + action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, trans.CurPREP.Order.CurBatch.BATCH); return action; } + var wos = Biz.DataSource["YadaU9C"].Client.Queryable<mes_Mo>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.DocNo)).ToList(); + var temp = sns.GroupBy(q => new { q.ITEM_CODE, q.UNIT, q.WH_CODE, q.LOCATION_CODE }) + .Select(g => new PickListDTOs + { + Item = new() { Code = g.Key.ITEM_CODE }, + IssueWh = new() { Code = g.Key.WH_CODE }, + IssueBin = new() { code = g.Key.LOCATION_CODE }, + IssueQty = g.Sum(q => q.QTY), + IssuedQty = g.Sum(q => q.QTY), + IssueUOM = new() { Code = g.Key.UNIT.IsNullOrEmpty("PCS") }, + Lot = new() { code = g.Max(q => q.LOTNO) }, + }).ToList(); + var pickList = new List<PickListDTOs>(); + var prepSrcList = new List<BIZ_WMS_PREP_SRC_DTL>(); + foreach (var dtl in temp) + { + var remain = dtl.IssueQty; + var srcDtls = trans.CurPREP.Order.SourceDetails.Where(q => q.ITEM_CODE == dtl.Item.Code).ToList(); + var count = srcDtls.Count; + foreach (var src in srcDtls) + { + var actQty = src.QTY_ACT_REQ - src.QTY_ACT_DLVY; + if (remain > 0 && actQty > 0) + { + //瀹為檯闇�姹傚ぇ浜庡墿浣欏緟鍒嗛厤鏁伴噺锛屾垨鑰呭綋鍓嶆槸鏈�鍚庝竴涓潵婧愭槑缁嗚锛屽垯鍒嗛厤鍓╀綑鏁伴噺 + var dlvy = (actQty > remain || count == 1) ? remain : actQty; + src.QTY_ACT_DLVY += dlvy; + prepSrcList.Add(src); + var pick = new PickListDTOs + { + Item = dtl.Item, + IssueWh = dtl.IssueWh, + IssueBin = dtl.IssueBin, + IssueQty = dlvy, + IssuedQty = dlvy, + IssueUOM = dtl.IssueUOM, + MOPickList = src.SOURCE_ID.ToInt64(), + Lot = dtl.Lot, + }; + pickList.Add(pick); + remain -= pick.IssueQty; + } + count--; + } + } - var iInput = new MiscShipApproveInput { MiscShipApproveParam = trans.CurPREP.Order.SourceOrders.Select(q => new MiscShipApproveParam() { Code = q.ORDER_NO }).ToList() }; - var result = await DI.Resolve<IWMS_U9C>().MiscShipApprove(iInput); + var iInput = new CreateProdMaterialReqInput {CreateProdMaterialReqParam = new() { new() { + MOs = trans.CurPREP.Order.SourceOrders.Select(q => new MOs { Code = q.SOURCE_ORDER }).ToList(), + PickListDTOs = pickList, + BusinessType = wos.First().BusinessType, + }}}; + var result = await DI.Resolve<IWMS_U9C>().CreateProdMaterialReq(iInput); if (!result.IsSuccessed) { action.IsSuccessed = false; @@ -282,20 +272,20 @@ return action; } - trans.CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Sended.GetValue(); - trans.CurPREP.Order.CurBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); - trans.CurPREP.Order.CurBatch.PREP_PERSON = trans.UserCode; - trans.CurPREP.Order.CurBatch.FINISH_TIME = DateTime.Now; - trans.CurPREP.Order.CurBatch.REQ_PERSON = trans.UserCode; - trans.CurPREP.Order.CurBatch.DLVY_TIME = DateTime.Now; - var orders = trans.MainDB.Queryable<BIZ_U9_MISC_OUT>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.ORDER_NO)).ToList(); - foreach (var item in orders) + var curBatch = trans.CurPREP.Order.CurBatch; + curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); + curBatch.PREP_PERSON = trans.UserCode; + curBatch.FINISH_TIME = DateTime.Now; + curBatch.REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)); + curBatch.REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)); + curBatch.REQ_PERSON = trans.UserCode; + curBatch.DLVY_TIME = DateTime.Now; + + var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList(); + var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Others.GetActReqQty(q)); + if (!noFinish.Any()) { - item.STATUS = BIZ_U9_MISC_OUT.STATUSs.Sended.GetValue(); - item.PREP_PERSON = trans.UserCode; - item.FINISH_TIME = DateTime.Now; - item.REQ_PERSON = trans.UserCode; - item.DLVY_TIME = DateTime.Now; + trans.CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Sended.GetValue(); } //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 @@ -303,13 +293,142 @@ var dbTran = db.UseTran(() => { db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); - db.Updateable(trans.CurPREP.Order.CurBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); - db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); + db.Updateable(prepSrcList, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); + db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_ID, q.REQ_ORDER, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); }); if (dbTran.IsSuccess) { - //action.LocaleMsg = Biz.L($"鏉傚彂鍗曞鏍告垚鍔燂紝鍗曞彿濡備笅锛歿0}"); - action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.MiscShipApprove.Success", string.Join("锛�", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); + //action.LocaleMsg = Biz.L($"鍒涘缓鐢熶骇棰嗘枡鍗昜{0}]鎴愬姛锛屾潵婧愬崟鍙峰涓嬶細{1}"); + action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.Success", curBatch.REQ_ORDER, string.Join("锛�", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); + } + else + { + Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); + //鎶涘嚭寮傚父 + throw dbTran.ErrorException; + } + return action; + } + + /// <summary> + /// U9鍒涘缓濮斿鐢熶骇棰嗘枡鍗� + /// </summary> + /// <param name="trans"></param> + /// <param name="input"></param> + /// <returns></returns> + private static async Task<ApiAction> CreatePMIssueDoc(Out_BIZ_WMS_PREP trans, BaseInput input) + { + var action = new ApiAction(); + + var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.ORDER_BATCH == trans.CurPREP.Order.CurBatch.BATCH.ToString()).ToList(); + if (!sns.Any()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鍒涘缓濮斿鐢熶骇棰嗘枡鍗曞け璐ワ紝澶囨枡浠诲姟[{0}]鎵规[{1}]鏈壘鍒板凡涓嬫灦鐨勭墿鏂欐暟鎹�"); + action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, trans.CurPREP.Order.CurBatch.BATCH); + return action; + } + var temp = sns.GroupBy(q => new { q.ITEM_CODE, q.UNIT, q.WH_CODE, q.LOCATION_CODE }) + .Select(g => new PickListDTOs2 + { + Item = new() { Code = g.Key.ITEM_CODE }, + IssueWh = new() { Code = g.Key.WH_CODE }, + IssueBin = new() { code = g.Key.LOCATION_CODE }, + IssueQty = g.Sum(q => q.QTY), + IssuedQty = g.Sum(q => q.QTY), + IssueUOM = new() { Code = g.Key.UNIT.IsNullOrEmpty("PCS") }, + Lot = new() { code = g.Max(q => q.LOTNO) }, + }).ToList(); + var pickList = new List<PickListDTOs2>(); + var prepSrcList = new List<BIZ_WMS_PREP_SRC_DTL>(); + foreach (var dtl in temp) + { + var remain = dtl.IssueQty; + var srcDtls = trans.CurPREP.Order.SourceDetails.Where(q => q.ITEM_CODE == dtl.Item.Code).ToList(); + var count = srcDtls.Count; + foreach (var src in srcDtls) + { + var actQty = src.QTY_ACT_REQ - src.QTY_ACT_DLVY; + if (remain > 0 && actQty > 0) + { + //瀹為檯闇�姹傚ぇ浜庡墿浣欏緟鍒嗛厤鏁伴噺锛屾垨鑰呭綋鍓嶆槸鏈�鍚庝竴涓潵婧愭槑缁嗚锛屽垯鍒嗛厤鍓╀綑鏁伴噺 + var dlvy = (actQty > remain || count == 1) ? remain : actQty; + src.QTY_ACT_DLVY += dlvy; + prepSrcList.Add(src); + var pick = new PickListDTOs2 + { + Item = dtl.Item, + IssueWh = dtl.IssueWh, + IssueBin = dtl.IssueBin, + IssueQty = dlvy, + IssuedQty = dlvy, + IssueUOM = dtl.IssueUOM, + SCMOPickList = src.SOURCE_ID.ToInt64(), + Lot = dtl.Lot, + }; + pickList.Add(pick); + remain -= pick.IssueQty; + } + count--; + } + } + + var iInput = new CreateOutProdMaterialReqInput { CreateOutProdMaterialReqParam = new() { new() { + POLine = trans.CurPREP.Order.SourceOrders.Select(q => new POLine { Code = q.SOURCE_ORDER }).ToList(), + BusinessDate = DateTime.Now.ToString("yyyy-MM-dd"), + PickListDTOs = pickList, + BusinessCreatedOn = DateTime.Now.ToString("yyyy-MM-dd"), + }}}; + var result = await DI.Resolve<IWMS_U9C>().CreateOutProdMaterialReq(iInput); + if (!result.IsSuccessed) + { + action.IsSuccessed = false; + action.LocaleMsg = result.LocaleMsg; + return action; + } + + var curBatch = trans.CurPREP.Order.CurBatch; + curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); + curBatch.PREP_PERSON = trans.UserCode; + curBatch.FINISH_TIME = DateTime.Now; + curBatch.REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)); + curBatch.REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)); + curBatch.REQ_PERSON = trans.UserCode; + curBatch.DLVY_TIME = DateTime.Now; + + var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList(); + var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Others.GetActReqQty(q)); + var orders = new List<BIZ_U9_SCM_OUT>(); + if (!noFinish.Any()) + { + trans.CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Sended.GetValue(); + orders = trans.MainDB.Queryable<BIZ_U9_SCM_OUT>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.ORDER_NO)).ToList(); + foreach (var item in orders) + { + item.STATUS = BIZ_U9_SCM_OUT.STATUSs.Sended.GetValue(); + item.PREP_PERSON = trans.UserCode; + item.FINISH_TIME = DateTime.Now; + item.REQ_PERSON = trans.UserCode; + item.DLVY_TIME = DateTime.Now; + } + } + + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = trans.GetCommitDB(); + var dbTran = db.UseTran(() => + { + db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); + db.Updateable(prepSrcList, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); + db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_ID, q.REQ_ORDER, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); + if (orders.Any()) + { + db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); + } + }); + if (dbTran.IsSuccess) + { + //action.LocaleMsg = Biz.L($"鍒涘缓濮斿鐢熶骇棰嗘枡鍗昜{0}]鎴愬姛锛屾潵婧愬崟鍙峰涓嬶細{1}"); + action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.Success", curBatch.REQ_ORDER, string.Join("锛�", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); } else { diff --git a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs index adcf836..ab6b7ef 100644 --- a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs +++ b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs @@ -453,9 +453,11 @@ ORDER_BATCH = CurPREP.Order.CurBatch.BATCH.ToString(), SN = q.SN, ITEM_CODE = q.ITEM_CODE, + UNIT = q.UNIT, QTY = q.QTY, QTY_DLVY = q.QTY, STATUS = q.STATUS, + LOTNO = q.LOTNO, WH_CODE = CurInvItem.Warehouse.WH_CODE, REGION_CODE = CurInvItem.Region.REGION_CODE, SHELF_CODE = CurInvItem.Shelf.SHELF_CODE, diff --git a/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs b/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs index 8cc7c41..3fec36c 100644 --- a/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs +++ b/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs @@ -440,7 +440,7 @@ /// <summary> /// 鐢熶骇璁㈠崟缂栫爜 /// </summary> - public MOs MOs { get; set; } + public List<MOs> MOs { get; set; } /// <summary> /// 棰嗘枡鍗曡闆嗗悎 /// </summary> @@ -489,7 +489,7 @@ /// <summary> /// 澶囨枡琛ㄨID /// </summary> - public string MOPickList { get; set; } + public long MOPickList { get; set; } /// <summary> /// 鍙戞枡鎵规 /// </summary> @@ -588,7 +588,7 @@ /// <summary> /// 涓氬姟鏃ユ湡 /// </summary> - public DateTime BusinessDate { get; set; } + public string BusinessDate { get; set; } /// <summary> /// 棰嗘枡琛岄泦鍚� /// </summary> @@ -633,7 +633,7 @@ /// <summary> /// 濮斿璁㈠崟澶囨枡琛ㄨID /// </summary> - public string SCMOPickList { get; set; } + public long SCMOPickList { get; set; } /// <summary> /// 鍙戞枡鎵规 /// </summary> diff --git a/Tiger.Model.Net/Entitys/MES/YadaU9/mes_MOPickList.cs b/Tiger.Model.Net/Entitys/MES/YadaU9/mes_MOPickList.cs index b7e84a5..a3de1b1 100644 --- a/Tiger.Model.Net/Entitys/MES/YadaU9/mes_MOPickList.cs +++ b/Tiger.Model.Net/Entitys/MES/YadaU9/mes_MOPickList.cs @@ -178,6 +178,7 @@ ITEM_CODE = Code, UNIT = IssueUOM, SOURCE_CODE = nameof(BIZ_MES_WO), + SOURCE_ID = PickListId.ToString(), SOURCE_ORDER = MoDocNo, SOURCE_LINE = DocLineNO.ToString(), QTY_REQ = ActualReqQty, diff --git a/Tiger.Model.Net/Entitys/MES/YadaU9/mes_SCMPickList.cs b/Tiger.Model.Net/Entitys/MES/YadaU9/mes_SCMPickList.cs index f83004e..6938aa7 100644 --- a/Tiger.Model.Net/Entitys/MES/YadaU9/mes_SCMPickList.cs +++ b/Tiger.Model.Net/Entitys/MES/YadaU9/mes_SCMPickList.cs @@ -137,6 +137,7 @@ ITEM_CODE = ItemCode, UNIT = IssueUOM, SOURCE_CODE = nameof(BIZ_U9_SCM_OUT), + SOURCE_ID = SCMPickListID.ToString(), SOURCE_ORDER = PoDocNo, SOURCE_LINE =PickLineNo.ToString(), QTY_REQ = ActualReqQty, diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs index 3c7434d..d7dbb93 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs @@ -49,10 +49,40 @@ /// </summary> [DisplayName("鏉ユ簮鍗曞彿锛屽涓敤鈥�,鈥濆垎闅旓紝璺熺紪鐮佷竴涓�瀵瑰簲")] public string SOURCE_ORDER { get; set; } - /// <summary> - /// 澶囨敞 - /// </summary> - [DisplayName("澶囨敞")] + /// <summary> + /// 宸ュ巶缂栫爜 + /// </summary> + [DisplayName("宸ュ巶缂栫爜")] + public string FTY_CODE { get; set; } + /// <summary> + /// 杞﹂棿缂栫爜 + /// </summary> + [DisplayName("杞﹂棿缂栫爜")] + public string WS_CODE { get; set; } + /// <summary> + /// 浜х嚎缂栫爜 + /// </summary> + [DisplayName("浜х嚎缂栫爜")] + public string LINE_CODE { get; set; } + /// <summary> + /// 宀椾綅缂栫爜 + /// </summary> + [DisplayName("宀椾綅缂栫爜")] + public string POST_CODE { get; set; } + /// <summary> + /// 宸ュ簭缂栫爜 + /// </summary> + [DisplayName("宸ュ簭缂栫爜")] + public string OPER_CODE { get; set; } + /// <summary> + /// 鍔犲伐娈� + /// </summary> + [DisplayName("鍔犲伐娈�")] + public string SEGMENT { get; set; } + /// <summary> + /// 澶囨敞 + /// </summary> + [DisplayName("澶囨敞")] public string REMARK { get; set; } #endregion diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs index 810f9b1..a709798 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs @@ -48,15 +48,20 @@ /// </summary> [DisplayName("鐗╁搧缂栫爜")] public string ITEM_CODE { get; set; } - /// <summary> + /// <summary> + /// 鎵规鍙� + /// </summary> + [DisplayName("鎵规鍙�")] + public string LOTNO { get; set; } + /// <summary> /// 鍗曚綅 /// </summary> [DisplayName("鍗曚綅")] - public string UNIT { get; set; } - /// <summary> - /// 鐗╁搧鏁伴噺 - /// </summary> - [DisplayName("鐗╁搧鏁伴噺")] + public string UNIT { get; set; } + /// <summary> + /// 鐗╁搧鏁伴噺 + /// </summary> + [DisplayName("鐗╁搧鏁伴噺")] public double QTY { get; set; } /// <summary> /// 鍗曚綅鐢ㄩ噺 diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SRC_DTL.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SRC_DTL.cs index 6306266..9c03306 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SRC_DTL.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SRC_DTL.cs @@ -75,6 +75,11 @@ [DisplayName("鏉ユ簮鍗曟嵁缂栫爜")] public string SOURCE_CODE { get; set; } /// <summary> + /// 鏉ユ簮鍗旾D + /// </summary> + [DisplayName("鏉ユ簮鍗旾D")] + public string SOURCE_ID { get; set; } + /// <summary> /// 鏉ユ簮鍗曞彿 /// </summary> [DisplayName("鏉ユ簮鍗曞彿")] @@ -104,10 +109,15 @@ /// </summary> [DisplayName("瀹為檯闇�姹傛暟閲�")] public double QTY_ACT_REQ { get; set; } - /// <summary> - /// 宸ュ巶缂栫爜 + /// <summary> + /// 瀹為檯鍙戞枡鏁伴噺 /// </summary> - [DisplayName("宸ュ巶缂栫爜")] + [DisplayName("瀹為檯鍙戞枡鏁伴噺")] + public double QTY_ACT_DLVY { get; set; } + /// <summary> + /// 宸ュ巶缂栫爜 + /// </summary> + [DisplayName("宸ュ巶缂栫爜")] public string FTY_CODE { get; set; } /// <summary> /// 杞﹂棿缂栫爜 @@ -159,10 +169,10 @@ /// </summary> [DisplayName("澶囨敞")] public string REMARK { get; set; } - #endregion + #endregion - #region 铏氭嫙灞炴�� - /*渚嬪瓙 + #region 铏氭嫙灞炴�� + /*渚嬪瓙 [SugarColumn(IsIgnore = true)] public string FieldName { get; set; } */ @@ -170,8 +180,8 @@ public iPrepPickItem Source { get; set; } #endregion - #region 澶栭敭灞炴�� - /*渚嬪瓙 + #region 澶栭敭灞炴�� + /*渚嬪瓙 //涓�瀵逛竴澶栭敭瀵艰埅 [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//涓�瀵逛竴 ClassAId鏄疊IZ_WMS_PREP_SRC_DTL绫婚噷闈㈢殑澶栭敭ID瀛楁 public ClassA ClassA { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull @@ -182,10 +192,10 @@ [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_WMS_PREP_SRC_DTLId), nameof(MappingClass.ClassAId))]//娉ㄦ剰椤哄簭 public List<ClassA> ClassAList { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull */ - #endregion + #endregion - #region 鏋氫妇鍙橀噺 - /*渚嬪瓙 + #region 鏋氫妇鍙橀噺 + /*渚嬪瓙 public enum FieldNames { [Description("鏋氫妇鎻忚堪0")] @@ -194,11 +204,11 @@ Enum1, } */ - #endregion + #endregion - #region 鍏叡鏂规硶 + #region 鍏叡鏂规硶 - #endregion + #endregion - }//endClass + }//endClass } \ No newline at end of file -- Gitblit v1.9.3