yangys
2025-08-25 b0444630b330e62b98d5ffef71cc95907f8ce39e
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
100
101
102
103
104
 
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;
    }
}