yangys
2025-08-04 95b1f7b2b35872444acf8e85cc236682d0c4e47e
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
package org.springblade.mdm.flow.service;
 
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.HistoryService;
import org.flowable.engine.IdentityService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.history.HistoricProcessInstance;
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;
 
/**
 * 固化流程服务
 */
@Slf4j
@Service
@AllArgsConstructor
public class CureFlowService {
 
    private final RuntimeService runtimeService;
 
    private final HistoryService historyService;
 
    private final IdentityService identityService;
 
    /**
     * 固化流程的key
     */
    private static final String PROCESS_KEY = "program-cure";
 
 
 
    @Transactional
    public void startCure(List<NcNode> programPackageList) {
        //根据分组启动流程,并插入关联表
        programPackageList.forEach(this::startOne);
    }
 
    /**
     * 启动一个数控程序的固化流程
     * @param programPackage 程序包名 节点实体
     */
    public void startOne(NcNode programPackage) {
        Map<String, Object> vars = null;
        //该程序在计划任务时 获取编制,校对,审批的人员,作为默认用户,其中编制时第一个固定的用户
        if(programPackage.getProcessInstanceId() != null) {
            //获取审批用户
            HistoricProcessInstance instance = historyService.createHistoricProcessInstanceQuery()
                .processInstanceId(programPackage.getProcessInstanceId()).includeProcessVariables()
                .singleResult();
            if(instance != null) {//使用任务派工流程的变量
                vars = new HashMap<>(instance.getProcessVariables());
            }
 
        }
        if(vars == null){
            vars = new HashMap<>();
        }
        /*
        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);
        log.info("启动固化流程完成,实例id={}", pinst.getId());
        //这里需要新建一个同名程序包名,和下属的文件吗,不需要,在dncSendbackService中新建的,这里不处理
 
    }
 
    /**
     * 将程序按照机器代码分组
     * @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));
    }*/
}