feat(REQ-4418) - 新增流程批量查询接口
This commit is contained in:
parent
f73b1cfcda
commit
0f743afe99
@ -165,7 +165,7 @@ public interface ProcessInstanceApi {
|
||||
@Operation(summary = "批量获得流程实例")
|
||||
@PostMapping("/api/process/instance/batch/get")
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<BpmPageResult<BpmnProcessInstanceVO>> getBatchProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceBatchQueryDTO dto);
|
||||
CommonResponse<List<BpmnProcessInstanceVO>> getBatchProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceBatchQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 获取指定流程实例的流程变量
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package cn.axzo.workflow.common.model.request.bpmn.process;
|
||||
|
||||
import cn.axzo.workflow.common.model.request.BpmPageParam;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -14,15 +14,22 @@ import java.util.List;
|
||||
* @author wangli
|
||||
* @since 2023/7/14 10:12
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel("批量查询流程实例的入参模型")
|
||||
@Accessors(chain = true)
|
||||
public class BpmnProcessInstanceBatchQueryDTO extends BpmPageParam {
|
||||
public class BpmnProcessInstanceBatchQueryDTO {
|
||||
|
||||
/**
|
||||
* 流程实例 ID 列表
|
||||
*/
|
||||
@NotEmpty(message = "流程实例 ID 列表不能为空")
|
||||
@Size(max = 20, message = "一次性查询不能超过 20个")
|
||||
private List<String> processInstanceIds;
|
||||
|
||||
/**
|
||||
* 是否包含流程变量,默认 false
|
||||
* <p>
|
||||
* 注意:开启后可能会严重影响查询性能,
|
||||
*/
|
||||
private Boolean hasVariables;
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ package cn.axzo.workflow.core.service;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BeforeProcessInstanceCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAdminPageReqVO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceBatchQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCarbonCopyDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||
@ -136,6 +137,14 @@ public interface BpmnProcessInstanceService {
|
||||
*/
|
||||
BpmnProcessInstanceVO getProcessInstanceVO(BpmnProcessInstanceQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 批量获得流程实例 VO 信息
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
List<BpmnProcessInstanceVO> getBatchProcessInstanceVO(BpmnProcessInstanceBatchQueryDTO dto);
|
||||
|
||||
ObjectNode getProcessInstanceGraphical(String processInstanceId, @Nullable String tenantId);
|
||||
|
||||
BpmPageResult<HistoricProcessInstanceVO> historicProcessInstancePage(HistoricProcessInstanceSearchDTO dto);
|
||||
@ -184,6 +193,7 @@ public interface BpmnProcessInstanceService {
|
||||
|
||||
/**
|
||||
* 获取指定流程实例对应的模型 ID
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @return
|
||||
*/
|
||||
|
||||
@ -22,6 +22,7 @@ import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonMetaInfo;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BeforeProcessInstanceCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAdminPageReqVO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceBatchQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCarbonCopyDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||
@ -93,6 +94,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.flowable.bpmn.model.BpmnModel;
|
||||
@ -829,6 +831,61 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
processInstance.getProcessDefinitionKey()), runningTasks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BpmnProcessInstanceVO> getBatchProcessInstanceVO(BpmnProcessInstanceBatchQueryDTO dto) {
|
||||
List<HistoricProcessInstance> processInstanceList = historyService.createHistoricProcessInstanceQuery().processInstanceIds(Sets.newHashSet(dto.getProcessInstanceIds())).list();
|
||||
Map<String, Map<String, Object>> variableMaps = historyService.createNativeHistoricVariableInstanceQuery()
|
||||
.sql("select * from act_hi_varinst where PROC_INST_ID_ in (#{ids}) and (NAME_ = '" + INTERNAL_INITIATOR + "' or NAME_ = '" + OLD_INTERNAL_INITIATOR + "' or NAME_ = '" + WORKFLOW_ENGINE_VERSION + "')")
|
||||
.parameter("ids", dto.getProcessInstanceIds()).list()
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(HistoricVariableInstance::getProcessInstanceId, Collectors.toMap(HistoricVariableInstance::getVariableName, HistoricVariableInstance::getValue, (s, t) -> s)));
|
||||
Map<String, Task> taskMaps = taskService.createTaskQuery().processInstanceIdIn(dto.getProcessInstanceIds())
|
||||
.active()
|
||||
.list()
|
||||
.stream().collect(Collectors.groupingBy(
|
||||
Task::getProcessInstanceId,
|
||||
Collectors.collectingAndThen(
|
||||
Collectors.maxBy(Comparator.comparing(Task::getCreateTime)),
|
||||
Optional::get
|
||||
)
|
||||
));
|
||||
|
||||
|
||||
Map<String, CategoryItemVO> categoryMaps = categoryService.getByValues(processInstanceList.stream().map(HistoricProcessInstance::getProcessDefinitionKey).filter(StringUtils::hasText).distinct().collect(Collectors.toList()))
|
||||
.stream()
|
||||
.filter(i -> Objects.equals(i.getType(), BPM_MODEL_CATEGORY))
|
||||
.collect(Collectors.toMap(CategoryItemVO::getValue, Function.identity(), (s, t) -> s));
|
||||
return processInstanceList.stream().map(e -> {
|
||||
BpmnProcessInstanceVO vo = new BpmnProcessInstanceVO();
|
||||
vo.setId(e.getId());
|
||||
vo.setName(e.getName());
|
||||
vo.setCategory(e.getProcessDefinitionKey());
|
||||
CategoryItemVO category = categoryMaps.getOrDefault(e.getProcessDefinitionKey(), null);
|
||||
if (Objects.nonNull(category)) {
|
||||
vo.setCategoryDesc(category.getLabel());
|
||||
vo.setWorkspaceType(WorkspaceType.getType(Integer.valueOf(category.getWorkspaceTypeCode())));
|
||||
}
|
||||
vo.setResult(BpmnProcessInstanceResultEnum.valueOfStatus(e.getBusinessStatus()));
|
||||
vo.setCreateAt(e.getStartTime());
|
||||
vo.setEndTime(e.getEndTime());
|
||||
vo.setProcessDefinitionKey(e.getProcessDefinitionKey());
|
||||
vo.setProcessDefinitionId(e.getProcessDefinitionId());
|
||||
vo.setBusinessKey(e.getBusinessKey());
|
||||
vo.setBusinessStatus(e.getBusinessStatus());
|
||||
vo.setTenantId(e.getTenantId());
|
||||
Task task = taskMaps.getOrDefault(e.getId(), null);
|
||||
if (Objects.nonNull(task)) {
|
||||
vo.setCurrentDefinitionKey(task.getTaskDefinitionKey());
|
||||
}
|
||||
Map<String, Object> variables = variableMaps.getOrDefault(e.getId(), Collections.emptyMap());
|
||||
if (!CollectionUtils.isEmpty(variables)) {
|
||||
vo.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(variables.getOrDefault(INTERNAL_INITIATOR, variables.getOrDefault(OLD_INTERNAL_INITIATOR, null))));
|
||||
vo.setWorkflowEngineVersion(variables.getOrDefault(WORKFLOW_ENGINE_VERSION, "").toString());
|
||||
}
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得流程实例 Map
|
||||
*
|
||||
|
||||
@ -291,9 +291,9 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController
|
||||
@Operation(summary = "批量获得流程实例")
|
||||
@GetMapping("/batch/get")
|
||||
@Override
|
||||
public CommonResponse<BpmPageResult<BpmnProcessInstanceVO>> getBatchProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceBatchQueryDTO dto) {
|
||||
log.info("获得历史的流程实例 getProcessInstanceVO===>>>参数:{}", JSONUtil.toJsonStr(dto));
|
||||
return null;
|
||||
public CommonResponse<List<BpmnProcessInstanceVO>> getBatchProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceBatchQueryDTO dto) {
|
||||
log.info("批量获得历史的流程实例 getProcessInstanceVO===>>>参数:{}", JSONUtil.toJsonStr(dto));
|
||||
return success(bpmnProcessInstanceService.getBatchProcessInstanceVO(dto));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user