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; } } }