package org.springblade.mdm.flow.service; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import org.flowable.engine.HistoryService; import org.flowable.engine.TaskService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.task.api.Task; import org.flowable.task.api.TaskInfo; import org.springblade.core.mp.support.Condition; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.flow.entity.FlowProgramFile; import org.springblade.mdm.flow.mapper.DoneMapper; import org.springblade.mdm.flow.vo.DoneQueryVO; import org.springblade.mdm.flow.vo.FlowVO; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; /** * 流程业务实现类 * * @author Chill */ @Service @AllArgsConstructor public class DoneQueryService { private final FlowProgramFileService flowProgramFileService; private final HistoryService historyService; private final FlowCommonService flowCommonService; private final DoneMapper doneMapper; private final TaskService taskService; /** * 查询用户已办任务分页列表 * @param queryVO 查询参数 * @return */ //public IPage selectDonePage(IPage page, LocalDateTime createTimeBegin, LocalDateTime createTimeEnd, String keyword) { public IPage selectDonePage(DoneQueryVO queryVO) { //已办新查询 String userId = "" + AuthUtil.getUserId(); queryVO.setUserId(userId); if(queryVO.getCreateTimeEnd() != null){ queryVO.setCreateTimeEnd(queryVO.getCreateTimeEnd().plusDays(1)); } IPage pageDta = doneMapper.pageQuery(Condition.getPage(queryVO),queryVO); List instIdList = pageDta.getRecords().stream().map(FlowVO::getProcessInstanceId).toList(); if(!instIdList.isEmpty()) { List processList = getHistoricProcessInstances(instIdList); Map> varmap = new HashMap<>(); for(HistoricProcessInstance inst : processList) { varmap.put(inst.getId(),inst.getProcessVariables()); } pageDta.getRecords().forEach(flowVO->{ flowVO.setVariables(varmap.get(flowVO.getProcessInstanceId())); flowVO.setFile(this.getFileString(flowVO.getProcessInstanceId())); /* boolean active = flowCommonService.isProcessInstanceActive(flowVO.getProcessInstanceId()); flowVO.setProcessIsFinished((Func.toStr(!active))); */ if(!Func.toBoolean(flowVO.getProcessIsFinished())){ flowVO.setCurrentTaskKeys(getCurrentTaskDefKeys(flowVO.getProcessInstanceId())); } }); } return pageDta; } List getHistoricProcessInstances(List processInstanceIds) { return historyService.createHistoricProcessInstanceQuery().includeProcessVariables(). processInstanceIds(new HashSet<>(processInstanceIds)) .list(); } /* 获取列表中的文件名 */ String getFileString(String processInstanceId){ String result = ""; List fileList = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).list(); result = String.join(",",fileList.stream().map(FlowProgramFile::getName).toList()); return result; } String getCurrentTaskDefKeys(String processInstanceId) { List tasks = taskService.createTaskQuery() .processInstanceId(processInstanceId) // 根据流程实例ID查询 .active() // 查询活动的任务 .list(); return tasks.stream().map(TaskInfo::getTaskDefinitionKey).collect(Collectors.joining(",")); } }