This commit is contained in:
Administrator 2025-08-16 17:48:10 +08:00
commit ebfc3de501
10 changed files with 379 additions and 132 deletions

View File

@ -347,6 +347,8 @@
<Compile Include="PUR_POORDER\HQKC.cs" /> <Compile Include="PUR_POORDER\HQKC.cs" />
<Compile Include="SAL_DELIVERYNOTICE\PushCeLue.cs" /> <Compile Include="SAL_DELIVERYNOTICE\PushCeLue.cs" />
<Compile Include="SAL_ORDERList\ListUpFJ.cs" /> <Compile Include="SAL_ORDERList\ListUpFJ.cs" />
<Compile Include="SAL_ORDER\ServicePlugIn\UnAudit.cs" />
<Compile Include="SAL_ORDER\ServicePlugIn\Audit.cs" />
<Compile Include="SAL_ORDER\DataChage.cs" /> <Compile Include="SAL_ORDER\DataChage.cs" />
<Compile Include="SAL_ORDER\SaveWL.cs" /> <Compile Include="SAL_ORDER\SaveWL.cs" />
<Compile Include="ScheduleService\SaleOrderReceiveAmount.cs" /> <Compile Include="ScheduleService\SaleOrderReceiveAmount.cs" />

View File

@ -0,0 +1,62 @@
using GZ_LTHPilot_ORDER.Service;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GZ_LTHPilot_ORDER.SAL_ORDER.ServicePlugIn
{
[Description("服务插件:销售订单审核,刷新销售订单整单可开票金额和退货金额金额字段"), HotUpdate]
public class Audit : AbstractOperationServicePlugIn
{
public override void OnPreparePropertys(PreparePropertysEventArgs e)
{
base.OnPreparePropertys(e);
e.FieldKeys.Add("F_totalinvoiceAmount"); // 整单可开票金额
e.FieldKeys.Add("F_allreturnAmount"); // 云星空退货金额
e.FieldKeys.Add("F_sourorderno"); // 源单编号
e.FieldKeys.Add("FSALEORGID"); // 销售组织
e.FieldKeys.Add("FRETURNTYPE"); // 退补类型
e.FieldKeys.Add("F_sourpapercontract"); // 源头纸质合同号#
e.FieldKeys.Add("F_contractnumber"); // 纸质合同号
}
/// <summary>
/// 审核插件执行后插件、事务提交后事件
/// </summary>
/// <param name="e"></param>
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
{
base.AfterExecuteOperationTransaction(e);
SaleOrderService saleOrderService = new SaleOrderService(this.Context);
foreach (var bill in e.DataEntitys)
{
var org = bill["SALEORGID"] as DynamicObject;
var orgId = org["Id"].ToString(); // 销售组织
var contractNo = bill["F_contractnumber"].ToString(); // 纸质合同号
var srcContractNo = bill["F_sourpapercontract"].ToString(); // 源头纸质合同号
var saleOrderAmont = saleOrderService.GetSaleOrderAmount(orgId, contractNo); // 本单累计可开票金额
var k3RetrunAmount = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, contractNo); // 本单云星空退货金额
var retrunAmount = saleOrderService.GetSaleOrderRetrunAmount(orgId, contractNo); // 本单k3退货金额
saleOrderService.UpdateSaleOrderOrderAmountAndRetrunAmount(orgId, contractNo, saleOrderAmont, retrunAmount, k3RetrunAmount);
if (srcContractNo.IsNullOrEmpty())
{
continue;
}
var srcSaleOrderAmont = saleOrderService.GetSaleOrderAmount(orgId, srcContractNo); // 源单累计可开票金额
var srcK3RetrunAmount = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, srcContractNo); // 源单云星空退货金额
var srcRetrunAmount = saleOrderService.GetSaleOrderRetrunAmount(orgId, srcContractNo); // 源单k3退货金额
saleOrderService.UpdateSaleOrderOrderAmountAndRetrunAmount(orgId, srcContractNo, srcSaleOrderAmont, srcRetrunAmount, srcK3RetrunAmount);
}
}
}
}

View File

