!65 refactor(bgpartymatter): 合并重复的导入导出接口,通过参数区分会议类型
* refactor(bgpartymatter): 合并重复的导入导出接口,通过参数区分会议类型 * feat(excel): 导入支持收集实体 ID 和注入默认值,新增 BgPartymatter 常量类
This commit is contained in:
+31
-4
@@ -204,6 +204,16 @@ public class JeecgController<T, S extends IService<T>> {
|
||||
* 通过EasyExcel导入数据,基于 @Excel 注解读取列配置
|
||||
*/
|
||||
protected Result<?> importExcelByEasyExcel(HttpServletRequest request, Class<T> clazz) {
|
||||
return importExcelByEasyExcel(request, clazz, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过EasyExcel导入数据,基于 @Excel 注解读取列配置
|
||||
*
|
||||
* @param defaultValues 为每行数据注入的默认字段值(key 为实体属性名),在 saveBatch 前设置,可为 null
|
||||
*/
|
||||
protected Result<?> importExcelByEasyExcel(HttpServletRequest request, Class<T> clazz,
|
||||
Map<String, Object> defaultValues) {
|
||||
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
|
||||
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
|
||||
MultipartFile file = fileMap.values().stream().findFirst().orElse(null);
|
||||
@@ -213,21 +223,38 @@ public class JeecgController<T, S extends IService<T>> {
|
||||
try (InputStream inputStream = file.getInputStream()) {
|
||||
long start = System.currentTimeMillis();
|
||||
List<ExcelAnnotationUtils.ValidationError> errors = new ArrayList<>();
|
||||
List<String> importedIds = new ArrayList<>();
|
||||
int total = ExcelAnnotationUtils.read(
|
||||
inputStream,
|
||||
clazz,
|
||||
batch -> service.saveBatch(batch),
|
||||
batch -> {
|
||||
if (defaultValues != null && !defaultValues.isEmpty()) {
|
||||
for (T item : batch) {
|
||||
for (Map.Entry<String, Object> entry : defaultValues.entrySet()) {
|
||||
try {
|
||||
PropertyUtils.setProperty(item, entry.getKey(), entry.getValue());
|
||||
} catch (Exception e) {
|
||||
log.error("【EasyExcel导入】注入默认值失败, field: {}, value: {}",
|
||||
entry.getKey(), entry.getValue(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
service.saveBatch(batch);
|
||||
},
|
||||
BATCH_NUM,
|
||||
errors::addAll,
|
||||
dictQuery());
|
||||
log.info("【EasyExcel导入】导入完成, 数据行数: {}, 耗时: {}毫秒", total, System.currentTimeMillis() - start);
|
||||
dictQuery(),
|
||||
batch -> batch.forEach(item -> importedIds.add(getId(item))));
|
||||
log.info("【EasyExcel导入】导入完成, 数据行数: {}, 导入ID数: {}, 耗时: {}毫秒",
|
||||
total, importedIds.size(), System.currentTimeMillis() - start);
|
||||
if (!errors.isEmpty()) {
|
||||
for (ExcelAnnotationUtils.ValidationError err : errors) {
|
||||
log.error("【EasyExcel导入】校验失败, 行号: {}, 错误: {}", err.row(), err.messages());
|
||||
}
|
||||
return Result.error("文件导入失败: 存在" + errors.size() + "行数据校验不通过,请修改后重新导入", errors);
|
||||
}
|
||||
return Result.ok("文件导入成功!数据行数:" + total);
|
||||
return Result.OK("文件导入成功!数据行数:" + total, importedIds);
|
||||
} catch (DuplicateKeyException e) {
|
||||
log.error("【EasyExcel导入】存在重复数据", e);
|
||||
return Result.error("文件导入失败:有重复数据!");
|
||||
|
||||
Reference in New Issue
Block a user