diff --git a/Pilot_KD_Parino/Pilot_KD_Parino.csproj b/Pilot_KD_Parino/Pilot_KD_Parino.csproj
index 529b85b..d36c3e4 100644
--- a/Pilot_KD_Parino/Pilot_KD_Parino.csproj
+++ b/Pilot_KD_Parino/Pilot_KD_Parino.csproj
@@ -352,6 +352,7 @@
+
diff --git a/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs b/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs
index 7f77f6b..477e183 100644
--- a/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs
+++ b/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs
@@ -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
}
}
-
+ ///
+ /// 下推目标订单
+ ///
+ /// 数据源
+ /// 目标表
+ /// 数据源FID
+ /// 目标订单类型
+ /// 指定仓库ID,0为不指定
+ /// 目标单据描述
+ ///
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();
}
+ ///
+ /// 判断当前订单是否需要下推下一个新订单
+ ///
+ /// 目标表
+ /// 数据源FID
+ /// 返回0则需要推送,大于0则是下一个订单的FID
+ 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 ;
+
+ }
}
}