@ -0,0 +1,62 @@
using GZ_LTHPilot_ORDER.Service;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GZ_LTHPilot_ORDER.SAL_ORDER.ServicePlugIn
{
[Description("服务插件:销售订单反审核,刷新销售订单和源单整单可开票金额和退货金额金额字段"), HotUpdate]
public class UnAudit : AbstractOperationServicePlugIn
{
public override void OnPreparePropertys(PreparePropertysEventArgs e)
{
base.OnPreparePropertys(e);
e.FieldKeys.Add("F_totalinvoiceAmount"); // 整单可开票金额
e.FieldKeys.Add("F_allreturnAmount"); // 云星空退货金额
e.FieldKeys.Add("F_sourorderno"); // 源单编号
e.FieldKeys.Add("FSALEORGID"); // 销售组织
e.FieldKeys.Add("FRETURNTYPE"); // 退补类型
e.FieldKeys.Add("F_sourpapercontract"); // 源头纸质合同号#
e.FieldKeys.Add("F_contractnumber"); // 纸质合同号
}
/// <summary>
/// 审核插件执行后插件、事务提交后事件
/// </summary>
/// <param name="e"></param>
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
{
base.AfterExecuteOperationTransaction(e);
SaleOrderService saleOrderService = new SaleOrderService(this.Context);
foreach (var bill in e.DataEntitys)
{
var org = bill["SALEORGID"] as DynamicObject;
var orgId = org["Id"].ToString(); // 销售组织
var contractNo = bill["F_contractnumber"].ToString(); // 纸质合同号
var srcContractNo = bill["F_sourpapercontract"].ToString(); // 源头纸质合同号
var saleOrderAmont = saleOrderService.GetSaleOrderAmount(orgId, contractNo); // 本单累计可开票金额
var k3RetrunAmount = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, contractNo); // 本单云星空退货金额
var retrunAmount = saleOrderService.GetSaleOrderRetrunAmount(orgId, contractNo); // 本单k3退货金额
saleOrderService.UpdateSaleOrderOrderAmountAndRetrunAmount(orgId, contractNo, saleOrderAmont, retrunAmount, k3RetrunAmount);
if (srcContractNo.IsNullOrEmpty())
{
continue;
}
var srcSaleOrderAmont = saleOrderService.GetSaleOrderAmount(orgId, srcContractNo); // 源单累计可开票金额
var srcK3RetrunAmount = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, srcContractNo); // 源单云星空退货金额
var srcRetrunAmount = saleOrderService.GetSaleOrderRetrunAmount(orgId, srcContractNo); // 源单k3退货金额
saleOrderService.UpdateSaleOrderOrderAmountAndRetrunAmount(orgId, srcContractNo, srcSaleOrderAmont, srcRetrunAmount, srcK3RetrunAmount);
}
}
}
}

View File

@ -104,7 +104,7 @@ FROM
/// <returns></returns> /// <returns></returns>
private int InsertDataToTempTable(Context ctx, string tableName, Dictionary<string, string> orgDict, List<SaleExecuteOut> saleExecuteOuts) private int InsertDataToTempTable(Context ctx, string tableName, Dictionary<string, string> orgDict, List<SaleExecuteOut> saleExecuteOuts)
{ {
var values = saleExecuteOuts.Select(n => $"({orgDict[n.FSALEORGNAME]},'{n.FSALEORGNAME}','{n.FBILLNO}',{n.FALLMATCHAMOUNT},'{n.FDate}')").ToList(); var values = saleExecuteOuts.Select(n => $"({orgDict[n.FSALEORGNAME]},'{n.FSALEORGNAME}','{n.FBILLNO}',{n.FALLMATCHAMOUNT.ToString()},'{n.FDate}')").ToList();
var index = 0; var index = 0;
var line = 0; var line = 0;
var pageSize = 100; var pageSize = 100;
@ -135,7 +135,7 @@ VALUES
FORGID int, FORGID int,
FORGNAME NVARCHAR (100), FORGNAME NVARCHAR (100),
FBILLNO NVARCHAR (100), FBILLNO NVARCHAR (100),
FAMOUNT decimal, FAMOUNT DECIMAL(18, 10),
FDATE DATETIME, FDATE DATETIME,
); );
"; ";

View File

