修改销售订单保存时提示F_CXSFBG列存在的问题,

新增销售订单保存时自动带出历史单价
This commit is contained in:
朱斌 2025-07-29 11:53:54 +08:00
parent 3078bcdd0b
commit 65d5bde9f6
3 changed files with 117 additions and 6 deletions

View File

@ -247,6 +247,7 @@
<Compile Include="Sal_OutStock\AbstractOperationServicePlugIn.cs" /> <Compile Include="Sal_OutStock\AbstractOperationServicePlugIn.cs" />
<Compile Include="Sal_OutStock\AnAuditFLogisticsBillNo.cs" /> <Compile Include="Sal_OutStock\AnAuditFLogisticsBillNo.cs" />
<Compile Include="SAL_RETURNNOTICE\AuditPushPLM.cs" /> <Compile Include="SAL_RETURNNOTICE\AuditPushPLM.cs" />
<Compile Include="Services\SaleOrderService.cs" />
<Compile Include="SQL\SqlManage.cs" /> <Compile Include="SQL\SqlManage.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,4 +1,5 @@
using GZ_KD_Parino.Common; using GZ_KD_Parino.Common;
using GZ_KD_Parino.Services;
using GZ_KD_Parino.SQL; using GZ_KD_Parino.SQL;
using Kingdee.BOS.App; using Kingdee.BOS.App;
using Kingdee.BOS.App.Data; using Kingdee.BOS.App.Data;
@ -14,8 +15,7 @@ using System.Data;
namespace GZ_KD_Parino.Sal_Order namespace GZ_KD_Parino.Sal_Order
{ {
[HotUpdate] [Description("销售订单--更新纸质合同号"), HotUpdate]
[Description("销售订单--更新纸质合同号")]
public class Save : AbstractOperationServicePlugIn public class Save : AbstractOperationServicePlugIn
{ {
@ -40,7 +40,11 @@ namespace GZ_KD_Parino.Sal_Order
e.FieldKeys.Add("FBILLTYPEID"); e.FieldKeys.Add("FBILLTYPEID");
} }
/// <summary>
/// 保存后事件,保存事务结束后
/// </summary>
/// <param name="e"></param>
/// <exception cref="Exception"></exception>
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
{ {
base.AfterExecuteOperationTransaction(e); base.AfterExecuteOperationTransaction(e);
@ -103,10 +107,12 @@ namespace GZ_KD_Parino.Sal_Order
throw new Exception($"商机名称:{F_BON["Name"].ToString()},不存在对应的工程项目。"); throw new Exception($"商机名称:{F_BON["Name"].ToString()},不存在对应的工程项目。");
} }
fid = sqlDS1[0]["FID"].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); 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<IMetaDataService>(); IMetaDataService metaDataService = ServiceHelper.GetService<IMetaDataService>();
@ -151,5 +157,52 @@ namespace GZ_KD_Parino.Sal_Order
SqlManage.UpdateItemData(this.Context, Convert.ToString(Billobj["Id"]), FlexNumber); SqlManage.UpdateItemData(this.Context, Convert.ToString(Billobj["Id"]), FlexNumber);
} }
} }
/// <summary>
/// 开始保存插件
/// </summary>
/// <param name="e"></param>
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;
}
}
}
} }
} }

View File

@ -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
{
/// <summary>
/// 销售订单服务类
/// </summary>
public class SaleOrderService
{
private Context ctx;
public SaleOrderService(Context ctx)
{
this.ctx = ctx;
}
/// <summary>
/// 销售订单获取历史单价
/// 销售订单,根据组织+客户+商机名称#+物料代码带出最近一次历史销售含税单价,
/// 取当前日期前,审核日期最大的销售订单含税单价,日期越大表示离当前日期越近
/// </summary>
/// <returns></returns>
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];
}
}
}