上线版本-3.12
This commit is contained in:
parent
291c7abda2
commit
ffb85b85d6
@ -128,9 +128,11 @@ public class DataEntryEngineModelController {
|
||||
* @return 分页查询结果
|
||||
*/
|
||||
@GetMapping("/selectVersionByPage")
|
||||
public Response selectVersionByConditionPage() {
|
||||
public Response selectVersionByConditionPage(
|
||||
@NotBlank(message = "用户不能为空") @RequestParam String userId
|
||||
) {
|
||||
PageResultDTO<DataEntryEngineModelDto> tPageResultDTO =
|
||||
entryEngineModelService.selectVersionByConditionPage();
|
||||
entryEngineModelService.selectVersionByConditionPage(userId);
|
||||
return Response.ok().data(tPageResultDTO);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,11 +3,14 @@ package com.xdap.self_development.controller;
|
||||
|
||||
import com.definesys.mpaas.common.http.Response;
|
||||
import com.xdap.self_development.controller.request.ModelRolesRequest;
|
||||
import com.xdap.self_development.controller.request.PreAndRolePageRequest;
|
||||
import com.xdap.self_development.controller.request.RolePerJoinRequest;
|
||||
import com.xdap.self_development.controller.request.UserRoleBindingRequest;
|
||||
import com.xdap.self_development.domain.dto.PageResultDTO;
|
||||
import com.xdap.self_development.domain.pojo.ModelRolesPojo;
|
||||
import com.xdap.self_development.domain.view.MenuListView;
|
||||
import com.xdap.self_development.domain.view.MenuParamView;
|
||||
import com.xdap.self_development.domain.view.RoleInfoView;
|
||||
import com.xdap.self_development.exception.CommonException;
|
||||
import com.xdap.self_development.service.ModelMenuPermissionService;
|
||||
import com.xdap.self_development.service.ModelRoleService;
|
||||
@ -15,6 +18,7 @@ import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -191,4 +195,24 @@ public class PermissionController {
|
||||
return Response.ok().data(map);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据条件获取权限和角色
|
||||
*
|
||||
* @param request 条件
|
||||
* @return 前置角色和当前角色映射
|
||||
*/
|
||||
@PostMapping("/getPreAndRoleByCondition")
|
||||
public Response getPreAndRoleByCondition(
|
||||
@RequestBody PreAndRolePageRequest request
|
||||
) {
|
||||
PageResultDTO<RoleInfoView> result = modelRoleService.getPreAndRoleByCondition(request);
|
||||
return Response.ok().data(result);
|
||||
}
|
||||
|
||||
@GetMapping("/exportPreAndRole")
|
||||
public void exportPreAndRole(
|
||||
HttpServletResponse response
|
||||
) {
|
||||
modelRoleService.writePreAndRole(response);
|
||||
}
|
||||
}
|
||||
|
||||
@ -66,7 +66,6 @@ public class ParameterForm {
|
||||
/**
|
||||
* 部门
|
||||
*/
|
||||
@NotBlank(message = "部门不能为空")
|
||||
private String department;
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
package com.xdap.self_development.controller.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
|
||||
@Data
|
||||
public class PreAndRolePageRequest {
|
||||
@Min(message = "页码最小为1", value = 1)
|
||||
private Integer pageNum;
|
||||
@Min(message = "页大小最小为1", value = 1)
|
||||
private Integer pageSize;
|
||||
|
||||
private String username = "";
|
||||
private String department = "";
|
||||
private String roleName = "";
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
package com.xdap.self_development.controller.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class UserRoleBindingItem {
|
||||
// 用户或部门id
|
||||
private String userOrDeptId;
|
||||
// 是否为部门id
|
||||
private Integer isDept;
|
||||
}
|
||||
@ -8,6 +8,5 @@ import java.util.List;
|
||||
public class UserRoleBindingRequest {
|
||||
//角色ID 用户ID 用户是否是部门0:用户 1部门
|
||||
private String roleId;
|
||||
private List<String> userOrDeptIds;
|
||||
private Integer isDept;
|
||||
private List<UserRoleBindingItem> userOrDept;
|
||||
}
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
package com.xdap.self_development.domain.view;
|
||||
|
||||
import com.definesys.mpaas.query.annotation.SQL;
|
||||
import com.definesys.mpaas.query.annotation.SQLQuery;
|
||||
import lombok.Data;
|
||||
|
||||
@SQLQuery(value = {
|
||||
@SQL(view = "selectRoleAndPerInfo",
|
||||
sql = "SELECT r.id AS roleId, r.role_name AS roleName, r.role_name AS role_Name, r.role_code AS roleCode, r.role_description AS roleDescription, dur.user_or_dep AS userOrDep, dur.user_or_dep AS user_Or_Dep , dur.is_dep AS isDep, mp.permission_path AS permissionPath, mp.parameter_per as parameterPer FROM yfsjglpt_model_roles r LEFT JOIN yfsjglpt_model_dep_user_role dur ON r.id = dur.role_id LEFT JOIN yfsjglpt_model_role_permission rp ON dur.role_id = rp.role_id LEFT JOIN yfsjglpt_model_menu_parameter mp ON mp.id = rp.per_id WHERE r.is_enabled = 1 and dur.is_enable = 1 and (rp.is_enable is null or rp.is_enable = 1)")
|
||||
})
|
||||
@Data
|
||||
public class RoleAndPreView {
|
||||
// 角色相关
|
||||
// 角色Id
|
||||
private String roleId;
|
||||
// 角色名称
|
||||
private String roleName;
|
||||
// 角色描述
|
||||
private String roleDescription;
|
||||
|
||||
// 关联相关
|
||||
// 用户或部门ID
|
||||
private String userOrDep;
|
||||
// 是否是部门,0:个人;1:部门
|
||||
private Integer isDep;
|
||||
|
||||
// 权限相关
|
||||
// 参数权限
|
||||
private Integer parameterPer;
|
||||
// 权限路径
|
||||
private String permissionPath;
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
package com.xdap.self_development.domain.view;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnore;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class RoleInfoView {
|
||||
// 角色Id
|
||||
@ExcelIgnore
|
||||
private String roleId;
|
||||
// 角色名称
|
||||
@ExcelProperty("角色名称")
|
||||
private String roleName;
|
||||
// 成员姓名
|
||||
@ExcelProperty("成员姓名")
|
||||
private String username;
|
||||
// 成员工号
|
||||
@ExcelProperty("成员工号")
|
||||
private String userNumber;
|
||||
// 成员部门
|
||||
@ExcelProperty("成员部门")
|
||||
private String department;
|
||||
// 角色描述
|
||||
@ExcelProperty("角色描述")
|
||||
private String roleDescription;
|
||||
|
||||
// 成员Id
|
||||
@ExcelIgnore
|
||||
private String userId;
|
||||
|
||||
// 成员部门Id
|
||||
@ExcelIgnore
|
||||
private String departmentId;
|
||||
|
||||
// 查询权限
|
||||
@ExcelProperty("查询权限")
|
||||
private String queryPerms;
|
||||
// 编辑权限
|
||||
@ExcelProperty("编辑权限")
|
||||
private String editPerms;
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
package com.xdap.self_development.domain.view;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class UserDeptItem {
|
||||
private String username;
|
||||
private List<String> departmentIds;
|
||||
}
|
||||
@ -40,7 +40,7 @@ public interface DataEntryEngineModelService {
|
||||
|
||||
DataEntryEngineModelPojo selectBymodelId(String modelID);
|
||||
|
||||
PageResultDTO<DataEntryEngineModelDto> selectVersionByConditionPage();
|
||||
PageResultDTO<DataEntryEngineModelDto> selectVersionByConditionPage(String userId);
|
||||
|
||||
void delete(String modelId);
|
||||
|
||||
|
||||
@ -2,13 +2,17 @@ package com.xdap.self_development.service;
|
||||
|
||||
|
||||
import com.xdap.self_development.controller.request.ModelRolesRequest;
|
||||
import com.xdap.self_development.controller.request.PreAndRolePageRequest;
|
||||
import com.xdap.self_development.controller.request.RolePerJoinRequest;
|
||||
import com.xdap.self_development.controller.request.UserRoleBindingRequest;
|
||||
import com.xdap.self_development.domain.dto.PageResultDTO;
|
||||
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 com.xdap.self_development.domain.view.RoleInfoView;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -56,4 +60,12 @@ public interface ModelRoleService {
|
||||
Map<String, Map<String, Set<String>>> buildPermissionIndex(
|
||||
Set<String> permissions
|
||||
);
|
||||
|
||||
PageResultDTO<RoleInfoView> getPreAndRoleByCondition(PreAndRolePageRequest request);
|
||||
|
||||
void updateUserRole(UserRoleBindingRequest request, int isDept);
|
||||
|
||||
void writePreAndRole(HttpServletResponse response);
|
||||
|
||||
List<RoleInfoView> getPerAndRole(PreAndRolePageRequest request);
|
||||
}
|
||||
|
||||
@ -19,13 +19,11 @@ import com.xdap.self_development.domain.dto.PageResultDTO;
|
||||
import com.xdap.self_development.domain.enums.DistributeStatusEnum;
|
||||
import com.xdap.self_development.domain.enums.ParamValueVersionEnum;
|
||||
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.exception.ExcelImportException;
|
||||
import com.xdap.self_development.listener.EngineModelListener;
|
||||
import com.xdap.self_development.service.DataEntryEngineModelService;
|
||||
import com.xdap.self_development.service.EngineParamDetailService;
|
||||
import com.xdap.self_development.service.ResponsiblePerService;
|
||||
import com.xdap.self_development.service.XdapDeptUsersService;
|
||||
import com.xdap.self_development.service.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.poi.ss.usermodel.IndexedColors;
|
||||
@ -65,6 +63,8 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
|
||||
private EngineParamDetailService engineParamDetailService;
|
||||
@Resource
|
||||
private MpaasQueryFactory sw;
|
||||
@Resource
|
||||
private ModelRoleService modelRoleService;
|
||||
|
||||
private int page = 1;
|
||||
private int size = 10;
|
||||
@ -303,10 +303,6 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
|
||||
engineParamDetailPojo.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
|
||||
engineParamDetailPojo.setIsDistributedRes(Objects.equals(parameter.getParameterSource(), "数据平台手工录入") ? 0 : 2);
|
||||
engineParamDetailPojo.setIsDistributedFilled(Objects.equals(parameter.getParameterSource(), "数据平台手工录入") ? 0 : 2);
|
||||
//为每个参数生成默认责任人
|
||||
List<ResponsiblePersonPojo> personPojos = responsiblePerService.selectByDepName(parameter.getDepartment());
|
||||
if (ObjectUtils.isNotEmpty(personPojos)) {
|
||||
}
|
||||
engineParamDetailPojos.add(engineParamDetailPojo);
|
||||
|
||||
}
|
||||
@ -377,14 +373,45 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
|
||||
* @return 分页结果DTO
|
||||
*/
|
||||
@Override
|
||||
public PageResultDTO<DataEntryEngineModelDto> selectVersionByConditionPage() {
|
||||
public PageResultDTO<DataEntryEngineModelDto> selectVersionByConditionPage(String userId) {
|
||||
//todo
|
||||
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
|
||||
boolean ycFlag = false;
|
||||
boolean othFlag = false;
|
||||
|
||||
for (MenuParamView item : menuParamViews) {
|
||||
if (item.getPermissionPath().startsWith("竞品发动机数据") && !item.getPermissionPath().equals("竞品发动机数据审批流程")) {
|
||||
othFlag = true;
|
||||
continue;
|
||||
}
|
||||
if (item.getPermissionPath().startsWith("玉柴发动机数据") && !item.getPermissionPath().equals("玉柴发动机数据审批流程")) {
|
||||
ycFlag = true;
|
||||
continue;
|
||||
}
|
||||
if (ycFlag && othFlag) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
List<DataEntryEngineModelDto> list = bd.getBusinessDatabase()
|
||||
.viewQueryMode(true)
|
||||
.view("selectVersionByConditionPage")
|
||||
.doQuery(DataEntryEngineModelDto.class);
|
||||
PageResultDTO<DataEntryEngineModelDto> pageResultDTO = new PageResultDTO<>();
|
||||
pageResultDTO.setList(list);
|
||||
pageResultDTO.setTotalCount(list.size());
|
||||
|
||||
boolean finalYcFlag = ycFlag;
|
||||
boolean finalOthFlag = othFlag;
|
||||
List<DataEntryEngineModelDto> collect = list.stream().filter(x -> {
|
||||
if (finalYcFlag && Objects.equals(x.getYcOrOth(), "玉柴")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return finalOthFlag && Objects.equals(x.getYcOrOth(), "竞品");
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
pageResultDTO.setList(collect);
|
||||
pageResultDTO.setTotalCount(collect.size());
|
||||
return pageResultDTO;
|
||||
}
|
||||
|
||||
|
||||
@ -189,6 +189,10 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
||||
));
|
||||
}
|
||||
|
||||
private static String nvl(Object obj) {
|
||||
return obj == null ? "" : obj.toString();
|
||||
}
|
||||
|
||||
public Map<String, Set<String>> selectParamListByDetails(String modelID, Integer parameterVersion, String userId) {
|
||||
if (parameterVersion == null) {
|
||||
DataEntryEngineModelPojo engineModel = bd.getBusinessDatabase()
|
||||
@ -199,6 +203,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
||||
}
|
||||
parameterVersion = engineModel.getVersionNumber();
|
||||
}
|
||||
|
||||
List<EngineParamDetailPojo> pojoList = selectByIsUserId(modelID, parameterVersion, userId);
|
||||
|
||||
AtomicInteger seq = new AtomicInteger(1);
|
||||
@ -229,29 +234,37 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
||||
DataEntryEngineModelPojo dataEntryEngineModelPojo = bd.getBusinessDatabase()
|
||||
.eq("id", modelID)
|
||||
.doQueryFirst(DataEntryEngineModelPojo.class);
|
||||
if (dataEntryEngineModelPojo == null) {
|
||||
throw new CommonException("未找到机型的数据");
|
||||
}
|
||||
//状态代号
|
||||
String productNumber = dataEntryEngineModelPojo.getProductNumber();
|
||||
String productNumber = nvl(dataEntryEngineModelPojo.getProductNumber());
|
||||
//板块
|
||||
String plate = dataEntryEngineModelPojo.getPlate();
|
||||
String plate = nvl(dataEntryEngineModelPojo.getPlate());
|
||||
//平台
|
||||
String platform = dataEntryEngineModelPojo.getPlatform();
|
||||
String platform = nvl(dataEntryEngineModelPojo.getPlatform());
|
||||
//系列
|
||||
String series = dataEntryEngineModelPojo.getSeries();
|
||||
String series = nvl(dataEntryEngineModelPojo.getSeries());
|
||||
//细分市场
|
||||
String marketSegment = dataEntryEngineModelPojo.getMarketSegment();
|
||||
String marketSegment = nvl(dataEntryEngineModelPojo.getMarketSegment());
|
||||
//项目名称
|
||||
String projectName = dataEntryEngineModelPojo.getProjectName();
|
||||
String projectName = nvl(dataEntryEngineModelPojo.getProjectName());
|
||||
//项目编号
|
||||
String projectNumber = dataEntryEngineModelPojo.getProjectNumber();
|
||||
String projectNumber = nvl(dataEntryEngineModelPojo.getProjectNumber());
|
||||
//品牌
|
||||
String brand = dataEntryEngineModelPojo.getBrand();
|
||||
String brand = nvl(dataEntryEngineModelPojo.getBrand());
|
||||
//排放
|
||||
String emission = dataEntryEngineModelPojo.getEmission();
|
||||
String burnType = dataEntryEngineModelPojo.getBurnType();
|
||||
String engineCapacity = dataEntryEngineModelPojo.getEngineCapacity();
|
||||
Date productionDate = dataEntryEngineModelPojo.getProductionDate();
|
||||
String manufacturerName = dataEntryEngineModelPojo.getManufacturerName();
|
||||
String manufacturerAbbreviation = dataEntryEngineModelPojo.getManufacturerAbbreviation();
|
||||
String emission = nvl(dataEntryEngineModelPojo.getEmission());
|
||||
String burnType = nvl(dataEntryEngineModelPojo.getBurnType());
|
||||
String engineCapacity = nvl(dataEntryEngineModelPojo.getEngineCapacity());
|
||||
String productionDateStr;
|
||||
if (dataEntryEngineModelPojo.getProductionDate() != null) {
|
||||
productionDateStr = new SimpleDateFormat("yyyy-MM-dd").format(dataEntryEngineModelPojo.getProductionDate());
|
||||
} else {
|
||||
productionDateStr = ""; // 或者设置一个默认值
|
||||
}
|
||||
String manufacturerName = nvl(dataEntryEngineModelPojo.getManufacturerName());
|
||||
String manufacturerAbbreviation = nvl(dataEntryEngineModelPojo.getManufacturerAbbreviation());
|
||||
Set<String> strings = new HashSet<>();
|
||||
if ("玉柴".equals(dataEntryEngineModelPojo.getYcOrOth())) {
|
||||
strings.add("状态代号:" + productNumber);
|
||||
@ -260,7 +273,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
||||
strings.add("品牌:" + brand);
|
||||
strings.add("厂家全称:" + manufacturerName);
|
||||
strings.add("厂家简称:" + manufacturerAbbreviation);
|
||||
strings.add("生产日期:" + new SimpleDateFormat("yyyy-MM-dd").format(productionDate));
|
||||
strings.add("生产日期:" + productionDateStr);
|
||||
}
|
||||
strings.add("产品型号:" + dataEntryEngineModelPojo.getModelName());
|
||||
strings.add("板块:" + plate);
|
||||
|
||||
@ -1,15 +1,21 @@
|
||||
package com.xdap.self_development.service.impl;
|
||||
|
||||
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
||||
import com.definesys.mpaas.query.MpaasQuery;
|
||||
import com.xdap.api.moudle.department.pojo.entity.XdapDepartments;
|
||||
import com.xdap.api.moudle.department.pojo.entity.XdapDeptUsers;
|
||||
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
||||
import com.xdap.self_development.common.BusinessDatabase;
|
||||
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.controller.request.*;
|
||||
import com.xdap.self_development.domain.dto.PageResultDTO;
|
||||
import com.xdap.self_development.domain.enums.ParamPermissionEnum;
|
||||
import com.xdap.self_development.domain.pojo.*;
|
||||
import com.xdap.self_development.domain.view.MenuParamView;
|
||||
import com.xdap.self_development.domain.view.RoleAndPreView;
|
||||
import com.xdap.self_development.domain.view.RoleInfoView;
|
||||
import com.xdap.self_development.domain.view.UserDeptItem;
|
||||
import com.xdap.self_development.exception.CommonException;
|
||||
import com.xdap.self_development.service.ModelRoleService;
|
||||
import com.xdap.self_development.service.XdapDeptUsersService;
|
||||
@ -20,6 +26,11 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.Collator;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -40,6 +51,9 @@ public class ModelRoleServiceImpl implements ModelRoleService {
|
||||
@Resource
|
||||
private XdapDeptUsersService xdapDeptUsersService;
|
||||
|
||||
@Resource
|
||||
private ModelRoleService modelRoleService;
|
||||
|
||||
/**
|
||||
* 添加角色
|
||||
* 根据请求参数添加新角色
|
||||
@ -274,38 +288,146 @@ public class ModelRoleServiceImpl implements ModelRoleService {
|
||||
|
||||
}
|
||||
|
||||
private static List<String> processPermissions(List<String> perms) {
|
||||
if (perms == null || perms.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
class PathInfo {
|
||||
final String pathWithoutTrailingSlash;
|
||||
final boolean hasTrailingSlash;
|
||||
|
||||
PathInfo(String originalPath) {
|
||||
this.hasTrailingSlash = originalPath.endsWith("/");
|
||||
this.pathWithoutTrailingSlash = hasTrailingSlash ? originalPath.substring(0, originalPath.length() - 1) : originalPath;
|
||||
}
|
||||
|
||||
String getOriginalPath() {
|
||||
return pathWithoutTrailingSlash + (hasTrailingSlash ? "/" : "");
|
||||
}
|
||||
}
|
||||
|
||||
List<PathInfo> pathInfos = perms.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.map(PathInfo::new)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Set<String> permSetWithoutTrailingSlash = pathInfos.stream()
|
||||
.map(info -> info.pathWithoutTrailingSlash)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
List<PathInfo> filteredPathInfos = pathInfos.stream()
|
||||
.filter(info -> {
|
||||
String currentPath = info.pathWithoutTrailingSlash;
|
||||
int lastSlashIndex = currentPath.lastIndexOf('/');
|
||||
if (lastSlashIndex > 0) {
|
||||
String parentPath = currentPath.substring(0, lastSlashIndex);
|
||||
return !permSetWithoutTrailingSlash.contains(parentPath);
|
||||
}
|
||||
return true;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Map<String, List<PathInfo>> groupedByParent = filteredPathInfos.stream()
|
||||
.filter(info -> info.pathWithoutTrailingSlash.indexOf('/') >= 0)
|
||||
.collect(Collectors.groupingBy(info -> {
|
||||
String path = info.pathWithoutTrailingSlash;
|
||||
int lastSlashIndex = path.lastIndexOf('/');
|
||||
return path.substring(0, lastSlashIndex);
|
||||
}));
|
||||
|
||||
List<String> topLevelPerms = filteredPathInfos.stream()
|
||||
.filter(info -> info.pathWithoutTrailingSlash.indexOf('/') < 0)
|
||||
.map(info -> {
|
||||
String formattedPath = info.pathWithoutTrailingSlash.replace('/', '-');
|
||||
return formattedPath + (info.hasTrailingSlash ? "/" : "");
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<String> result = new ArrayList<>();
|
||||
|
||||
for (Map.Entry<String, List<PathInfo>> groupEntry : groupedByParent.entrySet()) {
|
||||
String parentPath = groupEntry.getKey();
|
||||
List<PathInfo> childInfos = groupEntry.getValue();
|
||||
|
||||
boolean anyHasTrailingSlash = childInfos.stream().anyMatch(info -> info.hasTrailingSlash);
|
||||
|
||||
List<String> leafNames = childInfos.stream()
|
||||
.filter(info -> !info.hasTrailingSlash)
|
||||
.map(info -> {
|
||||
String path = info.pathWithoutTrailingSlash;
|
||||
int lastSlashIndex = path.lastIndexOf('/');
|
||||
return path.substring(lastSlashIndex + 1);
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
String formattedParentPath = parentPath.replace('/', '-');
|
||||
|
||||
String finalPermString;
|
||||
if (anyHasTrailingSlash) {
|
||||
finalPermString = formattedParentPath + "/";
|
||||
} else {
|
||||
if (!leafNames.isEmpty()) {
|
||||
String joinedLeafNames = String.join("、", leafNames);
|
||||
finalPermString = formattedParentPath + "-" + joinedLeafNames;
|
||||
} else {
|
||||
finalPermString = formattedParentPath + "/";
|
||||
}
|
||||
}
|
||||
result.add(finalPermString);
|
||||
}
|
||||
|
||||
result.addAll(topLevelPerms);
|
||||
|
||||
Collections.sort(result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static RoleInfoView getRoleInfoView(Map.Entry<String, List<RoleInfoView>> entry) {
|
||||
List<RoleInfoView> views = entry.getValue();
|
||||
|
||||
if (views == null || views.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
RoleInfoView firstView = views.get(0);
|
||||
|
||||
List<String> allEditPerms = views.stream()
|
||||
.map(RoleInfoView::getEditPerms)
|
||||
.filter(p -> p != null && !p.isEmpty())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<String> allQueryPerms = views.stream()
|
||||
.map(RoleInfoView::getQueryPerms)
|
||||
.filter(p -> p != null && !p.isEmpty())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<String> processedEditPerms = processPermissions(allEditPerms);
|
||||
List<String> processedQueryPerms = processPermissions(allQueryPerms);
|
||||
|
||||
String combinedEditPerms = String.join(",\n", processedEditPerms);
|
||||
String combinedQueryPerms = String.join(",\n", processedQueryPerms);
|
||||
|
||||
firstView.setEditPerms(combinedEditPerms);
|
||||
firstView.setQueryPerms(combinedQueryPerms);
|
||||
|
||||
return firstView;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户角色绑定
|
||||
* 将用户或部门与角色进行绑定
|
||||
*
|
||||
* @param userRoleBindingRequest 用户角色绑定请求
|
||||
* @param request 用户角色绑定请求
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public void userRoleBinding(UserRoleBindingRequest userRoleBindingRequest) {
|
||||
//将角色绑定的老版本人员置为未启用
|
||||
String roleId = userRoleBindingRequest.getRoleId();
|
||||
Integer isDept = userRoleBindingRequest.getIsDept();
|
||||
if (ObjectUtils.isNotEmpty(roleId)) {
|
||||
businessDatabase.getBusinessDatabase()
|
||||
.update("is_enable", 0)
|
||||
.eq("role_id", roleId)
|
||||
.eq("is_dep", isDept)
|
||||
.doUpdate(ModelDepUserRolePojo.class);
|
||||
}
|
||||
for (String userOrDeptId : userRoleBindingRequest.getUserOrDeptIds()) {
|
||||
ModelDepUserRolePojo modelDepUserRolePojo = new ModelDepUserRolePojo();
|
||||
modelDepUserRolePojo.setRoleId(roleId);
|
||||
modelDepUserRolePojo.setUserOrDep(userOrDeptId);
|
||||
modelDepUserRolePojo.setIsEnable(1);
|
||||
if (isDept != 0 && isDept != 1) {
|
||||
throw new CommonException("用户定位异常,非用户或部门");
|
||||
}
|
||||
modelDepUserRolePojo.setIsDep(isDept);
|
||||
modelDepUserRolePojo.setCreationDate(new Date());
|
||||
businessDatabase.getBusinessDatabase()
|
||||
.doInsert(modelDepUserRolePojo);
|
||||
}
|
||||
public void userRoleBinding(UserRoleBindingRequest request) {
|
||||
// 更新用户
|
||||
modelRoleService.updateUserRole(request, 0);
|
||||
// 更新部门
|
||||
modelRoleService.updateUserRole(request, 1);
|
||||
|
||||
}
|
||||
|
||||
@ -486,4 +608,274 @@ public class ModelRoleServiceImpl implements ModelRoleService {
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUserRole(UserRoleBindingRequest request, int isDept) {
|
||||
String roleId = request.getRoleId();
|
||||
// 获取目前已绑定的id
|
||||
List<String> userOrDepartRoleIds = new ArrayList<>();
|
||||
List<ModelDepUserRolePojo> userOrDepartRoles = businessDatabase.getBusinessDatabase()
|
||||
.eq("is_enable", 1)
|
||||
.eq("role_id", roleId)
|
||||
.eq("is_dep", isDept)
|
||||
.doQuery(ModelDepUserRolePojo.class);
|
||||
if (!userOrDepartRoles.isEmpty()) {
|
||||
userOrDepartRoleIds.addAll(userOrDepartRoles.stream().map(ModelDepUserRolePojo::getUserOrDep).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
// 获取传入的用户id
|
||||
List<UserRoleBindingItem> userRolesReq = request.getUserOrDept().stream()
|
||||
.filter(item -> item.getIsDept() == isDept)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 找出需要需要禁用和新增的用户id
|
||||
List<String> userToAdd = new ArrayList<>();
|
||||
for (UserRoleBindingItem item : userRolesReq) {
|
||||
if (userOrDepartRoleIds.contains(item.getUserOrDeptId())) {
|
||||
userOrDepartRoleIds.remove(item.getUserOrDeptId());
|
||||
} else {
|
||||
userToAdd.add(item.getUserOrDeptId());
|
||||
}
|
||||
}
|
||||
|
||||
// 更新用户
|
||||
if (!userOrDepartRoleIds.isEmpty()) {
|
||||
businessDatabase.getBusinessDatabase()
|
||||
.in("user_or_dep", userOrDepartRoleIds)
|
||||
.eq("is_dep", isDept)
|
||||
.update("is_enable", 0)
|
||||
.eq("role_id", roleId)
|
||||
.doUpdate(ModelDepUserRolePojo.class);
|
||||
}
|
||||
|
||||
// 新增用户
|
||||
if (!userToAdd.isEmpty()) {
|
||||
for (String userOrDeptId : userToAdd) {
|
||||
// 检查当前用户是否已经被禁用
|
||||
ModelDepUserRolePojo unableUser = businessDatabase.getBusinessDatabase()
|
||||
.eq("user_or_dep", userOrDeptId)
|
||||
.eq("is_enable", 0)
|
||||
.eq("role_id", roleId)
|
||||
.eq("is_dep", isDept)
|
||||
.doQueryFirst(ModelDepUserRolePojo.class);
|
||||
if (unableUser == null) {
|
||||
ModelDepUserRolePojo modelDepUserRolePojo = new ModelDepUserRolePojo();
|
||||
modelDepUserRolePojo.setRoleId(roleId);
|
||||
modelDepUserRolePojo.setUserOrDep(userOrDeptId);
|
||||
modelDepUserRolePojo.setIsEnable(1);
|
||||
modelDepUserRolePojo.setIsDep(isDept);
|
||||
modelDepUserRolePojo.setCreationDate(new Date());
|
||||
businessDatabase.getBusinessDatabase()
|
||||
.doInsert(modelDepUserRolePojo);
|
||||
} else {
|
||||
businessDatabase.getBusinessDatabase()
|
||||
.eq("id", unableUser.getId())
|
||||
.update("is_enable", 1)
|
||||
.doUpdate(ModelDepUserRolePojo.class);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writePreAndRole(HttpServletResponse response) {
|
||||
String fileName = "系统权限导出_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"));
|
||||
try {
|
||||
String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20");
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");
|
||||
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
||||
response.setHeader("Pragma", "no-cache");
|
||||
response.setDateHeader("Expires", 0);
|
||||
|
||||
PreAndRolePageRequest request = new PreAndRolePageRequest();
|
||||
List<RoleInfoView> result = modelRoleService.getPerAndRole(request);
|
||||
|
||||
EasyExcel.write(response.getOutputStream(), RoleInfoView.class)
|
||||
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
||||
.sheet("系统权限")
|
||||
.doWrite(result);
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new CommonException("导出Excel失败: " + e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResultDTO<RoleInfoView> getPreAndRoleByCondition(PreAndRolePageRequest request) {
|
||||
List<RoleInfoView> result = modelRoleService.getPerAndRole(request);
|
||||
PageResultDTO<RoleInfoView> page = new PageResultDTO<>();
|
||||
if (result.isEmpty()) {
|
||||
page.setTotalCount(0);
|
||||
page.setList(new ArrayList<>());
|
||||
return page;
|
||||
}
|
||||
|
||||
int totalElements = result.size();
|
||||
int totalPages = (int) Math.ceil((double) totalElements / request.getPageSize());
|
||||
if (request.getPageNum() > totalPages) {
|
||||
request.setPageNum(totalPages);
|
||||
}
|
||||
int fromIndex = (request.getPageNum() - 1) * request.getPageSize();
|
||||
int toIndex = Math.min(fromIndex + request.getPageSize(), totalElements);
|
||||
|
||||
List<RoleInfoView> finalResult = new ArrayList<>(result.subList(fromIndex, toIndex));
|
||||
page.setList(finalResult);
|
||||
page.setTotalCount(result.size());
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RoleInfoView> getPerAndRole(PreAndRolePageRequest request) {
|
||||
Set<String> deptOrUsers = new HashSet<>();
|
||||
List<UserDeptItem> userDeparts = new ArrayList<>();
|
||||
// 按用户名查询
|
||||
if (!request.getUsername().isEmpty()) {
|
||||
List<XdapUsers> xdapUsers = businessDatabase.getSystemDatabase()
|
||||
.like("username", request.getUsername())
|
||||
.doQuery(XdapUsers.class);
|
||||
if (!xdapUsers.isEmpty()) {
|
||||
deptOrUsers.addAll(
|
||||
xdapUsers.stream().map(XdapUsers::getId).collect(Collectors.toList())
|
||||
);
|
||||
xdapUsers.forEach(user -> {
|
||||
UserDeptItem item = new UserDeptItem();
|
||||
item.setUsername(user.getUsername());
|
||||
List<XdapDeptUsers> deptUsers = businessDatabase.getSystemDatabase()
|
||||
.eq("user_id", user.getId())
|
||||
.doQuery(XdapDeptUsers.class);
|
||||
if (!deptUsers.isEmpty()) {
|
||||
deptOrUsers.addAll(
|
||||
deptUsers.stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList())
|
||||
);
|
||||
item.setDepartmentIds(deptUsers.stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList()));
|
||||
}
|
||||
userDeparts.add(item);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 按部门名查询
|
||||
if (!request.getDepartment().isEmpty()) {
|
||||
List<XdapDepartments> xdapDepartments = businessDatabase.getSystemDatabase()
|
||||
.like("name", request.getDepartment())
|
||||
.doQuery(XdapDepartments.class);
|
||||
if (!xdapDepartments.isEmpty()) {
|
||||
deptOrUsers.addAll(
|
||||
xdapDepartments.stream().map(XdapDepartments::getId).collect(Collectors.toSet())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 查询所有用户的角色和权限
|
||||
List<RoleAndPreView> roleAndPreViews = new ArrayList<>();
|
||||
MpaasQuery query = businessDatabase.getBusinessDatabase()
|
||||
.viewQueryMode(true)
|
||||
.view("selectRoleAndPerInfo")
|
||||
.like("role_name", request.getRoleName());
|
||||
// 根据部门名和用户名查角色
|
||||
if (!deptOrUsers.isEmpty()) {
|
||||
query.in("userOrDep", deptOrUsers);
|
||||
roleAndPreViews.addAll(
|
||||
query.doQuery(RoleAndPreView.class)
|
||||
);
|
||||
} else {
|
||||
if (request.getUsername().isEmpty() && request.getDepartment().isEmpty()) {
|
||||
roleAndPreViews.addAll(
|
||||
query.doQuery(RoleAndPreView.class)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 查询用户和部门并构建临时返回
|
||||
List<RoleInfoView> resultTemp = new ArrayList<>();
|
||||
roleAndPreViews.forEach(roleAndPreView -> {
|
||||
RoleInfoView view = new RoleInfoView();
|
||||
if (roleAndPreView.getIsDep() == 0) {
|
||||
XdapUsers user = businessDatabase.getSystemDatabase()
|
||||
.eq("id", roleAndPreView.getUserOrDep())
|
||||
.doQueryFirst(XdapUsers.class);
|
||||
if (user == null) {
|
||||
view.setUsername("未知用户-" + roleAndPreView.getUserOrDep());
|
||||
} else {
|
||||
view.setUsername(user.getUsername());
|
||||
view.setUserNumber(user.getUserNumber());
|
||||
view.setUserId(user.getId());
|
||||
}
|
||||
} else if (roleAndPreView.getIsDep() == 1) {
|
||||
XdapDepartments department = businessDatabase.getSystemDatabase()
|
||||
.eq("id", roleAndPreView.getUserOrDep())
|
||||
.doQueryFirst(XdapDepartments.class);
|
||||
if (department == null) {
|
||||
view.setDepartment("未知部门-" + roleAndPreView.getUserOrDep());
|
||||
} else {
|
||||
view.setDepartment(department.getName());
|
||||
view.setDepartmentId(department.getId());
|
||||
if (!userDeparts.isEmpty()) {
|
||||
String usernames = userDeparts.stream()
|
||||
.filter(userDepart -> userDepart.getDepartmentIds() != null)
|
||||
.filter(userDepart -> userDepart.getDepartmentIds().contains(department.getId()))
|
||||
.map(UserDeptItem::getUsername)
|
||||
.collect(Collectors.joining("、"));
|
||||
view.setUsername(usernames);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
view.setRoleId(roleAndPreView.getRoleId());
|
||||
view.setRoleName(roleAndPreView.getRoleName());
|
||||
view.setRoleDescription(roleAndPreView.getRoleDescription());
|
||||
|
||||
if (roleAndPreView.getParameterPer() != null) {
|
||||
if (roleAndPreView.getParameterPer() == 1) {
|
||||
view.setQueryPerms(roleAndPreView.getPermissionPath());
|
||||
} else if (roleAndPreView.getParameterPer() == 2) {
|
||||
view.setEditPerms(roleAndPreView.getPermissionPath());
|
||||
}
|
||||
}
|
||||
|
||||
resultTemp.add(view);
|
||||
});
|
||||
|
||||
// 构建聚合返回
|
||||
List<RoleInfoView> result = new ArrayList<>();
|
||||
Map<String, List<RoleInfoView>> userGroup = resultTemp.stream()
|
||||
.filter(item ->
|
||||
item.getUserId() != null && !item.getUserId().isEmpty())
|
||||
.collect(Collectors.groupingBy(item -> item.getRoleId() + "_" + item.getUserId()));
|
||||
|
||||
Map<String, List<RoleInfoView>> deptGroup = resultTemp.stream()
|
||||
.filter(item ->
|
||||
item.getDepartmentId() != null && !item.getDepartmentId().isEmpty())
|
||||
.collect(Collectors.groupingBy(item -> item.getRoleId() + "_" + item.getDepartmentId()));
|
||||
|
||||
for (Map.Entry<String, List<RoleInfoView>> entry : userGroup.entrySet()) {
|
||||
RoleInfoView view = getRoleInfoView(entry);
|
||||
result.add(view);
|
||||
}
|
||||
|
||||
for (Map.Entry<String, List<RoleInfoView>> entry : deptGroup.entrySet()) {
|
||||
RoleInfoView view = getRoleInfoView(entry);
|
||||
result.add(view);
|
||||
}
|
||||
|
||||
if (result.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
result.forEach(item -> {
|
||||
if (Objects.equals(item.getRoleName(), "超级管理员")) {
|
||||
item.setEditPerms("全部权限");
|
||||
item.setQueryPerms("全部权限");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
result.sort(Comparator.comparing(RoleInfoView::getRoleName, Collator.getInstance(Locale.CHINESE)));
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,8 +87,11 @@ public class ParameterServiceImpl implements ParameterService {
|
||||
public TemplateInfoView maintenanceParameters(UpdateParameterForm form) {
|
||||
// 公式格式检查
|
||||
for (ParameterForm parameter : form.getParameterForms()) {
|
||||
if (parameter.getOperation() == null || parameter.getOperation().isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ("数据平台手工录入".equals(parameter.getParameterSource()) && parameter.getDepartment() == null) {
|
||||
if ("数据平台手工录入".equals(parameter.getParameterSource()) && (parameter.getDepartment() == null || parameter.getDepartment().isEmpty())) {
|
||||
throw new CommonException(String.format("参数'%s'部门不能为空", parameter.getParameterName()));
|
||||
}
|
||||
if (parameter.getPartsName() == null || parameter.getPartsName().isEmpty()) {
|
||||
|
||||
@ -217,8 +217,9 @@ public class XdapDeptUsersServiceImpl implements XdapDeptUsersService {
|
||||
if (depts.isEmpty() || commonDept == null) {
|
||||
return userInfoView;
|
||||
}
|
||||
List<String> deptIds = depts.stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList());
|
||||
List<XdapDepartments> xdapDepartments = bd.getSystemDatabase()
|
||||
.in("id", depts)
|
||||
.in("id", deptIds)
|
||||
.eq("parent_id", commonDept.getId())
|
||||
.doQuery(XdapDepartments.class);
|
||||
if (xdapDepartments.isEmpty()) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user