@ -5,62 +5,21 @@ using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core; using Kingdee.BOS.Core;
using Kingdee.BOS.Util; using Kingdee.BOS.Util;
using Kingdee.K3.FIN.App.Core.Match.Object; using Kingdee.K3.FIN.App.Core.Match.Object;
using Kingdee.K3.SCM.Common.BusinessEntity.Sales;
using System; using System;
using System.ComponentModel; using System.ComponentModel;
namespace GZ_LTHPilot_ORDER.ScheduleService namespace GZ_LTHPilot_ORDER.ScheduleService
{ {
[Description("定时刷新销售订单累计开票金额#"), HotUpdate] [Description("刷新所有销售订单累计开票金额#"), HotUpdate]
public class SaleOrderSumSicsAmountRefresh : IScheduleService public class SaleOrderSumSicsAmountRefresh : IScheduleService
{ {
public void Run(Context ctx, Schedule schedule) public void Run(Context ctx, Schedule schedule)
{ {
var advanceAays = GetAdvanceAays(schedule);
// 提前天的日期
var approvedDate = DateTime.Now.Date.AddDays(-advanceAays - 1);
// 销售发票服务 // 销售发票服务
SaleSicsService saleSicsService = new SaleSicsService(ctx); SaleSicsService saleSicsService = new SaleSicsService(ctx);
// TODO 获取前一天的发票数据 // 刷新所有销售订单累计开票金额#
var sicsList = saleSicsService.GetSaleSiceListByApprovedDate(approvedDate); saleSicsService.UpdateSaleOrderSumSicsamountAll();
SaleOrderService saleOrderService = new SaleOrderService(ctx);
foreach (var sice in sicsList)
{
var saleOrgId = sice["FSALEORGID"].ToString();
var contractNo = sice["contractNo"].ToString();
var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(saleOrgId, contractNo);
if (saleOrderList.Count == 0)
{
continue;
}
var saleOrder = saleOrderList[0];
saleSicsService.UpdateSaleOrderSumSicsamountBySaleOrder(saleOrder);
}
}
/// <summary>
/// 参数获取提前天
/// </summary>
/// <param name="schedule"></param>
/// <returns></returns>
private int GetAdvanceAays(Schedule schedule)
{
// 参数获取提前天
var advanceAaysStr = schedule.Parameters;
int advanceAays;
try
{
advanceAays = Convert.ToInt32(advanceAaysStr);
if (advanceAays < 0)
{
throw new Exception();
}
}
catch (Exception)
{
throw new Exception("获取参数提前天失败参数格式为整数且大于等于0");
}
return advanceAays;
} }
} }
} }

View File

