diff --git a/src/main/java/com/xdap/self_development/common/UserPermissionGetter.java b/src/main/java/com/xdap/self_development/common/UserPermissionGetter.java index b49a64c..c07f80f 100644 --- a/src/main/java/com/xdap/self_development/common/UserPermissionGetter.java +++ b/src/main/java/com/xdap/self_development/common/UserPermissionGetter.java @@ -5,12 +5,14 @@ import com.xdap.runtime.service.RuntimeAppContextService; import com.xdap.self_development.config.BusinessDatabase; import com.xdap.self_development.pojo.view.MenuParamView; import com.xdap.self_development.service.ModelRoleService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; +@Slf4j @Component public class UserPermissionGetter { @Resource @@ -21,20 +23,90 @@ public class UserPermissionGetter { private RuntimeAppContextService runtimeAppContextService; // 获取子系统权限 - public Set getSubsystemPermissions() { - String currentUserId = runtimeAppContextService.getCurrentUserId(); - // 获取用户权限 - Set result = modelRoleService.selectPersByUser(currentUserId) - .stream().map(MenuParamView::getSubsystem).collect(Collectors.toSet()); - // 获取用户所在部门权限 - List deptIds = businessDatabase.getBusinessDatabase() - .eq("user_id", currentUserId).doQuery(XdapDeptUsers.class) - .stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList()); - for (String deptId : deptIds) { - Set deptPermissions = modelRoleService.selectPersByUser(deptId) + public List getSubsystemPermissions() { +// String currentUserId = runtimeAppContextService.getCurrentUserId(); + String currentUserId = "zjh"; + Set result = new HashSet<>(); + try { + // 获取用户权限 + result = modelRoleService.selectPersByUser(currentUserId) .stream().map(MenuParamView::getSubsystem).collect(Collectors.toSet()); - result.addAll(deptPermissions); + // 获取用户所在部门权限 + List deptIds = businessDatabase.getBusinessDatabase() + .eq("user_id", currentUserId).doQuery(XdapDeptUsers.class) + .stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList()); + for (String deptId : deptIds) { + Set deptPermissions = modelRoleService.selectPersByUser(deptId) + .stream().map(MenuParamView::getSubsystem).collect(Collectors.toSet()); + result.addAll(deptPermissions); + } + } - return result; + catch (Exception e) { + log.error(e.getMessage()); + } + return new ArrayList<>(result); + } + + // 获取子系统下的参数权限 + public List getParamPermissions(String subsystem) { +// String currentUserId = runtimeAppContextService.getCurrentUserId(); + String currentUserId = "zjh"; + Set result = new HashSet<>(); + try { + // 获取用户权限 + Map> collected = modelRoleService.selectPersByUser(currentUserId) + .stream().collect(Collectors.groupingBy(MenuParamView::getSubsystem)); + if (collected.containsKey(subsystem)) { + result.addAll(collected.get(subsystem) + .stream().map(MenuParamView::getParameterId).collect(Collectors.toSet())); + } + // 获取用户所在部门权限 + List deptIds = businessDatabase.getBusinessDatabase() + .eq("user_id", currentUserId).doQuery(XdapDeptUsers.class) + .stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList()); + for (String deptId : deptIds) { + Map> collected1 = modelRoleService.selectPersByUser(deptId) + .stream().collect(Collectors.groupingBy(MenuParamView::getSubsystem)); + if (collected1.containsKey(subsystem)) { + result.addAll(collected1.get(subsystem) + .stream().map(MenuParamView::getParameterId).collect(Collectors.toSet())); + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return new ArrayList<>(result); + } + + // 获取全部参数权限 + public List getParamPermissions() { +// String currentUserId = runtimeAppContextService.getCurrentUserId(); + String currentUserId = "zjh"; + Set result = new HashSet<>(); + try { + // 获取用户权限 + Map> collected = modelRoleService.selectPersByUser(currentUserId) + .stream().collect(Collectors.groupingBy(MenuParamView::getSubsystem)); + for (String subsystem : collected.keySet()) { + result.addAll(collected.get(subsystem) + .stream().map(MenuParamView::getParameterId).collect(Collectors.toSet())); + } + // 获取用户所在部门权限 + List deptIds = businessDatabase.getBusinessDatabase() + .eq("user_id", currentUserId).doQuery(XdapDeptUsers.class) + .stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList()); + for (String deptId : deptIds) { + Map> collected1 = modelRoleService.selectPersByUser(deptId) + .stream().collect(Collectors.groupingBy(MenuParamView::getSubsystem)); + for (String subsystem : collected1.keySet()) { + result.addAll(collected1.get(subsystem) + .stream().map(MenuParamView::getParameterId).collect(Collectors.toSet())); + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return new ArrayList<>(result); } } diff --git a/src/main/java/com/xdap/self_development/controller/BenchmarkingReportController.java b/src/main/java/com/xdap/self_development/controller/BenchmarkingReportController.java index 13f0b81..84fd804 100644 --- a/src/main/java/com/xdap/self_development/controller/BenchmarkingReportController.java +++ b/src/main/java/com/xdap/self_development/controller/BenchmarkingReportController.java @@ -54,7 +54,7 @@ public class BenchmarkingReportController { // 修改对标报告并发起审批 @PostMapping("/restartReportApproval") public Response restartReportApproval( - @Valid UpdateBenchmarkingReportForm form, + @Valid @RequestBody UpdateBenchmarkingReportForm form, BindingResult bindingResult ) { if (bindingResult.hasErrors()) { 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 a0fd46e..f2cb3e4 100644 --- a/src/main/java/com/xdap/self_development/controller/DeleteController.java +++ b/src/main/java/com/xdap/self_development/controller/DeleteController.java @@ -1,6 +1,7 @@ package com.xdap.self_development.controller; import com.definesys.mpaas.common.http.Response; +import com.definesys.mpaas.query.MpaasQueryFactory; import com.xdap.self_development.common.UserPermissionGetter; import com.xdap.self_development.config.BusinessDatabase; import com.xdap.self_development.pojo.*; @@ -26,11 +27,22 @@ public class DeleteController { private BusinessDatabase bd; @Resource private UserPermissionGetter getter; + @Resource + private MpaasQueryFactory queryFactory; - @GetMapping("/test") - public Response test() { - Set subsystemPermissions = getter.getSubsystemPermissions(); - return Response.ok().data(subsystemPermissions); + + @GetMapping("/getTables") + public Response getTables() { + Map map = new HashMap<>(); + List> list = queryFactory.buildFromDatasource("yc_lrs_test_relsult") + .table("ads_prd_f_yfsjglpt_fdjlbjcjb") + .doQuery(); + List> list1 = queryFactory.buildFromDatasource("yc_lrs_test_relsult") + .table("ads_prd_f_tc_flsxb") + .doQuery(); + map.put("ads_prd_f_yfsjglpt_fdjlbjcjb", list); + map.put("ads_prd_f_tc_flsxb", list1); + return Response.ok().data(map); } @GetMapping("getAll") diff --git a/src/main/java/com/xdap/self_development/controller/ParameterController.java b/src/main/java/com/xdap/self_development/controller/ParameterController.java index 6b58e1f..715e1c2 100644 --- a/src/main/java/com/xdap/self_development/controller/ParameterController.java +++ b/src/main/java/com/xdap/self_development/controller/ParameterController.java @@ -2,6 +2,7 @@ package com.xdap.self_development.controller; import com.definesys.mpaas.common.http.Response; import com.definesys.mpaas.query.db.PageQueryResult; +import com.xdap.self_development.common.UserPermissionGetter; import com.xdap.self_development.controller.form.ParameterPageForm; import com.xdap.self_development.controller.form.UpdateParameterForm; import com.xdap.self_development.exception.CommonException; diff --git a/src/main/java/com/xdap/self_development/controller/TemplateController.java b/src/main/java/com/xdap/self_development/controller/TemplateController.java index 5130d93..cbc7ca1 100644 --- a/src/main/java/com/xdap/self_development/controller/TemplateController.java +++ b/src/main/java/com/xdap/self_development/controller/TemplateController.java @@ -75,7 +75,6 @@ public class TemplateController { @RequestPart(value = "templateRowId", required = false) String templateRowId, @RequestPart("createBy") String createBy ) { - MyResponse templateImportProblemView = templateService.importTemplate(file, templateRowId, createBy); if (templateImportProblemView.getFlag()) { return Response.error("导入异常").data(templateImportProblemView); 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 f3febf6..58b74fe 100644 --- a/src/main/java/com/xdap/self_development/listener/SheetDataListener.java +++ b/src/main/java/com/xdap/self_development/listener/SheetDataListener.java @@ -1,16 +1,17 @@ package com.xdap.self_development.listener; import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.exception.ExcelAnalysisException; import com.alibaba.excel.metadata.data.ReadCellData; import com.alibaba.excel.read.listener.ReadListener; +import com.alibaba.excel.read.metadata.holder.ReadSheetHolder; import com.xdap.self_development.common.MyResponse; import com.xdap.self_development.pojo.Parameter; import com.xdap.self_development.service.TemplateService; import lombok.extern.slf4j.Slf4j; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; @Slf4j public class SheetDataListener implements ReadListener { @@ -23,6 +24,15 @@ public class SheetDataListener implements ReadListener { private String currentSheetName; MyResponse problems; + // 用于存储表头 + private Set actualHeaders = new HashSet<>(); + // 是否已检查过表头 + private boolean headerChecked = false; + // 必须包含的字段集合 + private final Set requiredHeaders; + // 标记当前sheet是否有效 + private boolean validSheet = false; + public SheetDataListener(TemplateService templateService, String templateRowId, String createBy, MyResponse problems) { this.templateService = templateService; @@ -30,17 +40,33 @@ public class SheetDataListener implements ReadListener { this.createBy = createBy; this.cachedDataList = new ArrayList<>(BATCH_SIZE); this.problems = problems; + this.requiredHeaders = getIncludeColumnFieldNames(); } @Override public void invokeHead(Map> headMap, AnalysisContext context) { - // 可以在这里处理表头验证 + // 获取表头 + actualHeaders = headMap.values().stream() + .map(ReadCellData::getStringValue) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); currentSheetName = context.readSheetHolder().getSheetName(); log.info("开始解析Sheet: {}", currentSheetName); } @Override public void invoke(Parameter data, AnalysisContext context) { + // 第一次读取数据时检查表头 + if (!headerChecked) { + checkHeaderAndSkipIfNeeded(context); + headerChecked = true; + } + + // 如果sheet无效,直接返回,不处理数据 + if (!validSheet) { + return; + } + if (currentSheetName == null) { currentSheetName = context.readSheetHolder().getSheetName(); } @@ -57,6 +83,7 @@ public class SheetDataListener implements ReadListener { if (!cachedDataList.isEmpty()) { processBatch(); } + resetForNextSheet(); } private void processBatch() { @@ -69,4 +96,59 @@ public class SheetDataListener implements ReadListener { ); cachedDataList.clear(); } + + /** + * 检查表头并决定是否跳过当前sheet + */ + private void checkHeaderAndSkipIfNeeded(AnalysisContext context) { + if (actualHeaders.isEmpty()) { + problems.setFlag(true); + problems.getErrors().add("未读取到表头,跳过sheet"); + log.info("未读取到表头,跳过sheet"); + validSheet = false; + return; + } + // 检查实际表头是否包含所有必需字段 + boolean containsAll = actualHeaders.containsAll(requiredHeaders); + if (!containsAll) { + StringBuilder sb = new StringBuilder(); + requiredHeaders.stream() + .filter(required -> !actualHeaders.contains(required)) + .collect(Collectors.toSet()).forEach(required -> { + sb.append(required).append(" "); + }); + // 不包含必需字段,跳过当前sheet + problems.setFlag(true); + problems.getErrors().add(currentSheetName + "缺少字段:"+ sb); + validSheet = false; + } else { + validSheet = true; + System.out.println("Sheet表头验证通过,开始处理数据"); + } + } + + /** + * 重置状态,准备读取下一个sheet + */ + private void resetForNextSheet() { + headerChecked = false; + validSheet = false; + actualHeaders.clear(); + } + + private static Set getIncludeColumnFieldNames() { + Set includeColumnFieldNames; + includeColumnFieldNames = new HashSet<>(); + includeColumnFieldNames.add("序号"); + includeColumnFieldNames.add("子系统"); + includeColumnFieldNames.add("类型"); + includeColumnFieldNames.add("零部件名称"); + includeColumnFieldNames.add("参数名称"); + includeColumnFieldNames.add("单位"); + includeColumnFieldNames.add("参数计划来源"); + includeColumnFieldNames.add("当前可适用的分类属性表编号(需要修订)或公式"); + includeColumnFieldNames.add("填写部门"); + includeColumnFieldNames.add("备注"); + return includeColumnFieldNames; + } } diff --git a/src/main/java/com/xdap/self_development/pojo/BenchmarkingReport.java b/src/main/java/com/xdap/self_development/pojo/BenchmarkingReport.java index 85aadda..2123b10 100644 --- a/src/main/java/com/xdap/self_development/pojo/BenchmarkingReport.java +++ b/src/main/java/com/xdap/self_development/pojo/BenchmarkingReport.java @@ -11,7 +11,7 @@ import java.sql.Timestamp; @SQLQuery(value = { @SQL(view = "getReportById", - sql = "SELECT ymbr.id, ymbr.title, ymbr.manufacturer_name, ymbr.model_name, ymbr.module , ymbr.manufacturer_abbreviation, ymbr.model_abbreviation, ymbr.product_number, ymbr.plate, ymbr.platform , ymbr.market_segment, ymbr.project_name, ymbr.project_number, ymbr.upload_time, ymbr.file_path , ymbr.status, xu.username AS create_by FROM yfsjglpt_model_benchmarking_report ymbr LEFT JOIN xdap_users xu ON xu.id = ymbr.create_by where ymbr.id = #reportId") + sql = "SELECT ymbr.series, ymbr.id, ymbr.title, ymbr.manufacturer_name, ymbr.model_name, ymbr.module , ymbr.manufacturer_abbreviation, ymbr.model_abbreviation, ymbr.product_number, ymbr.plate, ymbr.platform , ymbr.market_segment, ymbr.project_name, ymbr.project_number, ymbr.upload_time, ymbr.file_path , ymbr.status, xu.username AS create_by FROM yfsjglpt_model_benchmarking_report ymbr LEFT JOIN xdap_users xu ON xu.id = ymbr.create_by where ymbr.id = #reportId") }) @EqualsAndHashCode(callSuper = true) @Data 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 05fe39e..2eea38a 100644 --- a/src/main/java/com/xdap/self_development/pojo/Parameter.java +++ b/src/main/java/com/xdap/self_development/pojo/Parameter.java @@ -14,7 +14,7 @@ import lombok.NoArgsConstructor; @SQL(view = "getAllSubsystem", sql = "SELECT DISTINCT mp.subsystem_name FROM yfsjglpt_model_parameter mp INNER JOIN yfsjglpt_model_parameter_and_template mpat ON mp.id = mpat.parameter_id INNER JOIN yfsjglpt_model_template mt ON mpat.template_id = mt.id INNER JOIN ( SELECT template_name, MAX(version) AS max_version FROM yfsjglpt_model_template WHERE status = 'COMPLETE' GROUP BY template_name ) latest ON mt.template_name = latest.template_name AND mt.version = latest.max_version WHERE mt.status = 'COMPLETE' ORDER BY mp.subsystem_name"), @SQL(view = "selectParametersByTemplateId", - 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"), + sql = "select p.* from yfsjglpt_model_parameter p left join yfsjglpt_model_parameter_and_template tap on p.id = tap.parameter_id where p.id in (#permissionIds) and tap.template_id = #templateId"), @SQL(view = "selectMaxNumber", sql = "SELECT max(parameter_number) AS max_number FROM yfsjglpt_model_parameter p LEFT JOIN yfsjglpt_model_parameter_and_template tap ON p.id = tap.parameter_id WHERE tap.template_id = #templateId") }) diff --git a/src/main/java/com/xdap/self_development/service/impl/BenchmarkingReportServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/BenchmarkingReportServiceImpl.java index 7e3dfc9..c008f1a 100644 --- a/src/main/java/com/xdap/self_development/service/impl/BenchmarkingReportServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/BenchmarkingReportServiceImpl.java @@ -390,7 +390,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService flow.setFlowStatus(status); bd.getBusinessDatabase() .rowid("id", flow.getRowId()) - .update("status", flow.getFlowStatus()) + .update("flow_status", flow.getFlowStatus()) .doUpdate(ApprovalFlow.class); // 更新报告状态 BenchmarkingReport report = bd.getBusinessDatabase() 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 24c32e8..25c6801 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 @@ -4,6 +4,7 @@ import com.definesys.mpaas.query.db.PageQueryResult; import com.xdap.api.moudle.user.vo.LoginUserVo; import com.xdap.runtime.service.RuntimeAppContextService; import com.xdap.runtime.service.RuntimeUserService; +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; @@ -36,7 +37,8 @@ import java.util.stream.Collectors; public class ParameterServiceImpl implements ParameterService { @Resource private BusinessDatabase bd; - + @Resource + private UserPermissionGetter permissionGetter; @Override public PageQueryResult getParameterByCondition(ParameterPageForm form) { @@ -49,10 +51,12 @@ public class ParameterServiceImpl implements ParameterService { } //todo 假定子系统名和模板名一致 + List permissionIds = permissionGetter.getParamPermissions(template.getTemplateName()); return bd.getBusinessDatabase() .viewQueryMode(true) .view("selectParametersByTemplateId") .setVar("templateId", template.getId()) + .setVar("permissionIds", permissionIds) .like("parameter_name", form.getParameterName()) .like("parts_name", form.getPartsName()) .like("parameter_type", form.getParameterType()) 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 a7eb2f7..cae850d 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 @@ -4,6 +4,7 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.definesys.mpaas.query.db.PageQueryResult; 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.form.*; import com.xdap.self_development.exception.CommonException; @@ -35,11 +36,15 @@ import java.util.stream.Collectors; public class TemplateServiceImpl implements TemplateService { @Resource private BusinessDatabase bd; + @Resource + private UserPermissionGetter permissionGetter; @Override public PageQueryResult