fix -- 调整办公管理模块接口
This commit is contained in:
@@ -23,7 +23,6 @@ import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 工作流程定义
|
||||
@@ -122,17 +121,6 @@ public class WfDefinitionController extends BaseController {
|
||||
return R.ok("导入成功");
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@ApiOperation(value = "根据流程定义id启动流程实例")
|
||||
@SaCheckPermission("workflow:definition:start")
|
||||
@PostMapping("/start/{procDefId}")
|
||||
public R<Void> start(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
|
||||
@ApiParam(value = "变量集合,json对象") @RequestBody Map<String, Object> variables) {
|
||||
flowDefinitionService.startProcessInstanceById(procDefId, variables);
|
||||
return R.ok("流程启动成功");
|
||||
|
||||
}
|
||||
|
||||
@ApiOperation(value = "激活或挂起流程定义")
|
||||
@SaCheckPermission("workflow:definition:update")
|
||||
@PutMapping(value = "/updateState")
|
||||
|
||||
@@ -50,8 +50,23 @@ public class WfProcessController extends BaseController {
|
||||
}
|
||||
|
||||
@ApiOperation(value = "我拥有的流程", response = WfTaskVo.class)
|
||||
@GetMapping(value = "/own")
|
||||
@SaCheckPermission("workflow:process:ownList")
|
||||
@GetMapping(value = "/ownList")
|
||||
public TableDataInfo<WfTaskVo> ownProcess(PageQuery pageQuery) {
|
||||
return processService.queryPageOwnProcessList(pageQuery);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取待办列表", response = WfTaskVo.class)
|
||||
@SaCheckPermission("workflow:process:todoList")
|
||||
@GetMapping(value = "/todoList")
|
||||
public TableDataInfo<WfTaskVo> todoProcess(PageQuery pageQuery) {
|
||||
return processService.queryPageTodoProcessList(pageQuery);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取已办列表", response = WfTaskVo.class)
|
||||
@SaCheckPermission("workflow:process:finishedList")
|
||||
@GetMapping(value = "/finishedList")
|
||||
public TableDataInfo<WfTaskVo> finishedProcess(PageQuery pageQuery) {
|
||||
return processService.queryPageFinishedProcessList(pageQuery);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,13 +37,6 @@ public class WfTaskController {
|
||||
|
||||
private final IWfTaskService flowTaskService;
|
||||
|
||||
@Deprecated
|
||||
@ApiOperation(value = "我发起的流程", response = WfTaskVo.class)
|
||||
@GetMapping(value = "/myProcess")
|
||||
public TableDataInfo<WfTaskVo> myProcess(PageQuery pageQuery) {
|
||||
return flowTaskService.myProcess(pageQuery);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "取消申请", response = WfTaskVo.class)
|
||||
@PostMapping(value = "/stopProcess")
|
||||
public R stopProcess(@RequestBody WfTaskBo bo) {
|
||||
@@ -58,6 +51,7 @@ public class WfTaskController {
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@ApiOperation(value = "获取待办列表", response = WfTaskVo.class)
|
||||
@GetMapping(value = "/todoList")
|
||||
public TableDataInfo<WfTaskVo> todoList(PageQuery pageQuery) {
|
||||
@@ -71,13 +65,6 @@ public class WfTaskController {
|
||||
return flowTaskService.finishedList(pageQuery);
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation(value = "流程历史流转记录", response = WfTaskVo.class)
|
||||
@GetMapping(value = "/flowRecord")
|
||||
public R flowRecord(String procInsId, String deployId) {
|
||||
return R.ok(flowTaskService.flowRecord(procInsId, deployId));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取流程变量", response = WfTaskVo.class)
|
||||
@GetMapping(value = "/processVariables/{taskId}")
|
||||
public R processVariables(@ApiParam(value = "流程任务Id") @PathVariable(value = "taskId") String taskId) {
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.ruoyi.workflow.domain.vo.WfDefinitionVo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author KonBAI
|
||||
@@ -48,16 +47,6 @@ public interface IWfDefinitionService {
|
||||
*/
|
||||
String readXml(String definitionId) throws IOException;
|
||||
|
||||
/**
|
||||
* 根据流程定义ID启动流程实例
|
||||
*
|
||||
* @param procDefId
|
||||
* @param variables
|
||||
* @return
|
||||
*/
|
||||
|
||||
void startProcessInstanceById(String procDefId, Map<String, Object> variables);
|
||||
|
||||
|
||||
/**
|
||||
* 激活或挂起流程定义
|
||||
|
||||
@@ -2,9 +2,7 @@ package com.ruoyi.workflow.service;
|
||||
|
||||
import com.ruoyi.workflow.domain.bo.WfTaskBo;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.task.api.Task;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -13,8 +11,6 @@ import java.util.Map;
|
||||
*/
|
||||
public interface IWfInstanceService {
|
||||
|
||||
List<Task> queryListByInstanceId(String instanceId);
|
||||
|
||||
/**
|
||||
* 结束流程实例
|
||||
*
|
||||
|
||||
@@ -40,4 +40,15 @@ public interface IWfProcessService {
|
||||
*/
|
||||
TableDataInfo<WfTaskVo> queryPageOwnProcessList(PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询代办任务列表
|
||||
* @param pageQuery 分页参数
|
||||
*/
|
||||
TableDataInfo<WfTaskVo> queryPageTodoProcessList(PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询已办任务列表
|
||||
* @param pageQuery 分页参数
|
||||
*/
|
||||
TableDataInfo<WfTaskVo> queryPageFinishedProcessList(PageQuery pageQuery);
|
||||
}
|
||||
|
||||
@@ -2,13 +2,12 @@ package com.ruoyi.workflow.service;
|
||||
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.workflow.domain.bo.WfTaskBo;
|
||||
import com.ruoyi.workflow.domain.dto.WfNextDto;
|
||||
import com.ruoyi.workflow.domain.vo.WfTaskVo;
|
||||
import com.ruoyi.workflow.domain.bo.WfTaskBo;
|
||||
import com.ruoyi.workflow.domain.vo.WfViewerVo;
|
||||
import org.flowable.bpmn.model.UserTask;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.task.api.Task;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.List;
|
||||
@@ -86,14 +85,6 @@ public interface IWfTaskService {
|
||||
*/
|
||||
void transferTask(WfTaskBo bo);
|
||||
|
||||
/**
|
||||
* 我发起的流程
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Deprecated
|
||||
TableDataInfo<WfTaskVo> myProcess(PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 取消申请
|
||||
* @param bo
|
||||
@@ -124,23 +115,6 @@ public interface IWfTaskService {
|
||||
*/
|
||||
TableDataInfo<WfTaskVo> finishedList(PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 流程历史流转记录
|
||||
*
|
||||
* @param procInsId 流程实例Id
|
||||
* @return
|
||||
*/
|
||||
@Deprecated
|
||||
Map<String, Object> flowRecord(String procInsId, String deployId);
|
||||
|
||||
/**
|
||||
* 根据任务ID查询挂载的表单信息
|
||||
*
|
||||
* @param taskId 任务Id
|
||||
* @return
|
||||
*/
|
||||
Task getTaskForm(String taskId);
|
||||
|
||||
/**
|
||||
* 获取流程过程图
|
||||
* @param processId
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
package com.ruoyi.workflow.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import com.ruoyi.flowable.common.constant.ProcessConstants;
|
||||
import com.ruoyi.flowable.common.enums.FlowComment;
|
||||
import com.ruoyi.flowable.factory.FlowServiceFactory;
|
||||
import com.ruoyi.workflow.domain.vo.WfDefinitionVo;
|
||||
import com.ruoyi.workflow.domain.vo.WfFormVo;
|
||||
@@ -21,16 +16,17 @@ import org.flowable.engine.repository.Deployment;
|
||||
import org.flowable.engine.repository.DeploymentBuilder;
|
||||
import org.flowable.engine.repository.ProcessDefinition;
|
||||
import org.flowable.engine.repository.ProcessDefinitionQuery;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.image.impl.DefaultProcessDiagramGenerator;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -196,46 +192,6 @@ public class WfDefinitionServiceImpl extends FlowServiceFactory implements IWfDe
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据流程定义ID启动流程实例
|
||||
*
|
||||
* @param procDefId 流程定义Id
|
||||
* @param variables 流程变量
|
||||
* @return
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void startProcessInstanceById(String procDefId, Map<String, Object> variables) {
|
||||
try {
|
||||
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
|
||||
.processDefinitionId(procDefId).singleResult();
|
||||
if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
|
||||
throw new ServiceException("流程已被挂起,请先激活流程");
|
||||
}
|
||||
// variables.put("skip", true);
|
||||
// variables.put(ProcessConstants.FLOWABLE_SKIP_EXPRESSION_ENABLED, true);
|
||||
// 设置流程发起人Id到流程中
|
||||
String userIdStr = LoginHelper.getUserId().toString();
|
||||
identityService.setAuthenticatedUserId(userIdStr);
|
||||
variables.put(ProcessConstants.PROCESS_INITIATOR, userIdStr);
|
||||
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables);
|
||||
// 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题?
|
||||
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
|
||||
if (Objects.nonNull(task)) {
|
||||
if (!StrUtil.equalsAny(task.getAssignee(), userIdStr)) {
|
||||
throw new ServiceException("数据验证失败,该工作流第一个用户任务的指派人并非当前用户,不能执行该操作!");
|
||||
}
|
||||
taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), LoginHelper.getNickName() + "发起流程申请");
|
||||
// taskService.setAssignee(task.getId(), userIdStr);
|
||||
taskService.complete(task.getId(), variables);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new ServiceException("流程启动错误");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 激活或挂起流程定义
|
||||
|
||||
@@ -24,7 +24,6 @@ import org.flowable.common.engine.api.FlowableObjectNotFoundException;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.task.Comment;
|
||||
import org.flowable.identitylink.api.history.HistoricIdentityLink;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.flowable.task.api.history.HistoricTaskInstance;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -46,11 +45,6 @@ public class WfInstanceServiceImpl extends FlowServiceFactory implements IWfInst
|
||||
private final ISysUserService userService;
|
||||
private final ISysRoleService roleService;
|
||||
|
||||
@Override
|
||||
public List<Task> queryListByInstanceId(String instanceId) {
|
||||
return taskService.createTaskQuery().processInstanceId(instanceId).active().list();
|
||||
}
|
||||
|
||||
/**
|
||||
* 结束流程实例
|
||||
*
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
package com.ruoyi.workflow.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.BetweenFormatter;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
@@ -10,6 +14,7 @@ import com.ruoyi.common.utils.DateUtils;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.flowable.common.constant.ProcessConstants;
|
||||
import com.ruoyi.flowable.factory.FlowServiceFactory;
|
||||
import com.ruoyi.system.service.ISysUserService;
|
||||
import com.ruoyi.workflow.domain.vo.WfDefinitionVo;
|
||||
import com.ruoyi.workflow.domain.vo.WfTaskVo;
|
||||
import com.ruoyi.workflow.service.IWfProcessService;
|
||||
@@ -22,7 +27,9 @@ import org.flowable.engine.repository.ProcessDefinition;
|
||||
import org.flowable.engine.repository.ProcessDefinitionQuery;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.flowable.task.api.TaskQuery;
|
||||
import org.flowable.task.api.history.HistoricTaskInstance;
|
||||
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -40,6 +47,7 @@ import java.util.Objects;
|
||||
public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProcessService {
|
||||
|
||||
private final IWfTaskService wfTaskService;
|
||||
private final ISysUserService userService;
|
||||
|
||||
/**
|
||||
* 流程定义列表
|
||||
@@ -185,6 +193,111 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<WfTaskVo> queryPageTodoProcessList(PageQuery pageQuery) {
|
||||
Page<WfTaskVo> page = new Page<>();
|
||||
Long userId = LoginHelper.getUserId();
|
||||
TaskQuery taskQuery = taskService.createTaskQuery()
|
||||
.active()
|
||||
.includeProcessVariables()
|
||||
.taskCandidateOrAssigned(userId.toString())
|
||||
.orderByTaskCreateTime().desc();
|
||||
page.setTotal(taskQuery.count());
|
||||
int offset = pageQuery.getPageSize() * (pageQuery.getPageNum() - 1);
|
||||
List<Task> taskList = taskQuery.listPage(offset, pageQuery.getPageSize());
|
||||
List<WfTaskVo> flowList = new ArrayList<>();
|
||||
for (Task task : taskList) {
|
||||
WfTaskVo flowTask = new WfTaskVo();
|
||||
// 当前流程信息
|
||||
flowTask.setTaskId(task.getId());
|
||||
flowTask.setTaskDefKey(task.getTaskDefinitionKey());
|
||||
flowTask.setCreateTime(task.getCreateTime());
|
||||
flowTask.setProcDefId(task.getProcessDefinitionId());
|
||||
flowTask.setTaskName(task.getName());
|
||||
// 流程定义信息
|
||||
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
|
||||
.processDefinitionId(task.getProcessDefinitionId())
|
||||
.singleResult();
|
||||
flowTask.setDeployId(pd.getDeploymentId());
|
||||
flowTask.setProcDefName(pd.getName());
|
||||
flowTask.setProcDefVersion(pd.getVersion());
|
||||
flowTask.setProcInsId(task.getProcessInstanceId());
|
||||
|
||||
// 流程发起人信息
|
||||
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceId(task.getProcessInstanceId())
|
||||
.singleResult();
|
||||
SysUser startUser = userService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId()));
|
||||
flowTask.setStartUserId(startUser.getNickName());
|
||||
flowTask.setStartUserName(startUser.getNickName());
|
||||
flowTask.setStartDeptName(startUser.getDept().getDeptName());
|
||||
|
||||
// 流程变量
|
||||
flowTask.setProcVars(this.getProcessVariables(task.getId()));
|
||||
|
||||
flowList.add(flowTask);
|
||||
}
|
||||
page.setRecords(flowList);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<WfTaskVo> queryPageFinishedProcessList(PageQuery pageQuery) {
|
||||
Page<WfTaskVo> page = new Page<>();
|
||||
Long userId = LoginHelper.getUserId();
|
||||
HistoricTaskInstanceQuery taskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
|
||||
.includeProcessVariables()
|
||||
.finished()
|
||||
.taskAssignee(userId.toString())
|
||||
.orderByHistoricTaskInstanceEndTime()
|
||||
.desc();
|
||||
int offset = pageQuery.getPageSize() * (pageQuery.getPageNum() - 1);
|
||||
List<HistoricTaskInstance> historicTaskInstanceList = taskInstanceQuery.listPage(offset, pageQuery.getPageSize());
|
||||
List<WfTaskVo> hisTaskList = Lists.newArrayList();
|
||||
for (HistoricTaskInstance histTask : historicTaskInstanceList) {
|
||||
WfTaskVo flowTask = new WfTaskVo();
|
||||
// 当前流程信息
|
||||
flowTask.setTaskId(histTask.getId());
|
||||
// 审批人员信息
|
||||
flowTask.setCreateTime(histTask.getCreateTime());
|
||||
flowTask.setFinishTime(histTask.getEndTime());
|
||||
flowTask.setDuration(DateUtil.formatBetween(histTask.getDurationInMillis(), BetweenFormatter.Level.SECOND));
|
||||
flowTask.setProcDefId(histTask.getProcessDefinitionId());
|
||||
flowTask.setTaskDefKey(histTask.getTaskDefinitionKey());
|
||||
flowTask.setTaskName(histTask.getName());
|
||||
|
||||
// 流程定义信息
|
||||
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
|
||||
.processDefinitionId(histTask.getProcessDefinitionId())
|
||||
.singleResult();
|
||||
flowTask.setDeployId(pd.getDeploymentId());
|
||||
flowTask.setProcDefName(pd.getName());
|
||||
flowTask.setProcDefVersion(pd.getVersion());
|
||||
flowTask.setProcInsId(histTask.getProcessInstanceId());
|
||||
flowTask.setHisProcInsId(histTask.getProcessInstanceId());
|
||||
|
||||
// 流程发起人信息
|
||||
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceId(histTask.getProcessInstanceId())
|
||||
.singleResult();
|
||||
SysUser startUser = userService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId()));
|
||||
flowTask.setStartUserId(startUser.getNickName());
|
||||
flowTask.setStartUserName(startUser.getNickName());
|
||||
flowTask.setStartDeptName(startUser.getDept().getDeptName());
|
||||
|
||||
// 流程变量
|
||||
flowTask.setProcVars(this.getProcessVariables(histTask.getId()));
|
||||
|
||||
hisTaskList.add(flowTask);
|
||||
}
|
||||
page.setTotal(taskInstanceQuery.count());
|
||||
page.setRecords(hisTaskList);
|
||||
// Map<String, Object> result = new HashMap<>();
|
||||
// result.put("result",page);
|
||||
// result.put("finished",true);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 扩展参数构建
|
||||
* @param variables 扩展参数
|
||||
@@ -194,4 +307,23 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
|
||||
identityService.setAuthenticatedUserId(userIdStr);
|
||||
variables.put(ProcessConstants.PROCESS_INITIATOR, userIdStr);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取流程变量
|
||||
*
|
||||
* @param taskId 任务ID
|
||||
* @return 流程变量
|
||||
*/
|
||||
private Map<String, Object> getProcessVariables(String taskId) {
|
||||
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery()
|
||||
.includeProcessVariables()
|
||||
.finished()
|
||||
.taskId(taskId)
|
||||
.singleResult();
|
||||
if (Objects.nonNull(historicTaskInstance)) {
|
||||
return historicTaskInstance.getProcessVariables();
|
||||
}
|
||||
return taskService.getVariables(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import com.ruoyi.common.utils.JsonUtils;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.flowable.common.constant.ProcessConstants;
|
||||
import com.ruoyi.flowable.common.enums.FlowComment;
|
||||
@@ -24,12 +23,9 @@ import com.ruoyi.flowable.flow.FlowableUtils;
|
||||
import com.ruoyi.system.service.ISysRoleService;
|
||||
import com.ruoyi.system.service.ISysUserService;
|
||||
import com.ruoyi.workflow.domain.bo.WfTaskBo;
|
||||
import com.ruoyi.workflow.domain.dto.WfCommentDto;
|
||||
import com.ruoyi.workflow.domain.dto.WfNextDto;
|
||||
import com.ruoyi.workflow.domain.vo.WfFormVo;
|
||||
import com.ruoyi.workflow.domain.vo.WfTaskVo;
|
||||
import com.ruoyi.workflow.domain.vo.WfViewerVo;
|
||||
import com.ruoyi.workflow.service.IWfDeployFormService;
|
||||
import com.ruoyi.workflow.service.IWfTaskService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -43,13 +39,9 @@ import org.flowable.engine.ProcessEngineConfiguration;
|
||||
import org.flowable.engine.history.HistoricActivityInstance;
|
||||
import org.flowable.engine.history.HistoricActivityInstanceQuery;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.history.HistoricProcessInstanceQuery;
|
||||
import org.flowable.engine.repository.Deployment;
|
||||
import org.flowable.engine.repository.ProcessDefinition;
|
||||
import org.flowable.engine.runtime.Execution;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.engine.task.Comment;
|
||||
import org.flowable.identitylink.api.history.HistoricIdentityLink;
|
||||
import org.flowable.image.ProcessDiagramGenerator;
|
||||
import org.flowable.task.api.DelegationState;
|
||||
import org.flowable.task.api.Task;
|
||||
@@ -79,8 +71,6 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ
|
||||
|
||||
private final ISysRoleService sysRoleService;
|
||||
|
||||
private final IWfDeployFormService deployFormService;
|
||||
|
||||
/**
|
||||
* 完成任务
|
||||
*
|
||||
@@ -457,60 +447,6 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ
|
||||
taskService.setAssignee(bo.getTaskId(), bo.getUserId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 我发起的流程
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<WfTaskVo> myProcess(PageQuery pageQuery) {
|
||||
Page<WfTaskVo> page = new Page<>();
|
||||
Long userId = LoginHelper.getUserId();
|
||||
HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery()
|
||||
.startedBy(userId.toString())
|
||||
.orderByProcessInstanceStartTime()
|
||||
.desc();
|
||||
int offset = pageQuery.getPageSize() * (pageQuery.getPageNum() - 1);
|
||||
List<HistoricProcessInstance> historicProcessInstances = historicProcessInstanceQuery
|
||||
.listPage(offset, pageQuery.getPageSize());
|
||||
page.setTotal(historicProcessInstanceQuery.count());
|
||||
List<WfTaskVo> taskVoList = new ArrayList<>();
|
||||
for (HistoricProcessInstance hisIns : historicProcessInstances) {
|
||||
WfTaskVo taskVo = new WfTaskVo();
|
||||
taskVo.setCreateTime(hisIns.getStartTime());
|
||||
taskVo.setFinishTime(hisIns.getEndTime());
|
||||
taskVo.setProcInsId(hisIns.getId());
|
||||
|
||||
// 计算耗时
|
||||
if (Objects.nonNull(hisIns.getEndTime())) {
|
||||
long time = hisIns.getEndTime().getTime() - hisIns.getStartTime().getTime();
|
||||
taskVo.setDuration(getDate(time));
|
||||
} else {
|
||||
long time = System.currentTimeMillis() - hisIns.getStartTime().getTime();
|
||||
taskVo.setDuration(getDate(time));
|
||||
}
|
||||
// 流程部署实例信息
|
||||
Deployment deployment = repositoryService.createDeploymentQuery()
|
||||
.deploymentId(hisIns.getDeploymentId()).singleResult();
|
||||
taskVo.setDeployId(hisIns.getDeploymentId());
|
||||
taskVo.setProcDefId(hisIns.getProcessDefinitionId());
|
||||
taskVo.setProcDefName(hisIns.getProcessDefinitionName());
|
||||
taskVo.setProcDefVersion(hisIns.getProcessDefinitionVersion());
|
||||
taskVo.setCategory(deployment.getCategory());
|
||||
// 当前所处流程 todo: 本地启动放开以下注释
|
||||
// List<Task> taskList = taskService.createTaskQuery().processInstanceId(hisIns.getId()).list();
|
||||
// if (CollectionUtils.isNotEmpty(taskList)) {
|
||||
// flowTask.setTaskId(taskList.get(0).getId());
|
||||
// } else {
|
||||
// List<HistoricTaskInstance> historicTaskInstance = historyService.createHistoricTaskInstanceQuery().processInstanceId(hisIns.getId()).orderByHistoricTaskInstanceEndTime().desc().list();
|
||||
// flowTask.setTaskId(historicTaskInstance.get(0).getId());
|
||||
// }
|
||||
taskVoList.add(taskVo);
|
||||
}
|
||||
page.setRecords(taskVoList);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消申请
|
||||
*
|
||||
@@ -723,97 +659,6 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ
|
||||
return t -> seen.add(keyExtractor.apply(t));
|
||||
}
|
||||
|
||||
/**
|
||||
* 流程历史流转记录
|
||||
*
|
||||
* @param procInsId 流程实例Id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> flowRecord(String procInsId, String deployId) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
if (StringUtils.isNotBlank(procInsId)) {
|
||||
List<HistoricActivityInstance> list = historyService
|
||||
.createHistoricActivityInstanceQuery()
|
||||
.processInstanceId(procInsId)
|
||||
.orderByHistoricActivityInstanceStartTime()
|
||||
.desc().list();
|
||||
List<WfTaskVo> hisFlowList = new ArrayList<>();
|
||||
for (HistoricActivityInstance histIns : list) {
|
||||
if (StringUtils.isNotBlank(histIns.getTaskId())) {
|
||||
WfTaskVo flowTask = new WfTaskVo();
|
||||
flowTask.setProcDefId(histIns.getProcessDefinitionId());
|
||||
flowTask.setTaskId(histIns.getTaskId());
|
||||
flowTask.setTaskName(histIns.getActivityName());
|
||||
flowTask.setCreateTime(histIns.getStartTime());
|
||||
flowTask.setFinishTime(histIns.getEndTime());
|
||||
if (StringUtils.isNotBlank(histIns.getAssignee())) {
|
||||
SysUser sysUser = sysUserService.selectUserById(Long.parseLong(histIns.getAssignee()));
|
||||
flowTask.setAssigneeId(sysUser.getUserId());
|
||||
flowTask.setAssigneeName(sysUser.getNickName());
|
||||
flowTask.setDeptName(sysUser.getDept().getDeptName());
|
||||
}
|
||||
// 展示审批人员
|
||||
List<HistoricIdentityLink> linksForTask = historyService.getHistoricIdentityLinksForTask(histIns.getTaskId());
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
for (HistoricIdentityLink identityLink : linksForTask) {
|
||||
if ("candidate".equals(identityLink.getType())) {
|
||||
if (StringUtils.isNotBlank(identityLink.getUserId())) {
|
||||
SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
|
||||
stringBuilder.append(sysUser.getNickName()).append(",");
|
||||
}
|
||||
if (StringUtils.isNotBlank(identityLink.getGroupId())) {
|
||||
SysRole sysRole = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
|
||||
stringBuilder.append(sysRole.getRoleName()).append(",");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (StringUtils.isNotBlank(stringBuilder)) {
|
||||
flowTask.setCandidate(stringBuilder.substring(0, stringBuilder.length() - 1));
|
||||
}
|
||||
|
||||
flowTask.setDuration(histIns.getDurationInMillis() == null || histIns.getDurationInMillis() == 0 ? null : getDate(histIns.getDurationInMillis()));
|
||||
// 获取意见评论内容
|
||||
List<Comment> commentList = taskService.getProcessInstanceComments(histIns.getProcessInstanceId());
|
||||
commentList.forEach(comment -> {
|
||||
if (histIns.getTaskId().equals(comment.getTaskId())) {
|
||||
flowTask.setComment(WfCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build());
|
||||
}
|
||||
});
|
||||
hisFlowList.add(flowTask);
|
||||
}
|
||||
}
|
||||
map.put("flowList", hisFlowList);
|
||||
// // 查询当前任务是否完成
|
||||
// List<Task> taskList = taskService.createTaskQuery().processInstanceId(procInsId).list();
|
||||
// if (CollectionUtils.isNotEmpty(taskList)) {
|
||||
// map.put("finished", true);
|
||||
// } else {
|
||||
// map.put("finished", false);
|
||||
// }
|
||||
}
|
||||
// 第一次申请获取初始化表单
|
||||
if (StringUtils.isNotBlank(deployId)) {
|
||||
WfFormVo formVo = deployFormService.selectDeployFormByDeployId(deployId);
|
||||
if (Objects.isNull(formVo)) {
|
||||
throw new ServiceException("请先配置流程表单");
|
||||
}
|
||||
map.put("formData", JsonUtils.parseObject(formVo.getContent(), Map.class));
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据任务ID查询挂载的表单信息
|
||||
*
|
||||
* @param taskId 任务Id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Task getTaskForm(String taskId) {
|
||||
return taskService.createTaskQuery().taskId(taskId).singleResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取流程过程图
|
||||
*
|
||||
|
||||
@@ -1,23 +1,5 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询已办任务列表
|
||||
export function finishedList(query) {
|
||||
return request({
|
||||
url: '/workflow/task/finishedList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 任务流转记录
|
||||
export function flowRecord(query) {
|
||||
return request({
|
||||
url: '/workflow/task/flowRecord',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 撤回任务
|
||||
export function revokeProcess(data) {
|
||||
return request({
|
||||
@@ -26,11 +8,3 @@ export function revokeProcess(data) {
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 部署流程实例
|
||||
export function deployStart(deployId) {
|
||||
return request({
|
||||
url: '/workflow/process/startFlow/' + deployId,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
@@ -22,7 +22,25 @@ export function startProcess(processDefId, data) {
|
||||
// 我的发起的流程
|
||||
export function listOwnProcess(query) {
|
||||
return request({
|
||||
url: '/workflow/process/own',
|
||||
url: '/workflow/process/ownList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 我待办的流程
|
||||
export function listTodoProcess(query) {
|
||||
return request({
|
||||
url: '/workflow/process/todoList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 我已办的流程
|
||||
export function listFinishedProcess(query) {
|
||||
return request({
|
||||
url: '/workflow/process/finishedList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
|
||||
@@ -1,14 +1,5 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询待办任务列表
|
||||
export function todoList(query) {
|
||||
return request({
|
||||
url: '/workflow/task/todoList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 完成任务
|
||||
export function complete(data) {
|
||||
return request({
|
||||
|
||||
@@ -82,7 +82,8 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { finishedList, delDeployment, revokeProcess } from "@/api/workflow/finished";
|
||||
import { listFinishedProcess } from '@/api/workflow/process';
|
||||
import { delDeployment, revokeProcess } from "@/api/workflow/finished";
|
||||
|
||||
export default {
|
||||
name: "Finished",
|
||||
@@ -137,7 +138,7 @@ export default {
|
||||
/** 查询流程定义列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
finishedList(this.queryParams).then(response => {
|
||||
listFinishedProcess(this.queryParams).then(response => {
|
||||
this.finishedList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
|
||||
@@ -79,12 +79,8 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listTodoProcess } from '@/api/workflow/process';
|
||||
import {
|
||||
todoList,
|
||||
complete,
|
||||
returnList,
|
||||
returnTask,
|
||||
rejectTask,
|
||||
delDeployment,
|
||||
exportDeployment
|
||||
} from "@/api/workflow/todo";
|
||||
@@ -132,7 +128,7 @@ export default {
|
||||
/** 查询流程定义列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
todoList(this.queryParams).then(response => {
|
||||
listTodoProcess(this.queryParams).then(response => {
|
||||
this.todoList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
|
||||
Reference in New Issue
Block a user