From 6811e3ea01ad6099676619f980017c2f4d0791b0 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Fri, 31 Jul 2026 14:07:47 +0800 Subject: [PATCH] =?UTF-8?q?yxk-20260731=20=E6=94=B9=E5=96=84=E6=8F=90?= =?UTF-8?q?=E6=A1=88=20=E6=96=B0=E5=A2=9E=E6=8F=90=E6=A1=88=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E6=A1=88=E9=83=A8=E9=97=A8=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E9=80=89=E4=B8=AD=E5=BD=93=E5=89=8D=E7=99=BB=E5=BD=95=E9=83=A8?= =?UTF-8?q?=E9=97=A8=EF=BC=8C=E7=94=A8=E6=88=B7=E5=8F=AF=E6=94=B9=E9=80=89?= =?UTF-8?q?=E6=9C=AC=E4=BA=BA=E6=89=80=E5=B1=9E=E7=9A=84=E6=9C=89=E6=95=88?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E9=83=A8=E9=97=A8=E3=80=82=E5=80=99=E9=80=89?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=E4=B8=A5=E6=A0=BC=E9=99=90=E5=AE=9A=E4=B8=BA?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=85=B3=E8=81=94=E9=83=A8=E9=97=A8=E4=B8=AD?= =?UTF-8?q?=20org=5Ftype=3D'2'=20=E4=B8=94=20org=5Fcategory=3D'2'=20?= =?UTF-8?q?=E7=9A=84=E8=AE=B0=E5=BD=95=EF=BC=8C=E6=8E=92=E9=99=A4=E5=B2=97?= =?UTF-8?q?=E4=BD=8D=E3=80=81=E7=A7=91=E5=AE=A4=E5=8F=8A=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E8=8A=82=E7=82=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImprovementProposalController.java | 28 ++++++--- .../dto/ImprovementProposalDepartmentDTO.java | 24 ++++++++ .../service/IImprovementProposalService.java | 12 +++- .../impl/ImprovementProposalServiceImpl.java | 57 +++++++++++++++++-- 4 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/dto/ImprovementProposalDepartmentDTO.java diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/controller/ImprovementProposalController.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/controller/ImprovementProposalController.java index 09f7dbd..7541d3f 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/controller/ImprovementProposalController.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/controller/ImprovementProposalController.java @@ -30,6 +30,7 @@ import org.jeecg.modules.improvementproposal.entity.ImprovementProposal; import org.jeecg.modules.improvementproposal.dto.ImprovementDeptScoreBpmDTO; import org.jeecg.modules.improvementproposal.dto.ImprovementInstituteVoteCandidateDTO; import org.jeecg.modules.improvementproposal.dto.ImprovementProposalBpmActionDTO; +import org.jeecg.modules.improvementproposal.dto.ImprovementProposalDepartmentDTO; import org.jeecg.modules.improvementproposal.vo.ImprovementProposalPage; import org.jeecg.modules.improvementproposal.service.IImprovementProposalService; import org.jeecg.modules.improvementproposal.service.IImprovementDeptScoreService; @@ -105,13 +106,26 @@ public class ImprovementProposalController { ImprovementProposal improvementProposal = new ImprovementProposal(); BeanUtils.copyProperties(improvementProposalPage, improvementProposal); improvementProposal.setBpmStatus("1"); - // 新增申请在保存事务内分配年度流水号,避免前端预取号产生并发重复。 - improvementProposalService.createNewProposal(improvementProposal); - // 附件必须使用已落库的主表 ID 关联,不能使用响应成功文案。 - Map result = new HashMap<>(2); - result.put("id", improvementProposal.getId()); - result.put("proposalNo", improvementProposal.getProposalNo()); - return Result.OK("添加成功!", result); + try { + // 新增申请在保存事务内分配年度流水号,避免前端预取号产生并发重复。 + improvementProposalService.createNewProposal(improvementProposal, currentUser()); + // 附件必须使用已落库的主表 ID 关联,不能使用响应成功文案。 + Map result = new HashMap<>(2); + result.put("id", improvementProposal.getId()); + result.put("proposalNo", improvementProposal.getProposalNo()); + return Result.OK("添加成功!", result); + } catch (IllegalStateException e) { + return Result.error(e.getMessage()); + } + } + + /** + * 获取当前登录用户可作为改善提案归属的业务部门。 + */ + @GetMapping(value = "/myProposalDepartments") + @RequiresPermissions("improvementproposal:improvement_proposal:add") + public Result> getMyProposalDepartments() { + return Result.OK(improvementProposalService.getMyProposalDepartments(currentUser())); } /** diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/dto/ImprovementProposalDepartmentDTO.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/dto/ImprovementProposalDepartmentDTO.java new file mode 100644 index 0000000..9117aee --- /dev/null +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/dto/ImprovementProposalDepartmentDTO.java @@ -0,0 +1,24 @@ +package org.jeecg.modules.improvementproposal.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +/** + * 当前登录用户可作为改善提案归属的业务部门。 + */ +@Data +@Schema(description = "改善提案可选业务部门") +public class ImprovementProposalDepartmentDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(description = "部门ID") + private String id; + + @Schema(description = "部门名称") + private String departName; + + @Schema(description = "部门编码") + private String orgCode; +} diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/IImprovementProposalService.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/IImprovementProposalService.java index 8693808..6eb58b4 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/IImprovementProposalService.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/IImprovementProposalService.java @@ -6,6 +6,7 @@ import org.jeecg.modules.improvementproposal.entity.ImprovementProposal; import org.jeecg.modules.improvementproposal.dto.ImprovementDeptScoreBpmDTO; import org.jeecg.modules.improvementproposal.dto.ImprovementInstituteVoteCandidateDTO; import org.jeecg.modules.improvementproposal.dto.ImprovementProposalBpmActionDTO; +import org.jeecg.modules.improvementproposal.dto.ImprovementProposalDepartmentDTO; import org.jeecg.common.system.vo.LoginUser; import com.baomidou.mybatisplus.extension.service.IService; import javax.servlet.http.HttpServletRequest; @@ -43,8 +44,17 @@ public interface IImprovementProposalService extends IService getMyProposalDepartments(LoginUser loginUser); /** * 修改一对多 diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/impl/ImprovementProposalServiceImpl.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/impl/ImprovementProposalServiceImpl.java index d8c409f..c0ff581 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/impl/ImprovementProposalServiceImpl.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/impl/ImprovementProposalServiceImpl.java @@ -6,6 +6,7 @@ import org.jeecg.modules.improvementproposal.entity.ImprovementInstituteVote; import org.jeecg.modules.improvementproposal.dto.ImprovementDeptScoreBpmDTO; import org.jeecg.modules.improvementproposal.dto.ImprovementInstituteVoteCandidateDTO; import org.jeecg.modules.improvementproposal.dto.ImprovementProposalBpmActionDTO; +import org.jeecg.modules.improvementproposal.dto.ImprovementProposalDepartmentDTO; import org.jeecg.modules.improvementproposal.mapper.ImprovementDeptScoreMapper; import org.jeecg.modules.improvementproposal.mapper.ImprovementInstituteVoteMapper; import org.jeecg.modules.improvementproposal.mapper.ImprovementProposalMapper; @@ -25,6 +26,7 @@ import java.math.RoundingMode; import java.util.HashMap; import java.util.List; import java.util.Collection; +import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Map; @@ -33,7 +35,9 @@ import org.flowable.engine.HistoryService; import org.flowable.engine.TaskService; import org.flowable.task.api.Task; import org.jeecg.modules.system.entity.SysRole; +import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.service.ISysRoleService; +import org.jeecg.modules.system.service.ISysUserDepartService; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -86,6 +90,8 @@ public class ImprovementProposalServiceImpl extends ServiceImpl getMyProposalDepartments(LoginUser loginUser) { + if (loginUser == null || oConvertUtils.isEmpty(loginUser.getId())) { + return new ArrayList<>(); + } + return getAvailableProposalDepartments(loginUser.getId()); + } + + /** + * 只允许用户所属的有效业务部门作为提案归属,岗位、科室及逻辑删除部门均不可选择。 + */ + private List getAvailableProposalDepartments(String userId) { + List departments = new ArrayList<>(); + for (SysDepart depart : sysUserDepartService.getOrderedDepartListById(userId)) { + if (!"2".equals(depart.getOrgType()) || !"2".equals(depart.getOrgCategory()) || !NORMAL_DEL_FLAG.equals(depart.getDelFlag())) { + continue; + } + ImprovementProposalDepartmentDTO department = new ImprovementProposalDepartmentDTO(); + department.setId(depart.getId()); + department.setDepartName(depart.getDepartName()); + department.setOrgCode(depart.getOrgCode()); + departments.add(department); + } + return departments; + } + + /** + * 前端只能提交部门 ID;部门名称必须由服务端依据当前用户的有效部门重新回填。 + */ + private void fillAndValidateProposalDepartment(ImprovementProposal improvementProposal, LoginUser loginUser) { + if (loginUser == null || oConvertUtils.isEmpty(loginUser.getId())) { + throw new IllegalStateException("未获取到当前登录用户,无法保存提案"); + } + if (oConvertUtils.isEmpty(improvementProposal.getProposalDeptId())) { + throw new IllegalStateException("请选择提案部门"); + } + for (ImprovementProposalDepartmentDTO department : getAvailableProposalDepartments(loginUser.getId())) { + if (improvementProposal.getProposalDeptId().equals(department.getId())) { + improvementProposal.setProposalDeptName(department.getDepartName()); + return; + } + } + throw new IllegalStateException("所选提案部门无权限或不是有效业务部门"); + } + private int getProposalYear(Date proposalDate) { Calendar calendar = Calendar.getInstance(); calendar.setTime(proposalDate == null ? new Date() : proposalDate);