Skip to content

Commit feba333

Browse files
committed
key/value 存储
1 parent 286d70e commit feba333

File tree

6 files changed

+159
-23
lines changed

6 files changed

+159
-23
lines changed

src/main/java/code/kv/DataType.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,6 @@ public enum DataType {
3434
*/
3535
DATE,
3636

37-
/**
38-
* 时间
39-
*/
40-
TIME,
41-
4237
/**
4338
* 布尔
4439
*/

src/main/java/code/kv/KvData.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,31 @@
11
package code.kv;
22

3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
6+
import java.io.Serializable;
7+
38
/**
4-
* 〈一句话功能简述〉<p>
9+
* 〈数据〉<p>
510
* 〈功能详细描述〉
611
*
712
* @author zixiao
813
* @date 2019/5/9
914
*/
10-
public class KvData {
15+
@Data
16+
@AllArgsConstructor
17+
public class KvData implements Serializable{
18+
19+
private String bizId;
20+
21+
private String bizType;
22+
23+
private String modelCode;
24+
25+
private String fieldCode;
1126

27+
private String value;
1228

29+
private Integer seq;
1330

1431
}

src/main/java/code/kv/KvField.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package code.kv;
22

3+
import lombok.AllArgsConstructor;
34
import lombok.Data;
45

56
import java.io.Serializable;
@@ -12,6 +13,7 @@
1213
* @date 2019/5/9
1314
*/
1415
@Data
16+
@AllArgsConstructor
1517
public class KvField implements Serializable{
1618

1719
private int id;
@@ -32,8 +34,8 @@ public class KvField implements Serializable{
3234
private DataType dataType;
3335

3436
/**
35-
* 必填
37+
* 模型编号
3638
*/
37-
private boolean required;
39+
private String modelCode;
3840

3941
}

src/main/java/code/kv/KvModel.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package code.kv;
22

3+
import lombok.AllArgsConstructor;
34
import lombok.Data;
45

56
import java.io.Serializable;
@@ -12,6 +13,7 @@
1213
* @date 2019/5/9
1314
*/
1415
@Data
16+
@AllArgsConstructor
1517
public class KvModel implements Serializable{
1618

1719
private int id;
Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package code.kv;
22

3+
import lombok.AllArgsConstructor;
34
import lombok.Data;
45

56
import java.io.Serializable;
@@ -12,48 +13,50 @@
1213
* @date 2019/5/9
1314
*/
1415
@Data
16+
@AllArgsConstructor
1517
public class KvTemplate implements Serializable{
1618

1719
private int id;
1820

1921
/**
20-
* 字段编号
22+
* 业务类型
2123
*/
22-
private String fieldCode;
24+
private String bizType;
2325

2426
/**
25-
* 字段名称
26-
*/
27-
private String fieldName;
28-
29-
/**
30-
* 模型编号
27+
* 字段编号
3128
*/
32-
private String modelCode;
29+
private String fieldCode;
3330

3431
/**
3532
* 字段类型
3633
*/
3734
private DataType dataType;
3835

3936
/**
40-
* 必填
37+
* 是否必填
4138
*/
4239
private boolean required;
4340

4441
/**
4542
* 非空白(针对字符串)
4643
*/
47-
boolean notBlank;
44+
private boolean notBlank;
4845

4946
/**
50-
* 长度(针对字符串)
47+
* 最大长度
5148
*/
52-
int maxLength;
49+
private int maxLength;
5350

5451
/**
5552
* 正则表达式
5653
*/
57-
String regex;
54+
private String regex;
5855

56+
public KvTemplate(String biType, String fieldCode, DataType dataType, boolean required) {
57+
this.bizType = biType;
58+
this.fieldCode = fieldCode;
59+
this.dataType = dataType;
60+
this.required = required;
61+
}
5962
}

src/main/java/code/kv/KvTest.java

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package code.kv;
2+
3+
import code.util.DateFormatUtils;
4+
import org.springframework.util.Assert;
5+
6+
import java.math.BigDecimal;
7+
import java.text.ParseException;
8+
import java.util.*;
9+
10+
/**
11+
* 〈一句话功能简述〉<p>
12+
* 〈功能详细描述〉
13+
*
14+
* @author zixiao
15+
* @date 2019/5/20
16+
*/
17+
public class KvTest {
18+
19+
private static Map<String, KvModel> kvModelMap = new HashMap<>();
20+
21+
private static Map<String, KvField> kvFieldMap = new HashMap<>();
22+
23+
private static Map<String, KvTemplate> kvTemplateMap = new HashMap<>();
24+
25+
private static Set<String> booleanSet = new HashSet<>();
26+
27+
static {
28+
kvModelMap.put("loan", new KvModel(1, "loan", "进件"));
29+
30+
KvField kvField = new KvField(1, "age", "年龄", DataType.INTEGER, "loan");
31+
kvFieldMap.put(kvField.getCode(), kvField);
32+
kvField = new KvField(2, "name", "姓名", DataType.STRING, "loan");
33+
kvFieldMap.put(kvField.getCode(), kvField);
34+
kvField = new KvField(3, "birthday", "出生年月日", DataType.DATE, "loan");
35+
kvFieldMap.put(kvField.getCode(), kvField);
36+
kvField = new KvField(4, "amount", "金额", DataType.DECIMAL, "loan");
37+
kvFieldMap.put(kvField.getCode(), kvField);
38+
39+
KvTemplate kvTemplate = new KvTemplate("tpl1", "age", DataType.INTEGER, true);
40+
kvTemplateMap.put(kvTemplate.getBizType() + kvTemplate.getFieldCode(), kvTemplate);
41+
42+
kvTemplate = new KvTemplate("tpl1", "name", DataType.STRING, true);
43+
kvTemplate.setNotBlank(true);
44+
kvTemplate.setMaxLength(20);
45+
kvTemplateMap.put(kvTemplate.getBizType() + kvTemplate.getFieldCode(), kvTemplate);
46+
47+
kvTemplate = new KvTemplate("tpl1", "birthday", DataType.DATE, true);
48+
kvTemplateMap.put(kvTemplate.getBizType() + kvTemplate.getFieldCode(), kvTemplate);
49+
50+
kvTemplate = new KvTemplate("tpl1", "amount", DataType.DECIMAL, true);
51+
kvTemplateMap.put(kvTemplate.getBizType() + kvTemplate.getFieldCode(), kvTemplate);
52+
53+
kvTemplate = new KvTemplate("tpl1", "ok", DataType.BOOLEAN, true);
54+
kvTemplateMap.put(kvTemplate.getBizType() + kvTemplate.getFieldCode(), kvTemplate);
55+
56+
booleanSet.add("0");
57+
booleanSet.add("1");
58+
booleanSet.add("false");
59+
booleanSet.add("true");
60+
booleanSet.add("yes");
61+
booleanSet.add("no");
62+
booleanSet.add("否");
63+
booleanSet.add("是");
64+
}
65+
66+
public static void main(String[] args) {
67+
List<KvData> list = new ArrayList<>();
68+
list.add(new KvData("123", "tpl1", "loan", "age", "30", 0));
69+
list.add(new KvData("123", "tpl1", "loan", "name", "zixiao", 1));
70+
list.add(new KvData("123", "tpl1", "loan", "birthday","2019-01-02", 2));
71+
list.add(new KvData("123", "tpl1", "loan", "amount", "100.00", 3));
72+
list.add(new KvData("123", "tpl1", "loan", "ok", "是", 4));
73+
74+
list.forEach(kvData -> {
75+
checkField(kvData);
76+
});
77+
}
78+
79+
private static void checkField(KvData kvData){
80+
KvTemplate kvTemplate = kvTemplateMap.get(kvData.getBizType() + kvData.getFieldCode());
81+
String value = kvData.getValue();
82+
DataType dataType = kvTemplate.getDataType();
83+
if(kvTemplate.isRequired()){
84+
Assert.notNull(value, "字段不能为null");
85+
}
86+
if(kvTemplate.getMaxLength() > 0){
87+
Assert.isTrue(value.length() <= kvTemplate.getMaxLength(), "字段长度超过限制");
88+
}
89+
if(dataType.equals(DataType.STRING)){
90+
if(kvTemplate.isNotBlank()){
91+
Assert.hasText(value, "字段不能为空");
92+
}
93+
}else if(dataType.equals(DataType.DATE) || dataType.equals(DataType.DATETIME)){
94+
try {
95+
DateFormatUtils.tryParse(value);
96+
} catch (ParseException e) {
97+
throw new IllegalArgumentException("字段格式错误,"+dataType.name());
98+
}
99+
}else if(dataType.equals(DataType.INTEGER)){
100+
try {
101+
Integer.parseInt(value);
102+
} catch (NumberFormatException e) {
103+
throw new IllegalArgumentException("字段格式错误,"+dataType.name());
104+
}
105+
}else if(dataType.equals(DataType.DECIMAL)){
106+
try {
107+
new BigDecimal(value);
108+
} catch (NumberFormatException e) {
109+
throw new IllegalArgumentException("字段格式错误,"+dataType.name());
110+
}
111+
}else if(dataType.equals(DataType.BOOLEAN)){
112+
if(!booleanSet.contains(value.toLowerCase())){
113+
throw new IllegalArgumentException("字段格式错误,"+dataType.name());
114+
}
115+
}
116+
}
117+
}

0 commit comments

Comments
 (0)