diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index d980f2f..20bf31d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -160,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -171,28 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -269,4 +327,31 @@ return null; } + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + }