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