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过滤)
*
*
角色映射规则:
*
@@ -672,10 +679,11 @@ public class ErfFlowEngineServiceImpl implements ErfFlowEngineService {
*
*
* @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();
}
}