1. 优化 bpm 流程中所有关于用户选择,部门选择的组件

2. 优化 api 调试提示,优化 api 调用因为链接复用导致的链接被拒绝问题
3. 新增字典数据导入功能
This commit is contained in:
chenbowen
2025-11-03 14:20:13 +08:00
parent ddee4da72a
commit b98f605dfd
20 changed files with 580 additions and 11 deletions

View File

@@ -1,11 +1,20 @@
package com.zt.plat.module.system.controller.admin.dict;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.http.HttpUtils;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.framework.excel.core.handler.SelectSheetWriteHandler;
import com.zt.plat.framework.excel.core.util.ExcelUtils;
import com.alibaba.excel.converters.longconverter.LongStringConverter;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.zt.plat.module.system.controller.admin.dict.vo.type.DictImportExcelVO;
import com.zt.plat.module.system.controller.admin.dict.vo.type.DictImportRespVO;
import com.zt.plat.module.system.controller.admin.dict.vo.type.DictTypePageReqVO;
import com.zt.plat.module.system.controller.admin.dict.vo.type.DictTypeRespVO;
import com.zt.plat.module.system.controller.admin.dict.vo.type.DictTypeSaveReqVO;
@@ -14,6 +23,7 @@ import com.zt.plat.module.system.dal.dataobject.dict.DictTypeDO;
import com.zt.plat.module.system.service.dict.DictTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
@@ -21,8 +31,10 @@ import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
@@ -99,4 +111,45 @@ public class DictTypeController {
BeanUtils.toBean(list, DictTypeRespVO.class));
}
@GetMapping("/get-import-template")
@Operation(summary = "获得字典导入模板")
public void importTemplate(HttpServletResponse response) throws IOException {
List<DictImportExcelVO> samples = Arrays.asList(
DictImportExcelVO.builder()
.dictTypeName("性别").dictType("system_user_sex").dictTypeRemark("系统内置示例")
.label("").value("1").sort(1).colorType("primary").dataRemark("示例数据").build(),
DictImportExcelVO.builder()
.dictTypeName("证件类型").dictType("system_id_card_type").dictTypeRemark("自定义示例")
.label("身份证").value("ID").sort(1).dataRemark("示例数据").build()
);
try (ExcelWriter writer = EasyExcel.write(response.getOutputStream())
.autoCloseStream(false)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.registerConverter(new LongStringConverter())
.build()) {
WriteSheet sheet = EasyExcel.writerSheet(0, "字典导入")
.head(DictImportExcelVO.class)
.registerWriteHandler(new SelectSheetWriteHandler(DictImportExcelVO.class))
.build();
writer.write(samples, sheet);
}
response.addHeader("Content-Disposition",
"attachment;filename=" + HttpUtils.encodeUtf8("字典导入模板.xls"));
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
}
@PostMapping("/import")
@Operation(summary = "导入字典")
@Parameters({
@Parameter(name = "file", description = "Excel 文件", required = true)
})
@PreAuthorize("@ss.hasPermission('system:dict:import')")
public CommonResult<DictImportRespVO> importDict(@RequestParam("file") MultipartFile file) throws IOException {
List<DictImportExcelVO> importList = ExcelUtils.read(file, DictImportExcelVO.class, 0);
DictImportRespVO respVO = dictTypeService.importDictList(importList);
return success(respVO);
}
}

View File

@@ -0,0 +1,13 @@
package com.zt.plat.module.system.controller.admin.dict.vo.data;
import com.zt.plat.module.system.controller.admin.dict.vo.type.DictImportExcelVO;
/**
* @deprecated 迁移到单工作表导入模型 {@link DictImportExcelVO}
*/
@Deprecated
public final class DictDataImportExcelVO {
private DictDataImportExcelVO() {
}
}

View File

@@ -0,0 +1,73 @@
package com.zt.plat.module.system.controller.admin.dict.vo.type;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* 字典导入 Excel VO单行同时包含字典类型与字典数据
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = false)
public class DictImportExcelVO {
/**
* 字典名称
*/
@ExcelProperty("字典名称")
private String dictTypeName;
/**
* 字典类型
*/
@ExcelProperty("字典类型")
private String dictType;
/**
* 字典类型备注
*/
@ExcelProperty("类型备注")
private String dictTypeRemark;
/**
* 字典标签
*/
@ExcelProperty("字典标签")
private String label;
/**
* 字典键值
*/
@ExcelProperty("字典键值")
private String value;
/**
* 排序
*/
@ExcelProperty("排序")
private Integer sort;
/**
* 颜色类型
*/
@ExcelProperty("颜色类型")
private String colorType;
/**
* CSS 样式
*/
@ExcelProperty("CSS 样式")
private String cssClass;
/**
* 字典数据备注
*/
@ExcelProperty("数据备注")
private String dataRemark;
}

View File

@@ -0,0 +1,36 @@
package com.zt.plat.module.system.controller.admin.dict.vo.type;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 字典导入响应 VO
*/
@Data
@Builder
@Schema(description = "管理后台 - 字典导入 Response VO")
public class DictImportRespVO {
@Schema(description = "创建成功的字典类型名称列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> createDictTypeNames;
@Schema(description = "更新成功的字典类型名称列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> updateDictTypeNames;
@Schema(description = "导入失败的字典类型集合key 为字典名称value 为失败原因", requiredMode = Schema.RequiredMode.REQUIRED)
private Map<String, String> failureDictTypeNames;
@Schema(description = "创建成功的字典数据标识列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> createDictDataKeys;
@Schema(description = "更新成功的字典数据标识列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> updateDictDataKeys;
@Schema(description = "导入失败的字典数据集合key 为字典数据标识value 为失败原因", requiredMode = Schema.RequiredMode.REQUIRED)
private Map<String, String> failureDictDataKeys;
}

View File

@@ -0,0 +1,11 @@
package com.zt.plat.module.system.controller.admin.dict.vo.type;
/**
* @deprecated 保留空壳文件以兼容历史引用,新的导入请使用 {@link DictImportExcelVO}
*/
@Deprecated
public final class DictTypeImportExcelVO {
private DictTypeImportExcelVO() {
}
}

View File

@@ -3,6 +3,8 @@ package com.zt.plat.module.system.service.dict;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.system.controller.admin.dict.vo.type.DictTypePageReqVO;
import com.zt.plat.module.system.controller.admin.dict.vo.type.DictTypeSaveReqVO;
import com.zt.plat.module.system.controller.admin.dict.vo.type.DictImportExcelVO;
import com.zt.plat.module.system.controller.admin.dict.vo.type.DictImportRespVO;
import com.zt.plat.module.system.dal.dataobject.dict.DictTypeDO;
import java.util.List;
@@ -67,4 +69,12 @@ public interface DictTypeService {
*/
List<DictTypeDO> getDictTypeList();
/**
* 导入字典类型与字典数据(单工作表)
*
* @param importList 导入行列表
* @return 导入结果
*/
DictImportRespVO importDictList(List<DictImportExcelVO> importList);
}