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(); // 遍历目录下面的所有目录 listDir(rootDir, dirPaths); var model = new SysModel(); var hierarchyPaths = new ArrayList(); 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 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); } } } }