From 1138c70ec9201cf0b6e80fa58d0f5726cab4af67 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Mon, 9 Dec 2024 16:07:50 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E7=A6=85=E9=81=93#907=E3=80=81#910?= =?UTF-8?q?=E3=80=81#912=E3=80=81#913=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=EF=BC=9B2=E3=80=81=E6=A8=A1=E6=9D=BF=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E3=80=81=E5=AF=BC=E5=85=A5=E6=8F=90=E7=A4=BA=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=9B3=E3=80=81=E6=96=B0=E5=A2=9E=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=83=A8=E5=88=86=E6=95=B0=E5=AD=97=E5=85=A5?= =?UTF-8?q?=E5=8F=82=E7=9B=B8=E5=85=B3=E6=A0=A1=E9=AA=8C=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/vo/ReportTemplateSaveReqVO.java | 2 +- .../template/ReportTemplateServiceImpl.java | 3 + .../system/enums/ErrorCodeConstants.java | 2 +- .../controller/admin/dept/DeptController.java | 2 +- .../admin/dept/vo/dept/DeptSaveReqVO.java | 2 + .../admin/dept/vo/post/PostRespVO.java | 7 ++- .../admin/dept/vo/post/PostSaveReqVO.java | 6 +- .../admin/dict/vo/data/DictDataSaveReqVO.java | 6 +- .../admin/organ/vo/organ/OrganSaveReqVO.java | 2 + .../admin/permission/vo/menu/MenuSaveVO.java | 6 +- .../permission/vo/role/RoleSaveReqVO.java | 6 +- .../system/service/dept/DeptService.java | 8 +++ .../system/service/dept/DeptServiceImpl.java | 57 +++++++++++++++++++ 13 files changed, 96 insertions(+), 13 deletions(-) diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateSaveReqVO.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateSaveReqVO.java index 030bcaff0..040973973 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateSaveReqVO.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/controller/admin/template/vo/ReportTemplateSaveReqVO.java @@ -26,7 +26,7 @@ public class ReportTemplateSaveReqVO { private Long id; @Schema(description = "模板名称", example = "生产单模板") - @NotBlank + @NotBlank(message = "模板名称不能为空") @Length(min = 1, max = 30, message = "模板名称长度不能超过30个字符") private String name; diff --git a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java index 006bbc4b5..399e77140 100644 --- a/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java +++ b/cf-module-report/cf-module-report-biz/src/main/java/com/cf/imes/module/report/service/template/ReportTemplateServiceImpl.java @@ -9,6 +9,7 @@ import cn.hutool.core.util.URLUtil; import cn.hutool.http.ContentType; import cn.hutool.http.Header; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import com.bstek.common.exception.ReportDesignException; import com.bstek.designer.bean.PreviewParameters; @@ -524,6 +525,8 @@ public class ReportTemplateServiceImpl implements ReportTemplateService { template.setType(ReportTemplateTypeEnum.CUSTOM); } templateMapper.insert(template); + } catch (JSONException je) { + throw new ReportException("文件解析失败,请检查文件格式和内容"); } catch (ServiceException sex) { throw sex; } catch (Exception ex) { diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index 81e941a28..41b7625e7 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -76,7 +76,7 @@ public class ErrorCodeConstants { public static final ErrorCode POST_NOT_FOUND = new ErrorCode(1_002_005_000, "当前岗位不存在"); public static final ErrorCode POST_NOT_ENABLE = new ErrorCode(1_002_005_001, "岗位({}) 不处于开启状态,不允许选择"); public static final ErrorCode POST_NAME_DUPLICATE = new ErrorCode(1_002_005_002, "已经存在该名字的岗位"); - public static final ErrorCode POST_CODE_DUPLICATE = new ErrorCode(1_002_005_003, "已经存在该标识的岗位"); + public static final ErrorCode POST_CODE_DUPLICATE = new ErrorCode(1_002_005_003, "已经存在该编码的岗位"); // ========== 字典类型 1-002-006-000 ========== public static final ErrorCode DICT_TYPE_NOT_EXISTS = new ErrorCode(1_002_006_001, "当前字典类型不存在"); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/DeptController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/DeptController.java index 3e42f81bd..e9c6e661d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/DeptController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/DeptController.java @@ -72,7 +72,7 @@ public class DeptController { public CommonResult> getSimpleDeptList() { List list = deptService.getDeptList( new DeptListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus())); - return success(BeanUtils.toBean(list, DeptSimpleRespVO.class)); + return success(BeanUtils.toBean(deptService.removeUnowndDept(list), DeptSimpleRespVO.class)); } @GetMapping("/get") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java index 6ff84dffc..e57fcbf9f 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java @@ -1,6 +1,7 @@ package com.cf.imes.module.system.controller.admin.dept.vo.dept; import com.cf.imes.framework.common.validation.Mobile; +import com.cf.imes.framework.common.validation.NumberValid; import com.cf.imes.module.system.validation.common.CommonStatus; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -33,6 +34,7 @@ public class DeptSaveReqVO { @Schema(description = "显示顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @NotNull(message = "显示顺序不能为空") + @NumberValid(name = "显示顺序") private Integer sort; @Schema(description = "负责人", example = "2048") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/post/PostRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/post/PostRespVO.java index 380031e47..0f9453cc5 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/post/PostRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/post/PostRespVO.java @@ -1,5 +1,6 @@ package com.cf.imes.module.system.controller.admin.dept.vo.post; +import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.cf.imes.framework.excel.core.annotations.DictFormat; import com.cf.imes.framework.excel.core.convert.DictConvert; import com.cf.imes.module.system.enums.DictTypeConstants; @@ -15,8 +16,8 @@ import java.time.LocalDateTime; @ExcelIgnoreUnannotated public class PostRespVO { - @Schema(description = "岗位序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("岗位序号") + @Schema(description = "岗位编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("岗位编号") private Long id; @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小土豆") @@ -40,6 +41,8 @@ public class PostRespVO { private String remark; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + @ColumnWidth(20) private LocalDateTime createTime; private Long organId; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java index a4c2b75cb..502c83fab 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java @@ -1,5 +1,6 @@ package com.cf.imes.module.system.controller.admin.dept.vo.post; +import com.cf.imes.framework.common.validation.NumberValid; import com.cf.imes.module.system.validation.common.CommonStatus; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -25,8 +26,9 @@ public class PostSaveReqVO { @Size(max = 64, message = "岗位编码长度不能超过64个字符") private String code; - @Schema(description = "显示顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotNull(message = "显示顺序不能为空") + @Schema(description = "岗位顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "岗位顺序不能为空") + @NumberValid(name = "岗位顺序") private Integer sort; @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java index c9f626a2e..1394150a6 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java @@ -1,5 +1,6 @@ package com.cf.imes.module.system.controller.admin.dict.vo.data; +import com.cf.imes.framework.common.validation.NumberValid; import com.cf.imes.module.system.validation.common.CommonStatus; import com.cf.imes.module.system.validation.dict.CssClassValid; import io.swagger.v3.oas.annotations.media.Schema; @@ -16,8 +17,9 @@ public class DictDataSaveReqVO { @Schema(description = "字典数据编号", example = "1024") private Long id; - @Schema(description = "显示顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotNull(message = "显示顺序不能为空") + @Schema(description = "显示排序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "显示排序不能为空") + @NumberValid(name = "显示排序") private Integer sort; @Schema(description = "字典标签", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganSaveReqVO.java index c78d7cac9..0c970fc4c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganSaveReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganSaveReqVO.java @@ -1,6 +1,7 @@ package com.cf.imes.module.system.controller.admin.organ.vo.organ; import com.cf.imes.framework.common.validation.Mobile; +import com.cf.imes.framework.common.validation.NumberValid; import com.cf.imes.module.system.validation.common.CommonStatus; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -52,6 +53,7 @@ public class OrganSaveReqVO { @Schema(description = "账号数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @NotNull(message = "账号数量不能为空") + @NumberValid(name = "账号数量") private Integer accountCount; // ========== 仅【创建】时,需要传递的字段 ========== diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java index becc20f67..5c46fbaab 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java @@ -1,5 +1,6 @@ package com.cf.imes.module.system.controller.admin.permission.vo.menu; +import com.cf.imes.framework.common.validation.NumberValid; import com.cf.imes.module.system.validation.common.CommonStatus; import com.cf.imes.module.system.validation.menu.MenuTypeValid; import io.swagger.v3.oas.annotations.media.Schema; @@ -31,8 +32,9 @@ public class MenuSaveVO { @MenuTypeValid private Integer type; - @Schema(description = "显示顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotNull(message = "显示顺序不能为空") + @Schema(description = "显示排序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "显示排序不能为空") + @NumberValid(name = "显示排序") private Integer sort; @Schema(description = "父菜单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/role/RoleSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/role/RoleSaveReqVO.java index f560442e4..352e683fe 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/role/RoleSaveReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/role/RoleSaveReqVO.java @@ -1,5 +1,6 @@ package com.cf.imes.module.system.controller.admin.permission.vo.role; +import com.cf.imes.framework.common.validation.NumberValid; import com.cf.imes.module.system.validation.common.CommonStatus; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -25,8 +26,9 @@ public class RoleSaveReqVO { @Schema(description = "角色编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "ADMIN") private String code; - @Schema(description = "显示顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotNull(message = "显示顺序不能为空") + @Schema(description = "角色顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "角色顺序不能为空") + @NumberValid(name = "角色顺序") private Integer sort; @Schema(description = "备注", example = "我是一个角色") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptService.java index e26d5577c..0ef995d63 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptService.java @@ -105,4 +105,12 @@ public interface DeptService { * @param deptId */ void validDept(Long deptId); + + /** + * 移除没有归属(上级)的部门 + * + * @param deptDOS + * @return + */ + List removeUnowndDept(List deptDOS); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptServiceImpl.java index 55cda4932..88ba11fd9 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptServiceImpl.java @@ -30,6 +30,7 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertSet; @@ -319,4 +320,60 @@ public class DeptServiceImpl implements DeptService { } } } + + @Override + public List removeUnowndDept(List deptDOS) { + if (CollUtil.isEmpty(deptDOS)) { + return deptDOS; + } + + Map deptMap = deptDOS.stream() + .collect(Collectors.toMap(DeptDO::getId, deptDO -> deptDO)); + Map topLevelCache = new HashMap<>(); + + Set resultSet = new HashSet<>(); + + for (DeptDO deptDO : deptDOS) { + if (isParentDeptTopLevel(deptDO, deptMap, topLevelCache)) { + resultSet.add(deptDO); + } + } + + return new ArrayList<>(resultSet); + } + + /** + * 列表内可以找到的父级是否最顶级部门(parentId是0) + * + * @param deptDO + * @param deptMap + * @param topLevelCache 缓存已计算过的部门是否为最顶级部门 + * @return + */ + private boolean isParentDeptTopLevel(DeptDO deptDO, Map deptMap, Map topLevelCache) { + Long currentId = deptDO.getId(); + + while (currentId != 0) { + DeptDO currentDept = deptMap.get(currentId); + if (currentDept == null) { + return false; // 如果找不到上级部门,返回false + } + + // 检查缓存 + if (topLevelCache.containsKey(currentDept.getId())) { + return topLevelCache.get(currentDept.getId()); + } + + if (currentDept.getParentId() == 0) { + topLevelCache.put(currentDept.getId(), true); + return true; // 找到最顶级部门且parentId为0,返回true + } + + // 继续找上级 + currentId = currentDept.getParentId(); + } + + topLevelCache.put(deptDO.getId(), false); + return false; // 默认返回false + } }