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
package org.springblade.mdm.flow.service;
 
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.IdentityService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.constants.FlowVariableContants;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.NodeDeptQueryService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * 固化流程服务
 */
@Slf4j
@Service
@AllArgsConstructor
public class CureFlowService {
 
    private final RuntimeService runtimeService;
 
    private final IdentityService identityService;
    private final NodeDeptQueryService nodeDeptQueryService;
    private final NcNodeService ncNodeService;
 
    private final FlowProgramFileService flowProgramFileService;
    private final ProduceDivisionService produceDivisionService;
    private final MachineService machineService;
    private final FlowCommonService flowCommonService;
 
    /**
     * 启动固化流程
     */
    @Transactional
    public void startCureNew(Map<Long, List<FlowProgramFile>> pkgIdFileMap) {
        pkgIdFileMap.forEach(this::startOneNew);
    }
 
    /**
     * 启动一调程序的固化流程
     * @param nodeId
     * @param fileList
     */
    private void startOneNew(Long nodeId, List<FlowProgramFile> fileList) {
        Map<String, Object> vars = new HashMap<>();
        NcNode programPackage = this.ncNodeService.getById(nodeId);
        vars.put(FlowContants.NODE_ID,programPackage.getId());
        vars.put(FlowVariableContants.MACHINE_CODE,programPackage.getMachineCode());
 
        //机床型号
        Machine machine = machineService.getByCode(programPackage.getMachineCode());
        if(machine != null) {
            vars.put(FlowVariableContants.MACHINE_MODE,machine.getName());
        }
 
        String workshop = nodeDeptQueryService.getWorkshopNameByMachineCode(programPackage.getMachineCode());
        vars.put(FlowVariableContants.WORKSHOP,workshop);
 
        vars.put(FlowContants.NODE_ID, Func.toStr(nodeId));
        vars.put(FlowVariableContants.PROCESS_NO,programPackage.getProcessNo());
        vars.put(FlowVariableContants.PROCESS_NAME,programPackage.getProcessName());
        vars.put(FlowVariableContants.PROCESS_EDITION,programPackage.getProcessEdition());
        vars.put(FlowVariableContants.CRAFT_EDITION, programPackage.getCraftEdition());
        vars.put(FlowVariableContants.DRAWING_NO,programPackage.getDrawingNo());
        vars.put(FlowVariableContants.DRAWING_NO_EDITION,programPackage.getDrawingNoEdition());
 
        vars.put(FlowVariableContants.PRODUCT_MODEL,programPackage.getProductModel());
 
        vars.put(FlowVariableContants.PROGRAM_PACKAGE_NAME,programPackage.getName());
 
        flowCommonService.putDefaultAssignees(vars,programPackage.getDrawingNo(),null);
        //ProduceDivision div = produceDivisionService.getByDrawingNoWithQinzhe(programPackage.getDrawingNo());
        vars.put(FlowVariableContants.ASSIGNEE,vars.get(FlowVariableContants.PROGRAMMER));
 
 
        identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//设置流程发起人
 
        vars.put(FlowVariableContants.LAST_STEP_USER_NICKNAME, AuthUtil.getNickName());
 
 
        if(programPackage.getDeviation() != null) {
            vars.put(FlowVariableContants.MY_PROCESS_NAME, "偏离回传");
            vars.put(FlowVariableContants.TITLE,programPackage.getName()+"-偏离回传");//自动增加标题
        }else {
            vars.put(FlowVariableContants.MY_PROCESS_NAME, "固化流程");
            vars.put(FlowVariableContants.TITLE,programPackage.getName()+"-"+programPackage.getProcessEdition()+"-固化");//自动增加标题
        }
        ProcessInstance inst = runtimeService.startProcessInstanceByKey(FlowContants.CURE_PROCESS_KEY,"0",vars);
 
        //更新程序包名节点的流程实例id
        programPackage.setProcessInstanceId(inst.getProcessInstanceId());
        ncNodeService.updateById(programPackage);
 
        for(FlowProgramFile flowProgramFile : fileList){
            flowProgramFile.setProcessInstanceId(inst.getProcessInstanceId());
        }
        this.flowProgramFileService.saveBatch(fileList);
 
        log.info("启动固化流程完成,实例id={}", inst.getId());
    }
    /**
     * 将程序按照机器代码分组
     * @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));
    }*/
}