update 优化获取流程记录

This commit is contained in:
gssong 2024-05-17 20:42:44 +08:00
parent 5eea8fda26
commit 845e95bd07
3 changed files with 12 additions and 44 deletions

View File

@ -14,12 +14,14 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.workflow.domain.bo.ProcessInstanceBo; import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.bo.TaskUrgingBo; import org.dromara.workflow.domain.bo.TaskUrgingBo;
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
import org.dromara.workflow.domain.vo.ProcessInstanceVo; import org.dromara.workflow.domain.vo.ProcessInstanceVo;
import org.dromara.workflow.service.IActProcessInstanceService; import org.dromara.workflow.service.IActProcessInstanceService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -81,7 +83,7 @@ public class ActProcessInstanceController extends BaseController {
* @param processInstanceId 流程实例id * @param processInstanceId 流程实例id
*/ */
@GetMapping("/getHistoryRecord/{processInstanceId}") @GetMapping("/getHistoryRecord/{processInstanceId}")
public R<Map<String, Object>> getHistoryRecord(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) { public R<List<ActHistoryInfoVo>> getHistoryRecord(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) {
return R.ok(actProcessInstanceService.getHistoryRecord(processInstanceId)); return R.ok(actProcessInstanceService.getHistoryRecord(processInstanceId));
} }

View File

@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.workflow.domain.bo.ProcessInstanceBo; import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.bo.TaskUrgingBo; import org.dromara.workflow.domain.bo.TaskUrgingBo;
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
import org.dromara.workflow.domain.vo.ProcessInstanceVo; import org.dromara.workflow.domain.vo.ProcessInstanceVo;
import java.util.List; import java.util.List;
@ -56,7 +57,7 @@ public interface IActProcessInstanceService {
* @param processInstanceId 流程实例id * @param processInstanceId 流程实例id
* @return 结果 * @return 结果
*/ */
Map<String, Object> getHistoryRecord(String processInstanceId); List<ActHistoryInfoVo> getHistoryRecord(String processInstanceId);
/** /**
* 作废流程实例不会删除历史记录(删除运行中的实例) * 作废流程实例不会删除历史记录(删除运行中的实例)

View File

@ -336,8 +336,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
* @param processInstanceId 流程实例id * @param processInstanceId 流程实例id
*/ */
@Override @Override
public Map<String, Object> getHistoryRecord(String processInstanceId) { public List<ActHistoryInfoVo> getHistoryRecord(String processInstanceId) {
Map<String, Object> map = new HashMap<>();
// 查询任务办理记录 // 查询任务办理记录
List<HistoricTaskInstance> list = QueryUtils.hisTaskInstanceQuery(processInstanceId).orderByHistoricTaskInstanceEndTime().desc().list(); List<HistoricTaskInstance> list = QueryUtils.hisTaskInstanceQuery(processInstanceId).orderByHistoricTaskInstanceEndTime().desc().list();
list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed()); list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed());
@ -378,16 +377,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
} }
actHistoryInfoVoList.add(actHistoryInfoVo); actHistoryInfoVoList.add(actHistoryInfoVo);
} }
List<ActHistoryInfoVo> collect = new ArrayList<>();
// 待办理
List<ActHistoryInfoVo> waitingTask = StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() == null);
// 已办理
List<ActHistoryInfoVo> finishTask = StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() != null);
collect.addAll(waitingTask);
collect.addAll(finishTask);
// 审批记录 // 审批记录
map.put("historyRecordList", collect);
List<ActHistoryInfoVo> nodeInfoList = new ArrayList<>();
Map<String, List<ActHistoryInfoVo>> groupByKey = StreamUtils.groupByKey(actHistoryInfoVoList, ActHistoryInfoVo::getTaskDefinitionKey); Map<String, List<ActHistoryInfoVo>> groupByKey = StreamUtils.groupByKey(actHistoryInfoVoList, ActHistoryInfoVo::getTaskDefinitionKey);
for (Map.Entry<String, List<ActHistoryInfoVo>> entry : groupByKey.entrySet()) { for (Map.Entry<String, List<ActHistoryInfoVo>> entry : groupByKey.entrySet()) {
ActHistoryInfoVo actHistoryInfoVo = BeanUtil.toBean(entry.getValue().get(0), ActHistoryInfoVo.class); ActHistoryInfoVo actHistoryInfoVo = BeanUtil.toBean(entry.getValue().get(0), ActHistoryInfoVo.class);
@ -403,39 +393,14 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
actHistoryInfoVo.setEndTime(null); actHistoryInfoVo.setEndTime(null);
actHistoryInfoVo.setRunDuration(null); actHistoryInfoVo.setRunDuration(null);
}); });
nodeInfoList.add(actHistoryInfoVo);
} }
// 节点信息 List<ActHistoryInfoVo> recordList = new ArrayList<>();
map.put("nodeListInfo", nodeInfoList); // 待办理
BpmnModel bpmnModel = repositoryService.getBpmnModel(list.get(0).getProcessDefinitionId()); recordList.addAll(StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() == null));
List<GraphicInfoVo> graphicInfoVos = new ArrayList<>(); // 已办理
Collection<FlowElement> flowElements = bpmnModel.getMainProcess().getFlowElements(); recordList.addAll(StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() != null));
//节点图形信息
buildGraphicInfo(flowElements, graphicInfoVos, bpmnModel);
map.put("graphicInfoVos", graphicInfoVos);
return map;
}
/** return recordList;
* 构建节点图形信息
*
* @param flowElements 节点
*/
private static void buildGraphicInfo(Collection<FlowElement> flowElements, List<GraphicInfoVo> graphicInfoVos, BpmnModel bpmnModel) {
for (FlowElement flowElement : flowElements) {
if (flowElement instanceof SubProcess) {
Collection<FlowElement> subFlowElements = ((SubProcess) flowElement).getFlowElements();
buildGraphicInfo(subFlowElements, graphicInfoVos, bpmnModel);
} else {
if (flowElement instanceof UserTask) {
GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowElement.getId());
GraphicInfoVo graphicInfoVo = BeanUtil.toBean(graphicInfo, GraphicInfoVo.class);
graphicInfoVo.setNodeId(flowElement.getId());
graphicInfoVo.setNodeName(flowElement.getName());
graphicInfoVos.add(graphicInfoVo);
}
}
}
} }
/** /**