@ -34,68 +34,131 @@ namespace GZ_LTHPilot_ORDER.Service
/// K3退货金额原币取数逻辑K3退货金额除以销售订单汇率=K3退货金额原币 /// K3退货金额原币取数逻辑K3退货金额除以销售订单汇率=K3退货金额原币
/// </summary> /// </summary>
/// <param name="contractNo">纸质合同号</param> /// <param name="contractNo">纸质合同号</param>
/// <param name="rate">销售订单汇率</param>
/// <returns></returns> /// <returns></returns>
public decimal GetK3SaleOrderRetrunAmount(string contractNo, string rate) public decimal GetK3SaleOrderRetrunAmount(string orgId, string contractNo)
{ {
var sqlTemp = @"/*dialect*/SELECT var sqlTemp = @"/*dialect*/WITH
ROUND(ISNULL (SUM(退), 0) / {1}, 2) Amount K3returnAmount AS (
SELECT
t2.F_CONTRACTNUMBER,
ROUND(ISNULL (SUM(退), 0) / t2fin.FEXCHANGERATE, 2) K3returnAmount
FROM
oldk3seorder0701 t1
Inner join T_SAL_ORDER t2 on t1. = t2.F_CONTRACTNUMBER
and t2.FSALEORGID = '100302'
inner join T_SAL_ORDERFIN t2fin on t2.fid = t2fin.fid
WHERE
1 = 1
AND t2.FSALEORGID = '{0}'
AND t2.F_CONTRACTNUMBER = '{1}'
GROUP BY
t2.FSALEORGID,
t2.F_CONTRACTNUMBER,
t2fin.FEXCHANGERATE
)
SELECT
*
FROM FROM
oldk3seorder0701 t1 K3returnAmount
WHERE
1 = 1
AND t1. = '{0}'
"; ";
var sql = string.Format(sqlTemp, contractNo, rate); var sql = string.Format(sqlTemp, orgId, contractNo);
var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql); var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql);
return Convert.ToDecimal(result[0]["Amount"]); if (result.Count == 0)
{
return 0;
}
return Convert.ToDecimal(result[0]["K3returnAmount"]);
} }
/// <summary> /// <summary>
/// 云星空的退货金额取数逻辑:取已审核的退货通知单的表头字段 ”源头销售订单单号#“ =本销售订单编号的退货通知单原币价税合计金额 /// 云星空的退货金额取数逻辑:取已审核的退货通知单的表头字段 ”源头销售订单单号#“ =本销售订单编号的退货通知单原币价税合计金额
/// </summary> /// </summary>
/// <param name="billNo">单据编号</param> /// <param name="orgId"></param>
/// <param name="contractNo"></param>
/// <returns></returns> /// <returns></returns>
public decimal GetSaleOrderRetrunAmount(string billNo) public decimal GetSaleOrderRetrunAmount(string orgId, string contractNo)
{ {
var sqlTemp = @"/*dialect*/SELECT var sqlTemp = @"/*dialect*/WITH
ISNULL (SUM(FBILLALLAMOUNT), 0) Amount returnAmount AS (
SELECT
t2.F_CONTRACTNUMBER,
t2.FSALEORGID,
ISNULL (SUM(t1e_f.FALLAMOUNT), 0) returnAmount
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
Inner join T_SAL_ORDER t2 --
ON t1.F_SOURORDERNO = t2.FBILLNO
AND t1.FSALEORGID = t1.FSALEORGID
WHERE
1 = 1
AND t1.FBUSINESSTYPE = 'RETURNSO' -- 退
AND t2.FDOCUMENTSTATUS = 'C'
AND t1.FDOCUMENTSTATUS = 'C'
AND t1e.FRETURNTYPE = 'RETURN' -- 退
AND t2.FSALEORGID = '{0}'
AND t2.F_CONTRACTNUMBER = '{1}'
GROUP BY
t2.F_CONTRACTNUMBER,
t2.FSALEORGID
)
SELECT
*
FROM FROM
T_SAL_RETURNNOTICE t1 returnAmount
LEFT JOIN T_SAL_RETURNNOTICEFIN t1fin ON t1.FID = t1fin.FID
WHERE
1 = 1
AND t1.FDOCUMENTSTATUS = 'C'
AND t1.FCANCELSTATUS = 'A'
AND t1.F_SOURORDERNO = '{0}'
"; ";
var sql = string.Format(sqlTemp, billNo); var sql = string.Format(sqlTemp, orgId, contractNo);
var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql); var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql);
return Convert.ToDecimal(result[0]["Amount"]); if (result.Count == 0)
{
return 0;
}
return -Convert.ToDecimal(result[0]["returnAmount"]);
} }
/// <summary> /// <summary>
/// 订单明细正数的物料原币价税合计(只取退补类型不等于“退回“的物料明细) /// 订单明细正数的物料原币价税合计(只取退补类型不等于“退回“的物料明细)
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="orgId"></param>
/// <param name="contractNo"></param>
/// <returns></returns> /// <returns></returns>
public decimal GetSaleOrderAmount(string id) public decimal GetSaleOrderAmount(string orgId, string contractNo)
{ {
var sqlTemp = @"/*dialect*/SELECT var sqlTemp = @"/*dialect*/WITH
ISNULL (SUM(t1e_f.FALLAMOUNT), 0) Amount SaleOrderAmount AS (
SELECT
t1.F_CONTRACTNUMBER,
t1.FSALEORGID,
ISNULL (SUM(t1e_f.FALLAMOUNT), 0) OrderAmount
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 t1e.FRETURNTYPE <> 'RETURN' -- 退退
AND t1.FSALEORGID = '{0}'
AND t1.F_CONTRACTNUMBER = '{1}'
GROUP BY
t1.F_CONTRACTNUMBER,
t1.FSALEORGID
)
SELECT
*
FROM FROM
T_SAL_ORDER t1 SaleOrderAmount
LEFT JOIN T_SAL_ORDERENTRY_F t1e_f ON t1.FID = t1e_f.FID
WHERE
1 = 1
AND t1.FDOCUMENTSTATUS = 'C'
AND t1.FCANCELSTATUS = 'A'
AND t1e_f.FALLAMOUNT > 0
AND t1.FID = '{0}'
"; ";
var sql = string.Format(sqlTemp, id); var sql = string.Format(sqlTemp, orgId, contractNo);
var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql); var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql);
return Convert.ToDecimal(result[0]["Amount"]); if (result.Count == 0)
{
return 0;
}
return Convert.ToDecimal(result[0]["OrderAmount"]);
} }
/// <summary> /// <summary>
@ -240,5 +303,32 @@ WHERE
}).ToList(); }).ToList();
return dataRow; return dataRow;
} }
/// <summary>
/// 更新销售订单K3退货金额云星空退货金额累计可开票金额
/// </summary>
/// <param name="orgId">销售组织</param>
/// <param name="contractNo">纸质合同号</param>
/// <param name="orderAmount">订单金额</param>
/// <param name="retrunAmount">云星空退货金额</param>
/// <param name="k3retrunAmount">K3退货金额</param>
/// <returns></returns>
public int UpdateSaleOrderOrderAmountAndRetrunAmount(string orgId, string contractNo, decimal orderAmount, decimal retrunAmount, decimal k3retrunAmount)
{
var sqlTemp = @"/*dialect*/UPDATE t1
SET
t1.F_K3returnAmount = {2}, -- k3退货金额
t1.F_ALLRETURNAMOUNT = {3}, -- 退
t1.F_TOTALINVOICEAMOUNT = {4} - {2} - {3} -- -退-K3WISE退货金额
FROM
T_SAL_ORDER t1
WHERE
1 = 1
AND t1.FSALEORGID = '{0}'
AND t1.F_CONTRACTNUMBER = '{1}'
";
var sql = string.Format(sqlTemp, orgId, contractNo, k3retrunAmount, retrunAmount, orderAmount);
return DBServiceHelper.Execute(ctx, sql);
}
} }
} }

