综合销售情况表 分组调整

This commit is contained in:
king
2026-03-19 17:19:25 +08:00
parent d789026c86
commit ddd57cd899
7 changed files with 907 additions and 252 deletions

View File

@@ -23,61 +23,65 @@ public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin {
Map<String, Object> params = enhanceContext.getParam().getParams();
if (params.containsKey("Group by")) {
List<String> 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<String, Object> params, List<String> 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();
}
}

View File

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

View File

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

View File

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

View File

@@ -38,10 +38,9 @@ public interface NewGrBiSaAggMapper extends BaseMapper<NewGrBiSaAgg>
// void updateThisYearData();
//
// void updateLastYearData();
// void updateLastMonthSamoney();
//
// void updateYoyMonthData();
void updateLastYearData();
void updateLastMonthSamoney();
void updateYoyMonthData();
//
// void updateComplexCalculate1();
// void updateComplexCalculate2();

View File

@@ -78,7 +78,7 @@ public class NewGrBiSaAggServiceImpl extends ServiceImpl<NewGrBiSaAggMapper, New
removeAndSaveBatch(pastYear, pastMonth, currentYear, currentMonth, grBiSaSetdtlList);
// this.baseMapper.updateThisYearData();
// this.baseMapper.updateYoyMonthData();
// this.baseMapper.updateLastYearData();
this.baseMapper.updateLastYearData();
// this.baseMapper.updateLastMonthSamoney();
// this.baseMapper.updateComplexCalculate1();
// this.baseMapper.updateComplexCalculate2();
@@ -107,7 +107,7 @@ public class NewGrBiSaAggServiceImpl extends ServiceImpl<NewGrBiSaAggMapper, New
log.info("批量新增数量-month{}", reNum);
baseMapper.insertSelectMonth(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth);
reNum = this.baseMapper.deleteSalesReportYear(pastYear, currentYear);
baseMapper.insertSelectYear(pastYear , currentYear * 100);
baseMapper.insertSelectYear(pastYear , currentYear);
log.info("批量新增数量-year{}", reNum);
}

View File

@@ -132,8 +132,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
saler_name,
this_month_sa_qty,
this_month_sa_money,
this_month_profit,
this_month_cost
this_month_cost,
this_month_profit
) SELECT
use_year,
use_month,
@@ -239,46 +239,46 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
saler_id,
saler_name
</insert>
<update id="updateThisYearData">
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>
<!-- <update id="updateThisYearData">-->
<!-- 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, &#45;&#45; 本年销量-->
<!-- SUM( this_month_sa_money ) AS this_year_sa_money, &#45;&#45; 本年销售金额-->
<!-- SUM( this_month_cost) as this_year_cost, &#45;&#45; 本年销售成本-->
<!-- SUM( this_month_profit ) AS this_year_profit &#45;&#45; 本年毛利额-->
<!-- 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>-->
<update id="updateYoyMonthData">
UPDATE new_gr_bi_sa_agg_month_count a
@@ -326,7 +326,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<update id="updateLastMonthSamoney">
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 );
</update>