From 0501aa327a894ce3c9b039854c38b44cd5fb7e4a Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Thu, 12 Feb 2026 14:11:09 +0800 Subject: [PATCH] =?UTF-8?q?bu=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ErfFlowEngineServiceImpl.java | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/xujie/sys/modules/erf/service/impl/ErfFlowEngineServiceImpl.java b/src/main/java/com/xujie/sys/modules/erf/service/impl/ErfFlowEngineServiceImpl.java index bea01d32..67f76dfd 100644 --- a/src/main/java/com/xujie/sys/modules/erf/service/impl/ErfFlowEngineServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/erf/service/impl/ErfFlowEngineServiceImpl.java @@ -631,26 +631,33 @@ public class ErfFlowEngineServiceImpl implements ErfFlowEngineService { * @return 审批人用户ID,如果是并行节点则返回null */ private Long getAssigneeUserId(String nodeCode, String applyNo) { + // 获取申请单的BU编码 + ErfExpApply apply = erfExpApplyMapper.selectById(applyNo); + if (apply == null) { + throw new XJException("申请单不存在"); + } + String buNo = apply.getBuNo(); + switch (nodeCode) { case "技术经理审批": - // 技术经理:根据创建人角色动态分配 - return getTechManagerByCreator(applyNo); + // 技术经理:根据创建人角色动态分配(按BU过滤) + return getTechManagerByCreator(applyNo, buNo); case "生产和质量经理审批": // 并发审批节点:不分配单一审批人,由moveToNextNode方法创建多个并发节点 return null; case "生产经理审批": - // 生产经理:查询具有"生产经理"角色的用户(驳回重审时使用) - return getUserIdByRoleName("生产经理"); + // 生产经理:查询具有"生产经理"角色的用户(驳回重审时使用,按BU过滤) + return getUserIdByRoleName("生产经理", buNo); case "质量经理审批": - // 质量经理:查询具有"质量经理"角色的用户(驳回重审时使用) - return getUserIdByRoleName("质量经理"); + // 质量经理:查询具有"质量经理"角色的用户(驳回重审时使用,按BU过滤) + return getUserIdByRoleName("质量经理", buNo); case "计划员排产": - // 计划员:查询具有"计划员"角色的用户 - return getUserIdByRoleName("计划员"); + // 计划员:查询具有"计划员"角色的用户(按BU过滤) + return getUserIdByRoleName("计划员", buNo); case "三方确认": // 三方确认:不分配单一审批人,由三方独立确认 @@ -663,7 +670,7 @@ public class ErfFlowEngineServiceImpl implements ErfFlowEngineService { } /** - * 根据创建人角色获取对应的技术经理 + * 根据创建人角色获取对应的技术经理(已按BU过滤) * *

角色映射规则:

* * * @param applyNo 申请单号 + * @param buNo 事业部编码 * @return 技术经理用户ID * @throws XJException 如果找不到对应的技术经理 */ - private Long getTechManagerByCreator(String applyNo) { + private Long getTechManagerByCreator(String applyNo, String buNo) { // 1. 查询申请单创建人ID ErfExpApply apply = erfExpApplyMapper.selectById(applyNo); if (apply == null) { @@ -709,34 +717,37 @@ public class ErfFlowEngineServiceImpl implements ErfFlowEngineService { throw new XJException("未知的工程师角色: " + creatorRoleName); } - // 4. 查询对应的技术经理用户ID - ManagerInfoDto manager = sysUserDao.getFirstManagerByRoleName(managerRoleName); + // 4. 查询对应的技术经理用户ID(根据BU过滤) + ManagerInfoDto manager = sysUserDao.getFirstManagerByRoleNameAndBu(managerRoleName, buNo); if (manager == null) { - throw new XJException(String.format("找不到【%s】角色的用户(应由%s审批),请联系管理员配置", - managerRoleName, managerName)); + throw new XJException(String.format("BU %s 中找不到【%s】角色的用户(应由%s审批),请联系管理员配置", + buNo, managerRoleName, managerName)); } Long managerId = manager.getUserId(); - log.info("分配技术经理: 角色={}, 用户ID={}", managerRoleName, managerId); + log.info("分配技术经理: BU={}, 角色={}, 用户ID={}", buNo, managerRoleName, managerId); return managerId; } /** - * 根据角色名称查询用户ID + * 根据角色名称查询用户ID(已按BU过滤) * * @param roleName 角色名称 + * @param buNo 事业部编码 * @return 用户ID * @throws XJException 如果找不到对应角色的用户 */ - private Long getUserIdByRoleName(String roleName) { - ManagerInfoDto manager = sysUserDao.getFirstManagerByRoleName(roleName); + private Long getUserIdByRoleName(String roleName, String buNo) { + ManagerInfoDto manager = sysUserDao.getFirstManagerByRoleNameAndBu(roleName, buNo); if (manager == null) { - throw new XJException(String.format("找不到【%s】角色的用户,请联系管理员配置", roleName)); + throw new XJException(String.format("BU %s 中找不到【%s】角色的用户,请联系管理员配置", buNo, roleName)); } + log.info("分配审批人: BU={}, 角色={}, 用户ID={}", buNo, roleName, manager.getUserId()); + return manager.getUserId(); } }