新增销售订单获取收款金额API

This commit is contained in:
2025-07-30 16:50:24 +08:00
parent b83a4c0773
commit 72eebf5edb
14 changed files with 435 additions and 49 deletions

View File

@@ -0,0 +1,144 @@
using GZ_LTHPilot_ORDER.Models.K3Request;
using GZ_LTHPilot_ORDER.Models.K3Result;
using GZ_LTHPilot_ORDER.Models.VO;
using Kingdee.BOS;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.WebApi.FormService;
using Kingdee.K3.FIN.App.Core.Match.Object;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GZ_LTHPilot_ORDER.Service
{
/// <summary>
/// 销售订单服务类
/// </summary>
public class SaleOrderService
{
private Context ctx;
public SaleOrderService(Context ctx)
{
this.ctx = ctx;
}
/// <summary>
/// 根据纸质合同号、组织获取销售订单
/// </summary>
/// <returns></returns>
public DynamicObjectCollection GetSaleOrderByOrgIdAndContractNo(string orgId, string contractNo)
{
var sqlTemp = @"/*dialect*/SELECT
*
FROM
T_SAL_ORDER t1
LEFT JOIN T_SAL_ORDERFIN t1fin ON t1.FID = t1fin.FID
WHERE
1 = 1
AND t1.FDOCUMENTSTATUS = 'C'
AND t1.FCANCELSTATUS = 'A'
AND t1.FSALEORGID = '{0}'
AND t1.F_CONTRACTNUMBER = '{1}'
";
var sql = string.Format(sqlTemp, orgId, contractNo);
var resultData = DBServiceHelper.ExecuteDynamicObject(ctx, sql);
return resultData;
}
/// <summary>
/// 获取销售订单收款金额
/// </summary>
/// <returns></returns>
public decimal GetSaleOrderReceiveAmount(string orgId, string billNo)
{
var saleOrder = this.GetSaleOrderByBillNoAndOrgId(orgId, billNo);
var date = Convert.ToDateTime(saleOrder["FDATE"]);
ReportDataParam param = new ReportDataParam()
{
ReturnJsonData = true,
FieldKeys = "FSALEORGNAME,FBILLNO,FDate,FALLMATCHAMOUNT",
IsVerifyBaseDataField = true,
Model = new Model()
{
FSaleOrgList = orgId,
FSoFromDate = date.AddDays(-2),
FSoToDate = date.AddDays(1),
FSaleOFrom = billNo,
FSaleOTo = billNo,
FFormCloseStatus = "ALL",
FFormStatus = "C",
FPriceFrom = "SALORDERBILL",
FBusCloseStatus = "ALL",
FMergingSOHeader = true,
FIncludedUnfilledOrders = false,
FIsRecWithMat = true,
}
};
var paramString = JsonConvert.SerializeObject(param);
var reusltString = WebApiServiceCall.GetSysReportData(this.ctx, "SAL_DetailReport", paramString).ToString();
var result = JsonConvert.DeserializeObject<KingdeeResult<SaleExecuteOut>>(reusltString);
var rows = result.Result.Rows;
var dataRow = rows.Where(n => n.FBILLNO == billNo).FirstOrDefault();
if (dataRow != null)
{
return Convert.ToDecimal(dataRow.FALLMATCHAMOUNT);
}
return 0m;
}
public DynamicObject GetSaleOrderByBillNoAndOrgId(string orgId, string billNo)
{
var sqlTemp = @"/*dialect*/SELECT
*
FROM
T_SAL_ORDER t1
WHERE
1 = 1
AND t1.FSALEORGID = '{0}'
AND t1.FBILLNO = '{1}'
";
var sql = string.Format(sqlTemp, orgId, billNo);
var result = DBServiceHelper.ExecuteDynamicObject(this.ctx, sql);
if (result.Count == 0)
{
throw new Exception($"组织:{orgId},没有找到编号为 {billNo} 的销售订单");
}
return result[0];
}
public List<SaleExecuteOut> GetSaleOrderReceiveAmountByDate(string orgId, DateTime startDate, DateTime endDate)
{
ReportDataParam param = new ReportDataParam()
{
ReturnJsonData = true,
FieldKeys = "FSALEORGNAME,FBILLNO,FDate,FALLMATCHAMOUNT",
IsVerifyBaseDataField = true,
Model = new Model()
{
FSaleOrgList = orgId,
FSoFromDate = startDate,
FSoToDate = startDate,
FFormCloseStatus = "ALL",
FFormStatus = "C",
FPriceFrom = "SALORDERBILL",
FBusCloseStatus = "ALL",
FMergingSOHeader = true,
FIncludedUnfilledOrders = false,
FIsRecWithMat = true,
}
};
var paramString = JsonConvert.SerializeObject(param);
var reusltString = WebApiServiceCall.GetSysReportData(this.ctx, "SAL_DetailReport", paramString).ToString();
var result = JsonConvert.DeserializeObject<KingdeeResult<SaleExecuteOut>>(reusltString);
var rows = result.Result.Rows;
var dataRow = rows.Where(n => n.FBILLNO.Trim() == string.Empty).ToList();
return dataRow;
}
}
}

