yangys
2025-09-07 56f5157ae8dba22eb30fb6c7cb132f80b7161932
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
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(","));
 
    }
}