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;
+ }
+
+ }
+
+
+ }
+
+
+}