新增:根据权限返回参数

This commit is contained in:
zjh 2025-12-10 14:28:27 +08:00
parent c95a14e4d0
commit d0570b19ad
11 changed files with 202 additions and 30 deletions

View File

@ -5,12 +5,14 @@ import com.xdap.runtime.service.RuntimeAppContextService;
import com.xdap.self_development.config.BusinessDatabase; import com.xdap.self_development.config.BusinessDatabase;
import com.xdap.self_development.pojo.view.MenuParamView; import com.xdap.self_development.pojo.view.MenuParamView;
import com.xdap.self_development.service.ModelRoleService; import com.xdap.self_development.service.ModelRoleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j
@Component @Component
public class UserPermissionGetter { public class UserPermissionGetter {
@Resource @Resource
@ -21,20 +23,90 @@ public class UserPermissionGetter {
private RuntimeAppContextService runtimeAppContextService; private RuntimeAppContextService runtimeAppContextService;
// 获取子系统权限 // 获取子系统权限
public Set<String> getSubsystemPermissions() { public List<String> getSubsystemPermissions() {
String currentUserId = runtimeAppContextService.getCurrentUserId(); // String currentUserId = runtimeAppContextService.getCurrentUserId();
// 获取用户权限 String currentUserId = "zjh";
Set<String> result = modelRoleService.selectPersByUser(currentUserId) Set<String> result = new HashSet<>();
.stream().map(MenuParamView::getSubsystem).collect(Collectors.toSet()); try {
// 获取用户所在部门权限 // 获取用户权限
List<String> deptIds = businessDatabase.getBusinessDatabase() result = modelRoleService.selectPersByUser(currentUserId)
.eq("user_id", currentUserId).doQuery(XdapDeptUsers.class)
.stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList());
for (String deptId : deptIds) {
Set<String> deptPermissions = modelRoleService.selectPersByUser(deptId)
.stream().map(MenuParamView::getSubsystem).collect(Collectors.toSet()); .stream().map(MenuParamView::getSubsystem).collect(Collectors.toSet());
result.addAll(deptPermissions); // 获取用户所在部门权限
List<String> deptIds = businessDatabase.getBusinessDatabase()
.eq("user_id", currentUserId).doQuery(XdapDeptUsers.class)
.stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList());
for (String deptId : deptIds) {
Set<String> 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<String> getParamPermissions(String subsystem) {
// String currentUserId = runtimeAppContextService.getCurrentUserId();
String currentUserId = "zjh";
Set<String> result = new HashSet<>();
try {
// 获取用户权限
Map<String, List<MenuParamView>> 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<String> deptIds = businessDatabase.getBusinessDatabase()
.eq("user_id", currentUserId).doQuery(XdapDeptUsers.class)
.stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList());
for (String deptId : deptIds) {
Map<String, List<MenuParamView>> 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<String> getParamPermissions() {
// String currentUserId = runtimeAppContextService.getCurrentUserId();
String currentUserId = "zjh";
Set<String> result = new HashSet<>();
try {
// 获取用户权限
Map<String, List<MenuParamView>> 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<String> deptIds = businessDatabase.getBusinessDatabase()
.eq("user_id", currentUserId).doQuery(XdapDeptUsers.class)
.stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList());
for (String deptId : deptIds) {
Map<String, List<MenuParamView>> 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);
} }
} }

View File

@ -54,7 +54,7 @@ public class BenchmarkingReportController {
// 修改对标报告并发起审批 // 修改对标报告并发起审批
@PostMapping("/restartReportApproval") @PostMapping("/restartReportApproval")
public Response restartReportApproval( public Response restartReportApproval(
@Valid UpdateBenchmarkingReportForm form, @Valid @RequestBody UpdateBenchmarkingReportForm form,
BindingResult bindingResult BindingResult bindingResult
) { ) {
if (bindingResult.hasErrors()) { if (bindingResult.hasErrors()) {

View File

@ -1,6 +1,7 @@
package com.xdap.self_development.controller; package com.xdap.self_development.controller;
import com.definesys.mpaas.common.http.Response; 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.common.UserPermissionGetter;
import com.xdap.self_development.config.BusinessDatabase; import com.xdap.self_development.config.BusinessDatabase;
import com.xdap.self_development.pojo.*; import com.xdap.self_development.pojo.*;
@ -26,11 +27,22 @@ public class DeleteController {
private BusinessDatabase bd; private BusinessDatabase bd;
@Resource @Resource
private UserPermissionGetter getter; private UserPermissionGetter getter;
@Resource
private MpaasQueryFactory queryFactory;
@GetMapping("/test")
public Response test() { @GetMapping("/getTables")
Set<String> subsystemPermissions = getter.getSubsystemPermissions(); public Response getTables() {
return Response.ok().data(subsystemPermissions); Map<String, Object> map = new HashMap<>();
List<Map<String, Object>> list = queryFactory.buildFromDatasource("yc_lrs_test_relsult")
.table("ads_prd_f_yfsjglpt_fdjlbjcjb")
.doQuery();
List<Map<String, Object>> 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") @GetMapping("getAll")

View File

@ -2,6 +2,7 @@ package com.xdap.self_development.controller;
import com.definesys.mpaas.common.http.Response; import com.definesys.mpaas.common.http.Response;
import com.definesys.mpaas.query.db.PageQueryResult; 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.ParameterPageForm;
import com.xdap.self_development.controller.form.UpdateParameterForm; import com.xdap.self_development.controller.form.UpdateParameterForm;
import com.xdap.self_development.exception.CommonException; import com.xdap.self_development.exception.CommonException;

View File

@ -75,7 +75,6 @@ public class TemplateController {
@RequestPart(value = "templateRowId", required = false) String templateRowId, @RequestPart(value = "templateRowId", required = false) String templateRowId,
@RequestPart("createBy") String createBy @RequestPart("createBy") String createBy
) { ) {
MyResponse templateImportProblemView = templateService.importTemplate(file, templateRowId, createBy); MyResponse templateImportProblemView = templateService.importTemplate(file, templateRowId, createBy);
if (templateImportProblemView.getFlag()) { if (templateImportProblemView.getFlag()) {
return Response.error("导入异常").data(templateImportProblemView); return Response.error("导入异常").data(templateImportProblemView);

View File

@ -1,16 +1,17 @@
package com.xdap.self_development.listener; package com.xdap.self_development.listener;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.alibaba.excel.metadata.data.ReadCellData; import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.listener.ReadListener; 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.common.MyResponse;
import com.xdap.self_development.pojo.Parameter; import com.xdap.self_development.pojo.Parameter;
import com.xdap.self_development.service.TemplateService; import com.xdap.self_development.service.TemplateService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
import java.util.Map;
@Slf4j @Slf4j
public class SheetDataListener implements ReadListener<Parameter> { public class SheetDataListener implements ReadListener<Parameter> {
@ -23,6 +24,15 @@ public class SheetDataListener implements ReadListener<Parameter> {
private String currentSheetName; private String currentSheetName;
MyResponse problems; MyResponse problems;
// 用于存储表头
private Set<String> actualHeaders = new HashSet<>();
// 是否已检查过表头
private boolean headerChecked = false;
// 必须包含的字段集合
private final Set<String> requiredHeaders;
// 标记当前sheet是否有效
private boolean validSheet = false;
public SheetDataListener(TemplateService templateService, public SheetDataListener(TemplateService templateService,
String templateRowId, String createBy, MyResponse problems) { String templateRowId, String createBy, MyResponse problems) {
this.templateService = templateService; this.templateService = templateService;
@ -30,17 +40,33 @@ public class SheetDataListener implements ReadListener<Parameter> {
this.createBy = createBy; this.createBy = createBy;
this.cachedDataList = new ArrayList<>(BATCH_SIZE); this.cachedDataList = new ArrayList<>(BATCH_SIZE);
this.problems = problems; this.problems = problems;
this.requiredHeaders = getIncludeColumnFieldNames();
} }
@Override @Override
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) { public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
// 可以在这里处理表头验证 // 获取表头
actualHeaders = headMap.values().stream()
.map(ReadCellData::getStringValue)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
currentSheetName = context.readSheetHolder().getSheetName(); currentSheetName = context.readSheetHolder().getSheetName();
log.info("开始解析Sheet: {}", currentSheetName); log.info("开始解析Sheet: {}", currentSheetName);
} }
@Override @Override
public void invoke(Parameter data, AnalysisContext context) { public void invoke(Parameter data, AnalysisContext context) {
// 第一次读取数据时检查表头
if (!headerChecked) {
checkHeaderAndSkipIfNeeded(context);
headerChecked = true;
}
// 如果sheet无效直接返回不处理数据
if (!validSheet) {
return;
}
if (currentSheetName == null) { if (currentSheetName == null) {
currentSheetName = context.readSheetHolder().getSheetName(); currentSheetName = context.readSheetHolder().getSheetName();
} }
@ -57,6 +83,7 @@ public class SheetDataListener implements ReadListener<Parameter> {
if (!cachedDataList.isEmpty()) { if (!cachedDataList.isEmpty()) {
processBatch(); processBatch();
} }
resetForNextSheet();
} }
private void processBatch() { private void processBatch() {
@ -69,4 +96,59 @@ public class SheetDataListener implements ReadListener<Parameter> {
); );
cachedDataList.clear(); 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<String> getIncludeColumnFieldNames() {
Set<String> 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;
}
} }

View File

@ -11,7 +11,7 @@ import java.sql.Timestamp;
@SQLQuery(value = { @SQLQuery(value = {
@SQL(view = "getReportById", @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) @EqualsAndHashCode(callSuper = true)
@Data @Data

View File

@ -14,7 +14,7 @@ import lombok.NoArgsConstructor;
@SQL(view = "getAllSubsystem", @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 = "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(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(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") 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")
}) })

View File

@ -390,7 +390,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
flow.setFlowStatus(status); flow.setFlowStatus(status);
bd.getBusinessDatabase() bd.getBusinessDatabase()
.rowid("id", flow.getRowId()) .rowid("id", flow.getRowId())
.update("status", flow.getFlowStatus()) .update("flow_status", flow.getFlowStatus())
.doUpdate(ApprovalFlow.class); .doUpdate(ApprovalFlow.class);
// 更新报告状态 // 更新报告状态
BenchmarkingReport report = bd.getBusinessDatabase() BenchmarkingReport report = bd.getBusinessDatabase()

View File

@ -4,6 +4,7 @@ import com.definesys.mpaas.query.db.PageQueryResult;
import com.xdap.api.moudle.user.vo.LoginUserVo; import com.xdap.api.moudle.user.vo.LoginUserVo;
import com.xdap.runtime.service.RuntimeAppContextService; import com.xdap.runtime.service.RuntimeAppContextService;
import com.xdap.runtime.service.RuntimeUserService; 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.config.BusinessDatabase;
import com.xdap.self_development.controller.form.ParameterForm; import com.xdap.self_development.controller.form.ParameterForm;
import com.xdap.self_development.controller.form.ParameterPageForm; import com.xdap.self_development.controller.form.ParameterPageForm;
@ -36,7 +37,8 @@ import java.util.stream.Collectors;
public class ParameterServiceImpl implements ParameterService { public class ParameterServiceImpl implements ParameterService {
@Resource @Resource
private BusinessDatabase bd; private BusinessDatabase bd;
@Resource
private UserPermissionGetter permissionGetter;
@Override @Override
public PageQueryResult<Parameter> getParameterByCondition(ParameterPageForm form) { public PageQueryResult<Parameter> getParameterByCondition(ParameterPageForm form) {
@ -49,10 +51,12 @@ public class ParameterServiceImpl implements ParameterService {
} }
//todo 假定子系统名和模板名一致 //todo 假定子系统名和模板名一致
List<String> permissionIds = permissionGetter.getParamPermissions(template.getTemplateName());
return bd.getBusinessDatabase() return bd.getBusinessDatabase()
.viewQueryMode(true) .viewQueryMode(true)
.view("selectParametersByTemplateId") .view("selectParametersByTemplateId")
.setVar("templateId", template.getId()) .setVar("templateId", template.getId())
.setVar("permissionIds", permissionIds)
.like("parameter_name", form.getParameterName()) .like("parameter_name", form.getParameterName())
.like("parts_name", form.getPartsName()) .like("parts_name", form.getPartsName())
.like("parameter_type", form.getParameterType()) .like("parameter_type", form.getParameterType())

View File

@ -4,6 +4,7 @@ import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.definesys.mpaas.query.db.PageQueryResult; import com.definesys.mpaas.query.db.PageQueryResult;
import com.xdap.self_development.common.MyResponse; 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.config.BusinessDatabase;
import com.xdap.self_development.controller.form.*; import com.xdap.self_development.controller.form.*;
import com.xdap.self_development.exception.CommonException; import com.xdap.self_development.exception.CommonException;
@ -35,11 +36,15 @@ import java.util.stream.Collectors;
public class TemplateServiceImpl implements TemplateService { public class TemplateServiceImpl implements TemplateService {
@Resource @Resource
private BusinessDatabase bd; private BusinessDatabase bd;
@Resource
private UserPermissionGetter permissionGetter;
@Override @Override
public PageQueryResult<Template> getTemplateByCondition(TemplatePageForm form) { public PageQueryResult<Template> getTemplateByCondition(TemplatePageForm form) {
// List<String> subsystemPermissions = permissionGetter.getSubsystemPermissions();
return bd.getBusinessDatabase() return bd.getBusinessDatabase()
.viewQueryMode(true) .viewQueryMode(true)
// .setVar("names", "")
.view("getLatestTemplate") .view("getLatestTemplate")
.like("template_name", form.getTemplateName()) .like("template_name", form.getTemplateName())
.doPageQuery(form.getPageNumber(), form.getPageSize(), Template.class); .doPageQuery(form.getPageNumber(), form.getPageSize(), Template.class);
@ -103,11 +108,8 @@ public class TemplateServiceImpl implements TemplateService {
filename.toLowerCase().endsWith(".xlsx"))) { filename.toLowerCase().endsWith(".xlsx"))) {
throw new CommonException("只支持 .xls 或 .xlsx 格式的文件"); throw new CommonException("只支持 .xls 或 .xlsx 格式的文件");
} }
MyResponse problems = MyResponse problems =
new MyResponse(false, new ArrayList<>(), new StringBuilder("已完成导入:无")); new MyResponse(false, new ArrayList<>(), new StringBuilder("已完成导入:无"));
try (InputStream inputStream = file.getInputStream()){ try (InputStream inputStream = file.getInputStream()){
EasyExcel.read( EasyExcel.read(
inputStream, inputStream,