yangys
2025-09-17 3907579a69079b5ee462d17799e3995d9cd77fd4
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
 
package org.springblade.mdm.gkw.programnode.service;
 
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BizServiceImpl;
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.commons.contants.ParamConstants;
import org.springblade.mdm.commons.service.ParamService;
import org.springblade.mdm.machinefile.entity.MachineFile;
import org.springblade.mdm.gkw.programnode.entity.ProgramNode;
import org.springblade.mdm.gkw.programnode.entity.TreeDept;
import org.springblade.mdm.gkw.programnode.mapper.ProgramNodeMapper;
import org.springblade.mdm.gkw.programnode.vo.ProgramNodeVO;
import org.springframework.stereotype.Service;
 
import java.util.*;
 
/**
 * 程序节点
 *
 * @author yangys
 */
@Slf4j
@Service
@AllArgsConstructor
public class ProgramNodeService extends BizServiceImpl<ProgramNodeMapper, ProgramNode> {
 
    private final ParamService paramService;
    private final TreeDeptService treeDeptService;
    private final MachineService machineService;
    private static final String DEFAULT_WORKSHOP_VALUE = "4";
    /**
    /**
     * 懒加载列表
     * @param parentId 父节点ID
     * @return
     */
    public List<ProgramNodeVO> lazyList(Long parentId) {
        // 判断点击搜索但是没有查询条件的情况
        if (Func.isEmpty(parentId)) {
            parentId = 0L;
        }
 
        return baseMapper.lazyList(parentId);
    }
 
    /**
     * 生成工控网树
     * @return 树根节点集合
     */
    public List<ProgramNodeVO> loadTree(String includeSend) {
 
        Integer workshopDictVal = Func.toInt(paramService.getParamValue(ParamConstants.WORKSHOP_DICT_KEY,DEFAULT_WORKSHOP_VALUE));
        Long rootDeptId = Func.toLong(paramService.rootDeptId());
        TreeDept root =  treeDeptService.getById(rootDeptId);
        List<ProgramNodeVO> roots = new ArrayList<>();
        ProgramNodeVO rootVO = new ProgramNodeVO();
        rootVO.setNodeType("factory");
        rootVO.setName(root.getDeptName());
        rootVO.setId(rootVO.getId());
        rootVO.setMachineCode("FAC_"+rootVO.getId());
        roots.add(rootVO);
 
        List<TreeDept> workshops = treeDeptService.lambdaQuery().eq(TreeDept::getDeptCategory,workshopDictVal)
            .orderByAsc(TreeDept::getSort).list();
 
        List<ProgramNodeVO> workshopsVOList = new ArrayList<>();
        for(TreeDept workshop : workshops) {
            ProgramNodeVO node = new ProgramNodeVO();
            node.setId(String.valueOf(workshop.getId()));
            node.setName(workshop.getDeptName());
            node.setNodeType("workshop");
            node.setMachineCode("WS_"+node.getId());
        //    roots.add(node);
            workshopsVOList.add(node);
            //加入车间下的工段
            List<TreeDept> gongduanList = treeDeptService.lambdaQuery().eq(TreeDept::getParentId,workshop.getId())
                .orderByAsc(TreeDept::getSort).list();
            for(TreeDept gd : gongduanList){
                ProgramNodeVO nodeGd = new ProgramNodeVO();
                nodeGd.setId(String.valueOf(gd.getId()));
                nodeGd.setName(gd.getDeptName());
                nodeGd.setParentId(gd.getParentId());
                nodeGd.setNodeType("seg");
                nodeGd.setMachineCode("SEG_"+nodeGd.getId());
                node.addChildren(nodeGd);
 
                //加入工段下的机床
                machineService.lambdaQuery().eq(Machine::getOwnerDept,gd.getId()).list().forEach(machine -> {
                    ProgramNodeVO nodeMachine = new ProgramNodeVO();
                    nodeMachine.setName(machine.getCode());
                    nodeMachine.setId(String.valueOf(machine.getId()));
                    nodeMachine.setMachineCode(machine.getCode());
                    nodeMachine.setNodeType("machine");
                    addFolderNodes(nodeMachine,includeSend);
 
                    nodeGd.addChildren(nodeMachine);
                });
            }
        }
 
        rootVO.setChildren(workshopsVOList);
 
        return roots;
    }
 
    /**
     * 加入3个文件夹节点
     * @param nodeMachine 机床节点
     */
    void addFolderNodes(ProgramNodeVO nodeMachine,String includeSend){
 
        List<ProgramNodeVO> dirNodes = new ArrayList<>();
        if(!"0".equals(includeSend)){
            ProgramNodeVO sendNode = new ProgramNodeVO();
            sendNode.setId(nodeMachine.getId()+"_"+MachineFile.DIR_TYPE_SEND);
            sendNode.setName("SEND");
            sendNode.setMachineCode(nodeMachine.getMachineCode());
            sendNode.setDirType(MachineFile.DIR_TYPE_SEND);
            sendNode.setNodeType("dir");
 
            dirNodes.add(sendNode);
        }
 
 
        ProgramNodeVO recNode = new ProgramNodeVO();
        recNode.setId(nodeMachine.getId()+"_"+MachineFile.DIR_TYPE_REC);
        recNode.setName("REC");
        recNode.setMachineCode(nodeMachine.getMachineCode());
        recNode.setDirType(MachineFile.DIR_TYPE_REC);
        recNode.setNodeType("dir");
        dirNodes.add(recNode);
 
        ProgramNodeVO tempNode = new ProgramNodeVO();
        tempNode.setId(nodeMachine.getId()+"_"+MachineFile.DIR_TYPE_TEMP);
        tempNode.setName("TEMP");
        tempNode.setMachineCode(nodeMachine.getMachineCode());
        tempNode.setDirType(MachineFile.DIR_TYPE_TEMP);
        tempNode.setNodeType("dir");
        dirNodes.add(tempNode);
 
        nodeMachine.setChildren(dirNodes);
    }
 
    /**
     * 树查询
     * @param keyword 关键字
     * @return 搜索道德机器列表
     */
    public List<String> treeSearch(String keyword) {
        return machineService.lambdaQuery()
            .like(Machine::getCode,keyword)
            .list().stream().map(m -> {return Func.toStr(m.getId());}).toList();
    }
}