|
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<FlowVO> selectDonePage(IPage<FlowVO> page, LocalDateTime createTimeBegin, LocalDateTime createTimeEnd, String keyword) {
|
public IPage<FlowVO> selectDonePage(DoneQueryVO queryVO) {
|
//已办新查询
|
String userId = "" + AuthUtil.getUserId();
|
queryVO.setUserId(userId);
|
if(queryVO.getCreateTimeEnd() != null){
|
queryVO.setCreateTimeEnd(queryVO.getCreateTimeEnd().plusDays(1));
|
}
|
IPage<FlowVO> pageDta = doneMapper.pageQuery(Condition.getPage(queryVO),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)));
|
*/
|
if(!Func.toBoolean(flowVO.getProcessIsFinished())){
|
flowVO.setCurrentTaskKeys(getCurrentTaskDefKeys(flowVO.getProcessInstanceId()));
|
}
|
});
|
}
|
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;
|
}
|
|
String getCurrentTaskDefKeys(String processInstanceId) {
|
List<Task> tasks = taskService.createTaskQuery()
|
.processInstanceId(processInstanceId) // 根据流程实例ID查询
|
.active() // 查询活动的任务
|
.list();
|
return tasks.stream().map(TaskInfo::getTaskDefinitionKey).collect(Collectors.joining(","));
|
|
}
|
}
|