Piolot_Order_TH/Services/SaleOrderService.cs

243 lines
8.6 KiB
C#
Raw Normal View History

2025-08-08 09:00:56 +08:00
using Gatedge.Enpower.BOS.PlugIn.Utils;
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;
2025-07-30 17:28:36 +08:00
using Kingdee.BOS.Util;
using Kingdee.BOS.WebApi.FormService;
using Kingdee.K3.FIN.App.Core.Match.Object;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
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>
/// K3退货金额原币取数逻辑K3退货金额除以销售订单汇率=K3退货金额原币
/// </summary>
/// <param name="contractNo">纸质合同号</param>
/// <param name="rate">销售订单汇率</param>
/// <returns></returns>
public decimal GetK3SaleOrderRetrunAmount(string contractNo, string rate)
{
var sqlTemp = @"/*dialect*/SELECT
ROUND(ISNULL (SUM(退), 0) / {1}, 2) Amount
FROM
oldk3seorder0701 t1
WHERE
1 = 1
AND t1. = '{0}'
";
var sql = string.Format(sqlTemp, contractNo, rate);
var result = DBServiceHelper.ExecuteDynamicObject(ctx, sql);
return Convert.ToDecimal(result[0]["Amount"]);
}
/// <summary>
/// 云星空的退货金额取数逻辑:取已审核的退货通知单的表头字段 ”源头销售订单单号#“ =本销售订单编号的退货通知单原币价税合计金额
/// </summary>
/// <param name="billNo">单据编号</param>
/// <returns></returns>
public decimal GetSaleOrderRetrunAmount(string billNo)
{
var sqlTemp = @"/*dialect*/SELECT
ISNULL (SUM(FBILLALLAMOUNT), 0) Amount
FROM
T_SAL_RETURNNOTICE t1
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 result = DBServiceHelper.ExecuteDynamicObject(ctx, sql);
return Convert.ToDecimal(result[0]["Amount"]);
}
/// <summary>
/// 订单明细正数的物料原币价税合计(只取退补类型不等于“退回“的物料明细)
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public decimal GetSaleOrderAmount(string id)
{
var sqlTemp = @"/*dialect*/SELECT
ISNULL (SUM(t1e_f.FALLAMOUNT), 0) Amount
FROM
T_SAL_ORDER t1
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 result = DBServiceHelper.ExecuteDynamicObject(ctx, sql);
return Convert.ToDecimal(result[0]["Amount"]);
}
/// <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,
2025-08-05 23:41:16 +08:00
FSoFromDate = date.AddDays(-30),
FSoToDate = date.AddDays(30),
FSaleOFrom = billNo,
FSaleOTo = billNo,
FFormCloseStatus = "ALL",
2025-08-05 23:41:16 +08:00
FFormStatus = "ALL",
FPriceFrom = "SALORDERBILL",
FBusCloseStatus = "ALL",
FMergingSOHeader = true,
2025-08-05 13:54:07 +08:00
FIncludedUnfilledOrders = true,
FIsRecWithMat = true,
2025-08-05 23:41:16 +08:00
FSuite = "All",
FSetAccountType = "ALL",
FIsGroup = false,
FIncludedFree = true
}
};
var paramString = JsonConvert.SerializeObject(param);
2025-07-30 17:28:36 +08:00
var resultDict = WebApiServiceCall.GetSysReportData(this.ctx, "SAL_DetailReport", paramString);
var resultString = JsonConvert.SerializeObject(resultDict);
var result = JsonConvert.DeserializeObject<KingdeeResult<SaleExecuteOut>>(resultString);
var rows = result.Result.Rows;
2025-08-05 23:41:16 +08:00
var dataRow = rows.Where(n => n.FBILLNO == billNo).ToList();
if (dataRow.Count() == 0)
{
return 0m;
}
2025-08-05 23:41:16 +08:00
if (dataRow[0].FALLMATCHAMOUNT.IsNullOrEmptyOrWhiteSpace())
{
return 0m;
}
2025-08-05 23:41:16 +08:00
return Convert.ToDecimal(dataRow[0].FALLMATCHAMOUNT);
}
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 = endDate,
FFormCloseStatus = "ALL",
2025-08-05 23:41:16 +08:00
FFormStatus = "ALL",
FPriceFrom = "SALORDERBILL",
FBusCloseStatus = "ALL",
FMergingSOHeader = true,
2025-08-05 13:54:07 +08:00
FIncludedUnfilledOrders = true,
FIsRecWithMat = true,
2025-08-05 23:41:16 +08:00
FSuite = "All",
FSetAccountType = "ALL",
FIsGroup = false,
FIncludedFree = true
}
};
var paramString = JsonConvert.SerializeObject(param);
2025-08-08 09:00:56 +08:00
LogUtil.Log("paramString", paramString);
2025-07-30 17:28:36 +08:00
var resultDict = WebApiServiceCall.GetSysReportData(this.ctx, "SAL_DetailReport", paramString);
var resultString = JsonConvert.SerializeObject(resultDict);
2025-08-08 09:00:56 +08:00
LogUtil.Log("resultString", resultString);
2025-07-30 17:28:36 +08:00
var result = JsonConvert.DeserializeObject<KingdeeResult<SaleExecuteOut>>(resultString);
2025-08-02 02:30:43 +08:00
if (result.Result.RowCount == 0)
{
return new List<SaleExecuteOut>();
}
var rows = result.Result.Rows;
2025-08-02 02:30:43 +08:00
2025-07-30 17:28:36 +08:00
var dataRow = rows.Where(n => n.FBILLNO.Trim() != string.Empty).Select(n => new SaleExecuteOut
{
FBILLNO = n.FBILLNO,
FDate = n.FDate,
FSALEORGNAME = n.FSALEORGNAME,
FALLMATCHAMOUNT = n.FALLMATCHAMOUNT.IsNullOrEmptyOrWhiteSpace() ? "0" : n.FALLMATCHAMOUNT.Replace(",", "").Trim(),
}).ToList();
return dataRow;
}
}
}