From ada33aa1f845a396d5f81cb5525009ae425a378f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=96=8C?= <1324361213@qq.com> Date: Thu, 21 Aug 2025 21:28:37 +0800 Subject: [PATCH] 1 --- GZ_LTHReportForms.csproj | 135 ++++++- JiXiaoKanBan/ResultsKanbanSumReport.cs | 13 +- JiXiaoKanBan/ResultsKanbanSumReport_bak.cs | 215 +++++++++++ Services/JixiaoKanBanService.cs | 415 +++++++++++++++++++++ Services/TempTableService.cs | 48 +++ 5 files changed, 816 insertions(+), 10 deletions(-) create mode 100644 JiXiaoKanBan/ResultsKanbanSumReport_bak.cs create mode 100644 Services/JixiaoKanBanService.cs create mode 100644 Services/TempTableService.cs diff --git a/GZ_LTHReportForms.csproj b/GZ_LTHReportForms.csproj index b80a78f..a19fa45 100644 --- a/GZ_LTHReportForms.csproj +++ b/GZ_LTHReportForms.csproj @@ -37,6 +37,10 @@ ..\..\GZ_LTHUPDATEVIEW\bin\Debug\Kingdee.BOS.App.dll + + False + Library\Kingdee.BOS.App.Core.dll + ..\..\GZ_LTHUPDATEVIEW\bin\Debug\Kingdee.BOS.Contracts.dll @@ -46,17 +50,129 @@ ..\..\GZ_LTHYJZZHTH\bin\Debug\Kingdee.BOS.DataEntity.dll - - ..\..\派诺裴豪-报表\派诺报表\代码\Pilot.Report\Pilot.Report\Pilot.Report.Exploitation\bin\Debug\NPOI.dll + + False + Library\Kingdee.BOS.ServiceHelper.dll - - ..\..\派诺裴豪-报表\派诺报表\代码\Pilot.Report\Pilot.Report\Pilot.Report.Exploitation\bin\Debug\NPOI.OOXML.dll + + False + Library\Kingdee.BOS.VerificationHelper.dll - - ..\..\派诺裴豪-报表\派诺报表\代码\Pilot.Report\Pilot.Report\Pilot.Report.Exploitation\bin\Debug\NPOI.OpenXml4Net.dll + + False + Library\Kingdee.BOS.Web.dll - - ..\..\派诺裴豪-报表\派诺报表\代码\Pilot.Report\Pilot.Report\Pilot.Report.Exploitation\bin\Debug\NPOI.OpenXmlFormats.dll + + False + Library\Kingdee.BOS.Web.HTML.dll + + + False + Library\Kingdee.BOS.Web.HTML.Core.dll + + + False + Library\Kingdee.BOS.WebApi.FormService.dll + + + False + Library\Kingdee.K3.BD.Contracts.dll + + + False + Library\Kingdee.K3.BD.ServiceHelper.dll + + + False + Library\Kingdee.K3.Core.dll + + + False + Library\Kingdee.K3.FIN.Business.PlugIn.dll + + + False + Library\Kingdee.K3.FIN.Core.dll + + + False + Library\Kingdee.K3.FIN.HS.Business.PlugIn.dll + + + False + Library\Kingdee.K3.FIN.HS.Common.BusinessEntity.dll + + + False + Library\Kingdee.K3.FIN.HS.Contracts.dll + + + False + Library\Kingdee.K3.FIN.HS.ServiceHelper.dll + + + False + Library\Kingdee.K3.FIN.ServiceHelper.dll + + + False + Library\Kingdee.K3.MFG.App.dll + + + False + Library\Kingdee.K3.MFG.BusinessCommon.dll + + + False + Library\Kingdee.K3.MFG.Contracts.dll + + + False + Library\Kingdee.K3.MFG.PLN.App.Core.dll + + + False + Library\Kingdee.K3.MFG.PLN.App.MrpModel.dll + + + False + Library\Kingdee.K3.MFG.PLN.Business.PlugIn.dll + + + False + Library\Kingdee.K3.MFG.PLN.Report.PlugIn.dll + + + False + Library\Kingdee.K3.MFG.ServiceHelper.dll + + + False + Library\Kingdee.K3.SCM.App.Core.dll + + + False + Library\Kingdee.K3.SCM.Common.BusinessEntity.dll + + + False + Library\Newtonsoft.Json.dll + + + False + Library\NPOI.dll + + + False + Library\NPOI.OOXML.dll + + + False + Library\NPOI.OpenXml4Net.dll + + + False + Library\NPOI.OpenXmlFormats.dll @@ -69,9 +185,12 @@ + + + diff --git a/JiXiaoKanBan/ResultsKanbanSumReport.cs b/JiXiaoKanBan/ResultsKanbanSumReport.cs index d251b16..836535a 100644 --- a/JiXiaoKanBan/ResultsKanbanSumReport.cs +++ b/JiXiaoKanBan/ResultsKanbanSumReport.cs @@ -68,11 +68,20 @@ namespace GZ_LTHReportForms.JiXiaoKanBan var salesPersons = customFilter["F_Salesperson"] as DynamicObjectCollection; if (salesPersons.Count > 0) { - reportTitles.AddTitle("F_Salesperson", string.Join(",", salesPersons.Select(n => n["Name"].ToString()))); + reportTitles.AddTitle("F_Salesperson", string.Join(",", salesPersons.Select(n => (n["F_Salesperson"] as DynamicObject)["Name"].ToString()))); } var startDate = Convert.ToDateTime(customFilter["FSDate"]); var endDate = Convert.ToDateTime(customFilter["FEDate"]); + if (startDate.Year != endDate.Year) + { + throw new Exception("开始时间和结束时间必须是同一年份"); + } + if (startDate > endDate) + { + throw new Exception("开始时间不能大于结束时间"); + } + reportTitles.AddTitle("FStartDate", startDate.ToString("yyyy-MM-dd")); reportTitles.AddTitle("FEndDate", endDate.ToString("yyyy-MM-dd")); @@ -102,7 +111,7 @@ namespace GZ_LTHReportForms.JiXiaoKanBan customFilter["FEDate"]).ToString("yyyy-MM-dd"); string sql = string.Format(@"/*dialect*/ - EXEC GZ_JXKBHZB_LTH '{0}','{1}' + EXEC GZ_JXKBHZB_LTH '{0}','{1}','1' SELECT ROW_NUMBER() OVER (ORDER BY F_SBU DESC) AS FID, ROW_NUMBER() OVER (ORDER BY F_SBU DESC) AS FIDENTITYID, diff --git a/JiXiaoKanBan/ResultsKanbanSumReport_bak.cs b/JiXiaoKanBan/ResultsKanbanSumReport_bak.cs new file mode 100644 index 0000000..7298ab8 --- /dev/null +++ b/JiXiaoKanBan/ResultsKanbanSumReport_bak.cs @@ -0,0 +1,215 @@ +using GZ_LTHReportForms.Services; +using Kingdee.BOS; +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Contracts.Report; +using Kingdee.BOS.Core.Enums; +using Kingdee.BOS.Core.Report; +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_LTHReportForms.JiXiaoKanBan +{ + [Description("【列表插件】绩效看板汇总报表【报表】"), HotUpdate] + public class ResultsKanbanSumReport_bak : SysReportBaseService + { + /// + /// 初始化 + /// + public override void Initialize() + { + base.Initialize(); + this.ReportProperty.ReportName = new LocaleValue("绩效看板汇总", base.Context.UserLocale.LCID); + this.ReportProperty.IsUIDesignerColumns = false; + // 简单账表类型:普通、树形、分页 + this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL; + this.IsCreateTempTableByPlugin = true; + // + this.IsCreateTempTableByPlugin = true; + //支持分组汇总 + this.ReportProperty.IsGroupSummary = true; + // + this.ReportProperty.SimpleAllCols = false; + // + this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true; + + // 设置精度控制 + var list = new List + { + new DecimalControlField("FDECIMALS", "OrigInvoiceAmount"), + new DecimalControlField("FDECIMALS", "ExchangeRate"), + new DecimalControlField("FDECIMALS", "InvoiceAmountTHB"), + new DecimalControlField("FDECIMALS", "MonthEndExRate"), + new DecimalControlField("FDECIMALS", "RevaluationAountInTHB"), + new DecimalControlField("FDECIMALS", "UnrealizedGainLoss"), + }; + this.ReportProperty.DecimalControlFieldList = list; + } + + /// + /// 填充过滤条件 + /// + /// + /// + public override ReportTitles GetReportTitles(IRptParams filter) + { + + ReportTitles reportTitles = new ReportTitles(); + DynamicObject customFilter = filter.FilterParameter.CustomFilter; + if (customFilter == null) + { + return reportTitles; + } + // 供需组织 List + var salesPersons = customFilter["F_Salesperson"] as DynamicObjectCollection; + if (salesPersons.Count > 0) + { + reportTitles.AddTitle("F_Salesperson", string.Join(",", salesPersons.Select(n => (n["F_Salesperson"] as DynamicObject)["Name"].ToString()))); + } + var startDate = Convert.ToDateTime(customFilter["FSDate"]); + var endDate = Convert.ToDateTime(customFilter["FEDate"]); + reportTitles.AddTitle("FStartDate", startDate.ToString("yyyy-MM-dd")); + reportTitles.AddTitle("FEndDate", endDate.ToString("yyyy-MM-dd")); + return reportTitles; + } + /// + /// 显示报表数据 + /// + /// + /// + public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName) + { + base.BuilderReportSqlAndTempTable(filter, tableName); + //获取过滤条件 + string Filter = GetFilterWhere(filter); + + + DynamicObject customFilter = filter.FilterParameter.CustomFilter; + DateTime startDate = Convert.ToDateTime(customFilter["FSDate"]); + DateTime endDate = Convert.ToDateTime(customFilter["FEDate"]); + if (startDate.Year != endDate.Year) + { + throw new Exception("开始时间和结束时间必须是同一年份"); + } + if (startDate > endDate) + { + throw new Exception("开始时间不能大于结束时间"); + } + JixiaoKanBanService jixiaoKanBanService = new JixiaoKanBanService(this.Context); + var thisDateChange = jixiaoKanBanService.GetThisDateChangedSaleOrder(startDate, endDate); + var lastDateChange = jixiaoKanBanService.GetLastDateChangedSaleOrder(startDate); + var excludeOrder = jixiaoKanBanService.GetExcludeOrder(); + // 获取当期和往期的金额 + var thisDateOrderAmount = jixiaoKanBanService.GetThisDateOrderAmount(startDate, endDate); + var lastDateOrderAmount = jixiaoKanBanService.GetLastDateOrderAmount(startDate); + var sumAmount = jixiaoKanBanService.GetThisDateSumAmount(); + string sql = $@"/*dialect*/SELECT + *, + 0 本年华夏云联业绩_万元, + 0 去年合计业绩额_万元, + 0 回款额_万元, + 0 已发货应收款_万元, + 0 已到期应收款_万元, + ROW_NUMBER() OVER ( + ORDER BY + 销售员 + ) FIDENTITYID INTO {tableName} +FROM + {sumAmount} +"; + DBUtils.Execute(this.Context, sql); + } + + + /// + /// 报表列表头 + /// + /// + /// + public override ReportHeader GetReportHeaders(IRptParams filter) + { + base.GetReportHeaders(filter); + DynamicObject customFilter = filter.FilterParameter.CustomFilter; + DateTime startDate = Convert.ToDateTime(customFilter["FSDate"]); + ReportHeader header = new ReportHeader(); + var year = startDate.Year; + + header.AddChild("F_SBU", new LocaleValue("SBU"), SqlStorageType.Sqlvarchar); + header.AddChild("F_MXQY", new LocaleValue("明细区域"), SqlStorageType.Sqlvarchar); + header.AddChild("销售员", new LocaleValue("销售员"), SqlStorageType.Sqlvarchar); + header.AddChild("本年业绩目标_万元", new LocaleValue("" + year + "年业绩目标(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("本年派诺业绩_万元", new LocaleValue("" + year + "派诺业绩(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("本年兴诺业绩_万元", new LocaleValue("" + year + "兴诺业绩(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("本年武汉派诺_万元", new LocaleValue("" + year + "武汉派诺(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("本年碳索业绩_万元", new LocaleValue("" + year + "碳索业绩(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("本年香港派诺业绩_万元", new LocaleValue("" + year + "香港派诺业绩(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("本年华夏云联业绩_万元", new LocaleValue("" + year + "华夏云联业绩(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("本年诺瓦数能业绩_万元", new LocaleValue("" + year + "诺瓦数能业绩(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("往年订单变更金额_万元", new LocaleValue("往年订单变更金额(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("本年业绩合计_万元", new LocaleValue("" + year + "合计业绩额(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("达标率", new LocaleValue("达标率"), SqlStorageType.Sqlvarchar); + header.AddChild("去年合计业绩额_万元", new LocaleValue("" + (year - 1) + "合计业绩额(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("同比增长率", new LocaleValue("同比增长率"), SqlStorageType.Sqlvarchar); + header.AddChild("本年回款目标_万元", new LocaleValue("" + year + "回款目标(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("回款额_万元", new LocaleValue("回款额(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("回款率", new LocaleValue("回款率"), SqlStorageType.Sqlvarchar); + header.AddChild("已发货应收款_万元", new LocaleValue("已发货应收款(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("已到期应收款_万元", new LocaleValue("已到期应收款(万元)"), SqlStorageType.SqlDecimal); + + foreach (var item in header.GetChilds()) + { + item.Width = 160; + } + return header; + } + + + + //报表过滤条件-多选销售员 + private string GetFilterWhere(IRptParams filter) + { + DynamicObject customFilter = filter.FilterParameter.CustomFilter; + StringBuilder strwhere = new StringBuilder(); //创建字符串构建器; + strwhere.AppendLine("WHERE 1=1"); + var xsy = customFilter["F_Salesperson"] as DynamicObjectCollection; + if (xsy.Count > 0) + { + List xsyList = new List(); + //循环获取物料信息 + foreach (DynamicObject dobj in xsy) + { + DynamicObject dynamic = dobj["F_Salesperson"] as DynamicObject; + xsyList.Add(dynamic["Name"].ToString()); + } + strwhere.AppendLine(string.Format(@"AND 销售员 IN ({0})", string.Join(",", xsyList.Select(x => $"'{x}'")))); + } + return strwhere.ToString(); + } + + //设置报表合计列 + public override List GetSummaryColumnInfo(IRptParams filter) + { + var result = base.GetSummaryColumnInfo(filter); + result.Add(new SummaryField("本年业绩目标_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("本年派诺业绩_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("本年兴诺业绩_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("本年武汉派诺_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("本年碳索业绩_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("本年香港派诺业绩_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("本年华夏云联业绩_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("往年订单变更金额_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("本年业绩合计_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("去年合计业绩额_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("回款额_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("已发货应收款_万元", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("已到期应收款_万元", BOSEnums.Enu_SummaryType.SUM)); + return result; + } + + } +} diff --git a/Services/JixiaoKanBanService.cs b/Services/JixiaoKanBanService.cs new file mode 100644 index 0000000..87ee415 --- /dev/null +++ b/Services/JixiaoKanBanService.cs @@ -0,0 +1,415 @@ +using Kingdee.BOS; +using Kingdee.BOS.App; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Kingdee.BOS.ServiceHelper; + +namespace GZ_LTHReportForms.Services +{ + public class JixiaoKanBanService + { + /// + /// 金蝶上下文类 + /// + private Context ctx; + /// + /// 临时表列表 + /// + private Dictionary tempTableDict; + /// + /// 临时表服务 + /// + private TempTableService tempTableService; + + public JixiaoKanBanService(Context ctx) + { + this.ctx = ctx; + tempTableService = new TempTableService(ctx); + tempTableDict = new Dictionary(); + } + + public void DeleteTempTable() + { + foreach (var item in tempTableDict.Values) + { + tempTableService.DropTempTable(item); + } + } + + /// + /// 获取当期变更单 + /// + /// + /// + /// + public string GetThisDateChangedSaleOrder(DateTime startDate, DateTime endDate) + { + var ThisYearChange = tempTableService.CreateTempTable(); + this.tempTableDict.Add("ThisYearChange", ThisYearChange); + var sql = $@"/*dialect*/SELECT + MAX(t1.FID) ChangeOrderId, -- 变更单ID + t1.FPKIDX + INTO {ThisYearChange} +FROM + T_SAL_XORDER t1 + INNER JOIN T_SAL_XORDERFIN t1fin ON t1.FID = t1fin.FID +WHERE + 1 = 1 + AND t1fin.FISACTIVE = 'B' + AND t1fin.FACTIVEDATE >= {startDate.ToString("yyyy-MM-dd")} + AND t1fin.FACTIVEDATE <= {endDate.ToString("yyyy-MM-dd")} +GROUP BY + t1.FPKIDX; +"; + DBServiceHelper.Execute(ctx, sql); + return ThisYearChange; + } + + /// + /// 获取往期变更单 + /// + /// + /// + public string GetLastDateChangedSaleOrder(DateTime startDate) + { + var LastYearChange = tempTableService.CreateTempTable(); + this.tempTableDict.Add("LastYearChange", LastYearChange); + var sql = $@"/*dialect*/SELECT + MAX(t1.FID) ChangeOrderId, -- 变更单ID + t1.FPKIDX + INTO {LastYearChange} +FROM + T_SAL_XORDER t1 + INNER JOIN T_SAL_XORDERFIN t1fin ON t1.FID = t1fin.FID +WHERE + 1 = 1 + AND t1fin.FISACTIVE = 'B' + AND t1fin.FACTIVEDATE <= {startDate.ToString("yyyy-MM-dd")} +GROUP BY + t1.FPKIDX; +"; + DBServiceHelper.Execute(ctx, sql); + return LastYearChange; + } + + /// + /// 获取需要排除的销售订单 + /// + /// + public string GetExcludeOrder() + { + var ExcludeOrder = tempTableService.CreateTempTable(); + this.tempTableDict.Add("ExcludeOrder", ExcludeOrder); + var sql = $@"/*dialect*/SELECT + A.FID AS 'FID' --,a.FSALERID, + INTO {ExcludeOrder} +FROM + T_SAL_ORDER A --销售订单表头 + INNER JOIN T_ORG_ORGANIZATIONS_L B ON A.FSALEORGID = B.FORGID --组织表 + INNER JOIN T_BD_CUSTOMER_L C ON C.FCUSTID = A.FCUSTID + AND C.FLOCALEID = 2052 --客户表 + LEFT JOIN V_BD_SALESMAN_L L ON L.fid = A.FSALERID + LEFT JOIN T_PerformanceSharing M ON M.FSOURCEBILLNO = A.FBILLNO + AND M.FDOCUMENTSTATUS = 'C' --业绩分摊单表头 + LEFT JOIN T_PerformanceSharingEntry N ON N.FID = M.FID --业绩分摊单表体 + LEFT JOIN V_BD_SALESMAN_L O ON O.fid = N.FSALEID + LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACO ON ACO.名称 = O.FNAME --对接人力信息 + LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACL ON ACL.名称 = L.FNAME --对接人力信息 +WHERE + A.FSALEORGID = 100302 -- 销售组织=珠海派诺 + AND ( + ACO.区域 = '碳索智控' + OR ACL.区域 = '碳索智控' + OR C.FNAME IN ('派诺科技(香港有限公司)', '武汉派诺科技发展有限公司') -- + OR ( + C.FCUSTID = 1150173 + AND ( + ACO.区域 = '决策团队' + OR ACL.区域 = '决策团队' + ) + ) --1150173对应的是珠海兴诺能源技术有限公司 + OR L.FNAME = '兴诺总' + OR A.FID IN (110185, 207800) -- 样机订单 + ) +"; + DBServiceHelper.Execute(ctx, sql); + return ExcludeOrder; + } + + /// + /// 全组织根据日期显示订单金额(当期) + /// + /// + /// + /// + public string GetThisDateOrderAmount(DateTime startDate, DateTime endDate) + { + var ThisYearChange = tempTableDict["ThisYearChange"]; + var ExcludeOrder = tempTableDict["ExcludeOrder"]; + var ThisDateOrderAmount = tempTableService.CreateTempTable(); + tempTableDict.Add("ThisDateOrderAmount", ThisDateOrderAmount); + var sql = $@"/*dialect*/SELECT + A.FBILLNO, + A.FSALEORGID AS FSALEORGID, + CASE + WHEN ISNULL (O.FNAME, '') = '' THEN ACL.区域 + ELSE ACO.区域 + END AS 'F_SBU', + CASE + WHEN ISNULL (O.FNAME, '') = '' THEN ACL.明细区域 + ELSE ACO.明细区域 + END AS 'F_MXQY', + CASE + WHEN ISNULL (O.FNAME, '') = '' THEN L.FNAME + ELSE O.FNAME + END AS '销售员', + CASE + WHEN n.FSHARERATE IS NULL THEN CASE + WHEN t1.ChangeOrderId IS NULL THEN ROUND(A.F_AMOUNTSTAR, 10) + ELSE ROUND(t1fen.FBILLALLAMOUNT_LC, 10) + END + ELSE CASE + WHEN t1.ChangeOrderId IS NULL THEN ROUND(A.F_AMOUNTSTAR * (n.FSHARERATE / 100), 10) + ELSE ROUND( + t1fen.FBILLALLAMOUNT_LC * (n.FSHARERATE / 100), + 10 + ) + END + END AS '合同总价' + INTO {ThisDateOrderAmount} +FROM + T_SAL_ORDER A --销售订单表头 + INNER JOIn T_SAL_ORDERFIN A_FIN on A.FID = A_FIN.FID -- 表头财务信息 + LEFT JOIN {ThisYearChange} t1 on t1.FPKIDX = A.FID -- 今年变更的销售订单新变更单 + LEFT JOIN T_SAL_XORDERFIN t1fen on t1.ChangeOrderId = t1fen.FID -- 关联变更单的金额 + LEFT JOIN V_BD_SALESMAN_L L ON L.fid = A.FSALERID + left JOIN T_PerformanceSharing M ON M.FSOURCEBILLNO = A.FBILLNO + AND M.FDOCUMENTSTATUS = 'C' + left JOIN T_PerformanceSharingEntry N ON N.FID = M.FID + LEFT JOIN V_BD_SALESMAN_L O ON O.fid = N.FSALEID + LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACO ON ACO.名称 = O.FNAME + AND ISNULL (ACO.明细区域, '') != '' --对接人力信息 + LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACL ON ACL.名称 = L.FNAME + AND ISNULL (ACL.明细区域, '') != '' --对接人力信息 +WHERE + 1 = 1 + AND A.FAPPROVEDATE >= {startDate.ToString("yyyy-MM-dd")} --订单审核日期 + AND A.FAPPROVEDATE < {endDate.AddDays(1).ToString("yyyy-MM-dd")} --订单审核日期 + AND A.FDocumentStatus = 'C' + AND A.FManualClose <> '1' + AND A.FID NOT IN ( + SELECT + FID + FROM + {ExcludeOrder} + ) + AND A.F_contractnumber NOT LIKE 'Z%' +"; + DBServiceHelper.Execute(ctx, sql); + return ThisDateOrderAmount; + } + + /// + /// 查询全组织根据往期日期显示订单金额 + /// + /// + /// + public string GetLastDateOrderAmount(DateTime startDate) + { + var ThisYearChange = tempTableDict["ThisYearChange"]; + var LastYearChange = tempTableDict["LastYearChange"]; + var ExcludeOrder = tempTableDict["ExcludeOrder"]; + var LastDateOrderAmount = tempTableService.CreateTempTable(); + tempTableDict.Add("LastDateOrderAmount", LastDateOrderAmount); + var sql = $@"/*dialect*/SELECT + A.FBILLNO, + A.FSALEORGID AS FSALEORGID, + CASE + WHEN ISNULL (O.FNAME, '') = '' THEN ACL.区域 + ELSE ACO.区域 + END AS 'F_SBU', + CASE + WHEN ISNULL (O.FNAME, '') = '' THEN ACL.明细区域 + ELSE ACO.明细区域 + END AS 'F_MXQY', + CASE + WHEN ISNULL (O.FNAME, '') = '' THEN L.FNAME + ELSE O.FNAME + END AS '销售员', + CASE + WHEN n.FSHARERATE IS NULL THEN CASE + WHEN t2fen.FBILLALLAMOUNT_LC IS NULL THEN t1fen.FBILLALLAMOUNT_LC - A.F_AMOUNTSTAR + ELSE t1fen.FBILLALLAMOUNT_LC - t2fen.FBILLALLAMOUNT_LC + END + ELSE CASE + WHEN t1.ChangeOrderId IS NULL THEN ROUND( + t1fen.FBILLALLAMOUNT_LC - A.F_AMOUNTSTAR * (n.FSHARERATE / 100), + 10 + ) + ELSE ROUND( + t1fen.FBILLALLAMOUNT_LC - t2fen.FBILLALLAMOUNT_LC * (n.FSHARERATE / 100), + 10 + ) + END + END AS '变更金额' + INTO {LastDateOrderAmount} +FROM + T_SAL_ORDER A --销售订单表头 + INNER JOIn T_SAL_ORDERFIN A_FIN on A.FID = A_FIN.FID -- 表头财务信息 + INNER JOIN {ThisYearChange} t1 on t1.FPKIDX = A.FID -- 当期变更的销售订单新变更单 + LEFT JOIN T_SAL_XORDERFIN t1fen on t1.ChangeOrderId = t1fen.FID -- 关联变更单的金额 + LEFT JOIN {LastYearChange} t2 on t1.FPKIDX = A.FID -- 往期变更的销售订单新变更单 + LEFT JOIN T_SAL_XORDERFIN t2fen on t2.ChangeOrderId = t2fen.FID -- 关联变更单的金额 + LEFT JOIN V_BD_SALESMAN_L L ON L.fid = A.FSALERID + left JOIN T_PerformanceSharing M ON M.FSOURCEBILLNO = A.FBILLNO + AND M.FDOCUMENTSTATUS = 'C' + left JOIN T_PerformanceSharingEntry N ON N.FID = M.FID + LEFT JOIN V_BD_SALESMAN_L O ON O.fid = N.FSALEID + LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACO ON ACO.名称 = O.FNAME + AND ISNULL (ACO.明细区域, '') != '' + LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACL ON ACL.名称 = L.FNAME + AND ISNULL (ACL.明细区域, '') != '' +WHERE + 1 = 1 + AND A.FAPPROVEDATE < {startDate.ToString("yyyy-MM-dd")} --订单审核日期 + AND A.FDocumentStatus = 'C' + AND A.FManualClose <> '1' + AND A.FID NOT IN ( + SELECT + FID + FROM + {ExcludeOrder} + ) + AND A.F_contractnumber NOT LIKE 'Z%' +"; + DBServiceHelper.Execute(ctx, sql); + return LastDateOrderAmount; + } + + + public string GetThisDateSumAmount() + { + var ThisDateOrderAmount = tempTableDict["ThisDateOrderAmount"]; + var LastDateOrderAmount = tempTableDict["LastDateOrderAmount"]; + var SumAmount = tempTableService.CreateTempTable(); + var ThisDateOrderAmountTemp = tempTableService.CreateTempTable(); + var LastDateOrderAmountTemp = tempTableService.CreateTempTable(); + var YJMB = tempTableService.CreateTempTable(); + tempTableDict.Add("SumAmount", SumAmount); + tempTableDict.Add("ThisDateOrderAmountTemp", ThisDateOrderAmountTemp); + tempTableDict.Add("LastDateOrderAmountTemp", LastDateOrderAmountTemp); + tempTableDict.Add("YJMB", YJMB); + var sql1 = $@"/*dialect*/SELECT + F_SBU, + F_MXQY, + 销售员, + ( + SELECT + ISNULL (SUM(合同总价), 0) + FROM + {ThisDateOrderAmount} + WHERE + FSALEORGID = '100302' + ) 本年派诺业绩_万元, + ( + SELECT + ISNULL (SUM(合同总价), 0) + FROM + {ThisDateOrderAmount} + WHERE + FSALEORGID = '100303' + ) 本年兴诺业绩_万元, + ( + SELECT + ISNULL (SUM(合同总价), 0) + FROM + {ThisDateOrderAmount} + WHERE + FSALEORGID = '100305' + ) 本年武汉派诺_万元, + ( + SELECT + ISNULL (SUM(合同总价), 0) + FROM + {ThisDateOrderAmount} + WHERE + FSALEORGID = '438223' + ) 本年碳索业绩_万元, + ( + SELECT + ISNULL (SUM(合同总价), 0) + FROM + {ThisDateOrderAmount} + WHERE + FSALEORGID = '438224' + ) 本年香港派诺业绩_万元, + ( + SELECT + ISNULL (SUM(合同总价), 0) + FROM + {ThisDateOrderAmount} + WHERE + FSALEORGID = '1467475' + ) 本年诺瓦数能业绩_万元 + INTO {ThisDateOrderAmountTemp} +FROM + {ThisDateOrderAmount} t1 +GROUP BY + F_SBU, + F_MXQY, + 销售员 +"; + DBServiceHelper.Execute(ctx, sql1); + + var sql2 = $@"/*dialect*/SELECT + F_SBU, + F_MXQY, + 销售员, + SUM(变更金额) 变更金额 INTO {LastDateOrderAmountTemp} +FROM + {LastDateOrderAmount} t1 +GROUP BY + F_SBU, + F_MXQY, + 销售员 +"; + DBServiceHelper.Execute(ctx, sql2); + + var sql3 = $@"/*dialect*/SELECT + FORMAT (A.F_VRYF_Date_83g, 'yyyy') AS '业绩日期', + C.FNAME AS '销售员', + B.FPerformanceTargets AS '业绩目标_万元', + B.FPAYMENTSUM AS '回款目标_万元' + INTO {YJMB} +FROM + MBBA_t_Cust100002 A + INNER JOIN MBBA_t_Cust_Entry100003 B ON A.FID = B.FID + INNEr JOIN V_BD_SALESMAN_L C ON C.fid = B.FNAME +WHERE + FORMAT (A.F_VRYF_Date_83g, 'yyyy') = '{2025}' +"; + DBServiceHelper.Execute(ctx, sql3); + + var sql = $@"/*dialect*/SELECT + t1.*, + t2.变更金额 往年订单变更金额_万元, + t3.业绩日期, + t3.业绩目标_万元 本年业绩目标_万元, + t3.回款目标_万元, + 本年派诺业绩_万元 + 本年兴诺业绩_万元 + 本年武汉派诺_万元 + 本年碳索业绩_万元 + 本年香港派诺业绩_万元 + 本年诺瓦数能业绩_万元 + 变更金额 AS 本年业绩合计_万元 + INTO {SumAmount} +FROM + {ThisDateOrderAmountTemp} t1 + LEFT JOIN {LastDateOrderAmountTemp} t2 ON t1.F_SBU = t2.F_SBU + AND t1.F_MXQY = t2.F_MXQY + AND t1.销售员 = t2.销售员 + LEFT JOIN {YJMB} t3 ON t1.销售员 = t3.销售员 +"; + DBServiceHelper.Execute(ctx, sql); + return SumAmount; + } + } +} diff --git a/Services/TempTableService.cs b/Services/TempTableService.cs new file mode 100644 index 0000000..8f6e0fc --- /dev/null +++ b/Services/TempTableService.cs @@ -0,0 +1,48 @@ +using Kingdee.BOS; +using Kingdee.BOS.App; +using Kingdee.BOS.Contracts; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GZ_LTHReportForms.Services +{ + internal class TempTableService + { + + private Context ctx; + + + public TempTableService(Context ctx) + { + this.ctx = ctx; + } + /// + /// 删除临时表 + /// + /// + /// + public void DropTempTable(string tableName) + { + if (!tableName.IsNullOrEmptyOrWhiteSpace()) + { + IDBService dbservice = ServiceHelper.GetService(); + dbservice.DeleteTemporaryTableName(ctx, new string[] { tableName }); + } + } + /// + /// 创建临时表 + /// + /// + /// + public string CreateTempTable() + { + IDBService dbservice = ServiceHelper.GetService(); + string[] temptables = dbservice.CreateTemporaryTableName(ctx, 1); + return temptables[0]; + } + } +}