From 65d5bde9f65ce316dc22142f264cf16400f8e58a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=96=8C?= <1324361213@qq.com> Date: Tue, 29 Jul 2025 11:53:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=80=E5=94=AE=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E4=BF=9D=E5=AD=98=E6=97=B6=E6=8F=90=E7=A4=BAF=5FCXSFB?= =?UTF-8?q?G=E5=88=97=E5=AD=98=E5=9C=A8=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=20=E6=96=B0=E5=A2=9E=E9=94=80=E5=94=AE=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E4=BF=9D=E5=AD=98=E6=97=B6=E8=87=AA=E5=8A=A8=E5=B8=A6?= =?UTF-8?q?=E5=87=BA=E5=8E=86=E5=8F=B2=E5=8D=95=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GZ_KD_Parino/GZ_KD_Parino.csproj | 1 + GZ_KD_Parino/Sal_Order/Save.cs | 65 ++++++++++++++++++++--- GZ_KD_Parino/Services/SaleOrderService.cs | 57 ++++++++++++++++++++ 3 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 GZ_KD_Parino/Services/SaleOrderService.cs diff --git a/GZ_KD_Parino/GZ_KD_Parino.csproj b/GZ_KD_Parino/GZ_KD_Parino.csproj index 8680a83..0ab0959 100644 --- a/GZ_KD_Parino/GZ_KD_Parino.csproj +++ b/GZ_KD_Parino/GZ_KD_Parino.csproj @@ -247,6 +247,7 @@ + diff --git a/GZ_KD_Parino/Sal_Order/Save.cs b/GZ_KD_Parino/Sal_Order/Save.cs index b4f6a70..3ac895c 100644 --- a/GZ_KD_Parino/Sal_Order/Save.cs +++ b/GZ_KD_Parino/Sal_Order/Save.cs @@ -1,4 +1,5 @@ using GZ_KD_Parino.Common; +using GZ_KD_Parino.Services; using GZ_KD_Parino.SQL; using Kingdee.BOS.App; using Kingdee.BOS.App.Data; @@ -14,8 +15,7 @@ using System.Data; namespace GZ_KD_Parino.Sal_Order { - [HotUpdate] - [Description("销售订单--更新纸质合同号")] + [Description("销售订单--更新纸质合同号"), HotUpdate] public class Save : AbstractOperationServicePlugIn { @@ -40,7 +40,11 @@ namespace GZ_KD_Parino.Sal_Order e.FieldKeys.Add("FBILLTYPEID"); } - + /// + /// 保存后事件,保存事务结束后 + /// + /// + /// public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); @@ -103,10 +107,12 @@ namespace GZ_KD_Parino.Sal_Order throw new Exception($"商机名称:{F_BON["Name"].ToString()},不存在对应的工程项目。"); } fid = sqlDS1[0]["FID"].ToString(); - string F_contractnumberSQL1 = string.Format(@"UPDATE T_BAS_PREBDONE_L SET FNAME = '{0}',F_CXSFBG = 1 WHERE fid in (SELECT FID FROM T_BAS_PREBDONE WHERE FNUMBER = '{1}' AND FUSEORGID = '{2}' )", Convert.ToString(F_BON["Name"]), FlexNumber, SalZZFid); - + // 更新项目名称 + string F_contractnumberSQL1 = string.Format(@"UPDATE T_BAS_PREBDONE_L SET FNAME = '{0}' WHERE fid in (SELECT FID FROM T_BAS_PREBDONE WHERE FNUMBER = '{1}' AND FUSEORGID = '{2}' )", Convert.ToString(F_BON["Name"]), FlexNumber, SalZZFid); DBUtils.ExecuteDynamicObject(ctx, F_contractnumberSQL1.ToString(), null, null, CommandType.Text, null); - + // 更新项目状态 + var F_contractnumberSQL2 = string.Format(@"UPDATE T_BAS_PREBDONE SET F_CXSFBG = 1 WHERE FNUMBER = '{0}' AND FUSEORGID = '{1}'", FlexNumber, SalZZFid); + DBUtils.ExecuteDynamicObject(ctx, F_contractnumberSQL2.ToString(), null, null, CommandType.Text, null); //获取元数据服务 IMetaDataService metaDataService = ServiceHelper.GetService(); @@ -151,5 +157,52 @@ namespace GZ_KD_Parino.Sal_Order SqlManage.UpdateItemData(this.Context, Convert.ToString(Billobj["Id"]), FlexNumber); } } + + /// + /// 开始保存插件 + /// + /// + public override void BeforeDoSaveExecute(BeforeDoSaveExecuteEventArgs e) + { + base.BeforeDoSaveExecute(e); + foreach (var billObj in e.DataEntities) + { + var cust = billObj["CustId"] as DynamicObject; + var saleOrg = billObj["SaleOrgId"] as DynamicObject; + var F_BON = billObj["F_BON"] as DynamicObject; + // 客户 + var custId = cust["Id"].ToString(); + // 销售组织 + var saleOrgId = saleOrg["Id"].ToString(); + // 商机项目 + var F_BONId = F_BON["Id"].ToString(); + var createDate = billObj["CreateDate"]; + var date = DateTime.Now; + if (createDate != null) + { + date = Convert.ToDateTime(createDate); + } + var saleEntryList = billObj["SaleOrderEntry"] as DynamicObjectCollection; + + var saleOrderService = new SaleOrderService(this.Context); + + // TODO 销售订单,根据组织+客户+商机名称#+物料代码带出最近一次历史销售含税单价,取当前日期前, + // 审核日期最大的销售订单含税单价,日期越大表示离当前日期越近 + foreach (var item in saleEntryList) + { + var material = item["MaterialId"] as DynamicObject; + var materialId = material["Id"].ToString(); + var historyOrder = saleOrderService.GetHistoryOrder(saleOrgId, custId, F_BONId, materialId, date); + if (historyOrder == null) + { + continue; + } + var historyUnitPrice = Convert.ToDecimal(historyOrder["FTAXPRICE"]); + // 更新历史单价 + item["F_LSDJ"] = historyUnitPrice; + } + + } + } } } \ No newline at end of file diff --git a/GZ_KD_Parino/Services/SaleOrderService.cs b/GZ_KD_Parino/Services/SaleOrderService.cs new file mode 100644 index 0000000..3119086 --- /dev/null +++ b/GZ_KD_Parino/Services/SaleOrderService.cs @@ -0,0 +1,57 @@ +using Kingdee.BOS; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GZ_KD_Parino.Services +{ + /// + /// 销售订单服务类 + /// + public class SaleOrderService + { + private Context ctx; + public SaleOrderService(Context ctx) + { + this.ctx = ctx; + } + + /// + /// 销售订单获取历史单价 + /// 销售订单,根据组织+客户+商机名称#+物料代码带出最近一次历史销售含税单价, + /// 取当前日期前,审核日期最大的销售订单含税单价,日期越大表示离当前日期越近 + /// + /// + public DynamicObject GetHistoryOrder(string orgId, string custId, string bonId, string materialId, DateTime createDate) + { + var sql = $@"/*dialect*/SELECT + TOP 1 t1e_f.* +FROM + T_SAL_ORDER t1 + INNER JOIN T_SAL_ORDERENTRY t1e ON t1.FID = t1e.FID + INNER JOIN T_SAL_ORDERENTRY_F t1e_f ON t1e.FENTRYID = t1e_f.FENTRYID +WHERE + 1 = 1 + AND t1.FDOCUMENTSTATUS = 'C' -- 已审核 + AND t1.FCANCELSTATUS = 'A' -- 未作废 + AND t1.FAPPROVEDATE < '{createDate.ToString("yyyy-MM-dd HH:mm:ss")}' + AND t1.FSALEORGID = '{orgId}' + AND t1.FCUSTID = '{custId}' + AND t1.F_BON = '{bonId}' + AND t1e.FMATERIALID = '{materialId}' +ORDER BY + t1.FCREATEDATE DESC +"; + var result = DBServiceHelper.ExecuteDynamicObject(this.ctx, sql); + if (result.Count == 0) + { + return null; + } + return result[0]; + } + } +}