Merge pull request #9460 from ulleo/dev

feat(X-Pack): 数据填报批量上传数据增加时间范围的校验
This commit is contained in:
ulleo 2024-04-29 18:23:48 +08:00 committed by GitHub
commit 2cb7b0dbc6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 37 additions and 2 deletions

View File

@ -657,13 +657,18 @@ public class DataFillDataService {
}.getType()); }.getType());
List<ExtTableField> fields = new ArrayList<>(); List<ExtTableField> fields = new ArrayList<>();
Map<String, String> dateRangeNameMap = new HashMap<>();
for (ExtTableField field : formFields) { for (ExtTableField field : formFields) {
if (StringUtils.equalsIgnoreCase(field.getType(), "dateRange")) { if (StringUtils.equalsIgnoreCase(field.getType(), "dateRange")) {
dateRangeNameMap.put(field.getId(), field.getSettings().getName());
ExtTableField start = gson.fromJson(gson.toJson(field), ExtTableField.class); ExtTableField start = gson.fromJson(gson.toJson(field), ExtTableField.class);
start.getSettings().getMapping().setColumnName(start.getSettings().getMapping().getColumnName1()); start.getSettings().getMapping().setColumnName(start.getSettings().getMapping().getColumnName1());
start.getSettings().setName(start.getSettings().getName() + "(开始)");
fields.add(start); fields.add(start);
ExtTableField end = gson.fromJson(gson.toJson(field), ExtTableField.class); ExtTableField end = gson.fromJson(gson.toJson(field), ExtTableField.class);
end.getSettings().setName(end.getSettings().getName() + "(结束)");
end.getSettings().getMapping().setColumnName(end.getSettings().getMapping().getColumnName2()); end.getSettings().getMapping().setColumnName(end.getSettings().getMapping().getColumnName2());
fields.add(end); fields.add(end);
} else { } else {
@ -686,6 +691,15 @@ public class DataFillDataService {
List<RowDataDatum> dataList = new ArrayList<>(); List<RowDataDatum> dataList = new ArrayList<>();
for (List<String> excelDatum : excelData) { for (List<String> excelDatum : excelData) {
Map<String, Object> rowData = new HashMap<>(); Map<String, Object> rowData = new HashMap<>();
Map<String, List<Long>> dateRangeCheckMap = new HashMap<>();
for (String key : dateRangeNameMap.keySet()) {
//初始化
List<Long> list = new ArrayList<>();
list.add(null);
list.add(null);
dateRangeCheckMap.put(key, list);
}
for (int i = 0; i < fields.size(); i++) { for (int i = 0; i < fields.size(); i++) {
ExtTableField field = fields.get(i); ExtTableField field = fields.get(i);
@ -718,6 +732,14 @@ public class DataFillDataService {
if (time != null && time < 0) { if (time != null && time < 0) {
throw new Exception("时间不能小于1970/01/01"); throw new Exception("时间不能小于1970/01/01");
} }
//检测dateRange下开始要小于结束且必须两个都有或都没有
if (StringUtils.equalsIgnoreCase(field.getType(), "dateRange")) {
if (StringUtils.equals(field.getSettings().getMapping().getColumnName(), field.getSettings().getMapping().getColumnName1())) {
dateRangeCheckMap.get(field.getId()).set(0, time);
} else if (StringUtils.equals(field.getSettings().getMapping().getColumnName(), field.getSettings().getMapping().getColumnName2())) {
dateRangeCheckMap.get(field.getId()).set(1, time);
}
}
rowData.put(field.getSettings().getMapping().getColumnName(), time); rowData.put(field.getSettings().getMapping().getColumnName(), time);
break; break;
default: default:
@ -792,6 +814,19 @@ public class DataFillDataService {
} }
} }
//判断时间范围的开始结束是否符合要求
dateRangeCheckMap.forEach((key, list) -> {
if (list.get(0) == null && list.get(1) != null) {
DataEaseException.throwException("[" + dateRangeNameMap.get(key) + "(开始/结束)] 不能只有一个为空");
} else if (list.get(0) != null && list.get(1) == null) {
DataEaseException.throwException("[" + dateRangeNameMap.get(key) + "(结束/结束)] 不能只有一个为空");
} else if (list.get(0) != null && list.get(1) != null) {
if (list.get(0) > list.get(1)) {
DataEaseException.throwException("[" + dateRangeNameMap.get(key) + "(结束)] 不能早于 [" + dateRangeNameMap.get(key) + "(开始)]");
}
}
});
if (rowData.isEmpty()) { if (rowData.isEmpty()) {
continue; continue;
} }

View File

@ -383,8 +383,8 @@ public class DataFillService {
String name = formField.getSettings().getName(); String name = formField.getSettings().getName();
if (StringUtils.equalsIgnoreCase(formField.getType(), "dateRange")) { if (StringUtils.equalsIgnoreCase(formField.getType(), "dateRange")) {
String name1 = formField.getSettings().getName() + "(开始时间) "; String name1 = formField.getSettings().getName() + "(开始) ";
String name2 = formField.getSettings().getName() + "(结束时间) "; String name2 = formField.getSettings().getName() + "(结束) ";
List<String> head1 = List.of(name1); List<String> head1 = List.of(name1);
List<String> head2 = List.of(name2); List<String> head2 = List.of(name2);