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\PushSaleBillPlugIn.cs" />
<Compile Include="Sal_Order\PushSaleOutBillPlugIn.cs" />
<Compile Include="Sal_Order\SalDeliveryNoticeAudit.cs" />
<Compile Include="Sal_Order\SupplierClass.cs" />
<Compile Include="Sal_Order\YJAuditPlugIn.cs" />
<Compile Include="SQL\SqlManage_yuyubo.cs" />

View File

@ -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<IMetaDataService>().Load(this.Context, target, orderSheet["id"].ToString(),true) as FormMetadata;
FormMetadata destFormMetadata = ServiceHelper.GetService<IMetaDataService>().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"];
}

View File

@ -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("跨组织下推订单完成");

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