PC
2024-03-31 608f20e0d5d8f95d9bbb917e95e2913682deb77d
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package com.qianwen.core.tool.metadata.types;
 
import java.lang.Number;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Optional;
import java.util.function.Function;
import com.qianwen.core.tool.metadata.Converter;
import com.qianwen.core.tool.metadata.DataType;
import com.qianwen.core.tool.metadata.UnitSupported;
import com.qianwen.core.tool.metadata.ValidateResult;
import com.qianwen.core.tool.metadata.unit.ValueUnit;
 
/* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/metadata/types/NumberType.class */
public abstract class NumberType<N extends Number> extends AbstractType<NumberType<N>> implements UnitSupported, DataType, Converter<N> {
    private Number max;
    private Number min;
    private ValueUnit unit;
 
    @Override // org.springblade.core.tool.metadata.Converter
    public abstract N convert(Object value);
 
    public void setMax(final Number max) {
        this.max = max;
    }
 
    public void setMin(final Number min) {
        this.min = min;
    }
 
    @Override // org.springblade.core.tool.metadata.UnitSupported
    public void setUnit(final ValueUnit unit) {
        this.unit = unit;
    }
 
    public Number getMax() {
        return this.max;
    }
 
    public Number getMin() {
        return this.min;
    }
 
    @Override // org.springblade.core.tool.metadata.UnitSupported
    public ValueUnit getUnit() {
        return this.unit;
    }
 
    public NumberType<N> unit(ValueUnit unit) {
        this.unit = unit;
        return this;
    }
 
    public NumberType<N> max(Number max) {
        this.max = max;
        return this;
    }
 
    public NumberType<N> min(Number min) {
        this.min = min;
        return this;
    }
 
    public Object format(Object value) {
        if (value == null) {
            return null;
        }
        ValueUnit unit = getUnit();
        if (unit == null) {
            return value;
        }
        return unit.format(value);
    }
 
    @Override // org.springblade.core.tool.metadata.DataType
    public ValidateResult validate(Object value) {
        try {
            N numberValue = convert(value);
            if (numberValue == null) {
                return ValidateResult.fail("数字格式错误:" + value);
            }
            if (this.max != null && numberValue.doubleValue() > this.max.doubleValue()) {
                return ValidateResult.fail("超过最大值:" + this.max);
            }
            if (this.min != null && numberValue.doubleValue() < this.min.doubleValue()) {
                return ValidateResult.fail("超过最大值:" + this.min);
            }
            return ValidateResult.success(numberValue);
        } catch (NumberFormatException e) {
            return ValidateResult.fail(e.getMessage());
        }
    }
 
    public N convertNumber(Object value, Function<Number, N> mapper) {
        return (N) Optional.ofNullable(convertNumber(value)).map(mapper).orElse(null);
    }
 
    public Number convertNumber(Object value) {
        if (value instanceof Number) {
            return (Number) value;
        }
        if (value instanceof String) {
            try {
                return new BigDecimal((String) value);
            } catch (NumberFormatException e) {
                return null;
            }
        } else if (value instanceof Date) {
            return Long.valueOf(((Date) value).getTime());
        } else {
            return null;
        }
    }
 
    public long getMax(long defaultVal) {
        return ((Long) Optional.ofNullable(getMax()).map((v0) -> {
            return v0.longValue();
        }).orElse(Long.valueOf(defaultVal))).longValue();
    }
 
    public long getMin(long defaultVal) {
        return ((Long) Optional.ofNullable(getMin()).map((v0) -> {
            return v0.longValue();
        }).orElse(Long.valueOf(defaultVal))).longValue();
    }
 
    public double getMax(double defaultVal) {
        return ((Double) Optional.ofNullable(getMax()).map((v0) -> {
            return v0.doubleValue();
        }).orElse(Double.valueOf(defaultVal))).doubleValue();
    }
 
    public double getMin(double defaultVal) {
        return ((Double) Optional.ofNullable(getMin()).map((v0) -> {
            return v0.doubleValue();
        }).orElse(Double.valueOf(defaultVal))).doubleValue();
    }
}