feat(办公管理): 新增 流程列表信息导出功能。(I5RH0X)

This commit is contained in:
konbai
2022-12-25 18:44:02 +08:00
parent a575cbd046
commit 3a90db6a11
14 changed files with 658 additions and 28 deletions

View File

@@ -0,0 +1,57 @@
package com.ruoyi.workflow.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 待签流程对象导出VO
*
* @author konbai
*/
@Data
@NoArgsConstructor
public class WfClaimTaskExportVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 任务编号
*/
@ExcelProperty(value = "任务编号")
private String taskId;
/**
* 流程名称
*/
@ExcelProperty(value = "流程名称")
private String procDefName;
/**
* 任务节点
*/
@ExcelProperty(value = "任务节点")
private String taskName;
/**
* 流程版本
*/
@ExcelProperty(value = "流程版本")
private int procDefVersion;
/**
* 流程发起人名称
*/
@ExcelProperty(value = "流程发起人")
private String startUserName;
/**
* 接收时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "接收时间")
private Date createTime;
}

View File

@@ -2,6 +2,8 @@ package com.ruoyi.workflow.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
@@ -69,9 +71,10 @@ public class WfDefinitionVo {
private String deploymentId;
/**
* 流程定义状态: 1:激活 , 2:中止
* 流程是否暂停true:挂起 false:激活
*/
@ExcelProperty(value = "流程定义状态: 1:激活 , 2:中止")
@ExcelProperty(value = "流程是否挂起", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "true=挂起,false=激活")
private Boolean suspended;
/**

View File

@@ -0,0 +1,70 @@
package com.ruoyi.workflow.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 已办流程对象导出VO
*
* @author konbai
*/
@Data
@NoArgsConstructor
public class WfFinishedTaskExportVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 任务编号
*/
@ExcelProperty(value = "任务编号")
private String taskId;
/**
* 流程名称
*/
@ExcelProperty(value = "流程名称")
private String procDefName;
/**
* 任务节点
*/
@ExcelProperty(value = "任务节点")
private String taskName;
/**
* 流程版本
*/
@ExcelProperty(value = "流程版本")
private int procDefVersion;
/**
* 流程发起人名称
*/
@ExcelProperty(value = "流程发起人")
private String startUserName;
/**
* 接收时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "接收时间")
private Date createTime;
/**
* 审批时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "审批时间")
private Date finishTime;
/**
* 任务耗时
*/
@ExcelProperty(value = "任务耗时")
private String duration;
}

View File

