yangys
2025-08-20 295bf6f10ad0b668d2dbaa4525a15d6d52807ef1
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
package org.springblade.mdm.flow.excution.dispatch;
 
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.DelegateExecution;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.ApproveRecord;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.service.ApproveRecordService;
import org.springblade.mdm.flow.service.FlowCommonService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.service.FlowProgramProperties;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgramApproved;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.NcProgramApprovedService;
import org.springblade.mdm.utils.EntityUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
import java.util.List;
 
/**
 * 派工审批通过执行的事件,功能:插入审批表数据
 */
@Slf4j
@Component("dispatchFinishListener")
public class DispatchFinishListener {
    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private NcProgramApprovedService approvedService;
    @Autowired
    private ApproveRecordService approveRecordService;
    @Autowired
    private FlowProgramFileService flowProgramFileService;
    @Autowired
    private FlowCommonService flowCommonService;
    @Autowired
    private NcNodeService ncNodeService;
    @Autowired
    private NcNodeAutoCreateService ncNodeAutoCreateService;
 
    @Autowired
    private DataHandlerHelper dataHandlerHelper;
    /**
     * 在流程结束时自动调用,(配置在审批结束事件的executelistener中了)
     * @param execution 执行对象
     */
    public void handle(DelegateExecution execution) {
        // 执行业务逻辑
        String instId = execution.getProcessInstanceId();
        log.info("事件名称{},instid={}" , execution.getEventName(),instId);
 
        FlowProgramProperties props = flowCommonService.getProgramProperties(instId);
        FinishDataHandler dataHandler = dataHandlerHelper.getDataHandler(props);
 
        dataHandler.handleData(props);
        /*
        String programName = NcNodeService.genProgramName(props.getDrawingNo(),props.getProcessNo());
        if(FlowContants.N.equals(props.getIsTempFlow())) {
            createProgramNodes(props);
            //TODO 偏离单,和已经固化的程序,没有处理
 
            NcNode packageNode = ncNodeService.getProgramPackageByName(programName);
 
            addApproveTable(packageNode,props);
            updateApproveRecordNodeId(instId, packageNode.getId());
        }else{
            //临时流程,不处理树,只处理文件
            NcNode tempPkgNode = new NcNode();
            tempPkgNode.setNodeType(NcNode.TYPE_PROGRAM_PACKAGE);
            tempPkgNode.setIsLastEdition(0);
            tempPkgNode.setProcessNo(props.getProcessNo());
            tempPkgNode.setMachineCode(props.getMachineCode());
            tempPkgNode.setProcessName(props.getProcessName());
            tempPkgNode.setProcessEdition(props.getProcessEdition());
            tempPkgNode.setName(programName);
            tempPkgNode.setParentIds("0,4");
            tempPkgNode.setIsLocked(0);
            tempPkgNode.setCraftEdition(props.getCraftEdition());
            tempPkgNode.setDrawingNo(props.getDrawingNo());
            ncNodeService.save(tempPkgNode);
 
            List<FlowProgramFile> newFlowFileList = flowProgramFileService.listByProcessInstanceId(props.getProcessInstanceId());
            for(FlowProgramFile newFlowFile : newFlowFileList) {
                NcNode tempProgramNode = new NcNode();
                tempProgramNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
                tempProgramNode.setName(newFlowFile.getName());
                BeanUtils.copyProperties(tempPkgNode,tempProgramNode);
                tempProgramNode.setParentId(tempPkgNode.getId());
                tempProgramNode.setParentIds(tempPkgNode.getParentIds()+","+tempPkgNode.getId());
                tempProgramNode.setProcessInstanceId(props.getProcessInstanceId());
                tempProgramNode.setFlowProgramFileId(newFlowFile.getId());
            }
        }
 
        */
 
        log.info("流程已完成in DispatchFinishListener");
    }
 
    /**
     * 自动创建程序节点
     * @param progProperties 流程属性
     */
    /*
    void createProgramNodes(FlowProgramProperties progProperties){
        if(!FlowContants.Y.equals(progProperties.getHasCuredProgram())) {
            //试切或者偏离
            ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);
        }else{
            //有固化
            //TODO 还要区分是否可用判定是否可用。可用界
            if(FlowContants.N.equals(progProperties.getCureProgramUseable())) {
                //固化程序不可用,需要重新建立程序包名和文件节点;可用情况在流程审批中已经升级过节点了
                NcNode curedProgramPackage = ncNodeService.getById(Func.toLong(progProperties.getCuredNodeId()));
 
                NcNode newCuredPkgNode = new NcNode();
                BeanUtils.copyProperties(curedProgramPackage, newCuredPkgNode);
                EntityUtil.clearBaseProperties(newCuredPkgNode);
                newCuredPkgNode.setIsLastEdition(1);
                newCuredPkgNode.setIsLocked(0);
                newCuredPkgNode.upgradeVersionNumber();
                ncNodeService.save(newCuredPkgNode);
 
                //新的流程对应的文件更新到新节点下
                List<FlowProgramFile> newFlowFileList = flowProgramFileService.listByProcessInstanceId(progProperties.getProcessInstanceId());
                for (FlowProgramFile newFlowFile : newFlowFileList) {
                    NcNode newProgramNode = new NcNode();
                    BeanUtils.copyProperties(newCuredPkgNode, newProgramNode);
                    EntityUtil.clearBaseProperties(newProgramNode);
 
                    newProgramNode.setName(newFlowFile.getName());
                    newProgramNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
                    newProgramNode.setParentId(newCuredPkgNode.getId());
                    newProgramNode.setIsLastEdition(1);
                    newProgramNode.setIsLocked(0);
                    newProgramNode.setParentIds(newCuredPkgNode.getParentIds() + "," + newCuredPkgNode.getId());
                    newProgramNode.setFlowProgramFileId(newFlowFile.getId());
                    ncNodeService.save(newProgramNode);
                }
 
                //原节点更新为老版本,锁定
                curedProgramPackage.setIsLastEdition(0);
                curedProgramPackage.setIsLocked(1);
                ncNodeService.updateById(curedProgramPackage);
            }
        }
    }
    */
    /**
     * 保存审批完成的记录
     * @param packageNode
     * @param props
     */
    /*
    void addApproveTable(NcNode packageNode,FlowProgramProperties props){
        NcProgramApproved approved = new NcProgramApproved();
 
        approved.setProgramName(packageNode.getName());
        approved.setNcNodeId(packageNode.getId());//程序包节点id
        approved.setTitle(props.getTitle());
        approved.setProgrammerId(props.getProgrammerId());
        approvedService.save(approved);
 
    }
 
 
    void updateApproveRecordNodeId(String processInstanceId,Long nodeId){
        //更新审批记录的ncNodeId
        approveRecordService.lambdaUpdate()
            .eq(ApproveRecord::getProcessInstanceId, processInstanceId)
            .set(ApproveRecord::getNcNodeId,nodeId).update();
    }
 
     */
}