View File

@ -91,6 +91,59 @@ WHERE
return DBServiceHelper.Execute(ctx, sql); return DBServiceHelper.Execute(ctx, sql);
} }
public int UpdateSaleOrderSumSicsamountAll()
{
var sql = @"/*dialect*/UPDATE t1
SET
t1.F_INVOICEAMOUNT = ISNULL (TEMP1.FAFTERTOTALTAXFOR, 0)
FROM
T_SAL_ORDER t1
INNER JOIN T_SAL_ORDERFIN t1fin ON t1.FID = t1fin.FID
LEFT JOIN (
SELECT
FSALEORGID,
F_PaperNumber,
SUM(FAFTERTOTALTAX) FAFTERTOTALTAX, --
SUM(FAFTERTOTALTAXFOR) FAFTERTOTALTAXFOR --
FROM
(
SELECT
v1.FSALEORGID, --
v1e.F_CONTRACTNO F_PaperNumber, --
ISNULL (v1e_o.FALLAMOUNT, 0) FAFTERTOTALTAX, --
ISNULL (v1e.FALLAMOUNTFOR, 0) FAFTERTOTALTAXFOR --
FROM
T_IV_SALESIC v1
INNER JOIN T_IV_SALESICENTRY v1e ON v1.FID = v1e.FID
LEFT JOIN T_IV_SALESICENTRY_O v1e_o ON v1e_o.FENTRYID = v1e.FENTRYID
WHERE
1 = 1
AND v1.FDOCUMENTSTATUS = 'C'
AND v1.FCANCELSTATUS = 'A'
AND v1.F_SFQC = 0
UNION ALL
SELECT
'100302' FSALEORGID, --
F_PaperNumber, --
SUM(ISNULL (, 0)) FAFTERTOTALTAX, --
SUM(ISNULL (, 0)) FAFTERTOTALTAXFOR --
FROM
oldk3ICSale0802
WHERE
1 = 1
GROUP BY
) temp02
GROUP BY
FSALEORGID,
F_PaperNumber
) TEMP1 ON t1.F_CONTRACTNUMBER = TEMP1.F_PaperNumber
AND t1.FSALEORGID = TEMP1.FSALEORGID
";
return DBServiceHelper.Execute(ctx, sql);
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>

View File

@ -19,6 +19,9 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn
{ {
base.OnPreparePropertys(e); base.OnPreparePropertys(e);
e.FieldKeys.Add("F_PaperNumber"); e.FieldKeys.Add("F_PaperNumber");
e.FieldKeys.Add("F_contractno");
e.FieldKeys.Add("FALLAMOUNTFOR");
e.FieldKeys.Add("FSALEORGID");
} }
@ -32,28 +35,34 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn
foreach (var bill in e.DataEntitys) foreach (var bill in e.DataEntitys)
{ {
var org = bill["SALEORGID"] as DynamicObject; var org = bill["SALEORGID"] as DynamicObject;
var orgId = org["Id"].ToString(); // 销售订单 var orgId = org["Id"].ToString(); // 销售组织
var contractNo = bill["F_PaperNumber"].ToString(); // 纸质合同号
var entryList = bill["SALESICENTRY"] as DynamicObjectCollection;
// 根据合同号分组
var grouped = entryList.GroupBy(n => n["F_contractno"].ToString());
// 销售订单服务 // 销售订单服务
var saleOrderService = new SaleOrderService(this.Context); var saleOrderService = new SaleOrderService(this.Context);
// TODO 根据组织和纸质合同号查找销售订单
var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(orgId, contractNo);
if (saleOrderList.Count == 0)
{
//var errInfo = string.Format("纸质合同号:{0},没有找到对应的销售订单,请检查销售订单是否已审核,或者被作废", contractNo);
//throw new Exception(errInfo);
continue;
}
if (saleOrderList.Count > 1)
{
var errInfo = string.Format("纸质合同号:{0},找到多个销售订单,请检查组织内纸质合同号唯一性", contractNo);
throw new Exception(errInfo);
}
var saleOrder = saleOrderList[0];
// 发票服务 // 发票服务
SaleSicsService saleSicsService = new SaleSicsService(this.Context); SaleSicsService saleSicsService = new SaleSicsService(this.Context);
// TODO 刷新销售订单单头的累计开票金额 foreach (var group in grouped)
saleSicsService.UpdateSaleOrderSumSicsamountBySaleOrder(saleOrder); {
// 纸质合同号
var contractNo = group.Key;
// TODO 根据组织和纸质合同号查找销售订单
var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(orgId, contractNo);
if (saleOrderList.Count == 0)
{
continue;
}
foreach (var saleOrder in saleOrderList)
{
// TODO 刷新销售订单单头的累计开票金额
saleSicsService.UpdateSaleOrderSumSicsamountBySaleOrder(saleOrder);
}
}
} }
} }
} }

