From 0a5b4f6b839d26de95024ea7be2d00a69bbc3d5f Mon Sep 17 00:00:00 2001 From: yuyubo <1870149533@qq.com> Date: Wed, 14 May 2025 12:29:38 +0800 Subject: [PATCH] 666 --- Pilot_KD_Parino/Pilot_KD_Parino.csproj | 1 + .../Sal_Order/PushSaleBillPlugIn.cs | 50 +++-- .../Sal_Order/PushSaleOutBillPlugIn.cs | 23 +- .../Sal_Order/SalDeliveryNoticeAudit.cs | 209 ++++++++++++++++++ 4 files changed, 249 insertions(+), 34 deletions(-) create mode 100644 Pilot_KD_Parino/Sal_Order/SalDeliveryNoticeAudit.cs diff --git a/Pilot_KD_Parino/Pilot_KD_Parino.csproj b/Pilot_KD_Parino/Pilot_KD_Parino.csproj index 9026a19..a2cc577 100644 --- a/Pilot_KD_Parino/Pilot_KD_Parino.csproj +++ b/Pilot_KD_Parino/Pilot_KD_Parino.csproj @@ -336,6 +336,7 @@ + diff --git a/Pilot_KD_Parino/Sal_Order/PushSaleBillPlugIn.cs b/Pilot_KD_Parino/Sal_Order/PushSaleBillPlugIn.cs index 3775b11..97b8e24 100644 --- a/Pilot_KD_Parino/Sal_Order/PushSaleBillPlugIn.cs +++ b/Pilot_KD_Parino/Sal_Order/PushSaleBillPlugIn.cs @@ -91,7 +91,7 @@ namespace Pilot_KD_Parino.Sal_Order { this.View.ShowMessage("没有上查关联的销售订单"); } - var entryIdList = dt.Select(t => t["FENTRYID"]).ToList() ; + var entryIdList = dt.Select(t => t["FENTRYID"]).ToList(); int tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString()); string tablename = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString(); @@ -106,7 +106,7 @@ namespace Pilot_KD_Parino.Sal_Order this.View.ShowMessage("没有下查关联的跨组织销售订单"); } - var FENTRYIDList = dt.Select(t =>int.Parse( t["FENTRYID"].ToString())).ToList(); + var FENTRYIDList = dt.Select(t => int.Parse(t["FENTRYID"].ToString())).ToList(); string ids = string.Join(",", FENTRYIDList); getSourceSql = $@"/*dialect*/ SELECT* FROM T_SAL_ORDERENTRY WHERE FENTRYID IN({ids})"; //IOperationResult result = Invoke("SAL_SaleOrder", "PUR_PurchaseOrder", id.ToString(), "83d822ca3e374b4ab01e5dd46a0062bd", ref stockId, FEntity, null); @@ -162,10 +162,10 @@ namespace Pilot_KD_Parino.Sal_Order PushArgs pushArgs = new PushArgs(ruleElement, rows.ToArray()); if (target == "SAL_SaleOrder") - pushArgs.TargetOrgId =long.Parse( FEntity2["F_SaleOrgId_Id"].ToString()); + pushArgs.TargetOrgId = long.Parse(FEntity2["F_SaleOrgId_Id"].ToString()); //OperateOption pushOption = OperateOption.Create(); //pushOption.SetVariableValue(ConvertConst., false); - + pushArgs.TargetBillTypeId = sargetBillTypeId;//单据类型 @@ -200,7 +200,7 @@ namespace Pilot_KD_Parino.Sal_Order WHERE FUseOrgId={SaleOrgId_Id} AND FNAME LIKE '%{beiHuoName3}%' "; var supplierList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqltemp1, null, null, CommandType.Text, null); if (supplierList != null && supplierList.Count > 0) - { + { DynamicObject supplierObj = null;//.Select(t => t["FSUPPLIERID"].ToString()) if (beiHuoName3 == "珠海兴诺") @@ -263,8 +263,8 @@ namespace Pilot_KD_Parino.Sal_Order } }); - - + + } //this.View.ShowMessage($@"{beiHuoName3}备货组织跨组织下推订单完成"); @@ -297,14 +297,14 @@ namespace Pilot_KD_Parino.Sal_Order var beiHuoName2 = beiHuoName1["MultiLanguageText"] as DynamicObjectCollection; if (beiHuoName2 != null && beiHuoName2.Count() > 0) { - var beiHuoName3 = beiHuoName2[0]["Name"].ToString(); - + var beiHuoName3 = beiHuoName2[0]["Name"].ToString(); + //未知原因导致自动保存失败原因:字段“销售员”是必填项; 字段“结算币别”是必填项; orderSheet["F_SFHW"] = "2"; //this.View.ShowMessage("更新了1"); - + string sqltemp1 = $@"/*dialect*/ SELECT FUseOrgId,a.FNUMBER,b.FNAME,a.FCUSTID FROM T_BD_CUSTOMER a LEFT JOIN T_BD_CUSTOMER_L b ON a.FCUSTID=b.FCUSTID WHERE FUseOrgId={SupplierId_Id} AND FNAME LIKE '%{beiHuoName3}%' "; @@ -335,16 +335,16 @@ namespace Pilot_KD_Parino.Sal_Order orderSheet["CustId_Id"] = SupplierId_Id; number = supplierObj["FNUMBER"].ToString(); name = supplierObj["FNAME"].ToString(); - } - + } + orderSheet["F_PaymentMethod"] = "款到发货"; } - - } - - - + } + + + + } if (target == "PUR_ReceiveBill")//收料通知单,强制没有配置仓库的物料进成品仓库 @@ -432,7 +432,7 @@ namespace Pilot_KD_Parino.Sal_Order ////目标单元数据 - FormMetadata destFormMetadata = ServiceHelper.GetService().Load(this.Context, target, orderSheet["id"].ToString(),true) as FormMetadata; + FormMetadata destFormMetadata = ServiceHelper.GetService().Load(this.Context, target, orderSheet["id"].ToString(), true) as FormMetadata; sdsas = JsonHelper.ToJson(destObjs); //Logger.Error("目标单据数据集合3", sdsas, new Exception()); @@ -445,10 +445,10 @@ namespace Pilot_KD_Parino.Sal_Order if (target == "SAL_SaleOrder") { - + //var ddsdsdsds= BusinessDataServiceHelper.LoadSingle(this.Context, SupplierId_Id, (destFormMetadata.BusinessInfo.GetField("FCustId") as BaseDataField).RefFormDynamicObjectType); //destObjs[0]["SaleOrgId"] = BusinessDataServiceHelper.LoadSingle(this.Context, FEntity2["SaleOrgId_Id"].ToString(), (destFormMetadata.BusinessInfo.GetField("FSaleOrgId") as BaseDataField).RefFormDynamicObjectType); - //客户资料 + //客户资料 destObjs[0]["CustId"] = BusinessDataServiceHelper.LoadSingle(this.Context, SupplierId_Id, (destFormMetadata.BusinessInfo.GetField("FCustId") as BaseDataField).RefFormDynamicObjectType); //销售员 orderSheet["SalerId"] = FEntity2["SalerId"]; @@ -503,6 +503,8 @@ namespace Pilot_KD_Parino.Sal_Order t["Amount_LC"] = tempOne1["Amount_LC"]; t["TaxAmount_LC"] = tempOne1["TaxAmount_LC"]; t["RemainOutQty"] = t["Qty"]; + t["StockOrgId_Id"] = orderSheet["SaleOrgId_Id"]; + t["StockOrgId"] = BusinessDataServiceHelper.LoadSingle(this.Context, orderSheet["SaleOrgId_Id"], (destFormMetadata.BusinessInfo.GetField("FStockOrgId") as BaseDataField).RefFormDynamicObjectType); kk++; }); var SaleOrderFinanceList = (orderSheet["SaleOrderFinance"] as DynamicObjectCollection).ToList(); @@ -512,15 +514,15 @@ namespace Pilot_KD_Parino.Sal_Order { //t = SaleOrderFinanceList2[kk].Clone() as DynamicObject; kk++; - var tempOne1 = SaleOrderFinanceList2.FirstOrDefault(); + var tempOne1 = SaleOrderFinanceList2.FirstOrDefault(); t["ExchangeTypeId_Id"] = tempOne1["ExchangeTypeId_Id"]; t["ExchangeTypeId"] = tempOne1["ExchangeTypeId"]; t["SettleCurrId_Id"] = tempOne1["SettleCurrId_Id"]; t["SettleCurrId"] = tempOne1["SettleCurrId"]; - t["BillAllAmount"]= tempOne1["BillAllAmount"]; + t["BillAllAmount"] = tempOne1["BillAllAmount"]; t["BillAllAmount_LC"] = tempOne1["BillAllAmount_LC"]; - - + + }); orderSheet["F_Amountstar"] = FEntity2["F_Amountstar"]; } diff --git a/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs b/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs index 70d02b7..b4c3bf0 100644 --- a/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs +++ b/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs @@ -1,31 +1,25 @@ -using DevExpress.Xpo.DB.Helpers; -using FarPoint.Excel; -using Kingdee.BOS; +using Kingdee.BOS; using Kingdee.BOS.App; -using Kingdee.BOS.App.Data; using Kingdee.BOS.Contracts; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.Operation; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.List; -using Kingdee.BOS.Core.List.PlugIn; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.ConvertElement; using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; -using Kingdee.BOS.Core.Metadata.FormElement; using Kingdee.BOS.Log; using Kingdee.BOS.Orm; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; -using Newtonsoft.Json.Linq; using Pilot_KD_Parino.Common; using System; -using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; + namespace Pilot_KD_Parino.Sal_Order { [Description("下推生成销售出库单及联动生成其他单的插件"), HotUpdate] @@ -169,7 +163,15 @@ namespace Pilot_KD_Parino.Sal_Order } if (xiaoFid > 0) tempFid = xiaoFid; - //找到最开始的销售发货通知单 + getSourceSql = $@"/*dialect*/ SELECT FSALEORGID FROM T_SAL_ORDER WHERE fid ={tempFid}"; + dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + string saleorgid = ""; + if (dt != null && dt.Count > 0) + { + saleorgid =dt.FirstOrDefault()["FSALEORGID"].ToString(); + } + //如果源头销售订单是珠海派诺或者珠海兴诺的销售订单,只推送到采购入库就行了。 找到最开始的销售发货通知单 + if(saleorgid!="100302" && saleorgid != "100303") { getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID,FENTRYID FROM dbo.T_SAL_DELIVERYNOTICEENTRY_LK WHERE FSBILLID= {tempFid}"; @@ -198,10 +200,11 @@ namespace Pilot_KD_Parino.Sal_Order } } + result = Invoke("SAL_DELIVERYNOTICE", "SAL_OUTSTOCK", tempFid.ToString(), "ad0779a4685a43a08f08d2e42d7bf3e9", ref stockId); } //result = Invoke("SAL_SaleOrder", "SAL_DELIVERYNOTICE", tempFid.ToString(), "193822715afc48aa9fa6d6beca7700ab", ref stockId); //sheet = result.SuccessDataEnity.FirstOrDefault(); - result = Invoke("SAL_DELIVERYNOTICE", "SAL_OUTSTOCK", tempFid.ToString(), "ad0779a4685a43a08f08d2e42d7bf3e9", ref stockId); + this.View.ShowMessage("跨组织下推订单完成"); diff --git a/Pilot_KD_Parino/Sal_Order/SalDeliveryNoticeAudit.cs b/Pilot_KD_Parino/Sal_Order/SalDeliveryNoticeAudit.cs new file mode 100644 index 0000000..6b6e9e6 --- /dev/null +++ b/Pilot_KD_Parino/Sal_Order/SalDeliveryNoticeAudit.cs @@ -0,0 +1,209 @@ +using Kingdee.BOS; +using Kingdee.BOS.App; +using Kingdee.BOS.Contracts; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.Operation; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.List; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.ConvertElement; +using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; +using Kingdee.BOS.Log; +using Kingdee.BOS.Orm; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using System; +using System.ComponentModel; +using System.Data; +using System.Linq; + +namespace Pilot_KD_Parino.Sal_Order +{ + [Description("A组织的发货通知单自动推B组织的发货通知单服务插件"), HotUpdate] + public class SalDeliveryNoticeAudit : AbstractOperationServicePlugIn + { + public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) + { + //throw new KDBusinessException("", "至少进来了"); + base.AfterExecuteOperationTransaction(e); + foreach (var rows in e.SelectedRows) + { + var Billobj = rows.DataEntity; + string id = Convert.ToString(Billobj["Id"]); + //发货通知单找到源头销售订单 + string getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID FROM T_SAL_DELIVERYNOTICEENTRY_LK + WHERE FENTRYID IN ( SELECT FENTRYID FROM dbo.T_SAL_DELIVERYNOTICEENTRY WHERE FID = {id})"; + var dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + if (dt == null || dt.Count == 0) + { + //throw new KDBusinessException("", "没有找到源头销售订单:" ); + return; + } + int tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString()); + string tablename = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString(); + + //销售订单找到跨组织的销售订单 + getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID,FENTRYID FROM T_SAL_ORDERENTRY_LK + WHERE FSBILLID = {tempFid} and FSTABLENAME='T_SAL_ORDERENTRY' "; + dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + //throw new KDBusinessException("", "1:" + getSourceSql); + string fentryid = ""; + if (dt == null || dt.Count == 0) + { + //如果不是小公司的订单,是珠海派诺--珠海兴诺的订单,则按 销售订单--采购申请单--采购订单--兴诺的销售订单 逻辑找订单 + //采购申请单 + getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID,FENTRYID FROM T_PUR_ReqEntry_LK + WHERE FSBILLID = {tempFid} and FSTABLENAME='T_SAL_ORDERENTRY' "; + dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + if (dt == null || dt.Count == 0) + { + throw new KDBusinessException("", "没有找到跨组织的采购申请单:" + getSourceSql); + return; + } + else + { + //采购订单 + tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString()); + tablename = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString(); + fentryid = dt.Select(t => t["FENTRYID"]).FirstOrDefault().ToString(); + getSourceSql = $@"/*dialect*/ SELECT FID FROM T_PUR_ReqEntry WHERE FENTRYID ={fentryid}"; + dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + tempFid = int.Parse(dt.FirstOrDefault()["FID"].ToString()); + + getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID,FENTRYID FROM t_PUR_POOrderEntry_LK + WHERE FSBILLID = {tempFid} and FSTABLENAME='T_PUR_ReqEntry' "; + dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + if (dt == null || dt.Count == 0) + { + throw new KDBusinessException("", "没有找到跨组织的采购订单:" + getSourceSql); + return; + } + else + { + //兴诺的销售订单 + tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString()); + tablename = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString(); + fentryid = dt.Select(t => t["FENTRYID"]).FirstOrDefault().ToString(); + getSourceSql = $@"/*dialect*/ SELECT FID FROM t_PUR_POOrderEntry WHERE FENTRYID ={fentryid}"; + dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + tempFid = int.Parse(dt.FirstOrDefault()["FID"].ToString()); + getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID,FENTRYID FROM T_SAL_ORDERENTRY_LK + WHERE FSBILLID = {tempFid} and FSTABLENAME='t_PUR_POOrderEntry' "; + dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + if (dt == null || dt.Count == 0) + { + throw new KDBusinessException("", "没有找到跨组织的销售订单:" + getSourceSql); + return; + } + } + } + //throw new KDBusinessException("", "没有找到跨组织的销售订单:"+ getSourceSql); + + } + tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString()); + tablename = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString(); + fentryid = dt.Select(t => t["FENTRYID"]).FirstOrDefault().ToString(); + //找到跨组织的销售订单主键ID + getSourceSql = $@"/*dialect*/ SELECT FID FROM T_SAL_ORDERENTRY WHERE FENTRYID ={fentryid}"; + dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + //throw new KDBusinessException("", "2:" + getSourceSql); + if (dt == null || dt.Count == 0) + { + //throw new KDBusinessException("", "没有找到跨组织的销售订单明细"); + return; + } + else + { + tempFid = int.Parse(dt.FirstOrDefault()["FID"].ToString()); + int stockId = 0; + var result = Invoke("SAL_SaleOrder", "SAL_DELIVERYNOTICE", tempFid.ToString(), "193822715afc48aa9fa6d6beca7700ab", ref stockId); + } + //throw new KDBusinessException("", "3:" + getSourceSql); + + } + } + + private IOperationResult Invoke(string source, string target, string tempFid, string sargetBillTypeId, ref int stockId) + { + try + { + IOperationResult result = new OperationResult(); + //获取单据转换规则 + ConvertRuleElement ruleElement = ServiceHelper.GetService().GetConvertRules(this.Context, source, target).FirstOrDefault(); + + //如下代码 直接通过查询数据库获取单据转换源单数据 + ListSelectedRowCollection rows = new ListSelectedRowCollection(); + int i = 0; + ListSelectedRow row = new ListSelectedRow(tempFid, string.Empty, i++, source); + rows.Add(row); + + PushArgs pushArgs = new PushArgs(ruleElement, rows.ToArray()); + pushArgs.TargetBillTypeId = sargetBillTypeId;//单据类型 + //转换生成目标单 + ConvertOperationResult convertResult = ServiceHelper.GetService().Push(this.Context, pushArgs); + + ////合并转换操作结果 + //result.MergeResult(convertResult); + + ////目标单据数据集合 + DynamicObject[] destObjs = convertResult.TargetDataEntities.Select(r => r.DataEntity).ToArray(); + + //var sdsas = JsonHelper.ToJson(destObjs); + //Logger.Error("目标单据数据集合", sdsas, new Exception()); + + ////目标单元数据 + FormMetadata destFormMetadata = ServiceHelper.GetService().Load(this.Context, target) as FormMetadata; + + ////保存目标单据 + IOperationResult saveResult = ServiceHelper.GetService().Save(this.Context, destFormMetadata.BusinessInfo, destObjs, OperateOption.Create()); + ////合并保存操作结果 + //result.MergeResult(saveResult); + //根据操作结果构造返回结果 + if ((saveResult.ValidationErrors != null && saveResult.ValidationErrors.Count > 0)) + //|| (result.OperateResult != null && result.OperateResult.Count > 0)) + { + var errorInfo = string.Join(";", saveResult.ValidationErrors.Select(x => x.Message)); + //this.View.ShowErrMessage("调用下推, 导致自动保存失败 原因:" + errorInfo); + + //result.IsSuccess = false; + //this.View.ShowErrMessage("调用下推, 导致自动保存失败 原因:" + saveResult.ValidationErrors[0].Message.ToString()); + throw new KDBusinessException("", "未知原因导致自动保存失败原因:" + errorInfo); + } + result = saveResult; + //this.View.ShowMessage("1"); + // 取到需要自动提交、审核的单据内码 + object[] pkArray = (from p in destObjs select p[0]).ToArray(); + //设置提交参数 + IOperationResult submitResult = ServiceHelper.GetService().Submit(this.Context, destFormMetadata.BusinessInfo, pkArray, "Submit", OperateOption.Create()); + + // 判断提交结果,如果失败,则内部会抛出错误,回滚代码 + if (submitResult.IsSuccess == false) + { + throw new KDBusinessException("", "未知原因导致自动提交失败!"); + } + //设置审核参数 + IOperationResult auditResult = ServiceHelper.GetService().Audit(this.Context, destFormMetadata.BusinessInfo, pkArray, OperateOption.Create()); + // 判断提交结果,如果失败,则内部会抛出错误,回滚代码 + if (auditResult.IsSuccess == false) + { + throw new KDBusinessException("", "未知原因导致自动审核失败!"); + } + //显示下推后的单据 + //ShowPushResult("k0f9e182dbc5247fcabc9479ddb300fa3", convertResult, destObjs); + return result; + } + catch (Exception ex) + { + Logger.Error("跨组织下推订单报错", "跨组织下推订单报错 error:" + ex.Message + ex.StackTrace, ex); + throw ex; + } + + } + + + } + + +}