From d2f14f6bb44c6dd19cc0816a033452b6de56184b Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期日, 06 四月 2025 18:09:45 +0800 Subject: [PATCH] 增加备料任务调用U9接口方法 --- Tiger.Api/Language.db | 0 Tiger.Business.WMS/ERP/WMS_U9C.CreateProdMaterialReq.cs | 17 +- Tiger.Business.WMS/Extensions/Yada/OutExtension.cs | 257 ++++++++++++++++++++++++++++++++++++++---- Tiger.Business.WMS/Common/Preparation.cs | 1 Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs | 44 ++++--- Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs | 2 Tiger.Business.WMS/ERP/WMS_U9C.CreateOutProdMaterialReq.cs | 17 +- Tiger.Business.WMS/ERP/WMS_U9C.cs | 10 - Tiger.Business.WMS/ERP/WMS_U9C.ApproveMiscShip.cs | 10 - 9 files changed, 273 insertions(+), 85 deletions(-) diff --git a/Tiger.Api/Language.db b/Tiger.Api/Language.db index 9a024a6..5265410 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 9ebfbb0..cb21723 100644 --- a/Tiger.Business.WMS/Common/Preparation.cs +++ b/Tiger.Business.WMS/Common/Preparation.cs @@ -33,6 +33,7 @@ public string UserCode { get; set; } public string OrgCode { get; set; } public BIZ_WMS_PREP Order { get; set; } + public BIZ_WMS_PREP.BIZ_TYPEs BizType => Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>(); #endregion Propertys & Variables #region Functions diff --git a/Tiger.Business.WMS/ERP/WMS_U9C.ApproveMiscShip.cs b/Tiger.Business.WMS/ERP/WMS_U9C.ApproveMiscShip.cs index 8c237a9..34c3174 100644 --- a/Tiger.Business.WMS/ERP/WMS_U9C.ApproveMiscShip.cs +++ b/Tiger.Business.WMS/ERP/WMS_U9C.ApproveMiscShip.cs @@ -10,17 +10,7 @@ using System.Linq; using Newtonsoft.Json; using Tiger.IBusiness; -using Microsoft.AspNetCore.Http; -using Tiger.Model.Minsun; -using Org.BouncyCastle.Asn1.Tsp; -using Tiger.Model.Entitys.MES.Position; -using Apache.NMS.ActiveMQ.Commands; -using System.Security.Cryptography; -using System.Diagnostics; using Tiger.Model.Entitys.MES.U9C; -using Newtonsoft.Json.Linq; -using System.Security.Policy; -using NetTaste; namespace Tiger.Business.WMS { diff --git a/Tiger.Business.WMS/ERP/WMS_U9C.CreateOutProdMaterialReq.cs b/Tiger.Business.WMS/ERP/WMS_U9C.CreateOutProdMaterialReq.cs index c947968..b8727ef 100644 --- a/Tiger.Business.WMS/ERP/WMS_U9C.CreateOutProdMaterialReq.cs +++ b/Tiger.Business.WMS/ERP/WMS_U9C.CreateOutProdMaterialReq.cs @@ -10,23 +10,20 @@ using System.Linq; using Newtonsoft.Json; using Tiger.IBusiness; -using Microsoft.AspNetCore.Http; -using Tiger.Model.Minsun; -using Org.BouncyCastle.Asn1.Tsp; -using Tiger.Model.Entitys.MES.Position; -using Apache.NMS.ActiveMQ.Commands; -using System.Security.Cryptography; -using System.Diagnostics; using Tiger.Model.Entitys.MES.U9C; -using Newtonsoft.Json.Linq; -using System.Security.Policy; -using NetTaste; namespace Tiger.Business.WMS { public partial class WMS_U9C { /// <summary> + /// 鍒涘缓濮斿鐢熶骇棰嗘枡鍗� + /// </summary> + public static string CreateOutProdMaterialReqUrl + { get; set; } = "http://172.16.80.20/u9c/webapi/PMIssueDoc/Create"; // ApiConfig.IsTestServer ? Cache.SysParam["CreateOutProdMaterialReqUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["CreateOutProdMaterialReqUrl", "U9CUrl"].PARAM_VALUE; //http://172.16.80.20/u9c/webapi/PMIssueDoc/Create + + + /// <summary> /// 鍒涘缓濮斿鐢熶骇棰嗘枡鍗曟帴鍙� /// </summary> /// <param name="input"></param> diff --git a/Tiger.Business.WMS/ERP/WMS_U9C.CreateProdMaterialReq.cs b/Tiger.Business.WMS/ERP/WMS_U9C.CreateProdMaterialReq.cs index 945326c..31dd884 100644 --- a/Tiger.Business.WMS/ERP/WMS_U9C.CreateProdMaterialReq.cs +++ b/Tiger.Business.WMS/ERP/WMS_U9C.CreateProdMaterialReq.cs @@ -10,23 +10,20 @@ using System.Linq; using Newtonsoft.Json; using Tiger.IBusiness; -using Microsoft.AspNetCore.Http; -using Tiger.Model.Minsun; -using Org.BouncyCastle.Asn1.Tsp; -using Tiger.Model.Entitys.MES.Position; -using Apache.NMS.ActiveMQ.Commands; -using System.Security.Cryptography; -using System.Diagnostics; using Tiger.Model.Entitys.MES.U9C; -using Newtonsoft.Json.Linq; -using System.Security.Policy; -using NetTaste; namespace Tiger.Business.WMS { public partial class WMS_U9C { /// <summary> + /// 鍒涘缓鐢熶骇棰嗘枡鍗� + /// </summary> + public static string CreateProdMaterialReqUrl + { get; set; } = "http://172.16.80.20/u9c/webapi/IssueDoc/Create"; // ApiConfig.IsTestServer ? Cache.SysParam["CreateProdMaterialReqUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["CreateProdMaterialReqUrl", "U9CUrl"].PARAM_VALUE; //http://172.16.80.20/u9c/webapi/IssueDoc/Create + + + /// <summary> /// 鍒涘缓鐢熶骇棰嗘枡鍗曟帴鍙� /// </summary> /// <param name="input"></param> diff --git a/Tiger.Business.WMS/ERP/WMS_U9C.cs b/Tiger.Business.WMS/ERP/WMS_U9C.cs index 09e150f..53f8f54 100644 --- a/Tiger.Business.WMS/ERP/WMS_U9C.cs +++ b/Tiger.Business.WMS/ERP/WMS_U9C.cs @@ -31,20 +31,10 @@ public static string ApproveLineUrl { get; set; } = "http://172.16.80.20/u9c/webapi/Receivement/ApproveLine"; // ApiConfig.IsTestServer ? Cache.SysParam["ApproveLineUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["ApproveLineUrl", "U9CUrl"].PARAM_VALUE; //http://172.16.80.20/u9c/webapi/Receivement/ApproveLine; 娴嬭瘯 /// <summary> - /// 鍒涘缓鐢熶骇棰嗘枡鍗� - /// </summary> - public static string CreateProdMaterialReqUrl - { get; set; } = "http://172.16.80.20/u9c/webapi/IssueDoc/Create"; // ApiConfig.IsTestServer ? Cache.SysParam["CreateProdMaterialReqUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["CreateProdMaterialReqUrl", "U9CUrl"].PARAM_VALUE; //http://172.16.80.20/u9c/webapi/IssueDoc/Create - /// <summary> /// 鍒涘缓鐢熶骇閫�鏂欏崟-鎸夎閫�鏂� /// </summary> public static string CreateProdReturnOrderNewUrl { get; set; } = "http://172.16.80.20/u9c/webapi/IssueDoc/CreateRecedeIssueDocNew"; // ApiConfig.IsTestServer ? Cache.SysParam["CreateProdReturnOrderUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["CreateProdReturnOrderUrl", "U9CUrl"].PARAM_VALUE; //http://172.16.80.20/u9c/webapi/IssueDoc/CreateRecedeIssueDocNew - /// <summary> - /// 鍒涘缓濮斿鐢熶骇棰嗘枡鍗� - /// </summary> - public static string CreateOutProdMaterialReqUrl - { get; set; } = "http://172.16.80.20/u9c/webapi/PMIssueDoc/Create"; // ApiConfig.IsTestServer ? Cache.SysParam["CreateOutProdMaterialReqUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["CreateOutProdMaterialReqUrl", "U9CUrl"].PARAM_VALUE; //http://172.16.80.20/u9c/webapi/PMIssueDoc/Create /// <summary> /// 鍒涘缓濮斿鐢熶骇閫�鏂欏崟 /// </summary> diff --git a/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs b/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs index 48c86d7..eb99666 100644 --- a/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs +++ b/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs @@ -1,12 +1,18 @@ 锘縰sing MailKit.Search; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; +using Org.BouncyCastle.Asn1.X509; using Rhea.Common; +using SqlSugar; using System; using System.IO; +using Tiger.Business.WMS.Transaction; +using Tiger.IBusiness; using Tiger.Model; using Tiger.Model.Base; +using Tiger.Model.Entitys.MES.U9C; using Tiger.Model.MES.Yada; +using static Microsoft.Scripting.Hosting.Shell.ConsoleHostOptions; namespace Tiger.Business.WMS.Extensions { @@ -74,41 +80,244 @@ } /// <summary> - /// 鏍规嵁鍙戞枡绫诲瀷锛岃皟鐢ㄧ浉搴斿彂鏂欏崟鎹殑ERP鎺ュ彛 + /// 瀹為檯闇�姹傛暟閲忚绠楁柟娉� /// </summary> /// <param name="type"></param> - /// <param name="orderNo"></param> - /// <param name="commitInput"></param> + /// <param name="dtl"></param> /// <returns></returns> - public static List<BIZ_WMS_PREP_SRC_DTL> CommitToERP(this BIZ_WMS_PREP.BIZ_TYPEs type, string orderNo, object commitInput) + public static double GetActReqQty(this BIZ_WMS_PREP.BIZ_TYPEs type, BIZ_WMS_PREP_DTL dtl) { - // 鏌ヨ鍗曟嵁鏄庣粏 - var pickList = new List<BIZ_WMS_PREP_SRC_DTL>(); switch (type) { case BIZ_WMS_PREP.BIZ_TYPEs.Others: - { - var dtls = Biz.Db.Queryable<BIZ_U9_MISC_OUT_DTL>().Where(q => q.ORDER_NO == orderNo).ToList(); - pickList = dtls.Select(q => q.GetPickItem()).ToList(); - } - break; case BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder: - { - var dtls = Biz.DataSource["YadaU9C"].Client.Queryable<mes_MOPickList>().Where(q => q.MoDocNo == orderNo).ToList(); - pickList = dtls.Select(q => q.GetPickItem()).ToList(); - } - break; case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing: - { - var dtls = Biz.DataSource["YadaU9C"].Client.Queryable<mes_SCMPickList>().Where(q => q.PoDocNo == orderNo).ToList(); - pickList = dtls.Select(q => q.GetPickItem()).ToList(); - } - break; case BIZ_WMS_PREP.BIZ_TYPEs.Requisition: default: - break; + return dtl.QTY_REQ; } - return pickList; } - } + + /// <summary> + /// 鏍规嵁鍙戞枡绫诲瀷锛岃皟鐢ㄧ浉搴斿彂鏂欏崟鎹殑ERP鎺ュ彛 + /// </summary> + /// <param name="type"></param> + /// <param name="trans"></param> + /// <param name="input"></param> + /// <returns></returns> + public static async Task<ApiAction> CommitToERP(this BIZ_WMS_PREP.BIZ_TYPEs type, Out_BIZ_WMS_PREP trans, BaseInput input) + { + switch (type) + { + case BIZ_WMS_PREP.BIZ_TYPEs.Others: + return await MiscShipApprove(trans, input); + case BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder: + return await CreateIssueDoc(trans, input); + case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing: + return await CreatePMIssueDoc(trans, input); + case BIZ_WMS_PREP.BIZ_TYPEs.Requisition: + default: + throw new NotImplementedException($"鍙戞枡鍗曟嵁绫诲瀷[{type.GetDesc()}]鏈疄鐜癊RP鎺ュ彛璋冪敤"); + } + } + + /// <summary> + /// U9鏉傚彂鍗曞鏍� + /// </summary> + /// <param name="trans"></param> + /// <param name="input"></param> + /// <returns></returns> + private static async Task<ApiAction> MiscShipApprove(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> + /// <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> + /// <param name="trans"></param> + /// <param name="input"></param> + /// <returns></returns> + private static async Task<ApiAction> CreateIssueDoc(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; + } + }//endClass } \ No newline at end of file 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 690b95f..adcf836 100644 --- a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs +++ b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs @@ -12,6 +12,8 @@ using Tiger.Business.WMS.Common; using Org.BouncyCastle.Ocsp; using Tiger.Model.Sharetronic.Shelf; +using MailKit.Search; +using Tiger.Business.WMS.Extensions; namespace Tiger.Business.WMS.Transaction { @@ -29,7 +31,7 @@ } #region Propertys & Variables - private Preparation CurPREP; + public Preparation CurPREP { get; set; } private List<BIZ_WMS_PREP_SN> CurSn = new(); private BIZ_WMS_PREP_DTL CurPrepDtl = new(); public List<SuggestItem> Suggests { get; set; } = new(); @@ -156,6 +158,7 @@ { var action = new ApiAction<BIZ_WMS_PREP>(); CurPREP.Order = MainDB.Queryable<BIZ_WMS_PREP>().Where(q => q.ID == CurPREP.Order.ID).IncludesAllFirstLayer().First(); + action.Data = CurPREP.Order; return action; } @@ -177,11 +180,11 @@ action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NotSelectItem"); return action; } - if (prepDtl.QTY_PREP > GetActReqQty(prepDtl)) + if (prepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(prepDtl)) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("褰撳墠閫夋嫨鐗╂枡琛孾{0}]宸插鏂欐暟閲廩{1}]锛屼互婊¤冻瀹為檯闇�姹傛暟閲廩{2}]锛屾棤闇�缁х画澶囨枡"); - action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.SelectItem.PrepFinish", prepDtl.ITEM_CODE, prepDtl.QTY_PREP, GetActReqQty(prepDtl)); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.SelectItem.PrepFinish", prepDtl.ITEM_CODE, prepDtl.QTY_PREP, CurPREP.BizType.GetActReqQty(prepDtl)); return action; } //鍒犻櫎鐗╂枡姹犱腑涓婁竴娆″垎閰嶇殑鐗╂枡 @@ -215,7 +218,7 @@ if (Suggests.Count > 0) { var inv = Suggests.First(); - var actQty = CurPrepDtl.QTY_PREP > GetActReqQty(CurPrepDtl) ? 0 : (GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); + var actQty = CurPrepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(CurPrepDtl) ? 0 : (CurPREP.BizType.GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); if (inv != null && actQty > 0) { inv.poolItem = inv.Item.GetPoolItem(OrgCode, nameof(CurPREP.Order), CurPrepDtl.ORDER_NO, CurPrepDtl.ORDER_LINE, actQty, true); @@ -232,7 +235,7 @@ if (CurPREP.Order.CurBatch.DLVY_MODE == BIZ_WMS_PREP_BTH.DLVY_MODEs.Supply.GetValue()) { //鎺ㄨ崘鐗╂枡 - var actQty = CurPrepDtl.QTY_PREP > GetActReqQty(CurPrepDtl) ? 0 : (GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); + var actQty = CurPrepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(CurPrepDtl) ? 0 : (CurPREP.BizType.GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, null, inputDtl.WH_ID, inputDtl.REGION_ID, inputDtl.SHELF_ID, input.AuthOption, actQty); action.LocaleMsg = result.LocaleMsg; if (result.IsException) @@ -475,7 +478,7 @@ //鍒ゆ柇鏄惁瓒呭彂 isExceed = false; //璁$畻鍓╀綑闇�姹傛暟閲忓拰鏉$爜涓殑鍙戝嚭鏁伴噺 - var actQty = CurPrepDtl.QTY_PREP > GetActReqQty(CurPrepDtl) ? 0 : (GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); + var actQty = CurPrepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(CurPrepDtl) ? 0 : (CurPREP.BizType.GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); if (actQty < CurInvItem.CurPkg.QTY) { isExceed = true; @@ -496,7 +499,7 @@ { //action.LocaleMsg = Biz.L($"鏉$爜[{0}]鎵弿鎴愬姛锛屽鏂欑墿鏂橻{1}]闇�姹俒{2}]杩橀渶澶囨枡[{3}]锛屾潯鐮侀渶瑕佹埅鏂欙紝鍙戝嚭鏁伴噺[{4}]"); //action.LocaleMsg = Biz.L($"鏉$爜[{0}]鎵弿鎴愬姛锛屽鏂欑墿鏂橻{1}]闇�姹俒{2}]杩橀渶澶囨枡[{3}]锛岃閫夋嫨瑕佽秴鍙戣繕鏄埅鏂欙紵"); - action.LocaleMsg = Biz.L($"WMS.Out_BIZ_WMS_PREP.ScanItem.Success{(isNeedCut ? "" : "Confirm")}", CurInvItem.SN, CurInvItem.ItemInfo.ITEM_CODE, GetActReqQty(CurPrepDtl), actQty); + action.LocaleMsg = Biz.L($"WMS.Out_BIZ_WMS_PREP.ScanItem.Success{(isNeedCut ? "" : "Confirm")}", CurInvItem.SN, CurInvItem.ItemInfo.ITEM_CODE, CurPREP.BizType.GetActReqQty(CurPrepDtl), actQty); action.Data.Command = "ConfirmExceed"; action.Data.Data = new { @@ -531,11 +534,11 @@ var sns = (input.Data ?? "").JsonToObject<List<BIZ_WMS_PREP_SN>>() ?? new List<BIZ_WMS_PREP_SN>(); if (!sns.Any()) { - var actQty = CurPrepDtl.QTY_PREP > GetActReqQty(CurPrepDtl) ? 0 : (GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); + var actQty = CurPrepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(CurPrepDtl) ? 0 : (CurPREP.BizType.GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); action.IsSuccessed = false; //action.LocaleMsg = Biz.L($"鏉$爜[{0}]鎵弿鎴愬姛锛屽鏂欑墿鏂橻{1}]闇�姹俒{2}]杩橀渶澶囨枡[{3}]锛屾潯鐮侀渶瑕佹埅鏂欙紝鍙戝嚭鏁伴噺[{4}]"); //action.LocaleMsg = Biz.L($"鏉$爜[{0}]鎵弿鎴愬姛锛屽鏂欑墿鏂橻{1}]闇�姹俒{2}]杩橀渶澶囨枡[{3}]锛岃閫夋嫨瑕佽秴鍙戣繕鏄埅鏂欙紵"); - action.LocaleMsg = Biz.L($"WMS.Out_BIZ_WMS_PREP.ScanItem.Success{(isNeedCut ? "" : "Confirm")}", CurInvItem.SN, CurInvItem.ItemInfo.ITEM_CODE, GetActReqQty(CurPrepDtl), actQty); + action.LocaleMsg = Biz.L($"WMS.Out_BIZ_WMS_PREP.ScanItem.Success{(isNeedCut ? "" : "Confirm")}", CurInvItem.SN, CurInvItem.ItemInfo.ITEM_CODE, CurPREP.BizType.GetActReqQty(CurPrepDtl), actQty); action.Data.Command = "ConfirmExceed"; action.Data.Data = new { @@ -600,7 +603,7 @@ CurPrepDtl.QTY_PREP += CurSn.Sum(q => q.QTY_DLVY); CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Picking.GetValue(); CurPREP.Order.CurBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Picking.GetValue(); - CurPREP.Order.CurBatch.PICK_TIME = DateTime.Now; + CurPREP.Order.CurBatch.PICK_TIME = CurPREP.Order.CurBatch.PICK_TIME < new DateTime(2000, 1, 1) ? DateTime.Now : CurPREP.Order.CurBatch.PICK_TIME; //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� var _CurSn = CurSn.Clone(); @@ -637,16 +640,6 @@ action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanItem.ScanException", input.SN)); } return SetOutPutMqttMsg(action, input.Locale); - } - - /// <summary> - /// 瀹為檯闇�姹傛暟閲忚绠楁柟娉� - /// </summary> - /// <param name="dtl"></param> - /// <returns></returns> - private double GetActReqQty(BIZ_WMS_PREP_DTL dtl) - { - return dtl.QTY_REQ; } /// <summary> @@ -777,6 +770,17 @@ return SetOutPutMqttMsg(action, locale); } + /// <summary> + /// 璋冪敤鍙戞枡鍗曟嵁鐨凟RP鎺ュ彛 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<ApiAction> CommitToERP(BaseInput input) + { + var action = await CurPREP.Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>() .CommitToERP(this, input); + return action; + } + #endregion /// <summary> diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs index 9a754ea..3c7434d 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs @@ -62,7 +62,7 @@ public string FieldName { get; set; } */ [SugarColumn(IsIgnore = true)] - public BIZ_WMS_PREP_BTH CurBatch => Batchs?.OrderBy(q => q.CALL_TIME).FirstOrDefault(q => q.STATUS < STATUSs.Close.GetValue()); + public BIZ_WMS_PREP_BTH CurBatch => Batchs?.OrderBy(q => q.CALL_TIME).FirstOrDefault(q => q.STATUS < STATUSs.Sended.GetValue()); #endregion #region 澶栭敭灞炴�� -- Gitblit v1.9.3