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 { /// /// 销售订单服务类 /// public class SaleOrderService { private Context ctx; public SaleOrderService(Context ctx) { this.ctx = ctx; } /// /// K3退货金额原币取数逻辑:K3退货金额除以销售订单汇率=K3退货金额原币 /// /// 纸质合同号 /// 销售订单汇率 /// 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"]); } /// /// 云星空的退货金额取数逻辑:取已审核的退货通知单的表头字段 ”源头销售订单单号#“ =本销售订单编号的退货通知单原币价税合计金额 /// /// 单据编号 /// 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"]); } /// /// 订单明细正数的物料原币价税合计(只取退补类型不等于“退回“的物料明细) /// /// /// 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"]); } /// /// 根据纸质合同号、组织获取销售订单 /// /// 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; } /// /// 获取销售订单收款金额 /// /// 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), FSoToDate = date.AddDays(30), 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 paramString = JsonConvert.SerializeObject(param); var resultDict = WebApiServiceCall.GetSysReportData(this.ctx, "SAL_DetailReport", paramString); var resultString = JsonConvert.SerializeObject(resultDict); var result = JsonConvert.DeserializeObject>(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 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", FFormStatus = "ALL", FPriceFrom = "SALORDERBILL", FBusCloseStatus = "ALL", FMergingSOHeader = true, FIncludedUnfilledOrders = true, FIsRecWithMat = true, FSuite = "All", FSetAccountType = "ALL", FIsGroup = false, FIncludedFree = true } }; var paramString = JsonConvert.SerializeObject(param); 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>(resultString); if (result.Result.RowCount == 0) { return new List(); } 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; } } }