View File

@ -51,23 +51,17 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn
{ {
continue; continue;
} }
if (saleOrderList.Count > 1) var saleOrderNoList = saleOrderList.Select(n => n["FBILLNO"].ToString()).ToList();
{ var saleOrderNoString = string.Join(",\n\r", saleOrderNoList);
var errInfo = string.Format("纸质合同号:{0},找到多个销售订单,请检查组织内纸质合同号唯一性", contractNo);
throw new Exception(errInfo);
}
var saleOrder = saleOrderList[0]; var saleOrder = saleOrderList[0];
// 销售订单Id
var saleOrderId = saleOrder["FID"].ToString();
var saleOrderNo = saleOrder["FBILLNO"].ToString();
// 销售订单价税合计(原币) // 销售订单价税合计(原币)
var saleOrderAmount = saleOrderService.GetSaleOrderAmount(saleOrderId); var saleOrderAmount = saleOrderService.GetSaleOrderAmount(orgId, contractNo);
// 销售订单累计开票金额(原币) // 销售订单累计开票金额(原币)
var saleOrderINVOICEAMOUNT = Convert.ToDecimal(saleOrder["F_INVOICEAMOUNT"]); var saleOrderINVOICEAMOUNT = Convert.ToDecimal(saleOrder["F_INVOICEAMOUNT"]);
// 销售订单退货金额(原币) // 销售订单退货金额(原币)
var rate = saleOrder["FEXCHANGERATE"].ToString(); var saleOrderReturnAmountK3Cloud = saleOrderService.GetSaleOrderRetrunAmount(orgId, contractNo);
var saleOrderReturnAmountK3Cloud = saleOrderService.GetSaleOrderRetrunAmount(saleOrderNo); var saleOrderReturnAmountK3 = saleOrderService.GetK3SaleOrderRetrunAmount(orgId, contractNo);
var saleOrderReturnAmountK3 = saleOrderService.GetK3SaleOrderRetrunAmount(contractNo, rate); // 销售订单退货金额(原币)
var saleOrderReturnAmount = saleOrderReturnAmountK3 + saleOrderReturnAmountK3Cloud; var saleOrderReturnAmount = saleOrderReturnAmountK3 + saleOrderReturnAmountK3Cloud;
// 校验销售订单累计开票金额+本次开票金额不能大于销售订单价税合计 // 校验销售订单累计开票金额+本次开票金额不能大于销售订单价税合计
if (saleOrderAmount < saleOrderINVOICEAMOUNT + SumALLAMOUNTFOR - saleOrderReturnAmount) if (saleOrderAmount < saleOrderINVOICEAMOUNT + SumALLAMOUNTFOR - saleOrderReturnAmount)
@ -80,7 +74,12 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn
PKValue = "1", PKValue = "1",
Name = "检查开票金额是否超额", Name = "检查开票金额是否超额",
MessageType = MessageType.FatalError, MessageType = MessageType.FatalError,
Message = string.Format($@"销售订单:'{saleOrderNo}' , 纸质合同号:'{contractNo}', 开票超额。 不满足条件:销售订单价税合计 >= 累计开票金额 + 本次开票金额 - 退货金额。销售订单价税合计:{saleOrderAmount.ToString("0.00")} 累计开票金额:{saleOrderINVOICEAMOUNT.ToString("0.00")},本次开票金额:{SumALLAMOUNTFOR.ToString("0.00")},退货金额:{saleOrderReturnAmountK3Cloud.ToString("0.00")},K3退货金额{saleOrderReturnAmountK3.ToString("0.00")} Message = string.Format($@" 销售纸质合同号:'{contractNo}'
'{saleOrderNoString}' ,
>= +
{(saleOrderAmount - saleOrderReturnAmountK3Cloud - saleOrderReturnAmountK3).ToString("0.00")}
{saleOrderINVOICEAMOUNT.ToString("0.00")}
{SumALLAMOUNTFOR.ToString("0.00")},
"), "),
SuccessStatus = false SuccessStatus = false

