From 27c5a0317f2f39e87ca31ebd6a4e2b95f53780ec Mon Sep 17 00:00:00 2001 From: zjh <15615273395@163.com> Date: Wed, 11 Feb 2026 10:33:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E7=BA=BF=E7=89=88=E6=9C=AC4.0?= =?UTF-8?q?=EF=BC=88=E6=96=B0=E7=89=88=E4=BF=AE=E6=94=B9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../self_development/MainApplication.java | 2 + .../controller/AnalysisCommonController.java | 6 +- .../EngineParamDetailController.java | 8 +- .../controller/YcTaskResultController.java | 27 ++- .../request/EngineParamDetailRequest.java | 2 +- .../domain/dto/DataEntryEngineModelDto.java | 5 + .../domain/dto/YcTodoTaskCommonResultDTO.java | 2 +- .../domain/pojo/DataChangeCommentPojo.java | 2 +- .../domain/pojo/EngineReviewListPojo.java | 5 + .../listener/PersonReadListener.java | 3 +- .../listener/SheetDataListener.java | 3 + .../AnalysisCommonParametersService.java | 2 +- .../service/EngineParamDetailService.java | 7 +- .../service/ModelRoleService.java | 26 +++ .../service/YcTaskResultService.java | 9 + .../impl/ActivitiProcessServiceImpl.java | 5 +- .../AnalysisCommonParametersServiceImpl.java | 14 +- .../impl/EngineParamDetailServiceImpl.java | 168 +++++++++++------- .../service/impl/ModelRoleServiceImpl.java | 133 +++++++++++++- .../service/impl/ParameterServiceImpl.java | 19 +- .../impl/ResponsiblePersonServiceImpl.java | 2 +- .../service/impl/TcDataQueryServiceImpl.java | 111 ++++++------ .../service/impl/TemplateServiceImpl.java | 10 +- .../service/impl/TodoTaskServiceImpl.java | 6 +- .../service/impl/YcTaskResultServiceImpl.java | 29 ++- src/main/resources/application.properties | 6 +- 26 files changed, 447 insertions(+), 165 deletions(-) diff --git a/src/main/java/com/xdap/self_development/MainApplication.java b/src/main/java/com/xdap/self_development/MainApplication.java index f0f6e89..96846d3 100644 --- a/src/main/java/com/xdap/self_development/MainApplication.java +++ b/src/main/java/com/xdap/self_development/MainApplication.java @@ -3,10 +3,12 @@ package com.xdap.self_development; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration; +import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; +@EnableCaching @SpringBootApplication( exclude = {EmbeddedMongoAutoConfiguration.class} ) 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 4c6eff2..300693c 100644 --- a/src/main/java/com/xdap/self_development/controller/AnalysisCommonController.java +++ b/src/main/java/com/xdap/self_development/controller/AnalysisCommonController.java @@ -30,8 +30,10 @@ public class AnalysisCommonController { * @return 可用参数列表 */ @GetMapping("/getAvailableParameters") - public Response getAvailableParameters() { - List lists = analysisCommonParametersService.getAvailableParameters(); + public Response getAvailableParameters( + @RequestParam(required = false) String userId + ) { + List lists = analysisCommonParametersService.getAvailableParameters(userId); return Response.ok().data(lists); } diff --git a/src/main/java/com/xdap/self_development/controller/EngineParamDetailController.java b/src/main/java/com/xdap/self_development/controller/EngineParamDetailController.java index bbb71aa..8a34fcb 100644 --- a/src/main/java/com/xdap/self_development/controller/EngineParamDetailController.java +++ b/src/main/java/com/xdap/self_development/controller/EngineParamDetailController.java @@ -40,8 +40,12 @@ public class EngineParamDetailController { * @return 参数列表 */ @GetMapping("/selectParamList") - public Response selectParamList(@RequestParam(value = "modelID", required = false) String modelID,@RequestParam(value = "tcData", required = false) String tcData) { - Map> list = engineParamDetailService.selectParamList(modelID,tcData); + public Response selectParamList( + @RequestParam(value = "modelID", required = false) String modelID, + @RequestParam(value = "tcData", required = false) String tcData, + @RequestParam(required = false) String userId + ) { + Map> list = engineParamDetailService.selectParamList(modelID, tcData, userId); return Response.ok().data(list); } /** diff --git a/src/main/java/com/xdap/self_development/controller/YcTaskResultController.java b/src/main/java/com/xdap/self_development/controller/YcTaskResultController.java index 79bfebc..6d56dd5 100644 --- a/src/main/java/com/xdap/self_development/controller/YcTaskResultController.java +++ b/src/main/java/com/xdap/self_development/controller/YcTaskResultController.java @@ -1,13 +1,11 @@ package com.xdap.self_development.controller; +import com.definesys.mpaas.common.http.Response; import com.xdap.self_development.common.YcTaskResult; import com.xdap.self_development.controller.request.YcGetTodoTaskRequest; import com.xdap.self_development.service.YcTaskResultService; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -79,4 +77,25 @@ public class YcTaskResultController { return result; } } + + @GetMapping("/getTodoById") + public Response getTodoById( + @RequestParam String flowId + ) { + return Response.ok().data(ycTaskResultService.getTodoById(flowId)); + } + + @GetMapping("/getInitiatorById") + public Response getInitiatorById( + @RequestParam String flowId + ) { + return Response.ok().data(ycTaskResultService.getInitiatorById(flowId)); + } + + @GetMapping("/getCompletedById") + public Response getCompletedById( + @RequestParam String flowId + ) { + return Response.ok().data(ycTaskResultService.getCompletedById(flowId)); + } } diff --git a/src/main/java/com/xdap/self_development/controller/request/EngineParamDetailRequest.java b/src/main/java/com/xdap/self_development/controller/request/EngineParamDetailRequest.java index 0f42376..c5e7c51 100644 --- a/src/main/java/com/xdap/self_development/controller/request/EngineParamDetailRequest.java +++ b/src/main/java/com/xdap/self_development/controller/request/EngineParamDetailRequest.java @@ -31,7 +31,7 @@ public class EngineParamDetailRequest { /** * 版本 */ - private Integer versionNumber; + private Integer parameterVersion; /** * 发动机型号+产品编号 */ diff --git a/src/main/java/com/xdap/self_development/domain/dto/DataEntryEngineModelDto.java b/src/main/java/com/xdap/self_development/domain/dto/DataEntryEngineModelDto.java index 54eb12c..e1225a1 100644 --- a/src/main/java/com/xdap/self_development/domain/dto/DataEntryEngineModelDto.java +++ b/src/main/java/com/xdap/self_development/domain/dto/DataEntryEngineModelDto.java @@ -39,6 +39,11 @@ public class DataEntryEngineModelDto extends MpaasBasePojo { */ private String modelName; + /** + * yc或oth + */ + private String ycOrOth; + /** * 产品编号 */ diff --git a/src/main/java/com/xdap/self_development/domain/dto/YcTodoTaskCommonResultDTO.java b/src/main/java/com/xdap/self_development/domain/dto/YcTodoTaskCommonResultDTO.java index 5698707..75c1291 100644 --- a/src/main/java/com/xdap/self_development/domain/dto/YcTodoTaskCommonResultDTO.java +++ b/src/main/java/com/xdap/self_development/domain/dto/YcTodoTaskCommonResultDTO.java @@ -33,5 +33,5 @@ public class YcTodoTaskCommonResultDTO { private String urlMobileOA; private String urlWx; private String mobileSuit; - + private String systemName; } diff --git a/src/main/java/com/xdap/self_development/domain/pojo/DataChangeCommentPojo.java b/src/main/java/com/xdap/self_development/domain/pojo/DataChangeCommentPojo.java index 1044aa8..0163c9b 100644 --- a/src/main/java/com/xdap/self_development/domain/pojo/DataChangeCommentPojo.java +++ b/src/main/java/com/xdap/self_development/domain/pojo/DataChangeCommentPojo.java @@ -17,7 +17,7 @@ import java.util.Date; */ @SQLQuery(value = { @SQL(view = "selectLastedComment" - , sql = "SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY param_detail_id ORDER BY creation_date DESC) AS rn FROM data_change_comment WHERE param_detail_id IN (#paramIds) ) ranked WHERE rn = 1 ORDER BY param_detail_id") + , sql = "SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY subsystem_name, parameter_name ORDER BY creation_date DESC) AS rn FROM data_change_comment WHERE param_detail_id IN (#paramIds) ) ranked WHERE rn = 1 ORDER BY subsystem_name, parameter_name") }) @Data @EqualsAndHashCode(callSuper = false) diff --git a/src/main/java/com/xdap/self_development/domain/pojo/EngineReviewListPojo.java b/src/main/java/com/xdap/self_development/domain/pojo/EngineReviewListPojo.java index ae533e2..5d7a2a9 100644 --- a/src/main/java/com/xdap/self_development/domain/pojo/EngineReviewListPojo.java +++ b/src/main/java/com/xdap/self_development/domain/pojo/EngineReviewListPojo.java @@ -86,6 +86,11 @@ public class EngineReviewListPojo implements Serializable { */ private String createdBy; + /** + * 版本 + */ + private Integer objectVersionNumber; + /** * 创建时间 */ diff --git a/src/main/java/com/xdap/self_development/listener/PersonReadListener.java b/src/main/java/com/xdap/self_development/listener/PersonReadListener.java index be030f1..88e303a 100644 --- a/src/main/java/com/xdap/self_development/listener/PersonReadListener.java +++ b/src/main/java/com/xdap/self_development/listener/PersonReadListener.java @@ -36,7 +36,8 @@ public class PersonReadListener implements ReadListener { return; } XdapUserView user = responsiblePersonService - .getUserByDeptAndName(responsiblePerson.getDepartment(), responsiblePerson.getUserAccount(), responsiblePerson.getUsername()); + .getUserByDeptAndName(responsiblePerson.getDepartment(), responsiblePerson.getUserAccount(), + responsiblePerson.getUsername()); if (user.getUserId() == null) { problems.setFlag(true); problems.getErrors().add("责任人导入失败:用户" + responsiblePerson.getUsername() + "无法找到或有多个重名用户"); diff --git a/src/main/java/com/xdap/self_development/listener/SheetDataListener.java b/src/main/java/com/xdap/self_development/listener/SheetDataListener.java index ec364a8..61c4e45 100644 --- a/src/main/java/com/xdap/self_development/listener/SheetDataListener.java +++ b/src/main/java/com/xdap/self_development/listener/SheetDataListener.java @@ -103,6 +103,9 @@ public class SheetDataListener implements ReadListener { public void doAfterAllAnalysed(AnalysisContext context) { if (!cachedDataList.isEmpty()) { processBatch(); + } else { + problems.getErrors().add("模板导入失败:模板'" + currentSheetName + "'没有数据"); + problems.setFlag(true); } } 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 ee5be48..dccf16d 100644 --- a/src/main/java/com/xdap/self_development/service/AnalysisCommonParametersService.java +++ b/src/main/java/com/xdap/self_development/service/AnalysisCommonParametersService.java @@ -13,5 +13,5 @@ public interface AnalysisCommonParametersService { List selectModelByLike(ReportRequest request); - List getAvailableParameters(); + List getAvailableParameters(String userId); } 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 5242874..8c3a1a4 100644 --- a/src/main/java/com/xdap/self_development/service/EngineParamDetailService.java +++ b/src/main/java/com/xdap/self_development/service/EngineParamDetailService.java @@ -8,7 +8,6 @@ import com.xdap.self_development.domain.pojo.ParameterPojo; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -24,7 +23,7 @@ import java.util.Set; public interface EngineParamDetailService { - HashMap> selectParamList(String modelID,String tcData); + Map> selectParamList(String modelID, String tcData, String userId); void excelImport(MultipartFile file,String modelId, String userId); @@ -55,4 +54,8 @@ public interface EngineParamDetailService { List selectPersonoByType(String subSystem, String dept, Integer type); Map>> selectParamListAndModel(String modelID, Integer parameterVersion, String userId); + + List selectParamByIsUserId(List list, String userId); + + List selectModelParamByIsUserId(List list, String userId); } diff --git a/src/main/java/com/xdap/self_development/service/ModelRoleService.java b/src/main/java/com/xdap/self_development/service/ModelRoleService.java index 785bf0c..d47c0cf 100644 --- a/src/main/java/com/xdap/self_development/service/ModelRoleService.java +++ b/src/main/java/com/xdap/self_development/service/ModelRoleService.java @@ -4,12 +4,16 @@ package com.xdap.self_development.service; import com.xdap.self_development.controller.request.ModelRolesRequest; import com.xdap.self_development.controller.request.RolePerJoinRequest; import com.xdap.self_development.controller.request.UserRoleBindingRequest; +import com.xdap.self_development.domain.pojo.EngineParamDetailPojo; import com.xdap.self_development.domain.pojo.ModelRolesPojo; +import com.xdap.self_development.domain.pojo.ParameterPojo; import com.xdap.self_development.domain.view.MenuParamView; import javax.validation.constraints.NotBlank; import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; public interface ModelRoleService { @@ -30,4 +34,26 @@ public interface ModelRoleService { void userRoleBinding(UserRoleBindingRequest userRoleBindingRequest); HashMap> selectUserOrDeptByRole(@NotBlank String roleID); + + boolean matchesAnyPermission( + EngineParamDetailPojo pojo, + Map>> permissionIndex, + String cat + ); + + boolean matchesAnyPermission( + EngineParamDetailPojo pojo, + Map>> permissionIndex, + List cats + ); + + boolean matchesAnyPermission( + ParameterPojo pojo, + Map>> permissionIndex, + List cats + ); + + Map>> buildPermissionIndex( + Set permissions + ); } diff --git a/src/main/java/com/xdap/self_development/service/YcTaskResultService.java b/src/main/java/com/xdap/self_development/service/YcTaskResultService.java index 7da7d97..34a863e 100644 --- a/src/main/java/com/xdap/self_development/service/YcTaskResultService.java +++ b/src/main/java/com/xdap/self_development/service/YcTaskResultService.java @@ -2,6 +2,9 @@ package com.xdap.self_development.service; import com.xdap.self_development.common.YcTaskResult; import com.xdap.self_development.controller.request.YcGetTodoTaskRequest; +import com.xdap.self_development.domain.pojo.CompletedTaskPojo; +import com.xdap.self_development.domain.pojo.InitiatedTaskPojo; +import com.xdap.self_development.domain.pojo.TodoTaskPojo; public interface YcTaskResultService { YcTaskResult returnTodoTask(YcGetTodoTaskRequest ycGetTodoTaskRequest); @@ -9,4 +12,10 @@ public interface YcTaskResultService { YcTaskResult returnCompleted(YcGetTodoTaskRequest ycGetTodoTaskRequest); YcTaskResult returnInitiator(YcGetTodoTaskRequest ycGetTodoTaskRequest); + + TodoTaskPojo getTodoById(String flowId); + + InitiatedTaskPojo getInitiatorById(String flowId); + + CompletedTaskPojo getCompletedById(String flowId); } diff --git a/src/main/java/com/xdap/self_development/service/impl/ActivitiProcessServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/ActivitiProcessServiceImpl.java index e5cacf0..9da7829 100644 --- a/src/main/java/com/xdap/self_development/service/impl/ActivitiProcessServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/ActivitiProcessServiceImpl.java @@ -230,6 +230,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService { engineReviewListPojo.setReviewComment(approvalNodeRequest.getComment()); engineReviewListPojo.setCreationDate(Timestamp.valueOf(LocalDateTime.now())); engineReviewListPojo.setCreatedBy(userId); + engineReviewListPojo.setObjectVersionNumber(model.getVersionNumber()); engineReviewListPojo.setReturnNum(0); engineReviewListPojo.setPreNode(-1); @@ -542,7 +543,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService { .update("operation", "")// 清空操作状态 // .update("minor_version", "")// 小版本清空 .update("last_update_date", new Date()) - .eq("last_updated_by", userId) + .eq("last_updated_by", flow.getCreatedBy()) // 流程创建人 .eq("engine_model_id", flow.getModelId()) .eq("major_version", model.getVersionNumber()) .doUpdate(EngineParamDetailPojo.class); @@ -1401,7 +1402,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService { List detailPojos = bd.getBusinessDatabase() .eq("approval_id", approvalId) .doQuery(EngineParamDetailPojo.class); - List ids = detailPojos.stream().map(EngineParamDetailPojo::getId).collect(Collectors.toList()); + Set ids = detailPojos.stream().map(EngineParamDetailPojo::getId).collect(Collectors.toSet()); if (ObjectUtils.isEmpty(ids)) { throw new CommonException("该审批流没有绑定的参数,请维护好参数后重新发起审批"); } 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 0d7bfcc..e8a796a 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 @@ -10,6 +10,7 @@ import com.xdap.self_development.domain.view.AnalysisModelParamterView; import com.xdap.self_development.domain.view.AnalysisModelParamterViewAndParam; import com.xdap.self_development.exception.CommonException; import com.xdap.self_development.service.AnalysisCommonParametersService; +import com.xdap.self_development.service.EngineParamDetailService; import com.xdap.self_development.service.TcDataQueryService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -39,6 +40,9 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame @Resource TcDataQueryService tcDataQueryService; + @Resource + private EngineParamDetailService engineParamDetailService; + private static final Pattern ALL_NUMBER_PATTERN = Pattern.compile("^[-+]?\\d+(\\.\\d+)?([Ee][-+]?\\d+)?$"); @@ -94,12 +98,18 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame * @return 可用参数名称列表 */ @Override - public List getAvailableParameters() { + public List getAvailableParameters( + String userId + ) { List modelParams = businessDatabase.getBusinessDatabase() .viewQueryMode(true) .view("selectAllParameters") .doQuery(ParameterPojo.class); - return modelParams.stream().filter(x -> x.getUnit() != null && !x.getUnit().equals("/")).map(ParameterPojo::getParameterName).distinct().collect(Collectors.toList()); + // 按权限过滤 + List parameters = engineParamDetailService.selectParamByIsUserId(modelParams, userId); + return parameters.stream() + .filter(x -> x.getUnit() != null && !x.getUnit().equals("/")) + .map(ParameterPojo::getParameterName).distinct().collect(Collectors.toList()); } /** 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 7787e89..d9dff33 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 @@ -83,13 +83,14 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { * @return 参数列表映射 */ @Override - public HashMap> selectParamList(String modelID, String tcData) { - List parameters; + public Map> selectParamList(String modelID, String tcData, String userId) { + List allParameters; if (ObjectUtils.isNotEmpty(tcData) && "tc".equals(tcData)) { - parameters = selectAllAndTcByNewVersion(); + allParameters = selectAllAndTcByNewVersion(); } else { - parameters = selectAllByNewVersion(); + allParameters = selectAllByNewVersion(); } + List parameters = selectParamByIsUserId(allParameters, userId); List templates = bd.getBusinessDatabase() .eq("status", "COMPLETE") @@ -97,28 +98,32 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { if (ObjectUtils.isEmpty(templates)) { throw new CommonException("未找到未找到已发布的参数模板"); } - //查找每个模板最新版本 - // 每组内按版本号降序,取第一个(最新版本) - Map latestTemplateMap = templates.stream() - // 按模板ID分组 - .collect(Collectors.toMap(TemplatePojo::getTemplateName, Function.identity(), BinaryOperator.maxBy(Comparator.comparingInt(TemplatePojo::getVersion)))); - ArrayList templatesMax = new ArrayList<>(latestTemplateMap.values()); - Map systemOrderMap = templatesMax.stream() + + AtomicInteger seq = new AtomicInteger(1); + LinkedHashMap subsystemOrderMap = parameters.stream() + .sorted(Comparator + .comparing(ParameterPojo::getSubsystemName, Collator.getInstance(Locale.CHINA)) + .thenComparing(ParameterPojo::getParameterName, Collator.getInstance(Locale.CHINA)) + ) + .map(ParameterPojo::getSubsystemName) + .distinct() .collect(Collectors.toMap( - TemplatePojo::getTemplateName, // key: 子系统编码 - TemplatePojo::getOrderNum, // value: 排序号 - (oldValue, newValue) -> oldValue + s -> s, + s -> seq.getAndIncrement(), // 每次获取当前值,再自增(从1开始) + (o, n) -> o, + LinkedHashMap::new )); - Map> collect = parameters.stream() + + Map> collect = parameters.stream() .collect(Collectors.groupingBy( ParameterPojo::getSubsystemName, Collectors.mapping( ParameterPojo::getPartsName, // 提取 零部件名称字段 - Collectors.toList() + Collectors.toSet() ) )); if (ObjectUtils.isNotEmpty(modelID)) { - systemOrderMap.put("整车参数", (long) 0); + subsystemOrderMap.put("整车参数", 0); DataEntryEngineModelPojo dataEntryEngineModelPojo = dataEntryEngineModelService.selectBymodelId(modelID); //状态代号 String productNumber = dataEntryEngineModelPojo.getProductNumber(); @@ -143,7 +148,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { Date productionDate = dataEntryEngineModelPojo.getProductionDate(); String manufacturerName = dataEntryEngineModelPojo.getManufacturerName(); String manufacturerAbbreviation = dataEntryEngineModelPojo.getManufacturerAbbreviation(); - ArrayList strings = new ArrayList<>(); + Set strings = new HashSet<>(); if (dataEntryEngineModelPojo.getYcOrOth().equals("玉柴")) { strings.add("状态代号:" + productNumber); } else { @@ -169,7 +174,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { // 保持顺序 return collect.entrySet().stream() .sorted(Comparator.comparing(entry -> - systemOrderMap.getOrDefault(entry.getKey(), Long.MAX_VALUE) + subsystemOrderMap.getOrDefault(entry.getKey(), Integer.MAX_VALUE) )) .collect(Collectors.toMap( Map.Entry::getKey, @@ -291,8 +296,11 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { // TODO:根据权限过滤 List menuParamViews = modelRoleService.selectPersByUser(userId); // 管理员返回全部 - if (menuParamViews.size() == 1 && menuParamViews.get(0).getIsAdmin() == 1) { - return pojoList; + for (MenuParamView menuParamView : menuParamViews) { + if (menuParamView.getIsAdmin() != null && + menuParamView.getIsAdmin() == 1) { + return pojoList; + } } // 过滤返回 @@ -305,53 +313,15 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { .map(MenuParamView::getPermissionPath) .collect(Collectors.toSet()); return pojoList.stream() - .filter(pojo -> matchesAnyPermission(pojo, result, model.getYcOrOth())) + .filter(pojo -> + modelRoleService.matchesAnyPermission( + pojo, + modelRoleService.buildPermissionIndex(result), + model.getYcOrOth() + "发动机数据" + )) .collect(Collectors.toList()); } - private boolean matchesAnyPermission(EngineParamDetailPojo pojo, Set permissions, String ycOrOth) { - String cat = ycOrOth + "发动机数据"; - String sys = pojo.getSubsystemName(); - String comp = pojo.getPartsName(); // 可能为 null 或 "/" - - if (comp == null) comp = "/"; - - for (String perm : permissions) { - String[] parts = perm.split("/", -1); // -1 保留尾部空字符串 - - if (parts.length == 1) { - // "玉柴发动机数据" - if (perm.equals(cat)) { - return true; - } - } else if (parts.length == 2) { - // "玉柴发动机数据/点火子系统" - if (parts[0].equals(cat) && parts[1].equals(sys)) { - return true; - } - } else if (parts.length == 3) { - String permComp = parts[2]; - // "玉柴发动机数据/点火子系统/气环" - if (parts[0].equals(cat) && parts[1].equals(sys) && permComp.equals(comp)) { - return true; - } - } else if (parts.length == 4) { - String permComp = parts[3]; - if (parts[0].equals(cat) - && parts[1].equals(sys) - && "".equals(permComp) - ) { - // 权限路径是 "玉柴发动机数据/点火子系统//") - if (comp.equals("/")) { - return true; - } - } - } - // 忽略长度 != 1,2,3 的非法路径(可选加日志) - } - return false; - } - /** * 查询参数列表和模型 * 根据模型ID获取参数列表和模型信息 @@ -568,8 +538,8 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { .doQuery(EngineParamDetailPojo.class)); } else { Integer version = model.getVersionNumber(); - if (request.getVersionNumber() != null) { - version = request.getVersionNumber(); + if (request.getParameterVersion() != null) { + version = request.getParameterVersion(); } paramDetails.addAll(bd.getBusinessDatabase() .eq("engine_model_id", model.getId()) @@ -801,7 +771,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { initiatedTaskPojo.setDocumentNo(UUID.randomUUID().toString()); initiatedTaskPojo.setProcessTitle(modelPojo.getModelName() + "-" + "分发参数填写人任务"); initiatedTaskPojo.setCurrentNode(disStatus); - initiatedTaskPojo.setCurrentProcessor(JSON.toJSONString(filledBys)); + initiatedTaskPojo.setCurrentProcessor(ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(filledBys)); initiatedTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/); initiatedTaskPojo.setModelName(ObjectUtils.isNotEmpty(modelPojo) ? modelPojo.getModelName() : ""); initiatedTaskPojo.setModelId(modelPojo.getId()); @@ -815,6 +785,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { bd.getBusinessDatabase() .eq("id", initiatedTask.getId()) .update("current_node", disStatus) + .update("current_processor", ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(filledBys)) .doUpdate(InitiatedTaskPojo.class); } @@ -832,7 +803,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { completedTaskPojo.setDocumentNo(UUID.randomUUID().toString()); completedTaskPojo.setProcessTitle(modelPojo.getModelName() + "-" + "分发参数填写人任务"); completedTaskPojo.setCurrentNode(distStatus); - completedTaskPojo.setCurrentProcessor(JSON.toJSONString(filledBys)); + completedTaskPojo.setCurrentProcessor(ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(filledBys)); completedTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/); completedTaskPojo.setModelName(ObjectUtils.isNotEmpty(modelPojo) ? modelPojo.getModelName() : ""); completedTaskPojo.setModelId(modelPojo.getId()); @@ -847,6 +818,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { bd.getBusinessDatabase() .eq("id", completedTask.getId()) .update("current_node", distStatus) + .update("current_processor", ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(filledBys)) .doUpdate(CompletedTaskPojo.class); } } @@ -1058,4 +1030,62 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx"); } + + @Override + public List selectParamByIsUserId(List list, String userId) { + // 没有人则返回全部 + if (userId == null || userId.isEmpty()) { + return list; + } + // TODO:根据权限过滤 + List menuParamViews = modelRoleService.selectPersByUser(userId); + // 管理员返回全部 + for (MenuParamView menuParamView : menuParamViews) { + if (menuParamView.getIsAdmin() != null && menuParamView.getIsAdmin() == 1) { + return list; + } + } + + Set result = menuParamViews.stream() + .map(MenuParamView::getPermissionPath) + .collect(Collectors.toSet()); + + return list.stream() + .filter(pojo -> + modelRoleService.matchesAnyPermission( + pojo, + modelRoleService.buildPermissionIndex(result), + Arrays.asList("玉柴发动机数据", "竞品发动机数据") + )) + .collect(Collectors.toList()); + } + + @Override + public List selectModelParamByIsUserId(List list, String userId) { + // 没有人则返回全部 + if (userId == null || userId.isEmpty()) { + return list; + } + // TODO:根据权限过滤 + List menuParamViews = modelRoleService.selectPersByUser(userId); + // 管理员返回全部 + for (MenuParamView menuParamView : menuParamViews) { + if (menuParamView.getIsAdmin() != null && menuParamView.getIsAdmin() == 1) { + return list; + } + } + + Set result = menuParamViews.stream() + .map(MenuParamView::getPermissionPath) + .collect(Collectors.toSet()); + + return list.stream() + .filter(pojo -> + modelRoleService.matchesAnyPermission( + pojo, + modelRoleService.buildPermissionIndex(result), + Arrays.asList("玉柴发动机数据", "竞品发动机数据") + )) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/com/xdap/self_development/service/impl/ModelRoleServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/ModelRoleServiceImpl.java index 05486cc..057538c 100644 --- a/src/main/java/com/xdap/self_development/service/impl/ModelRoleServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/ModelRoleServiceImpl.java @@ -8,10 +8,7 @@ import com.xdap.self_development.controller.request.ModelRolesRequest; import com.xdap.self_development.controller.request.RolePerJoinRequest; import com.xdap.self_development.controller.request.UserRoleBindingRequest; import com.xdap.self_development.domain.enums.ParamPermissionEnum; -import com.xdap.self_development.domain.pojo.ModelDepUserRolePojo; -import com.xdap.self_development.domain.pojo.ModelMenuParameterPojo; -import com.xdap.self_development.domain.pojo.ModelRolePermissionPojo; -import com.xdap.self_development.domain.pojo.ModelRolesPojo; +import com.xdap.self_development.domain.pojo.*; import com.xdap.self_development.domain.view.MenuParamView; import com.xdap.self_development.exception.CommonException; import com.xdap.self_development.service.ModelRoleService; @@ -359,4 +356,132 @@ public class ModelRoleServiceImpl implements ModelRoleService { return new HashMap<>(); } + @Override + public boolean matchesAnyPermission( + EngineParamDetailPojo pojo, + Map>> permissionIndex, + String cat + ) { + String sys = pojo.getSubsystemName(); + String comp = Optional.ofNullable(pojo.getPartsName()).orElse("/"); + + Map> sysMap = permissionIndex.get(cat); + if (sysMap == null) return false; + + // 1. 检查是否有 cat/*/* (即 parts.length == 1) + if (sysMap.containsKey("*")) { + return true; + } + + // 2. 检查是否有 cat/sys/* (即 parts.length == 2) + Set compSet = sysMap.get(sys); + if (compSet != null) { + if (compSet.contains("*")) { + return true; + } + return compSet.contains(comp); + } + return false; + } + + @Override + public boolean matchesAnyPermission(EngineParamDetailPojo pojo, Map>> permissionIndex, List cats) { + String sys = pojo.getSubsystemName(); + String comp = Optional.ofNullable(pojo.getPartsName()).orElse("/"); + + for (String cat : cats) { + Map> sysMap = permissionIndex.get(cat); + if (sysMap == null) { + continue; + } + + if (sysMap.containsKey("*")) { + return true; + } + + Set compSet = sysMap.get(sys); + if (compSet != null) { + if (compSet.contains("*")) { + return true; + } + if (compSet.contains(comp)) { + return true; + } + } + } + + return false; + } + + @Override + public boolean matchesAnyPermission( + ParameterPojo pojo, + Map>> permissionIndex, + List cats + ) { + String sys = pojo.getSubsystemName(); + String comp = Optional.ofNullable(pojo.getPartsName()).orElse("/"); + + for (String cat : cats) { + Map> sysMap = permissionIndex.get(cat); + if (sysMap == null) { + continue; + } + + if (sysMap.containsKey("*")) { + return true; + } + + Set compSet = sysMap.get(sys); + if (compSet != null) { + if (compSet.contains("*")) { + return true; + } + if (compSet.contains(comp)) { + return true; + } + } + } + + return false; + } + + @Override + public Map>> buildPermissionIndex( + Set permissions + ) { + Map>> index = new HashMap<>(); + + for (String perm : permissions) { + String[] parts = perm.split("/", -1); + String cat, sys, comp; + + if (parts.length == 1) { + cat = parts[0]; + sys = "*"; // 表示通配 + comp = "*"; + } else if (parts.length == 2) { + cat = parts[0]; + sys = parts[1]; + comp = "*"; + } else if (parts.length == 3) { + cat = parts[0]; + sys = parts[1]; + comp = parts[2]; + } else if (parts.length == 4 && parts[3].isEmpty()) { + // "cat/sys//" → comp 应视为 "/" + cat = parts[0]; + sys = parts[1]; + comp = "/"; + } else { + // 非法格式,跳过或记录日志 + continue; + } + + index.computeIfAbsent(cat, k -> new HashMap<>()) + .computeIfAbsent(sys, k -> new HashSet<>()) + .add(comp); + } + return index; + } } diff --git a/src/main/java/com/xdap/self_development/service/impl/ParameterServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/ParameterServiceImpl.java index 458c846..dcc1995 100644 --- a/src/main/java/com/xdap/self_development/service/impl/ParameterServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/ParameterServiceImpl.java @@ -13,6 +13,7 @@ import com.xdap.self_development.domain.pojo.TemplateAndParameterPojo; import com.xdap.self_development.domain.pojo.TemplatePojo; import com.xdap.self_development.domain.view.TemplateInfoView; import com.xdap.self_development.exception.CommonException; +import com.xdap.self_development.service.ModelRoleService; import com.xdap.self_development.service.ParameterService; import com.xdap.self_development.utils.FormulaValidatorUtils; import lombok.AllArgsConstructor; @@ -40,6 +41,8 @@ public class ParameterServiceImpl implements ParameterService { private BusinessDatabase bd; @Resource private ParameterService myself; + @Resource + private ModelRoleService modelRoleService; /** * 根据条件获取参数 @@ -84,6 +87,14 @@ public class ParameterServiceImpl implements ParameterService { public TemplateInfoView maintenanceParameters(UpdateParameterForm form) { // 公式格式检查 for (ParameterForm parameter : form.getParameterForms()) { + + if ("数据平台手工录入".equals(parameter.getParameterSource()) && parameter.getDepartment() == null) { + throw new CommonException(String.format("参数'%s'部门不能为空", parameter.getParameterName())); + } + if (parameter.getPartsName() == null || parameter.getPartsName().isEmpty()) { + parameter.setPartsName("/"); + } + if (Objects.equals(parameter.getParameterSource(), "公式计算")) { Map validationResult = FormulaValidatorUtils.validateFormulaDetailed( parameter.getNumberOrFormula()); @@ -569,7 +580,9 @@ public class ParameterServiceImpl implements ParameterService { result.getNewParameters().stream() .map(parameter -> createTemplateAndParameter(newTemplate.getId(), parameter.getId())) .collect(Collectors.toList()); - bd.getBusinessDatabase().doBatchInsert(templateAndParameters); + if (!templateAndParameters.isEmpty()) { + bd.getBusinessDatabase().doBatchInsert(templateAndParameters); + } } // 如果不是原模板 else { @@ -578,7 +591,9 @@ public class ParameterServiceImpl implements ParameterService { .filter(parameter -> !parameterIds.contains(parameter.getId())) .map(parameter -> createTemplateAndParameter(newTemplate.getId(), parameter.getId())) .collect(Collectors.toList()); - bd.getBusinessDatabase().doBatchInsert(templateAndParameters); + if (!templateAndParameters.isEmpty()) { + bd.getBusinessDatabase().doBatchInsert(templateAndParameters); + } } // 保存修订记录 if (!result.getRevisionRecords().isEmpty()) { diff --git a/src/main/java/com/xdap/self_development/service/impl/ResponsiblePersonServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/ResponsiblePersonServiceImpl.java index 7b4b674..94b45ed 100644 --- a/src/main/java/com/xdap/self_development/service/impl/ResponsiblePersonServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/ResponsiblePersonServiceImpl.java @@ -65,7 +65,7 @@ public class ResponsiblePersonServiceImpl implements ResponsiblePersonService { throw new CommonException("没有找到研发总院"); } XdapDepartments xdapDepartment = bd.getSystemDatabase() - .eq("id", form.getDepartmentId()) + .eq("name", form.getDepartment()) .eq("parent_id", currentDept.getId()) .doQueryFirst(XdapDepartments.class); if (xdapDepartment == null) { 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 76db806..0627bc9 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 @@ -361,7 +361,6 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { List subsystemParts = request.getSubsystemParts(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); - // 1. 前置空指针检查,提前拦截异常并给出明确信息 if (models == null || models.isEmpty()) { log.error("导出失败:机型列表为null或空"); throw new CommonException("导出失败:机型列表不能为空"); @@ -380,21 +379,21 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { } try { - // 设置响应头 setupExcelResponse(response, "机型参数对比表" + formatter.format(LocalDateTime.now()) + ".xlsx"); // 获取机型名称映射 Map modelNames = getModelNameMapping(models); // 从Redis加载并处理数据 - Map> parameterValues = new HashMap<>(); - Map parameterSubsystemParts = new HashMap<>(); - loadAndProcessRedisData(request, models, userID, subsystemParts, parameterValues, parameterSubsystemParts); + Map> parameterValues = new TreeMap<>(); + ; - // 构建EasyExcel的表头和数据 - List> excelData = buildExcelData(models, parameterValues, parameterSubsystemParts); + loadAndProcessRedisData(request, models, userID, subsystemParts, parameterValues); - // 使用EasyExcel写入 + // 构建表头和数据 + List> excelData = buildExcelData(models, parameterValues); + + // 写入 try (OutputStream outputStream = response.getOutputStream()) { EasyExcel.write(outputStream) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) @@ -420,7 +419,6 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { * @return 引擎参数详情映射 */ public Map> tcDataSelectByVersion(AnalysisVerRequest analysisRequest) { - List parameters = engineParamDetailService.selectAllAndTcByNewVersion(); DataEntryEngineModelPojo dataEntryEngineModelPojo = engineModelService.selectBymodelId(analysisRequest.getEngineModelID()); if (dataEntryEngineModelPojo == null) { throw new CommonException("查询失败:机型不存在"); @@ -439,6 +437,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { .collect(Collectors.toList()); //批量查询所有系统数据 + List tcPojos = new ArrayList<>(); List systemDataList = new ArrayList<>(); for (Map.Entry subsystemPartsPair : subsystemPartsPairs) { List pojoList = bd.getBusinessDatabase() @@ -448,14 +447,22 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { .eq("parts_name", subsystemPartsPair.getValue()) .ne("parameter_source", "TC分类表") .doQuery(EngineParamDetailPojo.class); + tcPojos.addAll( + bd.getBusinessDatabase() + .eq("engine_model_id", analysisRequest.getEngineModelID()) + .eq("major_version", analysisRequest.getParameterVersion()) + .eq("subsystem_name", subsystemPartsPair.getKey()) + .eq("parts_name", subsystemPartsPair.getValue()) + .eq("parameter_source", "TC分类表") + .doQuery(EngineParamDetailPojo.class) + ); if (ObjectUtils.isNotEmpty(pojoList)) { systemDataList.addAll(pojoList); } } //批量查询所有TC数据 - Map> parameterMapTc = parameters.stream() - .filter(x-> Objects.equals(x.getParameterSource(), "TC分类表")) + Map> parameterMapTc = tcPojos.stream() .collect(Collectors.groupingBy(p -> p.getPartsName() + "&&" + p.getParameterName())); List> subsystemPartsPairsTc = analysisRequest.getSubsystemParts().stream() .map(subsystemType -> { @@ -520,24 +527,22 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { List tcDataPojos = allAttributes.stream() .filter(attr -> parameterMapTc.containsKey(partsName + "&&" + attr.getIdattrtbutehame())) .map(attr -> { - ParameterPojo param = parameterMapTc.get(partsName + "&&" + attr.getIdattrtbutehame()).get(0); - EngineParamDetailPojo pojo = new EngineParamDetailPojo(); - pojo.setEngineModelId(dataEntryEngineModelPojo.getId()); - pojo.setPartsName(param.getPartsName()); - pojo.setSubsystemName(param.getSubsystemName()); - pojo.setParameterName(param.getParameterName()); - pojo.setParameterValue(attr.getFieldvalue()); - pojo.setParameterId(param.getId()); - return pojo; + EngineParamDetailPojo param = parameterMapTc.get(partsName + "&&" + attr.getIdattrtbutehame()).get(0); + param.setParameterValue(attr.getFieldvalue()); + return param; }) .collect(Collectors.toList()); systemDataList.addAll(tcDataPojos); } + + // 按权限过滤返回数据 + List filerData = engineParamDetailService.selectModelParamByIsUserId(systemDataList, analysisRequest.getUserID()); + //将allPojos存到Redis,KEY为userID+engineModelID+预操作,过期时间24小时 try { String redisKey = analysisRequest.getUserID() + ":" + analysisRequest.getEngineModelID() + ":" + analysisRequest.getParameterVersion() + ":" + "ComparisonExport"; - String jsonValue = objectMapper.writeValueAsString(systemDataList); + String jsonValue = objectMapper.writeValueAsString(filerData); redisTemplate.opsForValue().set(redisKey, jsonValue, 24, java.util.concurrent.TimeUnit.HOURS); log.info("成功将数据存储到Redis,KEY: {}", redisKey); } catch (Exception e) { @@ -545,7 +550,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { } - return systemDataList.stream().collect(Collectors.groupingBy(EngineParamDetailPojo::getSubsystemName)); + return filerData.stream().collect(Collectors.groupingBy(EngineParamDetailPojo::getSubsystemName)); } @Override @@ -740,8 +745,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { } private void loadAndProcessRedisData(ModelComparisonExportRequest request, List models, String userID, - List subsystemParts, Map> parameterValues, - Map parameterSubsystemParts) { + List subsystemParts, Map> parameterValues) { for (ModelItem model : models) { try { if (model == null) { @@ -772,7 +776,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { List filteredPojos = filterEngineParams(allPojos, subsystemParts, request); // 处理筛选后的数据 - processFilteredParams(filteredPojos, modelId, parameterValues, parameterSubsystemParts); + processFilteredParams(filteredPojos, modelId, parameterValues); } } catch (Exception e) { String errorMsg = model != null ? @@ -792,7 +796,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { } return allPojos.stream() - .filter(Objects::nonNull) // 增加null过滤 +// .filter(Objects::nonNull) // 增加null过滤 .filter(pojo -> subsystemParts.stream().anyMatch(part -> { String[] parts = part.split("-"); if (parts.length != 2) return false; @@ -808,58 +812,51 @@ public class TcDataQueryServiceImpl implements TcDataQueryService { if ("/".equals(partsName)) { return Objects.equals(subsystem, pojo.getSubsystemName()); } else { - return Objects.equals(subsystem, pojo.getSubsystemName()) && - Objects.equals(partsName, pojo.getPartsName()); + return Objects.equals(subsystem, pojo.getSubsystemName()) && Objects.equals(partsName, pojo.getPartsName()); } })) .collect(Collectors.toList()); } private void processFilteredParams(List filteredPojos, String modelId, - Map> parameterValues, - Map parameterSubsystemParts) { + Map> parameterValues) { for (EngineParamDetailPojo pojo : filteredPojos) { - if (pojo == null || StringUtils.isEmpty(pojo.getParameterName())) { - log.warn("无效的参数项:pojo为null或参数名为空"); + if (pojo == null || StringUtils.isEmpty(pojo.getParameterName()) || + StringUtils.isEmpty(pojo.getSubsystemName())) { + log.warn("跳过无效参数项: {}", pojo); continue; } + + String subsystem = pojo.getSubsystemName(); + String parts = pojo.getPartsName(); String paramName = pojo.getParameterName(); - String paramValue = pojo.getParameterValue() == null ? "" : pojo.getParameterValue(); + String paramValue = pojo.getParameterValue(); - parameterValues.computeIfAbsent(paramName, k -> new HashMap<>()).put(modelId + "-" + pojo.getMajorVersion(), paramValue); + String key = subsystem + "-" + parts + "-" + paramName; - // 只在首次添加时存储子系统和零部件信息 - parameterSubsystemParts.computeIfAbsent(paramName, k -> new String[]{ - pojo.getSubsystemName() != null ? pojo.getSubsystemName() : "", - pojo.getPartsName() != null ? pojo.getPartsName() : "" - }); + parameterValues.computeIfAbsent(key, k -> new HashMap<>()) + .put(modelId + "-" + pojo.getMajorVersion(), paramValue); } } private List> buildExcelData(List models, - Map> parameterValues, - Map parameterSubsystemParts) { + Map> parameterValues) { List> excelData = new ArrayList<>(); - // 构建数据行 for (Map.Entry> entry : parameterValues.entrySet()) { - List row = new ArrayList<>(); - String paramName = entry.getKey(); - - // 添加子系统和零部件信息 - String[] subsystemParts = parameterSubsystemParts.get(paramName); - row.add(subsystemParts != null && subsystemParts.length >= 1 ? subsystemParts[0] : ""); - row.add(subsystemParts != null && subsystemParts.length >= 2 ? subsystemParts[1] : ""); - - // 添加参数名 - row.add(paramName); - - // 添加各机型参数值 + String key = entry.getKey(); Map values = entry.getValue(); + + List row = new ArrayList<>(); + row.add(key.split("-")[0]); // 子系统 + row.add(key.split("-")[1]); // 零部件 + row.add(key.split("-")[2]); // 参数名 + + // 各机型值 for (ModelItem model : models) { - String modelId = model != null ? model.getModelId() : ""; - String paramVersion = model != null ? model.getParameterVersion() : ""; - row.add(values.getOrDefault(modelId + "-" + paramVersion, "")); + String modelKey = model != null ? + model.getModelId() + "-" + model.getParameterVersion() : ""; + row.add(values.getOrDefault(modelKey, "")); } excelData.add(row); 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 f0553b7..7159cde 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 @@ -301,6 +301,11 @@ public class TemplateServiceImpl implements TemplateService { // 验证公式 for (ParameterPojo data : dataList) { data.setCreatedBy(createBy); + if (data.getParameterName() == null) { + problems.setFlag(true); + problems.getErrors().add("模板导入失败:" + sheetName + "模板的参数" + data.getParameterName() + "的参数名称字段为空"); + continue; + } if (data.getSubsystemName() == null) { problems.setFlag(true); problems.getErrors().add("模板导入失败:" + sheetName + "模板的参数" + data.getParameterName() + "的子系统字段为空"); @@ -311,11 +316,6 @@ public class TemplateServiceImpl implements TemplateService { problems.getErrors().add("模板导入失败:" + sheetName + "模板的参数" + data.getParameterName() + "的参数类型字段为空"); continue; } - if (data.getParameterName() == null) { - problems.setFlag(true); - problems.getErrors().add("模板导入失败:" + sheetName + "模板的参数" + data.getParameterName() + "的参数名称字段为空"); - continue; - } if (data.getPartsName() == null || data.getPartsName().isEmpty()) { data.setPartsName("/"); 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 6ba19c9..3072194 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 @@ -293,7 +293,7 @@ public class TodoTaskServiceImpl implements TodoTaskService { initiatedTaskPojo.setDocumentNo(UUID.randomUUID().toString()); initiatedTaskPojo.setProcessTitle(model.getModelName() + "-" + "分发参数责任人任务"); initiatedTaskPojo.setCurrentNode(disStatus); - initiatedTaskPojo.setCurrentProcessor(JSON.toJSONString(resIds)); + initiatedTaskPojo.setCurrentProcessor(ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(resIds)); initiatedTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/); initiatedTaskPojo.setModelName(ObjectUtils.isNotEmpty(model) ? model.getModelName() : ""); initiatedTaskPojo.setModelId(modelId); @@ -307,6 +307,7 @@ public class TodoTaskServiceImpl implements TodoTaskService { bd.getBusinessDatabase() .eq("id", initiatedTask.getId()) .update("current_node", disStatus) + .update("current_processor", ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(resIds)) .doUpdate(InitiatedTaskPojo.class); } @@ -324,7 +325,7 @@ public class TodoTaskServiceImpl implements TodoTaskService { completedTaskPojo.setDocumentNo(UUID.randomUUID().toString()); completedTaskPojo.setProcessTitle(model.getModelName() + "-" + "分发参数责任人任务"); completedTaskPojo.setCurrentNode(distStatus); - completedTaskPojo.setCurrentProcessor(JSON.toJSONString(resIds)); + completedTaskPojo.setCurrentProcessor(ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(resIds)); completedTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/); completedTaskPojo.setModelName(ObjectUtils.isNotEmpty(model) ? model.getModelName() : ""); completedTaskPojo.setModelId(modelId); @@ -339,6 +340,7 @@ public class TodoTaskServiceImpl implements TodoTaskService { bd.getBusinessDatabase() .eq("id", completedTask.getId()) .update("current_node", distStatus) + .update("current_processor", ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(resIds)) .doUpdate(CompletedTaskPojo.class); } } diff --git a/src/main/java/com/xdap/self_development/service/impl/YcTaskResultServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/YcTaskResultServiceImpl.java index 1064ee0..79efeeb 100644 --- a/src/main/java/com/xdap/self_development/service/impl/YcTaskResultServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/YcTaskResultServiceImpl.java @@ -113,7 +113,7 @@ public class YcTaskResultServiceImpl implements YcTaskResultService { dto.setSystemName("研发数据管理平台"); dto.setUpdateDate(time2Str(todoTaskPojo.getCreationDate())); dto.setActivityLabel(todoTaskPojo.getCurrentNode()); - dto.setUrl(getTodoUrl()); + dto.setUrl(getTodoUrl() + "&flowId=" + todoTaskPojo.getId()); dtos.add(dto); } ycTaskResult.setCode("ok"); @@ -171,7 +171,8 @@ public class YcTaskResultServiceImpl implements YcTaskResultService { dto.setTitle(completedTaskPojo.getProcessTitle()); dto.setCreateDate(time2Str(completedTaskPojo.getCreationDate())); dto.setActivityName(completedTaskPojo.getCurrentNode()); - dto.setUrl(getCompletedUrl()); + dto.setSystemName("研发数据管理平台"); + dto.setUrl(getCompletedUrl() + "&flowId=" + completedTaskPojo.getId()); list.add(dto); }); ycTaskResult.setCode("ok"); @@ -234,7 +235,8 @@ public class YcTaskResultServiceImpl implements YcTaskResultService { dto.setTitle(initiatedTaskPojo.getProcessTitle()); dto.setCreateDate(time2Str(initiatedTaskPojo.getCreationDate())); dto.setActivityName(initiatedTaskPojo.getCurrentNode()); - dto.setUrl(getInitiatorUrl()); + dto.setUrl(getInitiatorUrl() + "&flowId=" + initiatedTaskPojo.getId()); + dto.setSystemName("研发数据管理平台"); list.add(dto); }); ycTaskResult.setCode("ok"); @@ -243,6 +245,27 @@ public class YcTaskResultServiceImpl implements YcTaskResultService { return ycTaskResult; } + @Override + public TodoTaskPojo getTodoById(String flowId) { + return bd.getBusinessDatabase() + .eq("id", flowId) + .doQueryFirst(TodoTaskPojo.class); + } + + @Override + public InitiatedTaskPojo getInitiatorById(String flowId) { + return bd.getBusinessDatabase() + .eq("id", flowId) + .doQueryFirst(InitiatedTaskPojo.class); + } + + @Override + public CompletedTaskPojo getCompletedById(String flowId) { + return bd.getBusinessDatabase() + .eq("id", flowId) + .doQueryFirst(CompletedTaskPojo.class); + } + private Date safeParseDateParam(String dateStr, Date defaultValue) { if (dateStr == null || dateStr.trim().isEmpty()) { return defaultValue; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d460100..08a3d83 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -60,7 +60,7 @@ deploy.powerjob.address=127.0.0.1:7700 # ====================== ??????MPAAS? ====================== mpaas.datasource[0].name=xdap_app_223770822127386625 mpaas.datasource[0].type=mysql -mpaas.datasource[0].url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8 +mpaas.datasource[0].url=jdbc:mysql://127.0.0.1:3306/xdap_app_223770822127386625?serverTimezone=GMT%2B8&characterEncoding=utf-8 mpaas.datasource[0].driver-class-name=com.mysql.cj.jdbc.Driver mpaas.datasource[0].username=root mpaas.datasource[0].password=qwer12 @@ -68,7 +68,7 @@ mpaas.datasource[0].minPoolSize=50 mpaas.datasource[0].maxPoolSize=1000 mpaas.datasource[1].name=yc_lrs_test_relsult mpaas.datasource[1].type=mysql -mpaas.datasource[1].url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8 +mpaas.datasource[1].url=jdbc:mysql://127.0.0.1:3306/yc_lrs_test_relsult?serverTimezone=GMT%2B8&characterEncoding=utf-8 mpaas.datasource[1].driver-class-name=com.mysql.cj.jdbc.Driver mpaas.datasource[1].username=root mpaas.datasource[1].password=qwer12 @@ -76,7 +76,7 @@ mpaas.datasource[1].minPoolSize=50 mpaas.datasource[1].maxPoolSize=1000 mpaas.datasource[2].name=qygs mpaas.datasource[2].type=mysql -mpaas.datasource[2].url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8 +mpaas.datasource[2].url=jdbc:mysql://127.0.0.1:3306/qygs?serverTimezone=GMT%2B8&characterEncoding=utf-8 mpaas.datasource[2].driver-class-name=com.mysql.cj.jdbc.Driver mpaas.datasource[2].username=root mpaas.datasource[2].password=qwer12