This commit is contained in:
余宇波 2025-08-02 21:35:23 +08:00
parent e9d287c7d6
commit 9d14431ca4
2 changed files with 187 additions and 38 deletions

View File

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

View File

@ -25,6 +25,7 @@ using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Threading;
using Org.BouncyCastle.Asn1.X509;
namespace Pilot_KD_Parino.Sal_Order
{
@ -35,6 +36,7 @@ namespace Pilot_KD_Parino.Sal_Order
string sScrBillNo = "";
string fid = "0";
DynamicObject BillObj = null;
int nextOrderId = 0;
public override void AfterBarItemClick(AfterBarItemClickEventArgs e)
{
@ -58,7 +60,7 @@ namespace Pilot_KD_Parino.Sal_Order
//var detailList = (FEntity["SAL_DELIVERYNOTICEENTRY"]);
//发货通知单或者发货出库单
string getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID FROM dbo.T_{formid}ENTRY_LK
string getSourceSql = $@"/*dialect*/SELECT DISTINCT FSTABLENAME,FSBILLID FROM dbo.T_{formid}ENTRY_LK
WHERE FENTRYID IN ( SELECT FENTRYID FROM dbo.T_{formid}ENTRY WHERE FID = {id})";
var dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql);
if (dt == null || dt.Count == 0)
@ -74,8 +76,9 @@ namespace Pilot_KD_Parino.Sal_Order
////发货通知单
tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString());
string tempTable = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString();
getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID FROM dbo.{tempTable}_lk
getSourceSql = $@"/*dialect*/SELECT DISTINCT FSTABLENAME,FSBILLID FROM dbo.{tempTable}_lk
WHERE FENTRYID IN ( SELECT FENTRYID FROM {tempTable} WHERE FID = {tempFid})";
//dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql);
//if (dt == null || dt.Count == 0)
//{
@ -96,7 +99,7 @@ namespace Pilot_KD_Parino.Sal_Order
}
else if ( dt.Count > 1 )
{
throw new KDBusinessException("", "张销售单下推多张采购订单,不能用自动跨组织推单功能:" + tablename);
throw new KDBusinessException("", "张销售单下推多张采购订单,不能用自动跨组织推单功能:" + getSourceSql);
}
else
@ -115,9 +118,9 @@ namespace Pilot_KD_Parino.Sal_Order
{
throw new KDBusinessException("", "没有上查关联的跨组织的采购订单:" + tablename);
}
else if (dt.Count > 1)
else if (dt.Select(t => t["FSBILLID"].ToString()).Distinct().Count() > 1)
{
throw new KDBusinessException("", "张销售单下推多张采购订单,不能用自动跨组织推单功能:" + tablename);
throw new KDBusinessException("", "张销售单下推多张采购订单,不能用自动跨组织推单功能:" + getSourceSql);
}
else
@ -156,11 +159,35 @@ namespace Pilot_KD_Parino.Sal_Order
dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql);
if (dt != null || dt.Count > 0)
{
tuiName += "收料通知单 ";
result = Invoke("PUR_PurchaseOrder", "PUR_ReceiveBill", tempFid.ToString(), "7cd93c259999489c97798063f2f7bd70", ref stockId,"收料通知单");
//tuiName += "收料通知单 ";
//result = Invoke("PUR_PurchaseOrder", "PUR_ReceiveBill", tempFid.ToString(), "7cd93c259999489c97798063f2f7bd70", ref stockId, "收料通知单");
nextOrderId = IfNeedPush("PUR_ReceiveBill", fid);
if (nextOrderId == 0)
{
tuiName += "收料通知单 ";
result = Invoke("PUR_PurchaseOrder", "PUR_ReceiveBill", tempFid.ToString(), "7cd93c259999489c97798063f2f7bd70", ref stockId, "收料通知单");
}
else
{
result = null;
}
}
}
else
{
nextOrderId = IfNeedPush("PUR_ReceiveBill", fid);
if (nextOrderId == 0)
{
tuiName += "收料通知单 ";
result = Invoke("PUR_PurchaseOrder", "PUR_ReceiveBill", tempFid.ToString(), "7cd93c259999489c97798063f2f7bd70", ref stockId, "收料通知单");
}
else
{
result = null;
}
}
if (result != null)
{
sheet = result.SuccessDataEnity.FirstOrDefault();
@ -169,18 +196,34 @@ namespace Pilot_KD_Parino.Sal_Order
if (sheet != null)
{
tuiName += "采购入库单 ";
result = Invoke("PUR_ReceiveBill", "STK_InStock", sheet["id"].ToString(), "a1ff32276cd9469dad3bf2494366fa4f", ref stockId,"采购入库单");
result = Invoke("PUR_ReceiveBill", "STK_InStock", sheet["id"].ToString(), "a1ff32276cd9469dad3bf2494366fa4f", ref stockId, "采购入库单");
//sheet = result.SuccessDataEnity.FirstOrDefault();
//result = Invoke("PUR_ReceiveBill", "STK_InStock", sheet["id"].ToString(), "a1ff32276cd9469dad3bf2494366fa4f");
}
}
else
{
if (nextOrderId > 0)
{
nextOrderId = IfNeedPush("STK_InStock", fid);
if (nextOrderId == 0)
{
tuiName += "采购入库单 ";
result = Invoke("PUR_ReceiveBill", "STK_InStock", nextOrderId.ToString(), "a1ff32276cd9469dad3bf2494366fa4f", ref stockId, "采购入库单");
}
else
{
result = null;
}
}
}
//找到最开始的销售订单
for (int kk = 0; kk < 6 && tablename.ToUpper() != "T_SAL_ORDERENTRY" && xiaoFid == 0; kk++)
{
////发货通知单
tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString());
string tempTable = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString();
getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID FROM dbo.{tempTable}_lk
getSourceSql = $@"/*dialect*/SELECT DISTINCT FSTABLENAME,FSBILLID FROM dbo.{tempTable}_lk
WHERE FENTRYID IN ( SELECT FENTRYID FROM {tempTable} WHERE FID = {tempFid})";
dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql);
@ -215,42 +258,58 @@ namespace Pilot_KD_Parino.Sal_Order
//if (saleorgid != "100302" && saleorgid != "100303")
//{
getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID,FENTRYID FROM dbo.T_SAL_DELIVERYNOTICEENTRY_LK
getSourceSql = $@"/*dialect*/SELECT DISTINCT FSTABLENAME,FSBILLID,FENTRYID FROM dbo.T_SAL_DELIVERYNOTICEENTRY_LK
WHERE FSBILLID= {tempFid}";
dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql);
if (dt == null || dt.Count == 0)
{
tuiName += "发货通知单 ";
result = Invoke("SAL_SaleOrder", "SAL_DELIVERYNOTICE", tempFid.ToString(), "193822715afc48aa9fa6d6beca7700ab", ref stockId, "发货通知单");
sheet = result.SuccessDataEnity.FirstOrDefault();
tempFid = int.Parse(sheet["id"].ToString());
//throw new KDBusinessException("", "没有上查关联的跨组织的采购订单:" + tablename);
}
else
{
var FENTRYIDList = dt.Select(t => int.Parse(t["FENTRYID"].ToString())).ToList();
string ids = string.Join(",", FENTRYIDList);
getSourceSql = $@"/*dialect*/ SELECT MAX(FID) FID FROM T_SAL_DELIVERYNOTICEENTRY WHERE FENTRYID IN({ids})";
dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql);
if (dt == null || dt.Count == 0)
{
tuiName += "发货通知单 ";
result = Invoke("SAL_SaleOrder", "SAL_DELIVERYNOTICE", tempFid.ToString(), "193822715afc48aa9fa6d6beca7700ab", ref stockId,"发货通知单");
sheet = result.SuccessDataEnity.FirstOrDefault();
tempFid = int.Parse(sheet["id"].ToString());
//throw new KDBusinessException("", "没有上查关联的跨组织的采购订单:" + tablename);
throw new KDBusinessException("", "没有上查关联的跨组织的发货通知单:" + tablename);
}
else
{
var FENTRYIDList = dt.Select(t => int.Parse(t["FENTRYID"].ToString())).ToList();
string ids = string.Join(",", FENTRYIDList);
getSourceSql = $@"/*dialect*/ SELECT FID FROM T_SAL_DELIVERYNOTICEENTRY WHERE FENTRYID IN({ids})";
dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql);
if (dt == null || dt.Count == 0)
{
throw new KDBusinessException("", "没有上查关联的跨组织的发货通知单:" + tablename);
}
else
{
tempFid = int.Parse(dt.FirstOrDefault()["FID"].ToString());
}
tempFid = int.Parse(dt.FirstOrDefault()["FID"].ToString());
}
getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID,FENTRYID FROM dbo.T_SAL_OUTSTOCKENTRY_LK
}
getSourceSql = $@"/*dialect*/SELECT DISTINCT FSTABLENAME,FSBILLID,FENTRYID FROM dbo.T_SAL_OUTSTOCKENTRY_LK
WHERE FSBILLID= {tempFid}";
dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql);
if (dt == null || dt.Count == 0)
{
tuiName += "销售出库单 ";
stockId = 0;
result = Invoke("SAL_DELIVERYNOTICE", "SAL_OUTSTOCK", tempFid.ToString(), "ad0779a4685a43a08f08d2e42d7bf3e9", ref stockId,"销售出库单");
//tuiName += "销售出库单 ";
//stockId = 0;
//result = Invoke("SAL_DELIVERYNOTICE", "SAL_OUTSTOCK", tempFid.ToString(), "ad0779a4685a43a08f08d2e42d7bf3e9", ref stockId, "销售出库单");
nextOrderId = IfNeedPush("SAL_OUTSTOCK", fid);
if (nextOrderId == 0)
{
tuiName += "销售出库单 ";
stockId = 0;
result = Invoke("SAL_DELIVERYNOTICE", "SAL_OUTSTOCK", tempFid.ToString(), "ad0779a4685a43a08f08d2e42d7bf3e9", ref stockId, "销售出库单");
}
else
{
result = null;
}
}
//}
//result = Invoke("SAL_SaleOrder", "SAL_DELIVERYNOTICE", tempFid.ToString(), "193822715afc48aa9fa6d6beca7700ab", ref stockId);
@ -507,7 +566,16 @@ namespace Pilot_KD_Parino.Sal_Order
}
}
/// <summary>
/// 下推目标订单
/// </summary>
/// <param name="source">数据源</param>
/// <param name="target">目标表</param>
/// <param name="tempFid">数据源FID</param>
/// <param name="sargetBillTypeId">目标订单类型</param>
/// <param name="stockId">指定仓库ID0为不指定</param>
/// <param name="name">目标单据描述</param>
/// <returns></returns>
private IOperationResult Invoke(string source, string target, string tempFid, string sargetBillTypeId, ref int stockId,string name="")
{
try
@ -869,8 +937,6 @@ namespace Pilot_KD_Parino.Sal_Order
OperateOption saveOption = OperateOption.Create();
this.SaveBill(billView, saveOption);
}
public IBillView CreateBillView(string FKEY)
{
// 读取商品类型的元数据
@ -887,7 +953,6 @@ namespace Pilot_KD_Parino.Sal_Order
billView.Initialize(openParam, provider);
return billView as IBillView;
}
private BillOpenParameter CreateOpenParameter(FormMetadata meta)
{
Form form = meta.BusinessInfo.GetForm();
@ -965,5 +1030,88 @@ namespace Pilot_KD_Parino.Sal_Order
((IDynamicFormViewService)billView).LoadData();
}
/// <summary>
/// 判断当前订单是否需要下推下一个新订单
/// </summary>
/// <param name="target">目标表</param>
/// <param name="tempFid">数据源FID</param>
/// <returns>返回0则需要推送大于0则是下一个订单的FID</returns>
private int IfNeedPush(string target, string tempFid)
{
int result = 0;
//插入自动生成记录
string Sql = $@"/*dialect*/SELECT TFid FROM [zz_zTuiSongLog]
WHERE FromType='SAL_OUTSTOCK' AND fid={tempFid} AND TargetType='{target}'";
var data= DBServiceHelper.ExecuteDynamicObject(this.Context, Sql, null, null, CommandType.Text, null);
if (data != null && data.Count > 0)
{
var fidList = data.Select(t => t["TFid"]).ToList();
string fid = string.Join(",", fidList);
if (target == "PUR_ReceiveBill")
{
Sql = $@"/*dialect*/SELECT fid,[FDOCUMENTSTATUS],[FBILLNO] FROM dbo.T_PUR_RECEIVE
WHERE fid in ({fid}) ";
data = DBServiceHelper.ExecuteDynamicObject(this.Context, Sql, null, null, CommandType.Text, null);
if (data != null && data.Count > 0)
{
if (data.Count > 1)
throw new KDBusinessException("数据错误","本张销售出库单曾经推送了多张收料通知单,请先删除多余的收料通知单");
if (data[0]["FDOCUMENTSTATUS"].ToString() != "C")
{
throw new KDBusinessException("数据错误", $@"曾经推送的收料通知单{data[0]["FBILLNO"].ToString()}未审核,请先删除或者手动审核后再重新跨组织推送");
}
else
{
result = int.Parse(data[0]["fid"].ToString());
}
}
}
else if (target == "STK_InStock")
{
Sql = $@"/*dialect*/SELECT fid,[FDOCUMENTSTATUS],[FBILLNO] FROM dbo.T_STK_INSTOCK
WHERE fid in ({fid}) ";
data = DBServiceHelper.ExecuteDynamicObject(this.Context, Sql, null, null, CommandType.Text, null);
if (data != null && data.Count > 0)
{
if (data.Count > 1)
throw new KDBusinessException("数据错误", "本张销售出库单曾经推送了多张采购入库单,请先删除多余的采购入库单");
if (data[0]["FDOCUMENTSTATUS"].ToString() != "C")
{
throw new KDBusinessException("数据错误", $@"曾经推送的采购入库单{data[0]["FBILLNO"].ToString()}未审核,请先删除或者手动审核后再重新跨组织推送");
}
else
{
result = int.Parse(data[0]["fid"].ToString());
}
}
}
else if (target == "SAL_OUTSTOCK")
{
Sql = $@"/*dialect*/SELECT fid,[FDOCUMENTSTATUS],[FBILLNO] FROM dbo.T_SAL_OUTSTOCK
WHERE fid in ({fid}) ";
data = DBServiceHelper.ExecuteDynamicObject(this.Context, Sql, null, null, CommandType.Text, null);
if (data != null && data.Count > 0)
{
if (data.Count > 1)
throw new KDBusinessException("数据错误", "本张销售出库单曾经推送了多张跨组织的销售出库单,请先删除多余的跨组织的销售出库单");
if (data[0]["FDOCUMENTSTATUS"].ToString() != "C")
{
throw new KDBusinessException("数据错误", $@"曾经推送的跨组织的销售出库单{data[0]["FBILLNO"].ToString()}未审核,请先删除或者手动审核后再重新跨组织推送");
}
else
{
result = int.Parse(data[0]["fid"].ToString());
}
}
}
}
return result ;
}
}
}