@@ -0,0 +1,75 @@
package com.ruoyi.workflow.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 我拥有流程对象导出VO
*
* @author konbai
*/
@Data
@NoArgsConstructor
public class WfOwnTaskExportVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 流程实例ID
*/
@ExcelProperty(value = "流程编号")
private String procInsId;
/**
* 流程名称
*/
@ExcelProperty(value = "流程名称")
private String procDefName;
/**
* 流程类别
*/
@ExcelProperty(value = "流程类别")
private String category;
/**
* 流程版本
*/
@ExcelProperty(value = "流程版本")
private int procDefVersion;
/**
* 提交时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "提交时间")
private Date createTime;
/**
* 流程状态
*/
@ExcelProperty(value = "流程状态")
private String status;
/**
* 任务耗时
*/
@ExcelProperty(value = "任务耗时")
private String duration;
/**
* 当前节点
*/
@ExcelProperty(value = "当前节点")
private String taskName;
/**
* 任务完成时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date finishTime;
}

View File

@@ -0,0 +1,57 @@
package com.ruoyi.workflow.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 待办流程对象导出VO
*
* @author konbai
*/
@Data
@NoArgsConstructor
public class WfTodoTaskExportVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 任务编号
*/
@ExcelProperty(value = "任务编号")
private String taskId;
/**
* 流程名称
*/
@ExcelProperty(value = "流程名称")
private String procDefName;
/**
* 任务节点
*/
@ExcelProperty(value = "任务节点")
private String taskName;
/**
* 流程版本
*/
@ExcelProperty(value = "流程版本")
private int procDefVersion;
/**
* 流程发起人名称
*/
@ExcelProperty(value = "流程发起人")
private String startUserName;
/**
* 接收时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "接收时间")
private Date createTime;
}

View File

@@ -7,6 +7,7 @@ import com.ruoyi.workflow.domain.vo.WfDefinitionVo;
import com.ruoyi.workflow.domain.vo.WfDetailVo;
import com.ruoyi.workflow.domain.vo.WfTaskVo;
import java.util.List;
import java.util.Map;
/**
@@ -22,30 +23,55 @@ public interface IWfProcessService {
*/
TableDataInfo<WfDefinitionVo> selectPageStartProcessList(ProcessQuery processQuery, PageQuery pageQuery);
/**
* 查询可发起流程列表
*/
List<WfDefinitionVo> selectStartProcessList(ProcessQuery processQuery);
/**
* 查询我的流程列表
* @param pageQuery 分页参数
*/
TableDataInfo<WfTaskVo> selectPageOwnProcessList(ProcessQuery processQuery, PageQuery pageQuery);
/**
* 查询我的流程列表
*/
List<WfTaskVo> selectOwnProcessList(ProcessQuery processQuery);
/**
* 查询代办任务列表
* @param pageQuery 分页参数
*/
TableDataInfo<WfTaskVo> selectPageTodoProcessList(ProcessQuery processQuery, PageQuery pageQuery);
/**
* 查询代办任务列表
*/
List<WfTaskVo> selectTodoProcessList(ProcessQuery processQuery);
/**
* 查询待签任务列表
* @param pageQuery 分页参数
*/
TableDataInfo<WfTaskVo> selectPageClaimProcessList(ProcessQuery processQuery, PageQuery pageQuery);
/**
* 查询待签任务列表
*/
List<WfTaskVo> selectClaimProcessList(ProcessQuery processQuery);
/**
* 查询已办任务列表
* @param pageQuery 分页参数
*/
TableDataInfo<WfTaskVo> selectPageFinishedProcessList(ProcessQuery processQuery, PageQuery pageQuery);
/**
* 查询已办任务列表
*/
List<WfTaskVo> selectFinishedProcessList(ProcessQuery processQuery);
/**
* 查询流程部署关联表单信息
* @param definitionId 流程定义ID

View File

@@ -121,6 +121,38 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
return TableDataInfo.build(page);
}
@Override
public List<WfDefinitionVo> selectStartProcessList(ProcessQuery processQuery) {
// 流程定义列表数据查询
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery()
.latestVersion()
.active()
.orderByProcessDefinitionKey()
.asc();
// 构建搜索条件
ProcessUtils.buildProcessSearch(processDefinitionQuery, processQuery);
List<ProcessDefinition> definitionList = processDefinitionQuery.list();
List<WfDefinitionVo> definitionVoList = new ArrayList<>();
for (ProcessDefinition processDefinition : definitionList) {
String deploymentId = processDefinition.getDeploymentId();
Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
WfDefinitionVo vo = new WfDefinitionVo();
vo.setDefinitionId(processDefinition.getId());
vo.setProcessKey(processDefinition.getKey());
vo.setProcessName(processDefinition.getName());
vo.setVersion(processDefinition.getVersion());
vo.setDeploymentId(processDefinition.getDeploymentId());
vo.setSuspended(processDefinition.isSuspended());
// 流程定义时间
vo.setCategory(deployment.getCategory());
vo.setDeploymentTime(deployment.getDeploymentTime());
definitionVoList.add(vo);
}
return definitionVoList;
}
@Override
public TableDataInfo<WfTaskVo> selectPageOwnProcessList(ProcessQuery processQuery, PageQuery pageQuery) {
Page<WfTaskVo> page = new Page<>();
@@ -172,6 +204,52 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
return TableDataInfo.build(page);
}
@Override
public List<WfTaskVo> selectOwnProcessList(ProcessQuery processQuery) {
HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery()
.startedBy(TaskUtils.getUserId())
.orderByProcessInstanceStartTime()
.desc();
// 构建搜索条件
ProcessUtils.buildProcessSearch(historicProcessInstanceQuery, processQuery);
List<HistoricProcessInstance> historicProcessInstances = historicProcessInstanceQuery.list();
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())) {
taskVo.setDuration(DateUtils.getDatePoor(hisIns.getEndTime(), hisIns.getStartTime()));
} else {
taskVo.setDuration(DateUtils.getDatePoor(DateUtils.getNowDate(), hisIns.getStartTime()));
}
// 流程部署实例信息
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());
// 当前所处流程
List<Task> taskList = taskService.createTaskQuery().processInstanceId(hisIns.getId()).list();
if (CollUtil.isNotEmpty(taskList)) {
taskVo.setTaskId(taskList.get(0).getId());
} else {
List<HistoricTaskInstance> historicTaskInstance = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(hisIns.getId()).orderByHistoricTaskInstanceEndTime().desc().list();
if (CollUtil.isNotEmpty(historicTaskInstance)) {
taskVo.setTaskId(historicTaskInstance.get(0).getId());
}
}
taskVoList.add(taskVo);
}
return taskVoList;
}
@Override
public TableDataInfo<WfTaskVo> selectPageTodoProcessList(ProcessQuery processQuery, PageQuery pageQuery) {
Page<WfTaskVo> page = new Page<>();
@@ -222,6 +300,51 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
return TableDataInfo.build(page);
}
@Override
public List<WfTaskVo> selectTodoProcessList(ProcessQuery processQuery) {
TaskQuery taskQuery = taskService.createTaskQuery()
.active()
.includeProcessVariables()
.taskCandidateOrAssigned(TaskUtils.getUserId())
.taskCandidateGroupIn(TaskUtils.getCandidateGroup())
.orderByTaskCreateTime().desc();
// 构建搜索条件
ProcessUtils.buildProcessSearch(taskQuery, processQuery);
List<Task> taskList = taskQuery.list();
List<WfTaskVo> taskVoList = new ArrayList<>();
for (Task task : taskList) {
WfTaskVo taskVo = new WfTaskVo();
// 当前流程信息
taskVo.setTaskId(task.getId());
taskVo.setTaskDefKey(task.getTaskDefinitionKey());
taskVo.setCreateTime(task.getCreateTime());
taskVo.setProcDefId(task.getProcessDefinitionId());
taskVo.setTaskName(task.getName());
// 流程定义信息
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(task.getProcessDefinitionId())
.singleResult();
taskVo.setDeployId(pd.getDeploymentId());
taskVo.setProcDefName(pd.getName());
taskVo.setProcDefVersion(pd.getVersion());
taskVo.setProcInsId(task.getProcessInstanceId());
// 流程发起人信息
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(task.getProcessInstanceId())
.singleResult();
SysUser startUser = userService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId()));
taskVo.setStartUserId(startUser.getNickName());
taskVo.setStartUserName(startUser.getNickName());
taskVo.setStartDeptName(startUser.getDept().getDeptName());
// 流程变量
taskVo.setProcVars(this.getProcessVariables(task.getId()));
taskVoList.add(taskVo);
}
return taskVoList;
}
@Override
public TableDataInfo<WfTaskVo> selectPageClaimProcessList(ProcessQuery processQuery, PageQuery pageQuery) {
Page<WfTaskVo> page = new Page<>();
@@ -269,6 +392,49 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
return TableDataInfo.build(page);
}
@Override
public List<WfTaskVo> selectClaimProcessList(ProcessQuery processQuery) {
TaskQuery taskQuery = taskService.createTaskQuery()
.active()
.includeProcessVariables()
.taskCandidateUser(TaskUtils.getUserId())
.taskCandidateGroupIn(TaskUtils.getCandidateGroup())
.orderByTaskCreateTime().desc();
// 构建搜索条件
ProcessUtils.buildProcessSearch(taskQuery, processQuery);
List<Task> taskList = taskQuery.list();
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());
flowList.add(flowTask);
}
return flowList;
}
@Override
public TableDataInfo<WfTaskVo> selectPageFinishedProcessList(ProcessQuery processQuery, PageQuery pageQuery) {
Page<WfTaskVo> page = new Page<>();
@@ -327,6 +493,57 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
return TableDataInfo.build(page);
}
@Override
public List<WfTaskVo> selectFinishedProcessList(ProcessQuery processQuery) {
HistoricTaskInstanceQuery taskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
.includeProcessVariables()
.finished()
.taskAssignee(TaskUtils.getUserId())
.orderByHistoricTaskInstanceEndTime()
.desc();
// 构建搜索条件
ProcessUtils.buildProcessSearch(taskInstanceQuery, processQuery);
List<HistoricTaskInstance> historicTaskInstanceList = taskInstanceQuery.list();
List<WfTaskVo> hisTaskList = new ArrayList<>();
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);
}
return hisTaskList;
}
@Override
public String selectFormContent(String definitionId, String deployId) {
InputStream inputStream = repositoryService.getProcessModel(definitionId);