liujie
2026-02-11 a6d2a0ebcb6d9cc8c3c2cbd274e4b942830ee767
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
package com.estate.expert.admin.initdata;
 
import com.estate.expert.admin.domain.common.request.PageReq;
import com.estate.expert.admin.domain.standard.hierachy.HierarchyIds;
import com.estate.expert.admin.domain.standard.model.system.SysModel;
import com.estate.expert.admin.domain.standard.problem.ProblemDto;
import com.estate.expert.admin.initdata.common.ImportUtil;
import com.estate.expert.admin.service.HierarchyService;
import com.estate.expert.admin.service.ProblemService;
import com.estate.expert.admin.service.UserService;
import com.estate.expert.admin.service.model.DeviceModelService;
import com.estate.expert.admin.service.model.MeasureModelService;
import com.estate.expert.admin.service.model.SystemModelService;
import lombok.Builder;
import lombok.extern.slf4j.Slf4j;
 
import java.io.File;
import java.util.ArrayList;
import java.util.List;
 
/**
 * 导入模型任务
 */
@Builder
@Slf4j
public class ImportModelJob {
 
    private UserService userService;
 
    private HierarchyService hierarchyService;
 
    private SystemModelService systemModelService;
 
    private DeviceModelService deviceModelService;
 
    private MeasureModelService measureModelService;
 
    private ProblemService problemService;
 
    public void createDefaultModels() {
        // 初始化默认模型
//        systemModelService.createDefaultModel();
//        deviceModelService.createDefaultModel();
        measureModelService.createDefaultModel();
    }
 
    public void importSystemModel() {
 
        // 导入衡泰专家模型
        var model = loadModel("衡泰专家","/衡泰专家/层", HierarchyIds.SYSTEM);
        systemModelService.add(userService.getSystemUser(), model);
    }
 
    /**
     * 导入衡泰模型
     */
    private SysModel loadModel(String name, String root, Integer hierarchyId){
        var hierarchy = hierarchyService.get(hierarchyId);
        var rootDir = new File(ImportUtil.docsRoot(root));
        var dirPaths = new ArrayList<String>();
 
        // 遍历目录下面的所有目录
        listDir(rootDir, dirPaths);
 
        var model = new SysModel();
        var hierarchyPaths = new ArrayList<String>();
        for (String dirPath : dirPaths) {
            var hierarchyPath = dirPath.substring(dirPath.indexOf(root) + root.length());
            var node = hierarchy.getContent().getByNamePath(hierarchyPath);
            if(node == null){
                log.error("node is null, filePath: " + hierarchyPath);
                continue;
            }
            hierarchyPaths.add(node.getPath());
        }
        model.setName(name);
        model.setHierarchyPaths(hierarchyPaths);
 
        // add problems
        var problems = problemService.list(hierarchyId, hierarchyPaths, null, PageReq.of(0, 10000000));
        var problemIds = problems.getList().stream().map(ProblemDto::getId).toList();
        model.setHierarchy(hierarchy);
        model.setProblemIds(problemIds);
        model.setVersion(0);
        return model;
    }
 
    private void listDir(File rootDir, List<String> dirPaths){
        File[] files = rootDir.listFiles();
        if(files == null || files.length == 0){
            dirPaths.add(rootDir.getAbsolutePath());
            return;
        }
        for (File f : files) {
            if (f.isDirectory()) {
                listDir(f, dirPaths);
            }
        }
    }
}