修改会签不支持候选组的bug

test_flowableAssgin
admin 1 year ago
parent d5ff40103c
commit a61e6525b0

@ -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<String> getAssignee(UserTask userTask,String startUserId);
/**
*
*

@ -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<String> 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<String> loginnames = flowTaskService.getAssignee(userTask,userName);
if(null != loginnames && !loginnames.isEmpty()){
variables.put("persons",loginnames);
}
}
}

@ -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<String> 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<String> getAssignee(UserTask userTask,String loginname){
if(null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1){
//获取候选用户集合
List<String> loginnames = userTask.getCandidateUsers();
//顺序设置审批用户
return loginnames;
}else {
//得到候选组
List<String> candidateGroups = userTask.getCandidateGroups();
if(null != candidateGroups && !candidateGroups.isEmpty()){
List<User> listusers = new ArrayList<>();
for(String groupid:candidateGroups){
//排除不在同一个公司的人员
List<Userdistionary> userdistionaryList = userdistionaryService.selectListByCandidateid(groupid,loginname);
List<Long> 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<String> 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<String> 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<String> loginnames = userTask.getCandidateUsers();
//顺序设置审批用户
taskService.setAssignee(task.getId(), loginnames.get(taskIndex));
}else {
//得到候选组
List<String> candidateGroups = userTask.getCandidateGroups();
if(null != candidateGroups && !candidateGroups.isEmpty()){
flowTaskCompleteVO = new FlowTaskCompleteVO();
flowTaskCompleteVO.setTaskId(task.getId());
List<User> listusers = new ArrayList<>();
for(String groupid:candidateGroups){
//获取发起人员信息
HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
//发起人员登录账号
String startUserId = hi.getStartUserId();
//排除不在同一个公司的人员
List<Userdistionary> userdistionaryList = userdistionaryService.selectListByCandidateid(groupid,startUserId);
List<Long> listuserid = userdistionaryList.stream().map(Userdistionary::getUserid).collect(Collectors.toList());
listusers.addAll(this.userService.selectUserById(listuserid));
}
if(null != listusers && !listusers.isEmpty()){
List<String> loginnames = listusers.stream().map(User::getLoginname).collect(Collectors.toList());
//顺序设置审批用户
taskService.setAssignee(task.getId(), loginnames.get(taskIndex));
}
}
}
//得到候选组
List<String> 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<String> candidateUsers = userTask.getCandidateUsers();
if (null != candidateUsers && !candidateUsers.isEmpty()) {
Random rand = new Random();
taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size())));
}
//得到候选组
List<String> 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);
}
}
}
}
}

Loading…
Cancel
Save