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.Business.WMS/Extensions/Yada/OutExtension.cs | 257 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 233 insertions(+), 24 deletions(-) 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 -- Gitblit v1.9.3