yangys
5 天以前 44fda5fa3787c78e74d62f9713dd36abdeadcac8
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
131
package org.springblade.mdm.flow.service;
 
import lombok.AllArgsConstructor;
import org.flowable.engine.HistoryService;
import org.flowable.engine.IdentityService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.mdm.basesetting.machine.MachineService;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.flow.excution.AutoAssignUsersService;
import org.springblade.mdm.flow.vo.TaskAssignVO;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.entity.ProcessProgRef;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.NcProgramService;
import org.springblade.mdm.program.service.ProcessProgRefService;
import org.springblade.mdm.program.vo.DncSendBackData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
 
/**
 * 固化流程服务
 */
@Service
@AllArgsConstructor
public class CureFlowService {
 
    private final RuntimeService runtimeService;
 
    private final HistoryService historyService;
 
    private final IdentityService identityService;
 
    private final NcProgramService ncProgramService;
 
    private final MachineService machineService;
 
    private final ProcessProgRefService processProgRefService;
    /**
     * 固化流程的key
     */
    private static final String PROCESS_KEY = "program-cure";
 
 
 
    @Transactional
    public void startCure(List<NcProgram> programs) {
        //DncSendBackData sendBackData;
        //List<Long> ncProgramIdList = dataList.stream().map(DncSendBackData::getId).toList();
        //Map<String,List<NcProgram>> groupedProgram = groupProgramsByMachineCode(ncProgramIdList);
        //List<NcProgram> programs = ncProgramService.listByIds(ncProgramIdList);
        //根据分组启动流程,并插入关联表
        programs.forEach(this::startOne);
    }
 
    /**
     * 启动一个数控程序的固化流程
     * @param prog 数控程序实体
     */
    public void startOne(NcProgram prog){
        Map<String, Object> vars = new HashMap<>();
 
        //NcProgram prog = programs.get(0);
        Machine machine = machineService.getByCode(prog.getMachineCode());
        vars.put("machineCode",prog.getMachineCode());
        vars.put("machineMode",machine.getName());
        vars.put("processEdition",prog.getProcessEdition());
 
        //该程序在计划任务时 获取编制,校对,审批的人员,作为默认用户,其中编制时第一个固定的用户
        ProcessProgRef preRef = processProgRefService.lastDispatchDataByNcProgramId(prog.getId());
        //获取审批用户
        List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery()
            .processInstanceId(preRef.getProcessInstanceId())
            .orderByHistoricTaskInstanceEndTime().desc()
            .list();
 
        String programmer = null;
        String checker = null;
        String senior = null;
 
        for (HistoricTaskInstance task : historicTasks) {
            // 获取任务的办理人
            if(task.getTaskDefinitionKey().equals("programmingTask")){
                //编制
                programmer = task.getAssignee();
            }else if(task.getTaskDefinitionKey().equals("check")){
                //校对
                checker = task.getAssignee();
            }else if(task.getTaskDefinitionKey().equals("senior")){
                //审核
                senior = task.getAssignee();
            }
 
        }
        vars.put("programmer",programmer);
        vars.put("checker",checker);
        vars.put("senior",senior);
 
        String businessKey = "0";//业务表key
 
        identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//设置流程发起人
        ProcessInstance pinst = runtimeService.startProcessInstanceByKey(PROCESS_KEY,businessKey,vars);
 
        ProcessProgRef ref = new ProcessProgRef();
        ref.setProcessInstanceId(pinst.getId());
        ref.setNcProgramId(prog.getId());
 
        processProgRefService.save(ref);
 
    }
 
    /**
     * 将程序按照机器代码分组
     * @param ncProgramIdList
     * @return
     */
    /*
    Map<String,List<NcProgram>> groupProgramsByMachineCode(List<Long> ncProgramIdList){
        List<NcProgram> programs = ncProgramService.listByIds(ncProgramIdList);
        return programs.stream().collect(Collectors.groupingBy(NcProgram::getMachineCode));
    }*/
}