package com.estate.expert.admin.initdata; import com.estate.expert.admin.domain.business.device.usage.DeviceUsageDto; import com.estate.expert.admin.domain.common.EntityRef; import com.estate.expert.admin.domain.plan.PlanDto; import com.estate.expert.admin.domain.plan.PlanType; import com.estate.expert.admin.domain.project.ProjectDto; import com.estate.expert.admin.domain.project.detail.AddressInfo; import com.estate.expert.admin.domain.project.detail.CompanyInfo; import com.estate.expert.admin.domain.project.enums.ProjectType; import com.estate.expert.admin.domain.project.enums.ProjectUsageType; 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.initdata.common.ImportUtil; import com.estate.expert.admin.service.*; import com.estate.expert.admin.service.expert.DeviceExpertService; import com.estate.expert.admin.service.expert.SysExpertService; import com.estate.expert.admin.service.model.DeviceModelService; import com.estate.expert.admin.service.model.SystemModelService; import lombok.Builder; import lombok.extern.slf4j.Slf4j; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @Builder @Slf4j public class ImportPlanAndProject { private UserService userService; private PlanService planService; private ProjectService projectService; private ProjectInfoService projectInfoService; private DeviceModelService deviceModelService; private SystemModelService systemModelService; private SysExpertService sysExpertService; private DeviceExpertService deviceExpertService; private DeviceUsageService deviceUsageService; private DeviceService deviceService; public void importProjects() { log.info("Importing projects..."); var dateFormat = new SimpleDateFormat("yyyyMMddHHmm"); var itemCodePrefix = dateFormat.format(new Date()); ImportUtil.doImport(i -> { var project = ProjectDto.builder() .name("测试项目_" + i) .type(ProjectType.HOUSE_CONSTRUCTION) .usageType(ProjectUsageType.RESIDENTIAL) .client(EntityRef.builder().id(1).build()) .itemCode(itemCodePrefix + String.format("%02d", i)) .departmentPath("/0") .addressInfo(AddressInfo.builder() .province("浙江省") .city("杭州市") .district("西湖区") .detail("古荡街道" + i + "号") .build()) .constructionCompanyInfo(CompanyInfo.builder() .name("测试建设公司") .leader("张三") .phone("12345678901") .build()) .supervisorCompanyInfo(CompanyInfo.builder() .name("测试监理公司") .leader("李四") .phone("12345678902") .build()) .developmentCompanyInfo(CompanyInfo.builder() .name("测试开发公司") .leader("王五") .phone("12345678903") .build()) .projectCost(1000000) .constructionLicense("TEST_LICENSE_" + i) .constructionLicenseFiles(List.of(EntityRef.of(1))) .branchCompany("测试分公司") .build(); var prj = projectService.add(userService.getSystemUser(), project); var info = ProjectInfoDto.builder() .project(EntityRef.builder().id(prj.getId()).build()) .detail("测试项目详情_" + i) .progress("测试项目进展_" + i) .progressThisSeason("测试本季度进展_" + i) .updateDate(LocalDate.now()) .dangerousOptions(new ProjectDangerousType[] {ProjectDangerousType.DEMOLITION}) .superDangerousOptions(new ProjectSuperDangerousType[] {ProjectSuperDangerousType.DEMOLITION}) .build(); projectInfoService.add(userService.getSystemUser(), info); }); } public void importPlans() { ImportUtil.doImport( index -> { var plan = PlanDto.builder() .name("测试计划_" + index) .client(EntityRef.builder().id(1).build()) .type(PlanType.values() [index % PlanType.values().length]) .systemModel(EntityRef.builder().id(systemModelService.getDefaultModel().getId()).build()) .systemScoreExpert(EntityRef.builder().id(sysExpertService.getDefaultExpert().getId()).build()) .systemFuzzyExpert(EntityRef.builder().id(sysExpertService.getDefaultExpert().getId()).build()) .deviceModel(EntityRef.builder().id(deviceModelService.getDefaultModel().getId()).build()) .deviceFuzzyExpert(EntityRef.builder().id(deviceExpertService.getDefaultExpert().getId()).build()) .deviceScoreExpert(EntityRef.builder().id(deviceExpertService.getDefaultExpert().getId()).build()) .build(); planService.add(userService.getSystemUser(), plan); }); } public void importDeviceUsage() { ImportUtil.doImport( index -> { var usage = DeviceUsageDto.builder() .device(EntityRef.builder().id(index).build()) .project(EntityRef.builder().id(1).build()) .properties(buildDeviceUsageMap(index)) .build(); deviceUsageService.add(userService.getSystemUser(), usage); }); } private Map buildDeviceUsageMap(int index) { var device = deviceService.get(index); var deviceUsageForm = deviceService.deviceUsageForm(device.getType()); var properties = new HashMap(); deviceUsageForm.forEach(group -> { group.getItems().forEach(item -> { switch (item.getType()) { case STRING: properties.put(item.getName(), item.getName() + "xxx"); break; case INT: properties.put(item.getName(), "1"); break; case ENUM: properties.put(item.getName(), item.getOptions()[0]); break; case DATE: properties.put(item.getName(), "2024-01-01"); break; } }); }); return properties; } }