diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java index 62527e8e..dae4c7bf 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java @@ -155,7 +155,13 @@ public interface IFlowTaskService { * @param processInstanceId */ public FlowTaskCompleteVO updateNowTaskAssignee(String processInstanceId, String processDefinitionId,String deptid); - + /** + * 获取候选用户或者审批组的用户信息集合 + * @param userTask 当前审批节点 + * @param startUserId 流程发起人 + * @return + */ + public List getAssignee(UserTask userTask,String startUserId); /** * 查看当前执行人列表 * diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java index 1c6ba1d6..b2ace869 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java @@ -94,8 +94,9 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); // 会签节点 if (Objects.nonNull(multiInstance)) { - if(null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1){ - variables.put("persons",userTask.getCandidateUsers()); + List loginnames = flowTaskService.getAssignee(userTask,userName); + if(null != loginnames && !loginnames.isEmpty()){ + variables.put("persons",loginnames); } } } @@ -179,8 +180,9 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); // 会签节点 if (Objects.nonNull(multiInstance)) { - if(null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1){ - variables.put("persons",userTask.getCandidateUsers()); + List loginnames = flowTaskService.getAssignee(userTask,userName); + if(null != loginnames && !loginnames.isEmpty()){ + variables.put("persons",loginnames); } } } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java index 269db4c3..d6cc2206 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java @@ -31,6 +31,7 @@ import cn.jyjz.xiaoyao.common.base.vo.UserToken; import cn.jyjz.xiaoyao.oa.from.dataobject.Category; import cn.jyjz.xiaoyao.oa.from.dataobject.Flowablecc; +import cn.jyjz.xiaoyao.oa.from.dataobject.Userdistionary; import cn.jyjz.xiaoyao.oa.from.service.*; import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo; @@ -116,7 +117,8 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask @Resource private IOcrMsgService ocrMsgService; - + @Resource + private UserdistionaryService userdistionaryService; @Override public void myTodoTaskList(PageUtils vo, HttpServletRequest request) { @@ -564,8 +566,9 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); // 会签节点 if (Objects.nonNull(multiInstance)) { - if(null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1){ - variables.put("persons",userTask.getCandidateUsers()); + List loginnames = this.getAssignee(userTask,model.getCreateuser()); + if(null != loginnames && !loginnames.isEmpty()){ + variables.put("persons",loginnames); } } } @@ -776,7 +779,48 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask return activeActivityIds; } - + + /** + * 获取候选用户或者审批组的用户信息集合 + * @param userTask 当前审批节点 + * @param loginname 流程发起人 + * @return + */ + public List getAssignee(UserTask userTask,String loginname){ + if(null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1){ + //获取候选用户集合 + List loginnames = userTask.getCandidateUsers(); + //顺序设置审批用户 + return loginnames; + }else { + //得到候选组 + List candidateGroups = userTask.getCandidateGroups(); + if(null != candidateGroups && !candidateGroups.isEmpty()){ + + + List listusers = new ArrayList<>(); + for(String groupid:candidateGroups){ + + + //排除不在同一个公司的人员 + List userdistionaryList = userdistionaryService.selectListByCandidateid(groupid,loginname); + + List listuserid = userdistionaryList.stream().map(Userdistionary::getUserid).collect(Collectors.toList()); + if(null!= listuserid && !listuserid.isEmpty()){ + listusers.addAll(this.userService.selectUserById(listuserid)); + } + + } + + if(null != listusers && !listusers.isEmpty()){ + List loginnames = listusers.stream().map(User::getLoginname).collect(Collectors.toList()); + + return loginnames; + } + } + } + return null; + } /** * 设置当前审批节点的审批人 * 目前只多候选组和多个候选人起作用 @@ -792,40 +836,83 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask //记录审批人信息 StringBuffer assignee = new StringBuffer(); + int taskIndex = 0; for (Task task : taskList) { //传节点定义key获取当前节点 FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey()); if (flowElement instanceof UserTask && StringUtils.isBlank(task.getAssignee())) { UserTask userTask = (UserTask) flowElement; - - //如果审批不存在,需要在候选组中查询 - if (StringUtils.isBlank(userTask.getAssignee())) { - //得到候选人 - List candidateUsers = userTask.getCandidateUsers(); - if (null != candidateUsers && !candidateUsers.isEmpty()) { - Random rand = new Random(); - taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size()))); + + MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); + // 会签节点 + if (Objects.nonNull(multiInstance)) { + if(null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1){ + //获取候选用户集合 + List loginnames = userTask.getCandidateUsers(); + //顺序设置审批用户 + taskService.setAssignee(task.getId(), loginnames.get(taskIndex)); + }else { + //得到候选组 + List candidateGroups = userTask.getCandidateGroups(); + if(null != candidateGroups && !candidateGroups.isEmpty()){ + flowTaskCompleteVO = new FlowTaskCompleteVO(); + flowTaskCompleteVO.setTaskId(task.getId()); + + List listusers = new ArrayList<>(); + for(String groupid:candidateGroups){ + //获取发起人员信息 + HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(processInstanceId) + .singleResult(); + //发起人员登录账号 + String startUserId = hi.getStartUserId(); + + //排除不在同一个公司的人员 + List userdistionaryList = userdistionaryService.selectListByCandidateid(groupid,startUserId); + + List listuserid = userdistionaryList.stream().map(Userdistionary::getUserid).collect(Collectors.toList()); + listusers.addAll(this.userService.selectUserById(listuserid)); + } + + if(null != listusers && !listusers.isEmpty()){ + List loginnames = listusers.stream().map(User::getLoginname).collect(Collectors.toList()); + + //顺序设置审批用户 + taskService.setAssignee(task.getId(), loginnames.get(taskIndex)); + } + } } - - //得到候选组 - List candidateGroups = userTask.getCandidateGroups(); - if (null != candidateGroups && !candidateGroups.isEmpty()) { - String loginuser = null; - for (String groupid : candidateGroups) { - //获取发起人员信息 - HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(processInstanceId) - .singleResult(); - //发起人员登录账号 - String startUserId = hi.getStartUserId(); - //通过候选组主键,查询审批人员信息,并自动拾取 - loginuser = candidateuserService.getClaimUser(startUserId, groupid, deptid); - if (StringUtils.isNotBlank(loginuser)) { - taskService.claim(task.getId(), loginuser); + taskIndex++; + }else{ + //如果审批不存在,需要在候选组中查询 + if (StringUtils.isBlank(userTask.getAssignee())) { + //得到候选人 + List candidateUsers = userTask.getCandidateUsers(); + if (null != candidateUsers && !candidateUsers.isEmpty()) { + Random rand = new Random(); + taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size()))); + } + + //得到候选组 + List candidateGroups = userTask.getCandidateGroups(); + if (null != candidateGroups && !candidateGroups.isEmpty()) { + String loginuser = null; + for (String groupid : candidateGroups) { + //获取发起人员信息 + HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(processInstanceId) + .singleResult(); + //发起人员登录账号 + String startUserId = hi.getStartUserId(); + //通过候选组主键,查询审批人员信息,并自动拾取 + loginuser = candidateuserService.getClaimUser(startUserId, groupid, deptid); + if (StringUtils.isNotBlank(loginuser)) { + taskService.claim(task.getId(), loginuser); + } } + } - } }