package com.estate.expert.admin.initdata; import com.estate.expert.admin.domain.common.EntityRef; import com.estate.expert.admin.domain.exam.record.error.ErrorLevel; import com.estate.expert.admin.domain.exam.record.error.ErrorRecordDto; import com.estate.expert.admin.domain.exam.record.review.ErrorReviewDto; import com.estate.expert.admin.domain.exam.record.review.ErrorReviewState; import com.estate.expert.admin.domain.exam.record.warning.WarningRecordDto; import com.estate.expert.admin.domain.exam.task.check.CheckTaskDto; import com.estate.expert.admin.domain.exam.task.pass.ByPassInfoDto; import com.estate.expert.admin.domain.exam.task.review.ReviewTaskDto; import com.estate.expert.admin.domain.project.info.ProjectDangerousType; import com.estate.expert.admin.domain.project.info.ProjectInfoDto; import com.estate.expert.admin.domain.project.info.ProjectSuperDangerousType; import com.estate.expert.admin.domain.standard.hierachy.Hierarchy; import com.estate.expert.admin.domain.standard.hierachy.HierarchyIds; import com.estate.expert.admin.domain.standard.problem.Problem; import com.estate.expert.admin.initdata.common.ImportUtil; import com.estate.expert.admin.service.*; import lombok.Builder; import lombok.extern.slf4j.Slf4j; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Set; @Slf4j @Builder public class ImportTaskAndRecord { UserService userService; CheckTaskService checkTaskService; ErrorRecordService errorRecordService; WarningRecordService warningRecordService; ProblemService problemService; DeviceService deviceService; HierarchyService hierarchyService; private ProjectInfoService projectInfoService; public void importCheckTasks() { var systemUser = userService.getSystemUser(); for(int i = 1; i <= 10; i++) { for(int j = 1; j <= 10; j++) { CheckTaskDto checkTaskDto = CheckTaskDto.builder() .assemblePlace("集合点_" + i + "_" + j) .date(LocalDate.now()) .project(EntityRef.builder().id(i).build()) .plan(EntityRef.builder().id(j).build()) .groupLeaders(Set.of(EntityRef.builder().id(1).build())) .groupMembers(Set.of(EntityRef.builder().id(2).build())) .drivers(List.of(EntityRef.builder().id(3).build())) .cars(List.of(EntityRef.builder().id(1).build())) .location("地点_" + i + "_" + j) .gps(new Double[]{116.0, 40.0}) .build(); checkTaskService.add(systemUser, checkTaskDto); } } } public void importProjectInfos() { log.info("Importing project infos..."); var systemUser = userService.getSystemUser(); var dtos = new ArrayList(); for(var checkTask : checkTaskService.findAll()) { var projectInfoDto = ProjectInfoDto.builder() .checkTask(EntityRef.builder().id(checkTask.getId()).build()) .detail("项目详情_任务_" + checkTask.getId()) .progress("项目进展_任务_" + checkTask.getId()) .dangerousOptions(new ProjectDangerousType[] {ProjectDangerousType.DEMOLITION}) .superDangerousOptions(new ProjectSuperDangerousType[] {ProjectSuperDangerousType.DEMOLITION}) .progressThisSeason("近一季度施工进展情况_任务_" + checkTask.getId()) .updateDate(LocalDate.now()) .build(); dtos.add(projectInfoDto); } projectInfoService.addDtos(systemUser, dtos); } // 从Id列表中随机选择n个Id private List randomSelect(List ids, int n) { if(ids.isEmpty()) return List.of(); var cloneIds = new ArrayList<>(ids); var result = new ArrayList(); var count = Math.min(n, 30); for(int i = 0; i < count; i++) { int index = (int)(Math.random() * cloneIds.size()); result.add(ids.get(index)); cloneIds.remove(index); } return result; } private String getProblemHierarchyName(Problem problem, Hierarchy hierarchy) { return hierarchy.getContent().get(problem.getHierarchyPath()).getName(); } private List getProblemHierarchyNames(Problem problem, Hierarchy hierarchy) { return hierarchy.getContent().get(problem.getHierarchyPath()).getNames(); } public void importRecords() { var hierarchy = hierarchyService.get(HierarchyIds.SYSTEM); for(var checkTask : checkTaskService.findAll()) { var errorRecords = new ArrayList(); var warningRecords = new ArrayList(); final int checkTaskId = checkTask.getId(); var problems = checkTaskService.getSystemProblems(checkTaskId, null); randomSelect(problems, checkTaskId).forEach(problem -> { var record = ErrorRecordDto.builder() .checkTask(EntityRef.builder().id(checkTaskId).build()) .problem(EntityRef.builder().id(problem.getId()).build()) .numberFactorIndex(0) .scaleFactorIndex(0) .level(ErrorLevel.values()[problem.getId() % ErrorLevel.values().length]) .problemPart("问题部位_" + problem.getId()) .hierarchyName(getProblemHierarchyName(problem, hierarchy)) .hierarchyNames(getProblemHierarchyNames(problem, hierarchy)) .suggestion("建议_" + problem.getId()) .remark("备注_" + problem.getId()) .images(List.of(EntityRef.of(1), EntityRef.of(4), EntityRef.of(5))) .build(); errorRecords.add(record); var warningRecord = WarningRecordDto.builder() .checkTask(EntityRef.builder().id(checkTaskId).build()) .problem(EntityRef.builder().id(problem.getId()).build()) .hierarchyName(getProblemHierarchyName(problem, hierarchy)) .hierarchyNames(getProblemHierarchyNames(problem, hierarchy)) .content("正确做法_" + problem.getId()) .remark("备注_" + problem.getId()) .images(List.of(EntityRef.of(1))) .build(); warningRecords.add(warningRecord); }); log.info("Importing system {} error records, {} warning to task {}", errorRecords.size(), warningRecords.size(), checkTaskId); errorRecordService.addDtos(userService.getSystemUser(), errorRecords); warningRecordService.addDtos(userService.getSystemUser(), warningRecords); } } public void importDeviceRecords() { for(var checkTask : checkTaskService.findAll()) { final int checkTaskId = checkTask.getId(); var errorRecords = new ArrayList(); var warningRecords = new ArrayList(); ImportUtil.doImport(i -> { var device = deviceService.get(i);; var deviceModel = checkTask.getPlan().getDeviceModel(); var problems = checkTaskService.getDeviceProblems(checkTaskId, device.getType().hierarchyPath()); var hierarchy = deviceModel.getHierarchy(); // 给每个设备添加问题 randomSelect(problems, checkTaskId).forEach(problem -> { var record = ErrorRecordDto.builder() .checkTask(EntityRef.builder().id(checkTaskId).build()) .device(EntityRef.builder().id(i).build()) .problem(EntityRef.builder().id(problem.getId()).build()) .numberFactorIndex(0) .scaleFactorIndex(0) .level(ErrorLevel.values()[problem.getId() % ErrorLevel.values().length]) .problemPart("问题部位_" + problem.getId()) .hierarchyName(getProblemHierarchyName(problem, hierarchy)) .hierarchyNames(getProblemHierarchyNames(problem, hierarchy)) .suggestion("建议_" + problem.getId()) .remark("备注_" + problem.getId()) .images(List.of(EntityRef.of(1), EntityRef.of(4))) .build(); errorRecords.add(record); // 目前设备不需要正确做法 // var warningRecord = WarningRecordDto.builder() // .device(EntityRef.builder().id(i).build()) // .checkTask(EntityRef.builder().id(checkTaskId).build()) // .problem(EntityRef.builder().id(problem.getId()).build()) // .hierarchyName(getProblemHierarchyName(problem, hierarchy)) // .device(EntityRef.builder().id(1).build()) // .content("正确做法_" + problem.getId()) // .remark("备注_" + problem.getId()) // .build(); // warningRecords.add(warningRecord); }); }); log.info("Importing device {} error records, {} warning to checkTask {}", errorRecords.size(), warningRecords.size(), checkTask.getId()); errorRecordService.addDtos(userService.getSystemUser(), errorRecords); warningRecordService.addDtos(userService.getSystemUser(), warningRecords); } } public void importByPassInfo(){ log.info("Importing by pass info..."); for(var checkTask : checkTaskService.findAll()) { var byPassInfo = ByPassInfoDto.builder() .advice("建议_" + checkTask.getId()) .conclusion("结论_" + checkTask.getId()) .systemHierarchyPaths(List.of("/0/0/0/0/0/0", "/0/0/0/0/1/0")) .build(); checkTaskService.setByPassInfo(checkTask.getId(), byPassInfo); } } public void closeCheckTasks() { log.info("Closing check tasks..."); for(var checkTask : checkTaskService.findAll()) { checkTaskService.close(checkTask.getId()); } } public void importReviewTasks() { var systemUser = userService.getSystemUser(); var checkTasks = checkTaskService.findAll(); for(var checkTask : checkTasks) { var reviewTaskDto = ReviewTaskDto.builder() .assemblePlace("集合点_" + checkTask.getId()) .reviewProblems(List.of(List.of(ErrorLevel.P1, ErrorLevel.P2, ErrorLevel.P3, ErrorLevel.P4).toArray(new ErrorLevel[0]))) .date(LocalDate.now()) .groupLeaders(Set.of(EntityRef.builder().id(1).build())) .groupMembers(Set.of(EntityRef.builder().id(2).build())) .drivers(List.of(EntityRef.builder().id(3).build())) .cars(List.of(EntityRef.builder().id(1).build())) .build(); checkTaskService.addReviewTask(systemUser, checkTask.getId(), reviewTaskDto); } } public void importReviewRecords() { var systemUser = userService.getSystemUser(); for(var checkTask : checkTaskService.findAll()) { log.info("Importing review records to task {}", checkTask.getId()); errorRecordService.listSystemErrors(checkTask.getId()).forEach(errorRecord -> { var reviewRecord = ErrorReviewDto.builder() .content("复核内容_" + errorRecord.getId()) .state(ErrorReviewState.REFORMED) .images(List.of(EntityRef.of(1))) .build(); errorRecordService.addReview(systemUser, errorRecord.getId(), reviewRecord); }); } } public void closeReviewTasks() { for(var checkTask : checkTaskService.findAll()) { checkTaskService.closeReviewTask(checkTask.getId()); } } }