commit
623a41d48c
|
@ -109,6 +109,25 @@ public class BpmProcessInstanceController {
|
||||||
processDefinitionMap, categoryMap, taskMap, userMap, deptMap, processDefinitionInfoMap));
|
processDefinitionMap, categoryMap, taskMap, userMap, deptMap, processDefinitionInfoMap));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/report-page")
|
||||||
|
@Operation(summary = "获得流程实例报表的分页列表", description = "获得流程实例报表的分页列表")
|
||||||
|
public CommonResult<BpmProcessInstanceReportPageRespVO> getProcessInstanceReportPage(
|
||||||
|
@Valid BpmProcessInstanceReportPageReqVO pageReqVO) {
|
||||||
|
PageResult<HistoricProcessInstance> pageResult = processInstanceService.getProcessInstanceReportPage(pageReqVO);
|
||||||
|
if (CollUtil.isEmpty(pageResult.getList())) {
|
||||||
|
return success(new BpmProcessInstanceReportPageRespVO().setPageResult(PageResult.empty(pageResult.getTotal())));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 拼接返回
|
||||||
|
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
|
||||||
|
convertSet(pageResult.getList(), processInstance -> NumberUtils.parseLong(processInstance.getStartUserId())));
|
||||||
|
BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService.getProcessDefinitionInfo(
|
||||||
|
pageReqVO.getProcessDefinitionId()
|
||||||
|
);
|
||||||
|
return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceReportPage(pageResult,
|
||||||
|
userMap, processDefinitionInfo));
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@Operation(summary = "新建流程实例")
|
@Operation(summary = "新建流程实例")
|
||||||
@PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")
|
@PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")
|
||||||
|
|
|
@ -2,16 +2,20 @@ package cn.iocoder.yudao.module.bpm.convert.task;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.iocoder.yudao.framework.common.core.KeyValue;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
|
import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO;
|
||||||
|
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormFieldVO;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailRespVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailRespVO;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceBpmnModelViewRespVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceBpmnModelViewRespVO;
|
||||||
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceReportPageRespVO;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
|
||||||
import cn.iocoder.yudao.module.bpm.convert.definition.BpmProcessDefinitionConvert;
|
import cn.iocoder.yudao.module.bpm.convert.definition.BpmProcessDefinitionConvert;
|
||||||
|
@ -35,10 +39,7 @@ import org.mapstruct.Mapping;
|
||||||
import org.mapstruct.MappingTarget;
|
import org.mapstruct.MappingTarget;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||||
|
@ -84,6 +85,42 @@ public interface BpmProcessInstanceConvert {
|
||||||
return vpPageResult;
|
return vpPageResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default BpmProcessInstanceReportPageRespVO buildProcessInstanceReportPage(PageResult<HistoricProcessInstance> pageResult,
|
||||||
|
Map<Long, AdminUserRespDTO> userMap,
|
||||||
|
BpmProcessDefinitionInfoDO processDefinitionInfo) {
|
||||||
|
PageResult<BpmProcessInstanceReportPageRespVO.BpmProcessInstanceReportRespVO> vpPageResult = BeanUtils.toBean(pageResult,
|
||||||
|
BpmProcessInstanceReportPageRespVO.BpmProcessInstanceReportRespVO.class);
|
||||||
|
// 表单列表
|
||||||
|
List<BpmFormFieldVO> formFieldsList = new ArrayList<>();
|
||||||
|
processDefinitionInfo.getFormFields().forEach(formFieldStr -> {
|
||||||
|
BpmFormFieldVO formField = JsonUtils.parseObject(formFieldStr, BpmFormFieldVO.class);
|
||||||
|
if (formField != null) {
|
||||||
|
formFieldsList.add(formField);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
for (int i = 0; i < pageResult.getList().size(); i++) {
|
||||||
|
HistoricProcessInstance historicProcessInstance = pageResult.getList().get(i);
|
||||||
|
BpmProcessInstanceReportPageRespVO.BpmProcessInstanceReportRespVO respVO = vpPageResult.getList().get(i);
|
||||||
|
respVO.setStatus(FlowableUtils.getProcessInstanceStatus(historicProcessInstance));
|
||||||
|
// user
|
||||||
|
if (userMap != null) {
|
||||||
|
AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(historicProcessInstance.getStartUserId()));
|
||||||
|
if (startUser != null) {
|
||||||
|
respVO.setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 表单数据
|
||||||
|
List<KeyValue<String, Object>> variables = new ArrayList<>();
|
||||||
|
formFieldsList.forEach(formField -> {
|
||||||
|
variables.add(new KeyValue<String, Object>()
|
||||||
|
.setKey(formField.getField())
|
||||||
|
.setValue(historicProcessInstance.getProcessVariables().getOrDefault(formField.getField(), "")));
|
||||||
|
});
|
||||||
|
respVO.setVariables(variables);
|
||||||
|
}
|
||||||
|
return new BpmProcessInstanceReportPageRespVO().setPageResult(vpPageResult).setFormFields(formFieldsList);
|
||||||
|
}
|
||||||
|
|
||||||
default BpmProcessInstanceRespVO buildProcessInstance(HistoricProcessInstance processInstance,
|
default BpmProcessInstanceRespVO buildProcessInstance(HistoricProcessInstance processInstance,
|
||||||
ProcessDefinition processDefinition,
|
ProcessDefinition processDefinition,
|
||||||
BpmProcessDefinitionInfoDO processDefinitionInfo,
|
BpmProcessDefinitionInfoDO processDefinitionInfo,
|
||||||
|
|
|
@ -84,6 +84,8 @@ public interface BpmProcessInstanceService {
|
||||||
PageResult<HistoricProcessInstance> getProcessInstancePage(Long userId,
|
PageResult<HistoricProcessInstance> getProcessInstancePage(Long userId,
|
||||||
@Valid BpmProcessInstancePageReqVO pageReqVO);
|
@Valid BpmProcessInstancePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
PageResult<HistoricProcessInstance> getProcessInstanceReportPage(@Valid BpmProcessInstanceReportPageReqVO pageReqVO);
|
||||||
|
|
||||||
// TODO @芋艿:重点在 review 下
|
// TODO @芋艿:重点在 review 下
|
||||||
/**
|
/**
|
||||||
* 获取审批详情。
|
* 获取审批详情。
|
||||||
|
|
|
@ -180,6 +180,43 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
|
||||||
return new PageResult<>(processInstanceList, processInstanceCount);
|
return new PageResult<>(processInstanceList, processInstanceCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<HistoricProcessInstance> getProcessInstanceReportPage(BpmProcessInstanceReportPageReqVO pageReqVO) {
|
||||||
|
// 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页
|
||||||
|
HistoricProcessInstanceQuery processInstanceQuery = historyService.createHistoricProcessInstanceQuery()
|
||||||
|
.includeProcessVariables()
|
||||||
|
.processInstanceTenantId(FlowableUtils.getTenantId())
|
||||||
|
.orderByProcessInstanceStartTime().desc();
|
||||||
|
if (pageReqVO.getStartUserId() != null) {
|
||||||
|
processInstanceQuery.startedBy(String.valueOf(pageReqVO.getStartUserId()));
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotEmpty(pageReqVO.getName())) {
|
||||||
|
processInstanceQuery.processInstanceNameLike("%" + pageReqVO.getName() + "%");
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotEmpty(pageReqVO.getProcessDefinitionKey())) {
|
||||||
|
processInstanceQuery.processDefinitionKey(pageReqVO.getProcessDefinitionKey());
|
||||||
|
}
|
||||||
|
if (pageReqVO.getStatus() != null) {
|
||||||
|
processInstanceQuery.variableValueEquals(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS, pageReqVO.getStatus());
|
||||||
|
}
|
||||||
|
if (ArrayUtil.isNotEmpty(pageReqVO.getCreateTime())) {
|
||||||
|
processInstanceQuery.startedAfter(DateUtils.of(pageReqVO.getCreateTime()[0]));
|
||||||
|
processInstanceQuery.startedBefore(DateUtils.of(pageReqVO.getCreateTime()[1]));
|
||||||
|
}
|
||||||
|
if (ArrayUtil.isNotEmpty(pageReqVO.getEndTime())) {
|
||||||
|
processInstanceQuery.finishedAfter(DateUtils.of(pageReqVO.getEndTime()[0]));
|
||||||
|
processInstanceQuery.finishedBefore(DateUtils.of(pageReqVO.getEndTime()[1]));
|
||||||
|
}
|
||||||
|
// TODO 流程表单数据也要支持查询
|
||||||
|
// 查询数量
|
||||||
|
long processInstanceCount = processInstanceQuery.count();
|
||||||
|
if (processInstanceCount == 0) {
|
||||||
|
return PageResult.empty(processInstanceCount);
|
||||||
|
}
|
||||||
|
// 查询列表
|
||||||
|
List<HistoricProcessInstance> processInstanceList = processInstanceQuery.listPage(PageUtils.getStart(pageReqVO), pageReqVO.getPageSize());
|
||||||
|
return new PageResult<>(processInstanceList, processInstanceCount);
|
||||||
|
}
|
||||||
|
|
||||||
private Map<String, String> getFormFieldsPermission(BpmnModel bpmnModel,
|
private Map<String, String> getFormFieldsPermission(BpmnModel bpmnModel,
|
||||||
String activityId, String taskId) {
|
String activityId, String taskId) {
|
||||||
|
|
Loading…
Reference in New Issue