|
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 FlowCommonService flowCommonService;
|
private final DoneMapper doneMapper;
|
//
|
public IPage<FlowVO> selectDonePage(IPage<FlowVO> 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<FlowVO> pageDta = doneMapper.pageQuery(page,queryVO);
|
List<String> instIdList = pageDta.getRecords().stream().map(FlowVO::getProcessInstanceId).toList();
|
if(!instIdList.isEmpty()) {
|
List<HistoricProcessInstance> processList = getHistoricProcessInstances(instIdList);
|
Map<String,Map<String,Object>> 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)));
|
});
|
}
|
return pageDta;
|
}
|
|
List<HistoricProcessInstance> getHistoricProcessInstances(List<String> processInstanceIds) {
|
return historyService.createHistoricProcessInstanceQuery().includeProcessVariables().
|
processInstanceIds(new HashSet<>(processInstanceIds))
|
.list();
|
}
|
|
/*
|
获取列表中的文件名
|
*/
|
String getFileString(String processInstanceId){
|
String result = "";
|
List<FlowProgramFile> fileList = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).list();
|
|
result = String.join(",",fileList.stream().map(FlowProgramFile::getName).toList());
|
|
return result;
|
}
|
}
|