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 a42e543..fb13bed 100644 --- a/src/main/java/com/xdap/self_development/controller/DeleteController.java +++ b/src/main/java/com/xdap/self_development/controller/DeleteController.java @@ -7,15 +7,14 @@ import com.xdap.runtime.service.RuntimeAppContextService; import com.xdap.self_development.common.MyResponse; 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.schedule.ParameterValueCalculationTimer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.ArrayList; @@ -45,16 +44,29 @@ public class DeleteController { private String clientId; @Value("${apaas.token.clientSecred}") private String clientSecret; + @Autowired + private StringRedisTemplate redisTemplate; @GetMapping("/getUserId") public Response getUserId() { return Response.ok().data(runtimeAppContextService.getCurrentUserId()); } - @GetMapping("/timer") - public Response timer() { - MyResponse myResponse = timer.dailyCalculate(); - return Response.ok().data(myResponse); + @PostMapping("/timer") + public Response timer( + @RequestBody ModelComparisonExportRequest request + ) { + StringBuilder sb = new StringBuilder(); + for (String modelId : request.getModelIds()) { + try { + String redisKey = request.getUserID() + ":" + modelId + ":" + "ComparisonExport"; + String cachedData = redisTemplate.opsForValue().get(redisKey); + sb.append(cachedData).append("\n"); + } catch (Exception e) { + log.error("删除缓存失败", e); + } + } + return Response.ok().data(sb); } @PostMapping("/exportCompare") diff --git a/src/main/java/com/xdap/self_development/service/TcDataQueryService.java b/src/main/java/com/xdap/self_development/service/TcDataQueryService.java index adee6b7..1bd0fe2 100644 --- a/src/main/java/com/xdap/self_development/service/TcDataQueryService.java +++ b/src/main/java/com/xdap/self_development/service/TcDataQueryService.java @@ -29,4 +29,6 @@ public interface TcDataQueryService { void modelComparisonExport(ModelComparisonExportRequest request, HttpServletResponse response); Map> tcDataSelectByVersion(AnalysisVerRequest analysisRequest); + + List tcDataSelectAllByproductNumberBatch(List engineModelPojos); } 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 7530529..7096761 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 @@ -20,6 +20,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; 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; @@ -81,7 +82,7 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame @Override public AnalysisModelParamterViewAndParam showReport(ReportRequest request) { - return showReport1(request); + return showReport2(request); } @@ -155,6 +156,102 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame return andParam; } + public AnalysisModelParamterViewAndParam showReport2(@RequestBody 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()); + } + + if (engineModelPojos.isEmpty()) { + return new AnalysisModelParamterViewAndParam(); + } + + // 批量查询 EngineParamDetailPojo + Set modelIds = engineModelPojos.stream() + .map(DataEntryEngineModelPojo::getId) + .collect(Collectors.toSet()); + + List allEngineParamDetails = businessDatabase.getBusinessDatabase() + .in("engine_model_id", modelIds) + .doQuery(EngineParamDetailPojo.class); + + // 按 modelId 分组 + Map> engineParamDetailMap = allEngineParamDetails.stream() + .collect(Collectors.groupingBy(EngineParamDetailPojo::getEngineModelId)); + + // 批量查询 TC 数据 + List allTcData = tcDataQueryService.tcDataSelectAllByproductNumberBatch(engineModelPojos); + + // 按 modelId 分组 + Map> tcDataMap = allTcData.stream() + .collect(Collectors.groupingBy(EngineParamDetailPojo::getEngineModelId)); + + // 构建结果 + AnalysisModelParamterViewAndParam andParam = new AnalysisModelParamterViewAndParam(); + List analysisModelParamterViews = new ArrayList<>(); + Set allParamNames = new HashSet<>(); + + for (DataEntryEngineModelPojo engineModelPojo : engineModelPojos) { + 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(); + pojoList = pojoList.stream() + .filter(x -> x.getMajorVersion() == versionNumber) + .collect(Collectors.toList()); + + // 添加 TC 数据 + List tcData = tcDataMap.getOrDefault(engineModelPojo.getId(), Collections.emptyList()); + pojoList.addAll(tcData); + + // 过滤非数字参数值 + pojoList = pojoList.stream() + .filter(x -> ObjectUtils.isNotEmpty(x.getParameterValue()) && isNumber(x.getParameterValue())) + .collect(Collectors.toList()); + + analysisModelParamterView.setPojos(pojoList); + analysisModelParamterViews.add(analysisModelParamterView); + + // 收集所有参数名 + pojoList.stream() + .map(EngineParamDetailPojo::getParameterName) + .forEach(allParamNames::add); + } + + andParam.setParamList(new ArrayList<>(allParamNames)); + andParam.setPojos(analysisModelParamterViews); + return andParam; + } + /** * 验证所有数值类型 */ 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 e24fe42..21783eb 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 @@ -573,7 +573,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { TodoTaskPojo todoTaskPojo = new TodoTaskPojo(); todoTaskPojo.setCreatedById(userID); todoTaskPojo.setDocumentNo(UUID.randomUUID().toString()); - todoTaskPojo.setProcessTitle("分发填写人"); + todoTaskPojo.setProcessTitle("填写参数"); todoTaskPojo.setCurrentNode("待维护"); todoTaskPojo.setStatusCode(null); todoTaskPojo.setModelName(modelPojo.getModelName()); diff --git a/src/main/java/com/xdap/self_development/service/impl/TcDataQueryServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/TcDataQueryServiceImpl.java index 9e09955..b285551 100644 --- a/src/main/java/com/xdap/self_development/service/impl/TcDataQueryServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/TcDataQueryServiceImpl.java @@ -529,7 +529,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { // 导出成功后删除Redis中的数据 // for (String modelId : modelIds) { -// String redisKey = userID + ":" + modelId + ":" + "ComparisonExport"; +// String redisKey = userID + ":" + modelId + ":" + "ComparisonExportComparisonExport"; // redisTemplate.delete(redisKey); // log.info("已删除Redis中的数据,KEY: {}", redisKey); // } @@ -667,6 +667,123 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { return valueBySubSysName; } + @Override + public List tcDataSelectAllByproductNumberBatch(List engineModelPojos) { + // 收集所有 productNumber + Set productNumbers = engineModelPojos.stream() + .map(DataEntryEngineModelPojo::getProductNumber) + .filter(ObjectUtils::isNotEmpty) + .collect(Collectors.toSet()); + + if (productNumbers.isEmpty()) { + return Collections.emptyList(); + } + + // 一次性查询所有参数模板 TC 参数数据 + List parameters = engineParamDetailService.selectAllAndTcByNewVersion(); + List collect = parameters.stream() + .filter(x -> "TC分类表".equals(x.getParameterSource())) + .collect(Collectors.toList()); + + if (collect.isEmpty()) { + return Collections.emptyList(); + } + + // 按 partsName 分组 + Map> stringListMap = collect.stream() + .collect(Collectors.groupingBy(Parameter::getPartsName)); + + Set partsNames = stringListMap.keySet(); + + // 一次性查询所有 EnginePartsCollection + List allPartsCollections = bd.getTCDatabase() + .in("ztj", productNumbers) + .in("lbjmc", partsNames) + .doQuery(EnginePartsCollection.class); + + // 按 productNumber 和 partsName 分组 + Map>> partsCollectionsMap = allPartsCollections.stream() + .collect(Collectors.groupingBy( + EnginePartsCollection::getZtj, + Collectors.groupingBy(EnginePartsCollection::getLbjmc) + )); + + // 收集所有图号 + Set allLbjths = allPartsCollections.stream() + .map(EnginePartsCollection::getLbjth) + .filter(ObjectUtils::isNotEmpty) + .collect(Collectors.toSet()); + + if (allLbjths.isEmpty()) { + return Collections.emptyList(); + } + + // 一次性查询所有 ClassificationAttribute + List allClassifications = bd.getTCDatabase() + .in("pitemId", allLbjths) + .doQuery(ClassificationAttribute.class); + + // 按 pitemId 分组 + Map> classificationMap = allClassifications.stream() + .collect(Collectors.groupingBy(ClassificationAttribute::getPitemId)); + + // 构建结果 + List result = new ArrayList<>(); + + for (DataEntryEngineModelPojo engineModelPojo : engineModelPojos) { + String productNumber = engineModelPojo.getProductNumber(); + if (ObjectUtils.isEmpty(productNumber)) { + continue; + } + + Map> partsMap = partsCollectionsMap.get(productNumber); + if (partsMap == null) { + continue; + } + + for (String partsName : partsNames) { + List parameterList = stringListMap.get(partsName); + if (parameterList == null) { + continue; + } + + List parametersOnPartsName = parameterList.stream() + .map(Parameter::getParameterName) + .collect(Collectors.toList()); + + List partsCollections = partsMap.get(partsName); + if (partsCollections == null) { + continue; + } + + List lbjths = partsCollections.stream() + .map(EnginePartsCollection::getLbjth) + .filter(ObjectUtils::isNotEmpty) + .collect(Collectors.toList()); + + for (String lbjth : lbjths) { + List classifications = classificationMap.get(lbjth); + if (classifications == null) { + continue; + } + + for (ClassificationAttribute classificationAttribute : classifications) { + if (parametersOnPartsName.contains(classificationAttribute.getIdattrtbutehame())) { + EngineParamDetailPojo engineParamDetailPojo = new EngineParamDetailPojo(); + engineParamDetailPojo.setEngineModelId(engineModelPojo.getId()); + engineParamDetailPojo.setPartsName(partsName); + engineParamDetailPojo.setParameterName(classificationAttribute.getIdattrtbutehame()); + engineParamDetailPojo.setParameterValue(classificationAttribute.getFieldvalue()); + result.add(engineParamDetailPojo); + } + } + } + } + } + + return result; + } + private void setupResponse(HttpServletResponse response, String fileName) throws IOException { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); diff --git a/src/main/java/com/xdap/self_development/service/impl/TemplateServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/TemplateServiceImpl.java index c91d32e..0967777 100644 --- a/src/main/java/com/xdap/self_development/service/impl/TemplateServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/TemplateServiceImpl.java @@ -371,17 +371,19 @@ public class TemplateServiceImpl implements TemplateService { .doUpdate(newParam); // 记录修改记录 - revisionRecords.add(new RevisionRecord( - targetTemplate.getTemplateName(), - targetTemplate.getVersion(), - newParam.getParameterNumber(), - datils, - targetTemplate.getId(), - existingParam.getId(), - Timestamp.valueOf(LocalDateTime.now()), - newParam.getId(), - targetTemplate.getReturnNum() - )); + if (!datils.isEmpty()) { + revisionRecords.add(new RevisionRecord( + targetTemplate.getTemplateName(), + targetTemplate.getVersion(), + newParam.getParameterNumber(), + datils, + targetTemplate.getId(), + existingParam.getId(), + Timestamp.valueOf(LocalDateTime.now()), + newParam.getId(), + targetTemplate.getReturnNum() + )); + } } else { newParam.setId(null); bd.getBusinessDatabase().doInsert(newParam); diff --git a/src/main/java/com/xdap/self_development/service/impl/TodoTaskServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/TodoTaskServiceImpl.java index adaf942..1edbcc9 100644 --- a/src/main/java/com/xdap/self_development/service/impl/TodoTaskServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/TodoTaskServiceImpl.java @@ -228,7 +228,7 @@ public class TodoTaskServiceImpl implements TodoTaskService { TodoTaskPojo todoTaskPojo = new TodoTaskPojo(); todoTaskPojo.setCreatedById(userID); todoTaskPojo.setDocumentNo(UUID.randomUUID().toString()); - todoTaskPojo.setProcessTitle("分发责任人"); + todoTaskPojo.setProcessTitle("分发参数填写人"); todoTaskPojo.setCurrentNode("待分解"); todoTaskPojo.setCurrentProcessor(JSON.toJSONString(Arrays.asList(engineParamDetailDTO.getResPersonId()))); todoTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/);