View File

@ -19,8 +19,12 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn
{ {
base.OnPreparePropertys(e); base.OnPreparePropertys(e);
e.FieldKeys.Add("F_PaperNumber"); e.FieldKeys.Add("F_PaperNumber");
e.FieldKeys.Add("F_contractno");
e.FieldKeys.Add("FALLAMOUNTFOR");
e.FieldKeys.Add("FSALEORGID");
} }
/// <summary> /// <summary>
/// 审核插件执行后插件、事务提交后事件 /// 审核插件执行后插件、事务提交后事件
/// </summary> /// </summary>
@ -31,27 +35,34 @@ namespace GZ_LTHPilot_ORDER.T_IV_SALESIC.ServicePlugIn
foreach (var bill in e.DataEntitys) foreach (var bill in e.DataEntitys)
{ {
var org = bill["SALEORGID"] as DynamicObject; var org = bill["SALEORGID"] as DynamicObject;
var orgId = org["Id"].ToString(); // 销售订单 var orgId = org["Id"].ToString(); // 销售组织
var contractNo = bill["F_PaperNumber"].ToString(); // 纸质合同号
var entryList = bill["SALESICENTRY"] as DynamicObjectCollection;
// 根据合同号分组
var grouped = entryList.GroupBy(n => n["F_contractno"].ToString());
// 销售订单服务 // 销售订单服务
var saleOrderService = new SaleOrderService(this.Context); var saleOrderService = new SaleOrderService(this.Context);
// TODO 根据组织和纸质合同号查找销售订单
var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(orgId, contractNo);
if (saleOrderList.Count == 0)
{
continue;
}
if (saleOrderList.Count > 1)
{
var errInfo = string.Format("纸质合同号:{0},找到多个销售订单,请检查组织内纸质合同号唯一性", contractNo);
throw new Exception(errInfo);
}
var saleOrder = saleOrderList[0];
// 发票服务 // 发票服务
SaleSicsService saleSicsService = new SaleSicsService(this.Context); SaleSicsService saleSicsService = new SaleSicsService(this.Context);
// TODO 刷新销售订单单头的累计开票金额 foreach (var group in grouped)
saleSicsService.UpdateSaleOrderSumSicsamountBySaleOrder(saleOrder); {
// 纸质合同号
var contractNo = group.Key;
// TODO 根据组织和纸质合同号查找销售订单
var saleOrderList = saleOrderService.GetSaleOrderByOrgIdAndContractNo(orgId, contractNo);
if (saleOrderList.Count == 0)
{
continue;
}
foreach (var saleOrder in saleOrderList)
{
// TODO 刷新销售订单单头的累计开票金额
saleSicsService.UpdateSaleOrderSumSicsamountBySaleOrder(saleOrder);
}
}
} }
} }
} }