From 75de7b19e8bcf48f98d87104e9711fdf85a8a6f1 Mon Sep 17 00:00:00 2001 From: king Date: Wed, 18 Mar 2026 08:32:25 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E7=BB=BC=E5=90=88=E9=94=80=E5=94=AE?= =?UTF-8?q?=E6=83=85=E5=86=B5=E8=A1=A8=20=E5=88=86=E7=BB=84=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enhance/example/report/xtsy/zhxsqkLineReportEnhance.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java index 9c0995c..2c09e12 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java @@ -174,9 +174,9 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITGROWTH), 2) as PROFITGROWTH, \n"); //毛利额增长率 executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISPROFITRATE), 2) as THISPROFITRATE, \n"); //本年毛利率 executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN tbl_lgbsa.SAMONEYGROWTH > 0 THEN \n"); + executePluginSql.append(" WHEN ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2) > 0 THEN \n"); executePluginSql.append(" CONCAT('🟢 ', ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2)) \n"); - executePluginSql.append(" WHEN tbl_lgbsa.SAMONEYGROWTH < 0 THEN \n"); + executePluginSql.append(" WHEN ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2) < 0 THEN \n"); executePluginSql.append(" CONCAT('🔴 ', ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS SAMONEYGROWTH, \n");//销售金额增长率 From ed17f7910c9605951b6bb1c7eeef5df5fcbc8eb2 Mon Sep 17 00:00:00 2001 From: king Date: Wed, 18 Mar 2026 11:08:44 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E7=BB=BC=E5=90=88=E9=94=80=E5=94=AE?= =?UTF-8?q?=E6=83=85=E5=86=B5=E8=A1=A8=20=E5=88=86=E7=BB=84=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/report/xtsy/zhxsqkLineReportEnhance.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java index 2c09e12..5501eeb 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java @@ -31,9 +31,17 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { } if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { //年 executePluginSql.append(" tbl_lgbsa.USEYEAR, \n"); + if(!(groupFieldList.contains("usemonth") || params.containsKey("usemonth"))){ + executePluginSql.append(" MAX(USEYEAR) as ny, \n"); //年月 + } } if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { //月 executePluginSql.append(" tbl_lgbsa.USEMONTH, \n"); + if(groupFieldList.contains("useyear") || params.containsKey("useyear")){ + executePluginSql.append(" MAX(CONCAT(USEYEAR, LPAD(USEMONTH, 2, '0'))) as ny, \n"); //年月 + }else{ + executePluginSql.append(" MAX(LPAD(USEMONTH, 2, '0')) as ny, \n"); + } } if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 executePluginSql.append(" tbl_lgbsa.ZONEID, \n"); @@ -55,7 +63,7 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" tbl_lgbsa.GOODSID, \n"); executePluginSql.append(" tbl_lgbsa.GOODSNAME, \n"); } - executePluginSql.append(" MAX(CONCAT(USEYEAR, LPAD(USEMONTH, 2, '0'))) as ny, \n"); //年月 + executePluginSql.append(" GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCEID ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCEID, \n"); //行政区域ID executePluginSql.append(" GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCENAME ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCENAME, \n"); //行政区域名称 executePluginSql.append(" SUM(tbl_lgbsa.MONTHSAQTY) as MONTHSAQTY, \n"); //本月销量 From d789026c869b010308fce13e09d850ae8b83608a Mon Sep 17 00:00:00 2001 From: king Date: Thu, 19 Mar 2026 13:38:31 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E7=BB=BC=E5=90=88=E9=94=80=E5=94=AE?= =?UTF-8?q?=E6=83=85=E5=86=B5=E8=A1=A8=20=E5=88=86=E7=BB=84=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/job/GenerateSalesReportJob.java | 6 +- .../report/xtsy/zhxsqkLineReportEnhance.java | 34 +- .../core/framework/entity/GrBiSaAgg.java | 114 +--- .../framework/mapper/GrBiSaAggMapper.java | 17 - .../framework/mapper/NewGrBiSaAggMapper.java | 98 +++ .../mapper/NewGrBiSaAggMonthCountMapper.java | 62 ++ .../mapper/NewGrBiSaAggYearCountMapper.java | 62 ++ .../framework/service/IGrBiSaAggService.java | 2 - .../INewGrBiSaAggMonthCountService.java | 61 ++ .../service/INewGrBiSaAggService.java | 64 ++ .../INewGrBiSaAggYearCountService.java | 61 ++ .../service/impl/GrBiSaAggServiceImpl.java | 72 +- .../NewGrBiSaAggMonthCountServiceImpl.java | 90 +++ .../service/impl/NewGrBiSaAggServiceImpl.java | 186 +++++ .../NewGrBiSaAggYearCountServiceImpl.java | 90 +++ .../mapper/framework/GrBiSaAggMapper.xml | 336 --------- .../mapper/framework/NewGrBiSaAggMapper.xml | 635 ++++++++++++++++++ .../NewGrBiSaAggMonthCountMapper.xml | 216 ++++++ .../framework/NewGrBiSaAggYearCountMapper.xml | 211 ++++++ lidee-core/src/main/resources/rebel.xml | 16 + 20 files changed, 1905 insertions(+), 528 deletions(-) create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMonthCountMapper.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggYearCountMapper.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggMonthCountService.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggService.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggYearCountService.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggMonthCountServiceImpl.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggYearCountServiceImpl.java create mode 100644 lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMapper.xml create mode 100644 lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMonthCountMapper.xml create mode 100644 lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggYearCountMapper.xml create mode 100644 lidee-core/src/main/resources/rebel.xml diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/GenerateSalesReportJob.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/GenerateSalesReportJob.java index c67a59e..5dc11a0 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/GenerateSalesReportJob.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/GenerateSalesReportJob.java @@ -1,6 +1,6 @@ package com.lideeyunji.core.framework.config.job; -import com.lideeyunji.core.framework.service.IGrBiSaAggService; +import com.lideeyunji.core.framework.service.INewGrBiSaAggService; import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant; import com.lideeyunji.tool.framework.quartz.core.handler.JobHandler; import lombok.extern.slf4j.Slf4j; @@ -24,10 +24,10 @@ import javax.annotation.Resource; public class GenerateSalesReportJob implements JobHandler { @Resource - private IGrBiSaAggService grBiSaAggService; + private INewGrBiSaAggService newGrBiSaAggService; public String execute(String param) { log.info("*********** 开始生成销售报表 ************"); - grBiSaAggService.generateSalesReportJob(lideeYunJiBaseConstant.DS_ERP_BI_DATA); + newGrBiSaAggService.generateSalesReportJob(lideeYunJiBaseConstant.DS_ERP_BI_DATA); log.info("*********** 生成销售报表完成 ************"); return "*********** 生成销售报表完成 ************"; } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java index 5501eeb..2fd6b2d 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java @@ -85,7 +85,7 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { // executePluginSql.append(" CONCAT(ROUND((SELECT SUM(MONTHSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS monthsamoney_s, \n"); // executePluginSql.append(" CONCAT(ROUND((SELECT SUM(THISSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000,2), '亿') AS thissamoney_s, \n"); // executePluginSql.append(" CONCAT(ROUND((SELECT SUM(LASTSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000,2), '亿') AS lastsamoney_s, \n"); - executePluginSql.append(" SUM(tbl_lgbsa.THISSAQTY) as THISSAQTY, \n"); //本年销量 + executePluginSql.append(" SUM(tbl_lgbsa.MONTHSAQTY) as THISSAQTY, \n"); //本年销量 executePluginSql.append(" SUM(tbl_lgbsa.LASTSAQTY) as LASTSAQTY, \n"); //上年销量 executePluginSql.append(" -- 数量同比(原有) \n"); executePluginSql.append(" CASE \n"); @@ -111,7 +111,11 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS monthsamoney_yoy, \n"); - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.THISSAMONEY) / 10000, 2) as THISSAMONEY, \n"); //本年销售金额(元) + executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHSAMONEY) / 10000, 2) as THISSAMONEY, \n"); //本年销售金额(元) +// SUM( MONTHSAQTY ) AS THISSAQTY, -- 本年销量 +// SUM( MONTHSAMONEY ) AS THISSAMONEY, -- 本年销售金额 +// SUM( MONTHCOST) as THISCOST, -- 本年销售成本 +// SUM( MONTHPROFIT ) AS THISPROFIT -- 本年毛利额 executePluginSql.append(" CASE \n"); executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END) > 0 THEN \n"); @@ -148,8 +152,8 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHPROFIT) - sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT)) / sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS monthprofit_yoy, \n"); //年度毛利同比 - executePluginSql.append(" ROUND(MAX(tbl_lgbsa.THISPROFIT) / 10000, 2) as THISPROFIT, \n"); //本年毛利额(元) - executePluginSql.append(" ROUND(MAX(tbl_lgbsa.LASTPROFIT) / 10000, 2) as LASTPROFIT, \n"); //上年毛利额(元) + executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHPROFIT) / 10000, 2) as THISPROFIT, \n"); //本年毛利额(元) + executePluginSql.append(" ROUND(SUM(tbl_lgbsa.LASTPROFIT) / 10000, 2) as LASTPROFIT, \n"); //上年毛利额(元) executePluginSql.append(" -- 新增:毛利同比 \n"); executePluginSql.append(" CASE \n"); executePluginSql.append(" -- 正数:红色圆点emoji + 数值 + % \n"); @@ -165,19 +169,19 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" -- 0值:直接显示 \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS profit_yoy, \n"); //毛利同比 - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHCOST) / 10000, 2) as MONTHCOST, \n"); //本月销售成本(元) - executePluginSql.append(" ROUND(MAX(tbl_lgbsa.THISCOST) / 10000, 2) as THISCOST, \n"); //本年销售成本(元) + executePluginSql.append(" ROUND(SUM(tbl_lgbsamc.this_month_cost) / 10000, 2) as this_month_cost, \n"); //本月销售成本(元) + executePluginSql.append(" ROUND(MAX(tbl_lgbsayc.this_year_cost) / 10000, 2) as this_year_cost, \n"); //本年销售成本(元) executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHCOST) = 0 THEN IF(sum(tbl_lgbsa.MONTHCOST) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHCOST) - sum(tbl_lgbsa.LASTYEAROFMONTHCOST)) / sum(tbl_lgbsa.LASTYEAROFMONTHCOST) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHCOST) = 0 THEN IF(sum(tbl_lgbsa.MONTHCOST) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHCOST) - sum(tbl_lgbsa.LASTYEAROFMONTHCOST)) / sum(tbl_lgbsa.LASTYEAROFMONTHCOST) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHCOST) = 0 THEN IF(sum(tbl_lgbsa.MONTHCOST) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHCOST) - sum(tbl_lgbsa.LASTYEAROFMONTHCOST)) / sum(tbl_lgbsa.LASTYEAROFMONTHCOST) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHCOST) = 0 THEN IF(sum(tbl_lgbsa.MONTHCOST) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHCOST) - sum(tbl_lgbsa.LASTYEAROFMONTHCOST)) / sum(tbl_lgbsa.LASTYEAROFMONTHCOST) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS monthcost_yoy, \n"); //本月销售成本同比 + executePluginSql.append(" END AS this_month_cost_yoy, \n"); //本月销售成本同比 executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITCHANGE), 2) as PROFITCHANGE, \n"); //毛利变动(元) executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITGROWTH), 2) as PROFITGROWTH, \n"); //毛利额增长率 executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISPROFITRATE), 2) as THISPROFITRATE, \n"); //本年毛利率 diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaAgg.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaAgg.java index 8534f96..ba619e9 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaAgg.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaAgg.java @@ -16,127 +16,67 @@ import java.util.Date; public class GrBiSaAgg implements Serializable { private final static long serialVersionUID = 1L; - @TableId(value = "ID", type = IdType.INPUT) + @TableId(value = "id", type = IdType.INPUT) private Integer id; - @TableField(value = "USEYEAR") + @TableField(value = "use_year") private Integer useYear; - @TableField(value = "USEMONTH") + @TableField(value = "use_month") private Integer useMonth; - @TableField(value = "ZONEID") + @TableField(value = "zone_id") private String zoneId; - @TableField(value = "ZONENAME") + @TableField(value = "zone_name") private String zoneName; - @TableField(value = "SALETYPEID") + @TableField(value = "sale_type_id") private String saleTypeId; - @TableField(value = "SALETYPENAME") + @TableField(value = "sale_type_name") private String saleTypeName; - @TableField(value = "CUSTOMID") + @TableField(value = "custom_id") private String customId; - @TableField(value = "CUSTOMNAME") + @TableField(value = "custom_name") private String customName; - @TableField(value = "DOSAGEID") + @TableField(value = "dosage_id") private String dosageId; - @TableField(value = "DOSAGENAME") + @TableField(value = "dosage_name") private String dosageName; - @TableField(value = "GOODSNAME") - private String goodsName; - - @TableField(value = "GOODSID") + @TableField(value = "goods_id") private String goodsId; - @TableField(value = "PROVINCEID") + @TableField(value = "goods_name") + private String goodsName; + + @TableField(value = "province_id") private String provinceId; - @TableField(value = "PROVINCENAME") + @TableField(value = "province_name") private String provinceName; - @TableField(value = "SALERID") + @TableField(value = "saler_id") private String salerId; - @TableField(value = "SALERNAME") + @TableField(value = "saler_name") private String salerName; - @TableField(value = "MONTHSAQTY") - private String monthSaqty; + @TableField(value = "this_month_sa_qty") + private String thisMonthSaQty; - @TableField(value = "THISSAQTY") - private String thisSaqty; + @TableField(value = "this_month_sa_money") + private String thisMonthSaMoney; - @TableField(value = "LASTSAQTY") - private String lastSaqty; + @TableField(value = "this_month_cost") + private String thisMonthCost; - @TableField(value = "MONTHSAMONEY") - private String monthSaMoney; - - @TableField(value = "THISSAMONEY") - private String thisSaMoney; - - @TableField(value = "LASTSAMONEY") - private String lastSaMoney; - - @TableField(value = "MONTHPROFIT") - private String monthProfit; - - @TableField(value = "THISPROFIT") - private String thisProfit; - - @TableField(value = "LASTPROFIT") - private String lastProfit; - - @TableField(value = "MONTHCOST") - private String monthCost; - - @TableField(value = "THISCOST") - private String thisCost; - - @TableField(value = "LASTCOST") - private String lastCost; - - @TableField(value = "MONTHPROFITRATE") - private String monthProfitRate; - - @TableField(value = "THISPROFITRATE") - private String thisProfitRate; - - @TableField(value = "LASTPROFITRATE") - private String lastProfitRate; - - @TableField(value = "MONTHSAMONEYSHARE") - private String monthSaMoneyShare; - - @TableField(value = "THISSAMONEYSHARE") - private String thisSaMoneyShare; - - @TableField(value = "LASTSAMONEYSHARE") - private String lastSaMoneyShare; - - @TableField(value = "MONTHPROFITSHARE") - private String monthProfitShare; - - @TableField(value = "THISPROFITSHARE") - private String thisProfitShare; - - @TableField(value = "LASTPROFITSHARE") - private String lastProfitShare; - - @TableField(value = "SAMONEYGROWTH") - private String saMoneyGrowth; - - @TableField(value = "PROFITGROWTH") - private String profitGrowth; - - @TableField(value = "PROFITCHANGE") - private String profitChange; + @TableField(value = "this_month_profit") + private String thisMonthProfit; } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaAggMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaAggMapper.java index a08aa4b..c864884 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaAggMapper.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaAggMapper.java @@ -13,22 +13,5 @@ import java.util.List; public interface GrBiSaAggMapper extends BaseMapper { - List generateSalesReport(@Param("pastYearMonth") Integer pastYearMonth, - @Param("currentYearMonth") Integer currentYearMonth); - int deleteSalesReport(@Param("pastYearMonth") Integer pastYearMonth, - @Param("currentYearMonth") Integer currentYearMonth); - - void updateThisData(); - - void updateLastData(); - void updateLastMonthSamoney(); - - void updateLastYearOfMonthData(); - - void updateComplexCalculate1(); - void updateComplexCalculate2(); - void updateComplexCalculate3(); - void updateComplexCalculate4(); - void updateComplexCalculate5(); } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java new file mode 100644 index 0000000..667366f --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java @@ -0,0 +1,98 @@ +package com.lideeyunji.core.framework.mapper; + +import java.util.List; + +import com.lideeyunji.core.framework.entity.GrBiSaAgg; +import com.lideeyunji.core.framework.entity.NewGrBiSaAgg; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +/** + * 综合销售情况明细Mapper接口 + * + * @author king + * @date 2026-03-19 + */ +public interface NewGrBiSaAggMapper extends BaseMapper +{ + + List generateSalesReport(@Param("pastYearMonth") Integer pastYearMonth, + @Param("currentYearMonth") Integer currentYearMonth); + + int deleteSalesReport(@Param("pastYearMonth") Integer pastYearMonth, + @Param("currentYearMonth") Integer currentYearMonth); + + int deleteSalesReportMonth(@Param("pastYearMonth") Integer pastYearMonth, + @Param("currentYearMonth") Integer currentYearMonth); + + + int deleteSalesReportYear(@Param("pastYear") Integer pastYear, + @Param("currentYear") Integer currentYear); + + int insertSelectMonth(@Param("pastYearMonth") Integer pastYearMonth, + @Param("currentYearMonth") Integer currentYearMonth); + + int insertSelectYear(@Param("pastYear") Integer pastYear, + @Param("currentYear") Integer currentYear); + + +// void updateThisYearData(); +// +// void updateLastYearData(); +// void updateLastMonthSamoney(); +// +// void updateYoyMonthData(); +// +// void updateComplexCalculate1(); +// void updateComplexCalculate2(); +// void updateComplexCalculate3(); +// void updateComplexCalculate4(); +// void updateComplexCalculate5(); + /** + * 查询综合销售情况明细 + * + * @param id 综合销售情况明细主键 + * @return 综合销售情况明细 + */ + public NewGrBiSaAgg selectNewGrBiSaAggById(Long id); + + /** + * 查询综合销售情况明细列表 + * + * @param newGrBiSaAgg 综合销售情况明细 + * @return 综合销售情况明细集合 + */ + public List selectNewGrBiSaAggList(NewGrBiSaAgg newGrBiSaAgg); + + /** + * 新增综合销售情况明细 + * + * @param newGrBiSaAgg 综合销售情况明细 + * @return 结果 + */ + public int insertNewGrBiSaAgg(NewGrBiSaAgg newGrBiSaAgg); + + /** + * 修改综合销售情况明细 + * + * @param newGrBiSaAgg 综合销售情况明细 + * @return 结果 + */ + public int updateNewGrBiSaAgg(NewGrBiSaAgg newGrBiSaAgg); + + /** + * 删除综合销售情况明细 + * + * @param id 综合销售情况明细主键 + * @return 结果 + */ + public int deleteNewGrBiSaAggById(Long id); + + /** + * 批量删除综合销售情况明细 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteNewGrBiSaAggByIds(Long[] ids); +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMonthCountMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMonthCountMapper.java new file mode 100644 index 0000000..ddb35b1 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMonthCountMapper.java @@ -0,0 +1,62 @@ +package com.lideeyunji.core.framework.mapper; + +import java.util.List; +import com.lideeyunji.core.framework.entity.NewGrBiSaAggMonthCount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 综合销售情况月维度Mapper接口 + * + * @author king + * @date 2026-03-19 + */ +public interface NewGrBiSaAggMonthCountMapper extends BaseMapper +{ + /** + * 查询综合销售情况月维度 + * + * @param id 综合销售情况月维度主键 + * @return 综合销售情况月维度 + */ + public NewGrBiSaAggMonthCount selectNewGrBiSaAggMonthCountById(Long id); + + /** + * 查询综合销售情况月维度列表 + * + * @param newGrBiSaAggMonthCount 综合销售情况月维度 + * @return 综合销售情况月维度集合 + */ + public List selectNewGrBiSaAggMonthCountList(NewGrBiSaAggMonthCount newGrBiSaAggMonthCount); + + /** + * 新增综合销售情况月维度 + * + * @param newGrBiSaAggMonthCount 综合销售情况月维度 + * @return 结果 + */ + public int insertNewGrBiSaAggMonthCount(NewGrBiSaAggMonthCount newGrBiSaAggMonthCount); + + /** + * 修改综合销售情况月维度 + * + * @param newGrBiSaAggMonthCount 综合销售情况月维度 + * @return 结果 + */ + public int updateNewGrBiSaAggMonthCount(NewGrBiSaAggMonthCount newGrBiSaAggMonthCount); + + /** + * 删除综合销售情况月维度 + * + * @param id 综合销售情况月维度主键 + * @return 结果 + */ + public int deleteNewGrBiSaAggMonthCountById(Long id); + + /** + * 批量删除综合销售情况月维度 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteNewGrBiSaAggMonthCountByIds(Long[] ids); +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggYearCountMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggYearCountMapper.java new file mode 100644 index 0000000..218f4f2 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggYearCountMapper.java @@ -0,0 +1,62 @@ +package com.lideeyunji.core.framework.mapper; + +import java.util.List; +import com.lideeyunji.core.framework.entity.NewGrBiSaAggYearCount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 综合销售情况年维度Mapper接口 + * + * @author king + * @date 2026-03-19 + */ +public interface NewGrBiSaAggYearCountMapper extends BaseMapper +{ + /** + * 查询综合销售情况年维度 + * + * @param id 综合销售情况年维度主键 + * @return 综合销售情况年维度 + */ + public NewGrBiSaAggYearCount selectNewGrBiSaAggYearCountById(Long id); + + /** + * 查询综合销售情况年维度列表 + * + * @param newGrBiSaAggYearCount 综合销售情况年维度 + * @return 综合销售情况年维度集合 + */ + public List selectNewGrBiSaAggYearCountList(NewGrBiSaAggYearCount newGrBiSaAggYearCount); + + /** + * 新增综合销售情况年维度 + * + * @param newGrBiSaAggYearCount 综合销售情况年维度 + * @return 结果 + */ + public int insertNewGrBiSaAggYearCount(NewGrBiSaAggYearCount newGrBiSaAggYearCount); + + /** + * 修改综合销售情况年维度 + * + * @param newGrBiSaAggYearCount 综合销售情况年维度 + * @return 结果 + */ + public int updateNewGrBiSaAggYearCount(NewGrBiSaAggYearCount newGrBiSaAggYearCount); + + /** + * 删除综合销售情况年维度 + * + * @param id 综合销售情况年维度主键 + * @return 结果 + */ + public int deleteNewGrBiSaAggYearCountById(Long id); + + /** + * 批量删除综合销售情况年维度 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteNewGrBiSaAggYearCountByIds(Long[] ids); +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaAggService.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaAggService.java index 0556b34..ca4d30c 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaAggService.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaAggService.java @@ -6,7 +6,5 @@ import org.apache.ibatis.annotations.Param; public interface IGrBiSaAggService extends IService { - //同步销售明细表 - void generateSalesReportJob(@Param("dataSourceType") String dataSourceType); } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggMonthCountService.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggMonthCountService.java new file mode 100644 index 0000000..38f9ee2 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggMonthCountService.java @@ -0,0 +1,61 @@ +package com.lideeyunji.core.framework.service; + +import java.util.List; +import com.lideeyunji.core.framework.entity.NewGrBiSaAggMonthCount; + +/** + * 综合销售情况月维度Service接口 + * + * @author king + * @date 2026-03-19 + */ +public interface INewGrBiSaAggMonthCountService +{ + /** + * 查询综合销售情况月维度 + * + * @param id 综合销售情况月维度主键 + * @return 综合销售情况月维度 + */ + public NewGrBiSaAggMonthCount selectNewGrBiSaAggMonthCountById(Long id); + + /** + * 查询综合销售情况月维度列表 + * + * @param newGrBiSaAggMonthCount 综合销售情况月维度 + * @return 综合销售情况月维度集合 + */ + public List selectNewGrBiSaAggMonthCountList(NewGrBiSaAggMonthCount newGrBiSaAggMonthCount); + + /** + * 新增综合销售情况月维度 + * + * @param newGrBiSaAggMonthCount 综合销售情况月维度 + * @return 结果 + */ + public int insertNewGrBiSaAggMonthCount(NewGrBiSaAggMonthCount newGrBiSaAggMonthCount); + + /** + * 修改综合销售情况月维度 + * + * @param newGrBiSaAggMonthCount 综合销售情况月维度 + * @return 结果 + */ + public int updateNewGrBiSaAggMonthCount(NewGrBiSaAggMonthCount newGrBiSaAggMonthCount); + + /** + * 批量删除综合销售情况月维度 + * + * @param ids 需要删除的综合销售情况月维度主键集合 + * @return 结果 + */ + public int deleteNewGrBiSaAggMonthCountByIds(Long[] ids); + + /** + * 删除综合销售情况月维度信息 + * + * @param id 综合销售情况月维度主键 + * @return 结果 + */ + public int deleteNewGrBiSaAggMonthCountById(Long id); +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggService.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggService.java new file mode 100644 index 0000000..ef6f27d --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggService.java @@ -0,0 +1,64 @@ +package com.lideeyunji.core.framework.service; + +import java.util.List; +import com.lideeyunji.core.framework.entity.NewGrBiSaAgg; +import org.apache.ibatis.annotations.Param; + +/** + * 综合销售情况明细Service接口 + * + * @author king + * @date 2026-03-19 + */ +public interface INewGrBiSaAggService +{ + //同步销售明细表 + void generateSalesReportJob(@Param("dataSourceType") String dataSourceType); + /** + * 查询综合销售情况明细 + * + * @param id 综合销售情况明细主键 + * @return 综合销售情况明细 + */ + public NewGrBiSaAgg selectNewGrBiSaAggById(Long id); + + /** + * 查询综合销售情况明细列表 + * + * @param newGrBiSaAgg 综合销售情况明细 + * @return 综合销售情况明细集合 + */ + public List selectNewGrBiSaAggList(NewGrBiSaAgg newGrBiSaAgg); + + /** + * 新增综合销售情况明细 + * + * @param newGrBiSaAgg 综合销售情况明细 + * @return 结果 + */ + public int insertNewGrBiSaAgg(NewGrBiSaAgg newGrBiSaAgg); + + /** + * 修改综合销售情况明细 + * + * @param newGrBiSaAgg 综合销售情况明细 + * @return 结果 + */ + public int updateNewGrBiSaAgg(NewGrBiSaAgg newGrBiSaAgg); + + /** + * 批量删除综合销售情况明细 + * + * @param ids 需要删除的综合销售情况明细主键集合 + * @return 结果 + */ + public int deleteNewGrBiSaAggByIds(Long[] ids); + + /** + * 删除综合销售情况明细信息 + * + * @param id 综合销售情况明细主键 + * @return 结果 + */ + public int deleteNewGrBiSaAggById(Long id); +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggYearCountService.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggYearCountService.java new file mode 100644 index 0000000..51d457a --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/INewGrBiSaAggYearCountService.java @@ -0,0 +1,61 @@ +package com.lideeyunji.core.framework.service; + +import java.util.List; +import com.lideeyunji.core.framework.entity.NewGrBiSaAggYearCount; + +/** + * 综合销售情况年维度Service接口 + * + * @author king + * @date 2026-03-19 + */ +public interface INewGrBiSaAggYearCountService +{ + /** + * 查询综合销售情况年维度 + * + * @param id 综合销售情况年维度主键 + * @return 综合销售情况年维度 + */ + public NewGrBiSaAggYearCount selectNewGrBiSaAggYearCountById(Long id); + + /** + * 查询综合销售情况年维度列表 + * + * @param newGrBiSaAggYearCount 综合销售情况年维度 + * @return 综合销售情况年维度集合 + */ + public List selectNewGrBiSaAggYearCountList(NewGrBiSaAggYearCount newGrBiSaAggYearCount); + + /** + * 新增综合销售情况年维度 + * + * @param newGrBiSaAggYearCount 综合销售情况年维度 + * @return 结果 + */ + public int insertNewGrBiSaAggYearCount(NewGrBiSaAggYearCount newGrBiSaAggYearCount); + + /** + * 修改综合销售情况年维度 + * + * @param newGrBiSaAggYearCount 综合销售情况年维度 + * @return 结果 + */ + public int updateNewGrBiSaAggYearCount(NewGrBiSaAggYearCount newGrBiSaAggYearCount); + + /** + * 批量删除综合销售情况年维度 + * + * @param ids 需要删除的综合销售情况年维度主键集合 + * @return 结果 + */ + public int deleteNewGrBiSaAggYearCountByIds(Long[] ids); + + /** + * 删除综合销售情况年维度信息 + * + * @param id 综合销售情况年维度主键 + * @return 结果 + */ + public int deleteNewGrBiSaAggYearCountById(Long id); +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaAggServiceImpl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaAggServiceImpl.java index 9e69a78..31dc15e 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaAggServiceImpl.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaAggServiceImpl.java @@ -6,13 +6,17 @@ import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.lideeyunji.core.framework.entity.GrBiSaAgg; +import com.lideeyunji.core.framework.entity.NewGrBiSaAggMonthCount; import com.lideeyunji.core.framework.mapper.GrBiSaAggMapper; import com.lideeyunji.core.framework.service.IGrBiSaAggService; +import com.lideeyunji.core.framework.service.INewGrBiSaAggMonthCountService; +import com.lideeyunji.core.framework.service.INewGrBiSaAggYearCountService; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; @@ -20,74 +24,6 @@ import java.util.List; @Service public class GrBiSaAggServiceImpl extends ServiceImpl implements IGrBiSaAggService { - /** - * 计算销售报表 - */ - @Override - @DSTransactional - @DS(value = "#dataSourceType") - public void generateSalesReportJob(@Param("dataSourceType") String dataSourceType) { - //获取本地mysql数据库中表中UPDATE_TIME最新的数据 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().orderByDesc(GrBiSaAgg::getUseYear, GrBiSaAgg::getUseMonth).last("LIMIT 1"); - GrBiSaAgg grBiSaAgg = this.baseMapper.selectOne(queryWrapper); - int lastUserYear = 2022; - int lastUserMonth = 1; - if(grBiSaAgg != null){ - lastUserYear = grBiSaAgg.getUseYear(); - lastUserMonth = grBiSaAgg.getUseMonth(); - } - // 获取当前时间的年和月 - LocalDateTime now = LocalDateTime.now(); - int currentYear = now.getYear(); - int currentMonth = now.getMonthValue(); - // 获取三个月前的时间和年月 - LocalDateTime threeMonthsAgo = now.minusMonths(3); - int pastYear = threeMonthsAgo.getYear(); - int pastMonth = threeMonthsAgo.getMonthValue(); - - log.info("最后更新的年月:{}年{}月", lastUserYear, lastUserMonth); - log.info("当前:{}年{}月", currentYear, currentMonth); - log.info("三个月前:{}年{}月", pastYear, pastMonth); - if (lastUserYear < pastYear || (lastUserYear == pastYear && lastUserMonth < pastMonth)) { - pastYear = lastUserYear; - pastMonth = lastUserMonth; - - } - log.info("开始时间:{}年{}月, 结束时间:{}年{}月", pastYear, pastMonth, currentYear, currentMonth); - // 获取三个月前的数据 - List grBiSaSetdtlList = this.baseMapper.generateSalesReport(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth); - if (CollUtil.isEmpty(grBiSaSetdtlList)) { - return; - } - //保存数据 - removeAndSaveBatch(pastYear, pastMonth, currentYear, currentMonth, grBiSaSetdtlList); - this.baseMapper.updateThisData(); - this.baseMapper.updateLastYearOfMonthData(); - this.baseMapper.updateLastData(); - this.baseMapper.updateLastMonthSamoney(); - this.baseMapper.updateComplexCalculate1(); - this.baseMapper.updateComplexCalculate2(); - this.baseMapper.updateComplexCalculate3(); - this.baseMapper.updateComplexCalculate4(); - this.baseMapper.updateComplexCalculate5(); - } - - - //批量新增 - - public void removeAndSaveBatch(Integer pastYear, Integer pastMonth, Integer currentYear, Integer currentMonth, List grBiSaSetdtlList) { - - int reNum = this.baseMapper.deleteSalesReport(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth); - log.info("删除数量:{}", reNum); - int result = 0; - for (GrBiSaAgg grBiSaSetdtl : grBiSaSetdtlList) { - int re = this.baseMapper.insert(grBiSaSetdtl); - if (re < 1) { - throw new RuntimeException("批量新增异常"); - } - result += re; - } - } } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggMonthCountServiceImpl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggMonthCountServiceImpl.java new file mode 100644 index 0000000..3f1ed4c --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggMonthCountServiceImpl.java @@ -0,0 +1,90 @@ +package com.lideeyunji.core.framework.service.impl; + +import java.util.List; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import com.lideeyunji.core.framework.mapper.NewGrBiSaAggMonthCountMapper; +import com.lideeyunji.core.framework.entity.NewGrBiSaAggMonthCount; +import com.lideeyunji.core.framework.service.INewGrBiSaAggMonthCountService; + +/** + * 综合销售情况月维度Service业务层处理 + * + * @author king + * @date 2026-03-19 + */ +@Service +public class NewGrBiSaAggMonthCountServiceImpl extends ServiceImpl implements INewGrBiSaAggMonthCountService +{ + /** + * 查询综合销售情况月维度 + * + * @param id 综合销售情况月维度主键 + * @return 综合销售情况月维度 + */ + @Override + public NewGrBiSaAggMonthCount selectNewGrBiSaAggMonthCountById(Long id) + { + return this.baseMapper.selectNewGrBiSaAggMonthCountById(id); + } + + /** + * 查询综合销售情况月维度列表 + * + * @param newGrBiSaAggMonthCount 综合销售情况月维度 + * @return 综合销售情况月维度 + */ + @Override + public List selectNewGrBiSaAggMonthCountList(NewGrBiSaAggMonthCount newGrBiSaAggMonthCount) + { + return this.baseMapper.selectNewGrBiSaAggMonthCountList(newGrBiSaAggMonthCount); + } + + /** + * 新增综合销售情况月维度 + * + * @param newGrBiSaAggMonthCount 综合销售情况月维度 + * @return 结果 + */ + @Override + public int insertNewGrBiSaAggMonthCount(NewGrBiSaAggMonthCount newGrBiSaAggMonthCount) + { + return this.baseMapper.insertNewGrBiSaAggMonthCount(newGrBiSaAggMonthCount); + } + + /** + * 修改综合销售情况月维度 + * + * @param newGrBiSaAggMonthCount 综合销售情况月维度 + * @return 结果 + */ + @Override + public int updateNewGrBiSaAggMonthCount(NewGrBiSaAggMonthCount newGrBiSaAggMonthCount) + { + return this.baseMapper.updateNewGrBiSaAggMonthCount(newGrBiSaAggMonthCount); + } + + /** + * 批量删除综合销售情况月维度 + * + * @param ids 需要删除的综合销售情况月维度主键 + * @return 结果 + */ + @Override + public int deleteNewGrBiSaAggMonthCountByIds(Long[] ids) + { + return this.baseMapper.deleteNewGrBiSaAggMonthCountByIds(ids); + } + + /** + * 删除综合销售情况月维度信息 + * + * @param id 综合销售情况月维度主键 + * @return 结果 + */ + @Override + public int deleteNewGrBiSaAggMonthCountById(Long id) + { + return this.baseMapper.deleteNewGrBiSaAggMonthCountById(id); + } +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java new file mode 100644 index 0000000..32be8a7 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java @@ -0,0 +1,186 @@ +package com.lideeyunji.core.framework.service.impl; + +import java.time.LocalDateTime; +import java.util.List; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.lideeyunji.core.framework.entity.GrBiSaAgg; +import com.lideeyunji.core.framework.service.INewGrBiSaAggMonthCountService; +import com.lideeyunji.core.framework.service.INewGrBiSaAggYearCountService; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; +import com.lideeyunji.core.framework.mapper.NewGrBiSaAggMapper; +import com.lideeyunji.core.framework.entity.NewGrBiSaAgg; +import com.lideeyunji.core.framework.service.INewGrBiSaAggService; + +import javax.annotation.Resource; + +/** + * 综合销售情况明细Service业务层处理 + * + * @author king + * @date 2026-03-19 + */ +@Slf4j +@Service +public class NewGrBiSaAggServiceImpl extends ServiceImpl implements INewGrBiSaAggService +{ + @Resource + private INewGrBiSaAggMonthCountService newGrBiSaAggMonthCountService; + @Resource + private INewGrBiSaAggYearCountService newGrBiSaAggYearCountService; + /** + * 计算销售报表 + */ + @Override + @DSTransactional + @DS(value = "#dataSourceType") + public void generateSalesReportJob(@Param("dataSourceType") String dataSourceType) { + //获取本地mysql数据库中表中UPDATE_TIME最新的数据 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().orderByDesc(NewGrBiSaAgg::getUseYear, NewGrBiSaAgg::getUseMonth).last("LIMIT 1"); + NewGrBiSaAgg grBiSaAgg = this.baseMapper.selectOne(queryWrapper); + int lastUserYear = 2022; + int lastUserMonth = 1; + if(grBiSaAgg != null){ + lastUserYear = grBiSaAgg.getUseYear(); + lastUserMonth = grBiSaAgg.getUseMonth(); + } + // 获取当前时间的年和月 + LocalDateTime now = LocalDateTime.now(); + int currentYear = now.getYear(); + int currentMonth = now.getMonthValue(); + + // 获取三个月前的时间和年月 + LocalDateTime threeMonthsAgo = now.minusMonths(3); + int pastYear = threeMonthsAgo.getYear(); + int pastMonth = threeMonthsAgo.getMonthValue(); + + log.info("最后更新的年月:{}年{}月", lastUserYear, lastUserMonth); + log.info("当前:{}年{}月", currentYear, currentMonth); + log.info("三个月前:{}年{}月", pastYear, pastMonth); + if (lastUserYear < pastYear || (lastUserYear == pastYear && lastUserMonth < pastMonth)) { + pastYear = lastUserYear; + pastMonth = lastUserMonth; + + } + log.info("开始时间:{}年{}月, 结束时间:{}年{}月", pastYear, pastMonth, currentYear, currentMonth); + // 获取三个月前的数据 + List grBiSaSetdtlList = this.baseMapper.generateSalesReport(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth); + if (CollUtil.isEmpty(grBiSaSetdtlList)) { + return; + } + //保存数据 + removeAndSaveBatch(pastYear, pastMonth, currentYear, currentMonth, grBiSaSetdtlList); +// this.baseMapper.updateThisYearData(); +// this.baseMapper.updateYoyMonthData(); +// this.baseMapper.updateLastYearData(); +// this.baseMapper.updateLastMonthSamoney(); +// this.baseMapper.updateComplexCalculate1(); +// this.baseMapper.updateComplexCalculate2(); +// this.baseMapper.updateComplexCalculate3(); +// this.baseMapper.updateComplexCalculate4(); +// this.baseMapper.updateComplexCalculate5(); + } + + + //批量新增 + + public void removeAndSaveBatch(Integer pastYear, Integer pastMonth, Integer currentYear, Integer currentMonth, List grBiSaSetdtlList) { + + int reNum = this.baseMapper.deleteSalesReport(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth); + log.info("删除数量:{}", reNum); + int result = 0; + for (NewGrBiSaAgg grBiSaSetdtl : grBiSaSetdtlList) { + int re = this.baseMapper.insert(grBiSaSetdtl); + if (re < 1) { + throw new RuntimeException("批量新增异常"); + } + result += re; + } + + reNum = this.baseMapper.deleteSalesReportMonth(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth); + log.info("批量新增数量-month:{}", reNum); + baseMapper.insertSelectMonth(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth); + reNum = this.baseMapper.deleteSalesReportYear(pastYear, currentYear); + baseMapper.insertSelectYear(pastYear , currentYear * 100); + log.info("批量新增数量-year:{}", reNum); + + } + /** + * 查询综合销售情况明细 + * + * @param id 综合销售情况明细主键 + * @return 综合销售情况明细 + */ + @Override + public NewGrBiSaAgg selectNewGrBiSaAggById(Long id) + { + return this.baseMapper.selectNewGrBiSaAggById(id); + } + + /** + * 查询综合销售情况明细列表 + * + * @param newGrBiSaAgg 综合销售情况明细 + * @return 综合销售情况明细 + */ + @Override + public List selectNewGrBiSaAggList(NewGrBiSaAgg newGrBiSaAgg) + { + + return this.baseMapper.selectNewGrBiSaAggList(newGrBiSaAgg); + } + + /** + * 新增综合销售情况明细 + * + * @param newGrBiSaAgg 综合销售情况明细 + * @return 结果 + */ + @Override + public int insertNewGrBiSaAgg(NewGrBiSaAgg newGrBiSaAgg) + { + return this.baseMapper.insertNewGrBiSaAgg(newGrBiSaAgg); + } + + /** + * 修改综合销售情况明细 + * + * @param newGrBiSaAgg 综合销售情况明细 + * @return 结果 + */ + @Override + public int updateNewGrBiSaAgg(NewGrBiSaAgg newGrBiSaAgg) + { + return this.baseMapper.updateNewGrBiSaAgg(newGrBiSaAgg); + } + + /** + * 批量删除综合销售情况明细 + * + * @param ids 需要删除的综合销售情况明细主键 + * @return 结果 + */ + @Override + public int deleteNewGrBiSaAggByIds(Long[] ids) + { + return this.baseMapper.deleteNewGrBiSaAggByIds(ids); + } + + /** + * 删除综合销售情况明细信息 + * + * @param id 综合销售情况明细主键 + * @return 结果 + */ + @Override + public int deleteNewGrBiSaAggById(Long id) + { + return this.baseMapper.deleteNewGrBiSaAggById(id); + } +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggYearCountServiceImpl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggYearCountServiceImpl.java new file mode 100644 index 0000000..3c36528 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggYearCountServiceImpl.java @@ -0,0 +1,90 @@ +package com.lideeyunji.core.framework.service.impl; + +import java.util.List; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import com.lideeyunji.core.framework.mapper.NewGrBiSaAggYearCountMapper; +import com.lideeyunji.core.framework.entity.NewGrBiSaAggYearCount; +import com.lideeyunji.core.framework.service.INewGrBiSaAggYearCountService; + +/** + * 综合销售情况年维度Service业务层处理 + * + * @author king + * @date 2026-03-19 + */ +@Service +public class NewGrBiSaAggYearCountServiceImpl extends ServiceImpl implements INewGrBiSaAggYearCountService +{ + /** + * 查询综合销售情况年维度 + * + * @param id 综合销售情况年维度主键 + * @return 综合销售情况年维度 + */ + @Override + public NewGrBiSaAggYearCount selectNewGrBiSaAggYearCountById(Long id) + { + return this.baseMapper.selectNewGrBiSaAggYearCountById(id); + } + + /** + * 查询综合销售情况年维度列表 + * + * @param newGrBiSaAggYearCount 综合销售情况年维度 + * @return 综合销售情况年维度 + */ + @Override + public List selectNewGrBiSaAggYearCountList(NewGrBiSaAggYearCount newGrBiSaAggYearCount) + { + return this.baseMapper.selectNewGrBiSaAggYearCountList(newGrBiSaAggYearCount); + } + + /** + * 新增综合销售情况年维度 + * + * @param newGrBiSaAggYearCount 综合销售情况年维度 + * @return 结果 + */ + @Override + public int insertNewGrBiSaAggYearCount(NewGrBiSaAggYearCount newGrBiSaAggYearCount) + { + return this.baseMapper.insertNewGrBiSaAggYearCount(newGrBiSaAggYearCount); + } + + /** + * 修改综合销售情况年维度 + * + * @param newGrBiSaAggYearCount 综合销售情况年维度 + * @return 结果 + */ + @Override + public int updateNewGrBiSaAggYearCount(NewGrBiSaAggYearCount newGrBiSaAggYearCount) + { + return this.baseMapper.updateNewGrBiSaAggYearCount(newGrBiSaAggYearCount); + } + + /** + * 批量删除综合销售情况年维度 + * + * @param ids 需要删除的综合销售情况年维度主键 + * @return 结果 + */ + @Override + public int deleteNewGrBiSaAggYearCountByIds(Long[] ids) + { + return this.baseMapper.deleteNewGrBiSaAggYearCountByIds(ids); + } + + /** + * 删除综合销售情况年维度信息 + * + * @param id 综合销售情况年维度主键 + * @return 结果 + */ + @Override + public int deleteNewGrBiSaAggYearCountById(Long id) + { + return this.baseMapper.deleteNewGrBiSaAggYearCountById(id); + } +} diff --git a/lidee-core/src/main/resources/mapper/framework/GrBiSaAggMapper.xml b/lidee-core/src/main/resources/mapper/framework/GrBiSaAggMapper.xml index 643e299..df66779 100644 --- a/lidee-core/src/main/resources/mapper/framework/GrBiSaAggMapper.xml +++ b/lidee-core/src/main/resources/mapper/framework/GrBiSaAggMapper.xml @@ -3,340 +3,4 @@ - - - - - delete from yunji_gr_bi_sa_agg - where (USEYEAR * 100 + USEMONTH) BETWEEN #{pastYearMonth} AND #{currentYearMonth} - - - - UPDATE yunji_gr_bi_sa_agg a - LEFT JOIN ( - SELECT - USEYEAR, - GOODSID, - ZONEID, - PROVINCEID, - SALETYPEID, - DOSAGEID, - CUSTOMID, - SALERID, - SUM( MONTHSAQTY ) AS THISSAQTY, -- 本年销量 - SUM( MONTHSAMONEY ) AS THISSAMONEY, -- 本年销售金额 - SUM( MONTHCOST) as THISCOST, -- 本年销售成本 - SUM( MONTHPROFIT ) AS THISPROFIT -- 本年毛利额 - FROM - yunji_gr_bi_sa_agg - GROUP BY - USEYEAR, - GOODSID, - ZONEID, - PROVINCEID, - SALETYPEID, - DOSAGEID, - CUSTOMID, - SALERID - ) b ON b.USEYEAR = a.USEYEAR - AND b.GOODSID = a.GOODSID - AND b.ZONEID = a.ZONEID - AND b.PROVINCEID = a.PROVINCEID - AND b.SALETYPEID = a.SALETYPEID - AND b.DOSAGEID = a.DOSAGEID - AND b.CUSTOMID = a.CUSTOMID - AND b.SALERID = a.SALERID - SET a.THISSAQTY = COALESCE ( b.THISSAQTY, 0 ), - a.THISSAMONEY = COALESCE ( b.THISSAMONEY, 0 ), - a.THISCOST = COALESCE ( b.THISCOST, 0 ), - a.THISPROFIT = COALESCE ( b.THISPROFIT, 0 ); - - - - UPDATE yunji_gr_bi_sa_agg a - LEFT JOIN ( - SELECT - USEYEAR, - USEMONTH, - GOODSID, - ZONEID, - PROVINCEID, - SALETYPEID, - DOSAGEID, - CUSTOMID, - SALERID, - SUM( MONTHSAQTY ) AS LASTYEAROFMONTHSAQTY, - SUM( MONTHSAMONEY ) AS LASTYEAROFMONTHSAMONEY, - SUM( MONTHCOST) as LASTYEAROFMONTHCOST, - SUM( MONTHPROFIT ) AS LASTYEAROFMONTHPROFIT - FROM - yunji_gr_bi_sa_agg - GROUP BY - USEYEAR, - USEMONTH, - GOODSID, - ZONEID, - PROVINCEID, - SALETYPEID, - DOSAGEID, - CUSTOMID, - SALERID - ) b ON b.USEYEAR = a.USEYEAR-1 - AND b.USEMONTH = a.USEMONTH - AND b.GOODSID = a.GOODSID - AND b.ZONEID = a.ZONEID - AND b.PROVINCEID = a.PROVINCEID - AND b.SALETYPEID = a.SALETYPEID - AND b.DOSAGEID = a.DOSAGEID - AND b.CUSTOMID = a.CUSTOMID - AND b.SALERID = a.SALERID - SET a.LASTYEAROFMONTHSAQTY = COALESCE ( b.LASTYEAROFMONTHSAQTY, 0 ), - a.LASTYEAROFMONTHSAMONEY = COALESCE ( b.LASTYEAROFMONTHSAMONEY, 0 ), - a.LASTYEAROFMONTHCOST = COALESCE ( b.LASTYEAROFMONTHCOST, 0 ), - a.LASTYEAROFMONTHPROFIT = COALESCE ( b.LASTYEAROFMONTHPROFIT, 0 ); - - - - UPDATE yunji_gr_bi_sa_agg AS current_month - JOIN ( - SELECT - -- 当前记录的维度和年月 - - USEYEAR, - USEMONTH, - GOODSID, - ZONEID, - PROVINCEID, - SALETYPEID, - DOSAGEID, - CUSTOMID, - SALERID, - -- 计算上个月的年月 - YEAR(DATE_SUB(CONCAT(USEYEAR, '-', USEMONTH, '-01'), INTERVAL 1 MONTH)) AS LAST_YEAR, - MONTH(DATE_SUB(CONCAT(USEYEAR, '-', USEMONTH, '-01'), INTERVAL 1 MONTH)) AS LAST_MONTH, - -- 当前月的销售金额,将作为上个月的金额赋给别的记录 - SUM(MONTHSAMONEY) AS CURRENT_MONTH_SAMONEY - FROM yunji_gr_bi_sa_agg - GROUP BY - USEYEAR, - USEMONTH, - GOODSID, - ZONEID, - PROVINCEID, - SALETYPEID, - DOSAGEID, - CUSTOMID, - SALERID - ) AS last_month_data - ON current_month.GOODSID = last_month_data.GOODSID - AND current_month.ZONEID = last_month_data.ZONEID - AND current_month.PROVINCEID = last_month_data.PROVINCEID - AND current_month.SALETYPEID = last_month_data.SALETYPEID - AND current_month.DOSAGEID = last_month_data.DOSAGEID - AND current_month.CUSTOMID = last_month_data.CUSTOMID - AND current_month.SALERID = last_month_data.SALERID - AND current_month.USEYEAR = last_month_data.LAST_YEAR - AND current_month.USEMONTH = last_month_data.LAST_MONTH - SET - current_month.LAST_MONTH_SAMONEY = last_month_data.CURRENT_MONTH_SAMONEY; - - - UPDATE yunji_gr_bi_sa_agg a - LEFT JOIN ( - SELECT - USEYEAR, - GOODSID, - ZONEID, - PROVINCEID, - SALETYPEID, - DOSAGEID, - CUSTOMID, - SALERID, - SUM( MONTHSAQTY ) AS LASTSAQTY, - SUM( MONTHSAMONEY ) AS LASTSAMONEY, - SUM( MONTHCOST) as LASTCOST, - SUM( MONTHPROFIT ) AS LASTPROFIT - FROM - yunji_gr_bi_sa_agg - GROUP BY - USEYEAR, - GOODSID, - ZONEID, - PROVINCEID, - SALETYPEID, - DOSAGEID, - CUSTOMID, - SALERID - ) b ON b.USEYEAR = a.USEYEAR-1 - AND b.GOODSID = a.GOODSID - AND b.ZONEID = a.ZONEID - AND b.PROVINCEID = a.PROVINCEID - AND b.SALETYPEID = a.SALETYPEID - AND b.DOSAGEID = a.DOSAGEID - AND b.CUSTOMID = a.CUSTOMID - AND b.SALERID = a.SALERID - SET a.LASTSAQTY = COALESCE ( b.LASTSAQTY, 0 ), - a.LASTSAMONEY = COALESCE ( b.LASTSAMONEY, 0 ), - a.LASTCOST = COALESCE ( b.LASTCOST, 0 ), - a.LASTPROFIT = COALESCE ( b.LASTPROFIT, 0 ); - - - - - -- 本月毛利率 MONTHPROFITRATE 本月销售毛利/本月销售收入×100% - -- 本年毛利率 THISPROFITRATE 本年销售毛利/本年销售收入×100% - -- 上年毛利率 LASTPROFITRATE 上年销售毛利/上年销售收入×100% - UPDATE yunji_gr_bi_sa_agg - SET - MONTHPROFITRATE = CASE WHEN MONTHSAMONEY = 0 or MONTHSAMONEY is null THEN - IF(MONTHPROFIT > 0, 100, 0) ELSE MONTHPROFIT/ MONTHSAMONEY * 100 END, - THISPROFITRATE = CASE WHEN THISSAMONEY = 0 or THISSAMONEY is null THEN - IF(THISPROFIT > 0, 100, 0) ELSE THISPROFIT/ THISSAMONEY * 100 END, - LASTPROFITRATE =CASE WHEN LASTSAMONEY = 0 or LASTSAMONEY is null THEN - IF(LASTPROFIT > 0, 100, 0) ELSE LASTPROFIT/ LASTSAMONEY * 100 END; - - - - - -- 本月销售金额占比 MONTHSAMONEYSHARE 当前行本月销售额/本月销售额总和*100% - -- 本月毛利额占比 MONTHPROFITSHARE 当前行本月毛利额/本月毛利额总和*100% - UPDATE yunji_gr_bi_sa_agg a - LEFT JOIN ( - SELECT - USEYEAR, - USEMONTH, - SUM( MONTHSAMONEY ) AS MONTHSAMONEY_SUM, - SUM(MONTHPROFIT) AS MONTHPROFIT_SUM - FROM - yunji_gr_bi_sa_agg - GROUP BY - USEYEAR, - USEMONTH - ) b ON b.USEYEAR = a.USEYEAR - AND b.USEMONTH = a.USEMONTH - SET a.MONTHSAMONEYSHARE = COALESCE (ROUND( a.MONTHSAMONEY/b.MONTHSAMONEY_SUM * 100, 2), 0 ), - a.MONTHPROFITSHARE = COALESCE (ROUND( a.MONTHPROFIT/b.MONTHPROFIT_SUM * 100, 2), 0 ); - - - - -- 本年销售金额占比 THISSAMONEYSHARE当前行本年销售额/本年销售额总和*100% - -- 本年毛利额占比 THISPROFITSHARE 当前行本年毛利额/本年毛利额总和*100% - UPDATE yunji_gr_bi_sa_agg a - LEFT JOIN ( - SELECT - USEYEAR, - SUM( THISSAMONEY ) AS THISSAMONEY_SUM, - SUM( THISPROFIT ) AS THISPROFIT_SUM - FROM - yunji_gr_bi_sa_agg - GROUP BY - USEYEAR - ) b ON b.USEYEAR = a.USEYEAR - SET a.THISSAMONEYSHARE = COALESCE (ROUND( a.THISSAMONEY/b.THISSAMONEY_SUM * 100, 2), 0 ), - a.THISPROFITSHARE = COALESCE (ROUND( a.THISPROFIT/b.THISPROFIT_SUM * 100, 2), 0 ); - - - - - -- 上年销售金额占比 LASTSAMONEYSHARE 当前行上年销售额/上年销售额总和*100% - -- 上年毛利额占比 LASTPROFITSHARE 当前行上年毛利额/上年毛利额总和*100% - UPDATE yunji_gr_bi_sa_agg a - LEFT JOIN ( - SELECT - USEYEAR, - SUM(LASTSAMONEY) AS LASTSAMONEY_SUM, - SUM(LASTPROFIT) AS LASTPROFIT_SUM - - FROM - yunji_gr_bi_sa_agg - GROUP BY - USEYEAR, - USEMONTH - ) b ON b.USEYEAR = a.USEYEAR - SET a.LASTSAMONEYSHARE = COALESCE (ROUND( CASE WHEN LASTSAMONEY_SUM = 0 or LASTSAMONEY_SUM is null THEN IF(a.LASTSAMONEY > 0, 100, 0) ELSE a.LASTSAMONEY/b.LASTSAMONEY_SUM * 100 END, 2), 0 ), - a.LASTPROFITSHARE = COALESCE (ROUND( CASE WHEN LASTPROFIT_SUM = 0 or LASTPROFIT_SUM is null THEN IF(a.LASTPROFIT > 0, 100, 0) ELSE a.LASTPROFIT/b.LASTPROFIT_SUM * 100 END, 2), 0 ); - - - - -- 销售金额增长率 SAMONEYGROWTH (本年销售额-上年销售额)÷上年销售额×100% - -- 毛利额增长率 PROFITGROWTH (本年毛利额 - 上年毛利额) / 上年毛利额 × 100% - -- 毛利变动 PROFITCHANGE 本年毛利额 - 上年毛利额 - UPDATE yunji_gr_bi_sa_agg - SET - SAMONEYGROWTH = CASE - WHEN ( LASTSAMONEY = 0 OR LASTSAMONEY IS NULL ) AND THISSAMONEY IS NOT NULL - THEN IF((THISSAMONEY - LASTSAMONEY) > 0, 100, 0) - ELSE ( THISSAMONEY - LASTSAMONEY )/ LASTSAMONEY * 100 - END, - PROFITGROWTH = CASE - WHEN ( LASTPROFIT = 0 OR LASTPROFIT IS NULL ) AND THISPROFIT IS NOT NULL - THEN IF((THISSAMONEY - LASTSAMONEY) > 0, 100, 0) - ELSE ( THISPROFIT - LASTPROFIT )/ LASTPROFIT * 100 - END, - PROFITCHANGE = ( THISPROFIT - LASTPROFIT); - diff --git a/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMapper.xml b/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMapper.xml new file mode 100644 index 0000000..ea6fc34 --- /dev/null +++ b/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMapper.xml @@ -0,0 +1,635 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, use_year, use_month, zone_id, zone_name, sale_type_id, sale_type_name, custom_id, custom_name, dosage_id, dosage_name, goods_id, goods_name, province_id, province_name, saler_id, saler_name, this_month_sa_qty, this_month_sa_money, this_month_cost, this_month_profit from new_gr_bi_sa_agg + + + + + + + delete from new_gr_bi_sa_agg + where (use_year * 100 + use_month) BETWEEN #{pastYearMonth} AND #{currentYearMonth} + + + delete from new_gr_bi_sa_agg_month_count + where (use_year * 100 + use_month) BETWEEN #{pastYearMonth} AND #{currentYearMonth} + + + delete from new_gr_bi_sa_agg_year_count + where (use_year ) BETWEEN #{pastYear} AND #{currentYear} + + + + INSERT INTO new_gr_bi_sa_agg_month_count ( + use_year, + use_month, + zone_id, + zone_name, + sale_type_id, + sale_type_name, + custom_id, + custom_name, + dosage_id, + dosage_name, + goods_id, + goods_name, + province_id, + province_name, + saler_id, + saler_name, + this_month_sa_qty, + this_month_sa_money, + this_month_profit, + this_month_cost + ) SELECT + use_year, + use_month, + zone_id, + zone_name, + sale_type_id, + sale_type_name, + custom_id, + custom_name, + dosage_id, + dosage_name, + goods_id, + goods_name, + province_id, + province_name, + saler_id, + saler_name, + SUM(this_month_sa_qty) AS this_month_sa_qty, -- 本月销量 + SUM(this_month_sa_money) AS this_month_sa_money, -- 本月销售金额 + SUM(this_month_cost) AS this_month_cost, -- 本月销售成本 + SUM(this_month_profit) AS this_month_profit -- 本月毛利额 + FROM + new_gr_bi_sa_agg + where (use_year * 100 + use_month) BETWEEN #{pastYearMonth} AND #{currentYearMonth} + GROUP BY + use_year, + use_month, + zone_id, + zone_name, + sale_type_id, + sale_type_name, + custom_id, + custom_name, + dosage_id, + dosage_name, + goods_id, + goods_name, + province_id, + province_name, + saler_id, + saler_name + + + + + INSERT INTO new_gr_bi_sa_agg_year_count ( + use_year, + zone_id, + zone_name, + sale_type_id, + sale_type_name, + custom_id, + custom_name, + dosage_id, + dosage_name, + goods_id, + goods_name, + province_id, + province_name, + saler_id, + saler_name, + this_year_sa_qty, + this_year_sa_money, + this_year_profit, + this_year_cost + ) SELECT + use_year, + zone_id, + zone_name, + sale_type_id, + sale_type_name, + custom_id, + custom_name, + dosage_id, + dosage_name, + goods_id, + goods_name, + province_id, + province_name, + saler_id, + saler_name, + SUM(this_month_sa_qty) AS this_year_sa_qty, -- 本年销量 + SUM(this_month_sa_money) AS this_year_sa_money, -- 本年销售金额 + SUM(this_month_cost) AS this_year_cost, -- 本年销售成本 + SUM(this_month_profit) AS this_year_profit -- 本年毛利额 + FROM + new_gr_bi_sa_agg_month_count + where use_year BETWEEN #{pastYear} AND #{currentYear} + GROUP BY + use_year, + zone_id, + zone_name, + sale_type_id, + sale_type_name, + custom_id, + custom_name, + dosage_id, + dosage_name, + goods_id, + goods_name, + province_id, + province_name, + saler_id, + saler_name + + + UPDATE new_gr_bi_sa_agg_year_count a + LEFT JOIN ( + SELECT + use_year, + goods_id, + zone_id, + province_id, + sale_type_id, + dosage_id, + custom_id, + saler_id, + SUM( this_month_sa_qty ) AS this_year_sa_qty, -- 本年销量 + SUM( this_month_sa_money ) AS this_year_sa_money, -- 本年销售金额 + SUM( this_month_cost) as this_year_cost, -- 本年销售成本 + SUM( this_month_profit ) AS this_year_profit -- 本年毛利额 + FROM + new_gr_bi_sa_agg + GROUP BY + use_year, + goods_id, + zone_id, + province_id, + sale_type_id, + dosage_id, + custom_id, + saler_id + ) b ON b.use_year = a.use_year + AND b.goods_id = a.goods_id + AND b.zone_id = a.zone_id + AND b.province_id = a.province_id + AND b.sale_type_id = a.sale_type_id + AND b.dosage_id = a.dosage_id + AND b.custom_id = a.custom_id + AND b.saler_id = a.saler_id + SET a.this_year_sa_qty = COALESCE ( b.this_year_sa_qty, 0 ), + a.this_year_sa_money = COALESCE ( b.this_year_sa_money, 0 ), + a.this_year_profit = COALESCE ( b.this_year_profit, 0 ), + a.this_year_cost = COALESCE ( b.this_year_cost, 0 ); + + + + UPDATE new_gr_bi_sa_agg_month_count a + LEFT JOIN ( + SELECT + use_year, + use_month, + goods_id, + zone_id, + province_id, + sale_type_id, + dosage_id, + custom_id, + saler_id, + SUM( this_month_sa_qty ) AS yoy_month_sa_qty, -- 同比月销量 + SUM( this_month_sa_money ) AS yoy_month_sa_money, -- 同比月销售金额 + SUM( this_month_cost) as yoy_month_cost, -- 同比月销售成本 + SUM( this_month_profit ) AS yoy_month_profit -- 同比月毛利额 + FROM + new_gr_bi_sa_agg + GROUP BY + use_year, + use_month, + goods_id, + zone_id, + province_id, + sale_type_id, + dosage_id, + custom_id, + saler_id + ) b ON b.use_year = a.use_year-1 + AND b.use_month = a.use_month + AND b.goods_id = a.goods_id + AND b.zone_id = a.zone_id + AND b.province_id = a.province_id + AND b.sale_type_id = a.sale_type_id + AND b.dosage_id = a.dosage_id + AND b.custom_id = a.custom_id + AND b.saler_id = a.saler_id + SET a.yoy_month_sa_qty = COALESCE ( b.yoy_month_sa_qty, 0 ), + a.yoy_month_sa_money = COALESCE ( b.yoy_month_sa_money, 0 ), + a.yoy_month_cost = COALESCE ( b.yoy_month_cost, 0 ), + a.yoy_month_profit = COALESCE ( b.yoy_month_profit, 0 ); + + + + UPDATE new_gr_bi_sa_agg_month_count AS current_month + JOIN ( + SELECT + -- 当前记录的维度和年月 + + use_year, + use_month, + goods_id, + zone_id, + province_id, + sale_type_id, + dosage_id, + custom_id, + saler_id, + -- 计算上个月的年月 + YEAR(DATE_SUB(CONCAT(use_year, '-', use_month, '-01'), INTERVAL 1 MONTH)) AS LAST_YEAR, + MONTH(DATE_SUB(CONCAT(use_year, '-', use_month, '-01'), INTERVAL 1 MONTH)) AS LAST_MONTH, + SUM(this_month_sa_qty) AS current_month_sa_qty, + -- 当前月的销售金额,将作为上个月的金额赋给别的记录 + SUM(this_month_sa_money) AS current_month_sa_money, + SUM(this_month_cost) AS current_month_cost, + SUM(this_month_profit) AS current_month_profit + FROM new_gr_bi_sa_agg + GROUP BY + use_year, + use_month, + goods_id, + zone_id, + province_id, + sale_type_id, + dosage_id, + custom_id, + saler_id + ) AS last_month_data + ON current_month.goods_id = last_month_data.goods_id + AND current_month.zone_id = last_month_data.zone_id + AND current_month.province_id = last_month_data.province_id + AND current_month.sale_type_id = last_month_data.sale_type_id + AND current_month.dosage_id = last_month_data.dosage_id + AND current_month.custom_id = last_month_data.custom_id + AND current_month.saler_id = last_month_data.saler_id + AND current_month.use_year = last_month_data.use_year + AND current_month.use_month = last_month_data.use_month + SET + current_month.last_month_sa_qty = last_month_data.current_month_sa_qty, -- 上月销量 + current_month.last_month_sa_money = last_month_data.current_month_sa_money, -- 上月销售金额 + current_month.last_month_sa_cost = last_month_data.current_month_cost, -- 上月销售成本 + current_month.last_month_sa_profit = last_month_data.current_month_profit; -- 上月毛利额 + + + UPDATE new_gr_bi_sa_agg_year_count a + LEFT JOIN ( + SELECT + use_year, + goods_id, + zone_id, + province_id, + sale_type_id, + dosage_id, + custom_id, + saler_id, + SUM( this_month_sa_qty ) AS last_month_sa_qty, + SUM( this_month_sa_money ) AS last_month_sa_money, + SUM( this_month_cost) as last_month_cost, + SUM( this_month_profit ) AS last_month_profit + FROM + new_gr_bi_sa_agg + GROUP BY + use_year, + goods_id, + zone_id, + province_id, + sale_type_id, + dosage_id, + custom_id, + saler_id + ) b ON b.use_year = a.use_year-1 + AND b.goods_id = a.goods_id + AND b.zone_id = a.zone_id + AND b.province_id = a.province_id + AND b.sale_type_id = a.sale_type_id + AND b.dosage_id = a.dosage_id + AND b.custom_id = a.custom_id + AND b.saler_id = a.saler_id + SET a.last_month_sa_qty = COALESCE ( b.last_month_sa_qty, 0 ), + a.last_month_sa_money = COALESCE ( b.last_month_sa_money, 0 ), + a.last_month_cost = COALESCE ( b.last_month_cost, 0 ), + a.last_month_profit = COALESCE ( b.last_month_profit, 0 ); + + + + + -- 本月毛利率 MONTHPROFITRATE 本月销售毛利/本月销售收入×100% + UPDATE new_gr_bi_sa_agg_month_count + SET + this_month_profit_rate = CASE WHEN last_month_sa_money = 0 or last_month_sa_money is null THEN + IF(MONTHPROFIT > 0, 100, 0) ELSE MONTHPROFIT/ last_month_sa_money * 100 END; + + + + + + -- 本年毛利率 THISPROFITRATE 本年销售毛利/本年销售收入×100% + -- 上年毛利率 LASTPROFITRATE 上年销售毛利/上年销售收入×100% + UPDATE new_gr_bi_sa_agg_year_count + SET + this_year_profit_rate = CASE WHEN this_year_sa_money = 0 or this_year_sa_money is null THEN + IF(this_year_profit > 0, 100, 0) ELSE this_year_profit/ this_year_sa_money * 100 END, + last_year_profit_rate =CASE WHEN last_year_sa_money = 0 or last_year_sa_money is null THEN + IF(last_year_profit > 0, 100, 0) ELSE last_year_profit/ last_year_sa_money * 100 END; + + + + + -- 本月销售金额占比 MONTHSAMONEYSHARE 当前行本月销售额/本月销售额总和*100% + -- 本月毛利额占比 MONTHPROFITSHARE 当前行本月毛利额/本月毛利额总和*100% + UPDATE new_gr_bi_sa_agg_month_count a + LEFT JOIN ( + SELECT + use_year, + use_month, + SUM( this_month_sa_money ) AS this_month_sa_money_sum, + SUM(this_month_profit) AS this_month_profit_sum + FROM + new_gr_bi_sa_agg + GROUP BY + use_year, + use_month + ) b ON b.use_year = a.use_year + AND b.use_month = a.use_month + SET a.this_month_sa_money_share = COALESCE (ROUND( a.this_month_sa_money/b.this_month_sa_money_sum * 100, 2), 0 ), + a.this_month_profit_share = COALESCE (ROUND( a.this_month_profit/b.this_month_profit_sum * 100, 2), 0 ); + + + + -- 本年销售金额占比 this_year_sa_money_share当前行本年销售额/本年销售额总和*100% + -- 本年毛利额占比 THISPROFITSHARE 当前行本年毛利额/本年毛利额总和*100% + UPDATE new_gr_bi_sa_agg_year_count a + LEFT JOIN ( + SELECT + use_year, + SUM( this_year_sa_money ) AS this_year_sa_money_sum, + SUM( this_year_profit ) AS this_year_profit_sum + FROM + new_gr_bi_sa_agg + GROUP BY + use_year + ) b ON b.use_year = a.use_year + SET a.this_year_sa_money_share = COALESCE (ROUND( a.this_year_sa_money/b.this_year_sa_money_sum * 100, 2), 0 ), + a.this_year_profit_growth = COALESCE (ROUND( a.this_year_profit/b.this_year_profit_sum * 100, 2), 0 ); + + + + + -- 上年销售金额占比 LASTSAMONEYSHARE 当前行上年销售额/上年销售额总和*100% + -- 上年毛利额占比 LASTPROFITSHARE 当前行上年毛利额/上年毛利额总和*100% + UPDATE new_gr_bi_sa_agg_year_count a + LEFT JOIN ( + SELECT + use_year, + SUM(last_year_sa_money) AS last_year_sa_money_sum, + SUM(last_year_profit) AS last_year_profit_sum + + FROM + new_gr_bi_sa_agg + GROUP BY + use_year, + use_month + ) b ON b.use_year = a.use_year + SET a.last_year_sa_money_share = COALESCE (ROUND( CASE WHEN last_year_sa_money_sum = 0 or last_year_sa_money_sum is null THEN IF(a.last_year_sa_money > 0, 100, 0) ELSE a.last_year_sa_money/b.last_year_sa_money_sum * 100 END, 2), 0 ), + a.last_year_profit_share = COALESCE (ROUND( CASE WHEN last_year_profit_sum = 0 or last_year_profit_sum is null THEN IF(a.last_year_profit > 0, 100, 0) ELSE a.last_year_profit/b.last_year_profit_sum * 100 END, 2), 0 ); + + + + -- 销售金额增长率 SAMONEYGROWTH (本年销售额-上年销售额)÷上年销售额×100% + -- 毛利额增长率 PROFITGROWTH (本年毛利额 - 上年毛利额) / 上年毛利额 × 100% + -- 毛利变动 PROFITCHANGE 本年毛利额 - 上年毛利额 + UPDATE new_gr_bi_sa_agg + SET + this_year_sa_money_growth = CASE + WHEN ( last_year_sa_money = 0 OR last_year_sa_money IS NULL ) AND this_year_sa_money IS NOT NULL + THEN IF((this_year_sa_money - last_year_sa_money) > 0, 100, 0) + ELSE ( this_year_sa_money - last_year_sa_money )/ last_year_sa_money * 100 + END, + this_year_profit_growth = CASE + WHEN ( last_year_profit = 0 OR last_year_profit IS NULL ) AND this_year_profit IS NOT NULL + THEN IF((this_year_profit - last_year_profit) > 0, 100, 0) + ELSE ( this_year_profit - last_year_profit )/ last_year_profit * 100 + END, + this_year_profit_change = ( this_year_profit - last_year_profit); + + + + + + + insert into new_gr_bi_sa_agg + + use_year, + use_month, + zone_id, + zone_name, + sale_type_id, + sale_type_name, + custom_id, + custom_name, + dosage_id, + dosage_name, + goods_id, + goods_name, + province_id, + province_name, + saler_id, + saler_name, + this_month_sa_qty, + this_month_sa_money, + this_month_cost, + this_month_profit, + + + #{useYear}, + #{useMonth}, + #{zoneId}, + #{zoneName}, + #{saleTypeId}, + #{saleTypeName}, + #{customId}, + #{customName}, + #{dosageId}, + #{dosageName}, + #{goodsId}, + #{goodsName}, + #{provinceId}, + #{provinceName}, + #{salerId}, + #{salerName}, + #{thisMonthSaQty}, + #{thisMonthSaMoney}, + #{thisMonthCost}, + #{thisMonthProfit}, + + + + + update new_gr_bi_sa_agg + + use_year = #{useYear}, + use_month = #{useMonth}, + zone_id = #{zoneId}, + zone_name = #{zoneName}, + sale_type_id = #{saleTypeId}, + sale_type_name = #{saleTypeName}, + custom_id = #{customId}, + custom_name = #{customName}, + dosage_id = #{dosageId}, + dosage_name = #{dosageName}, + goods_id = #{goodsId}, + goods_name = #{goodsName}, + province_id = #{provinceId}, + province_name = #{provinceName}, + saler_id = #{salerId}, + saler_name = #{salerName}, + this_month_sa_qty = #{thisMonthSaQty}, + this_month_sa_money = #{thisMonthSaMoney}, + this_month_cost = #{thisMonthCost}, + this_month_profit = #{thisMonthProfit}, + + where id = #{id} + + + + delete from new_gr_bi_sa_agg where id = #{id} + + + + delete from new_gr_bi_sa_agg where id in + + #{id} + + + \ No newline at end of file diff --git a/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMonthCountMapper.xml b/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMonthCountMapper.xml new file mode 100644 index 0000000..fc21b50 --- /dev/null +++ b/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMonthCountMapper.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, use_year, use_month, zone_id, zone_name, sale_type_id, sale_type_name, custom_id, custom_name, dosage_id, dosage_name, goods_id, goods_name, province_id, province_name, saler_id, saler_name, this_month_sa_qty, last_month_sa_qty, yoy_month_sa_qty, this_month_sa_money, last_month_sa_money, yoy_month_sa_money, this_month_profit, last_month_profit, yoy_month_profit, this_month_cost, last_month_cost, yoy_last_month_cost, this_month_profit_rate, last_month_profit_rate, last_month_profit_share, this_month_sa_money_share, this_month_profit_share from new_gr_bi_sa_agg_month_count + + + + + + + + insert into new_gr_bi_sa_agg_month_count + + use_year, + use_month, + zone_id, + zone_name, + sale_type_id, + sale_type_name, + custom_id, + custom_name, + dosage_id, + dosage_name, + goods_id, + goods_name, + province_id, + province_name, + saler_id, + saler_name, + this_month_sa_qty, + last_month_sa_qty, + yoy_month_sa_qty, + this_month_sa_money, + last_month_sa_money, + yoy_month_sa_money, + this_month_profit, + last_month_profit, + yoy_month_profit, + this_month_cost, + last_month_cost, + yoy_last_month_cost, + this_month_profit_rate, + last_month_profit_rate, + last_month_profit_share, + this_month_sa_money_share, + this_month_profit_share, + + + #{useYear}, + #{useMonth}, + #{zoneId}, + #{zoneName}, + #{saleTypeId}, + #{saleTypeName}, + #{customId}, + #{customName}, + #{dosageId}, + #{dosageName}, + #{goodsId}, + #{goodsName}, + #{provinceId}, + #{provinceName}, + #{salerId}, + #{salerName}, + #{thisMonthSaQty}, + #{lastMonthSaQty}, + #{yoyMonthSaQty}, + #{thisMonthSaMoney}, + #{lastMonthSaMoney}, + #{yoyMonthSaMoney}, + #{thisMonthProfit}, + #{lastMonthProfit}, + #{yoyMonthProfit}, + #{thisMonthCost}, + #{lastMonthCost}, + #{yoyLastMonthCost}, + #{thisMonthProfitRate}, + #{lastMonthProfitRate}, + #{lastMonthProfitShare}, + #{thisMonthSaMoneyShare}, + #{thisMonthProfitShare}, + + + + + update new_gr_bi_sa_agg_month_count + + use_year = #{useYear}, + use_month = #{useMonth}, + zone_id = #{zoneId}, + zone_name = #{zoneName}, + sale_type_id = #{saleTypeId}, + sale_type_name = #{saleTypeName}, + custom_id = #{customId}, + custom_name = #{customName}, + dosage_id = #{dosageId}, + dosage_name = #{dosageName}, + goods_id = #{goodsId}, + goods_name = #{goodsName}, + province_id = #{provinceId}, + province_name = #{provinceName}, + saler_id = #{salerId}, + saler_name = #{salerName}, + this_month_sa_qty = #{thisMonthSaQty}, + last_month_sa_qty = #{lastMonthSaQty}, + yoy_month_sa_qty = #{yoyMonthSaQty}, + this_month_sa_money = #{thisMonthSaMoney}, + last_month_sa_money = #{lastMonthSaMoney}, + yoy_month_sa_money = #{yoyMonthSaMoney}, + this_month_profit = #{thisMonthProfit}, + last_month_profit = #{lastMonthProfit}, + yoy_month_profit = #{yoyMonthProfit}, + this_month_cost = #{thisMonthCost}, + last_month_cost = #{lastMonthCost}, + yoy_last_month_cost = #{yoyLastMonthCost}, + this_month_profit_rate = #{thisMonthProfitRate}, + last_month_profit_rate = #{lastMonthProfitRate}, + last_month_profit_share = #{lastMonthProfitShare}, + this_month_sa_money_share = #{thisMonthSaMoneyShare}, + this_month_profit_share = #{thisMonthProfitShare}, + + where id = #{id} + + + + delete from new_gr_bi_sa_agg_month_count where id = #{id} + + + + delete from new_gr_bi_sa_agg_month_count where id in + + #{id} + + + \ No newline at end of file diff --git a/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggYearCountMapper.xml b/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggYearCountMapper.xml new file mode 100644 index 0000000..c9e611e --- /dev/null +++ b/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggYearCountMapper.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, use_year, zone_id, zone_name, sale_type_id, sale_type_name, custom_id, custom_name, dosage_id, dosage_name, goods_id, goods_name, province_id, province_name, saler_id, saler_name, this_year_sa_qty, last_year_sa_qty, this_year_sa_money, last_year_sa_money, this_year_profit, last_year_profit, this_year_cost, last_year_cost, this_year_profit_rate, last_year_profit_rate, this_year_profit_share, last_year_profit_share, this_year_sa_money_share, last_year_sa_money_share, this_year_sa_money_growth, this_year_profit_growth, this_year_profit_change from new_gr_bi_sa_agg_year_count + + + + + + + + insert into new_gr_bi_sa_agg_year_count + + use_year, + zone_id, + zone_name, + sale_type_id, + sale_type_name, + custom_id, + custom_name, + dosage_id, + dosage_name, + goods_id, + goods_name, + province_id, + province_name, + saler_id, + saler_name, + this_year_sa_qty, + last_year_sa_qty, + this_year_sa_money, + last_year_sa_money, + this_year_profit, + last_year_profit, + this_year_cost, + last_year_cost, + this_year_profit_rate, + last_year_profit_rate, + this_year_profit_share, + last_year_profit_share, + this_year_sa_money_share, + last_year_sa_money_share, + this_year_sa_money_growth, + this_year_profit_growth, + this_year_profit_change, + + + #{useYear}, + #{zoneId}, + #{zoneName}, + #{saleTypeId}, + #{saleTypeName}, + #{customId}, + #{customName}, + #{dosageId}, + #{dosageName}, + #{goodsId}, + #{goodsName}, + #{provinceId}, + #{provinceName}, + #{salerId}, + #{salerName}, + #{thisYearSaQty}, + #{lastYearSaQty}, + #{thisYearSaMoney}, + #{lastYearSaMoney}, + #{thisYearProfit}, + #{lastYearProfit}, + #{thisYearCost}, + #{lastYearCost}, + #{thisYearProfitRate}, + #{lastYearProfitRate}, + #{thisYearProfitShare}, + #{lastYearProfitShare}, + #{thisYearSaMoneyShare}, + #{lastYearSaMoneyShare}, + #{thisYearSaMoneyGrowth}, + #{thisYearProfitGrowth}, + #{thisYearProfitChange}, + + + + + update new_gr_bi_sa_agg_year_count + + use_year = #{useYear}, + zone_id = #{zoneId}, + zone_name = #{zoneName}, + sale_type_id = #{saleTypeId}, + sale_type_name = #{saleTypeName}, + custom_id = #{customId}, + custom_name = #{customName}, + dosage_id = #{dosageId}, + dosage_name = #{dosageName}, + goods_id = #{goodsId}, + goods_name = #{goodsName}, + province_id = #{provinceId}, + province_name = #{provinceName}, + saler_id = #{salerId}, + saler_name = #{salerName}, + this_year_sa_qty = #{thisYearSaQty}, + last_year_sa_qty = #{lastYearSaQty}, + this_year_sa_money = #{thisYearSaMoney}, + last_year_sa_money = #{lastYearSaMoney}, + this_year_profit = #{thisYearProfit}, + last_year_profit = #{lastYearProfit}, + this_year_cost = #{thisYearCost}, + last_year_cost = #{lastYearCost}, + this_year_profit_rate = #{thisYearProfitRate}, + last_year_profit_rate = #{lastYearProfitRate}, + this_year_profit_share = #{thisYearProfitShare}, + last_year_profit_share = #{lastYearProfitShare}, + this_year_sa_money_share = #{thisYearSaMoneyShare}, + last_year_sa_money_share = #{lastYearSaMoneyShare}, + this_year_sa_money_growth = #{thisYearSaMoneyGrowth}, + this_year_profit_growth = #{thisYearProfitGrowth}, + this_year_profit_change = #{thisYearProfitChange}, + + where id = #{id} + + + + delete from new_gr_bi_sa_agg_year_count where id = #{id} + + + + delete from new_gr_bi_sa_agg_year_count where id in + + #{id} + + + \ No newline at end of file diff --git a/lidee-core/src/main/resources/rebel.xml b/lidee-core/src/main/resources/rebel.xml new file mode 100644 index 0000000..98f6331 --- /dev/null +++ b/lidee-core/src/main/resources/rebel.xml @@ -0,0 +1,16 @@ + + + + + + lidee-core + + + + + + + From ddd57cd89956e34337c8add1d3df4dc2962f9525 Mon Sep 17 00:00:00 2001 From: king Date: Thu, 19 Mar 2026 17:19:25 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E7=BB=BC=E5=90=88=E9=94=80=E5=94=AE?= =?UTF-8?q?=E6=83=85=E5=86=B5=E8=A1=A8=20=E5=88=86=E7=BB=84=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/xtsy/zhxsqkLineReportEnhance.java | 622 ++++++++++++------ .../core/framework/entity/NewGrBiSaAgg.java | 108 +++ .../entity/NewGrBiSaAggMonthCount.java | 160 +++++ .../entity/NewGrBiSaAggYearCount.java | 156 +++++ .../framework/mapper/NewGrBiSaAggMapper.java | 7 +- .../service/impl/NewGrBiSaAggServiceImpl.java | 4 +- .../mapper/framework/NewGrBiSaAggMapper.xml | 102 +-- 7 files changed, 907 insertions(+), 252 deletions(-) create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAgg.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggMonthCount.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggYearCount.java diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java index 2fd6b2d..8280444 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java @@ -23,61 +23,65 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { Map params = enhanceContext.getParam().getParams(); if (params.containsKey("Group by")) { List groupFieldList = Arrays.asList(params.get("Group by").toString().split(",")); - StringBuilder executePluginSql = new StringBuilder(); - executePluginSql.append(" SELECT \n"); - if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称 - executePluginSql.append(" tbl_lgbsa.CUSTOMID, \n"); - executePluginSql.append(" tbl_lgbsa.CUSTOMNAME, \n"); - } - if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { //年 - executePluginSql.append(" tbl_lgbsa.USEYEAR, \n"); - if(!(groupFieldList.contains("usemonth") || params.containsKey("usemonth"))){ - executePluginSql.append(" MAX(USEYEAR) as ny, \n"); //年月 + String sql; + if((groupFieldList.contains("usemonth") || params.containsKey("usemonth"))){ + sql = geroupMonthSql(params, groupFieldList); + }else { + StringBuilder executePluginSql = new StringBuilder(); + executePluginSql.append(" SELECT \n"); + if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称 + executePluginSql.append(" tbl_lgbsa.CUSTOMID, \n"); + executePluginSql.append(" tbl_lgbsa.CUSTOMNAME, \n"); } - } - if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { //月 - executePluginSql.append(" tbl_lgbsa.USEMONTH, \n"); - if(groupFieldList.contains("useyear") || params.containsKey("useyear")){ - executePluginSql.append(" MAX(CONCAT(USEYEAR, LPAD(USEMONTH, 2, '0'))) as ny, \n"); //年月 - }else{ - executePluginSql.append(" MAX(LPAD(USEMONTH, 2, '0')) as ny, \n"); + if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { //年 + executePluginSql.append(" tbl_lgbsa.USEYEAR, \n"); + if (!(groupFieldList.contains("usemonth") || params.containsKey("usemonth"))) { + executePluginSql.append(" MAX(USEYEAR) as ny, \n"); //年月 + } + } + if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { //月 + executePluginSql.append(" tbl_lgbsa.USEMONTH, \n"); + if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { + executePluginSql.append(" MAX(CONCAT(USEYEAR, LPAD(USEMONTH, 2, '0'))) as ny, \n"); //年月 + } else { + executePluginSql.append(" MAX(LPAD(USEMONTH, 2, '0')) as ny, \n"); + } + } + if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 + executePluginSql.append(" tbl_lgbsa.ZONEID, \n"); + executePluginSql.append(" tbl_lgbsa.ZONENAME, \n"); + } + if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型 + executePluginSql.append(" tbl_lgbsa.SALETYPEID, \n"); + executePluginSql.append(" tbl_lgbsa.SALETYPENAME, \n"); + } + if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员 + executePluginSql.append(" tbl_lgbsa.SALERID, \n"); + executePluginSql.append(" tbl_lgbsa.SALERNAME, \n"); + } + if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型 + executePluginSql.append(" tbl_lgbsa.DOSAGEID, \n"); + executePluginSql.append(" tbl_lgbsa.DOSAGENAME, \n"); + } + if (params.containsKey("goodsname")) { //货品名称 + executePluginSql.append(" tbl_lgbsa.GOODSID, \n"); + executePluginSql.append(" tbl_lgbsa.GOODSNAME, \n"); } - } - if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 - executePluginSql.append(" tbl_lgbsa.ZONEID, \n"); - executePluginSql.append(" tbl_lgbsa.ZONENAME, \n"); - } - if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型 - executePluginSql.append(" tbl_lgbsa.SALETYPEID, \n"); - executePluginSql.append(" tbl_lgbsa.SALETYPENAME, \n"); - } - if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员 - executePluginSql.append(" tbl_lgbsa.SALERID, \n"); - executePluginSql.append(" tbl_lgbsa.SALERNAME, \n"); - } - if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型 - executePluginSql.append(" tbl_lgbsa.DOSAGEID, \n"); - executePluginSql.append(" tbl_lgbsa.DOSAGENAME, \n"); - } - if (params.containsKey("goodsname")) { //货品名称 - executePluginSql.append(" tbl_lgbsa.GOODSID, \n"); - executePluginSql.append(" tbl_lgbsa.GOODSNAME, \n"); - } - executePluginSql.append(" GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCEID ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCEID, \n"); //行政区域ID - executePluginSql.append(" GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCENAME ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCENAME, \n"); //行政区域名称 - executePluginSql.append(" SUM(tbl_lgbsa.MONTHSAQTY) as MONTHSAQTY, \n"); //本月销量 - executePluginSql.append(" CASE\n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END) > 0 THEN\n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END), 2))\n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END) < 0 THEN\n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END), 2))\n"); - executePluginSql.append(" ELSE '0.00'\n"); - executePluginSql.append(" END AS monthsaqty_yoy,\n"); + executePluginSql.append(" GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCEID ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCEID, \n"); //行政区域ID + executePluginSql.append(" GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCENAME ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCENAME, \n"); //行政区域名称 + executePluginSql.append(" SUM(tbl_lgbsa.MONTHSAQTY) as MONTHSAQTY, \n"); //本月销量 +// executePluginSql.append(" CASE\n"); +// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END) > 0 THEN\n"); +// executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END), 2))\n"); +// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END) < 0 THEN\n"); +// executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END), 2))\n"); +// executePluginSql.append(" ELSE '0.00'\n"); +// executePluginSql.append(" END AS monthsaqty_yoy,\n"); //本月销量同比 // executePluginSql.append(" CONCAT(ROUND((SELECT SUM(MONTHSAQTY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS monthsaqty_s, \n"); // executePluginSql.append(" CONCAT(ROUND((SELECT SUM(THISSAQTY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS thissaqty_s, \n"); // executePluginSql.append(" CONCAT(ROUND((SELECT SUM(LASTSAQTY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS lastsaqty_s, \n"); @@ -85,156 +89,384 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { // executePluginSql.append(" CONCAT(ROUND((SELECT SUM(MONTHSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS monthsamoney_s, \n"); // executePluginSql.append(" CONCAT(ROUND((SELECT SUM(THISSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000,2), '亿') AS thissamoney_s, \n"); // executePluginSql.append(" CONCAT(ROUND((SELECT SUM(LASTSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000,2), '亿') AS lastsamoney_s, \n"); - executePluginSql.append(" SUM(tbl_lgbsa.MONTHSAQTY) as THISSAQTY, \n"); //本年销量 - executePluginSql.append(" SUM(tbl_lgbsa.LASTSAQTY) as LASTSAQTY, \n"); //上年销量 - executePluginSql.append(" -- 数量同比(原有) \n"); - executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END), 2)) \n"); - executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS saqty_yoy, \n"); - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHSAMONEY) / 10000, 2) as MONTHSAMONEY, \n"); //本月销售金额(元) - executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END), 2)) \n"); - executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS monthsamoney_yoy, \n"); - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHSAMONEY) / 10000, 2) as THISSAMONEY, \n"); //本年销售金额(元) + executePluginSql.append(" SUM(tbl_lgbsa.MONTHSAQTY) as THISSAQTY, \n"); //本年销量 + executePluginSql.append(" SUM(tbl_lgbsa.LASTSAQTY) as LASTSAQTY, \n"); //上年销量 + executePluginSql.append(" -- 数量同比(原有) \n"); + executePluginSql.append(" CASE \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END), 2)) \n"); + executePluginSql.append(" ELSE '0.00' \n"); + executePluginSql.append(" END AS saqty_yoy, \n"); //数量同比 +// executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHSAMONEY) / 10000, 2) as MONTHSAMONEY, \n"); //本月销售金额(元) +// executePluginSql.append(" CASE \n"); +// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END) > 0 THEN \n"); +// executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END), 2)) \n"); +// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END) < 0 THEN \n"); +// executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END), 2)) \n"); +// executePluginSql.append(" ELSE '0.00' \n"); +// executePluginSql.append(" END AS monthsamoney_yoy, \n"); //本月销售金额同比 + executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHSAMONEY) / 10000, 2) as THISSAMONEY, \n"); //本年销售金额(元) // SUM( MONTHSAQTY ) AS THISSAQTY, -- 本年销量 // SUM( MONTHSAMONEY ) AS THISSAMONEY, -- 本年销售金额 // SUM( MONTHCOST) as THISCOST, -- 本年销售成本 // SUM( MONTHPROFIT ) AS THISPROFIT -- 本年毛利额 - executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END), 2)) \n"); - executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS lastMonthSaMoney_yoy, \n"); //本月销售金额增长率 - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.LASTSAMONEY) / 10000, 2) as LASTSAMONEY, \n"); //上年销售金额(元) - executePluginSql.append(" -- 销售金额同比(原有新增) \n"); - executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END), 2)) \n"); - executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS samoney_yoy, \n"); //销售收入同比 - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHPROFIT) / 10000, 2) as MONTHPROFIT, \n"); //本月毛利额(元) - executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT) = 0 THEN IF(sum(tbl_lgbsa.MONTHPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHPROFIT) - sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT)) / sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT) = 0 THEN IF(sum(tbl_lgbsa.MONTHPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHPROFIT) - sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT)) / sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT) = 0 THEN IF(sum(tbl_lgbsa.MONTHPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHPROFIT) - sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT)) / sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT) = 0 THEN IF(sum(tbl_lgbsa.MONTHPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHPROFIT) - sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT)) / sum(tbl_lgbsa.LASTYEAROFMONTHPROFIT) * 100 END), 2)) \n"); - executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS monthprofit_yoy, \n"); //年度毛利同比 - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHPROFIT) / 10000, 2) as THISPROFIT, \n"); //本年毛利额(元) - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.LASTPROFIT) / 10000, 2) as LASTPROFIT, \n"); //上年毛利额(元) - executePluginSql.append(" -- 新增:毛利同比 \n"); - executePluginSql.append(" CASE \n"); - executePluginSql.append(" -- 正数:红色圆点emoji + 数值 + % \n"); - executePluginSql.append("WHEN (CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(MAX(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(sum(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END), 2)) \n"); - executePluginSql.append(" -- 负数:绿色圆点emoji + 数值 + % \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(sum(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(MAX(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END), 2)) \n"); - executePluginSql.append(" -- 0值:直接显示 \n"); - executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS profit_yoy, \n"); //毛利同比 - executePluginSql.append(" ROUND(SUM(tbl_lgbsamc.this_month_cost) / 10000, 2) as this_month_cost, \n"); //本月销售成本(元) - executePluginSql.append(" ROUND(MAX(tbl_lgbsayc.this_year_cost) / 10000, 2) as this_year_cost, \n"); //本年销售成本(元) - executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END), 2)) \n"); - executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS this_month_cost_yoy, \n"); //本月销售成本同比 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITCHANGE), 2) as PROFITCHANGE, \n"); //毛利变动(元) - executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITGROWTH), 2) as PROFITGROWTH, \n"); //毛利额增长率 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISPROFITRATE), 2) as THISPROFITRATE, \n"); //本年毛利率 - executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2)) \n"); - executePluginSql.append(" WHEN ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2)) \n"); - executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS SAMONEYGROWTH, \n");//销售金额增长率 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.LASTPROFITSHARE) * 100, 2) as LASTPROFITSHARE, \n"); //上年毛利额占比 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISPROFITSHARE) * 100, 2) AS THISPROFITSHARE, \n"); //本年毛利额占比 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.MONTHPROFITSHARE) * 100, 2) AS MONTHPROFITSHARE, \n"); //本月毛利额占比 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.LASTSAMONEYSHARE) * 100, 2) AS LASTSAMONEYSHARE, \n"); //上年销售金额占比 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISSAMONEYSHARE) * 100, 2) AS THISSAMONEYSHARE, \n"); //本年销售金额占比 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.MONTHSAMONEYSHARE) * 100, 2) AS MONTHSAMONEYSHARE \n"); //本月销售金额占比 - executePluginSql.append(" FROM \n"); - executePluginSql.append(" yunji_gr_bi_sa_agg tbl_lgbsa \n"); - executePluginSql.append(" GROUP BY \n"); - if (groupFieldList.contains("customname") || params.containsKey("customname")) { - executePluginSql.append(" tbl_lgbsa.CUSTOMID,"); - executePluginSql.append(" tbl_lgbsa.CUSTOMNAME,"); +// executePluginSql.append(" CASE \n"); +// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END) > 0 THEN \n"); +// executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END), 2)) \n"); +// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END) < 0 THEN \n"); +// executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END), 2)) \n"); +// executePluginSql.append(" ELSE '0.00' \n"); +// executePluginSql.append(" END AS lastMonthSaMoney_yoy, \n"); //本月销售金额增长率 + executePluginSql.append(" ROUND(SUM(tbl_lgbsa.LASTSAMONEY) / 10000, 2) as LASTSAMONEY, \n"); //上年销售金额(元) + executePluginSql.append(" -- 销售金额同比(原有新增) \n"); + executePluginSql.append(" CASE \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END), 2)) \n"); + executePluginSql.append(" ELSE '0.00' \n"); + executePluginSql.append(" END AS samoney_yoy, \n"); //销售收入同比 + executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHPROFIT) / 10000, 2) as MONTHPROFIT, \n"); //本月毛利额(元) + executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHPROFIT) / 10000, 2) as THISPROFIT, \n"); //本年毛利额(元) + executePluginSql.append(" ROUND(SUM(tbl_lgbsa.LASTPROFIT) / 10000, 2) as LASTPROFIT, \n"); //上年毛利额(元) + executePluginSql.append(" -- 新增:毛利同比 \n"); + executePluginSql.append(" CASE \n"); + executePluginSql.append(" -- 正数:红色圆点emoji + 数值 + % \n"); + executePluginSql.append("WHEN (CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(MAX(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(sum(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END), 2)) \n"); + executePluginSql.append(" -- 负数:绿色圆点emoji + 数值 + % \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(sum(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(MAX(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END), 2)) \n"); + executePluginSql.append(" -- 0值:直接显示 \n"); + executePluginSql.append(" ELSE '0.00' \n"); + executePluginSql.append(" END AS profit_yoy, \n"); //本年毛利同比 + executePluginSql.append(" ROUND(SUM(tbl_lgbsamc.this_month_cost) / 10000, 2) as this_month_cost, \n"); //本月销售成本(元) + executePluginSql.append(" ROUND(MAX(tbl_lgbsayc.this_year_cost) / 10000, 2) as this_year_cost, \n"); //本年销售成本(元) +// executePluginSql.append(" CASE \n"); +// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END) > 0 THEN \n"); +// executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END), 2)) \n"); +// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END) < 0 THEN \n"); +// executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); +// executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END), 2)) \n"); +// executePluginSql.append(" ELSE '0.00' \n"); +// executePluginSql.append(" END AS this_month_cost_yoy, \n"); //本月销售成本同比 + executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITCHANGE), 2) as PROFITCHANGE, \n"); //毛利变动(元) + executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITGROWTH), 2) as PROFITGROWTH, \n"); //毛利额增长率 + executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISPROFITRATE), 2) as THISPROFITRATE, \n"); //本年毛利率 + executePluginSql.append(" CASE \n"); + executePluginSql.append(" WHEN ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2)) \n"); + executePluginSql.append(" WHEN ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2)) \n"); + executePluginSql.append(" ELSE '0.00' \n"); + executePluginSql.append(" END AS SAMONEYGROWTH, \n");//销售金额增长率 + executePluginSql.append(" ROUND(avg(tbl_lgbsa.LASTPROFITSHARE) * 100, 2) as LASTPROFITSHARE, \n"); //上年毛利额占比 + executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISPROFITSHARE) * 100, 2) AS THISPROFITSHARE, \n"); //本年毛利额占比 + executePluginSql.append(" ROUND(avg(tbl_lgbsa.LASTSAMONEYSHARE) * 100, 2) AS LASTSAMONEYSHARE, \n"); //上年销售金额占比 + executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISSAMONEYSHARE) * 100, 2) AS THISSAMONEYSHARE, \n"); //本年销售金额占比 + executePluginSql.append(" FROM \n"); + executePluginSql.append(" yunji_gr_bi_sa_agg tbl_lgbsa \n"); + executePluginSql.append(" GROUP BY \n"); + if (groupFieldList.contains("customname") || params.containsKey("customname")) { + executePluginSql.append(" tbl_lgbsa.CUSTOMID,"); + executePluginSql.append(" tbl_lgbsa.CUSTOMNAME,"); + } + if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { + executePluginSql.append(" tbl_lgbsa.USEYEAR,"); + } + if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { + executePluginSql.append(" tbl_lgbsa.USEMONTH,"); + } + if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { + executePluginSql.append(" tbl_lgbsa.ZONEID,"); + executePluginSql.append(" tbl_lgbsa.ZONENAME,"); + } + if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { + executePluginSql.append(" tbl_lgbsa.SALETYPEID,"); + executePluginSql.append(" tbl_lgbsa.SALETYPENAME,"); + } + if (groupFieldList.contains("salername") || params.containsKey("salername")) { + executePluginSql.append(" tbl_lgbsa.SALERID,"); + executePluginSql.append(" tbl_lgbsa.SALERNAME,"); + } + if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { + executePluginSql.append(" tbl_lgbsa.DOSAGEID,"); + executePluginSql.append(" tbl_lgbsa.DOSAGENAME,"); + } + if (params.containsKey("goodsname")) { //货品名称 + executePluginSql.append(" tbl_lgbsa.GOODSID,"); + executePluginSql.append(" tbl_lgbsa.GOODSNAME,"); + } + executePluginSql.deleteCharAt(executePluginSql.length() - 1); + sql = executePluginSql.toString(); } - if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { - executePluginSql.append(" tbl_lgbsa.USEYEAR,"); - } - if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { - executePluginSql.append(" tbl_lgbsa.USEMONTH,"); - } - if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { - executePluginSql.append(" tbl_lgbsa.ZONEID,"); - executePluginSql.append(" tbl_lgbsa.ZONENAME,"); - } - if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { - executePluginSql.append(" tbl_lgbsa.SALETYPEID,"); - executePluginSql.append(" tbl_lgbsa.SALETYPENAME,"); - } - if (groupFieldList.contains("salername") || params.containsKey("salername")) { - executePluginSql.append(" tbl_lgbsa.SALERID,"); - executePluginSql.append(" tbl_lgbsa.SALERNAME,"); - } - if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { - executePluginSql.append(" tbl_lgbsa.DOSAGEID,"); - executePluginSql.append(" tbl_lgbsa.DOSAGENAME,"); - } - if (params.containsKey("goodsname")) { //货品名称 - executePluginSql.append(" tbl_lgbsa.GOODSID,"); - executePluginSql.append(" tbl_lgbsa.GOODSNAME,"); - } - executePluginSql.deleteCharAt(executePluginSql.length() - 1); - params.put("executePluginSql", executePluginSql.toString()); + params.put("executePluginSql", sql); // params.remove("Group by"); // 原有的逻辑注释了,这里也注释 } } + + private String geroupMonthSql(Map params, List groupFieldList) { + + + StringBuilder executePluginSql = new StringBuilder(); + + executePluginSql.append("select"); + if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称 + executePluginSql.append(" current_month.custom_id as customid, \n"); + executePluginSql.append(" current_month.custom_name as customname, \n"); + } + if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { //月 + executePluginSql.append(" current_month.use_year as useyear,"); + executePluginSql.append(" current_month.use_month as usemonth, \n"); + if(groupFieldList.contains("useyear") || params.containsKey("useyear")){ + executePluginSql.append(" MAX(CONCAT(current_month.use_year, LPAD(current_month.use_month, 2, '0'))) as ny, \n"); //年月 + }else{ + executePluginSql.append(" MAX(LPAD(current_month.use_month, 2, '0')) as ny, \n"); + } + } + if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 + executePluginSql.append(" current_month.zone_id, \n"); + executePluginSql.append(" current_month.zone_name as zonename, \n"); + } + if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型 + executePluginSql.append(" current_month.sale_type_id, \n"); + executePluginSql.append(" current_month.sale_type_name as saletypename, \n"); + } + if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员 + executePluginSql.append(" current_month.saler_id, \n"); + executePluginSql.append(" current_month.saler_name as salername, \n"); + } + if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型 + executePluginSql.append(" current_month.dosage_id, \n"); + executePluginSql.append(" current_month.dosage_name as dosagename, \n"); + } + if (params.containsKey("goodsname")) { //货品名称 + executePluginSql.append(" current_month.goods_id, \n"); + executePluginSql.append(" current_month.goods_name as goodsname, \n"); + } + executePluginSql.append(" SUM(current_month.this_month_sa_qty) as thisMonthSaQty, "); //本月销售数量(件) + executePluginSql.append(" ROUND(SUM(current_month.this_month_sa_money) / 10000, 2) as thisMonthSaMoney, "); //本月销售金额(元) + executePluginSql.append(" ROUND(SUM(current_month.this_month_profit) / 10000, 2) as thisMonthProfit, "); //本月毛利额(元) + executePluginSql.append(" ROUND(SUM(current_month.this_month_cost) / 10000, 2) as thisMonthCost, "); //本月成本(元) + + executePluginSql.append(" SUM(last_month_data.last_month_sa_qty) as lastMonthSaQty, "); //上月销售数量(件) + executePluginSql.append(" ROUND(SUM(last_month_data.last_month_sa_money) / 10000, 2) as lastMonthSaMoney, "); //上月销售金额(元) + executePluginSql.append(" ROUND(SUM(last_month_data.last_month_profit) / 10000, 2) as lastMonthProfit, "); //上月毛利额(元) + executePluginSql.append(" ROUND(SUM(last_month_data.last_month_cost) / 10000, 2) as lastMonthCost, "); //上月成本(元) + + executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_sa_qty)/ 10000, 2) as yoyMonthSaQty, "); //同比月销售数量(件) + executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_sa_money) / 10000, 2) as yoyMonthSaMoney, "); //同比月销售金额(元) + executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_profit) / 10000, 2) as yoyMonthProfit, "); //同比月毛利额(元) + executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_cost) / 10000, 2) as yoyMonthCost, "); //同比月成本(元) + executePluginSql.append(" GROUP_CONCAT(DISTINCT current_month.province_id ORDER BY current_month.province_id SEPARATOR ',') as province_id, \n"); //行政区域ID + executePluginSql.append(" GROUP_CONCAT(DISTINCT current_month.province_name ORDER BY current_month.province_name SEPARATOR ',') as province_name, \n"); //行政区域名称 + executePluginSql.append(" CASE WHEN (CASE WHEN sum(yoy_month.yoy_month_sa_qty) = 0 THEN IF(sum(current_month.this_month_sa_qty) > 0, 100, 0)\n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_qty) - sum(yoy_month.yoy_month_sa_qty)) / sum(yoy_month.yoy_month_sa_qty) * 100 END) > 0 THEN\n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_sa_qty) = 0 THEN IF(sum(current_month.this_month_sa_qty) > 0, 100, 0)\n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_qty) - sum(yoy_month.yoy_month_sa_qty)) / sum(yoy_month.yoy_month_sa_qty) * 100 END), 2))\n"); + executePluginSql.append(" WHEN (CASE WHEN sum(yoy_month.yoy_month_sa_qty) = 0 THEN IF(sum(current_month.this_month_sa_qty) > 0, 100, 0)\n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_qty) - sum(yoy_month.yoy_month_sa_qty)) / sum(yoy_month.yoy_month_sa_qty) * 100 END) < 0 THEN\n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_sa_qty) = 0 THEN IF(sum(current_month.this_month_sa_qty) > 0, 100, 0)\n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_qty) - sum(yoy_month.yoy_month_sa_qty)) / sum(yoy_month.yoy_month_sa_qty) * 100 END), 2))\n"); + executePluginSql.append(" ELSE '0.00'\n"); + executePluginSql.append(" END AS monthsaqty_yoy,\n"); //本月销量同比 + + executePluginSql.append(" CASE WHEN (CASE WHEN sum(yoy_month.yoy_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(yoy_month.yoy_month_sa_money)) / sum(yoy_month.yoy_month_sa_money) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(yoy_month.yoy_month_sa_money)) / sum(yoy_month.yoy_month_sa_money) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(yoy_month.yoy_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(yoy_month.yoy_month_sa_money)) / sum(yoy_month.yoy_month_sa_money) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(yoy_month.yoy_month_sa_money)) / sum(yoy_month.yoy_month_sa_money) * 100 END), 2)) \n"); + executePluginSql.append(" ELSE '0.00' \n"); + executePluginSql.append(" END AS monthsamoney_yoy, \n"); //本月销售金额同比 + + executePluginSql.append(" CASE WHEN (CASE WHEN sum(last_month_data.last_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(last_month_data.last_month_sa_money)) / sum(last_month_data.last_month_sa_money) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_month_data.last_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(last_month_data.last_month_sa_money)) / sum(last_month_data.last_month_sa_money) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(last_month_data.last_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(last_month_data.last_month_sa_money)) / sum(last_month_data.last_month_sa_money) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_month_data.last_month_sa_money) = 0 THEN IF(sum(current_month.this_month_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_sa_money) - sum(last_month_data.last_month_sa_money)) / sum(last_month_data.last_month_sa_money) * 100 END), 2)) \n"); + executePluginSql.append(" ELSE '0.00' \n"); + executePluginSql.append(" END AS lastMonthSaMoney_yoy, \n"); //本月销售金额增长率 + + executePluginSql.append(" CASE WHEN (CASE WHEN sum(yoy_month.yoy_month_cost) = 0 THEN IF(sum(current_month.this_month_cost) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_cost) - sum(yoy_month.yoy_month_cost)) / sum(yoy_month.yoy_month_cost) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_cost) = 0 THEN IF(sum(current_month.this_month_cost) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_cost) - sum(yoy_month.yoy_month_cost)) / sum(yoy_month.yoy_month_cost) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(yoy_month.yoy_month_cost) = 0 THEN IF(sum(current_month.this_month_cost) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_cost) - sum(yoy_month.yoy_month_cost)) / sum(yoy_month.yoy_month_cost) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_cost) = 0 THEN IF(sum(current_month.this_month_cost) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_month.this_month_cost) - sum(yoy_month.yoy_month_cost)) / sum(yoy_month.yoy_month_cost) * 100 END), 2)) \n"); + executePluginSql.append(" ELSE '0.00' \n"); + executePluginSql.append(" END AS this_month_cost_yoy, \n"); //本月销售成本同比 + + executePluginSql.append(" CASE WHEN (CASE WHEN sum(yoy_month.yoy_month_profit) = 0 THEN IF(sum(yoy_month.yoy_month_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(yoy_month.yoy_month_profit) - sum(yoy_month.yoy_month_profit)) / sum(yoy_month.yoy_month_profit) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_profit) = 0 THEN IF(sum(yoy_month.yoy_month_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(yoy_month.yoy_month_profit) - sum(yoy_month.yoy_month_profit)) / sum(yoy_month.yoy_month_profit) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(yoy_month.yoy_month_profit) = 0 THEN IF(sum(yoy_month.yoy_month_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(yoy_month.yoy_month_profit) - sum(yoy_month.yoy_month_profit)) / sum(yoy_month.yoy_month_profit) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(yoy_month.yoy_month_profit) = 0 THEN IF(sum(yoy_month.yoy_month_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(yoy_month.yoy_month_profit) - sum(yoy_month.yoy_month_profit)) / sum(yoy_month.yoy_month_profit) * 100 END), 2)) \n"); + executePluginSql.append(" ELSE '0.00' \n"); + executePluginSql.append(" END AS monthprofit_yoy, \n"); //本月毛利同比 + + executePluginSql.append(" COALESCE (ROUND( sum(current_month.this_month_sa_money)/SUM(total_month_data.this_month_sa_money_sum) * 100, 2), 0 ) as this_month_sa_money_share,\n"); //本月毛利额占比 + executePluginSql.append(" COALESCE (ROUND( sum(current_month.this_month_profit)/SUM(total_month_data.this_month_profit_sum) * 100, 2), 0 ) as this_month_profit_share \n"); //本月销售金额占比 +// executePluginSql.append(" ROUND(avg(tbl_lgbsa.MONTHPROFITSHARE) * 100, 2) AS MONTHPROFITSHARE, \n"); //本月毛利额占比 +// executePluginSql.append(" ROUND(avg(tbl_lgbsa.MONTHSAMONEYSHARE) * 100, 2) AS MONTHSAMONEYSHARE \n"); //本月销售金额占比 + executePluginSql.append(" from new_gr_bi_sa_agg_month_count as current_month "); + executePluginSql.append(" LEFT JOIN (SELECT "); + executePluginSql.append(" use_year, "); + executePluginSql.append(" use_month, "); + executePluginSql.append(" goods_id, "); + executePluginSql.append(" zone_id, "); + executePluginSql.append(" province_id, "); + executePluginSql.append(" sale_type_id, "); + executePluginSql.append(" dosage_id, "); + executePluginSql.append(" custom_id, "); + executePluginSql.append(" saler_id, "); + executePluginSql.append(" SUM(this_month_sa_qty) AS last_month_sa_qty, "); + executePluginSql.append(" SUM(this_month_sa_money) AS last_month_sa_money, "); + executePluginSql.append(" SUM(this_month_cost) AS last_month_cost, "); + executePluginSql.append(" SUM(this_month_profit) AS last_month_profit "); + executePluginSql.append(" FROM new_gr_bi_sa_agg_month_count "); + executePluginSql.append(" GROUP BY use_year, "); + executePluginSql.append(" use_month, "); + executePluginSql.append(" goods_id, "); + executePluginSql.append(" zone_id, "); + executePluginSql.append(" province_id, "); + executePluginSql.append(" sale_type_id, "); + executePluginSql.append(" dosage_id, "); + executePluginSql.append(" custom_id, "); + executePluginSql.append(" saler_id) AS last_month_data "); + executePluginSql.append(" ON current_month.goods_id = last_month_data.goods_id "); + executePluginSql.append(" AND current_month.zone_id = last_month_data.zone_id "); + executePluginSql.append(" AND current_month.province_id = last_month_data.province_id "); + executePluginSql.append(" AND current_month.sale_type_id = last_month_data.sale_type_id "); + executePluginSql.append(" AND current_month.dosage_id = last_month_data.dosage_id "); + executePluginSql.append(" AND current_month.custom_id = last_month_data.custom_id "); + executePluginSql.append(" AND current_month.saler_id = last_month_data.saler_id "); + executePluginSql.append(" AND last_month_data.use_year = current_month.use_year - (current_month.use_month = 1)"); + executePluginSql.append(" AND last_month_data.use_month = IF(current_month.use_month = 1, 12, current_month.use_month - 1)"); + executePluginSql.append(" LEFT JOIN (SELECT use_year, "); + executePluginSql.append(" use_month, "); + executePluginSql.append(" goods_id, "); + executePluginSql.append(" zone_id, "); + executePluginSql.append(" province_id, "); + executePluginSql.append(" sale_type_id, "); + executePluginSql.append(" dosage_id, "); + executePluginSql.append(" custom_id, "); + executePluginSql.append(" saler_id, "); + executePluginSql.append(" SUM(this_month_sa_qty) AS yoy_month_sa_qty, "); // 同比月销量 + executePluginSql.append(" SUM(this_month_sa_money) AS yoy_month_sa_money, "); // 同比月销售金额 + executePluginSql.append(" SUM(this_month_cost) as yoy_month_cost, "); // 同比月销售成本 + executePluginSql.append(" SUM(this_month_profit) AS yoy_month_profit "); // 同比月毛利额 + executePluginSql.append(" FROM new_gr_bi_sa_agg_month_count "); +// if(params.containsKey("useyear")){ +// executePluginSql.append(" where use_year = " + (Integer.parseInt(params.get("useyear").toString())-1)); +// } + executePluginSql.append(" GROUP BY use_year, "); + executePluginSql.append(" use_month, "); + executePluginSql.append(" goods_id, "); + executePluginSql.append(" zone_id, "); + executePluginSql.append(" province_id, "); + executePluginSql.append(" sale_type_id, "); + executePluginSql.append(" dosage_id, "); + executePluginSql.append(" custom_id, "); + executePluginSql.append(" saler_id) yoy_month ON yoy_month.use_year = current_month.use_year - 1 "); + executePluginSql.append(" AND yoy_month.use_month = current_month.use_month "); + executePluginSql.append(" AND yoy_month.goods_id = current_month.goods_id "); + executePluginSql.append(" AND yoy_month.zone_id = current_month.zone_id "); + executePluginSql.append(" AND yoy_month.province_id = current_month.province_id "); + executePluginSql.append(" AND yoy_month.sale_type_id = current_month.sale_type_id "); + executePluginSql.append(" AND yoy_month.dosage_id = current_month.dosage_id "); + executePluginSql.append(" AND yoy_month.custom_id = current_month.custom_id "); + executePluginSql.append(" AND yoy_month.saler_id = current_month.saler_id "); + executePluginSql.append(" LEFT JOIN ("); + executePluginSql.append(" SELECT "); + executePluginSql.append(" use_year, "); + executePluginSql.append(" use_month, "); + executePluginSql.append(" SUM( this_month_sa_money ) AS this_month_sa_money_sum, "); + executePluginSql.append(" SUM(this_month_profit) AS this_month_profit_sum "); + executePluginSql.append(" FROM new_gr_bi_sa_agg "); +// if(params.containsKey("useyear")){ +// executePluginSql.append(" where use_year = " + params.get("useyear")); +// } + executePluginSql.append(" GROUP BY "); + executePluginSql.append(" use_year, use_month"); + executePluginSql.append(" ) total_month_data ON total_month_data.use_year = current_month.use_year "); + executePluginSql.append(" AND total_month_data.use_month = current_month.use_month "); +// if(params.containsKey("useyear")){ +// executePluginSql.append(" where current_month.use_year = " + params.get("useyear")); +// if(params.containsKey("usemonth")){ +// executePluginSql.append(" and current_month.use_month = " + params.get("usemonth")); +// } +// } + executePluginSql.append(" GROUP BY \n"); + if (groupFieldList.contains("customname") || params.containsKey("customname")) { + executePluginSql.append(" current_month.custom_id,"); + executePluginSql.append(" current_month.custom_name,"); + } + if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { + executePluginSql.append(" current_month.use_year,"); + } + if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { + executePluginSql.append(" current_month.use_month,"); + } + if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { + executePluginSql.append(" current_month.zone_id,"); + executePluginSql.append(" current_month.zone_name,"); + } + if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { + executePluginSql.append(" current_month.sale_type_id,"); + executePluginSql.append(" current_month.sale_type_name,"); + } + if (groupFieldList.contains("salername") || params.containsKey("salername")) { + executePluginSql.append(" current_month.saler_id,"); + executePluginSql.append(" current_month.saler_name,"); + } + if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { + executePluginSql.append(" current_month.dosage_id,"); + executePluginSql.append(" current_month.dosage_name,"); + } + if (params.containsKey("goodsname")) { //货品名称 + executePluginSql.append(" current_month.goods_id,"); + executePluginSql.append(" current_month.goods_name,"); + } + + executePluginSql.deleteCharAt(executePluginSql.length() - 1); + return executePluginSql.toString(); + + } } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAgg.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAgg.java new file mode 100644 index 0000000..8a1ea3a --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAgg.java @@ -0,0 +1,108 @@ +package com.lideeyunji.core.framework.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import java.io.Serializable; + +/** + * 综合销售情况明细对象 new_gr_bi_sa_agg + * + * @author king + * @date 2026-03-19 + */ +@TableName("new_gr_bi_sa_agg") +@Data +public class NewGrBiSaAgg implements Serializable +{ + private static final long serialVersionUID = 1L; + + @TableField(value = "id") + private Long id; + + + @TableField(value = "use_year") + private int useYear; + + + @TableField(value = "use_month") + private int useMonth; + + + @TableField(value = "zone_id") + private Long zoneId; + + + @TableField(value = "zone_name") + private String zoneName; + + + @TableField(value = "sale_type_id") + private Long saleTypeId; + + + @TableField(value = "sale_type_name") + private String saleTypeName; + + + @TableField(value = "custom_id") + private Long customId; + + + @TableField(value = "custom_name") + private String customName; + + + @TableField(value = "dosage_id") + private Long dosageId; + + + @TableField(value = "dosage_name") + private String dosageName; + + + @TableField(value = "goods_id") + private Long goodsId; + + + @TableField(value = "goods_name") + private String goodsName; + + + @TableField(value = "province_id") + private Long provinceId; + + + @TableField(value = "province_name") + private String provinceName; + + + @TableField(value = "saler_id") + private Long salerId; + + + @TableField(value = "saler_name") + private String salerName; + + + @TableField(value = "this_month_sa_qty") + private BigDecimal thisMonthSaQty; + + + @TableField(value = "this_month_sa_money") + private BigDecimal thisMonthSaMoney; + + + @TableField(value = "this_month_cost") + private BigDecimal thisMonthCost; + + + @TableField(value = "this_month_profit") + private BigDecimal thisMonthProfit; + + + + + +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggMonthCount.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggMonthCount.java new file mode 100644 index 0000000..b81b501 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggMonthCount.java @@ -0,0 +1,160 @@ +package com.lideeyunji.core.framework.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import java.io.Serializable; + +/** + * 综合销售情况月维度对象 new_gr_bi_sa_agg_month_count + * + * @author king + * @date 2026-03-19 + */ +@TableName("new_gr_bi_sa_agg_month_count") +@Data +public class NewGrBiSaAggMonthCount implements Serializable +{ + private static final long serialVersionUID = 1L; + + @TableField(value = "id") + private Long id; + + + @TableField(value = "use_year") + private String useYear; + + + @TableField(value = "use_month") + private Long useMonth; + + + @TableField(value = "zone_id") + private Long zoneId; + + + @TableField(value = "zone_name") + private String zoneName; + + + @TableField(value = "sale_type_id") + private Long saleTypeId; + + + @TableField(value = "sale_type_name") + private String saleTypeName; + + + @TableField(value = "custom_id") + private Long customId; + + + @TableField(value = "custom_name") + private String customName; + + + @TableField(value = "dosage_id") + private Long dosageId; + + + @TableField(value = "dosage_name") + private String dosageName; + + + @TableField(value = "goods_id") + private Long goodsId; + + + @TableField(value = "goods_name") + private String goodsName; + + + @TableField(value = "province_id") + private Long provinceId; + + + @TableField(value = "province_name") + private String provinceName; + + + @TableField(value = "saler_id") + private Long salerId; + + + @TableField(value = "saler_name") + private String salerName; + + + @TableField(value = "this_month_sa_qty") + private Long thisMonthSaQty; + + + @TableField(value = "last_month_sa_qty") + private Long lastMonthSaQty; + + + @TableField(value = "yoy_month_sa_qty") + private Long yoyMonthSaQty; + + + @TableField(value = "this_month_sa_money") + private BigDecimal thisMonthSaMoney; + + + @TableField(value = "last_month_sa_money") + private BigDecimal lastMonthSaMoney; + + + @TableField(value = "yoy_month_sa_money") + private BigDecimal yoyMonthSaMoney; + + + @TableField(value = "this_month_profit") + private BigDecimal thisMonthProfit; + + + @TableField(value = "last_month_profit") + private BigDecimal lastMonthProfit; + + + @TableField(value = "yoy_month_profit") + private BigDecimal yoyMonthProfit; + + + @TableField(value = "this_month_cost") + private BigDecimal thisMonthCost; + + + @TableField(value = "last_month_cost") + private BigDecimal lastMonthCost; + + + @TableField(value = "yoy_last_month_cost") + private BigDecimal yoyLastMonthCost; + + + @TableField(value = "this_month_profit_rate") + private BigDecimal thisMonthProfitRate; + + + @TableField(value = "last_month_profit_rate") + private BigDecimal lastMonthProfitRate; + + + @TableField(value = "last_month_profit_share") + private BigDecimal lastMonthProfitShare; + + + @TableField(value = "this_month_sa_money_share") + private BigDecimal thisMonthSaMoneyShare; + + + @TableField(value = "this_month_profit_share") + private BigDecimal thisMonthProfitShare; + + + + + +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggYearCount.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggYearCount.java new file mode 100644 index 0000000..342c9b8 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggYearCount.java @@ -0,0 +1,156 @@ +package com.lideeyunji.core.framework.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import java.io.Serializable; + +/** + * 综合销售情况年维度对象 new_gr_bi_sa_agg_year_count + * + * @author king + * @date 2026-03-19 + */ +@TableName("new_gr_bi_sa_agg_year_count") +@Data +public class NewGrBiSaAggYearCount implements Serializable +{ + private static final long serialVersionUID = 1L; + + @TableField(value = "id") + private Long id; + + + @TableField(value = "use_year") + private String useYear; + + + @TableField(value = "zone_id") + private Long zoneId; + + + @TableField(value = "zone_name") + private String zoneName; + + + @TableField(value = "sale_type_id") + private Long saleTypeId; + + + @TableField(value = "sale_type_name") + private String saleTypeName; + + + @TableField(value = "custom_id") + private Long customId; + + + @TableField(value = "custom_name") + private String customName; + + + @TableField(value = "dosage_id") + private Long dosageId; + + + @TableField(value = "dosage_name") + private String dosageName; + + + @TableField(value = "goods_id") + private Long goodsId; + + + @TableField(value = "goods_name") + private String goodsName; + + + @TableField(value = "province_id") + private Long provinceId; + + + @TableField(value = "province_name") + private String provinceName; + + + @TableField(value = "saler_id") + private Long salerId; + + + @TableField(value = "saler_name") + private String salerName; + + + @TableField(value = "this_year_sa_qty") + private Long thisYearSaQty; + + + @TableField(value = "last_year_sa_qty") + private Long lastYearSaQty; + + + @TableField(value = "this_year_sa_money") + private BigDecimal thisYearSaMoney; + + + @TableField(value = "last_year_sa_money") + private BigDecimal lastYearSaMoney; + + + @TableField(value = "this_year_profit") + private BigDecimal thisYearProfit; + + + @TableField(value = "last_year_profit") + private BigDecimal lastYearProfit; + + + @TableField(value = "this_year_cost") + private BigDecimal thisYearCost; + + + @TableField(value = "last_year_cost") + private BigDecimal lastYearCost; + + + @TableField(value = "this_year_profit_rate") + private BigDecimal thisYearProfitRate; + + + @TableField(value = "last_year_profit_rate") + private BigDecimal lastYearProfitRate; + + + @TableField(value = "this_year_profit_share") + private BigDecimal thisYearProfitShare; + + + @TableField(value = "last_year_profit_share") + private BigDecimal lastYearProfitShare; + + + @TableField(value = "this_year_sa_money_share") + private BigDecimal thisYearSaMoneyShare; + + + @TableField(value = "last_year_sa_money_share") + private BigDecimal lastYearSaMoneyShare; + + + @TableField(value = "this_year_sa_money_growth") + private BigDecimal thisYearSaMoneyGrowth; + + + @TableField(value = "this_year_profit_growth") + private BigDecimal thisYearProfitGrowth; + + + @TableField(value = "this_year_profit_change") + private BigDecimal thisYearProfitChange; + + + + + +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java index 667366f..46c3730 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java @@ -38,10 +38,9 @@ public interface NewGrBiSaAggMapper extends BaseMapper // void updateThisYearData(); // -// void updateLastYearData(); -// void updateLastMonthSamoney(); -// -// void updateYoyMonthData(); + void updateLastYearData(); + void updateLastMonthSamoney(); + void updateYoyMonthData(); // // void updateComplexCalculate1(); // void updateComplexCalculate2(); diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java index 32be8a7..105e6f4 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java @@ -78,7 +78,7 @@ public class NewGrBiSaAggServiceImpl extends ServiceImpl - - UPDATE new_gr_bi_sa_agg_year_count a - LEFT JOIN ( - SELECT - use_year, - goods_id, - zone_id, - province_id, - sale_type_id, - dosage_id, - custom_id, - saler_id, - SUM( this_month_sa_qty ) AS this_year_sa_qty, -- 本年销量 - SUM( this_month_sa_money ) AS this_year_sa_money, -- 本年销售金额 - SUM( this_month_cost) as this_year_cost, -- 本年销售成本 - SUM( this_month_profit ) AS this_year_profit -- 本年毛利额 - FROM - new_gr_bi_sa_agg - GROUP BY - use_year, - goods_id, - zone_id, - province_id, - sale_type_id, - dosage_id, - custom_id, - saler_id - ) b ON b.use_year = a.use_year - AND b.goods_id = a.goods_id - AND b.zone_id = a.zone_id - AND b.province_id = a.province_id - AND b.sale_type_id = a.sale_type_id - AND b.dosage_id = a.dosage_id - AND b.custom_id = a.custom_id - AND b.saler_id = a.saler_id - SET a.this_year_sa_qty = COALESCE ( b.this_year_sa_qty, 0 ), - a.this_year_sa_money = COALESCE ( b.this_year_sa_money, 0 ), - a.this_year_profit = COALESCE ( b.this_year_profit, 0 ), - a.this_year_cost = COALESCE ( b.this_year_cost, 0 ); - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE new_gr_bi_sa_agg_month_count a @@ -326,7 +326,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" UPDATE new_gr_bi_sa_agg_month_count AS current_month - JOIN ( + LEFT JOIN ( SELECT -- 当前记录的维度和年月 @@ -386,10 +386,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" dosage_id, custom_id, saler_id, - SUM( this_month_sa_qty ) AS last_month_sa_qty, - SUM( this_month_sa_money ) AS last_month_sa_money, - SUM( this_month_cost) as last_month_cost, - SUM( this_month_profit ) AS last_month_profit + SUM( this_month_sa_qty ) AS last_year_sa_qty, + SUM( this_month_sa_money ) AS last_year_sa_money, + SUM( this_month_cost) as last_year_cost, + SUM( this_month_profit ) AS last_year_profit FROM new_gr_bi_sa_agg GROUP BY @@ -409,10 +409,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND b.dosage_id = a.dosage_id AND b.custom_id = a.custom_id AND b.saler_id = a.saler_id - SET a.last_month_sa_qty = COALESCE ( b.last_month_sa_qty, 0 ), - a.last_month_sa_money = COALESCE ( b.last_month_sa_money, 0 ), - a.last_month_cost = COALESCE ( b.last_month_cost, 0 ), - a.last_month_profit = COALESCE ( b.last_month_profit, 0 ); + SET a.last_year_sa_qty = COALESCE ( b.last_year_sa_qty, 0 ), + a.last_year_sa_money = COALESCE ( b.last_year_sa_money, 0 ), + a.last_year_cost = COALESCE ( b.last_year_cost, 0 ), + a.last_year_profit = COALESCE ( b.last_year_profit, 0 ); From 50a5be76b4d7f1d35087ace5fb6e66d48eb50911 Mon Sep 17 00:00:00 2001 From: king Date: Thu, 19 Mar 2026 17:41:02 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E7=BB=BC=E5=90=88=E9=94=80=E5=94=AE?= =?UTF-8?q?=E6=83=85=E5=86=B5=E8=A1=A8=20=E6=9C=88=E5=BA=A6=E5=88=86?= =?UTF-8?q?=E7=BB=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/xtsy/zhxsqkLineReportEnhance.java | 238 +++++++----------- 1 file changed, 88 insertions(+), 150 deletions(-) diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java index 8280444..0f92a3f 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java @@ -70,25 +70,6 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCEID ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCEID, \n"); //行政区域ID executePluginSql.append(" GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCENAME ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCENAME, \n"); //行政区域名称 - executePluginSql.append(" SUM(tbl_lgbsa.MONTHSAQTY) as MONTHSAQTY, \n"); //本月销量 -// executePluginSql.append(" CASE\n"); -// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END) > 0 THEN\n"); -// executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END), 2))\n"); -// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END) < 0 THEN\n"); -// executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAQTY) > 0, 100, 0)\n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAQTY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAQTY) * 100 END), 2))\n"); -// executePluginSql.append(" ELSE '0.00'\n"); -// executePluginSql.append(" END AS monthsaqty_yoy,\n"); //本月销量同比 -// executePluginSql.append(" CONCAT(ROUND((SELECT SUM(MONTHSAQTY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS monthsaqty_s, \n"); -// executePluginSql.append(" CONCAT(ROUND((SELECT SUM(THISSAQTY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS thissaqty_s, \n"); -// executePluginSql.append(" CONCAT(ROUND((SELECT SUM(LASTSAQTY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS lastsaqty_s, \n"); -// executePluginSql.append(" -- 原本带CAST的字段,简化写法(CONCAT会自动转为字符串) \n"); -// executePluginSql.append(" CONCAT(ROUND((SELECT SUM(MONTHSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS monthsamoney_s, \n"); -// executePluginSql.append(" CONCAT(ROUND((SELECT SUM(THISSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000,2), '亿') AS thissamoney_s, \n"); -// executePluginSql.append(" CONCAT(ROUND((SELECT SUM(LASTSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000,2), '亿') AS lastsamoney_s, \n"); executePluginSql.append(" SUM(tbl_lgbsa.MONTHSAQTY) as THISSAQTY, \n"); //本年销量 executePluginSql.append(" SUM(tbl_lgbsa.LASTSAQTY) as LASTSAQTY, \n"); //上年销量 executePluginSql.append(" -- 数量同比(原有) \n"); @@ -103,34 +84,7 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS saqty_yoy, \n"); //数量同比 -// executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHSAMONEY) / 10000, 2) as MONTHSAMONEY, \n"); //本月销售金额(元) -// executePluginSql.append(" CASE \n"); -// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END) > 0 THEN \n"); -// executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END), 2)) \n"); -// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END) < 0 THEN \n"); -// executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY)) / sum(tbl_lgbsa.LASTYEAROFMONTHSAMONEY) * 100 END), 2)) \n"); -// executePluginSql.append(" ELSE '0.00' \n"); -// executePluginSql.append(" END AS monthsamoney_yoy, \n"); //本月销售金额同比 executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHSAMONEY) / 10000, 2) as THISSAMONEY, \n"); //本年销售金额(元) -// SUM( MONTHSAQTY ) AS THISSAQTY, -- 本年销量 -// SUM( MONTHSAMONEY ) AS THISSAMONEY, -- 本年销售金额 -// SUM( MONTHCOST) as THISCOST, -- 本年销售成本 -// SUM( MONTHPROFIT ) AS THISPROFIT -- 本年毛利额 -// executePluginSql.append(" CASE \n"); -// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END) > 0 THEN \n"); -// executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END), 2)) \n"); -// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END) < 0 THEN \n"); -// executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LAST_MONTH_SAMONEY) = 0 THEN IF(sum(tbl_lgbsa.MONTHSAMONEY) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsa.MONTHSAMONEY) - sum(tbl_lgbsa.LAST_MONTH_SAMONEY)) / sum(tbl_lgbsa.LAST_MONTH_SAMONEY) * 100 END), 2)) \n"); -// executePluginSql.append(" ELSE '0.00' \n"); -// executePluginSql.append(" END AS lastMonthSaMoney_yoy, \n"); //本月销售金额增长率 executePluginSql.append(" ROUND(SUM(tbl_lgbsa.LASTSAMONEY) / 10000, 2) as LASTSAMONEY, \n"); //上年销售金额(元) executePluginSql.append(" -- 销售金额同比(原有新增) \n"); executePluginSql.append(" CASE \n"); @@ -144,7 +98,7 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS samoney_yoy, \n"); //销售收入同比 - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHPROFIT) / 10000, 2) as MONTHPROFIT, \n"); //本月毛利额(元) +// executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHPROFIT) / 10000, 2) as MONTHPROFIT, \n"); //本月毛利额(元) executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHPROFIT) / 10000, 2) as THISPROFIT, \n"); //本年毛利额(元) executePluginSql.append(" ROUND(SUM(tbl_lgbsa.LASTPROFIT) / 10000, 2) as LASTPROFIT, \n"); //上年毛利额(元) executePluginSql.append(" -- 新增:毛利同比 \n"); @@ -164,17 +118,6 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" END AS profit_yoy, \n"); //本年毛利同比 executePluginSql.append(" ROUND(SUM(tbl_lgbsamc.this_month_cost) / 10000, 2) as this_month_cost, \n"); //本月销售成本(元) executePluginSql.append(" ROUND(MAX(tbl_lgbsayc.this_year_cost) / 10000, 2) as this_year_cost, \n"); //本年销售成本(元) -// executePluginSql.append(" CASE \n"); -// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END) > 0 THEN \n"); -// executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END), 2)) \n"); -// executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END) < 0 THEN \n"); -// executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsamc.yoy_last_month_cost) = 0 THEN IF(sum(tbl_lgbsamc.this_month_cost) > 0, 100, 0) \n"); -// executePluginSql.append(" ELSE (sum(tbl_lgbsamc.this_month_cost) - sum(tbl_lgbsamc.yoy_last_month_cost)) / sum(tbl_lgbsamc.yoy_last_month_cost) * 100 END), 2)) \n"); -// executePluginSql.append(" ELSE '0.00' \n"); -// executePluginSql.append(" END AS this_month_cost_yoy, \n"); //本月销售成本同比 executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITCHANGE), 2) as PROFITCHANGE, \n"); //毛利变动(元) executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITGROWTH), 2) as PROFITGROWTH, \n"); //毛利额增长率 executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISPROFITRATE), 2) as THISPROFITRATE, \n"); //本年毛利率 @@ -232,10 +175,7 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { private String geroupMonthSql(Map params, List groupFieldList) { - - StringBuilder executePluginSql = new StringBuilder(); - executePluginSql.append("select"); if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称 executePluginSql.append(" current_month.custom_id as customid, \n"); @@ -343,96 +283,94 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" COALESCE (ROUND( sum(current_month.this_month_sa_money)/SUM(total_month_data.this_month_sa_money_sum) * 100, 2), 0 ) as this_month_sa_money_share,\n"); //本月毛利额占比 executePluginSql.append(" COALESCE (ROUND( sum(current_month.this_month_profit)/SUM(total_month_data.this_month_profit_sum) * 100, 2), 0 ) as this_month_profit_share \n"); //本月销售金额占比 -// executePluginSql.append(" ROUND(avg(tbl_lgbsa.MONTHPROFITSHARE) * 100, 2) AS MONTHPROFITSHARE, \n"); //本月毛利额占比 -// executePluginSql.append(" ROUND(avg(tbl_lgbsa.MONTHSAMONEYSHARE) * 100, 2) AS MONTHSAMONEYSHARE \n"); //本月销售金额占比 - executePluginSql.append(" from new_gr_bi_sa_agg_month_count as current_month "); - executePluginSql.append(" LEFT JOIN (SELECT "); - executePluginSql.append(" use_year, "); - executePluginSql.append(" use_month, "); - executePluginSql.append(" goods_id, "); - executePluginSql.append(" zone_id, "); - executePluginSql.append(" province_id, "); - executePluginSql.append(" sale_type_id, "); - executePluginSql.append(" dosage_id, "); - executePluginSql.append(" custom_id, "); - executePluginSql.append(" saler_id, "); - executePluginSql.append(" SUM(this_month_sa_qty) AS last_month_sa_qty, "); - executePluginSql.append(" SUM(this_month_sa_money) AS last_month_sa_money, "); - executePluginSql.append(" SUM(this_month_cost) AS last_month_cost, "); - executePluginSql.append(" SUM(this_month_profit) AS last_month_profit "); + executePluginSql.append(" from new_gr_bi_sa_agg_month_count as current_month \n"); + executePluginSql.append(" LEFT JOIN (SELECT \n"); + executePluginSql.append(" use_year, \n"); + executePluginSql.append(" use_month, \n"); + executePluginSql.append(" goods_id, \n"); + executePluginSql.append(" zone_id, \n"); + executePluginSql.append(" province_id, \n"); + executePluginSql.append(" sale_type_id, \n"); + executePluginSql.append(" dosage_id, \n"); + executePluginSql.append(" custom_id, \n"); + executePluginSql.append(" saler_id, \n"); + executePluginSql.append(" SUM(this_month_sa_qty) AS last_month_sa_qty, \n"); + executePluginSql.append(" SUM(this_month_sa_money) AS last_month_sa_money, \n"); + executePluginSql.append(" SUM(this_month_cost) AS last_month_cost, \n"); + executePluginSql.append(" SUM(this_month_profit) AS last_month_profit \n"); + executePluginSql.append(" FROM new_gr_bi_sa_agg_month_count \n"); + executePluginSql.append(" GROUP BY use_year, \n"); + executePluginSql.append(" use_month, \n"); + executePluginSql.append(" goods_id, \n"); + executePluginSql.append(" zone_id, \n"); + executePluginSql.append(" province_id, \n"); + executePluginSql.append(" sale_type_id, \n"); + executePluginSql.append(" dosage_id, \n"); + executePluginSql.append(" custom_id, \n"); + executePluginSql.append(" saler_id) AS last_month_data \n"); + executePluginSql.append(" ON current_month.goods_id = last_month_data.goods_id \n"); + executePluginSql.append(" AND current_month.zone_id = last_month_data.zone_id \n"); + executePluginSql.append(" AND current_month.province_id = last_month_data.province_id \n"); + executePluginSql.append(" AND current_month.sale_type_id = last_month_data.sale_type_id \n"); + executePluginSql.append(" AND current_month.dosage_id = last_month_data.dosage_id \n"); + executePluginSql.append(" AND current_month.custom_id = last_month_data.custom_id \n"); + executePluginSql.append(" AND current_month.saler_id = last_month_data.saler_id \n"); + executePluginSql.append(" AND last_month_data.use_year = current_month.use_year - (current_month.use_month = 1)\n"); + executePluginSql.append(" AND last_month_data.use_month = IF(current_month.use_month = 1, 12, current_month.use_month - 1)\n"); + executePluginSql.append(" LEFT JOIN (SELECT use_year, \n"); + executePluginSql.append(" use_month, \n"); + executePluginSql.append(" goods_id, \n"); + executePluginSql.append(" zone_id, \n"); + executePluginSql.append(" province_id, \n"); + executePluginSql.append(" sale_type_id, \n"); + executePluginSql.append(" dosage_id, \n"); + executePluginSql.append(" custom_id, \n"); + executePluginSql.append(" saler_id, \n"); + executePluginSql.append(" SUM(this_month_sa_qty) AS yoy_month_sa_qty, \n"); // 同比月销量 + executePluginSql.append(" SUM(this_month_sa_money) AS yoy_month_sa_money, \n"); // 同比月销售金额 + executePluginSql.append(" SUM(this_month_cost) as yoy_month_cost, \n"); // 同比月销售成本 + executePluginSql.append(" SUM(this_month_profit) AS yoy_month_profit \n"); // 同比月毛利额 executePluginSql.append(" FROM new_gr_bi_sa_agg_month_count "); - executePluginSql.append(" GROUP BY use_year, "); - executePluginSql.append(" use_month, "); - executePluginSql.append(" goods_id, "); - executePluginSql.append(" zone_id, "); - executePluginSql.append(" province_id, "); - executePluginSql.append(" sale_type_id, "); - executePluginSql.append(" dosage_id, "); - executePluginSql.append(" custom_id, "); - executePluginSql.append(" saler_id) AS last_month_data "); - executePluginSql.append(" ON current_month.goods_id = last_month_data.goods_id "); - executePluginSql.append(" AND current_month.zone_id = last_month_data.zone_id "); - executePluginSql.append(" AND current_month.province_id = last_month_data.province_id "); - executePluginSql.append(" AND current_month.sale_type_id = last_month_data.sale_type_id "); - executePluginSql.append(" AND current_month.dosage_id = last_month_data.dosage_id "); - executePluginSql.append(" AND current_month.custom_id = last_month_data.custom_id "); - executePluginSql.append(" AND current_month.saler_id = last_month_data.saler_id "); - executePluginSql.append(" AND last_month_data.use_year = current_month.use_year - (current_month.use_month = 1)"); - executePluginSql.append(" AND last_month_data.use_month = IF(current_month.use_month = 1, 12, current_month.use_month - 1)"); - executePluginSql.append(" LEFT JOIN (SELECT use_year, "); - executePluginSql.append(" use_month, "); - executePluginSql.append(" goods_id, "); - executePluginSql.append(" zone_id, "); - executePluginSql.append(" province_id, "); - executePluginSql.append(" sale_type_id, "); - executePluginSql.append(" dosage_id, "); - executePluginSql.append(" custom_id, "); - executePluginSql.append(" saler_id, "); - executePluginSql.append(" SUM(this_month_sa_qty) AS yoy_month_sa_qty, "); // 同比月销量 - executePluginSql.append(" SUM(this_month_sa_money) AS yoy_month_sa_money, "); // 同比月销售金额 - executePluginSql.append(" SUM(this_month_cost) as yoy_month_cost, "); // 同比月销售成本 - executePluginSql.append(" SUM(this_month_profit) AS yoy_month_profit "); // 同比月毛利额 - executePluginSql.append(" FROM new_gr_bi_sa_agg_month_count "); -// if(params.containsKey("useyear")){ -// executePluginSql.append(" where use_year = " + (Integer.parseInt(params.get("useyear").toString())-1)); -// } - executePluginSql.append(" GROUP BY use_year, "); - executePluginSql.append(" use_month, "); - executePluginSql.append(" goods_id, "); - executePluginSql.append(" zone_id, "); - executePluginSql.append(" province_id, "); - executePluginSql.append(" sale_type_id, "); - executePluginSql.append(" dosage_id, "); - executePluginSql.append(" custom_id, "); - executePluginSql.append(" saler_id) yoy_month ON yoy_month.use_year = current_month.use_year - 1 "); - executePluginSql.append(" AND yoy_month.use_month = current_month.use_month "); - executePluginSql.append(" AND yoy_month.goods_id = current_month.goods_id "); - executePluginSql.append(" AND yoy_month.zone_id = current_month.zone_id "); - executePluginSql.append(" AND yoy_month.province_id = current_month.province_id "); - executePluginSql.append(" AND yoy_month.sale_type_id = current_month.sale_type_id "); - executePluginSql.append(" AND yoy_month.dosage_id = current_month.dosage_id "); - executePluginSql.append(" AND yoy_month.custom_id = current_month.custom_id "); - executePluginSql.append(" AND yoy_month.saler_id = current_month.saler_id "); - executePluginSql.append(" LEFT JOIN ("); - executePluginSql.append(" SELECT "); - executePluginSql.append(" use_year, "); - executePluginSql.append(" use_month, "); - executePluginSql.append(" SUM( this_month_sa_money ) AS this_month_sa_money_sum, "); - executePluginSql.append(" SUM(this_month_profit) AS this_month_profit_sum "); - executePluginSql.append(" FROM new_gr_bi_sa_agg "); -// if(params.containsKey("useyear")){ -// executePluginSql.append(" where use_year = " + params.get("useyear")); -// } - executePluginSql.append(" GROUP BY "); - executePluginSql.append(" use_year, use_month"); - executePluginSql.append(" ) total_month_data ON total_month_data.use_year = current_month.use_year "); - executePluginSql.append(" AND total_month_data.use_month = current_month.use_month "); -// if(params.containsKey("useyear")){ -// executePluginSql.append(" where current_month.use_year = " + params.get("useyear")); -// if(params.containsKey("usemonth")){ -// executePluginSql.append(" and current_month.use_month = " + params.get("usemonth")); -// } -// } + if(params.containsKey("useyear")){ + executePluginSql.append(" where use_year = " + (Integer.parseInt(params.get("useyear").toString())-1)); + } + executePluginSql.append(" GROUP BY use_year, \n"); + executePluginSql.append(" use_month, \n"); + executePluginSql.append(" goods_id, \n"); + executePluginSql.append(" zone_id, \n"); + executePluginSql.append(" province_id, \n"); + executePluginSql.append(" sale_type_id, \n"); + executePluginSql.append(" dosage_id, \n"); + executePluginSql.append(" custom_id, \n"); + executePluginSql.append(" saler_id) yoy_month ON yoy_month.use_year = current_month.use_year - 1 \n"); + executePluginSql.append(" AND yoy_month.use_month = current_month.use_month \n"); + executePluginSql.append(" AND yoy_month.goods_id = current_month.goods_id \n"); + executePluginSql.append(" AND yoy_month.zone_id = current_month.zone_id \n"); + executePluginSql.append(" AND yoy_month.province_id = current_month.province_id \n"); + executePluginSql.append(" AND yoy_month.sale_type_id = current_month.sale_type_id \n"); + executePluginSql.append(" AND yoy_month.dosage_id = current_month.dosage_id \n"); + executePluginSql.append(" AND yoy_month.custom_id = current_month.custom_id \n"); + executePluginSql.append(" AND yoy_month.saler_id = current_month.saler_id \n"); + executePluginSql.append(" LEFT JOIN (\n"); + executePluginSql.append(" SELECT \n"); + executePluginSql.append(" use_year, \n"); + executePluginSql.append(" use_month, \n"); + executePluginSql.append(" SUM( this_month_sa_money ) AS this_month_sa_money_sum, \n"); + executePluginSql.append(" SUM(this_month_profit) AS this_month_profit_sum \n"); + executePluginSql.append(" FROM new_gr_bi_sa_agg \n"); + if(params.containsKey("useyear")){ + executePluginSql.append(" where use_year = " + params.get("useyear")); + } + executePluginSql.append(" GROUP BY \n"); + executePluginSql.append(" use_year, use_month\n"); + executePluginSql.append(" ) total_month_data ON total_month_data.use_year = current_month.use_year \n"); + executePluginSql.append(" AND total_month_data.use_month = current_month.use_month \n"); + if(params.containsKey("useyear")){ + executePluginSql.append(" where current_month.use_year = " + params.get("useyear")); + if(params.containsKey("usemonth")){ + executePluginSql.append(" and current_month.use_month = " + params.get("usemonth")); + } + } executePluginSql.append(" GROUP BY \n"); if (groupFieldList.contains("customname") || params.containsKey("customname")) { executePluginSql.append(" current_month.custom_id,"); From 4bf468fa1a832b0cec0ae2d5e66356aa1af6b025 Mon Sep 17 00:00:00 2001 From: king Date: Fri, 20 Mar 2026 08:50:48 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E7=BB=BC=E5=90=88=E9=94=80=E5=94=AE?= =?UTF-8?q?=E6=83=85=E5=86=B5=E8=A1=A8=20=E6=9C=88=E5=BA=A6=E5=88=86?= =?UTF-8?q?=E7=BB=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/xtsy/zhxsqkLineReportEnhance.java | 219 ++++++++++-------- 1 file changed, 125 insertions(+), 94 deletions(-) diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java index 0f92a3f..6350c4b 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java @@ -29,142 +29,173 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { }else { StringBuilder executePluginSql = new StringBuilder(); executePluginSql.append(" SELECT \n"); + executePluginSql.append(" current_month.use_year as useyear, \n"); if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称 - executePluginSql.append(" tbl_lgbsa.CUSTOMID, \n"); - executePluginSql.append(" tbl_lgbsa.CUSTOMNAME, \n"); + executePluginSql.append(" current_month.custom_id as customid, \n"); + executePluginSql.append(" current_month.custom_name as customname, \n"); } - if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { //年 - executePluginSql.append(" tbl_lgbsa.USEYEAR, \n"); - if (!(groupFieldList.contains("usemonth") || params.containsKey("usemonth"))) { - executePluginSql.append(" MAX(USEYEAR) as ny, \n"); //年月 - } - } - if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { //月 - executePluginSql.append(" tbl_lgbsa.USEMONTH, \n"); - if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { - executePluginSql.append(" MAX(CONCAT(USEYEAR, LPAD(USEMONTH, 2, '0'))) as ny, \n"); //年月 - } else { - executePluginSql.append(" MAX(LPAD(USEMONTH, 2, '0')) as ny, \n"); - } + if(groupFieldList.contains("useyear") || params.containsKey("useyear")){ + executePluginSql.append(" current_month.use_year as ny, \n"); //年月 } if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 - executePluginSql.append(" tbl_lgbsa.ZONEID, \n"); - executePluginSql.append(" tbl_lgbsa.ZONENAME, \n"); + executePluginSql.append(" current_month.zone_id, \n"); + executePluginSql.append(" current_month.zone_name as zonename, \n"); } if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型 - executePluginSql.append(" tbl_lgbsa.SALETYPEID, \n"); - executePluginSql.append(" tbl_lgbsa.SALETYPENAME, \n"); + executePluginSql.append(" current_month.sale_type_id, \n"); + executePluginSql.append(" current_month.sale_type_name as saletypename, \n"); } if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员 - executePluginSql.append(" tbl_lgbsa.SALERID, \n"); - executePluginSql.append(" tbl_lgbsa.SALERNAME, \n"); + executePluginSql.append(" current_month.saler_id, \n"); + executePluginSql.append(" current_month.saler_name as salername, \n"); } if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型 - executePluginSql.append(" tbl_lgbsa.DOSAGEID, \n"); - executePluginSql.append(" tbl_lgbsa.DOSAGENAME, \n"); + executePluginSql.append(" current_month.dosage_id, \n"); + executePluginSql.append(" current_month.dosage_name as dosagename, \n"); } if (params.containsKey("goodsname")) { //货品名称 - executePluginSql.append(" tbl_lgbsa.GOODSID, \n"); - executePluginSql.append(" tbl_lgbsa.GOODSNAME, \n"); + executePluginSql.append(" current_month.goods_id, \n"); + executePluginSql.append(" current_month.goods_name as goodsname, \n"); } + executePluginSql.append(" GROUP_CONCAT(DISTINCT current_year.province_id ORDER BY current_year.province_id SEPARATOR ',') as province_id, \n"); //行政区域ID + executePluginSql.append(" GROUP_CONCAT(DISTINCT current_year.province_name ORDER BY current_year.province_name SEPARATOR ',') as province_name, \n"); //行政区域名称 - executePluginSql.append(" GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCEID ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCEID, \n"); //行政区域ID - executePluginSql.append(" GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCENAME ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCENAME, \n"); //行政区域名称 - executePluginSql.append(" SUM(tbl_lgbsa.MONTHSAQTY) as THISSAQTY, \n"); //本年销量 - executePluginSql.append(" SUM(tbl_lgbsa.LASTSAQTY) as LASTSAQTY, \n"); //上年销量 + executePluginSql.append(" SUM(current_year.this_year_sa_qty) AS thisYearSaQty, \n"); //本年销量 + executePluginSql.append(" ROUND(SUM(current_year.this_year_sa_money) / 10000, 2) AS thisYearSaMoney, \n"); //本年销售金额(元) + executePluginSql.append(" ROUND(SUM(current_year.this_year_profit) / 10000, 2) AS thisYearProfit, \n"); //本年毛利额(元) + executePluginSql.append(" ROUND(SUM(current_year.this_year_cost) / 10000, 2) AS thisYearCost, \n");//本年销售成本(元) + executePluginSql.append(" SUM(last_year_data.last_year_sa_qty) AS lastYearSaQty, \n"); //上年销量 + executePluginSql.append(" ROUND(SUM(last_year_data.last_year_sa_money) / 10000, 2) AS lastYearSaMoney, \n"); //上年销售金额(元) + executePluginSql.append(" ROUND(SUM(last_year_data.last_year_profit) / 10000, 2) AS lastYearProfit, \n");//上年毛利额(元) + executePluginSql.append(" ROUND(SUM(last_year_data.last_year_cost) / 10000, 2) AS lastYearCost, \n"); //上年销售成本(元) + + executePluginSql.append(" ROUND(avg(current_year.profit_change), 2) as PROFITCHANGE, \n"); //毛利变动(元) + executePluginSql.append(" ROUND(avg(current_year.profit_growth), 2) as PROFITGROWTH, \n"); //毛利额增长率 + executePluginSql.append(" ROUND(avg(current_year.this_profit_rate), 2) as THISPROFITRATE, \n"); //本年毛利率 + executePluginSql.append(" ROUND(avg(current_year.last_year_profit_share) * 100, 2) as last_year_profit_share, \n"); //上年毛利额占比 + executePluginSql.append(" ROUND(avg(current_year.this_year_profit_share) * 100, 2) AS this_year_profit_share, \n"); //本年毛利额占比 + executePluginSql.append(" COALESCE(ROUND(sum(current_year.this_year_sa_money) / SUM(total_year_data.this_year_sa_money_sum) * 100, 2), 0) AS this_year_sa_money_share, \n");//上年销售金额占比 + executePluginSql.append(" COALESCE (ROUND( sum(current_year.this_year_profit)/SUM(total_year_data.this_year_profit_sum) * 100, 2), 0 ) as this_year_profit_share \n"); //本年销售金额占比 executePluginSql.append(" -- 数量同比(原有) \n"); executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAQTY) = 0 THEN IF(sum(tbl_lgbsa.THISSAQTY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAQTY) - sum(tbl_lgbsa.LASTSAQTY)) / sum(tbl_lgbsa.LASTSAQTY) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(current_year.last_year_sa_qty) = 0 THEN IF(sum(current_year.this_year_sa_qty) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_qty) - sum(current_year.last_year_sa_qty)) / sum(current_year.last_year_sa_qty) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(current_year.last_year_sa_qty) = 0 THEN IF(sum(current_year.this_year_sa_qty) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_qty) - sum(current_year.last_year_sa_qty)) / sum(current_year.last_year_sa_qty) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(current_year.last_year_sa_qty) = 0 THEN IF(sum(current_year.this_year_sa_qty) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_qty) - sum(current_year.last_year_sa_qty)) / sum(current_year.last_year_sa_qty) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(current_year.last_year_sa_qty) = 0 THEN IF(sum(current_year.this_year_sa_qty) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_qty) - sum(current_year.last_year_sa_qty)) / sum(current_year.last_year_sa_qty) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS saqty_yoy, \n"); //数量同比 - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHSAMONEY) / 10000, 2) as THISSAMONEY, \n"); //本年销售金额(元) - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.LASTSAMONEY) / 10000, 2) as LASTSAMONEY, \n"); //上年销售金额(元) executePluginSql.append(" -- 销售金额同比(原有新增) \n"); executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTSAMONEY) = 0 THEN IF(sum(tbl_lgbsa.THISSAMONEY) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISSAMONEY) - sum(tbl_lgbsa.LASTSAMONEY)) / sum(tbl_lgbsa.LASTSAMONEY) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS samoney_yoy, \n"); //销售收入同比 -// executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHPROFIT) / 10000, 2) as MONTHPROFIT, \n"); //本月毛利额(元) - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.MONTHPROFIT) / 10000, 2) as THISPROFIT, \n"); //本年毛利额(元) - executePluginSql.append(" ROUND(SUM(tbl_lgbsa.LASTPROFIT) / 10000, 2) as LASTPROFIT, \n"); //上年毛利额(元) executePluginSql.append(" -- 新增:毛利同比 \n"); executePluginSql.append(" CASE \n"); executePluginSql.append(" -- 正数:红色圆点emoji + 数值 + % \n"); - executePluginSql.append("WHEN (CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(MAX(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(sum(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END), 2)) \n"); + executePluginSql.append("WHEN (CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(MAX(current_year.this_year_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(sum(current_year.this_year_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END), 2)) \n"); executePluginSql.append(" -- 负数:绿色圆点emoji + 数值 + % \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(sum(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(tbl_lgbsa.LASTPROFIT) = 0 THEN IF(MAX(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(tbl_lgbsa.THISPROFIT) - sum(tbl_lgbsa.LASTPROFIT)) / sum(tbl_lgbsa.LASTPROFIT) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(sum(current_year.this_year_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(MAX(current_year.this_year_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END), 2)) \n"); executePluginSql.append(" -- 0值:直接显示 \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS profit_yoy, \n"); //本年毛利同比 - executePluginSql.append(" ROUND(SUM(tbl_lgbsamc.this_month_cost) / 10000, 2) as this_month_cost, \n"); //本月销售成本(元) - executePluginSql.append(" ROUND(MAX(tbl_lgbsayc.this_year_cost) / 10000, 2) as this_year_cost, \n"); //本年销售成本(元) - executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITCHANGE), 2) as PROFITCHANGE, \n"); //毛利变动(元) - executePluginSql.append(" ROUND(avg(tbl_lgbsa.PROFITGROWTH), 2) as PROFITGROWTH, \n"); //毛利额增长率 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISPROFITRATE), 2) as THISPROFITRATE, \n"); //本年毛利率 - executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2)) \n"); - executePluginSql.append(" WHEN ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND(avg(tbl_lgbsa.SAMONEYGROWTH), 2)) \n"); + executePluginSql.append(" CASE WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (sum(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS SAMONEYGROWTH, \n");//销售金额增长率 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.LASTPROFITSHARE) * 100, 2) as LASTPROFITSHARE, \n"); //上年毛利额占比 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISPROFITSHARE) * 100, 2) AS THISPROFITSHARE, \n"); //本年毛利额占比 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.LASTSAMONEYSHARE) * 100, 2) AS LASTSAMONEYSHARE, \n"); //上年销售金额占比 - executePluginSql.append(" ROUND(avg(tbl_lgbsa.THISSAMONEYSHARE) * 100, 2) AS THISSAMONEYSHARE, \n"); //本年销售金额占比 + executePluginSql.append(" END AS lastMonthSaMoney_yoy, \n"); //本年销售金额增长率 executePluginSql.append(" FROM \n"); - executePluginSql.append(" yunji_gr_bi_sa_agg tbl_lgbsa \n"); + executePluginSql.append(" yunji_gr_bi_sa_agg as current_year \n"); + executePluginSql.append(" LEFT JOIN (SELECT use_year, \n"); + executePluginSql.append(" goods_id, \n"); + executePluginSql.append(" zone_id, \n"); + executePluginSql.append(" province_id, \n"); + executePluginSql.append(" sale_type_id, \n"); + executePluginSql.append(" dosage_id, \n"); + executePluginSql.append(" custom_id, \n"); + executePluginSql.append(" saler_id, \n"); + executePluginSql.append(" SUM(this_year_sa_qty) AS last_year_sa_qty, \n"); + executePluginSql.append(" SUM(this_year_sa_money) AS last_year_sa_money, \n"); + executePluginSql.append(" SUM(this_year_cost) AS last_year_cost, \n"); + executePluginSql.append(" SUM(this_year_profit) AS last_year_profit \n"); + executePluginSql.append(" FROM new_gr_bi_sa_agg_year_count \n"); + executePluginSql.append(" GROUP BY use_year, \n"); + executePluginSql.append(" goods_id, \n"); + executePluginSql.append(" zone_id, \n"); + executePluginSql.append(" province_id, \n"); + executePluginSql.append(" sale_type_id, \n"); + executePluginSql.append(" dosage_id, \n"); + executePluginSql.append(" custom_id, \n"); + executePluginSql.append(" saler_id) AS last_year_data \n"); + executePluginSql.append(" ON current_year.goods_id = last_year_data.goods_id \n"); + executePluginSql.append(" AND current_year.zone_id = last_year_data.zone_id \n"); + executePluginSql.append(" AND current_year.province_id = last_year_data.province_id \n"); + executePluginSql.append(" AND current_year.sale_type_id = last_year_data.sale_type_id \n"); + executePluginSql.append(" AND current_year.dosage_id = last_year_data.dosage_id \n"); + executePluginSql.append(" AND current_year.custom_id = last_year_data.custom_id \n"); + executePluginSql.append(" AND current_year.saler_id = last_year_data.saler_id \n"); + executePluginSql.append(" AND last_year_data.use_year = current_year.use_year - 1 \n"); + executePluginSql.append(" LEFT JOIN (SELECT use_year, \n"); + executePluginSql.append(" SUM(this_year_sa_money) AS this_year_sa_money_sum, \n"); + executePluginSql.append(" SUM(this_year_profit) AS this_year_profit_sum \n"); + executePluginSql.append(" FROM new_gr_bi_sa_agg_year_count \n"); + executePluginSql.append(" WHERE use_year = 2026 \n"); + executePluginSql.append(" GROUP BY use_year) as total_year_data \n"); + executePluginSql.append(" ON total_year_data.use_year = current_year.use_year \n"); + executePluginSql.append(" GROUP BY \n"); if (groupFieldList.contains("customname") || params.containsKey("customname")) { - executePluginSql.append(" tbl_lgbsa.CUSTOMID,"); - executePluginSql.append(" tbl_lgbsa.CUSTOMNAME,"); + executePluginSql.append(" current_month.custom_id,"); + executePluginSql.append(" current_month.custom_name,"); } if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { - executePluginSql.append(" tbl_lgbsa.USEYEAR,"); + executePluginSql.append(" current_month.use_year,"); } if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { - executePluginSql.append(" tbl_lgbsa.USEMONTH,"); + executePluginSql.append(" current_month.use_month,"); } if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { - executePluginSql.append(" tbl_lgbsa.ZONEID,"); - executePluginSql.append(" tbl_lgbsa.ZONENAME,"); + executePluginSql.append(" current_month.zone_id,"); + executePluginSql.append(" current_month.zone_name,"); } if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { - executePluginSql.append(" tbl_lgbsa.SALETYPEID,"); - executePluginSql.append(" tbl_lgbsa.SALETYPENAME,"); + executePluginSql.append(" current_month.sale_type_id,"); + executePluginSql.append(" current_month.sale_type_name,"); } if (groupFieldList.contains("salername") || params.containsKey("salername")) { - executePluginSql.append(" tbl_lgbsa.SALERID,"); - executePluginSql.append(" tbl_lgbsa.SALERNAME,"); + executePluginSql.append(" current_month.saler_id,"); + executePluginSql.append(" current_month.saler_name,"); } if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { - executePluginSql.append(" tbl_lgbsa.DOSAGEID,"); - executePluginSql.append(" tbl_lgbsa.DOSAGENAME,"); + executePluginSql.append(" current_month.dosage_id,"); + executePluginSql.append(" current_month.dosage_name,"); } if (params.containsKey("goodsname")) { //货品名称 - executePluginSql.append(" tbl_lgbsa.GOODSID,"); - executePluginSql.append(" tbl_lgbsa.GOODSNAME,"); + executePluginSql.append(" current_month.goods_id,"); + executePluginSql.append(" current_month.goods_name,"); } + executePluginSql.deleteCharAt(executePluginSql.length() - 1); sql = executePluginSql.toString(); } @@ -331,9 +362,9 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" SUM(this_month_cost) as yoy_month_cost, \n"); // 同比月销售成本 executePluginSql.append(" SUM(this_month_profit) AS yoy_month_profit \n"); // 同比月毛利额 executePluginSql.append(" FROM new_gr_bi_sa_agg_month_count "); - if(params.containsKey("useyear")){ - executePluginSql.append(" where use_year = " + (Integer.parseInt(params.get("useyear").toString())-1)); - } +// if(params.containsKey("useyear")){ +// executePluginSql.append(" where use_year = " + (Integer.parseInt(params.get("useyear").toString())-1)); +// } executePluginSql.append(" GROUP BY use_year, \n"); executePluginSql.append(" use_month, \n"); executePluginSql.append(" goods_id, \n"); @@ -358,9 +389,9 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" SUM( this_month_sa_money ) AS this_month_sa_money_sum, \n"); executePluginSql.append(" SUM(this_month_profit) AS this_month_profit_sum \n"); executePluginSql.append(" FROM new_gr_bi_sa_agg \n"); - if(params.containsKey("useyear")){ - executePluginSql.append(" where use_year = " + params.get("useyear")); - } +// if(params.containsKey("useyear")){ +// executePluginSql.append(" where use_year = " + params.get("useyear")); +// } executePluginSql.append(" GROUP BY \n"); executePluginSql.append(" use_year, use_month\n"); executePluginSql.append(" ) total_month_data ON total_month_data.use_year = current_month.use_year \n"); From a3a49394aaa478827393087d1cf2136084bcbb57 Mon Sep 17 00:00:00 2001 From: king Date: Fri, 20 Mar 2026 09:38:34 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E7=BB=BC=E5=90=88=E9=94=80=E5=94=AE?= =?UTF-8?q?=E6=83=85=E5=86=B5=E8=A1=A8=20=E6=9C=88=E5=BA=A6=E5=88=86?= =?UTF-8?q?=E7=BB=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/xtsy/zhxsqkLineReportEnhance.java | 172 +++++++++--------- 1 file changed, 85 insertions(+), 87 deletions(-) diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java index 6350c4b..05cf313 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/xtsy/zhxsqkLineReportEnhance.java @@ -29,89 +29,87 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { }else { StringBuilder executePluginSql = new StringBuilder(); executePluginSql.append(" SELECT \n"); - executePluginSql.append(" current_month.use_year as useyear, \n"); + executePluginSql.append(" current_year_data.use_year as useyear, \n"); if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称 - executePluginSql.append(" current_month.custom_id as customid, \n"); - executePluginSql.append(" current_month.custom_name as customname, \n"); + executePluginSql.append(" current_year_data.custom_id as customid, \n"); + executePluginSql.append(" current_year_data.custom_name as customname, \n"); } if(groupFieldList.contains("useyear") || params.containsKey("useyear")){ - executePluginSql.append(" current_month.use_year as ny, \n"); //年月 + executePluginSql.append(" current_year_data.use_year as ny, \n"); //年月 } if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 - executePluginSql.append(" current_month.zone_id, \n"); - executePluginSql.append(" current_month.zone_name as zonename, \n"); + executePluginSql.append(" current_year_data.zone_id, \n"); + executePluginSql.append(" current_year_data.zone_name as zonename, \n"); } if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型 - executePluginSql.append(" current_month.sale_type_id, \n"); - executePluginSql.append(" current_month.sale_type_name as saletypename, \n"); + executePluginSql.append(" current_year_data.sale_type_id, \n"); + executePluginSql.append(" current_year_data.sale_type_name as saletypename, \n"); } if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员 - executePluginSql.append(" current_month.saler_id, \n"); - executePluginSql.append(" current_month.saler_name as salername, \n"); + executePluginSql.append(" current_year_data.saler_id, \n"); + executePluginSql.append(" current_year_data.saler_name as salername, \n"); } if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型 - executePluginSql.append(" current_month.dosage_id, \n"); - executePluginSql.append(" current_month.dosage_name as dosagename, \n"); + executePluginSql.append(" current_year_data.dosage_id, \n"); + executePluginSql.append(" current_year_data.dosage_name as dosagename, \n"); } if (params.containsKey("goodsname")) { //货品名称 - executePluginSql.append(" current_month.goods_id, \n"); - executePluginSql.append(" current_month.goods_name as goodsname, \n"); + executePluginSql.append(" current_year_data.goods_id, \n"); + executePluginSql.append(" current_year_data.goods_name as goodsname, \n"); } - executePluginSql.append(" GROUP_CONCAT(DISTINCT current_year.province_id ORDER BY current_year.province_id SEPARATOR ',') as province_id, \n"); //行政区域ID - executePluginSql.append(" GROUP_CONCAT(DISTINCT current_year.province_name ORDER BY current_year.province_name SEPARATOR ',') as province_name, \n"); //行政区域名称 + executePluginSql.append(" GROUP_CONCAT(DISTINCT current_year_data.province_id ORDER BY current_year_data.province_id SEPARATOR ',') as province_id, \n"); //行政区域ID + executePluginSql.append(" GROUP_CONCAT(DISTINCT current_year_data.province_name ORDER BY current_year_data.province_name SEPARATOR ',') as province_name, \n"); //行政区域名称 - executePluginSql.append(" SUM(current_year.this_year_sa_qty) AS thisYearSaQty, \n"); //本年销量 - executePluginSql.append(" ROUND(SUM(current_year.this_year_sa_money) / 10000, 2) AS thisYearSaMoney, \n"); //本年销售金额(元) - executePluginSql.append(" ROUND(SUM(current_year.this_year_profit) / 10000, 2) AS thisYearProfit, \n"); //本年毛利额(元) - executePluginSql.append(" ROUND(SUM(current_year.this_year_cost) / 10000, 2) AS thisYearCost, \n");//本年销售成本(元) + executePluginSql.append(" SUM(current_year_data.this_year_sa_qty) AS thissaqty, \n"); //本年销量 + executePluginSql.append(" ROUND(SUM(current_year_data.this_year_sa_money) / 10000, 2) AS thissamoney, \n"); //本年销售金额(元) + executePluginSql.append(" ROUND(SUM(current_year_data.this_year_profit) / 10000, 2) AS thisprofit, \n"); //本年毛利额(元) + executePluginSql.append(" ROUND(SUM(current_year_data.this_year_cost) / 10000, 2) AS thiscost, \n");//本年销售成本(元) executePluginSql.append(" SUM(last_year_data.last_year_sa_qty) AS lastYearSaQty, \n"); //上年销量 executePluginSql.append(" ROUND(SUM(last_year_data.last_year_sa_money) / 10000, 2) AS lastYearSaMoney, \n"); //上年销售金额(元) executePluginSql.append(" ROUND(SUM(last_year_data.last_year_profit) / 10000, 2) AS lastYearProfit, \n");//上年毛利额(元) executePluginSql.append(" ROUND(SUM(last_year_data.last_year_cost) / 10000, 2) AS lastYearCost, \n"); //上年销售成本(元) - executePluginSql.append(" ROUND(avg(current_year.profit_change), 2) as PROFITCHANGE, \n"); //毛利变动(元) - executePluginSql.append(" ROUND(avg(current_year.profit_growth), 2) as PROFITGROWTH, \n"); //毛利额增长率 - executePluginSql.append(" ROUND(avg(current_year.this_profit_rate), 2) as THISPROFITRATE, \n"); //本年毛利率 - executePluginSql.append(" ROUND(avg(current_year.last_year_profit_share) * 100, 2) as last_year_profit_share, \n"); //上年毛利额占比 - executePluginSql.append(" ROUND(avg(current_year.this_year_profit_share) * 100, 2) AS this_year_profit_share, \n"); //本年毛利额占比 - executePluginSql.append(" COALESCE(ROUND(sum(current_year.this_year_sa_money) / SUM(total_year_data.this_year_sa_money_sum) * 100, 2), 0) AS this_year_sa_money_share, \n");//上年销售金额占比 - executePluginSql.append(" COALESCE (ROUND( sum(current_year.this_year_profit)/SUM(total_year_data.this_year_profit_sum) * 100, 2), 0 ) as this_year_profit_share \n"); //本年销售金额占比 +// executePluginSql.append(" ROUND(avg(current_year_data.profit_change), 2) as profitchange, \n"); //毛利变动(元) +// executePluginSql.append(" ROUND(avg(current_year_data.profit_growth), 2) as profitgrowth, \n"); //毛利额增长率 +// executePluginSql.append(" ROUND(avg(current_year_data.this_profit_rate), 2) as thisprofitrate, \n"); //本年毛利率 + executePluginSql.append(" COALESCE(ROUND(sum(current_year_data.this_year_sa_money) / SUM(total_year_data.this_year_sa_money_sum) * 100, 2), 0) AS this_year_sa_money_share, \n");//上年销售金额占比 + executePluginSql.append(" COALESCE (ROUND( sum(current_year_data.this_year_profit)/SUM(total_year_data.this_year_profit_sum) * 100, 2), 0 ) as thisprofitshare, \n"); //本年毛利额占比 executePluginSql.append(" -- 数量同比(原有) \n"); executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(current_year.last_year_sa_qty) = 0 THEN IF(sum(current_year.this_year_sa_qty) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_qty) - sum(current_year.last_year_sa_qty)) / sum(current_year.last_year_sa_qty) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(current_year.last_year_sa_qty) = 0 THEN IF(sum(current_year.this_year_sa_qty) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_qty) - sum(current_year.last_year_sa_qty)) / sum(current_year.last_year_sa_qty) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(current_year.last_year_sa_qty) = 0 THEN IF(sum(current_year.this_year_sa_qty) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_qty) - sum(current_year.last_year_sa_qty)) / sum(current_year.last_year_sa_qty) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(current_year.last_year_sa_qty) = 0 THEN IF(sum(current_year.this_year_sa_qty) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_qty) - sum(current_year.last_year_sa_qty)) / sum(current_year.last_year_sa_qty) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(current_year_data.last_year_sa_qty) = 0 THEN IF(sum(current_year_data.this_year_sa_qty) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_qty) - sum(current_year_data.last_year_sa_qty)) / sum(current_year_data.last_year_sa_qty) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(current_year_data.last_year_sa_qty) = 0 THEN IF(sum(current_year_data.this_year_sa_qty) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_qty) - sum(current_year_data.last_year_sa_qty)) / sum(current_year_data.last_year_sa_qty) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(current_year_data.last_year_sa_qty) = 0 THEN IF(sum(current_year_data.this_year_sa_qty) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_qty) - sum(current_year_data.last_year_sa_qty)) / sum(current_year_data.last_year_sa_qty) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(current_year_data.last_year_sa_qty) = 0 THEN IF(sum(current_year_data.this_year_sa_qty) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_qty) - sum(current_year_data.last_year_sa_qty)) / sum(current_year_data.last_year_sa_qty) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS saqty_yoy, \n"); //数量同比 executePluginSql.append(" -- 销售金额同比(原有新增) \n"); executePluginSql.append(" CASE \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year.this_year_sa_money) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year.this_year_sa_money) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year.this_year_sa_money) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year.this_year_sa_money) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS samoney_yoy, \n"); //销售收入同比 executePluginSql.append(" -- 新增:毛利同比 \n"); executePluginSql.append(" CASE \n"); executePluginSql.append(" -- 正数:红色圆点emoji + 数值 + % \n"); - executePluginSql.append("WHEN (CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(MAX(current_year.this_year_profit) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END) > 0 THEN \n"); - executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(sum(current_year.this_year_profit) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END), 2)) \n"); + executePluginSql.append("WHEN (CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(MAX(current_year_data.this_year_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(sum(current_year_data.this_year_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END), 2)) \n"); executePluginSql.append(" -- 负数:绿色圆点emoji + 数值 + % \n"); - executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(sum(current_year.this_year_profit) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END) < 0 THEN \n"); - executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(MAX(current_year.this_year_profit) > 0, 100, 0) \n"); - executePluginSql.append(" ELSE (MAX(current_year.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(sum(current_year_data.this_year_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_profit) = 0 THEN IF(MAX(current_year_data.this_year_profit) > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (MAX(current_year_data.this_year_profit) - sum(last_year_data.last_year_profit)) / sum(last_year_data.last_year_profit) * 100 END), 2)) \n"); executePluginSql.append(" -- 0值:直接显示 \n"); executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS profit_yoy, \n"); //本年毛利同比 @@ -124,9 +122,9 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN sum(last_year_data.last_year_sa_money) = 0 THEN IF(sum(current_year_data.this_year_sa_money) > 0, 100, 0) \n"); executePluginSql.append(" ELSE (sum(current_year_data.this_year_sa_money) - sum(last_year_data.last_year_sa_money)) / sum(last_year_data.last_year_sa_money) * 100 END), 2)) \n"); executePluginSql.append(" ELSE '0.00' \n"); - executePluginSql.append(" END AS lastMonthSaMoney_yoy, \n"); //本年销售金额增长率 + executePluginSql.append(" END AS samoneygrowth \n"); //本年销售金额增长率 executePluginSql.append(" FROM \n"); - executePluginSql.append(" yunji_gr_bi_sa_agg as current_year \n"); + executePluginSql.append(" new_gr_bi_sa_agg_year_count as current_year_data \n"); executePluginSql.append(" LEFT JOIN (SELECT use_year, \n"); executePluginSql.append(" goods_id, \n"); executePluginSql.append(" zone_id, \n"); @@ -136,11 +134,11 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" custom_id, \n"); executePluginSql.append(" saler_id, \n"); executePluginSql.append(" SUM(this_year_sa_qty) AS last_year_sa_qty, \n"); - executePluginSql.append(" SUM(this_year_sa_money) AS last_year_sa_money, \n"); - executePluginSql.append(" SUM(this_year_cost) AS last_year_cost, \n"); - executePluginSql.append(" SUM(this_year_profit) AS last_year_profit \n"); + executePluginSql.append(" SUM(this_year_sa_money) AS last_year_sa_money, \n"); + executePluginSql.append(" SUM(this_year_cost) AS last_year_cost, \n"); + executePluginSql.append(" SUM(this_year_profit) AS last_year_profit \n"); executePluginSql.append(" FROM new_gr_bi_sa_agg_year_count \n"); - executePluginSql.append(" GROUP BY use_year, \n"); + executePluginSql.append(" GROUP BY use_year, \n"); executePluginSql.append(" goods_id, \n"); executePluginSql.append(" zone_id, \n"); executePluginSql.append(" province_id, \n"); @@ -148,52 +146,52 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" dosage_id, \n"); executePluginSql.append(" custom_id, \n"); executePluginSql.append(" saler_id) AS last_year_data \n"); - executePluginSql.append(" ON current_year.goods_id = last_year_data.goods_id \n"); - executePluginSql.append(" AND current_year.zone_id = last_year_data.zone_id \n"); - executePluginSql.append(" AND current_year.province_id = last_year_data.province_id \n"); - executePluginSql.append(" AND current_year.sale_type_id = last_year_data.sale_type_id \n"); - executePluginSql.append(" AND current_year.dosage_id = last_year_data.dosage_id \n"); - executePluginSql.append(" AND current_year.custom_id = last_year_data.custom_id \n"); - executePluginSql.append(" AND current_year.saler_id = last_year_data.saler_id \n"); - executePluginSql.append(" AND last_year_data.use_year = current_year.use_year - 1 \n"); + executePluginSql.append(" ON current_year_data.goods_id = last_year_data.goods_id \n"); + executePluginSql.append(" AND current_year_data.zone_id = last_year_data.zone_id \n"); + executePluginSql.append(" AND current_year_data.province_id = last_year_data.province_id \n"); + executePluginSql.append(" AND current_year_data.sale_type_id = last_year_data.sale_type_id \n"); + executePluginSql.append(" AND current_year_data.dosage_id = last_year_data.dosage_id \n"); + executePluginSql.append(" AND current_year_data.custom_id = last_year_data.custom_id \n"); + executePluginSql.append(" AND current_year_data.saler_id = last_year_data.saler_id \n"); + executePluginSql.append(" AND last_year_data.use_year = current_year_data.use_year - 1 \n"); executePluginSql.append(" LEFT JOIN (SELECT use_year, \n"); - executePluginSql.append(" SUM(this_year_sa_money) AS this_year_sa_money_sum, \n"); - executePluginSql.append(" SUM(this_year_profit) AS this_year_profit_sum \n"); - executePluginSql.append(" FROM new_gr_bi_sa_agg_year_count \n"); - executePluginSql.append(" WHERE use_year = 2026 \n"); - executePluginSql.append(" GROUP BY use_year) as total_year_data \n"); - executePluginSql.append(" ON total_year_data.use_year = current_year.use_year \n"); + executePluginSql.append(" SUM(this_year_sa_money) AS this_year_sa_money_sum, \n"); + executePluginSql.append(" SUM(this_year_profit) AS this_year_profit_sum \n"); + executePluginSql.append(" FROM new_gr_bi_sa_agg_year_count \n"); + executePluginSql.append(" WHERE use_year = 2026 \n"); + executePluginSql.append(" GROUP BY use_year) as total_year_data \n"); + executePluginSql.append(" ON total_year_data.use_year = current_year_data.use_year \n"); executePluginSql.append(" GROUP BY \n"); if (groupFieldList.contains("customname") || params.containsKey("customname")) { - executePluginSql.append(" current_month.custom_id,"); - executePluginSql.append(" current_month.custom_name,"); + executePluginSql.append(" current_year_data.custom_id,"); + executePluginSql.append(" current_year_data.custom_name,"); } if (groupFieldList.contains("useyear") || params.containsKey("useyear")) { - executePluginSql.append(" current_month.use_year,"); + executePluginSql.append(" current_year_data.use_year,"); } if (groupFieldList.contains("usemonth") || params.containsKey("usemonth")) { - executePluginSql.append(" current_month.use_month,"); + executePluginSql.append(" current_year_data.use_month,"); } if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { - executePluginSql.append(" current_month.zone_id,"); - executePluginSql.append(" current_month.zone_name,"); + executePluginSql.append(" current_year_data.zone_id,"); + executePluginSql.append(" current_year_data.zone_name,"); } if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { - executePluginSql.append(" current_month.sale_type_id,"); - executePluginSql.append(" current_month.sale_type_name,"); + executePluginSql.append(" current_year_data.sale_type_id,"); + executePluginSql.append(" current_year_data.sale_type_name,"); } if (groupFieldList.contains("salername") || params.containsKey("salername")) { - executePluginSql.append(" current_month.saler_id,"); - executePluginSql.append(" current_month.saler_name,"); + executePluginSql.append(" current_year_data.saler_id,"); + executePluginSql.append(" current_year_data.saler_name,"); } if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { - executePluginSql.append(" current_month.dosage_id,"); - executePluginSql.append(" current_month.dosage_name,"); + executePluginSql.append(" current_year_data.dosage_id,"); + executePluginSql.append(" current_year_data.dosage_name,"); } if (params.containsKey("goodsname")) { //货品名称 - executePluginSql.append(" current_month.goods_id,"); - executePluginSql.append(" current_month.goods_name,"); + executePluginSql.append(" current_year_data.goods_id,"); + executePluginSql.append(" current_year_data.goods_name,"); } executePluginSql.deleteCharAt(executePluginSql.length() - 1); @@ -312,8 +310,8 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" ELSE '0.00' \n"); executePluginSql.append(" END AS monthprofit_yoy, \n"); //本月毛利同比 - executePluginSql.append(" COALESCE (ROUND( sum(current_month.this_month_sa_money)/SUM(total_month_data.this_month_sa_money_sum) * 100, 2), 0 ) as this_month_sa_money_share,\n"); //本月毛利额占比 - executePluginSql.append(" COALESCE (ROUND( sum(current_month.this_month_profit)/SUM(total_month_data.this_month_profit_sum) * 100, 2), 0 ) as this_month_profit_share \n"); //本月销售金额占比 + executePluginSql.append(" COALESCE (ROUND( sum(current_month.this_month_sa_money)/SUM(total_month_data.this_month_sa_money_sum) * 100, 2), 0 ) as this_month_sa_money_share,\n"); //本月销售金额占比 + executePluginSql.append(" COALESCE (ROUND( sum(current_month.this_month_profit)/SUM(total_month_data.this_month_profit_sum) * 100, 2), 0 ) as this_month_profit_share \n"); //本月毛利额占比 executePluginSql.append(" from new_gr_bi_sa_agg_month_count as current_month \n"); executePluginSql.append(" LEFT JOIN (SELECT \n"); executePluginSql.append(" use_year, \n"); From 1b861251144d6d01ce9a4854f81638837e95f276 Mon Sep 17 00:00:00 2001 From: king Date: Fri, 20 Mar 2026 14:28:48 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E7=BB=BC=E5=90=88=E9=94=80=E5=94=AE?= =?UTF-8?q?=E6=83=85=E5=86=B5=E8=A1=A8=20=E6=9C=88=E5=BA=A6=E5=88=86?= =?UTF-8?q?=E7=BB=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/NewGrBiSaAggMonthCount.java | 4 +- .../framework/mapper/NewGrBiSaAggMapper.java | 8 +-- .../service/impl/NewGrBiSaAggServiceImpl.java | 12 +++-- .../mapper/framework/NewGrBiSaAggMapper.xml | 52 +++++++++---------- .../NewGrBiSaAggMonthCountMapper.xml | 12 ++--- 5 files changed, 46 insertions(+), 42 deletions(-) diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggMonthCount.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggMonthCount.java index b81b501..0f872dc 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggMonthCount.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/NewGrBiSaAggMonthCount.java @@ -130,8 +130,8 @@ public class NewGrBiSaAggMonthCount implements Serializable private BigDecimal lastMonthCost; - @TableField(value = "yoy_last_month_cost") - private BigDecimal yoyLastMonthCost; + @TableField(value = "yoy_month_cost") + private BigDecimal yoyMonthCost; @TableField(value = "this_month_profit_rate") diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java index 46c3730..76f5419 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/NewGrBiSaAggMapper.java @@ -38,12 +38,14 @@ public interface NewGrBiSaAggMapper extends BaseMapper // void updateThisYearData(); // - void updateLastYearData(); +// void updateLastYearData(); void updateLastMonthSamoney(); void updateYoyMonthData(); + + void updateComplexCalculateMonth1(); + void updateComplexCalculateMonth2(); // -// void updateComplexCalculate1(); -// void updateComplexCalculate2(); +// void updateComplexCalculateYear(); // void updateComplexCalculate3(); // void updateComplexCalculate4(); // void updateComplexCalculate5(); diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java index 105e6f4..b0c8739 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/NewGrBiSaAggServiceImpl.java @@ -76,12 +76,14 @@ public class NewGrBiSaAggServiceImpl extends ServiceImpl--> - UPDATE new_gr_bi_sa_agg_month_count a + UPDATE new_gr_bi_sa_agg a LEFT JOIN ( SELECT use_year, @@ -325,7 +325,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - UPDATE new_gr_bi_sa_agg_month_count AS current_month + UPDATE new_gr_bi_sa_agg AS current_month LEFT JOIN ( SELECT -- 当前记录的维度和年月 @@ -340,8 +340,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" custom_id, saler_id, -- 计算上个月的年月 - YEAR(DATE_SUB(CONCAT(use_year, '-', use_month, '-01'), INTERVAL 1 MONTH)) AS LAST_YEAR, - MONTH(DATE_SUB(CONCAT(use_year, '-', use_month, '-01'), INTERVAL 1 MONTH)) AS LAST_MONTH, + use_year AS LAST_YEAR, + use_month AS LAST_MONTH, SUM(this_month_sa_qty) AS current_month_sa_qty, -- 当前月的销售金额,将作为上个月的金额赋给别的记录 SUM(this_month_sa_money) AS current_month_sa_money, @@ -366,13 +366,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND current_month.dosage_id = last_month_data.dosage_id AND current_month.custom_id = last_month_data.custom_id AND current_month.saler_id = last_month_data.saler_id - AND current_month.use_year = last_month_data.use_year - AND current_month.use_month = last_month_data.use_month + AND last_month_data.use_year = current_month.use_year - (current_month.use_month = 1) + AND last_month_data.use_month = IF(current_month.use_month = 1, 12, current_month.use_month - 1) SET current_month.last_month_sa_qty = last_month_data.current_month_sa_qty, -- 上月销量 current_month.last_month_sa_money = last_month_data.current_month_sa_money, -- 上月销售金额 - current_month.last_month_sa_cost = last_month_data.current_month_cost, -- 上月销售成本 - current_month.last_month_sa_profit = last_month_data.current_month_profit; -- 上月毛利额 + current_month.last_month_cost = last_month_data.current_month_cost, -- 上月销售成本 + current_month.last_month_profit = last_month_data.current_month_profit; -- 上月毛利额 UPDATE new_gr_bi_sa_agg_year_count a @@ -416,32 +416,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + -- 本月毛利率 MONTHPROFITRATE 本月销售毛利/本月销售收入×100% - UPDATE new_gr_bi_sa_agg_month_count + UPDATE new_gr_bi_sa_agg SET this_month_profit_rate = CASE WHEN last_month_sa_money = 0 or last_month_sa_money is null THEN - IF(MONTHPROFIT > 0, 100, 0) ELSE MONTHPROFIT/ last_month_sa_money * 100 END; + IF(this_month_profit > 0, 100, 0) ELSE this_month_profit/ last_month_sa_money * 100 END; - - - -- 本年毛利率 THISPROFITRATE 本年销售毛利/本年销售收入×100% - -- 上年毛利率 LASTPROFITRATE 上年销售毛利/上年销售收入×100% - UPDATE new_gr_bi_sa_agg_year_count - SET - this_year_profit_rate = CASE WHEN this_year_sa_money = 0 or this_year_sa_money is null THEN - IF(this_year_profit > 0, 100, 0) ELSE this_year_profit/ this_year_sa_money * 100 END, - last_year_profit_rate =CASE WHEN last_year_sa_money = 0 or last_year_sa_money is null THEN - IF(last_year_profit > 0, 100, 0) ELSE last_year_profit/ last_year_sa_money * 100 END; - - - - + -- 本月销售金额占比 MONTHSAMONEYSHARE 当前行本月销售额/本月销售额总和*100% -- 本月毛利额占比 MONTHPROFITSHARE 当前行本月毛利额/本月毛利额总和*100% - UPDATE new_gr_bi_sa_agg_month_count a + UPDATE new_gr_bi_sa_agg a LEFT JOIN ( SELECT use_year, @@ -458,6 +445,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SET a.this_month_sa_money_share = COALESCE (ROUND( a.this_month_sa_money/b.this_month_sa_money_sum * 100, 2), 0 ), a.this_month_profit_share = COALESCE (ROUND( a.this_month_profit/b.this_month_profit_sum * 100, 2), 0 ); + + + -- 本年毛利率 THISPROFITRATE 本年销售毛利/本年销售收入×100% + -- 上年毛利率 LASTPROFITRATE 上年销售毛利/上年销售收入×100% + UPDATE new_gr_bi_sa_agg_year_count + SET + this_year_profit_rate = CASE WHEN this_year_sa_money = 0 or this_year_sa_money is null THEN + IF(this_year_profit > 0, 100, 0) ELSE this_year_profit/ this_year_sa_money * 100 END, + last_year_profit_rate =CASE WHEN last_year_sa_money = 0 or last_year_sa_money is null THEN + IF(last_year_profit > 0, 100, 0) ELSE last_year_profit/ last_year_sa_money * 100 END; + + + -- 本年销售金额占比 this_year_sa_money_share当前行本年销售额/本年销售额总和*100% diff --git a/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMonthCountMapper.xml b/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMonthCountMapper.xml index fc21b50..9eaa732 100644 --- a/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMonthCountMapper.xml +++ b/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggMonthCountMapper.xml @@ -33,7 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -42,7 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, use_year, use_month, zone_id, zone_name, sale_type_id, sale_type_name, custom_id, custom_name, dosage_id, dosage_name, goods_id, goods_name, province_id, province_name, saler_id, saler_name, this_month_sa_qty, last_month_sa_qty, yoy_month_sa_qty, this_month_sa_money, last_month_sa_money, yoy_month_sa_money, this_month_profit, last_month_profit, yoy_month_profit, this_month_cost, last_month_cost, yoy_last_month_cost, this_month_profit_rate, last_month_profit_rate, last_month_profit_share, this_month_sa_money_share, this_month_profit_share from new_gr_bi_sa_agg_month_count + select id, use_year, use_month, zone_id, zone_name, sale_type_id, sale_type_name, custom_id, custom_name, dosage_id, dosage_name, goods_id, goods_name, province_id, province_name, saler_id, saler_name, this_month_sa_qty, last_month_sa_qty, yoy_month_sa_qty, this_month_sa_money, last_month_sa_money, yoy_month_sa_money, this_month_profit, last_month_profit, yoy_month_profit, this_month_cost, last_month_cost, yoy_month_cost, this_month_profit_rate, last_month_profit_rate, last_month_profit_share, this_month_sa_money_share, this_month_profit_share from new_gr_bi_sa_agg_month_count @@ -58,8 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and custom_name like concat('%', #{customName}, '%') and dosage_id = #{dosageId} and dosage_name like concat('%', #{dosageName}, '%') - and goods_id = #{goodsId} - and goods_name like concat('%', #{goodsName}, '%') + and std_goods_name like concat('%', #{stdGoodsName}, '%') and province_id = #{provinceId} and province_name like concat('%', #{provinceName}, '%') and saler_id = #{salerId} @@ -102,8 +100,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" custom_name, dosage_id, dosage_name, - goods_id, - goods_name, + std_goods_name, province_id, province_name, saler_id, @@ -137,8 +134,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{customName}, #{dosageId}, #{dosageName}, - #{goodsId}, - #{goodsName}, + #{stdGoodsName}, #{provinceId}, #{provinceName}, #{salerId}, @@ -176,8 +172,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" custom_name = #{customName}, dosage_id = #{dosageId}, dosage_name = #{dosageName}, - goods_id = #{goodsId}, - goods_name = #{goodsName}, + std_goods_name = #{stdGoodsName}, province_id = #{provinceId}, province_name = #{provinceName}, saler_id = #{salerId}, diff --git a/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggYearCountMapper.xml b/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggYearCountMapper.xml index c9e611e..6d16304 100644 --- a/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggYearCountMapper.xml +++ b/lidee-core/src/main/resources/mapper/framework/NewGrBiSaAggYearCountMapper.xml @@ -15,8 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - + @@ -41,7 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, use_year, zone_id, zone_name, sale_type_id, sale_type_name, custom_id, custom_name, dosage_id, dosage_name, goods_id, goods_name, province_id, province_name, saler_id, saler_name, this_year_sa_qty, last_year_sa_qty, this_year_sa_money, last_year_sa_money, this_year_profit, last_year_profit, this_year_cost, last_year_cost, this_year_profit_rate, last_year_profit_rate, this_year_profit_share, last_year_profit_share, this_year_sa_money_share, last_year_sa_money_share, this_year_sa_money_growth, this_year_profit_growth, this_year_profit_change from new_gr_bi_sa_agg_year_count + select id, use_year, zone_id, zone_name, sale_type_id, sale_type_name, custom_id, custom_name, dosage_id, dosage_name, std_goods_name, province_id, province_name, saler_id, saler_name, this_year_sa_qty, last_year_sa_qty, this_year_sa_money, last_year_sa_money, this_year_profit, last_year_profit, this_year_cost, last_year_cost, this_year_profit_rate, last_year_profit_rate, this_year_profit_share, last_year_profit_share, this_year_sa_money_share, last_year_sa_money_share, this_year_sa_money_growth, this_year_profit_growth, this_year_profit_change from new_gr_bi_sa_agg_year_count