From cb8d73917c7ea8121f492e5d8f522d0f7748b880 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Fri, 27 Feb 2026 14:23:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(hrm):=20=E6=8A=A5=E9=94=80=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E6=94=AF=E6=8C=81=E5=89=8D=E7=AB=AF=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 tplId 字段用于前端明确选择流程模板 - 实现三步模板选择逻辑:优先使用前端指定模板、支持手动审批模式、兜底使用最新启用模板 - 优化流程启动逻辑,避免手动审批时意外触发模板规则 - 添加构建查询包装器方法的代码格式化调整 --- .../hrm/domain/bo/HrmReimburseReqBo.java | 2 ++ .../impl/HrmReimburseReqServiceImpl.java | 23 ++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmReimburseReqBo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmReimburseReqBo.java index c9a6445..cef827d 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmReimburseReqBo.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/bo/HrmReimburseReqBo.java @@ -37,5 +37,7 @@ public class HrmReimburseReqBo extends BaseEntity { private String accessoryReceiptIds; private String remark; + + private Long tplId; } diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmReimburseReqServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmReimburseReqServiceImpl.java index 48718bc..5d8b60f 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmReimburseReqServiceImpl.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmReimburseReqServiceImpl.java @@ -62,14 +62,30 @@ public class HrmReimburseReqServiceImpl implements IHrmReimburseReqService { HrmReimburseReqVo bean = BeanUtil.toBean(add, HrmReimburseReqVo.class); if (ok && "pending".equalsIgnoreCase(add.getStatus())) { - // 选择启用的最高版本模板(允许无模板:走自选审批人一次性审批) - HrmFlowTemplate tpl = flowTemplateMapper.selectOne(Wrappers.lambdaQuery() + Long startUserId = LoginHelper.getUserId(); + + HrmFlowTemplate tpl = null; + // 1) 优先:前端明确选择了模板(tplId 不为空) + if (bo.getTplId() != null) { + tpl = flowTemplateMapper.selectOne(Wrappers.lambdaQuery() + .eq(HrmFlowTemplate::getTplId, bo.getTplId()) + .eq(HrmFlowTemplate::getBizType, "reimburse") + .eq(HrmFlowTemplate::getEnabled, 1) + .last("limit 1")); + } + + // 2) 手动审批:前端选择了手动审批人时,不允许兜底去找模板,否则会意外走到模板里的规则(例如 dept_leader) + boolean manualMode = bo.getTplId() == null && bo.getManualAssigneeUserId() != null; + + // 3) 兜底:只有在既没有 tplId、也没有手动审批人的情况下,才自动选择最新启用模板 + if (!manualMode && tpl == null) { + tpl = flowTemplateMapper.selectOne(Wrappers.lambdaQuery() .eq(HrmFlowTemplate::getBizType, "reimburse") .eq(HrmFlowTemplate::getEnabled, 1) .orderByDesc(HrmFlowTemplate::getVersion) .last("limit 1")); + } - Long startUserId = LoginHelper.getUserId(); HrmFlowStartBo start = new HrmFlowStartBo(); if (tpl != null) { start.setTplId(tpl.getTplId()); @@ -97,6 +113,7 @@ public class HrmReimburseReqServiceImpl implements IHrmReimburseReqService { return baseMapper.deleteBatchIds(ids) > 0; } + private LambdaQueryWrapper buildQueryWrapper(HrmReimburseReqBo bo) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getBizId() != null, HrmReimburseReq::getBizId, bo.getBizId());