107
Services/SaleSicsService.cs Normal file
View File

@@ -0,0 +1,107 @@
using Kingdee.BOS;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.FIN.App.Core.Match.Object;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GZ_LTHPilot_ORDER.Service
{
/// <summary>
/// 销售发票服务类
/// </summary>
public class SaleSicsService
{
private Context ctx;
public SaleSicsService(Context ctx)
{
this.ctx = ctx;
}
/// <summary>
/// 刷新销售订单累计开票金额
/// </summary>
/// <param name="saleOrderId"></param>
/// <returns></returns>
public int UpdateSaleOrderSumSicsamountBySaleOrder(DynamicObject saleOrder)
{
// 销售订单ID
var saleOrderId = saleOrder["FID"].ToString();
// 纸质合同号
var contractNo = saleOrder["F_CONTRACTNUMBER"].ToString();
// 销售组织Id
var saleOrgId = saleOrder["FSALEORGID"].ToString();
var sqlTemp = @"/*dialect*/UPDATE t1
SET
t1.F_INVOICEAMOUNT = TEMP1.FAFTERTOTALTAX
FROM
T_SAL_ORDER t1
INNER JOIN (
SELECT
FSALEORGID,
F_PaperNumber,
SUM(FAFTERTOTALTAX) FAFTERTOTALTAX
FROM
(
SELECT
FSALEORGID, -- 销售组织
F_PaperNumber, -- 纸质合同号
ISNULL (FAFTERTOTALTAX, 0) FAFTERTOTALTAX -- 价税合计本币
FROM
T_IV_SALESIC
WHERE
1 = 1
AND FDOCUMENTSTATUS = 'C'
AND FCANCELSTATUS = 'A'
AND FSALEORGID = '{0}'
AND F_PaperNumber = '{1}'
UNION ALL
SELECT
'100302' FSALEORGID, -- 销售组织
合同号 F_PaperNumber, -- 纸质合同号
SUM(ISNULL (专票金额, 0) + ISNULL (普票金额, 0)) FAFTERTOTALTAX -- 价税合计本币
FROm
dbo.oldk3seorder0701
WHERE
1 = 1
AND 合同号 = '{1}'
GROUP BY
合同号
) temp02
GROUP BY
FSALEORGID,
F_PaperNumber
) TEMP1 ON t1.F_CONTRACTNUMBER = TEMP1.F_PaperNumber
AND t1.FSALEORGID = TEMP1.FSALEORGID
WHERE
t1.FID = '{2}'
";
var sql = string.Format(sqlTemp, saleOrgId, contractNo, saleOrderId);
return DBServiceHelper.Execute(ctx, sql);
}
/// <summary>
///
/// </summary>
/// <param name="approvedDate"></param>
/// <returns></returns>
public DynamicObjectCollection GetSaleSiceListByApprovedDate(DateTime approvedDate)
{
var sqlTemp = @"/*dialect*/SELECT DISTINCT
t1.FSALEORGID,
ISNULL(t1.F_PaperNumber, '') contractNo
FROM
T_IV_SALESIC t1
WHERE
1 = 1
AND t1.FAPPROVEDATE > '{0}'
";
var sql = string.Format(sqlTemp, approvedDate.ToString("yyyy-MM-dd HH:mm:dd"));
return DBServiceHelper.ExecuteDynamicObject(ctx, sql);
}
}
}