@@ -0,0 +1,158 @@
package com.lideeyunji.core.framework.enhance.example.report.xtsy ;
import com.lideeyunji.core.framework.config.aspect.enhancereport.model.EnhanceReportContext ;
import com.lideeyunji.core.framework.config.aspect.enhancereport.plugin.ReportBeforeAdvicePlugin ;
import lombok.extern.slf4j.Slf4j ;
import org.springframework.stereotype.Component ;
import java.util.Arrays ;
import java.util.List ;
import java.util.Map ;
/**
* 报表-系统首页-单表
*/
@Slf4j
@Component ( " zhxsqkLineReportEnhance " )
public class zhxsqkLineReportEnhance implements ReportBeforeAdvicePlugin {
@Override
public void execute ( EnhanceReportContext enhanceContext ) {
log . info ( " 进入=======>zhxsqkLineReportEnhance=======>execute " ) ;
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 " ) ) { //客户名称
executePluginSql . append ( " tbl_lgbsa.CUSTOMID, \ n " ) ;
executePluginSql . append ( " tbl_lgbsa.CUSTOMNAME, \ n " ) ;
}
if ( groupFieldList . contains ( " useyear " ) ) { //年
executePluginSql . append ( " tbl_lgbsa.USEYEAR, \ n " ) ;
}
if ( groupFieldList . contains ( " usemonth " ) ) { //月
executePluginSql . append ( " tbl_lgbsa.USEMONTH, \ n " ) ;
}
if ( groupFieldList . contains ( " zonename " ) ) { //业务区域
executePluginSql . append ( " tbl_lgbsa.ZONEID, \ n " ) ;
executePluginSql . append ( " tbl_lgbsa.ZONENAME, \ n " ) ;
}
if ( groupFieldList . contains ( " saletypename " ) ) { //销售类型
executePluginSql . append ( " tbl_lgbsa.SALETYPEID, \ n " ) ;
executePluginSql . append ( " tbl_lgbsa.SALETYPENAME, \ n " ) ;
}
if ( groupFieldList . contains ( " salername " ) ) { //业务员
executePluginSql . append ( " tbl_lgbsa.SALERID, \ n " ) ;
executePluginSql . append ( " tbl_lgbsa.SALERNAME, \ n " ) ;
}
if ( groupFieldList . contains ( " dosagename " ) ) { //剂型
executePluginSql . append ( " tbl_lgbsa.DOSAGEID, \ n " ) ;
executePluginSql . append ( " tbl_lgbsa.DOSAGENAME, \ n " ) ;
}
executePluginSql . append ( " max(CONCAT(USEYEAR, LPAD(USEMONTH, 2, '0'))) as ny, \ n " ) ; //年月
executePluginSql . append ( " GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCEID ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCEID, \ n " ) ; //行政区域ID
executePluginSql . append ( " GROUP_CONCAT(DISTINCT tbl_lgbsa.PROVINCENAME ORDER BY tbl_lgbsa.PROVINCEID SEPARATOR ',') as PROVINCENAME, \ n " ) ; //行政区域名称
executePluginSql . append ( " sum(tbl_lgbsa.MONTHSAQTY) as MONTHSAQTY, \ n " ) ; //本月销量
executePluginSql . append ( " CONCAT(ROUND((SELECT SUM(MONTHSAQTY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS monthsaqty_s, \ n " ) ;
executePluginSql . append ( " CONCAT(ROUND((SELECT SUM(THISSAQTY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS thissaqty_s, \ n " ) ;
executePluginSql . append ( " CONCAT(ROUND((SELECT SUM(LASTSAQTY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS lastsaqty_s, \ n " ) ;
executePluginSql . append ( " -- 原本带CAST的字段, 简化写法( CONCAT会自动转为字符串) \ n " ) ;
executePluginSql . append ( " CONCAT(ROUND((SELECT SUM(MONTHSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000 ,2), '亿') AS monthsamoney_s, \ n " ) ;
executePluginSql . append ( " CONCAT(ROUND((SELECT SUM(THISSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000,2), '亿') AS thissamoney_s, \ n " ) ;
executePluginSql . append ( " CONCAT(ROUND((SELECT SUM(LASTSAMONEY) FROM yunji_gr_bi_sa_agg)/100000000,2), '亿') AS lastsamoney_s, \ n " ) ;
executePluginSql . append ( " max(tbl_lgbsa.THISSAQTY) as THISSAQTY, \ n " ) ;
executePluginSql . append ( " max(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 (sum(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 (sum(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 (sum(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 (sum(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 ( " max(tbl_lgbsa.MONTHSAMONEY) as MONTHSAMONEY, \ n " ) ;
executePluginSql . append ( " max(tbl_lgbsa.THISSAMONEY) as THISSAMONEY, \ n " ) ;
executePluginSql . append ( " max(tbl_lgbsa.LASTSAMONEY) 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 (sum(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 (sum(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 (sum(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 (sum(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 ( " max(tbl_lgbsa.MONTHPROFIT) as MONTHPROFIT, \ n " ) ; //本月毛利额(元)
executePluginSql . append ( " max(tbl_lgbsa.THISPROFIT) as THISPROFIT, \ n " ) ; //本年毛利额(元)
executePluginSql . append ( " max(tbl_lgbsa.LASTPROFIT) 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(sum(tbl_lgbsa.THISPROFIT) > 0, 100, 0) \ n " ) ;
executePluginSql . append ( " ELSE (sum(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 (sum(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 (sum(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 (sum(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 ( " sum(tbl_lgbsa.MONTHCOST) as MONTHCOST, \ n " ) ; //本月销售成本(元)
executePluginSql . append ( " avg(tbl_lgbsa.PROFITCHANGE) as PROFITCHANGE, \ n " ) ; //毛利变动(元)
executePluginSql . append ( " avg(tbl_lgbsa.PROFITGROWTH) as PROFITGROWTH, \ n " ) ; //毛利额增长率
executePluginSql . append ( " avg(tbl_lgbsa.THISPROFITRATE) as THISPROFITRATE, \ n " ) ; //本年毛利率
executePluginSql . append ( " avg(tbl_lgbsa.SAMONEYGROWTH) as SAMONEYGROWTH, \ n " ) ; //销售金额增长率
executePluginSql . append ( " max(tbl_lgbsa.LASTPROFITSHARE), \ n " ) ; //上年毛利额占比
executePluginSql . append ( " CONCAT(ROUND(avg(tbl_lgbsa.THISPROFITSHARE) * 100, 2), '%') AS THISPROFITSHARE, \ n " ) ; //本年毛利额占比
executePluginSql . append ( " CONCAT(ROUND(avg(tbl_lgbsa.MONTHPROFITSHARE) * 100, 2), '%') AS MONTHPROFITSHARE, \ n " ) ; //本月毛利额占比
executePluginSql . append ( " CONCAT(ROUND(avg(tbl_lgbsa.LASTSAMONEYSHARE) * 100, 2), '%') AS LASTSAMONEYSHARE, \ n " ) ; //上年销售金额占比
executePluginSql . append ( " CONCAT(ROUND(avg(tbl_lgbsa.THISSAMONEYSHARE) * 100, 2), '%') AS THISSAMONEYSHARE, \ n " ) ; //本年销售金额占比
executePluginSql . append ( " CONCAT(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 " ) ) {
executePluginSql . append ( " tbl_lgbsa.CUSTOMID, " ) ;
executePluginSql . append ( " tbl_lgbsa.CUSTOMNAME, " ) ;
}
if ( groupFieldList . contains ( " useyear " ) ) {
executePluginSql . append ( " tbl_lgbsa.USEYEAR, " ) ;
}
if ( groupFieldList . contains ( " usemonth " ) ) {
executePluginSql . append ( " tbl_lgbsa.USEMONTH, " ) ;
}
if ( groupFieldList . contains ( " zonename " ) ) {
executePluginSql . append ( " tbl_lgbsa.ZONEID, " ) ;
executePluginSql . append ( " tbl_lgbsa.ZONENAME, " ) ;
}
if ( groupFieldList . contains ( " saletypename " ) ) {
executePluginSql . append ( " tbl_lgbsa.SALETYPEID, " ) ;
executePluginSql . append ( " tbl_lgbsa.SALETYPENAME, " ) ;
}
if ( groupFieldList . contains ( " salername " ) ) {
executePluginSql . append ( " tbl_lgbsa.SALERID, " ) ;
executePluginSql . append ( " tbl_lgbsa.SALERNAME, " ) ;
}
if ( groupFieldList . contains ( " dosagename " ) ) {
executePluginSql . append ( " tbl_lgbsa.DOSAGEID, " ) ;
executePluginSql . append ( " tbl_lgbsa.DOSAGENAME, " ) ;
}
executePluginSql . deleteCharAt ( executePluginSql . length ( ) - 1 ) ;
params . put ( " executePluginSql " , executePluginSql . toString ( ) ) ;
// params.remove("Group by"); // 原有的逻辑注释了,这里也注释
}
}
}