!65 refactor(bgpartymatter): 合并重复的导入导出接口,通过参数区分会议类型

* refactor(bgpartymatter): 合并重复的导入导出接口,通过参数区分会议类型
* feat(excel): 导入支持收集实体 ID 和注入默认值,新增 BgPartymatter 常量类
This commit is contained in:
wsm
2026-07-02 03:06:21 +00:00
parent e39f39eba9
commit bed7abdf2f
5 changed files with 353 additions and 214 deletions
@@ -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("文件导入失败:有重复数据!");