From ea43b5830c874f3bcd64fe540e54d9789cc54a33 Mon Sep 17 00:00:00 2001 From: zhuxinru Date: Fri, 10 Apr 2026 10:57:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BA=8B=E4=B8=9A=E9=83=A8=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=B0=E5=A2=9E=E5=AD=A6=E7=A7=91=E5=92=8C=E9=98=B6?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E6=94=AF=E6=8C=81=E5=A4=9A=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1-sql/2026-04-10/sys_dept_user.sql | 2 + .../entity/req/system/DeptQueryReq.java | 3 + .../entity/resp/system/SysDeptUserResp.java | 6 + .../impl/system/SysDeptFeignClientImpl.java | 16 +++ .../inter/system/ISysDeptFeignClient.java | 3 + .../system/controller/SysDeptController.java | 5 + .../sdm/system/model/entity/SysDeptUser.java | 8 ++ .../system/model/req/dept/DeptOperateReq.java | 6 + .../system/service/ISysDeptUserService.java | 2 + .../service/impl/ISysDeptUserServiceImpl.java | 103 ++++++++++++++++-- 10 files changed, 145 insertions(+), 9 deletions(-) create mode 100644 1-sql/2026-04-10/sys_dept_user.sql diff --git a/1-sql/2026-04-10/sys_dept_user.sql b/1-sql/2026-04-10/sys_dept_user.sql new file mode 100644 index 00000000..5b59153f --- /dev/null +++ b/1-sql/2026-04-10/sys_dept_user.sql @@ -0,0 +1,2 @@ +ALTER TABLE `sys_dept_user` ADD COLUMN `subject` varchar(255) DEFAULT NULL COMMENT '学科' AFTER `deptName`; +ALTER TABLE `sys_dept_user` ADD COLUMN `stage` varchar(255) DEFAULT NULL COMMENT '阶段' AFTER `subject`; \ No newline at end of file diff --git a/common/src/main/java/com/sdm/common/entity/req/system/DeptQueryReq.java b/common/src/main/java/com/sdm/common/entity/req/system/DeptQueryReq.java index 11dccae7..ea0dcdbe 100644 --- a/common/src/main/java/com/sdm/common/entity/req/system/DeptQueryReq.java +++ b/common/src/main/java/com/sdm/common/entity/req/system/DeptQueryReq.java @@ -10,4 +10,7 @@ public class DeptQueryReq extends BaseReq { @Schema(description = "部门名称") private String deptName; + @Schema(description = "学科") + private String subject; + } diff --git a/common/src/main/java/com/sdm/common/entity/resp/system/SysDeptUserResp.java b/common/src/main/java/com/sdm/common/entity/resp/system/SysDeptUserResp.java index 12d21722..f4c5bece 100644 --- a/common/src/main/java/com/sdm/common/entity/resp/system/SysDeptUserResp.java +++ b/common/src/main/java/com/sdm/common/entity/resp/system/SysDeptUserResp.java @@ -19,6 +19,12 @@ public class SysDeptUserResp { @Schema(description = "部门名称") private String deptName; + @Schema(description = "学科") + private String subject; + + @Schema(description = "阶段") + private String stage; + @Schema(description = "部门负责人用户ID") @JsonFormat(shape = JsonFormat.Shape.STRING) private Long userId; diff --git a/common/src/main/java/com/sdm/common/feign/impl/system/SysDeptFeignClientImpl.java b/common/src/main/java/com/sdm/common/feign/impl/system/SysDeptFeignClientImpl.java index 1f4556a1..6267db10 100644 --- a/common/src/main/java/com/sdm/common/feign/impl/system/SysDeptFeignClientImpl.java +++ b/common/src/main/java/com/sdm/common/feign/impl/system/SysDeptFeignClientImpl.java @@ -38,4 +38,20 @@ public class SysDeptFeignClientImpl implements ISysDeptFeignClient { } return response; } + + @Override + public SdmResponse> queryByDeptAndSubject(DeptQueryReq req) { + SdmResponse> response = null; + try { + response = sysDeptFeignClient.queryByDeptAndSubject(req); + if (response == null || !response.isSuccess()) { + log.error("queryByDeptAndSubject failed response:{}", JSONObject.toJSONString(Optional.ofNullable(response))); + return SdmResponse.failed("根据部门和学科查询负责人失败"); + } + } catch (Exception e) { + log.error("queryByDeptAndSubject error response:{}", JSONObject.toJSONString(Optional.ofNullable(response))); + return SdmResponse.failed("根据部门和学科查询负责人失败"); + } + return response; + } } diff --git a/common/src/main/java/com/sdm/common/feign/inter/system/ISysDeptFeignClient.java b/common/src/main/java/com/sdm/common/feign/inter/system/ISysDeptFeignClient.java index 9cde8baf..efc47c05 100644 --- a/common/src/main/java/com/sdm/common/feign/inter/system/ISysDeptFeignClient.java +++ b/common/src/main/java/com/sdm/common/feign/inter/system/ISysDeptFeignClient.java @@ -17,4 +17,7 @@ public interface ISysDeptFeignClient { @GetMapping("/dept/listDept") SdmResponse>> listDept(@SpringQueryMap DeptQueryReq req); + @GetMapping("/dept/queryByDeptAndSubject") + SdmResponse> queryByDeptAndSubject(@SpringQueryMap DeptQueryReq req); + } diff --git a/system/src/main/java/com/sdm/system/controller/SysDeptController.java b/system/src/main/java/com/sdm/system/controller/SysDeptController.java index 6bdc0377..46601853 100644 --- a/system/src/main/java/com/sdm/system/controller/SysDeptController.java +++ b/system/src/main/java/com/sdm/system/controller/SysDeptController.java @@ -48,5 +48,10 @@ public class SysDeptController implements ISysDeptFeignClient { return deptUserService.listDept(req); } + @Operation(summary = "根据部门和学科查询负责人", description = "根据部门和学科查询负责人") + @GetMapping("/queryByDeptAndSubject") + public SdmResponse> queryByDeptAndSubject(@SpringQueryMap DeptQueryReq req) { + return deptUserService.queryByDeptAndSubject(req); + } } \ No newline at end of file diff --git a/system/src/main/java/com/sdm/system/model/entity/SysDeptUser.java b/system/src/main/java/com/sdm/system/model/entity/SysDeptUser.java index d65434c1..5da786b8 100644 --- a/system/src/main/java/com/sdm/system/model/entity/SysDeptUser.java +++ b/system/src/main/java/com/sdm/system/model/entity/SysDeptUser.java @@ -36,6 +36,14 @@ public class SysDeptUser implements Serializable { @TableField("deptName") private String deptName; + @Schema(description = "学科") + @TableField("subject") + private String subject; + + @Schema(description = "阶段") + @TableField("stage") + private String stage; + @Schema(description = "部门负责人用户ID") @TableField("userId") private Long userId; diff --git a/system/src/main/java/com/sdm/system/model/req/dept/DeptOperateReq.java b/system/src/main/java/com/sdm/system/model/req/dept/DeptOperateReq.java index 898e7555..5817dedb 100644 --- a/system/src/main/java/com/sdm/system/model/req/dept/DeptOperateReq.java +++ b/system/src/main/java/com/sdm/system/model/req/dept/DeptOperateReq.java @@ -15,6 +15,12 @@ public class DeptOperateReq { @Schema(description = "部门ID") private Long deptId; + @Schema(description = "学科") + private String subject; + + @Schema(description = "阶段") + private String stage; + @Schema(description = "主键") private Integer id; diff --git a/system/src/main/java/com/sdm/system/service/ISysDeptUserService.java b/system/src/main/java/com/sdm/system/service/ISysDeptUserService.java index b1ee3fd3..ffb37602 100644 --- a/system/src/main/java/com/sdm/system/service/ISysDeptUserService.java +++ b/system/src/main/java/com/sdm/system/service/ISysDeptUserService.java @@ -20,4 +20,6 @@ public interface ISysDeptUserService extends IService { SdmResponse>> listDept(DeptQueryReq req); + SdmResponse> queryByDeptAndSubject(DeptQueryReq req); + } diff --git a/system/src/main/java/com/sdm/system/service/impl/ISysDeptUserServiceImpl.java b/system/src/main/java/com/sdm/system/service/impl/ISysDeptUserServiceImpl.java index 22f75471..a9ab5897 100644 --- a/system/src/main/java/com/sdm/system/service/impl/ISysDeptUserServiceImpl.java +++ b/system/src/main/java/com/sdm/system/service/impl/ISysDeptUserServiceImpl.java @@ -35,8 +35,18 @@ public class ISysDeptUserServiceImpl extends ServiceImpl sysDeptUsers = this.list(queryWrapper); if (CollectionUtils.isEmpty(sysDeptUsers)) { return SdmResponse.success(new PageDataResp<>()); @@ -96,6 +119,29 @@ public class ISysDeptUserServiceImpl extends ServiceImpl> queryByDeptAndSubject(DeptQueryReq req) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysDeptUser::getTenantId, ThreadLocalContext.getTenantId()); + if (StringUtils.isNotEmpty(req.getDeptName())) { + queryWrapper.like(SysDeptUser::getDeptName, req.getDeptName()); + } + if (StringUtils.isNotEmpty(req.getSubject())) { + queryWrapper.like(SysDeptUser::getSubject, req.getSubject()); + } + List sysDeptUsers = this.list(queryWrapper); + if (CollectionUtils.isEmpty(sysDeptUsers)) { + return SdmResponse.success(new ArrayList<>()); + } + List respList = sysDeptUsers.stream().map(i -> { + SysDeptUserResp resp = new SysDeptUserResp(); + BeanUtils.copyProperties(i, resp); + return resp; + }).toList(); + setUserResp(respList); + return SdmResponse.success(respList); + } + private void setUserResp(List list) { // 提取去重的 userId List userIds = list.stream() @@ -117,4 +163,43 @@ public class ISysDeptUserServiceImpl extends ServiceImpl list = Arrays.stream(str.split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .sorted() + .toList(); + return String.join(",", list); + } + + /** + * 判断部门+学科+阶段组合是否重复 + * @param excludeId 排除的记录ID(编辑时排除自身) + */ + private boolean isDuplicate(String normalizedDeptName, String normalizedSubject, String normalizedStage, Integer excludeId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysDeptUser::getTenantId, ThreadLocalContext.getTenantId()); + if (excludeId != null) { + wrapper.ne(SysDeptUser::getId, excludeId); + } + List existingList = this.list(wrapper); + for (SysDeptUser existing : existingList) { + String existDeptName = normalizeString(existing.getDeptName()); + String existSubject = normalizeString(existing.getSubject()); + String existStage = normalizeString(existing.getStage()); + if (normalizedDeptName.equals(existDeptName) + && normalizedSubject.equals(existSubject) + && normalizedStage.equals(existStage)) { + return true; + } + } + return false; + } }