diff --git a/src/main/java/com/xdap/self_development/controller/AnalysisCommonController.java b/src/main/java/com/xdap/self_development/controller/AnalysisCommonController.java index 268f6da..f240375 100644 --- a/src/main/java/com/xdap/self_development/controller/AnalysisCommonController.java +++ b/src/main/java/com/xdap/self_development/controller/AnalysisCommonController.java @@ -3,12 +3,14 @@ package com.xdap.self_development.controller; import com.definesys.mpaas.common.http.Response; import com.xdap.self_development.controller.request.AnalysisRequest; import com.xdap.self_development.controller.request.ReportRequest; +import com.xdap.self_development.pojo.DataEntryEngineModelPojo; import com.xdap.self_development.pojo.view.AnalysisModelParamterView; import com.xdap.self_development.pojo.view.AnalysisModelParamterViewAndParam; import com.xdap.self_development.service.AnalysisCommonParametersService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.validation.constraints.NotEmpty; import java.util.ArrayList; import java.util.List; @@ -28,11 +30,20 @@ public class AnalysisCommonController { //统计分析图表 @PostMapping("/showReport") - public Response showReport(@RequestBody ReportRequest request) { - AnalysisModelParamterViewAndParam andParam = analysisCommonParametersService.showReport(request); + public Response showReport(@NotEmpty @RequestBody List models) { + AnalysisModelParamterViewAndParam andParam = analysisCommonParametersService.showReport(models); return Response.ok().data(andParam); } + // 模糊查询机型 + @PostMapping("/selectModelByLike") + public Response selectModelByLike( + @RequestBody ReportRequest request + ) { + List lists = analysisCommonParametersService.selectModelByLike(request); + return Response.ok().data(lists); + } + // //模糊查询下拉列表 // @GetMapping("/analysisShowList") // public Response analysisShowList(@RequestParam("attribute") String attribute) { diff --git a/src/main/java/com/xdap/self_development/controller/DeleteController.java b/src/main/java/com/xdap/self_development/controller/DeleteController.java index 71bb89d..796b488 100644 --- a/src/main/java/com/xdap/self_development/controller/DeleteController.java +++ b/src/main/java/com/xdap/self_development/controller/DeleteController.java @@ -10,10 +10,14 @@ import com.xdap.self_development.common.UserPermissionGetter; import com.xdap.self_development.config.BusinessDatabase; import com.xdap.self_development.controller.request.ModelComparisonExportRequest; import com.xdap.self_development.feign.ApaasMyTokenFeign; +import com.xdap.self_development.pojo.DataEntryEngineModelPojo; +import com.xdap.self_development.pojo.EngineParamDetailPojo; import com.xdap.self_development.pojo.ModelDepUserRolePojo; import com.xdap.self_development.pojo.view.MenuParamView; +import com.xdap.self_development.pojo.view.TcQueryView; import com.xdap.self_development.schedule.ParameterValueCalculationTimer; import com.xdap.self_development.service.ModelRoleService; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -24,9 +28,12 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Slf4j @RestController @@ -35,6 +42,55 @@ public class DeleteController { @Resource private BusinessDatabase yourDataService; + @PostMapping("queryTc") + public Response queryTc( + @RequestBody List models + ) { + try { + Map engineModelPojoMap = yourDataService.getBusinessDatabase() + .in("id", models) + .doQuery(DataEntryEngineModelPojo.class).stream() + .collect(Collectors.toMap(DataEntryEngineModelPojo::getId, model -> model)); + List allEngineParamDetails = yourDataService.getBusinessDatabase() + .in("engine_model_id", models) + .doQuery(EngineParamDetailPojo.class); + Map> engineParamDetailMap = allEngineParamDetails.stream() + .collect(Collectors.groupingBy(EngineParamDetailPojo::getEngineModelId)); + List queryModels = new ArrayList<>(); + engineParamDetailMap.forEach((key, value) -> { + value.forEach(param -> { + QueryModel queryModel = new QueryModel(); + queryModel.setZtj(engineModelPojoMap.get(key).getProductNumber()); + queryModel.setIdattrtbutehame(param.getParameterName()); + queryModel.setLbjmc(param.getPartsName()); + queryModels.add(queryModel); + }); + }); + + List queryTc = yourDataService.getBusinessDatabase() + .viewQueryMode(true) + .view("queryTc") + .setVar("queryModels", queryModels) + .doQuery(TcQueryView.class); + + return Response.ok().data(queryTc); + } catch (Exception e) { + log.error("查询TC失败", e); + return Response.error("查询TC失败:" + e.getMessage()); + } + } + + @Data + static class QueryModel implements Serializable { + private static final long serialVersionUID = 1L; + // 状态机 + private String ztj; + // 零件名 + private String lbjmc; + // 参数名 + private String idattrtbutehame; + } + @PostMapping("/excel/import") public String importExcel(@RequestParam("file") MultipartFile file) { // 校验文件 diff --git a/src/main/java/com/xdap/self_development/pojo/Parameter.java b/src/main/java/com/xdap/self_development/pojo/Parameter.java index f848cc5..e65956c 100644 --- a/src/main/java/com/xdap/self_development/pojo/Parameter.java +++ b/src/main/java/com/xdap/self_development/pojo/Parameter.java @@ -9,6 +9,8 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @SQLQuery(value = { + @SQL(view = "selectTcParameter", + sql = "SELECT p.* FROM yfsjglpt_model_template t LEFT JOIN yfsjglpt_model_parameter_and_template pat ON t.id = pat.template_id LEFT JOIN yfsjglpt_model_parameter p ON pat.parameter_id = p.id WHERE t.status = 'COMPLETE' AND p.parameter_source = '数据平台手工录入'"), @SQL(view = "selectParametersByTIdAndCreateBy", sql = "select p.* from yfsjglpt_model_parameter p left join yfsjglpt_model_parameter_and_template tap on p.id = tap.parameter_id where tap.template_id = #templateId and p.created_by = #createdBy order by p.parameter_number"), @SQL(view = "selectParametersByTId", diff --git a/src/main/java/com/xdap/self_development/pojo/view/TcQueryView.java b/src/main/java/com/xdap/self_development/pojo/view/TcQueryView.java new file mode 100644 index 0000000..579443d --- /dev/null +++ b/src/main/java/com/xdap/self_development/pojo/view/TcQueryView.java @@ -0,0 +1,21 @@ +package com.xdap.self_development.pojo.view; + +import com.definesys.mpaas.query.annotation.SQL; +import com.definesys.mpaas.query.annotation.SQLQuery; +import lombok.Data; + +@SQLQuery(value = { + @SQL(view = "queryTc", + sql = "SELECT sap.ztj as productNumber, sap.lbjmc as partsName, tc.idattrtbutehame as parameterName, tc.fieldvalue as parameterValue FROM ads_prd_f_yfsjglpt_fdjlbjcjb sap JOIN ads_prd_f_tc_flsxb tc ON sap.lbjth = tc.pitem_id WHERE (sap.ztj, sap.lbjmc, tc.idattrtbutehame) IN (#queryModels)") +}) +@Data +public class TcQueryView { + // 状态机 + private String productNumber; + // 参数名 + private String parameterName; + // 参数值 + private String parameterValue; + // 零件名 + private String partsName; +} diff --git a/src/main/java/com/xdap/self_development/service/AnalysisCommonParametersService.java b/src/main/java/com/xdap/self_development/service/AnalysisCommonParametersService.java index 43c7b71..1034141 100644 --- a/src/main/java/com/xdap/self_development/service/AnalysisCommonParametersService.java +++ b/src/main/java/com/xdap/self_development/service/AnalysisCommonParametersService.java @@ -4,6 +4,7 @@ package com.xdap.self_development.service; import com.xdap.self_development.controller.request.AnalysisRequest; import com.xdap.self_development.controller.request.ReportRequest; +import com.xdap.self_development.pojo.DataEntryEngineModelPojo; import com.xdap.self_development.pojo.view.AnalysisModelParamterView; import com.xdap.self_development.pojo.view.AnalysisModelParamterViewAndParam; @@ -14,7 +15,8 @@ public interface AnalysisCommonParametersService { //查询常用参数返回机型数据 ArrayList selectModelParamByCommon(AnalysisRequest analysisRequest); - AnalysisModelParamterViewAndParam showReport(ReportRequest analysisRequest); + AnalysisModelParamterViewAndParam showReport(List models); AnalysisModelParamterViewAndParam showReportParamList(ReportRequest analysisRequest); + List selectModelByLike(ReportRequest request); } diff --git a/src/main/java/com/xdap/self_development/service/EngineParamDetailService.java b/src/main/java/com/xdap/self_development/service/EngineParamDetailService.java index a5e9583..1d94a2e 100644 --- a/src/main/java/com/xdap/self_development/service/EngineParamDetailService.java +++ b/src/main/java/com/xdap/self_development/service/EngineParamDetailService.java @@ -37,7 +37,6 @@ public interface EngineParamDetailService { void updateToInsertFiledBy(List engineParamDetailPojos, String userID); List selectAllByNewVersion(); - List selectNeedFillByNewVersion(); List selectAllAndTcByNewVersion(); /** diff --git a/src/main/java/com/xdap/self_development/service/impl/AnalysisCommonParametersServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/AnalysisCommonParametersServiceImpl.java index 7096761..99fbffa 100644 --- a/src/main/java/com/xdap/self_development/service/impl/AnalysisCommonParametersServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/AnalysisCommonParametersServiceImpl.java @@ -1,36 +1,36 @@ package com.xdap.self_development.service.impl; -import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.alibaba.nacos.client.naming.utils.CollectionUtils; import com.xdap.self_development.config.BusinessDatabase; import com.xdap.self_development.controller.request.*; -import com.xdap.self_development.enums.ParamPermissionEnum; import com.xdap.self_development.exception.CommonException; import com.xdap.self_development.pojo.*; -import com.xdap.self_development.pojo.dto.PageResultDTO; import com.xdap.self_development.pojo.view.AnalysisModelParamterView; import com.xdap.self_development.pojo.view.AnalysisModelParamterViewAndParam; -import com.xdap.self_development.pojo.view.MenuParamView; import com.xdap.self_development.service.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.RequestBody; import java.util.*; -import java.util.function.Predicate; import java.util.stream.Collectors; +import java.util.stream.Stream; @Slf4j @Service public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParametersService { + // 机型处理批次大小 + @Value("${tc.query.model.batch.size:20}") + private Integer modelBatchSize; + @Autowired BusinessDatabase businessDatabase; @Autowired @@ -80,9 +80,9 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame } @Override - public AnalysisModelParamterViewAndParam showReport(ReportRequest request) { + public AnalysisModelParamterViewAndParam showReport(List models) { - return showReport2(request); + return showReport3(models); } @@ -96,7 +96,28 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame return null; } - public AnalysisModelParamterViewAndParam showReport1(ReportRequest request) { + @Override + public List selectModelByLike(ReportRequest request) { + if (request.getEngineCapacityMax() < request.getEngineCapacityMin()) { + throw new CommonException("排量范围设置错误"); + } + return new ArrayList<>(businessDatabase.getBusinessDatabase() + .like("model_name", request.getModelName()) + .like("plate", request.getPlate()) + .like("platform", request.getPlatform()) + .like("series", request.getSeries()) + .like("project_name", request.getProjectName()) + .like("project_number", request.getProjectNumber()) + .like("emission", request.getEmission()) + .like("burn_type", request.getBurnType()) + .conjuctionOr() + .lteq("engine_capacity", request.getEngineCapacityMax()) + .and() + .gteq("engine_capacity", request.getEngineCapacityMin()) + .doQuery(DataEntryEngineModelPojo.class)); + } +/* + public AnalysisModelParamterViewAndParam showReport1(List modelIds) { long startTime = System.currentTimeMillis(); List queryResult = businessDatabase.getBusinessDatabase() // .eq("yc_or_oth", request.getYcOrOth()) @@ -155,45 +176,21 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame // throw new RuntimeException(String.valueOf(endTime-startTime)); return andParam; } - - public AnalysisModelParamterViewAndParam showReport2(@RequestBody ReportRequest request) { - +*/ + public AnalysisModelParamterViewAndParam showReport2(ReportRequest request) { // 查询所有符合条件的机型 - List queryResult = businessDatabase.getBusinessDatabase() - .like("model_name", request.getModelName()) - .like("plate", request.getPlate()) - .like("platform", request.getPlatform()) - .like("series", request.getSeries()) - .like("project_name", request.getProjectName()) - .like("project_number", request.getProjectNumber()) - .like("emission", request.getEmission()) - .like("burn_type", request.getBurnType()) - .doQuery(DataEntryEngineModelPojo.class); - - // 过滤发动机排量 - Double engineCapacityMin = request.getEngineCapacityMin(); - Double engineCapacityMax = request.getEngineCapacityMax(); - List engineModelPojos = queryResult; - if (ObjectUtils.isNotEmpty(engineCapacityMin) && ObjectUtils.isNotEmpty(engineCapacityMax)) { - engineModelPojos = queryResult.stream().filter(dataEntryEngineModelPojo -> { - String engineCapacity = dataEntryEngineModelPojo.getEngineCapacity(); - Double ec = extractDisplacement(engineCapacity); - if (ec == null) { - return false; - } - return (Double.compare(ec, engineCapacityMin) >= 0 && Double.compare(ec, engineCapacityMax) < 0); - }).collect(Collectors.toList()); - } + List engineModelPojos = selectModelByLike(request); if (engineModelPojos.isEmpty()) { - return new AnalysisModelParamterViewAndParam(); + throw new CommonException("没有找到符合条件的机型"); } - // 批量查询 EngineParamDetailPojo + // 获取机型id列表 Set modelIds = engineModelPojos.stream() .map(DataEntryEngineModelPojo::getId) .collect(Collectors.toSet()); + // 获取数据平台机型的参数 List allEngineParamDetails = businessDatabase.getBusinessDatabase() .in("engine_model_id", modelIds) .doQuery(EngineParamDetailPojo.class); @@ -226,7 +223,7 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame // 过滤版本号 Integer versionNumber = engineModelPojo.getVersionNumber(); pojoList = pojoList.stream() - .filter(x -> x.getMajorVersion() == versionNumber) + .filter(x -> Objects.equals(x.getMajorVersion(), versionNumber)) .collect(Collectors.toList()); // 添加 TC 数据 @@ -262,32 +259,99 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame return ALL_NUMBER_PATTERN.matcher(str.trim()).matches(); } - public List selectParamOnlyNum(ArrayList analysisModelParamterViews) { - List list = new ArrayList<>(); - for (AnalysisModelParamterView analysisModelParamterView : analysisModelParamterViews) { - for (EngineParamDetailPojo pojo : analysisModelParamterView.getPojos()) { - String parameterValue = pojo.getParameterValue(); - if (ObjectUtils.isEmpty(parameterValue) && isNumber(parameterValue)) { - list.add(pojo.getParameterName()); - } - } + public AnalysisModelParamterViewAndParam showReport3(List models) { + // 查询所有符合条件的机型 + List engineModelPojos = businessDatabase.getBusinessDatabase() + .in("id", models) + .doQuery(DataEntryEngineModelPojo.class); + + if (CollectionUtils.isEmpty(engineModelPojos)) { + throw new CommonException("没有找到符合条件的机型"); } - return list; + + List> modelBatches = splitModelBatch(engineModelPojos, modelBatchSize); + + // 最终结果容器 + List allAnalysisViews = new ArrayList<>(); + Set allParamNames = new HashSet<>(); + + for (List batch : modelBatches) { + // 获取当前批次机型id列表 + Set batchModelIds = batch.stream() + .map(DataEntryEngineModelPojo::getId) + .collect(Collectors.toSet()); + + // 获取数据平台机型的参数 + List batchEngineParamDetails = businessDatabase.getBusinessDatabase() + .in("engine_model_id", batchModelIds) + .doQuery(EngineParamDetailPojo.class); + + // 按 modelId 分组 + Map> engineParamDetailMap = batchEngineParamDetails.stream() + .collect(Collectors.groupingBy(EngineParamDetailPojo::getEngineModelId)); + + // 批量查询 TC 数据(当前批次) + List batchTcData = tcDataQueryService.tcDataSelectAllByproductNumberBatch(batch); + + // 按 modelId 分组 + Map> tcDataMap = batchTcData.stream() + .collect(Collectors.groupingBy(EngineParamDetailPojo::getEngineModelId)); + + // 处理当前批次机型 + for (DataEntryEngineModelPojo engineModelPojo : batch) { + AnalysisModelParamterView analysisModelParamterView = new AnalysisModelParamterView(); + analysisModelParamterView.setModelID(engineModelPojo.getId()); + analysisModelParamterView.setModelName(engineModelPojo.getModelName()); + BeanUtils.copyProperties(engineModelPojo, analysisModelParamterView); + + // 获取 EngineParamDetailPojo 列表 + List pojoList = engineParamDetailMap.getOrDefault(engineModelPojo.getId(), Collections.emptyList()); + + Integer versionNumber = engineModelPojo.getVersionNumber(); + List tcData = tcDataMap.getOrDefault(engineModelPojo.getId(), Collections.emptyList()); + + pojoList = Stream.concat(pojoList.stream(), tcData.stream()) + .filter(x -> Objects.equals(x.getMajorVersion(), versionNumber)) // 过滤版本号 + .filter(x -> Objects.nonNull(x.getParameterValue()) && isNumber(x.getParameterValue())) // 过滤非数字 + .collect(Collectors.toList()); + + analysisModelParamterView.setPojos(pojoList); + allAnalysisViews.add(analysisModelParamterView); + + // 收集所有参数名 + pojoList.stream() + .map(EngineParamDetailPojo::getParameterName) + .forEach(allParamNames::add); + } + + batchEngineParamDetails.clear(); + batchTcData.clear(); + } + + AnalysisModelParamterViewAndParam andParam = new AnalysisModelParamterViewAndParam(); + andParam.setParamList(new ArrayList<>(allParamNames)); + andParam.setPojos(allAnalysisViews); + return andParam; } - public static Double extractDisplacement(String displacementStr) { - if (displacementStr == null || displacementStr.isEmpty()) { - return null; + // 分批处理机型 + private List> splitModelBatch( + List source, + int batchSize + ) { + List> batches = new ArrayList<>(); + List currentBatch = new ArrayList<>(batchSize); + for (DataEntryEngineModelPojo pojo : source) { + currentBatch.add(pojo); + if (currentBatch.size() >= batchSize) { + batches.add(new ArrayList<>(currentBatch)); + currentBatch.clear(); + } } - - // 正则匹配:数字(包含小数) - Pattern pattern = java.util.regex.Pattern.compile("(\\d+\\.?\\d*)"); - Matcher matcher = pattern.matcher(displacementStr); - - if (matcher.find()) { - return Double.parseDouble(matcher.group(1)); + if (!currentBatch.isEmpty()) { + batches.add(currentBatch); } - return null; + return batches; } } diff --git a/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java index c83b547..47c2b47 100644 --- a/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java @@ -736,57 +736,6 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { } } - @Override - public List selectNeedFillByNewVersion() { - //读取已通过审核的版本 DRAFT(草稿)、APPROVING(审批中)、COMPLETE(已完成)、RETURNED(已撤回)、REJECTED(已拒绝) - List