入门kpi的后台工具类

来源:互联网 发布:淘宝网新百伦运动鞋 编辑:程序博客网 时间:2024/06/05 08:38

1. 需求分析:

     计算kpi 的过程中,会遇到很多 数量和比率的计算,而且很多的数值都是由固定的sql语句得来,所以就需要根据前端传入的kpi名字,拿出相应的  语句,计算方式,同时还要考虑相同的筛选条件,比如: 起始时间,时间范围,实际值,登录角色,对标值,显示模式品牌等等,

 2. 根据前端传入的 kpi名字,拿出相应的sql语句,

     先封装一个实体类,

  public class KPIMetaData {
    private String sql;
    private int type;      //1: 2:  决定是数值 还是比率,
    private String numerator;  分子
    private String denominator;  分母


    public KPIMetaData(String sql, int type, String numerator, String denominator) {
        this.sql = sql;
        this.type = type;
        this.numerator = numerator;
        this.denominator = denominator;
    }


    public String getSql() {
        return sql;
    }


    public int getType() {
        return type;
    }


    public String getNumerator() {
        return numerator;
    }


    public String getDenominator() {
        return denominator;
    }
}

  取出相应的详细信息的工具类

 public class KPIUtils {
    private Map<String, KPIMetaData> cnToEn = Maps.newHashMap();

    // 零售签署目标
    private String signedRetailTA = "SELECT permit, sum(bmbs_ta) as bmbs_销售目标 " +
            "FROM snp_setting a " +
            "join LSH车型 b on a.carCode = b.车型编号 " +
            "WHERE y_m >= concat(substr('2000-01-01', 1, 4), substr('2000-01-01', 6, 2)) " +
            "AND y_m <= concat(substr('2020-01-01', 1, 4), substr('2020-01-01', 6, 2)) " +
            "and (case when 'MB' = '' then true else b.品牌 = 'MB' end) " +
            "and a.permit in (SELECT 许可_bmbs FROM LSH经销商表 WHERE `大区` = '东二区') " +
            "group by a.permit ";
    // 实际零售NBI
    private String actualRetailNBI = "SELECT   COUNT(1) AS 零售数, a.许可 " +
            "FROM 顾客进店记录表 a " +
            "JOIN LSH车型 b ON a.意向车型A = b.车型编号 " +
            "WHERE a.是否零售 = '是' " +
            "AND a.进店日期 >= '2000-01-01' " +
            "AND a.进店日期 <= '2020-01-01' " +
            "AND (case when 'MB' = '' then true else b.品牌 = 'MB' end) " +
            "AND a.许可 IN (SELECT 许可_bmbs FROM LSH经销商表 WHERE `大区` = '东二区') " +
            "GROUP BY a.许可 ";

  {
        cnToEn.put("BMBS销售目标完成率", new KPIMetaData(bmbs, 2, "新车销量", "bmbs_销售目标"));
    }


    {
        cnToEn.put("LSH销售目标完成率", new KPIMetaData(lsh, 2, "新车销量", "lsh_销售目标"));
    }

 // 为了热部署方便调试,没有将变量写成static
    public String getSignedRetailTA() {
        return signedRetailTA;
    }


    public String getActualRetailNBI() {
        return actualRetailNBI;
    }

public KPIMetaData getCnToEn(String name) {
        return cnToEn.get(name);
    }


}

4. 使用时就是直接,

        KPIUtils kpiUtils = new KPIUtils();//新建一个工具类
        KPIMetaData meta = kpiUtils.getCnToEn(items.name);// 由名字获取实体类

5.由于很多的筛选条件是一样的,所以在sql语句中全部有一样的可以替代的语句体


0 0