|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|