This commit is contained in:
余宇波 2025-05-14 12:29:38 +08:00
parent da0a7fb3dc
commit 0a5b4f6b83
4 changed files with 249 additions and 34 deletions

View File

@ -336,6 +336,7 @@
<Compile Include="Sal_Order\Bill.cs" /> <Compile Include="Sal_Order\Bill.cs" />
<Compile Include="Sal_Order\PushSaleBillPlugIn.cs" /> <Compile Include="Sal_Order\PushSaleBillPlugIn.cs" />
<Compile Include="Sal_Order\PushSaleOutBillPlugIn.cs" /> <Compile Include="Sal_Order\PushSaleOutBillPlugIn.cs" />
<Compile Include="Sal_Order\SalDeliveryNoticeAudit.cs" />
<Compile Include="Sal_Order\SupplierClass.cs" /> <Compile Include="Sal_Order\SupplierClass.cs" />
<Compile Include="Sal_Order\YJAuditPlugIn.cs" /> <Compile Include="Sal_Order\YJAuditPlugIn.cs" />
<Compile Include="SQL\SqlManage_yuyubo.cs" /> <Compile Include="SQL\SqlManage_yuyubo.cs" />

View File

@ -503,6 +503,8 @@ namespace Pilot_KD_Parino.Sal_Order
t["Amount_LC"] = tempOne1["Amount_LC"]; t["Amount_LC"] = tempOne1["Amount_LC"];
t["TaxAmount_LC"] = tempOne1["TaxAmount_LC"]; t["TaxAmount_LC"] = tempOne1["TaxAmount_LC"];
t["RemainOutQty"] = t["Qty"]; 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++; kk++;
}); });
var SaleOrderFinanceList = (orderSheet["SaleOrderFinance"] as DynamicObjectCollection).ToList(); var SaleOrderFinanceList = (orderSheet["SaleOrderFinance"] as DynamicObjectCollection).ToList();

View File

@ -1,31 +1,25 @@
using DevExpress.Xpo.DB.Helpers; using Kingdee.BOS;
using FarPoint.Excel;
using Kingdee.BOS;
using Kingdee.BOS.App; using Kingdee.BOS.App;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts; using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.Operation; using Kingdee.BOS.Core.DynamicForm.Operation;
using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List; using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.ConvertElement; using Kingdee.BOS.Core.Metadata.ConvertElement;
using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs;
using Kingdee.BOS.Core.Metadata.FormElement;
using Kingdee.BOS.Log; using Kingdee.BOS.Log;
using Kingdee.BOS.Orm; using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util; using Kingdee.BOS.Util;
using Newtonsoft.Json.Linq;
using Pilot_KD_Parino.Common; using Pilot_KD_Parino.Common;
using System; using System;
using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
namespace Pilot_KD_Parino.Sal_Order namespace Pilot_KD_Parino.Sal_Order
{ {
[Description("下推生成销售出库单及联动生成其他单的插件"), HotUpdate] [Description("下推生成销售出库单及联动生成其他单的插件"), HotUpdate]
@ -169,7 +163,15 @@ namespace Pilot_KD_Parino.Sal_Order
} }
if (xiaoFid > 0) if (xiaoFid > 0)
tempFid = xiaoFid; 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 getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID,FENTRYID FROM dbo.T_SAL_DELIVERYNOTICEENTRY_LK
WHERE FSBILLID= {tempFid}"; 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); //result = Invoke("SAL_SaleOrder", "SAL_DELIVERYNOTICE", tempFid.ToString(), "193822715afc48aa9fa6d6beca7700ab", ref stockId);
//sheet = result.SuccessDataEnity.FirstOrDefault(); //sheet = result.SuccessDataEnity.FirstOrDefault();
result = Invoke("SAL_DELIVERYNOTICE", "SAL_OUTSTOCK", tempFid.ToString(), "ad0779a4685a43a08f08d2e42d7bf3e9", ref stockId);
this.View.ShowMessage("跨组织下推订单完成"); this.View.ShowMessage("跨组织下推订单完成");

View File

@ -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<IConvertService>().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<IConvertService>().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<IMetaDataService>().Load(this.Context, target) as FormMetadata;
////保存目标单据
IOperationResult saveResult = ServiceHelper.GetService<ISaveService>().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<ISubmitService>().Submit(this.Context, destFormMetadata.BusinessInfo, pkArray, "Submit", OperateOption.Create());
// 判断提交结果,如果失败,则内部会抛出错误,回滚代码
if (submitResult.IsSuccess == false)
{
throw new KDBusinessException("", "未知原因导致自动提交失败!");
}
//设置审核参数
IOperationResult auditResult = ServiceHelper.GetService<IAuditService>().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;
}
}
}
}