Piolot_Order_TH/Services/SaleOrderService.cs
Administrator 69e8aceed5 0
2025-08-08 11:13:12 +08:00

245 lines
9.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
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,
FSoFromDate = date.AddDays(-30).ToString("yyyy-MM-dd HH:mm:ss"),
FSoToDate = date.AddDays(30).ToString("yyyy-MM-dd HH:mm:ss"),
FSaleOFrom = billNo,
FSaleOTo = billNo,
FFormCloseStatus = "ALL",
FFormStatus = "ALL",
FPriceFrom = "SALORDERBILL",
FBusCloseStatus = "ALL",
FMergingSOHeader = true,
FIncludedUnfilledOrders = true,
FIsRecWithMat = true,
FSuite = "All",
FSetAccountType = "ALL",
FIsGroup = false,
FIncludedFree = true
}
};
var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
var paramString = JsonConvert.SerializeObject(param, Formatting.Indented, jsonSetting);
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;
var dataRow = rows.Where(n => n.FBILLNO == billNo).ToList();
if (dataRow.Count() == 0)
{
return 0m;
}
if (dataRow[0].FALLMATCHAMOUNT.IsNullOrEmptyOrWhiteSpace())
{
return 0m;
}
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.ToString("yyyy-MM-dd HH:mm:ss"),
FSoToDate = endDate.ToString("yyyy-MM-dd HH:mm:ss"),
FFormCloseStatus = "ALL",
FFormStatus = "ALL",
FPriceFrom = "SALORDERBILL",
FBusCloseStatus = "ALL",
FMergingSOHeader = true,
FIncludedUnfilledOrders = true,
FIsRecWithMat = true,
FSuite = "All",
FSetAccountType = "ALL",
FIsGroup = false,
FIncludedFree = true
}
};
var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
var paramString = JsonConvert.SerializeObject(param, Formatting.Indented, jsonSetting);
//LogUtil.Log("paramString", paramString);
var resultDict = WebApiServiceCall.GetSysReportData(this.ctx, "SAL_DetailReport", paramString);
var resultString = JsonConvert.SerializeObject(resultDict);
//LogUtil.Log("resultString", resultString);
var result = JsonConvert.DeserializeObject<KingdeeResult<SaleExecuteOut>>(resultString);
if (result.Result.RowCount == 0)
{
return new List<SaleExecuteOut>();
}
var rows = result.Result.Rows;
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;
}
}
}