|
|
@ -4,6 +4,7 @@ package com.xjs.activiti.service.impl;
|
|
|
|
|
|
|
|
|
|
|
|
import com.github.pagehelper.Page;
|
|
|
|
import com.github.pagehelper.Page;
|
|
|
|
import com.ruoyi.common.core.web.page.PageDomain;
|
|
|
|
import com.ruoyi.common.core.web.page.PageDomain;
|
|
|
|
|
|
|
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
|
|
|
import com.xjs.activiti.domain.ActWorkflowFormData;
|
|
|
|
import com.xjs.activiti.domain.ActWorkflowFormData;
|
|
|
|
import com.xjs.activiti.domain.dto.ActTaskDTO;
|
|
|
|
import com.xjs.activiti.domain.dto.ActTaskDTO;
|
|
|
|
import com.xjs.activiti.domain.dto.ActWorkflowFormDataDTO;
|
|
|
|
import com.xjs.activiti.domain.dto.ActWorkflowFormDataDTO;
|
|
|
@ -13,19 +14,21 @@ import org.activiti.api.runtime.shared.query.Pageable;
|
|
|
|
import org.activiti.api.task.model.Task;
|
|
|
|
import org.activiti.api.task.model.Task;
|
|
|
|
import org.activiti.api.task.model.builders.TaskPayloadBuilder;
|
|
|
|
import org.activiti.api.task.model.builders.TaskPayloadBuilder;
|
|
|
|
import org.activiti.api.task.runtime.TaskRuntime;
|
|
|
|
import org.activiti.api.task.runtime.TaskRuntime;
|
|
|
|
|
|
|
|
import org.activiti.bpmn.model.BaseElement;
|
|
|
|
import org.activiti.bpmn.model.FormProperty;
|
|
|
|
import org.activiti.bpmn.model.FormProperty;
|
|
|
|
import org.activiti.bpmn.model.UserTask;
|
|
|
|
import org.activiti.bpmn.model.UserTask;
|
|
|
|
import org.activiti.engine.RepositoryService;
|
|
|
|
import org.activiti.engine.RepositoryService;
|
|
|
|
import org.activiti.engine.RuntimeService;
|
|
|
|
import org.activiti.engine.RuntimeService;
|
|
|
|
|
|
|
|
import org.activiti.engine.TaskService;
|
|
|
|
import org.activiti.engine.runtime.ProcessInstance;
|
|
|
|
import org.activiti.engine.runtime.ProcessInstance;
|
|
|
|
|
|
|
|
import org.activiti.engine.task.TaskQuery;
|
|
|
|
|
|
|
|
import org.activiti.runtime.api.model.impl.APITaskConverter;
|
|
|
|
|
|
|
|
import org.activiti.runtime.api.query.impl.PageImpl;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
|
|
import java.text.ParseException;
|
|
|
|
import java.text.ParseException;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -41,6 +44,8 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private RepositoryService repositoryService;
|
|
|
|
private RepositoryService repositoryService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private TaskService taskService;
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private TaskRuntime taskRuntime;
|
|
|
|
private TaskRuntime taskRuntime;
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
@ -48,29 +53,37 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private IActWorkflowFormDataService actWorkflowFormDataService;
|
|
|
|
private IActWorkflowFormDataService actWorkflowFormDataService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private APITaskConverter taskConverter;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public Page<ActTaskDTO> selectProcessDefinitionList(PageDomain pageDomain) {
|
|
|
|
public Page<ActTaskDTO> selectProcessDefinitionList(PageDomain pageDomain) {
|
|
|
|
Page<ActTaskDTO> list = new Page<ActTaskDTO>();
|
|
|
|
Page<ActTaskDTO> list = new Page<ActTaskDTO>();
|
|
|
|
org.activiti.api.runtime.shared.query.Page<Task> pageTasks = taskRuntime.tasks(Pageable.of((pageDomain.getPageNum() - 1) * pageDomain.getPageSize(), pageDomain.getPageSize()));
|
|
|
|
|
|
|
|
List<Task> tasks = pageTasks.getContent();
|
|
|
|
//org.activiti.api.runtime.shared.query.Page<Task> pageTasks = taskRuntime
|
|
|
|
int totalItems = pageTasks.getTotalItems();
|
|
|
|
// .tasks(Pageable.of((pageDomain.getPageNum() - 1) * pageDomain.getPageSize(), pageDomain.getPageSize()));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
org.activiti.api.runtime.shared.query.Page<Task> taskQuery = this.createTaskQuery(pageDomain);
|
|
|
|
|
|
|
|
List<Task> tasks = taskQuery.getContent();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int totalItems = taskQuery.getTotalItems();
|
|
|
|
list.setTotal(totalItems);
|
|
|
|
list.setTotal(totalItems);
|
|
|
|
if (totalItems != 0) {
|
|
|
|
if (totalItems != 0) {
|
|
|
|
Set<String> processInstanceIdIds = tasks.parallelStream().map(t -> t.getProcessInstanceId()).collect(Collectors.toSet());
|
|
|
|
Set<String> processInstanceIdIds = tasks.parallelStream().map(Task::getProcessInstanceId).collect(Collectors.toSet());
|
|
|
|
List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery().processInstanceIds(processInstanceIdIds).list();
|
|
|
|
List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery().processInstanceIds(processInstanceIdIds).list();
|
|
|
|
List<ActTaskDTO> actTaskDTOS = tasks.stream()
|
|
|
|
List<ActTaskDTO> actTaskDTOS = tasks.stream().map(t -> new ActTaskDTO(t, processInstanceList.parallelStream().filter(pi -> t.getProcessInstanceId().equals(pi.getId())).findAny().get())).collect(Collectors.toList());
|
|
|
|
.map(t -> new ActTaskDTO(t, processInstanceList.parallelStream().filter(pi -> t.getProcessInstanceId().equals(pi.getId())).findAny().get()))
|
|
|
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
list.addAll(actTaskDTOS);
|
|
|
|
list.addAll(actTaskDTOS);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return list;
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public List<String> formDataShow(String taskID) {
|
|
|
|
public List<String> formDataShow(String taskID) {
|
|
|
|
Task task = taskRuntime.task(taskID);
|
|
|
|
//Task task = taskRuntime.task(taskID);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
org.activiti.engine.task.Task task = taskService.createTaskQuery().taskId(taskID).singleResult();
|
|
|
|
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------------
|
|
|
|
/* ------------------------------------------------------------------------------
|
|
|
|
FormProperty_0ueitp2--__!!类型--__!!名称--__!!是否参数--__!!默认值
|
|
|
|
FormProperty_0ueitp2--__!!类型--__!!名称--__!!是否参数--__!!默认值
|
|
|
|
例子:
|
|
|
|
例子:
|
|
|
@ -83,24 +96,28 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
//注意!!!!!!!!:表单Key必须要任务编号一模一样,因为参数需要任务key,但是无法获取,只能获取表单key“task.getFormKey()”当做任务key
|
|
|
|
//注意!!!!!!!!:表单Key必须要任务编号一模一样,因为参数需要任务key,但是无法获取,只能获取表单key“task.getFormKey()”当做任务key
|
|
|
|
UserTask userTask = (UserTask) repositoryService.getBpmnModel(task.getProcessDefinitionId())
|
|
|
|
UserTask userTask = (UserTask) repositoryService.getBpmnModel(task.getProcessDefinitionId()).getFlowElement(task.getFormKey());
|
|
|
|
.getFlowElement(task.getFormKey());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (userTask == null) {
|
|
|
|
if (userTask == null) {
|
|
|
|
return null;
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
List<FormProperty> formProperties = userTask.getFormProperties();
|
|
|
|
List<FormProperty> formProperties = userTask.getFormProperties();
|
|
|
|
List<String> collect = formProperties.stream().map(fp -> fp.getId()).collect(Collectors.toList());
|
|
|
|
return formProperties.stream().map(BaseElement::getId).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
|
|
return collect;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public int formDataSave(String taskID, List<ActWorkflowFormDataDTO> awfs) throws ParseException {
|
|
|
|
public int formDataSave(String taskID, List<ActWorkflowFormDataDTO> awfs) throws ParseException {
|
|
|
|
Task task = taskRuntime.task(taskID);
|
|
|
|
//Task task = taskRuntime.task(taskID);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
org.activiti.engine.task.Task task = taskService.createTaskQuery().taskId(taskID).singleResult();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*org.activiti.engine.task.Task task = taskService.createTaskQuery().taskCandidateOrAssigned(authenticatedUserId,
|
|
|
|
|
|
|
|
userGroups).taskId(taskId).singleResult();*/
|
|
|
|
|
|
|
|
|
|
|
|
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
|
|
|
|
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
|
|
|
|
|
|
|
|
|
|
|
|
Boolean hasVariables = false;//没有任何参数
|
|
|
|
boolean hasVariables = false;//没有任何参数
|
|
|
|
HashMap<String, Object> variables = new HashMap<String, Object>();
|
|
|
|
HashMap<String, Object> variables = new HashMap<String, Object>();
|
|
|
|
//前端传来的字符串,拆分成每个控件
|
|
|
|
//前端传来的字符串,拆分成每个控件
|
|
|
|
List<ActWorkflowFormData> acwfds = new ArrayList<>();
|
|
|
|
List<ActWorkflowFormData> acwfds = new ArrayList<>();
|
|
|
@ -118,16 +135,34 @@ public class ActTaskServiceImpl implements IActTaskService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (hasVariables) {
|
|
|
|
if (hasVariables) {
|
|
|
|
//带参数完成任务
|
|
|
|
//带参数完成任务
|
|
|
|
taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskID)
|
|
|
|
taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskID).withVariables(variables).build());
|
|
|
|
.withVariables(variables)
|
|
|
|
|
|
|
|
.build());
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskID)
|
|
|
|
taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskID).build());
|
|
|
|
.build());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//写入数据库
|
|
|
|
//写入数据库
|
|
|
|
return actWorkflowFormDataService.insertActWorkflowFormDatas(acwfds);
|
|
|
|
return actWorkflowFormDataService.insertActWorkflowFormDatas(acwfds);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* task创建查询
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param pageDomain 分页参数
|
|
|
|
|
|
|
|
* @return 分页数据
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private org.activiti.api.runtime.shared.query.Page<Task> createTaskQuery(PageDomain pageDomain) {
|
|
|
|
|
|
|
|
Pageable pageable = Pageable.of((pageDomain.getPageNum() - 1) * pageDomain.getPageSize(), pageDomain.getPageSize());
|
|
|
|
|
|
|
|
String username = SecurityUtils.getUsername();
|
|
|
|
|
|
|
|
List<String> postCode = SecurityUtils.getLoginUser().getSysUser().getPostCode();
|
|
|
|
|
|
|
|
TaskQuery taskQuery = taskService.createTaskQuery()
|
|
|
|
|
|
|
|
.or()
|
|
|
|
|
|
|
|
//待办任务根据 组 查询
|
|
|
|
|
|
|
|
.taskCandidateOrAssigned(username, postCode)
|
|
|
|
|
|
|
|
.taskOwner(username)
|
|
|
|
|
|
|
|
.endOr();
|
|
|
|
|
|
|
|
List<Task> tasks = taskConverter.from(taskQuery.listPage(pageable.getStartIndex(), pageable.getMaxItems()));
|
|
|
|
|
|
|
|
return new PageImpl<>(tasks, Math.toIntExact(taskQuery.count()));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|