From f691877b83fa619548aa6dd98d39d39a71d995dd Mon Sep 17 00:00:00 2001 From: zjh <15615273395@163.com> Date: Tue, 30 Dec 2025 09:32:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9:=E6=A8=A1=E6=9D=BF=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/view/TodoAndReportListView.java | 2 +- .../service/ParameterService.java | 22 ++++++++ .../service/impl/ParameterServiceImpl.java | 55 +++++++++++-------- .../service/impl/TemplateServiceImpl.java | 20 +++++++ 4 files changed, 76 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/xdap/self_development/pojo/view/TodoAndReportListView.java b/src/main/java/com/xdap/self_development/pojo/view/TodoAndReportListView.java index 814b774..463de91 100644 --- a/src/main/java/com/xdap/self_development/pojo/view/TodoAndReportListView.java +++ b/src/main/java/com/xdap/self_development/pojo/view/TodoAndReportListView.java @@ -12,7 +12,7 @@ import java.util.List; // CASE af.flow_status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'DRAFT' THEN 3 WHEN 'REJECTED' THEN 4 ELSE 5 END ASC, @SQLQuery(value = { @SQL(view = "getAllReportApprovalList", - sql = "SELECT af.id AS flowId, r.id AS reportId, r.title AS title, af.flow_status AS status, af.create_by AS createBy , xu.username AS username, af.created_time AS createdTime, ac.assignees AS current_users FROM yfsjglpt_model_approval_flow af LEFT JOIN approval_config ac ON af.id = ac.approval_id AND af.current_node = ac.node_order LEFT JOIN yfsjglpt_model_benchmarking_report r ON af.template_id = r.id LEFT JOIN xdap_users xu ON xu.id = af.create_by WHERE af.flow_type = 2 AND r.title LIKE CONCAT('%', #title, '%') AND af.flow_status LIKE CONCAT('%', #status, '%') AND af.created_time LIKE CONCAT('%', #createdTime, '%') AND xu.username LIKE CONCAT('%', #username, '%') ORDER BY af.created_time DESC") + sql = "SELECT af.id AS flowId, r.id AS reportId, af.process_title AS title, af.flow_status AS status, af.create_by AS createBy , xu.username AS username, af.created_time AS createdTime, ac.assignees AS current_users FROM yfsjglpt_model_approval_flow af LEFT JOIN approval_config ac ON af.id = ac.approval_id AND af.current_node = ac.node_order LEFT JOIN yfsjglpt_model_benchmarking_report r ON af.template_id = r.id LEFT JOIN xdap_users xu ON xu.id = af.create_by WHERE af.flow_type = 2 AND r.title LIKE CONCAT('%', #title, '%') AND af.flow_status LIKE CONCAT('%', #status, '%') AND af.created_time LIKE CONCAT('%', #createdTime, '%') AND xu.username LIKE CONCAT('%', #username, '%') ORDER BY af.created_time DESC") }) @Data public class TodoAndReportListView { diff --git a/src/main/java/com/xdap/self_development/service/ParameterService.java b/src/main/java/com/xdap/self_development/service/ParameterService.java index 67a9c40..1f6b0e2 100644 --- a/src/main/java/com/xdap/self_development/service/ParameterService.java +++ b/src/main/java/com/xdap/self_development/service/ParameterService.java @@ -1,13 +1,35 @@ package com.xdap.self_development.service; import com.xdap.self_development.common.MyPageResult; +import com.xdap.self_development.controller.form.ParameterForm; import com.xdap.self_development.controller.form.ParameterPageForm; import com.xdap.self_development.controller.form.UpdateParameterForm; import com.xdap.self_development.pojo.Parameter; +import com.xdap.self_development.pojo.Template; import com.xdap.self_development.pojo.view.TemplateInfoView; +import com.xdap.self_development.service.impl.ParameterServiceImpl; + +import java.util.List; public interface ParameterService { MyPageResult getParameterByCondition(ParameterPageForm form); TemplateInfoView maintenanceParameters(UpdateParameterForm form); + + ParameterServiceImpl.TemplateBenchmark getTemplateBenchmark(String templateRowId); + + void validateTemplateStatus(ParameterServiceImpl.TemplateBenchmark benchmark); + + Template createOrReuseNewTemplate(ParameterServiceImpl.TemplateBenchmark benchmark, String userId); + + ParameterServiceImpl.ParameterProcessingResult processParameters( + List parameterForms, + List existingParameters, + Template baseTemplate, + Template newTemplate, + String userId, + boolean isLastComplete + ); + + void saveAllData(Template originalTemplate, Template newTemplate, ParameterServiceImpl.ParameterProcessingResult result); } 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 ce342d9..939f0ab 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 @@ -2,7 +2,6 @@ package com.xdap.self_development.service.impl; import com.definesys.mpaas.query.db.PageQueryResult; import com.xdap.self_development.common.MyPageResult; -import com.xdap.self_development.common.UserPermissionGetter; import com.xdap.self_development.config.BusinessDatabase; import com.xdap.self_development.controller.form.ParameterForm; import com.xdap.self_development.controller.form.ParameterPageForm; @@ -33,7 +32,7 @@ public class ParameterServiceImpl implements ParameterService { @Resource private BusinessDatabase bd; @Resource - private UserPermissionGetter permissionGetter; + private ParameterService myself; @Override public MyPageResult getParameterByCondition(ParameterPageForm form) { @@ -87,22 +86,23 @@ public class ParameterServiceImpl implements ParameterService { } } // 获取基准模板和最新模板 - TemplateBenchmark benchmark = getTemplateBenchmark(form.getTemplateRowId()); + TemplateBenchmark benchmark = myself.getTemplateBenchmark(form.getTemplateRowId()); // 校验模板状态 - validateTemplateStatus(benchmark); + myself.validateTemplateStatus(benchmark); // 创建/复用新版本模板 - Template newVersionTemplate = createOrReuseNewTemplate(benchmark, form.getUserId()); + Template newVersionTemplate = myself.createOrReuseNewTemplate(benchmark, form.getUserId()); // 处理参数变更 - ParameterProcessingResult processingResult = processParameters( + ParameterProcessingResult processingResult = myself.processParameters( form.getParameterForms(), benchmark.getParameters(), benchmark.getBaseTemplate(), newVersionTemplate, - form.getUserId() + form.getUserId(), + Objects.equals(newVersionTemplate.getId(), benchmark.getBaseTemplate().getId()) ); // 保存所有数据 - saveAllData(benchmark.getBaseTemplate(), newVersionTemplate, processingResult); + myself.saveAllData(benchmark.getBaseTemplate(), newVersionTemplate, processingResult); TemplateInfoView result = new TemplateInfoView(); result.setTemplateRowId(newVersionTemplate.getRowId()); @@ -114,7 +114,7 @@ public class ParameterServiceImpl implements ParameterService { /** * 校验模板状态 */ - private void validateTemplateStatus(TemplateBenchmark benchmark) { + public void validateTemplateStatus(TemplateBenchmark benchmark) { // 当前修改的模板不为最新版 if (!Objects.equals(benchmark.getLastTemplate().getId(), benchmark.getBaseTemplate().getId())) { throw new CommonException("该模板不可修改,请修改最新版本"); @@ -140,7 +140,7 @@ public class ParameterServiceImpl implements ParameterService { /** * 创建/复用新版本模板 */ - private Template createOrReuseNewTemplate(TemplateBenchmark benchmark, String userId) { + public Template createOrReuseNewTemplate(TemplateBenchmark benchmark, String userId) { Template baseTemplate = benchmark.getBaseTemplate(); // 草稿状态复用原模板,已发布创建新版本 if ("DRAFT".equals(baseTemplate.getStatus())) { @@ -161,7 +161,7 @@ public class ParameterServiceImpl implements ParameterService { } } - private TemplateBenchmark getTemplateBenchmark(String templateRowId) { + public TemplateBenchmark getTemplateBenchmark(String templateRowId) { // 基准模板(用户选择的要比较的版本) Template baseTemplate = bd.getBusinessDatabase() .rowid("id", templateRowId) @@ -196,7 +196,7 @@ public class ParameterServiceImpl implements ParameterService { */ @Data @AllArgsConstructor - private static class TemplateBenchmark { + public static class TemplateBenchmark { private final Template baseTemplate; private final Template lastTemplate; private final List parameters; @@ -207,7 +207,7 @@ public class ParameterServiceImpl implements ParameterService { */ @Data @AllArgsConstructor - private static class ParameterProcessingResult { + public static class ParameterProcessingResult { private final List newParameters; private final List revisionRecords; } @@ -220,12 +220,13 @@ public class ParameterServiceImpl implements ParameterService { } } - private ParameterProcessingResult processParameters( + public ParameterProcessingResult processParameters( List parameterForms, List existingParameters, Template baseTemplate, Template newTemplate, - String userId + String userId, + boolean isLastComplete ) { Map parameterMap = existingParameters.stream() .collect(Collectors.toMap(Parameter::getId, param -> param, (k1, k2) -> { @@ -252,13 +253,18 @@ public class ParameterServiceImpl implements ParameterService { handleDeleteOperation(parameterForm, parameterMap, newTemplate, revisionRecords, baseTemplate); break; case UNCHANGED: - handleUnchangedOperation(parameterForm, parameterMap, newParameters); + handleUnchangedOperation(parameterForm, parameterMap, newParameters, isLastComplete); break; } } // 处理模板剩余的参数 List unmatchedParameters = findUnmatchedParameters(parameterMap, parameterForms); + // 未修改的参数也需要新增然后添加进新的参数列表中 + if (!isLastComplete && !unmatchedParameters.isEmpty()) { + unmatchedParameters.forEach(parameter -> parameter.setId(null)); + bd.getBusinessDatabase().doBatchInsert(unmatchedParameters); + } newParameters.addAll(unmatchedParameters); return new ParameterProcessingResult(newParameters, revisionRecords); } @@ -370,7 +376,7 @@ public class ParameterServiceImpl implements ParameterService { private String handleParameterChange(String name, String originalParameter, String updatedParameter) { StringBuilder sb = new StringBuilder(); - if ((originalParameter == null && updatedParameter.isEmpty())) { + if ((originalParameter == null && (updatedParameter == null || updatedParameter.isEmpty()))) { return sb.toString(); } if (!Objects.equals(originalParameter, updatedParameter)) { @@ -421,13 +427,18 @@ public class ParameterServiceImpl implements ParameterService { */ private void handleUnchangedOperation( ParameterForm form, Map parameterMap, - List newParameters + List newParameters, boolean isLastComplete ) { Parameter unchangedParameter = parameterMap.get(form.getParameterId()); - - if (unchangedParameter != null) { - newParameters.add(unchangedParameter); + if (unchangedParameter == null) { + return; } + // 未修改的参数也需要新增然后添加进新的参数列表中 + if (!isLastComplete) { + unchangedParameter.setId(null); + bd.getBusinessDatabase().doInsert(unchangedParameter); + } + newParameters.add(unchangedParameter); } public List findUnmatchedParameters( @@ -446,7 +457,7 @@ public class ParameterServiceImpl implements ParameterService { /** * 保存所有数据 */ - private void saveAllData(Template originalTemplate, Template newTemplate, ParameterProcessingResult result) { + public void saveAllData(Template originalTemplate, Template newTemplate, ParameterProcessingResult result) { List parameterIds = bd.getBusinessDatabase() .eq("template_id", newTemplate.getId()) .doQuery(TemplateAndParameter.class).stream() 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 85cffe8..8aecec6 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 @@ -296,12 +296,18 @@ public class TemplateServiceImpl implements TemplateService { .eq("template_name", templateName) .doQueryFirst(Template.class); + List lastTemplateParameters = new ArrayList<>(); if (lastTemplate != null) { // 基于最新版本创建新版本 targetTemplate = new Template( templateName, lastTemplate.getVersion() + 1, "DRAFT", Timestamp.valueOf(LocalDateTime.now()), null, createBy, System.currentTimeMillis(), 0 ); + lastTemplateParameters = bd.getBusinessDatabase() + .viewQueryMode(true) + .view("selectParametersByTId") + .setVar("templateId", lastTemplate.getId()) + .doQuery(Parameter.class); } else { // 如果没有同名模板,创建第一个版本 targetTemplate = new Template( @@ -309,7 +315,21 @@ public class TemplateServiceImpl implements TemplateService { null, createBy, System.currentTimeMillis(), 0 ); } + bd.getBusinessDatabase().doInsert(targetTemplate); + + if (!lastTemplateParameters.isEmpty()) { + lastTemplateParameters.forEach(parameter -> parameter.setId(null)); + bd.getBusinessDatabase().doBatchInsert(lastTemplateParameters); + List list = new ArrayList<>(); + for (Parameter parameter : lastTemplateParameters) { + TemplateAndParameter templateAndParameter = new TemplateAndParameter(); + templateAndParameter.setTemplateId(targetTemplate.getId()); + templateAndParameter.setParameterId(parameter.getId()); + list.add(templateAndParameter); + } + bd.getBusinessDatabase().doBatchInsert(list); + } } // 获取目标模板的现有参数