P15GEN2\59518
2025-10-10 9f6890646993d16260d4201d613c092132856127
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package biz.report.agg;
 
import java.text.MessageFormat;
 
/**
 * @author kimi
 * @description
 * @date 2024-09-19 13:53
 */
 
 
public enum AggPattern {
    agg(1),//汇总
    count(1),//计数
    achieve(2),//达成
    achieve_multipy(3),//达成
    mom(3),//环比
    yoy(3),//同比
    contribution(3),//贡献
    ranking(4),//排名
    others(0),//其他补充信息
    ;
    private int level;
 
    AggPattern(int level) {
        this.level = level;
    }
 
    public static AggPattern parse(String pattern) {
 
        for (AggPattern value : values()) {
            if (value.name().equalsIgnoreCase(pattern)) {
                return value;
            }
        }
        
        return others;
    }
 
    public int getLevel() {
        return level;
    }
 
        public String getLevel1FieldSegment() {
            for (AggPattern value : values()) {
 
                if (value.equals(agg)) {
                    return "sum(ifnull({0},0)) as {1}";
                }
                if (value.equals(count)) {
                    return "count(ifnull({0},null)) as {1}";
                }
                if (value.equals(contribution)) {
                    return "sum(ifnull({0},0)) as {0}";
                }
            }
            return null;
        }
 
        public String createSql(AggField field) {
            String formula = "a.{0} = ifnull(a1.{0}, 0)";
            String fieldName = field.getFieldName();
            String measureField = field.getMeasureField();
            String other = "";
            switch (this) {
                case agg:
                    formula = "a.{0} = ifnull(a.{0},0) + ifnull(a1.{0},0)";
                    break;
                case count:
                    formula = "a.{0} = ifnull(a.{0},0) + ifnull(a1.{0},0)";
                    break;
                case achieve:
                    int pos = measureField.indexOf("/");
                    other = measureField.substring(pos + 1);
                    formula = pos < 0 ? "a.{0} = {1}" : "a.{0} = if({2} = 0, 0, {1})";
                    break;
                case mom:
                    formula = "a.{0} = if(ifnull(a1.{1},0) = 0, 1, -1 + a.{1}/a1.{1})";
                    break;
                case yoy:
                    formula = "a.{0} = if(ifnull(a1.{1},0) = 0, 1, -1 + a.{1}/a1.{1})";
                    break;
                case contribution:
                    formula = "a.{0} = if(ifnull(a1.{1},0) = 0, 0, a.{1}/a1.{1})";
                    break;
                case ranking:
                    formula = "a.{0} = a1.rank_number";
                    break;
                default:
                    formula = "a.{0} = ifnull(a1.{1}, ''--'')";
                    break;
            }
 
            return MessageFormat.format(formula, fieldName, measureField, other);
        }
}