Merge remote-tracking branch 'origin/master'

This commit is contained in:
zjh 2025-12-08 17:02:21 +08:00
commit 0f2afff6ba
11 changed files with 343 additions and 36 deletions

View File

@ -4,9 +4,11 @@ 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.RolePerJoinRequest;
import com.xdap.self_development.controller.request.UserRoleBindingRequest;
import com.xdap.self_development.pojo.ModelRolesPojo;
import com.xdap.self_development.pojo.dto.PageResultDTO;
import com.xdap.self_development.pojo.view.MenuListView;
import com.xdap.self_development.pojo.view.MenuParamView;
import com.xdap.self_development.pojo.view.ParametersView;
import com.xdap.self_development.service.ModelMenuPermissionService;
import com.xdap.self_development.service.ModelRoleService;
@ -34,39 +36,93 @@ public class PermissionController {
//添加角色
@PostMapping("/addRoles")
Response addRoles(ModelRolesRequest request){
Response addRoles(@RequestBody ModelRolesRequest request){
try {
modelRoleService.addRoles(request);
} catch (Exception e) {
throw new RuntimeException("添加失败:" +e.getMessage());
throw new RuntimeException("添加失败:检查是否存在重复角色(名称+代码)" +e.getMessage());
}
return Response.ok();
}
//查看角色
@GetMapping("/selectRoles")
Response selectRoles(@RequestParam String userID){
Response selectRoles(){
try {
// PageResultDTO<ModelRolesPojo> modelRolesPojoPageResultDTO = modelRoleService.selectRoles(userID);
List<ModelRolesPojo> modelRolesPojos = modelRoleService.selectRoles(userID);
List<ModelRolesPojo> modelRolesPojos = modelRoleService.selectRoles();
return Response.ok().data(modelRolesPojos);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
//为角色添加权限
@PostMapping("/insertPerForRole")
public Response insertPerForRole(@RequestBody List<RolePerJoinRequest> request){
//删除角色
@GetMapping("/removeRoles")
Response removeRoles(@RequestParam String roleID,String userID){
try {
modelRoleService.insertPerForRole(request);
modelRoleService.removeRoles(roleID,userID);
return Response.ok();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
//修改角色信息
//获取用户权限
@GetMapping("/selectPersByUser")
Response selectPersByUser(@RequestParam String userOrDepID){
try {
List<MenuParamView> views = modelRoleService.selectPersByUser(userOrDepID);
return Response.ok().data(views);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
//获取角色权限
@GetMapping("/selectPersByRole")
Response selectPersByRole(@RequestParam String roleID){
try {
List<MenuParamView> views = modelRoleService.selectPersByRole(roleID);
return Response.ok().data(views);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
//为用户绑定角色
@PostMapping("/userRoleBinding")
public Response userRoleBinding(@RequestBody List<UserRoleBindingRequest> userRoleBindingRequest){
try {
modelRoleService.userRoleBinding(userRoleBindingRequest);
return Response.ok();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
//修改角色权限(关联权限修改 增加修改删除)
@PostMapping("/updatePerForRole")
public Response updatePerForRole(@RequestBody List<RolePerJoinRequest> request){
try {
modelRoleService.updatePerForRole(request);
return Response.ok();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
//修改单个角色信息(基础信息)
@PostMapping("/updateRole")
public Response updateRole(@RequestBody ModelRolesPojo modelRolesPojo,@RequestParam String userID){
try {
modelRoleService.updateRole(modelRolesPojo,userID);
return Response.ok();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
//菜单查询
@GetMapping("/selectMenus")
Response selectMenus(){

View File

@ -9,4 +9,5 @@ public class RolePerJoinRequest {
private String menuId;
private String parameterId;
private Integer parameterPer;
private String userId;
}

View File

@ -0,0 +1,11 @@
package com.xdap.self_development.controller.request;
import lombok.Data;
@Data
public class UserRoleBindingRequest {
//角色ID 用户ID 用户是否是部门0:用户 1部门
private String roleId;
private String userOrDeptId;
private Integer isDept;
}

View File

@ -0,0 +1,42 @@
package com.xdap.self_development.enums;
import lombok.Getter;
@Getter
public enum ParamPermissionEnum {
REVIEW(1, "查看"),
EDITOR(2, "编辑");
private final Integer code;
private final String desc;
ParamPermissionEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public static ParamPermissionEnum getByCode(Integer code) {
if (code == null) {
return null;
}
for (ParamPermissionEnum status : values()) {
if (status.code.equals(code)) {
return status;
}
}
return null;
}
public static ParamPermissionEnum getByDesc(String desc) {
if (desc == null) {
return null;
}
for (ParamPermissionEnum status : values()) {
if (status.desc.equals(desc)) {
return status;
}
}
return null;
}
}

View File

@ -16,5 +16,7 @@ public class MenuListView {
private String id;
private String parent_id;
private String menu;
private String menuDesc;
ArrayList<MenuListView> listViews;
}

View File

@ -0,0 +1,16 @@
package com.xdap.self_development.pojo.view;
import lombok.Data;
import java.util.ArrayList;
@Data
public class MenuParamView {
private String id;
private String menuPath;
private String subsystem;
private String parameterName;
private String parameterPer;
}

View File

@ -8,7 +8,7 @@ import lombok.NoArgsConstructor;
@SQLQuery(value = {
@SQL(view = "getAllParameters",
sql = "SELECT DISTINCT mp.parameter_name as 'parameterName', mp.id as 'parameterId' 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.parameter_name where mp.subsystem_name = #subsystem")
sql = "SELECT DISTINCT mp.parameter_name as 'parameterName', mp.id as 'parameterId' 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' and mp.subsystem_name = #subsystem ORDER BY mp.parameter_name ")
})
@Data
@AllArgsConstructor

View File

@ -1,6 +1,7 @@
package com.xdap.self_development.service;
import com.xdap.self_development.pojo.ModelMenuDictionaryPojo;
import com.xdap.self_development.pojo.view.MenuListView;
import java.util.List;
@ -10,4 +11,6 @@ public interface ModelMenuPermissionService {
//菜单查询
List<MenuListView> selectMenus();
//根据ID查询路径
ModelMenuDictionaryPojo selectMenuById(String menuId);
}

View File

@ -3,8 +3,10 @@ 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.pojo.ModelRolesPojo;
import com.xdap.self_development.pojo.dto.PageResultDTO;
import com.xdap.self_development.pojo.view.MenuParamView;
import java.util.ArrayList;
import java.util.List;
@ -14,8 +16,18 @@ public interface ModelRoleService {
void addRoles(ModelRolesRequest request);
PageResultDTO<ModelRolesPojo> selectRolesByPage(String userID);
List<ModelRolesPojo> selectRoles(String userID);
List<ModelRolesPojo> selectRoles();
void insertPerForRole(List<RolePerJoinRequest> request);
void updatePerForRole(List<RolePerJoinRequest> request);
void updateRole(ModelRolesPojo modelRolesPojo, String userID);
List<MenuParamView> selectPersByUser(String userOrDepID);
List<MenuParamView> selectPersByRole(String roleID);
void removeRoles(String roleID, String userID);
void userRoleBinding(List<UserRoleBindingRequest> userRoleBindingRequest);
}

View File

@ -38,6 +38,7 @@ public class ModelMenuPermissionServiceImpl implements ModelMenuPermissionServic
MenuListView node = new MenuListView();
node.setId(pojo.getId());
node.setMenu(pojo.getMenuName());
node.setMenuDesc(pojo.getMenuDesc());
node.setListViews(new ArrayList<>());
nodeMap.put(pojo.getId(), node);
}
@ -61,4 +62,16 @@ public class ModelMenuPermissionServiceImpl implements ModelMenuPermissionServic
return views;
}
@Override
public ModelMenuDictionaryPojo selectMenuById(String menuId) {
if (ObjectUtils.isEmpty(menuId)) {
throw new RuntimeException("根据ID查询菜单时ID未传入");
}
ModelMenuDictionaryPojo modelMenuDictionaryPojo = businessDatabase.getBusinessDatabase()
.eq("id", menuId)
.doQuery(ModelMenuDictionaryPojo.class).get(0);
return modelMenuDictionaryPojo;
}
}

View File

@ -4,18 +4,21 @@ package com.xdap.self_development.service.impl;
import com.xdap.self_development.config.BusinessDatabase;
import com.xdap.self_development.controller.request.ModelRolesRequest;
import com.xdap.self_development.controller.request.RolePerJoinRequest;
import com.xdap.self_development.pojo.ModelMenuParameterPojo;
import com.xdap.self_development.pojo.ModelRolePermissionPojo;
import com.xdap.self_development.pojo.ModelRolesPojo;
import com.xdap.self_development.pojo.Parameter;
import com.xdap.self_development.controller.request.UserRoleBindingRequest;
import com.xdap.self_development.enums.ParamPermissionEnum;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.pojo.*;
import com.xdap.self_development.pojo.dto.PageResultDTO;
import com.xdap.self_development.pojo.view.MenuListView;
import com.xdap.self_development.pojo.view.MenuParamView;
import com.xdap.self_development.service.ModelMenuPermissionService;
import com.xdap.self_development.service.ModelRoleService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@ -27,6 +30,8 @@ public class ModelRoleServiceImpl implements ModelRoleService {
@Autowired
BusinessDatabase businessDatabase;
@Autowired
ModelMenuPermissionService modelMenuPermissionService;
@Override
public void addRoles(ModelRolesRequest request) {
@ -34,6 +39,7 @@ public class ModelRoleServiceImpl implements ModelRoleService {
BeanUtils.copyProperties(request, modelRolesPojo);
modelRolesPojo.setCreatedBy(request.getUserId());
modelRolesPojo.setCreationDate(new Date());
modelRolesPojo.setIsEnabled(1);
businessDatabase.getBusinessDatabase()
.doInsert(modelRolesPojo);
}
@ -44,46 +50,191 @@ public class ModelRoleServiceImpl implements ModelRoleService {
}
@Override
public List<ModelRolesPojo> selectRoles(String userID) {
public List<ModelRolesPojo> selectRoles() {
List<ModelRolesPojo> modelRolesPojos = businessDatabase.getBusinessDatabase()
.eq("is_enabled", 1)
.doQuery(ModelRolesPojo.class);
return modelRolesPojos;
}
@Override
public void insertPerForRole(List<RolePerJoinRequest> requests) {
@Transactional(rollbackFor = CommonException.class)
public void updatePerForRole(List<RolePerJoinRequest> requests) {
//将老权限置为未启用
List<String> roleids = requests.stream().map(x -> x.getRoleId()).distinct().collect(Collectors.toList());
for (String roleId : roleids) {
if (ObjectUtils.isNotEmpty(roleId)) {
businessDatabase.getBusinessDatabase()
.update("is_enable", 0)
.eq("role_id", roleId)
.doUpdate(ModelRolePermissionPojo.class);
}
}
//增加新权限
for (RolePerJoinRequest request : requests) {
String roleId = request.getRoleId();
String menuId = request.getMenuId();
String parameterId = request.getParameterId();
Integer parameterPer = request.getParameterPer();
if (ObjectUtils.isEmpty(parameterId)||ObjectUtils.isEmpty(roleId)||ObjectUtils.isEmpty(menuId)) {
if (ObjectUtils.isEmpty(parameterId) || ObjectUtils.isEmpty(parameterPer) || ObjectUtils.isEmpty(roleId) || ObjectUtils.isEmpty(menuId)) {
log.warn("参数不完整无法写入");
continue;
}
//查找参数 组装权限
Parameter parameter = businessDatabase.getBusinessDatabase()
.eq("id", parameterId)
.doQuery(Parameter.class).get(0);
String uuid = String.valueOf(UUID.randomUUID());
ModelMenuParameterPojo modelMenuParameterPojo = new ModelMenuParameterPojo();
modelMenuParameterPojo.setMenuId(menuId);
modelMenuParameterPojo.setSubsystem(parameter.getSubsystemName());
modelMenuParameterPojo.setParameterId(parameterId);
modelMenuParameterPojo.setParameterPer(parameterPer);
modelMenuParameterPojo.setId(uuid);
modelMenuParameterPojo.setCreationDate(new Date());
businessDatabase.getBusinessDatabase()
.doInsert(modelMenuParameterPojo);
List<ModelMenuParameterPojo> modelMenuParameterPojos = businessDatabase.getBusinessDatabase()
.eq("menu_id", menuId)
.eq("parameter_id", parameterId)
.eq("parameter_per", parameterPer)
.doQuery(ModelMenuParameterPojo.class);
//如果参数权限没有配置
String id = String.valueOf(UUID.randomUUID());
if (ObjectUtils.isEmpty(modelMenuParameterPojos)) {
//查找参数 组装权限
Parameter parameter = businessDatabase.getBusinessDatabase()
.eq("id", parameterId)
.doQuery(Parameter.class).get(0);
ModelMenuParameterPojo modelMenuParameterPojo = new ModelMenuParameterPojo();
modelMenuParameterPojo.setMenuId(menuId);
modelMenuParameterPojo.setSubsystem(parameter.getSubsystemName());
modelMenuParameterPojo.setParameterId(parameterId);
modelMenuParameterPojo.setParameterPer(parameterPer);
modelMenuParameterPojo.setId(id);
modelMenuParameterPojo.setCreatedBy(request.getUserId());
modelMenuParameterPojo.setCreationDate(new Date());
businessDatabase.getBusinessDatabase()
.doInsert(modelMenuParameterPojo);
} else {
id = modelMenuParameterPojos.get(0).getId();
}
//为角色分配权限
ModelRolePermissionPojo pojo = new ModelRolePermissionPojo();
pojo.setRoleId(roleId);
pojo.setPerId(uuid);
pojo.setPerId(id);
pojo.setCreationDate(new Date());
pojo.setCreatedBy(request.getUserId());
businessDatabase.getBusinessDatabase()
.doInsert(pojo);
}
}
@Override
public void updateRole(ModelRolesPojo modelRolesPojo, String userID) {
modelRolesPojo.setLastUpdatedBy(userID);
modelRolesPojo.setLastUpdateDate(new Date());
businessDatabase.getBusinessDatabase()
.doUpdate(modelRolesPojo);
}
@Override
public List<MenuParamView> selectPersByUser(String userOrDepID) {
if (ObjectUtils.isEmpty(userOrDepID)) {
throw new RuntimeException("用户或部门ID为空");
}
List<ModelDepUserRolePojo> userOrDeps = businessDatabase.getBusinessDatabase()
.eq("user_or_dep", userOrDepID)
.doQuery(ModelDepUserRolePojo.class);
List<MenuParamView> paramViews = new ArrayList<>();
for (ModelDepUserRolePojo userOrDep : userOrDeps) {
List<MenuParamView> views = selectPersByRole(userOrDep.getRoleId());
paramViews.addAll(views);
}
return paramViews;
}
@Override
public List<MenuParamView> selectPersByRole(String roleID) {
if (ObjectUtils.isEmpty(roleID)) {
throw new RuntimeException("角色为空");
}
ArrayList<MenuParamView> menuParamViews = new ArrayList<>();
List<ModelRolePermissionPojo> role = businessDatabase.getBusinessDatabase()
.eq("role_id", roleID)
.doQuery(ModelRolePermissionPojo.class);
List<String> perids = role.stream().map(x -> x.getPerId()).distinct().collect(Collectors.toList());
if (ObjectUtils.isEmpty(role)) {
throw new RuntimeException("该角色没有权限:"+roleID);
}
List<ModelMenuParameterPojo> menuParameters = businessDatabase.getBusinessDatabase()
.in("id", perids)
.doQuery(ModelMenuParameterPojo.class);
//获取权限
for (ModelMenuParameterPojo menuParameter : menuParameters) {
ModelMenuDictionaryPojo modelMenuDictionaryPojo = modelMenuPermissionService.selectMenuById(menuParameter.getMenuId());
String parameterId = menuParameter.getParameterId();
//查找参数 组装权限
Parameter parameter = businessDatabase.getBusinessDatabase()
.eq("id", parameterId)
.doQuery(Parameter.class).get(0);
ParamPermissionEnum byCode = ParamPermissionEnum.getByCode(menuParameter.getParameterPer());
if (byCode == null) {
throw new RuntimeException("权限异常");
}
MenuParamView menuParamView = new MenuParamView();
menuParamView.setId(menuParameter.getId());
menuParamView.setMenuPath(modelMenuDictionaryPojo.getMenuDesc());
menuParamView.setSubsystem(menuParameter.getSubsystem());
menuParamView.setParameterName(parameter.getParameterName());
menuParamView.setParameterPer(byCode.getDesc());
menuParamViews.add(menuParamView);
}
return menuParamViews;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void removeRoles(String roleID, String userID) {
if (ObjectUtils.isEmpty(roleID)) {
throw new RuntimeException("删除的角色为空");
}
businessDatabase.getBusinessDatabase()
.update("is_enabled", 0)
.update("last_updated_by", userID)
.update("last_update_date", new Date())
.eq("id", roleID)
.doUpdate(ModelRolesPojo.class);
businessDatabase.getBusinessDatabase()
.update("is_enable", 0)
.update("last_updated_by", userID)
.update("last_update_date", new Date())
.eq("role_id", roleID)
.doUpdate(ModelRolePermissionPojo.class);
}
@Override
public void userRoleBinding(List<UserRoleBindingRequest> userRoleBindingRequest) {
//将角色绑定的老版本人员置为未启用
List<String> roleids = userRoleBindingRequest.stream().map(x -> x.getRoleId()).distinct().collect(Collectors.toList());
for (String roleId : roleids) {
if (ObjectUtils.isNotEmpty(roleId)) {
businessDatabase.getBusinessDatabase()
.update("is_enable", 0)
.eq("role_id", roleId)
.doUpdate(ModelDepUserRolePojo.class);
}
}
for (UserRoleBindingRequest roleBindingRequest : userRoleBindingRequest) {
String roleId = roleBindingRequest.getRoleId();
String userOrDeptId = roleBindingRequest.getUserOrDeptId();
Integer isDept = roleBindingRequest.getIsDept();
ModelDepUserRolePojo modelDepUserRolePojo = new ModelDepUserRolePojo();
modelDepUserRolePojo.setRoleId(roleId);
modelDepUserRolePojo.setUserOrDep(userOrDeptId);
if (isDept != 0 && isDept != 1) {
throw new RuntimeException("用户定位异常,非用户或部门");
}
modelDepUserRolePojo.setIsDep(isDept);
businessDatabase.getBusinessDatabase()
.doInsert(modelDepUserRolePojo);
}
}
}