From 27b8892c06d9f56f275f5542677512751f7bf67c Mon Sep 17 00:00:00 2001 From: king Date: Tue, 24 Mar 2026 17:32:13 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=BC=E5=90=88=E9=94=80=E5=94=AE=E6=83=85?= =?UTF-8?q?=E5=86=B5=E8=A1=A8=20=E8=B0=83=E6=95=B4=E6=9C=88=E5=BA=A6?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NewGrBiSaAggMonthCountController.java | 5 +- .../report/xtsy/zhxsqkLineReportEnhance.java | 475 ++++++++++++------ 2 files changed, 318 insertions(+), 162 deletions(-) diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/NewGrBiSaAggMonthCountController.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/NewGrBiSaAggMonthCountController.java index d91d668..eeaca25 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/NewGrBiSaAggMonthCountController.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/NewGrBiSaAggMonthCountController.java @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -44,13 +45,15 @@ public class NewGrBiSaAggMonthCountController extends BaseController public BaseWebResult getTotalDetail(HttpServletRequest req) { Map params = FuncWeb.getParameterBodyMap(req); + String groupField = params.containsKey("Group by") ? "usemonth" :params.get("Group by").toString(); SaAggParam saAggParam = new SaAggParam(); - String groupField = params.get("Group by").toString(); if (params.containsKey("usemonth")){ saAggParam.setUseMonth(params.get("usemonth").toString()); } if(params.containsKey("useyear")){ saAggParam.setUseYear(params.get("useyear").toString()); + }else{ + saAggParam.setUseYear(new SimpleDateFormat("yyyy").format(new Date())); } if(params.containsKey("customname")){ saAggParam.setCustomName(Arrays.asList(params.get("customname").toString().split(","))); 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 f03d75f..6315ded 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 @@ -7,7 +7,9 @@ import com.lideeyunji.tool.framework.exception.lideeYunJiException; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.Map; @@ -131,7 +133,7 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" custom_id, \n"); executePluginSql.append(" zone_id, \n"); executePluginSql.append(" std_goods_name, \n"); - executePluginSql.append(" province_id, \n"); +// executePluginSql.append(" province_id, \n"); executePluginSql.append(" sale_type_id, \n"); executePluginSql.append(" dosage_id, \n"); executePluginSql.append(" saler_id, \n"); @@ -144,13 +146,13 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { executePluginSql.append(" custom_id, \n"); executePluginSql.append(" zone_id, \n"); executePluginSql.append(" std_goods_name, \n"); - executePluginSql.append(" province_id, \n"); +// executePluginSql.append(" province_id, \n"); executePluginSql.append(" sale_type_id, \n"); executePluginSql.append(" dosage_id, \n"); executePluginSql.append(" saler_id) AS last_year_data \n"); executePluginSql.append(" ON current_year_data.std_goods_name = last_year_data.std_goods_name \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.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"); @@ -206,19 +208,22 @@ 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"); - executePluginSql.append(" current_month.custom_name as customname, \n"); + if(!params.containsKey("useyear")){ + params.put("useyear", new SimpleDateFormat("yyyy").format(new Date())); } 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"); //年月 + executePluginSql.append(" current_month.ny, \n"); //年月 }else{ - executePluginSql.append(" MAX(LPAD(current_month.use_month, 2, '0')) as ny, \n"); + executePluginSql.append(" LPAD(current_month.use_month, 2, '0') as ny, \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"); + } if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 executePluginSql.append(" current_month.zone_id, \n"); executePluginSql.append(" current_month.zone_name as zonename, \n"); @@ -238,201 +243,349 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin { if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名 executePluginSql.append(" current_month.std_goods_name as stdGoodsName, \n"); } - executePluginSql.append(" SUM(current_month.this_month_sa_qty) as thisMonthSaQty, \n"); //本月销售数量(件) - executePluginSql.append(" ROUND(SUM(current_month.this_month_sa_money) / 10000, 2) as thisMonthSaMoney, \n"); //本月销售金额(元) - executePluginSql.append(" ROUND(SUM(current_month.this_month_profit) / 10000, 2) as thisMonthProfit, \n"); //本月毛利额(元) - executePluginSql.append(" ROUND(SUM(current_month.this_month_cost) / 10000, 2) as thisMonthCost, \n"); //本月成本(元) - - executePluginSql.append(" SUM(last_month_data.last_month_sa_qty) as lastMonthSaQty, \n"); //上月销售数量(件) - executePluginSql.append(" ROUND(SUM(last_month_data.last_month_sa_money) / 10000, 2) as lastMonthSaMoney, \n"); //上月销售金额(元) - executePluginSql.append(" ROUND(SUM(last_month_data.last_month_profit) / 10000, 2) as lastMonthProfit, \n"); //上月毛利额(元) - executePluginSql.append(" ROUND(SUM(last_month_data.last_month_cost) / 10000, 2) as lastMonthCost, \n"); //上月成本(元) - - executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_sa_qty)/ 10000, 2) as yoyMonthSaQty, \n"); //同比月销售数量(件) - executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_sa_money) / 10000, 2) as yoyMonthSaMoney, \n"); //同比月销售金额(元) - executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_profit) / 10000, 2) as yoyMonthProfit, \n"); //同比月毛利额(元) - executePluginSql.append(" ROUND(SUM(yoy_month.yoy_month_cost) / 10000, 2) as yoyMonthCost, \n"); //同比月成本(元) - - 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(" current_month.this_month_sa_qty AS thisMonthSaQty, \n"); //本月销售数量(件) + executePluginSql.append(" ROUND(current_month.this_month_sa_money / 10000, 2) AS thisMonthSaMoney, \n"); //本月销售金额(元) + executePluginSql.append(" ROUND(current_month.this_month_profit / 10000, 2) AS thisMonthProfit, \n"); //本月毛利额(元) + executePluginSql.append(" ROUND(current_month.this_month_cost / 10000, 2) AS thisMonthCost, \n"); //本月成本(元) + executePluginSql.append(" last_month_data.last_month_sa_qty AS lastMonthSaQty, \n"); //上月销售数量(件) + executePluginSql.append(" ROUND(last_month_data.last_month_sa_money / 10000, 2) AS lastMonthSaMoney, \n"); //上月销售金额(元) + executePluginSql.append(" ROUND(last_month_data.last_month_profit / 10000, 2) AS lastMonthProfit, \n"); //上月毛利额(元) + executePluginSql.append(" ROUND(last_month_data.last_month_cost / 10000, 2) AS lastMonthCost, \n"); //上月成本(元) + executePluginSql.append(" ROUND(yoy_month.yoy_month_sa_qty / 10000, 2) AS yoyMonthSaQty, \n"); //同比月销售数量(件) + executePluginSql.append(" ROUND(yoy_month.yoy_month_sa_money / 10000, 2) AS yoyMonthSaMoney, \n"); //同比月销售金额(元) + executePluginSql.append(" ROUND(yoy_month.yoy_month_profit / 10000, 2) AS yoyMonthProfit, \n"); //同比月毛利额(元) + executePluginSql.append(" ROUND(yoy_month.yoy_month_cost / 10000, 2) AS yoyMonthCost, \n"); //同比月成本(元) + executePluginSql.append(" current_month.province_id AS province_id, \n"); //行政区域ID + executePluginSql.append(" current_month.province_name AS province_name, \n"); //行政区域名称 + executePluginSql.append(" CASE WHEN (CASE WHEN yoy_month.yoy_month_sa_qty = 0 THEN IF(current_month.this_month_sa_qty > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_qty - yoy_month.yoy_month_sa_qty) / yoy_month.yoy_month_sa_qty * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN yoy_month.yoy_month_sa_qty = 0 THEN IF(current_month.this_month_sa_qty > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_qty - yoy_month.yoy_month_sa_qty) / yoy_month.yoy_month_sa_qty * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN yoy_month.yoy_month_sa_qty = 0 THEN IF(current_month.this_month_sa_qty > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_qty - yoy_month.yoy_month_sa_qty) / yoy_month.yoy_month_sa_qty * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN yoy_month.yoy_month_sa_qty = 0 THEN IF(current_month.this_month_sa_qty > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_qty - yoy_month.yoy_month_sa_qty) / yoy_month.yoy_month_sa_qty * 100 END), 2)) \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(" CASE WHEN (CASE WHEN yoy_month.yoy_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_money - yoy_month.yoy_month_sa_money) / yoy_month.yoy_month_sa_money * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN yoy_month.yoy_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_money - yoy_month.yoy_month_sa_money) / yoy_month.yoy_month_sa_money * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN yoy_month.yoy_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_money - yoy_month.yoy_month_sa_money) / yoy_month.yoy_month_sa_money * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN yoy_month.yoy_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_money - yoy_month.yoy_month_sa_money) / 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(" CASE WHEN (CASE WHEN last_month_data.last_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_money - last_month_data.last_month_sa_money) / last_month_data.last_month_sa_money * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN last_month_data.last_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_money - last_month_data.last_month_sa_money) / last_month_data.last_month_sa_money * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN last_month_data.last_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_money - last_month_data.last_month_sa_money) / last_month_data.last_month_sa_money * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN last_month_data.last_month_sa_money = 0 THEN IF(current_month.this_month_sa_money > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_sa_money - last_month_data.last_month_sa_money) / 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(" CASE WHEN (CASE WHEN yoy_month.yoy_month_cost = 0 THEN IF(current_month.this_month_cost > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_cost - yoy_month.yoy_month_cost) / yoy_month.yoy_month_cost * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN yoy_month.yoy_month_cost = 0 THEN IF(current_month.this_month_cost > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_cost - yoy_month.yoy_month_cost) / yoy_month.yoy_month_cost * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN yoy_month.yoy_month_cost = 0 THEN IF(current_month.this_month_cost > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_cost - yoy_month.yoy_month_cost) / yoy_month.yoy_month_cost * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN yoy_month.yoy_month_cost = 0 THEN IF(current_month.this_month_cost > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_cost - yoy_month.yoy_month_cost) / 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(" CASE WHEN (CASE WHEN yoy_month.yoy_month_profit = 0 THEN IF(current_month.this_month_profit > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_profit - yoy_month.yoy_month_profit) / yoy_month.yoy_month_profit * 100 END) > 0 THEN \n"); + executePluginSql.append(" CONCAT('🟢 ', ROUND((CASE WHEN yoy_month.yoy_month_profit = 0 THEN IF(current_month.this_month_profit > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_profit - yoy_month.yoy_month_profit) / yoy_month.yoy_month_profit * 100 END), 2)) \n"); + executePluginSql.append(" WHEN (CASE WHEN yoy_month.yoy_month_profit = 0 THEN IF(current_month.this_month_profit > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_profit - yoy_month.yoy_month_profit) / yoy_month.yoy_month_profit * 100 END) < 0 THEN \n"); + executePluginSql.append(" CONCAT('🔴 ', ROUND((CASE WHEN yoy_month.yoy_month_profit = 0 THEN IF(current_month.this_month_profit > 0, 100, 0) \n"); + executePluginSql.append(" ELSE (current_month.this_month_profit - yoy_month.yoy_month_profit) / 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(" from new_gr_bi_sa_agg_month_count as current_month \n"); + executePluginSql.append(" COALESCE (ROUND( current_month.this_month_sa_money/total_month_data.this_month_sa_money_sum * 100, 2), 0 ) as this_month_sa_money_share,\n"); //本月销售金额占比 + executePluginSql.append(" COALESCE (ROUND( current_month.this_month_profit/total_month_data.this_month_profit_sum * 100, 2), 0 ) as this_month_profit_share \n"); //本月毛利额占比 + executePluginSql.append(" FROM (SELECT \n"); + executePluginSql.append(" use_year AS use_year, \n"); + executePluginSql.append(" use_month AS use_month, \n"); + + if (groupFieldList.contains("customname")) { //客户名称 + executePluginSql.append(" custom_id, \n"); + executePluginSql.append(" custom_name , \n"); + } + + if (groupFieldList.contains("stdGoodsName")) { //标准品名 + executePluginSql.append(" std_goods_name, \n"); + } + + if (groupFieldList.contains("zonename") ) { //业务区域 + executePluginSql.append(" zone_id, \n"); + executePluginSql.append(" zone_name, \n"); + } + if (groupFieldList.contains("saletypename") ) { //销售类型 + executePluginSql.append(" sale_type_id, \n"); + executePluginSql.append(" sale_type_name, \n"); + } + if (groupFieldList.contains("dosagename")) { //剂型 + executePluginSql.append(" dosage_id, \n"); + executePluginSql.append(" dosage_name, \n"); + } + + if (groupFieldList.contains("salername")) { //业务员 + executePluginSql.append(" current_month.saler_id, \n"); + executePluginSql.append(" current_month.saler_name, \n"); + } + executePluginSql.append(" MAX(CONCAT(use_year, LPAD(use_month, 2, '0'))) AS ny, \n"); + executePluginSql.append(" GROUP_CONCAT(DISTINCT province_id ORDER BY province_id SEPARATOR ',') AS province_id, \n"); + executePluginSql.append(" GROUP_CONCAT(DISTINCT province_name ORDER BY province_name SEPARATOR ',') AS province_name, \n"); + executePluginSql.append(" sum(this_month_sa_qty) AS this_month_sa_qty, \n"); + executePluginSql.append(" sum(this_month_sa_money) AS this_month_sa_money, \n"); + executePluginSql.append(" sum(this_month_cost) AS this_month_cost, \n"); + executePluginSql.append(" sum(this_month_profit) AS this_month_profit \n"); + executePluginSql.append(" FROM \n"); + executePluginSql.append(" new_gr_bi_sa_agg_month_count \n"); + appendWhere(params, executePluginSql); + executePluginSql.append(" GROUP BY use_year,use_month,"); + + if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称 + executePluginSql.append(" custom_id,"); + executePluginSql.append(" custom_name,"); + } + if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名 + executePluginSql.append(" std_goods_name,"); + } + if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 + executePluginSql.append(" zone_id,"); + executePluginSql.append(" zone_name,"); + } + if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型 + executePluginSql.append(" sale_type_id,"); + executePluginSql.append(" sale_type_name,"); + } + if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型 + executePluginSql.append(" dosage_id,"); + executePluginSql.append(" dosage_name,"); + } + + if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员 + executePluginSql.append(" saler_id,"); + executePluginSql.append(" saler_name,"); + } + executePluginSql.deleteCharAt(executePluginSql.length() - 1); + executePluginSql.append(" ) AS current_month \n"); //current_month 本月数据 executePluginSql.append(" LEFT JOIN (SELECT \n"); executePluginSql.append(" use_year, \n"); executePluginSql.append(" use_month, \n"); - executePluginSql.append(" custom_id, \n"); - executePluginSql.append(" zone_id, \n"); - executePluginSql.append(" std_goods_name, \n"); - executePluginSql.append(" province_id, \n"); - executePluginSql.append(" sale_type_id, \n"); - executePluginSql.append(" dosage_id, \n"); - executePluginSql.append(" saler_id, \n"); + appendSelectField(params, groupFieldList, executePluginSql); 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(" custom_id, \n"); - executePluginSql.append(" zone_id, \n"); - executePluginSql.append(" std_goods_name, \n"); - executePluginSql.append(" province_id, \n"); - executePluginSql.append(" sale_type_id, \n"); - executePluginSql.append(" dosage_id, \n"); - executePluginSql.append(" saler_id) AS last_month_data \n"); - executePluginSql.append(" ON current_month.std_goods_name = last_month_data.std_goods_name \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"); +// appendWhere(params, executePluginSql); + executePluginSql.append(" GROUP BY use_year,use_month,"); + appendGroupByField(params, groupFieldList, executePluginSql); + executePluginSql.append(" ) AS last_month_data \n"); // last_month_data 上月数据 + executePluginSql.append(" ON 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"); + + if (groupFieldList.contains("customname") ) { //客户名称 + executePluginSql.append(" AND current_month.custom_id = last_month_data.custom_id \n"); + } + if (groupFieldList.contains("stdGoodsName")) { //标准品名 + executePluginSql.append(" AND current_month.std_goods_name = last_month_data.std_goods_name \n"); + } + if (groupFieldList.contains("zonename") ) { //业务区域 + 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"); + if (groupFieldList.contains("saletypename")) { //销售类型 + executePluginSql.append(" AND current_month.sale_type_id = last_month_data.sale_type_id \n"); + } + if (groupFieldList.contains("dosagename")) { //剂型 + executePluginSql.append(" AND current_month.dosage_id = last_month_data.dosage_id \n"); + } + if (groupFieldList.contains("salername")) { //业务员 + executePluginSql.append(" AND current_month.saler_id = last_month_data.saler_id \n"); + } executePluginSql.append(" LEFT JOIN (SELECT use_year, \n"); executePluginSql.append(" use_month, \n"); - executePluginSql.append(" custom_id, \n"); - executePluginSql.append(" zone_id, \n"); - executePluginSql.append(" std_goods_name, \n"); - executePluginSql.append(" province_id, \n"); - executePluginSql.append(" sale_type_id, \n"); - executePluginSql.append(" dosage_id, \n"); - executePluginSql.append(" saler_id, \n"); +// executePluginSql.append(" custom_id, \n"); +// executePluginSql.append(" zone_id, \n"); +// executePluginSql.append(" std_goods_name, \n"); +//// executePluginSql.append(" province_id, \n"); +// executePluginSql.append(" sale_type_id, \n"); +// executePluginSql.append(" dosage_id, \n"); +// executePluginSql.append(" saler_id, \n"); + + appendSelectField(params, groupFieldList, executePluginSql); 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 "); -// 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(" custom_id, \n"); - executePluginSql.append(" zone_id, \n"); - executePluginSql.append(" std_goods_name, \n"); - executePluginSql.append(" province_id, \n"); - executePluginSql.append(" sale_type_id, \n"); - executePluginSql.append(" dosage_id, \n"); - executePluginSql.append(" saler_id) yoy_month ON yoy_month.use_year = current_month.use_year - 1 \n"); + if(params.containsKey("useyear")){ + params.put("useyear", Integer.parseInt(params.get("useyear").toString()) - 1); + } + appendWhere(params, executePluginSql); + if(params.containsKey("useyear")){ + params.put("useyear", Integer.parseInt(params.get("useyear").toString() ) + 1); + } + executePluginSql.append(" GROUP BY use_year,use_month,"); + appendGroupByField(params, groupFieldList, executePluginSql); + executePluginSql.append(" ) 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.std_goods_name = current_month.std_goods_name \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"); + if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名 + executePluginSql.append(" AND yoy_month.std_goods_name = current_month.std_goods_name \n"); + } + if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 + executePluginSql.append(" AND yoy_month.zone_id = current_month.zone_id \n"); + } +// executePluginSql.append(" AND yoy_month.province_id = current_month.province_id \n"); + if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型 + executePluginSql.append(" AND yoy_month.sale_type_id = current_month.sale_type_id \n"); + } + if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型 + executePluginSql.append(" AND yoy_month.dosage_id = current_month.dosage_id \n"); + } + if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称 + executePluginSql.append(" AND yoy_month.custom_id = current_month.custom_id \n"); + } + if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员 + 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(" use_year\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"); +// 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,"); - 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 (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名 - executePluginSql.append(" current_month.std_goods_name,"); - } - - executePluginSql.deleteCharAt(executePluginSql.length() - 1); +// 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 (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名 +// executePluginSql.append(" current_month.std_goods_name,"); +// } +// +// executePluginSql.deleteCharAt(executePluginSql.length() - 1); return executePluginSql.toString(); } + + private void appendGroupByField(Map params, List groupFieldList, StringBuilder executePluginSql) { + if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称 + executePluginSql.append(" custom_id,"); + } + + if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名 + executePluginSql.append(" std_goods_name,"); + } + + if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 + executePluginSql.append(" zone_id,"); + } + if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型 + executePluginSql.append(" sale_type_id,"); + } + if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型 + executePluginSql.append(" dosage_id,"); + } + + if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员 + executePluginSql.append(" saler_id,"); + } + executePluginSql.deleteCharAt(executePluginSql.length() - 1); + } + + private void appendSelectField(Map params, List groupFieldList, StringBuilder executePluginSql) { + if (groupFieldList.contains("customname") || params.containsKey("customname")) { //客户名称 + executePluginSql.append(" custom_id, \n"); + } + if (groupFieldList.contains("stdGoodsName") || params.containsKey("stdGoodsName")) { //标准品名 + executePluginSql.append(" std_goods_name, \n"); + } + if (groupFieldList.contains("zonename") || params.containsKey("zonename")) { //业务区域 + executePluginSql.append(" zone_id, \n"); + } + if (groupFieldList.contains("saletypename") || params.containsKey("saletypename")) { //销售类型 + executePluginSql.append(" sale_type_id, \n"); + } + if (groupFieldList.contains("dosagename") || params.containsKey("dosagename")) { //剂型 + executePluginSql.append(" dosage_id, \n"); + } + if (groupFieldList.contains("salername") || params.containsKey("salername")) { //业务员 + executePluginSql.append(" saler_id, \n"); + } + } + + private void appendWhere(Map params, StringBuilder executePluginSql) { + executePluginSql.append(" where"); + if (params.containsKey("useyear")) { + executePluginSql.append(" use_year = '").append(Integer.parseInt(params.get("useyear").toString())).append("'"); + } + if (params.containsKey("usemonth")) { + executePluginSql.append(" AND use_month = '").append(Integer.parseInt(params.get("usemonth").toString())).append("'"); + } + if (params.containsKey("customname")) { + executePluginSql.append(" AND custom_name IN (").append(params.get("customname")).append(")"); + } + if (params.containsKey("stdGoodsName")) { + executePluginSql.append(" AND std_goods_name IN (").append(params.get("stdGoodsName")).append(")"); + } + if (params.containsKey("zonename")) { + executePluginSql.append(" AND zone_name IN (").append(params.get("zonename")).append(")"); + } + if (params.containsKey("saletypename")) { + executePluginSql.append(" AND sale_type_name IN (").append(params.get("saletypename")).append(")"); + } + if (params.containsKey("dosagename")) { + executePluginSql.append(" AND dosage_name IN (").append(params.get("dosagename")).append(")"); + } + if (params.containsKey("salername")) { + executePluginSql.append(" AND saler_name IN (").append(params.get("salername")).append(")"); + } + + } }