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