yangys
2025-08-23 f13fcaa8c4b0f413d8ee100adcb67669db183c68
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
package org.springblade.mdm.flow.excution.cure;
 
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.basesetting.machine.MachineService;
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.excution.dispatch.FinishDataHandler;
import org.springblade.mdm.flow.service.ApproveRecordService;
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("deviationCureFinishDataHandler")
public class DeviationCureFinishDataHandler implements FinishDataHandler {
    @Autowired
    private NcProgramApprovedService approvedService;
    @Autowired
    private ApproveRecordService approveRecordService;
    @Autowired
    private FlowProgramFileService flowProgramFileService;
    @Autowired
    private NcNodeService nodeService;
    @Autowired
    private NcNodeAutoCreateService ncNodeAutoCreateService;
    @Autowired
    private MachineService machineService;
 
    /**
     * cureFinishOperateTask调用,偏离单回传审批完成处理业务
     * @param props 属性
     */
    public void handleData(FlowProgramProperties props) {
        // 执行业务逻辑
        String instId = props.getProcessInstanceId();
        NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId,  props.getProcessInstanceId()).one();
 
        pkgNode.lock();
        pkgNode.setIsLastEdition(0);
        nodeService.updateById(pkgNode);
 
        NcNode newPkgNode = new NcNode();
        BeanUtils.copyProperties(pkgNode, newPkgNode);
        EntityUtil.clearBaseProperties(newPkgNode);
        newPkgNode.setIsLastEdition(1);
        newPkgNode.upgradeVersionNumber();
 
        nodeService.save(newPkgNode);
 
        //处理程序包下层的程序节点111
        List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,pkgNode.getId()).list();
        FlowProgramFile pfile;
        for(NcNode oldProgramNode : oriProgramNodes){
            //oldProgramNode.setIsLastEdition(0);
            //oldProgramNode.setVersionNumber(pkgNode.getVersionNumber());
            pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
            if(!pfile.isProgram()){
                //当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,复制到固化树下,两个网络之间只交换程序文件,其他文件只能保留
                //oldProgramNode.setIsLastEdition(1);
                //其他文件,需要复制到新建的固化节点下
                NcNode newOtherFileNode = new NcNode();
                BeanUtils.copyProperties(oldProgramNode,newOtherFileNode);
                EntityUtil.clearBaseProperties(newOtherFileNode);
                newOtherFileNode.setParentId(newPkgNode.getId());
                newOtherFileNode.setParentIds(newPkgNode.getParentIds()+","+newPkgNode.getId());
                newOtherFileNode.setIsLastEdition(1);
                nodeService.save(newOtherFileNode);
            }
 
        }
        nodeService.updateBatchById(oriProgramNodes);
 
        //新的文件作为最新版本
        List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list();
        for(FlowProgramFile flowProgramFile : files){
            NcNode newProgNode = new NcNode();
            BeanUtils.copyProperties(newPkgNode, newProgNode);
            EntityUtil.clearBaseProperties(newProgNode);
 
            newProgNode.setName(flowProgramFile.getName());
            newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
            newProgNode.setParentId(newPkgNode.getId());
            newProgNode.setParentIds(newPkgNode.getParentIds()+","+newPkgNode.getId());
            newProgNode.setIsLastEdition(1);
            newProgNode.setVersionNumber(newPkgNode.getVersionNumber());
            newProgNode.setFlowProgramFileId(flowProgramFile.getId());
            newProgNode.setIsCured(0);
            nodeService.save(newProgNode);
 
        }
 
        addApproveTable(pkgNode,props);
        updateApproveRecordNodeId(instId, pkgNode.getId());
        log.info("偏离回传Listener完成");
    }
 
    /**
     * 保存审批完成的记录
     * @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();
    }
}