潘志宝
昨天 e5589d2671ecb4ad0a21fba18059c70469203672
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
package com.iailab.module.data.point.common;
 
import com.iailab.framework.common.util.date.DateUtils;
import lombok.AllArgsConstructor;
import lombok.Getter;
 
import java.util.Calendar;
import java.util.Date;
import java.util.function.BiFunction;
 
/**
 * 累计测点累计单位
 */
@Getter
@AllArgsConstructor
public enum PointCumulateUnitEnum {
    MIN("min", (end, length) -> {
        Calendar cal = (Calendar) end.clone();
        cal.add(Calendar.MINUTE, -length);
        return cal;
    }),
    HOUR("hour", (end, length) -> {
        Calendar cal = (Calendar) end.clone();
        cal.add(Calendar.HOUR_OF_DAY, -length);
        return cal;
    }),
    DAY("day", (end, length) -> {
        Calendar cal = (Calendar) end.clone();
        cal.add(Calendar.DAY_OF_MONTH, -length);
        return cal;
    }),
    THIS_MONTH("this_month", (end, length) -> {
        Calendar cal = (Calendar) end.clone();
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal;
    });
 
    private final String code;
    private final BiFunction<Calendar, Integer, Calendar> calculator;
 
    public Calendar calculate(Calendar endTime, Integer length) {
        return calculator.apply(endTime, length);
    }
 
    public static PointCumulateUnitEnum fromCode(String code) {
        for (PointCumulateUnitEnum unit : values()) {
            if (unit.code.equals(code)) {
                return unit;
            }
        }
        return null;
    }
 
    public static Date getStartTime(Calendar endTime, Integer length, String cumulateUnit) {
 
        PointCumulateUnitEnum unit = PointCumulateUnitEnum.fromCode(cumulateUnit);
 
        if (unit == null) {
            return endTime.getTime();
        } else if (unit != THIS_MONTH) {
            if (length == null || length <= 0) {
                return endTime.getTime();
            }
        }
 
        Calendar startCal = unit.calculate(endTime, length);
        return startCal.getTime();
    }
}