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.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.flowable.engine.task.Comment; import org.flowable.task.api.Task; import org.flowable.task.api.TaskInfoQuery; import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstanceQuery; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.flow.constants.FlowContants; import org.springblade.mdm.flow.entity.FlowProgramFile; import org.springblade.mdm.flow.entity.MdmFlowProcess; import org.springblade.mdm.flow.mapper.DoneMapper; import org.springblade.mdm.flow.util.MdmFlowCache; import org.springblade.mdm.flow.vo.DoneQueryVO; import org.springblade.mdm.flow.vo.FlowVO; import org.springblade.system.feign.IUserClient; import org.springblade.system.pojo.entity.User; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.LocalDateTime; 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 IUserClient userClient; private final DoneMapper doneMapper; // public IPage selectDonePage(IPage page, String s, LocalDateTime createTimeBegin, LocalDateTime createTimeEnd, String keyword) { //已办新查询 String userId = "" + AuthUtil.getUserId(); DoneQueryVO queryVO = new DoneQueryVO(); queryVO.setSize(Long.valueOf(page.getSize()).intValue()); queryVO.setCurrent(Long.valueOf(page.getCurrent()).intValue()); queryVO.setUserId(userId); queryVO.setCreateTimeBegin(createTimeBegin); if(createTimeEnd != null){ createTimeEnd = createTimeEnd.plusDays(1); } queryVO.setCreateTimeEnd(createTimeEnd); queryVO.setKeyword(keyword); IPage pageDta = doneMapper.pageQuery(page,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())); }); } 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; } }