yangys
2025-09-13 e853c35455332a4652ec604c650ca82c411c864d
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
 
package org.springblade.mdm.statreport.service;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import org.flowable.engine.HistoryService;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.history.HistoricProcessInstanceQuery;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.basesetting.producedivision.entity.MdmDept;
import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
import org.springblade.mdm.commons.service.UserCommonService;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.constants.FlowVariableContants;
import org.springblade.mdm.flow.service.FlowCommonService;
import org.springblade.mdm.flow.service.FlowProgramProperties;
import org.springblade.mdm.statreport.vo.CuredProgramQueryVO;
import org.springblade.mdm.statreport.vo.CuredProgramVO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
 
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
 
/**
 * 流程业务实现类
 *
 * @author Chill
 */
@Service
@AllArgsConstructor
public class CuredProgramStatService {
    private final FlowCommonService flowCommonService;
    private final HistoryService historyService;
    private final MachineService machineService;
    private final MdmDeptService mdmDeptService;
    private final UserCommonService userCommonService;
    private final DeptRelationConfig deptRelationConfig;
 
    public IPage<CuredProgramVO> pageQuery(CuredProgramQueryVO queryVO) {
        //固化里路村官
        HistoricProcessInstanceQuery query = this.historyService.createHistoricProcessInstanceQuery().finished().processDefinitionKey(FlowContants.CURE_PROCESS_KEY).includeProcessVariables();
            //.finished() // 只查询已完成的流程.unfinished() // 查询未完成的流程
        query.variableNotExists(FlowVariableContants.EXCEPTION);//非异常流程
        if(queryVO.getEndMonth()!=null){
            queryVO.setEndTimeBegin(queryVO.getEndMonth().withDayOfMonth(1));
            queryVO.setEndTimeEnd(queryVO.getEndMonth().with(TemporalAdjusters.lastDayOfMonth()));
        }
        if(queryVO.getEndTimeBegin()!=null) {
            query.finishedAfter(DateUtil.toDate(queryVO.getEndTimeBegin()));
        }
        if(queryVO.getEndTimeEnd()!=null) {
            query.finishedBefore(DateUtil.toDate(queryVO.getEndTimeEnd()));
        }
 
        if(queryVO.getDeptIds()!=null && !queryVO.getDeptIds().isEmpty()) {
            //将专业组id,根据映射提取车间id
            List<Long> workshopList = new ArrayList<>();
            Map<Long,Long> relMap = deptRelationConfig.getDeptWorkshopMap();
            for(Long deptId : queryVO.getDeptIds()){
                workshopList.add(relMap.get(deptId));
            }
            //根据车间id,查询所有的下级部门:主要应该是工段
            List<Long> allMachineDeptIds = new ArrayList<>(workshopList);
            for(Long workshopId : workshopList){
                MdmDept workshop = this.mdmDeptService.getById(workshopId);
                if(workshop!=null){
                    String gongduanAncestors =workshop.getAncestors()+","+workshopId;//车间下
                    allMachineDeptIds.addAll(mdmDeptService.lambdaQuery()
                        .likeRight(MdmDept::getAncestors,gongduanAncestors)
                        .list().stream().map(MdmDept::getId).toList());
                }
            }
            List<Machine> machines = this.machineService.lambdaQuery().in(Machine::getOwnerDept,allMachineDeptIds).list();
 
            if(!machines.isEmpty()) {
                query.or();
                for(Machine machine : machines){
                    query.variableValueEquals(FlowVariableContants.MACHINE_CODE, machine.getCode());
                }
 
                query.endOr();
            }else{
                //没找到机床,就应该查不到数据
                query.variableNotExists(FlowVariableContants.MACHINE_CODE);
            }
        }
        query.orderByProcessInstanceEndTime().desc(); // 按结束时间降序排列
 
        IPage<CuredProgramVO> page = new Page<>();
        long firstResult = (page.getCurrent()-1) * page.getSize();
        List<HistoricProcessInstance> processes = query.listPage((int)firstResult,(int)queryVO.getSize());
 
        page.setTotal(query.count());
 
 
        List<CuredProgramVO> records = new LinkedList<>();
 
        for(HistoricProcessInstance processInstance : processes) {
            CuredProgramVO vo = new CuredProgramVO();
            FlowProgramProperties props = flowCommonService.getProgramPropertiesFromHis(processInstance.getId());
            BeanUtils.copyProperties(props, vo);
            vo.setEndTime(processInstance.getEndTime());
 
            vo.setActProgrammerName(props.getProgrammerName());
            if(props.getActCheckerId() == 0){
                vo.setActCheckerName(this.userCommonService.getUserNameById(props.getCheckerId()) );
            }else{
                vo.setActCheckerName(this.userCommonService.getUserNameById(props.getActCheckerId()) );
            }
            if(props.getActCheckerId() == 0) {
                vo.setActSeniorName(this.userCommonService.getUserNameById(props.getSeniorId()));
            }else{
                vo.setActSeniorName(this.userCommonService.getUserNameById(props.getActSeniorId()));
            }
            records.add(vo);
        }
 
        page.setRecords(records);
 
        return page;
    }
 
}