commit:同步1.3版本

This commit is contained in:
Jerry
2021-01-03 22:29:02 +08:00
parent ef316438da
commit 25023e29b5
706 changed files with 23404 additions and 14179 deletions

View File

@@ -18,7 +18,6 @@ import com.orange.demo.upmsinterface.constant.SysUserStatus;
import com.orange.demo.upmsinterface.constant.SysUserType;
import com.orange.demo.upmsservice.config.ApplicationConfig;
import com.orange.demo.upmsservice.model.SysMenu;
import com.orange.demo.upmsservice.model.SysPermWhitelist;
import com.orange.demo.upmsservice.model.SysUser;
import com.orange.demo.upmsservice.service.*;
import org.springframework.beans.factory.annotation.Autowired;
@@ -130,7 +129,7 @@ public class LoginController {
jsonData.put("permCodeList", permCodeList);
// 将白名单url列表合并到当前用户的权限资源列表中便于网关一并处理。
Set<String> permSet = sysUserService.getSysPermSetByUserId(tokenData.getUserId());
permSet.addAll(sysPermWhitelistService.getAllListWithField(SysPermWhitelist::getPermUrl));
permSet.addAll(sysPermWhitelistService.getWhitelistPermList());
jsonData.put("permSet", permSet);
}
jsonData.put("menuList", menuList);
@@ -187,7 +186,7 @@ public class LoginController {
jsonData.put("permCodeList", permCodeList);
// 将白名单url列表合并到当前用户的权限资源列表中便于网关一并处理。
Set<String> permSet = sysUserService.getSysPermSetByUserId(user.getUserId());
permSet.addAll(sysPermWhitelistService.getAllListWithField(SysPermWhitelist::getPermUrl));
permSet.addAll(sysPermWhitelistService.getWhitelistPermList());
jsonData.put("permSet", permSet);
}
jsonData.put("menuList", menuList);

View File

@@ -5,7 +5,6 @@ import com.github.pagehelper.page.PageMethod;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.object.*;
import com.orange.demo.common.core.util.MyModelUtil;

View File

@@ -5,7 +5,6 @@ import com.github.pagehelper.page.PageMethod;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.object.*;

View File

@@ -9,14 +9,13 @@ import com.orange.demo.common.core.object.*;
import com.orange.demo.common.core.util.*;
import com.orange.demo.common.core.constant.*;
import com.orange.demo.common.core.base.controller.BaseController;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.core.base.service.IBaseService;
import com.orange.demo.common.core.annotation.MyRequestBody;
import com.orange.demo.common.core.validator.AddGroup;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.upmsservice.config.ApplicationConfig;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -42,7 +41,7 @@ public class SysUserController extends BaseController<SysUser, SysUserVo, Long>
private ApplicationConfig appConfig;
@Override
protected BaseService<SysUser, Long> service() {
protected IBaseService<SysUser, Long> service() {
return sysUserService;
}

View File

@@ -9,7 +9,10 @@
<result column="form_router_name" jdbcType="VARCHAR" property="formRouterName"/>
<result column="show_order" jdbcType="INTEGER" property="showOrder"/>
<result column="icon" jdbcType="VARCHAR" property="icon"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="deleted_flag" jdbcType="INTEGER" property="deletedFlag"/>
</resultMap>

View File

@@ -8,7 +8,10 @@
<result column="perm_code_type" jdbcType="INTEGER" property="permCodeType"/>
<result column="show_name" jdbcType="VARCHAR" property="showName"/>
<result column="show_order" jdbcType="INTEGER" property="showOrder"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="deleted_flag" jdbcType="INTEGER" property="deletedFlag"/>
</resultMap>

View File

@@ -7,7 +7,10 @@
<result column="perm_name" jdbcType="VARCHAR" property="permName"/>
<result column="url" jdbcType="VARCHAR" property="url"/>
<result column="show_order" jdbcType="INTEGER" property="showOrder"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="deleted_flag" jdbcType="INTEGER" property="deletedFlag"/>
</resultMap>

View File

@@ -7,7 +7,10 @@
<result column="module_name" jdbcType="VARCHAR" property="moduleName"/>
<result column="module_type" jdbcType="INTEGER" property="moduleType"/>
<result column="show_order" jdbcType="INTEGER" property="showOrder"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="deleted_flag" jdbcType="INTEGER" property="deletedFlag"/>
</resultMap>

View File

@@ -5,8 +5,8 @@
<id column="role_id" jdbcType="BIGINT" property="roleId"/>
<result column="role_name" jdbcType="VARCHAR" property="roleName"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="create_username" jdbcType="VARCHAR" property="createUsername"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="deleted_flag" jdbcType="INTEGER" property="deletedFlag"/>
</resultMap>

View File

@@ -11,7 +11,7 @@
<result column="user_status" jdbcType="INTEGER" property="userStatus"/>
<result column="deleted_flag" jdbcType="INTEGER" property="deletedFlag"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="create_username" jdbcType="VARCHAR" property="createUsername"/>
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
</resultMap>

View File

@@ -4,8 +4,6 @@ import com.alibaba.fastjson.annotation.JSONField;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.upmsinterface.constant.SysMenuType;
import com.orange.demo.upmsinterface.vo.SysMenuVo;
import lombok.Data;
import org.mapstruct.Mapper;
@@ -13,9 +11,7 @@ import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* 菜单实体对象。
@@ -30,7 +26,6 @@ public class SysMenu {
/**
* 主键Id。
*/
@NotNull(message = "菜单Id不能为空")
@Id
@Column(name = "menu_id")
private Long menuId;
@@ -44,15 +39,12 @@ public class SysMenu {
/**
* 菜单显示名称。
*/
@NotBlank(message = "菜单显示名称不能为空!")
@Column(name = "menu_name")
private String menuName;
/**
* 菜单类型(0: 目录 1: 菜单 2: 按钮 3: UI片段)。
*/
@NotNull(message = "菜单类型不能为空!")
@ConstDictRef(constDictClass = SysMenuType.class, message = "数据验证失败,菜单类型为无效值!")
@Column(name = "menu_type")
private Integer menuType;
@@ -65,7 +57,6 @@ public class SysMenu {
/**
* 菜单显示顺序 (值越小,排序越靠前)。
*/
@NotNull(message = "菜单显示顺序不能为空!")
@Column(name = "show_order")
private Integer showOrder;
@@ -74,12 +65,30 @@ public class SysMenu {
*/
private String icon;
/**
* 创建者Id。
*/
@Column(name = "create_user_id")
private Long createUserId;
/**
* 创建时间。
*/
@Column(name = "create_time")
private Date createTime;
/**
* 更新者Id。
*/
@Column(name = "update_user_id")
private Long updateUserId;
/**
* 更新时间。
*/
@Column(name = "update_time")
private Date updateTime;
/**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/

View File

@@ -6,9 +6,7 @@ import com.orange.demo.common.core.annotation.RelationDict;
import lombok.Data;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.util.Date;
import java.util.Map;
import java.util.*;
/**
* 权限资源实体对象。
@@ -23,7 +21,6 @@ public class SysPerm {
/**
* 权限Id。
*/
@NotNull(message = "权限Id不能为空")
@Id
@Column(name = "perm_id")
private Long permId;
@@ -31,36 +28,50 @@ public class SysPerm {
/**
* 权限所在的权限模块Id。
*/
@NotNull(message = "权限模块Id不能为空")
@Column(name = "module_id")
private Long moduleId;
/**
* 权限名称。
*/
@NotBlank(message = "权限名称不能为空!")
@Column(name = "perm_name")
private String permName;
/**
* 关联的URL。
*/
@NotBlank(message = "权限关联的url不能为空")
private String url;
/**
* 权限在当前模块下的顺序,由小到大。
*/
@NotNull(message = "权限显示顺序不能为空!")
@Column(name = "show_order")
private Integer showOrder;
/**
* 创建者Id。
*/
@Column(name = "create_user_id")
private Long createUserId;
/**
* 创建时间。
*/
@Column(name = "create_time")
private Date createTime;
/**
* 更新者Id。
*/
@Column(name = "update_user_id")
private Long updateUserId;
/**
* 更新时间。
*/
@Column(name = "update_time")
private Date updateTime;
/**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/

View File

@@ -4,8 +4,6 @@ import com.alibaba.fastjson.annotation.JSONField;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.upmsinterface.constant.SysPermCodeType;
import com.orange.demo.upmsinterface.vo.SysPermCodeVo;
import lombok.Data;
import org.mapstruct.Mapper;
@@ -13,9 +11,7 @@ import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* 权限字实体对象。
@@ -30,7 +26,6 @@ public class SysPermCode {
/**
* 主键Id。
*/
@NotNull(message = "权限字Id不能为空")
@Id
@Column(name = "perm_code_id")
private Long permCodeId;
@@ -44,38 +39,51 @@ public class SysPermCode {
/**
* 权限字标识(一般为有含义的英文字符串)。
*/
@NotBlank(message = "权限字编码不能为空!")
@Column(name = "perm_code")
private String permCode;
/**
* 权限类型(0: 表单 1: UI片段 2: 操作)。
*/
@NotNull(message = "权限字类型不能为空!")
@ConstDictRef(constDictClass = SysPermCodeType.class, message = "数据验证失败,权限类型为无效值!")
@Column(name = "perm_code_type")
private Integer permCodeType;
/**
* 显示名称。
*/
@NotBlank(message = "权限字显示名称不能为空!")
@Column(name = "show_name")
private String showName;
/**
* 显示顺序(数值越小,越靠前)。
*/
@NotNull(message = "权限字显示顺序不能为空!")
@Column(name = "show_order")
private Integer showOrder;
/**
* 创建者Id。
*/
@Column(name = "create_user_id")
private Long createUserId;
/**
* 创建时间。
*/
@Column(name = "create_time")
private Date createTime;
/**
* 更新者Id。
*/
@Column(name = "update_user_id")
private Long updateUserId;
/**
* 更新时间。
*/
@Column(name = "update_time")
private Date updateTime;
/**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/

View File

@@ -2,14 +2,10 @@ package com.orange.demo.upmsservice.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.upmsinterface.constant.SysPermModuleType;
import lombok.Data;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* 权限模块实体对象。
@@ -24,7 +20,6 @@ public class SysPermModule {
/**
* 权限模块Id。
*/
@NotNull(message = "权限模块Id不能为空")
@Id
@Column(name = "module_id")
private Long moduleId;
@@ -38,31 +33,45 @@ public class SysPermModule {
/**
* 权限模块名称。
*/
@NotBlank(message = "权限模块名称不能为空!")
@Column(name = "module_name")
private String moduleName;
/**
* 权限模块类型(0: 普通模块 1: Controller模块)。
*/
@NotNull(message = "权限模块类型不能为空!")
@ConstDictRef(constDictClass = SysPermModuleType.class, message = "数据验证失败,权限模块类型为无效值!")
@Column(name = "module_type")
private Integer moduleType;
/**
* 权限模块在当前层级下的顺序,由小到大。
*/
@NotNull(message = "权限模块显示顺序不能为空!")
@Column(name = "show_order")
private Integer showOrder;
/**
* 创建者Id。
*/
@Column(name = "create_user_id")
private Long createUserId;
/**
* 创建时间。
*/
@Column(name = "create_time")
private Date createTime;
/**
* 更新者Id。
*/
@Column(name = "update_user_id")
private Long updateUserId;
/**
* 更新时间。
*/
@Column(name = "update_time")
private Date updateTime;
/**
* 逻辑删除标记字段(1: 正常 -1: 已删除)。
*/

View File

@@ -11,9 +11,7 @@ import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* 角色实体对象。
@@ -28,7 +26,6 @@ public class SysRole {
/**
* 主键Id。
*/
@NotNull(message = "角色Id不能为空")
@Id
@Column(name = "role_id")
private Long roleId;
@@ -36,28 +33,27 @@ public class SysRole {
/**
* 角色名称。
*/
@NotBlank(message = "角色名称不能为空!")
@Column(name = "role_name")
private String roleName;
/**
* 创建者。
* 创建者Id
*/
@Column(name = "create_user_id")
private Long createUserId;
/**
* 创建者显示名称。
*/
@Column(name = "create_username")
private String createUsername;
/**
* 创建时间。
*/
@Column(name = "create_time")
private Date createTime;
/**
* 更新者Id。
*/
@Column(name = "update_user_id")
private Long updateUserId;
/**
* 更新时间。
*/

View File

@@ -7,13 +7,11 @@ import com.orange.demo.common.core.annotation.RelationConstDict;
import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.upmsinterface.vo.SysUserVo;
import lombok.Data;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.util.Date;
import java.util.Map;
@@ -32,7 +30,6 @@ public class SysUser {
/**
* 用户Id。
*/
@NotNull(message = "数据验证失败用户Id不能为空")
@Id
@Column(name = "user_id")
private Long userId;
@@ -40,28 +37,23 @@ public class SysUser {
/**
* 登录用户名。
*/
@NotBlank(message = "数据验证失败,登录用户名不能为空!")
@Column(name = "login_name")
private String loginName;
/**
* 用户密码。
*/
@NotBlank(message = "数据验证失败,用户密码不能为空!")
private String password;
/**
* 用户显示名称。
*/
@NotBlank(message = "数据验证失败,用户显示名称不能为空!")
@Column(name = "show_name")
private String showName;
/**
* 用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)。
*/
@NotNull(message = "数据验证失败,用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)不能为空!")
@ConstDictRef(constDictClass = SysUserType.class, message = "数据验证失败,用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)为无效值!")
@Column(name = "user_type")
private Integer userType;
@@ -74,8 +66,6 @@ public class SysUser {
/**
* 用户状态(0: 正常 1: 锁定)。
*/
@NotNull(message = "数据验证失败,用户状态(0: 正常 1: 锁定)不能为空!")
@ConstDictRef(constDictClass = SysUserStatus.class, message = "数据验证失败,用户状态(0: 正常 1: 锁定)为无效值!")
@Column(name = "user_status")
private Integer userStatus;
@@ -94,10 +84,10 @@ public class SysUser {
private Long createUserId;
/**
* 创建用户名
* 更新者Id
*/
@Column(name = "create_username")
private String createUsername;
@Column(name = "update_user_id")
private Long updateUserId;
/**
* 创建时间。

View File

@@ -1,56 +1,18 @@
package com.orange.demo.upmsservice.service;
import com.alibaba.fastjson.JSONObject;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.base.service.IBaseService;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.upmsinterface.constant.SysMenuType;
import com.orange.demo.upmsservice.dao.SysMenuMapper;
import com.orange.demo.upmsservice.dao.SysMenuPermCodeMapper;
import com.orange.demo.upmsservice.dao.SysRoleMenuMapper;
import com.orange.demo.upmsservice.model.SysMenu;
import com.orange.demo.upmsservice.model.SysMenuPermCode;
import com.orange.demo.upmsservice.model.SysRoleMenu;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*;
import java.util.stream.Collectors;
/**
* 菜单数据服务
* 菜单数据服务接口
*
* @author Jerry
* @date 2020-08-08
*/
@Service
public class SysMenuService extends BaseService<SysMenu, Long> {
@Autowired
private SysMenuMapper sysMenuMapper;
@Autowired
private SysRoleMenuMapper sysRoleMenuMapper;
@Autowired
private SysMenuPermCodeMapper sysMenuPermCodeMapper;
@Autowired
private SysPermCodeService sysPermCodeService;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysMenu> mapper() {
return sysMenuMapper;
}
public interface SysMenuService extends IBaseService<SysMenu, Long> {
/**
* 保存新增的菜单对象。
@@ -59,24 +21,7 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
* @param permCodeIdSet 权限字Id列表。
* @return 新增后的菜单对象。
*/
@Transactional(rollbackFor = Exception.class)
public SysMenu saveNew(SysMenu sysMenu, Set<Long> permCodeIdSet) {
sysMenu.setMenuId(idGenerator.nextLongId());
sysMenu.setCreateTime(new Date());
sysMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL);
sysMenuMapper.insert(sysMenu);
if (permCodeIdSet != null) {
List<SysMenuPermCode> sysMenuPermCodeList = new LinkedList<>();
for (Long permCodeId : permCodeIdSet) {
SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setMenuId(sysMenu.getMenuId());
menuPermCode.setPermCodeId(permCodeId);
sysMenuPermCodeList.add(menuPermCode);
}
sysMenuPermCodeMapper.insertList(sysMenuPermCodeList);
}
return sysMenu;
}
SysMenu saveNew(SysMenu sysMenu, Set<Long> permCodeIdSet);
/**
* 更新菜单对象。
@@ -86,29 +31,7 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
* @param permCodeIdSet 权限字Id列表。
* @return 更新成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set<Long> permCodeIdSet) {
sysMenu.setCreateTime(originalSysMenu.getCreateTime());
sysMenu.setMenuType(originalSysMenu.getMenuType());
sysMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysMenuMapper.updateByPrimaryKey(sysMenu) != 1) {
return false;
}
SysMenuPermCode deletedMenuPermCode = new SysMenuPermCode();
deletedMenuPermCode.setMenuId(sysMenu.getMenuId());
sysMenuPermCodeMapper.delete(deletedMenuPermCode);
if (permCodeIdSet != null) {
List<SysMenuPermCode> sysMenuPermCodeList = new LinkedList<>();
for (Long permCodeId : permCodeIdSet) {
SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setMenuId(sysMenu.getMenuId());
menuPermCode.setPermCodeId(permCodeId);
sysMenuPermCodeList.add(menuPermCode);
}
sysMenuPermCodeMapper.insertList(sysMenuPermCodeList);
}
return true;
}
boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set<Long> permCodeIdSet);
/**
* 删除指定的菜单。
@@ -116,36 +39,14 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
* @param menuId 菜单主键Id。
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean remove(Long menuId) {
SysMenu menu = new SysMenu();
menu.setMenuId(menuId);
menu.setDeletedFlag(GlobalDeletedFlag.DELETED);
if (sysMenuMapper.updateByPrimaryKeySelective(menu) != 1) {
return false;
}
SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setMenuId(menuId);
sysRoleMenuMapper.delete(roleMenu);
SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setMenuId(menuId);
sysMenuPermCodeMapper.delete(menuPermCode);
return true;
}
boolean remove(Long menuId);
/**
* 获取全部菜单列表。
*
* @return 全部菜单列表。
*/
public List<SysMenu> getAllMenuList() {
Example e = new Example(SysMenu.class);
e.orderBy("menuType").orderBy("showOrder");
Example.Criteria c = e.createCriteria();
c.andIn("menuType", Arrays.asList(SysMenuType.TYPE_MENU, SysMenuType.TYPE_DIRECTORY));
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL);
return sysMenuMapper.selectByExample(e);
}
List<SysMenu> getAllMenuList();
/**
* 获取指定用户Id的菜单列表。
@@ -153,9 +54,7 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
* @param userId 用户主键Id。
* @return 用户关联的菜单列表。
*/
public List<SysMenu> getMenuListByUserId(Long userId) {
return sysMenuMapper.getMenuListByUserId(userId);
}
List<SysMenu> getMenuListByUserId(Long userId);
/**
* 判断当前菜单是否存在子菜单。
@@ -163,11 +62,7 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
* @param menuId 菜单主键Id。
* @return 存在返回true否则false。
*/
public boolean hasChildren(Long menuId) {
SysMenu menu = new SysMenu();
menu.setParentId(menuId);
return this.getCountByFilter(menu) > 0;
}
boolean hasChildren(Long menuId);
/**
* 验证菜单对象关联的数据是否都合法。
@@ -177,31 +72,7 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
* @param permCodeIdListString 逗号分隔的权限Id列表。
* @return 验证结果。
*/
public CallResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString) {
// menu、ui fragment和button类型的menu不能没有parentId
if (sysMenu.getParentId() == null) {
if (sysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) {
return CallResult.error("数据验证失败,当前类型菜单项的上级菜单不能为空!");
}
}
if (this.needToVerify(sysMenu, originalSysMenu, SysMenu::getParentId)) {
String errorMessage = checkErrorOfNonDirectoryMenu(sysMenu);
if (errorMessage != null) {
return CallResult.error(errorMessage);
}
}
JSONObject jsonObject = null;
if (StringUtils.isNotBlank(permCodeIdListString)) {
Set<Long> permCodeIdSet = Arrays.stream(
permCodeIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
if (!sysPermCodeService.existAllPrimaryKeys(permCodeIdSet)) {
return CallResult.error("数据验证失败,存在不合法的权限字,请刷新后重试!");
}
jsonObject = new JSONObject();
jsonObject.put("permCodeIdSet", permCodeIdSet);
}
return CallResult.ok(jsonObject);
}
CallResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString);
/**
* 查询菜单的权限资源地址列表。同时返回详细的分配路径。
@@ -210,9 +81,7 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
* @param url 权限资源地址过滤条件。
* @return 包含从菜单到权限资源的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysPermListWithDetail(Long menuId, String url) {
return sysMenuMapper.getSysPermListWithDetail(menuId, url);
}
List<Map<String, Object>> getSysPermListWithDetail(Long menuId, String url);
/**
* 查询菜单的用户列表。同时返回详细的分配路径。
@@ -221,35 +90,5 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
* @param loginName 登录名。
* @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysUserListWithDetail(Long menuId, String loginName) {
return sysMenuMapper.getSysUserListWithDetail(menuId, loginName);
}
private String checkErrorOfNonDirectoryMenu(SysMenu sysMenu) {
// 判断父节点是否存在
SysMenu parentSysMenu = getById(sysMenu.getParentId());
if (parentSysMenu == null) {
return "数据验证失败,关联的上级菜单并不存在,请刷新后重试!";
}
// 逐个判断每种类型的菜单,他的父菜单的合法性,先从目录类型和菜单类型开始
if (sysMenu.getMenuType() == SysMenuType.TYPE_DIRECTORY
|| sysMenu.getMenuType() == SysMenuType.TYPE_MENU) {
// 他们的上级只能是目录
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) {
return "数据验证失败,当前类型菜单项的上级菜单只能是目录类型!";
}
} else if (sysMenu.getMenuType() == SysMenuType.TYPE_UI_FRAGMENT) {
// ui fragment的上级只能是menu类型
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU) {
return "数据验证失败,当前类型菜单项的上级菜单只能是菜单类型和按钮类型!";
}
} else if (sysMenu.getMenuType() == SysMenuType.TYPE_BUTTON) {
// button的上级只能是menu和ui fragment
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU
&& parentSysMenu.getMenuType() != SysMenuType.TYPE_UI_FRAGMENT) {
return "数据验证失败当前类型菜单项的上级菜单只能是菜单类型和UI片段类型";
}
}
return null;
}
}
List<Map<String, Object>> getSysUserListWithDetail(Long menuId, String loginName);
}

View File

@@ -1,54 +1,18 @@
package com.orange.demo.upmsservice.service;
import com.alibaba.fastjson.JSONObject;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.base.service.IBaseService;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.upmsservice.dao.SysMenuPermCodeMapper;
import com.orange.demo.upmsservice.dao.SysPermCodeMapper;
import com.orange.demo.upmsservice.dao.SysPermCodePermMapper;
import com.orange.demo.upmsservice.model.SysMenuPermCode;
import com.orange.demo.upmsservice.model.SysPermCode;
import com.orange.demo.upmsservice.model.SysPermCodePerm;
import org.apache.commons.lang3.StringUtils;
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;
/**
* 权限字数据服务
* 权限字数据服务接口
*
* @author Jerry
* @date 2020-08-08
*/
@Service
public class SysPermCodeService extends BaseService<SysPermCode, Long> {
@Autowired
private SysPermCodeMapper sysPermCodeMapper;
@Autowired
private SysPermCodePermMapper sysPermCodePermMapper;
@Autowired
private SysMenuPermCodeMapper sysMenuPermCodeMapper;
@Autowired
private SysPermService sysPermService;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysPermCode> mapper() {
return sysPermCodeMapper;
}
public interface SysPermCodeService extends IBaseService<SysPermCode, Long> {
/**
* 获取指定用户的权限字列表。
@@ -56,9 +20,7 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
* @param userId 用户主键Id。
* @return 用户关联的权限字列表。
*/
public List<String> getPermCodeListByUserId(Long userId) {
return sysPermCodeMapper.getPermCodeListByUserId(userId);
}
List<String> getPermCodeListByUserId(Long userId);
/**
* 保存新增的权限字对象。
@@ -67,24 +29,7 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
* @param permIdSet 权限资源Id列表。
* @return 新增后的权限字对象。
*/
@Transactional(rollbackFor = Exception.class)
public SysPermCode saveNew(SysPermCode sysPermCode, Set<Long> permIdSet) {
sysPermCode.setPermCodeId(idGenerator.nextLongId());
sysPermCode.setCreateTime(new Date());
sysPermCode.setDeletedFlag(GlobalDeletedFlag.NORMAL);
sysPermCodeMapper.insert(sysPermCode);
if (permIdSet != null) {
List<SysPermCodePerm> sysPermCodePermList = new LinkedList<>();
for (Long permId : permIdSet) {
SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermCodeId(sysPermCode.getPermCodeId());
permCodePerm.setPermId(permId);
sysPermCodePermList.add(permCodePerm);
}
sysPermCodePermMapper.insertList(sysPermCodePermList);
}
return sysPermCode;
}
SysPermCode saveNew(SysPermCode sysPermCode, Set<Long> permIdSet);
/**
* 更新权限字对象。
@@ -94,29 +39,7 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
* @param permIdSet 权限资源Id列表。
* @return 更新成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set<Long> permIdSet) {
sysPermCode.setCreateTime(originalSysPermCode.getCreateTime());
sysPermCode.setParentId(originalSysPermCode.getParentId());
sysPermCode.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysPermCodeMapper.updateByPrimaryKey(sysPermCode) != 1) {
return false;
}
SysPermCodePerm deletedPermCodePerm = new SysPermCodePerm();
deletedPermCodePerm.setPermCodeId(sysPermCode.getPermCodeId());
sysPermCodePermMapper.delete(deletedPermCodePerm);
if (permIdSet != null) {
List<SysPermCodePerm> sysPermCodePermList = new LinkedList<>();
for (Long permId : permIdSet) {
SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermCodeId(sysPermCode.getPermCodeId());
permCodePerm.setPermId(permId);
sysPermCodePermList.add(permCodePerm);
}
sysPermCodePermMapper.insertList(sysPermCodePermList);
}
return true;
}
boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set<Long> permIdSet);
/**
* 删除指定的权限字。
@@ -124,22 +47,7 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
* @param permCodeId 权限字主键Id。
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean remove(Long permCodeId) {
SysPermCode permCode = new SysPermCode();
permCode.setPermCodeId(permCodeId);
permCode.setDeletedFlag(GlobalDeletedFlag.DELETED);
if (sysPermCodeMapper.updateByPrimaryKeySelective(permCode) != 1) {
return false;
}
SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setPermCodeId(permCodeId);
sysMenuPermCodeMapper.delete(menuPermCode);
SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermCodeId(permCodeId);
sysPermCodePermMapper.delete(permCodePerm);
return true;
}
boolean remove(Long permCodeId);
/**
* 判断当前权限字是否存在下级权限字对象。
@@ -147,11 +55,7 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
* @param permCodeId 权限字主键Id。
* @return 存在返回true否则false。
*/
public boolean hasChildren(Long permCodeId) {
SysPermCode permCode = new SysPermCode();
permCode.setParentId(permCodeId);
return this.getCountByFilter(permCode) > 0;
}
boolean hasChildren(Long permCodeId);
/**
* 验证权限字对象关联的数据是否都合法。
@@ -161,25 +65,7 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
* @param permIdListString 逗号分隔的权限资源Id列表。
* @return 验证结果。
*/
public CallResult verifyRelatedData(
SysPermCode sysPermCode, SysPermCode originalSysPermCode, String permIdListString) {
if (this.needToVerify(sysPermCode, originalSysPermCode, SysPermCode::getParentId)) {
if (getById(sysPermCode.getParentId()) == null) {
return CallResult.error("数据验证失败,关联的上级权限字并不存在,请刷新后重试!");
}
}
JSONObject jsonObject = null;
if (StringUtils.isNotBlank(permIdListString)) {
Set<Long> permIdSet = Arrays.stream(
permIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
if (!sysPermService.existAllPrimaryKeys(permIdSet)) {
return CallResult.error("数据验证失败,存在不合法的权限资源,请刷新后重试!");
}
jsonObject = new JSONObject();
jsonObject.put("permIdSet", permIdSet);
}
return CallResult.ok(jsonObject);
}
CallResult verifyRelatedData(SysPermCode sysPermCode, SysPermCode originalSysPermCode, String permIdListString);
/**
* 查询权限字的用户列表。同时返回详细的分配路径。
@@ -188,9 +74,7 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
* @param loginName 登录名。
* @return 包含从权限字到用户的完整权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysUserListWithDetail(Long permCodeId, String loginName) {
return sysPermCodeMapper.getSysUserListWithDetail(permCodeId, loginName);
}
List<Map<String, Object>> getSysUserListWithDetail(Long permCodeId, String loginName);
/**
* 查询权限字的角色列表。同时返回详细的分配路径。
@@ -199,7 +83,5 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
* @param roleName 角色名。
* @return 包含从权限字到角色的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysRoleListWithDetail(Long permCodeId, String roleName) {
return sysPermCodeMapper.getSysRoleListWithDetail(permCodeId, roleName);
}
List<Map<String, Object>> getSysRoleListWithDetail(Long permCodeId, String roleName);
}

View File

@@ -1,44 +1,17 @@
package com.orange.demo.upmsservice.service;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.upmsservice.dao.SysPermModuleMapper;
import com.orange.demo.upmsservice.model.SysPerm;
import com.orange.demo.common.core.base.service.IBaseService;
import com.orange.demo.upmsservice.model.SysPermModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* 权限资源模块数据服务
* 权限资源模块数据服务接口
*
* @author Jerry
* @date 2020-08-08
*/
@Service
public class SysPermModuleService extends BaseService<SysPermModule, Long> {
@Autowired
private SysPermModuleMapper sysPermModuleMapper;
@Autowired
private SysPermService sysPermService;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysPermModule> mapper() {
return sysPermModuleMapper;
}
public interface SysPermModuleService extends IBaseService<SysPermModule, Long> {
/**
* 保存新增的权限资源模块对象。
@@ -46,14 +19,7 @@ public class SysPermModuleService extends BaseService<SysPermModule, Long> {
* @param sysPermModule 新增的权限资源模块对象。
* @return 新增后的权限资源模块对象。
*/
@Transactional(rollbackFor = Exception.class)
public SysPermModule saveNew(SysPermModule sysPermModule) {
sysPermModule.setModuleId(idGenerator.nextLongId());
sysPermModule.setCreateTime(new Date());
sysPermModule.setDeletedFlag(GlobalDeletedFlag.NORMAL);
sysPermModuleMapper.insert(sysPermModule);
return sysPermModule;
}
SysPermModule saveNew(SysPermModule sysPermModule);
/**
* 更新权限资源模块对象。
@@ -62,12 +28,7 @@ public class SysPermModuleService extends BaseService<SysPermModule, Long> {
* @param originalSysPermModule 原有的权限资源模块对象。
* @return 更新成功返回true否则false
*/
@Transactional(rollbackFor = Exception.class)
public boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule) {
sysPermModule.setCreateTime(originalSysPermModule.getCreateTime());
sysPermModule.setDeletedFlag(GlobalDeletedFlag.NORMAL);
return sysPermModuleMapper.updateByPrimaryKey(sysPermModule) != 0;
}
boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule);
/**
* 删除指定的权限资源模块。
@@ -75,22 +36,14 @@ public class SysPermModuleService extends BaseService<SysPermModule, Long> {
* @param moduleId 权限资源模块主键Id。
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean remove(Long moduleId) {
SysPermModule permModule = new SysPermModule();
permModule.setModuleId(moduleId);
permModule.setDeletedFlag(GlobalDeletedFlag.DELETED);
return sysPermModuleMapper.updateByPrimaryKeySelective(permModule) != 0;
}
boolean remove(Long moduleId);
/**
* 获取权限模块资源及其关联的权限资源列表。
*
* @return 权限资源模块及其关联的权限资源列表。
*/
public List<SysPermModule> getPermModuleAndPermList() {
return sysPermModuleMapper.getPermModuleAndPermList();
}
List<SysPermModule> getPermModuleAndPermList();
/**
* 判断是否存在下级权限资源模块。
@@ -98,11 +51,7 @@ public class SysPermModuleService extends BaseService<SysPermModule, Long> {
* @param moduleId 权限资源模块主键Id。
* @return 存在返回true否则false。
*/
public boolean hasChildren(Long moduleId) {
SysPermModule permModule = new SysPermModule();
permModule.setParentId(moduleId);
return this.getCountByFilter(permModule) > 0;
}
boolean hasChildren(Long moduleId);
/**
* 判断是否存在权限数据。
@@ -110,9 +59,5 @@ public class SysPermModuleService extends BaseService<SysPermModule, Long> {
* @param moduleId 权限资源模块主键Id。
* @return 存在返回true否则false。
*/
public boolean hasModulePerms(Long moduleId) {
SysPerm filter = new SysPerm();
filter.setModuleId(moduleId);
return sysPermService.getCountByFilter(filter) > 0;
}
boolean hasModulePerms(Long moduleId);
}

View File

@@ -1,53 +1,18 @@
package com.orange.demo.upmsservice.service;
import cn.hutool.core.util.ObjectUtil;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.object.MyRelationParam;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.base.service.IBaseService;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.upmsservice.dao.SysPermCodePermMapper;
import com.orange.demo.upmsservice.dao.SysPermMapper;
import com.orange.demo.upmsservice.model.SysPerm;
import com.orange.demo.upmsservice.model.SysPermCodePerm;
import com.orange.demo.upmsservice.model.SysPermModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 权限资源数据服务
* 权限资源数据服务接口
*
* @author Jerry
* @date 2020-08-08
*/
@Service
public class SysPermService extends BaseService<SysPerm, Long> {
@Autowired
private SysPermMapper sysPermMapper;
@Autowired
private SysPermCodePermMapper sysPermCodePermMapper;
@Autowired
private SysPermModuleService sysPermModuleService;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysPerm> mapper() {
return sysPermMapper;
}
public interface SysPermService extends IBaseService<SysPerm, Long> {
/**
* 保存新增的权限资源对象。
@@ -55,14 +20,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param perm 新增的权限资源对象。
* @return 新增后的权限资源对象。
*/
@Transactional(rollbackFor = Exception.class)
public SysPerm saveNew(SysPerm perm) {
perm.setPermId(idGenerator.nextLongId());
perm.setCreateTime(new Date());
perm.setDeletedFlag(GlobalDeletedFlag.NORMAL);
sysPermMapper.insert(perm);
return perm;
}
SysPerm saveNew(SysPerm perm);
/**
* 更新权限资源对象。
@@ -71,12 +29,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param originalPerm 原有的权限资源对象。
* @return 更新成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean update(SysPerm perm, SysPerm originalPerm) {
perm.setCreateTime(originalPerm.getCreateTime());
perm.setDeletedFlag(GlobalDeletedFlag.NORMAL);
return sysPermMapper.updateByPrimaryKeySelective(perm) != 0;
}
boolean update(SysPerm perm, SysPerm originalPerm);
/**
* 删除权限资源。
@@ -84,19 +37,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param permId 权限资源主键Id。
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean remove(Long permId) {
SysPerm perm = new SysPerm();
perm.setPermId(permId);
perm.setDeletedFlag(GlobalDeletedFlag.DELETED);
if (sysPermMapper.updateByPrimaryKeySelective(perm) != 1) {
return false;
}
SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermId(permId);
sysPermCodePermMapper.delete(permCodePerm);
return true;
}
boolean remove(Long permId);
/**
* 获取权限数据列表。
@@ -104,22 +45,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param sysPermFilter 过滤对象。
* @return 权限列表。
*/
public List<SysPerm> getPermListWithRelation(SysPerm sysPermFilter) {
Example e = new Example(SysPerm.class);
e.orderBy("showOrder");
Example.Criteria c = e.createCriteria();
if (ObjectUtil.isNotNull(sysPermFilter.getModuleId())) {
c.andEqualTo("moduleId", sysPermFilter.getModuleId());
}
if (ObjectUtil.isNotNull(sysPermFilter.getUrl())) {
c.andLike("url", "%" + sysPermFilter.getUrl() + "%");
}
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL);
List<SysPerm> permList = sysPermMapper.selectByExample(e);
// 这里因为权限只有字典数据,所以仅仅做字典关联。
this.buildRelationForDataList(permList, MyRelationParam.dictOnly(), null);
return permList;
}
List<SysPerm> getPermListWithRelation(SysPerm sysPermFilter);
/**
* 获取与指定用户关联的权限资源列表。
@@ -127,9 +53,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param userId 关联的用户主键Id。
* @return 与指定用户Id关联的权限资源列表。
*/
public List<SysPerm> getPermListByUserId(Long userId) {
return sysPermMapper.getPermListByUserId(userId);
}
List<SysPerm> getPermListByUserId(Long userId);
/**
* 验证权限资源对象关联的数据是否都合法。
@@ -138,15 +62,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param originalSysPerm 原有对象。
* @return 验证结果。
*/
public CallResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm) {
if (this.needToVerify(sysPerm, originalSysPerm, SysPerm::getModuleId)) {
SysPermModule permModule = sysPermModuleService.getById(sysPerm.getModuleId());
if (permModule == null) {
return CallResult.error("数据验证失败关联的权限模块Id并不存在请刷新后重试");
}
}
return CallResult.ok();
}
CallResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm);
/**
* 查询权限资源地址的用户列表。同时返回详细的分配路径。
@@ -155,9 +71,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param loginName 登录名。
* @return 包含从权限资源到用户的完整权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysUserListWithDetail(Long permId, String loginName) {
return sysPermMapper.getSysUserListWithDetail(permId, loginName);
}
List<Map<String, Object>> getSysUserListWithDetail(Long permId, String loginName);
/**
* 查询权限资源地址的角色列表。同时返回详细的分配路径。
@@ -166,9 +80,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param roleName 角色名。
* @return 包含从权限资源到角色的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysRoleListWithDetail(Long permId, String roleName) {
return sysPermMapper.getSysRoleListWithDetail(permId, roleName);
}
List<Map<String, Object>> getSysRoleListWithDetail(Long permId, String roleName);
/**
* 查询权限资源地址的菜单列表。同时返回详细的分配路径。
@@ -177,7 +89,5 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param menuName 菜单名。
* @return 包含从权限资源到菜单的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysMenuListWithDetail(Long permId, String menuName) {
return sysPermMapper.getSysMenuListWithDetail(permId, menuName);
}
List<Map<String, Object>> getSysMenuListWithDetail(Long permId, String menuName);
}

View File

@@ -1,32 +1,22 @@
package com.orange.demo.upmsservice.service;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.upmsservice.dao.SysPermWhitelistMapper;
import com.orange.demo.common.core.base.service.IBaseService;
import com.orange.demo.upmsservice.model.SysPermWhitelist;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 白名单数据服务
* 白名单数据服务接口
*
* @author Jerry
* @date 2020-08-08
*/
@Service
public class SysPermWhitelistService extends BaseService<SysPermWhitelist, String> {
@Autowired
private SysPermWhitelistMapper sysPermWhitelistMapper;
public interface SysPermWhitelistService extends IBaseService<SysPermWhitelist, String> {
/**
* 返回主对象的Mapper对象
* 获取白名单权限资源的列表
*
* @return 主对象的Mapper对象
* @return 白名单权限资源地址列表
*/
@Override
protected BaseDaoMapper<SysPermWhitelist> mapper() {
return sysPermWhitelistMapper;
}
List<String> getWhitelistPermList();
}

View File

@@ -1,55 +1,19 @@
package com.orange.demo.upmsservice.service;
import com.alibaba.fastjson.JSONObject;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.object.TokenData;
import com.orange.demo.common.core.base.service.IBaseService;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.upmsservice.dao.SysRoleMapper;
import com.orange.demo.upmsservice.dao.SysRoleMenuMapper;
import com.orange.demo.upmsservice.dao.SysUserRoleMapper;
import com.orange.demo.upmsservice.model.SysRole;
import com.orange.demo.upmsservice.model.SysRoleMenu;
import com.orange.demo.upmsservice.model.SysUserRole;
import org.apache.commons.lang3.StringUtils;
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;
/**
* 角色数据服务
* 角色数据服务接口
*
* @author Jerry
* @date 2020-08-08
*/
@Service
public class SysRoleService extends BaseService<SysRole, Long> {
@Autowired
private SysRoleMapper sysRoleMapper;
@Autowired
private SysRoleMenuMapper sysRoleMenuMapper;
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
@Autowired
private SysMenuService sysMenuService;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysRole> mapper() {
return sysRoleMapper;
}
public interface SysRoleService extends IBaseService<SysRole, Long> {
/**
* 保存新增的角色对象。
@@ -58,29 +22,7 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* @param menuIdSet 菜单Id列表。
* @return 新增后的角色对象。
*/
@Transactional(rollbackFor = Exception.class)
public SysRole saveNew(SysRole role, Set<Long> menuIdSet) {
role.setRoleId(idGenerator.nextLongId());
TokenData tokenData = TokenData.takeFromRequest();
role.setCreateUserId(tokenData.getUserId());
role.setCreateUsername(tokenData.getShowName());
Date now = new Date();
role.setCreateTime(now);
role.setUpdateTime(now);
role.setDeletedFlag(GlobalDeletedFlag.NORMAL);
sysRoleMapper.insert(role);
if (menuIdSet != null) {
List<SysRoleMenu> roleMenuList = new LinkedList<>();
for (Long menuId : menuIdSet) {
SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setRoleId(role.getRoleId());
roleMenu.setMenuId(menuId);
roleMenuList.add(roleMenu);
}
sysRoleMenuMapper.insertList(roleMenuList);
}
return role;
}
SysRole saveNew(SysRole role, Set<Long> menuIdSet);
/**
* 更新角色对象。
@@ -90,30 +32,7 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* @param menuIdSet 菜单Id列表。
* @return 更新成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean update(SysRole role, SysRole originalRole, Set<Long> menuIdSet) {
role.setCreateUserId(originalRole.getCreateUserId());
role.setCreateTime(originalRole.getCreateTime());
role.setUpdateTime(new Date());
role.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysRoleMapper.updateByPrimaryKey(role) != 1) {
return false;
}
SysRoleMenu deletedRoleMenu = new SysRoleMenu();
deletedRoleMenu.setRoleId(role.getRoleId());
sysRoleMenuMapper.delete(deletedRoleMenu);
if (menuIdSet != null) {
List<SysRoleMenu> roleMenuList = new LinkedList<>();
for (Long menuId : menuIdSet) {
SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setRoleId(role.getRoleId());
roleMenu.setMenuId(menuId);
roleMenuList.add(roleMenu);
}
sysRoleMenuMapper.insertList(roleMenuList);
}
return true;
}
boolean update(SysRole role, SysRole originalRole, Set<Long> menuIdSet);
/**
* 删除指定角色。
@@ -121,22 +40,7 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* @param roleId 角色主键Id。
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean remove(Long roleId) {
SysRole role = new SysRole();
role.setRoleId(roleId);
role.setDeletedFlag(GlobalDeletedFlag.DELETED);
if (sysRoleMapper.updateByPrimaryKeySelective(role) != 1) {
return false;
}
SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setRoleId(roleId);
sysRoleMenuMapper.delete(roleMenu);
SysUserRole userRole = new SysUserRole();
userRole.setRoleId(roleId);
sysUserRoleMapper.delete(userRole);
return true;
}
boolean remove(Long roleId);
/**
* 获取角色列表。
@@ -145,19 +49,14 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* @param orderBy 排序参数。
* @return 角色列表。
*/
public List<SysRole> getSysRoleList(SysRole filter, String orderBy) {
return sysRoleMapper.getSysRoleList(filter, orderBy);
}
List<SysRole> getSysRoleList(SysRole filter, String orderBy);
/**
* 批量新增用户角色关联。
*
* @param userRoleList 用户角色关系数据列表。
*/
@Transactional(rollbackFor = Exception.class)
public void addUserRoleList(List<SysUserRole> userRoleList) {
sysUserRoleMapper.insertList(userRoleList);
}
void addUserRoleList(List<SysUserRole> userRoleList);
/**
* 移除指定用户和指定角色的关联关系。
@@ -166,13 +65,7 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* @param userId 用户主键Id。
* @return 移除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean removeUserRole(Long roleId, Long userId) {
SysUserRole userRole = new SysUserRole();
userRole.setRoleId(roleId);
userRole.setUserId(userId);
return sysUserRoleMapper.delete(userRole) == 1;
}
boolean removeUserRole(Long roleId, Long userId);
/**
* 验证角色对象关联的数据是否都合法。
@@ -182,19 +75,7 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* @param menuIdListString 逗号分隔的menuId列表。
* @return 验证结果。
*/
public CallResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString) {
JSONObject jsonObject = null;
if (StringUtils.isNotBlank(menuIdListString)) {
Set<Long> menuIdSet = Arrays.stream(
menuIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
if (!sysMenuService.existAllPrimaryKeys(menuIdSet)) {
return CallResult.error("数据验证失败,存在不合法的菜单权限,请刷新后重试!");
}
jsonObject = new JSONObject();
jsonObject.put("menuIdSet", menuIdSet);
}
return CallResult.ok(jsonObject);
}
CallResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString);
/**
* 查询角色的权限资源地址列表。同时返回详细的分配路径。
@@ -203,9 +84,7 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* @param url url过滤条件。
* @return 包含从角色到权限资源的完整权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysPermListWithDetail(Long roleId, String url) {
return sysRoleMapper.getSysPermListWithDetail(roleId, url);
}
List<Map<String, Object>> getSysPermListWithDetail(Long roleId, String url);
/**
* 查询角色的权限字列表。同时返回详细的分配路径。
@@ -214,7 +93,5 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* @param permCode 权限字名称过滤条件。
* @return 包含从角色到权限字的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysPermCodeListWithDetail(Long roleId, String permCode) {
return sysRoleMapper.getSysPermCodeListWithDetail(roleId, permCode);
}
List<Map<String, Object>> getSysPermCodeListWithDetail(Long roleId, String permCode);
}

View File

@@ -1,57 +1,18 @@
package com.orange.demo.upmsservice.service;
import com.alibaba.fastjson.JSONObject;
import com.orange.demo.upmsservice.dao.*;
import com.orange.demo.upmsservice.model.*;
import com.orange.demo.common.core.util.*;
import com.orange.demo.common.core.object.*;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.upmsinterface.constant.SysUserStatus;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.common.core.base.service.IBaseService;
import java.util.*;
import java.util.stream.Collectors;
/**
* 用户管理数据操作服务
* 用户管理数据操作服务接口
*
* @author Jerry
* @date 2020-08-08
*/
@Service
public class SysUserService extends BaseService<SysUser, Long> {
@Autowired
private SysUserMapper sysUserMapper;
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
@Autowired
private SysPermService sysPermService;
@Autowired
private SysRoleService sysRoleService;
@Autowired
private IdGeneratorWrapper idGenerator;
@Autowired
private PasswordEncoder passwordEncoder;
/**
* 返回当前Service的主表Mapper对象。
*
* @return 主表Mapper对象。
*/
@Override
protected BaseDaoMapper<SysUser> mapper() {
return sysUserMapper;
}
public interface SysUserService extends IBaseService<SysUser, Long> {
/**
* 获取指定登录名的用户对象。
@@ -59,13 +20,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param loginName 指定登录用户名。
* @return 用户对象。
*/
public SysUser getSysUserByLoginName(String loginName) {
Example e = new Example(SysUser.class);
Example.Criteria c = e.createCriteria();
c.andEqualTo("loginName", loginName);
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL);
return sysUserMapper.selectOneByExample(e);
}
SysUser getSysUserByLoginName(String loginName);
/**
* 保存新增的用户对象。
@@ -74,31 +29,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param roleIdSet 用户角色Id集合。
* @return 新增后的用户对象。
*/
@Transactional(rollbackFor = Exception.class)
public SysUser saveNew(SysUser user, Set<Long> roleIdSet) {
user.setUserId(idGenerator.nextLongId());
user.setPassword(passwordEncoder.encode(user.getPassword()));
user.setUserStatus(SysUserStatus.STATUS_NORMAL);
user.setDeletedFlag(GlobalDeletedFlag.NORMAL);
TokenData tokenData = TokenData.takeFromRequest();
user.setCreateUserId(tokenData.getUserId());
user.setCreateUsername(tokenData.getShowName());
Date now = new Date();
user.setCreateTime(now);
user.setUpdateTime(now);
sysUserMapper.insert(user);
if (CollectionUtils.isNotEmpty(roleIdSet)) {
List<SysUserRole> userRoleList = new LinkedList<>();
for (Long roleId : roleIdSet) {
SysUserRole userRole = new SysUserRole();
userRole.setUserId(user.getUserId());
userRole.setRoleId(roleId);
userRoleList.add(userRole);
}
sysUserRoleMapper.insertList(userRoleList);
}
return user;
}
SysUser saveNew(SysUser user, Set<Long> roleIdSet);
/**
* 更新用户对象。
@@ -108,33 +39,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param roleIdSet 用户角色Id列表。
* @return 更新成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean update(SysUser user, SysUser originalUser, Set<Long> roleIdSet) {
user.setLoginName(originalUser.getLoginName());
user.setPassword(originalUser.getPassword());
user.setCreateUserId(originalUser.getCreateUserId());
user.setCreateUsername(originalUser.getCreateUsername());
user.setCreateTime(originalUser.getCreateTime());
user.setUpdateTime(new Date());
if (sysUserMapper.updateByPrimaryKeySelective(user) != 1) {
return false;
}
// 先删除原有的User-Role关联关系再重新插入新的关联关系
SysUserRole deletedUserRole = new SysUserRole();
deletedUserRole.setUserId(user.getUserId());
sysUserRoleMapper.delete(deletedUserRole);
if (CollectionUtils.isNotEmpty(roleIdSet)) {
List<SysUserRole> userRoleList = new LinkedList<>();
for (Long roleId : roleIdSet) {
SysUserRole userRole = new SysUserRole();
userRole.setUserId(user.getUserId());
userRole.setRoleId(roleId);
userRoleList.add(userRole);
}
sysUserRoleMapper.insertList(userRoleList);
}
return true;
}
boolean update(SysUser user, SysUser originalUser, Set<Long> roleIdSet);
/**
* 重置用户密码。
@@ -142,16 +47,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param newPass 新密码。
* @return 成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean changePassword(Long userId, String newPass) {
Example e = new Example(SysUser.class);
e.createCriteria()
.andEqualTo(super.idFieldName, userId)
.andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
SysUser updatedUser = new SysUser();
updatedUser.setPassword(passwordEncoder.encode(newPass));
return sysUserMapper.updateByExampleSelective(updatedUser, e) == 1;
}
boolean changePassword(Long userId, String newPass);
/**
* 删除指定数据。
@@ -159,23 +55,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param userId 主键Id。
* @return 成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
public boolean remove(Long userId) {
Example sysUserExample = new Example(SysUser.class);
Example.Criteria c = sysUserExample.createCriteria();
c.andEqualTo(super.idFieldName, userId);
c.andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
// 这里先删除主数据
SysUser deletedObject = new SysUser();
deletedObject.setDeletedFlag(GlobalDeletedFlag.DELETED);
if (sysUserMapper.updateByExampleSelective(deletedObject, sysUserExample) == 0) {
return false;
}
SysUserRole userRole = new SysUserRole();
userRole.setUserId(userId);
sysUserRoleMapper.delete(userRole);
return true;
}
boolean remove(Long userId);
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
@@ -185,9 +65,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param orderBy 排序参数。
* @return 查询结果集。
*/
public List<SysUser> getSysUserList(SysUser filter, String orderBy) {
return sysUserMapper.getSysUserList(null, null, filter, orderBy);
}
List<SysUser> getSysUserList(SysUser filter, String orderBy);
/**
* 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。
@@ -200,11 +78,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param orderBy 排序参数。
* @return 查询结果集。
*/
public <M> List<SysUser> getSysUserList(
String inFilterField, Set<M> inFilterValues, SysUser filter, String orderBy) {
String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, SysUser.class);
return sysUserMapper.getSysUserList(inFilterColumn, inFilterValues, filter, orderBy);
}
<M> List<SysUser> getSysUserList(String inFilterField, Set<M> inFilterValues, SysUser filter, String orderBy);
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
@@ -214,12 +88,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param orderBy 排序对象。
* @return 查询结果集。
*/
public List<SysUser> getSysUserListWithRelation(SysUser filter, String orderBy) {
List<SysUser> resultList = sysUserMapper.getSysUserList(null, null, filter, orderBy);
Map<String, List<MyWhereCriteria>> criteriaMap = buildAggregationAdditionalWhereCriteria();
this.buildRelationForDataList(resultList, MyRelationParam.normal(), criteriaMap);
return resultList;
}
List<SysUser> getSysUserListWithRelation(SysUser filter, String orderBy);
/**
* 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。
@@ -232,13 +101,8 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param orderBy 排序对象。
* @return 查询结果集。
*/
public <M> List<SysUser> getSysUserListWithRelation(
String inFilterField, Set<M> inFilterValues, SysUser filter, String orderBy) {
List<SysUser> resultList =
sysUserMapper.getSysUserList(inFilterField, inFilterValues, filter, orderBy);
this.buildRelationForDataList(resultList, MyRelationParam.dictOnly(), null);
return resultList;
}
<M> List<SysUser> getSysUserListWithRelation(
String inFilterField, Set<M> inFilterValues, SysUser filter, String orderBy);
/**
* 获取指定用户的权限集合。
@@ -246,10 +110,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param userId 用户主键Id。
* @return 用户权限集合。
*/
public Set<String> getSysPermSetByUserId(Long userId) {
List<SysPerm> permList = sysPermService.getPermListByUserId(userId);
return permList.stream().map(SysPerm::getUrl).collect(Collectors.toSet());
}
Set<String> getSysPermSetByUserId(Long userId);
/**
* 获取指定角色的用户列表。
@@ -259,9 +120,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param orderBy 排序参数。
* @return 用户列表。
*/
public List<SysUser> getSysUserListByRoleId(Long roleId, SysUser filter, String orderBy) {
return sysUserMapper.getSysUserListByRoleId(roleId, filter, orderBy);
}
List<SysUser> getSysUserListByRoleId(Long roleId, SysUser filter, String orderBy);
/**
* 获取不属于指定角色的用户列表。
@@ -271,9 +130,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param orderBy 排序参数。
* @return 用户列表。
*/
public List<SysUser> getNotInSysUserListByRoleId(Long roleId, SysUser filter, String orderBy) {
return sysUserMapper.getNotInSysUserListByRoleId(roleId, filter, orderBy);
}
List<SysUser> getNotInSysUserListByRoleId(Long roleId, SysUser filter, String orderBy);
/**
* 查询用户的权限资源地址列表。同时返回详细的分配路径。
@@ -282,9 +139,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param url url过滤条件。
* @return 包含从用户到权限资源的完整权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysPermListWithDetail(Long userId, String url) {
return sysUserMapper.getSysPermListWithDetail(userId, url);
}
List<Map<String, Object>> getSysPermListWithDetail(Long userId, String url);
/**
* 查询用户的权限字列表。同时返回详细的分配路径。
@@ -293,9 +148,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param permCode 权限字名称过滤条件。
* @return 包含从用户到权限字的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysPermCodeListWithDetail(Long userId, String permCode) {
return sysUserMapper.getSysPermCodeListWithDetail(userId, permCode);
}
List<Map<String, Object>> getSysPermCodeListWithDetail(Long userId, String permCode);
/**
* 查询用户的菜单列表。同时返回详细的分配路径。
@@ -304,9 +157,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param menuName 菜单名称过滤条件。
* @return 包含从用户到菜单的权限分配路径信息的查询结果列表。
*/
public List<Map<String, Object>> getSysMenuListWithDetail(Long userId, String menuName) {
return sysUserMapper.getSysMenuListWithDetail(userId, menuName);
}
List<Map<String, Object>> getSysMenuListWithDetail(Long userId, String menuName);
/**
* 验证用户对象关联的数据是否都合法。
@@ -316,17 +167,5 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param roleIdListString 逗号分隔的角色Id列表字符串。
* @return 验证结果。
*/
public CallResult verifyRelatedData(SysUser sysUser, SysUser originalSysUser, String roleIdListString) {
JSONObject jsonObject = new JSONObject();
if (StringUtils.isBlank(roleIdListString)) {
return CallResult.error("数据验证失败,用户的角色数据不能为空!");
}
Set<Long> roleIdSet = Arrays.stream(
roleIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
if (!sysRoleService.existAllPrimaryKeys(roleIdSet)) {
return CallResult.error("数据验证失败,存在不合法的用户角色,请刷新后重试!");
}
jsonObject.put("roleIdSet", roleIdSet);
return CallResult.ok(jsonObject);
}
CallResult verifyRelatedData(SysUser sysUser, SysUser originalSysUser, String roleIdListString);
}

View File

@@ -0,0 +1,264 @@
package com.orange.demo.upmsservice.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.util.MyModelUtil;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.upmsinterface.constant.SysMenuType;
import com.orange.demo.upmsservice.service.SysMenuService;
import com.orange.demo.upmsservice.service.SysPermCodeService;
import com.orange.demo.upmsservice.dao.SysMenuMapper;
import com.orange.demo.upmsservice.dao.SysMenuPermCodeMapper;
import com.orange.demo.upmsservice.dao.SysRoleMenuMapper;
import com.orange.demo.upmsservice.model.SysMenu;
import com.orange.demo.upmsservice.model.SysMenuPermCode;
import com.orange.demo.upmsservice.model.SysRoleMenu;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*;
import java.util.stream.Collectors;
/**
* 菜单数据服务类。
*
* @author Jerry
* @date 2020-08-08
*/
@Service("sysMenuService")
public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements SysMenuService {
@Autowired
private SysMenuMapper sysMenuMapper;
@Autowired
private SysRoleMenuMapper sysRoleMenuMapper;
@Autowired
private SysMenuPermCodeMapper sysMenuPermCodeMapper;
@Autowired
private SysPermCodeService sysPermCodeService;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysMenu> mapper() {
return sysMenuMapper;
}
/**
* 保存新增的菜单对象。
*
* @param sysMenu 新增的菜单对象。
* @param permCodeIdSet 权限字Id列表。
* @return 新增后的菜单对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public SysMenu saveNew(SysMenu sysMenu, Set<Long> permCodeIdSet) {
sysMenu.setMenuId(idGenerator.nextLongId());
MyModelUtil.fillCommonsForInsert(sysMenu);
sysMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL);
sysMenuMapper.insert(sysMenu);
if (permCodeIdSet != null) {
List<SysMenuPermCode> sysMenuPermCodeList = new LinkedList<>();
for (Long permCodeId : permCodeIdSet) {
SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setMenuId(sysMenu.getMenuId());
menuPermCode.setPermCodeId(permCodeId);
sysMenuPermCodeList.add(menuPermCode);
}
sysMenuPermCodeMapper.insertList(sysMenuPermCodeList);
}
return sysMenu;
}
/**
* 更新菜单对象。
*
* @param sysMenu 更新的菜单对象。
* @param originalSysMenu 原有的菜单对象。
* @param permCodeIdSet 权限字Id列表。
* @return 更新成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set<Long> permCodeIdSet) {
MyModelUtil.fillCommonsForUpdate(sysMenu, originalSysMenu);
sysMenu.setMenuType(originalSysMenu.getMenuType());
sysMenu.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysMenuMapper.updateByPrimaryKey(sysMenu) != 1) {
return false;
}
SysMenuPermCode deletedMenuPermCode = new SysMenuPermCode();
deletedMenuPermCode.setMenuId(sysMenu.getMenuId());
sysMenuPermCodeMapper.delete(deletedMenuPermCode);
if (permCodeIdSet != null) {
List<SysMenuPermCode> sysMenuPermCodeList = new LinkedList<>();
for (Long permCodeId : permCodeIdSet) {
SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setMenuId(sysMenu.getMenuId());
menuPermCode.setPermCodeId(permCodeId);
sysMenuPermCodeList.add(menuPermCode);
}
sysMenuPermCodeMapper.insertList(sysMenuPermCodeList);
}
return true;
}
/**
* 删除指定的菜单。
*
* @param menuId 菜单主键Id。
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long menuId) {
if (!this.removeById(menuId)) {
return false;
}
SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setMenuId(menuId);
sysRoleMenuMapper.delete(roleMenu);
SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setMenuId(menuId);
sysMenuPermCodeMapper.delete(menuPermCode);
return true;
}
/**
* 获取全部菜单列表。
*
* @return 全部菜单列表。
*/
@Override
public List<SysMenu> getAllMenuList() {
Example e = new Example(SysMenu.class);
e.orderBy("menuType").orderBy("showOrder");
Example.Criteria c = e.createCriteria();
c.andIn("menuType", Arrays.asList(SysMenuType.TYPE_MENU, SysMenuType.TYPE_DIRECTORY));
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL);
return sysMenuMapper.selectByExample(e);
}
/**
* 获取指定用户Id的菜单列表。
*
* @param userId 用户主键Id。
* @return 用户关联的菜单列表。
*/
@Override
public List<SysMenu> getMenuListByUserId(Long userId) {
return sysMenuMapper.getMenuListByUserId(userId);
}
/**
* 判断当前菜单是否存在子菜单。
*
* @param menuId 菜单主键Id。
* @return 存在返回true否则false。
*/
@Override
public boolean hasChildren(Long menuId) {
SysMenu menu = new SysMenu();
menu.setParentId(menuId);
return this.getCountByFilter(menu) > 0;
}
/**
* 验证菜单对象关联的数据是否都合法。
*
* @param sysMenu 当前操作的对象。
* @param originalSysMenu 原有对象。
* @param permCodeIdListString 逗号分隔的权限Id列表。
* @return 验证结果。
*/
@Override
public CallResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString) {
// menu、ui fragment和button类型的menu不能没有parentId
if (sysMenu.getParentId() == null) {
if (sysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) {
return CallResult.error("数据验证失败,当前类型菜单项的上级菜单不能为空!");
}
}
if (this.needToVerify(sysMenu, originalSysMenu, SysMenu::getParentId)) {
String errorMessage = checkErrorOfNonDirectoryMenu(sysMenu);
if (errorMessage != null) {
return CallResult.error(errorMessage);
}
}
JSONObject jsonObject = null;
if (StringUtils.isNotBlank(permCodeIdListString)) {
Set<Long> permCodeIdSet = Arrays.stream(
permCodeIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
if (!sysPermCodeService.existAllPrimaryKeys(permCodeIdSet)) {
return CallResult.error("数据验证失败,存在不合法的权限字,请刷新后重试!");
}
jsonObject = new JSONObject();
jsonObject.put("permCodeIdSet", permCodeIdSet);
}
return CallResult.ok(jsonObject);
}
/**
* 查询菜单的权限资源地址列表。同时返回详细的分配路径。
*
* @param menuId 菜单Id。
* @param url 权限资源地址过滤条件。
* @return 包含从菜单到权限资源的权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysPermListWithDetail(Long menuId, String url) {
return sysMenuMapper.getSysPermListWithDetail(menuId, url);
}
/**
* 查询菜单的用户列表。同时返回详细的分配路径。
*
* @param menuId 菜单Id。
* @param loginName 登录名。
* @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysUserListWithDetail(Long menuId, String loginName) {
return sysMenuMapper.getSysUserListWithDetail(menuId, loginName);
}
private String checkErrorOfNonDirectoryMenu(SysMenu sysMenu) {
// 判断父节点是否存在
SysMenu parentSysMenu = getById(sysMenu.getParentId());
if (parentSysMenu == null) {
return "数据验证失败,关联的上级菜单并不存在,请刷新后重试!";
}
// 逐个判断每种类型的菜单,他的父菜单的合法性,先从目录类型和菜单类型开始
if (sysMenu.getMenuType() == SysMenuType.TYPE_DIRECTORY
|| sysMenu.getMenuType() == SysMenuType.TYPE_MENU) {
// 他们的上级只能是目录
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) {
return "数据验证失败,当前类型菜单项的上级菜单只能是目录类型!";
}
} else if (sysMenu.getMenuType() == SysMenuType.TYPE_UI_FRAGMENT) {
// ui fragment的上级只能是menu类型
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU) {
return "数据验证失败,当前类型菜单项的上级菜单只能是菜单类型和按钮类型!";
}
} else if (sysMenu.getMenuType() == SysMenuType.TYPE_BUTTON) {
// button的上级只能是menu和ui fragment
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU
&& parentSysMenu.getMenuType() != SysMenuType.TYPE_UI_FRAGMENT) {
return "数据验证失败当前类型菜单项的上级菜单只能是菜单类型和UI片段类型";
}
}
return null;
}
}

View File

@@ -0,0 +1,213 @@
package com.orange.demo.upmsservice.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.util.MyModelUtil;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.upmsservice.dao.SysMenuPermCodeMapper;
import com.orange.demo.upmsservice.dao.SysPermCodeMapper;
import com.orange.demo.upmsservice.dao.SysPermCodePermMapper;
import com.orange.demo.upmsservice.model.SysMenuPermCode;
import com.orange.demo.upmsservice.model.SysPermCode;
import com.orange.demo.upmsservice.model.SysPermCodePerm;
import com.orange.demo.upmsservice.service.SysPermCodeService;
import com.orange.demo.upmsservice.service.SysPermService;
import org.apache.commons.lang3.StringUtils;
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;
/**
* 权限字数据服务类。
*
* @author Jerry
* @date 2020-08-08
*/
@Service("sysPermCodeService")
public class SysPermCodeServiceImpl extends BaseService<SysPermCode, Long> implements SysPermCodeService {
@Autowired
private SysPermCodeMapper sysPermCodeMapper;
@Autowired
private SysPermCodePermMapper sysPermCodePermMapper;
@Autowired
private SysMenuPermCodeMapper sysMenuPermCodeMapper;
@Autowired
private SysPermService sysPermService;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysPermCode> mapper() {
return sysPermCodeMapper;
}
/**
* 获取指定用户的权限字列表。
*
* @param userId 用户主键Id。
* @return 用户关联的权限字列表。
*/
@Override
public List<String> getPermCodeListByUserId(Long userId) {
return sysPermCodeMapper.getPermCodeListByUserId(userId);
}
/**
* 保存新增的权限字对象。
*
* @param sysPermCode 新增的权限字对象。
* @param permIdSet 权限资源Id列表。
* @return 新增后的权限字对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public SysPermCode saveNew(SysPermCode sysPermCode, Set<Long> permIdSet) {
sysPermCode.setPermCodeId(idGenerator.nextLongId());
MyModelUtil.fillCommonsForInsert(sysPermCode);
sysPermCode.setDeletedFlag(GlobalDeletedFlag.NORMAL);
sysPermCodeMapper.insert(sysPermCode);
if (permIdSet != null) {
List<SysPermCodePerm> sysPermCodePermList = new LinkedList<>();
for (Long permId : permIdSet) {
SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermCodeId(sysPermCode.getPermCodeId());
permCodePerm.setPermId(permId);
sysPermCodePermList.add(permCodePerm);
}
sysPermCodePermMapper.insertList(sysPermCodePermList);
}
return sysPermCode;
}
/**
* 更新权限字对象。
*
* @param sysPermCode 更新的权限字对象。
* @param originalSysPermCode 原有的权限字对象。
* @param permIdSet 权限资源Id列表。
* @return 更新成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set<Long> permIdSet) {
MyModelUtil.fillCommonsForUpdate(sysPermCode, originalSysPermCode);
sysPermCode.setParentId(originalSysPermCode.getParentId());
sysPermCode.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysPermCodeMapper.updateByPrimaryKey(sysPermCode) != 1) {
return false;
}
SysPermCodePerm deletedPermCodePerm = new SysPermCodePerm();
deletedPermCodePerm.setPermCodeId(sysPermCode.getPermCodeId());
sysPermCodePermMapper.delete(deletedPermCodePerm);
if (permIdSet != null) {
List<SysPermCodePerm> sysPermCodePermList = new LinkedList<>();
for (Long permId : permIdSet) {
SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermCodeId(sysPermCode.getPermCodeId());
permCodePerm.setPermId(permId);
sysPermCodePermList.add(permCodePerm);
}
sysPermCodePermMapper.insertList(sysPermCodePermList);
}
return true;
}
/**
* 删除指定的权限字。
*
* @param permCodeId 权限字主键Id。
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long permCodeId) {
if (!this.removeById(permCodeId)) {
return false;
}
SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setPermCodeId(permCodeId);
sysMenuPermCodeMapper.delete(menuPermCode);
SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermCodeId(permCodeId);
sysPermCodePermMapper.delete(permCodePerm);
return true;
}
/**
* 判断当前权限字是否存在下级权限字对象。
*
* @param permCodeId 权限字主键Id。
* @return 存在返回true否则false。
*/
@Override
public boolean hasChildren(Long permCodeId) {
SysPermCode permCode = new SysPermCode();
permCode.setParentId(permCodeId);
return this.getCountByFilter(permCode) > 0;
}
/**
* 验证权限字对象关联的数据是否都合法。
*
* @param sysPermCode 当前操作的对象。
* @param originalSysPermCode 原有对象。
* @param permIdListString 逗号分隔的权限资源Id列表。
* @return 验证结果。
*/
@Override
public CallResult verifyRelatedData(
SysPermCode sysPermCode, SysPermCode originalSysPermCode, String permIdListString) {
if (this.needToVerify(sysPermCode, originalSysPermCode, SysPermCode::getParentId)) {
if (getById(sysPermCode.getParentId()) == null) {
return CallResult.error("数据验证失败,关联的上级权限字并不存在,请刷新后重试!");
}
}
JSONObject jsonObject = null;
if (StringUtils.isNotBlank(permIdListString)) {
Set<Long> permIdSet = Arrays.stream(
permIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
if (!sysPermService.existAllPrimaryKeys(permIdSet)) {
return CallResult.error("数据验证失败,存在不合法的权限资源,请刷新后重试!");
}
jsonObject = new JSONObject();
jsonObject.put("permIdSet", permIdSet);
}
return CallResult.ok(jsonObject);
}
/**
* 查询权限字的用户列表。同时返回详细的分配路径。
*
* @param permCodeId 权限字Id。
* @param loginName 登录名。
* @return 包含从权限字到用户的完整权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysUserListWithDetail(Long permCodeId, String loginName) {
return sysPermCodeMapper.getSysUserListWithDetail(permCodeId, loginName);
}
/**
* 查询权限字的角色列表。同时返回详细的分配路径。
*
* @param permCodeId 权限字Id。
* @param roleName 角色名。
* @return 包含从权限字到角色的权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysRoleListWithDetail(Long permCodeId, String roleName) {
return sysPermCodeMapper.getSysRoleListWithDetail(permCodeId, roleName);
}
}

View File

@@ -0,0 +1,123 @@
package com.orange.demo.upmsservice.service.impl;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.util.MyModelUtil;
import com.orange.demo.upmsservice.dao.SysPermModuleMapper;
import com.orange.demo.upmsservice.model.SysPerm;
import com.orange.demo.upmsservice.model.SysPermModule;
import com.orange.demo.upmsservice.service.SysPermModuleService;
import com.orange.demo.upmsservice.service.SysPermService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 权限资源模块数据服务类。
*
* @author Jerry
* @date 2020-08-08
*/
@Service("sysPermModuleService")
public class SysPermModuleServiceImpl extends BaseService<SysPermModule, Long> implements SysPermModuleService {
@Autowired
private SysPermModuleMapper sysPermModuleMapper;
@Autowired
private SysPermService sysPermService;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysPermModule> mapper() {
return sysPermModuleMapper;
}
/**
* 保存新增的权限资源模块对象。
*
* @param sysPermModule 新增的权限资源模块对象。
* @return 新增后的权限资源模块对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public SysPermModule saveNew(SysPermModule sysPermModule) {
sysPermModule.setModuleId(idGenerator.nextLongId());
MyModelUtil.fillCommonsForInsert(sysPermModule);
sysPermModule.setDeletedFlag(GlobalDeletedFlag.NORMAL);
sysPermModuleMapper.insert(sysPermModule);
return sysPermModule;
}
/**
* 更新权限资源模块对象。
*
* @param sysPermModule 更新的权限资源模块对象。
* @param originalSysPermModule 原有的权限资源模块对象。
* @return 更新成功返回true否则false
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule) {
MyModelUtil.fillCommonsForUpdate(sysPermModule, originalSysPermModule);
sysPermModule.setDeletedFlag(GlobalDeletedFlag.NORMAL);
return sysPermModuleMapper.updateByPrimaryKey(sysPermModule) != 0;
}
/**
* 删除指定的权限资源模块。
*
* @param moduleId 权限资源模块主键Id。
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long moduleId) {
return this.removeById(moduleId);
}
/**
* 获取权限模块资源及其关联的权限资源列表。
*
* @return 权限资源模块及其关联的权限资源列表。
*/
@Override
public List<SysPermModule> getPermModuleAndPermList() {
return sysPermModuleMapper.getPermModuleAndPermList();
}
/**
* 判断是否存在下级权限资源模块。
*
* @param moduleId 权限资源模块主键Id。
* @return 存在返回true否则false。
*/
@Override
public boolean hasChildren(Long moduleId) {
SysPermModule permModule = new SysPermModule();
permModule.setParentId(moduleId);
return this.getCountByFilter(permModule) > 0;
}
/**
* 判断是否存在权限数据。
*
* @param moduleId 权限资源模块主键Id。
* @return 存在返回true否则false。
*/
@Override
public boolean hasModulePerms(Long moduleId) {
SysPerm filter = new SysPerm();
filter.setModuleId(moduleId);
return sysPermService.getCountByFilter(filter) > 0;
}
}

View File

@@ -0,0 +1,190 @@
package com.orange.demo.upmsservice.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.object.MyRelationParam;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.util.MyModelUtil;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.upmsservice.dao.SysPermCodePermMapper;
import com.orange.demo.upmsservice.dao.SysPermMapper;
import com.orange.demo.upmsservice.model.SysPerm;
import com.orange.demo.upmsservice.model.SysPermCodePerm;
import com.orange.demo.upmsservice.model.SysPermModule;
import com.orange.demo.upmsservice.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
import java.util.Map;
/**
* 权限资源数据服务类。
*
* @author Jerry
* @date 2020-08-08
*/
@Service("sysPermService")
public class SysPermServiceImpl extends BaseService<SysPerm, Long> implements SysPermService {
@Autowired
private SysPermMapper sysPermMapper;
@Autowired
private SysPermCodePermMapper sysPermCodePermMapper;
@Autowired
private SysPermModuleService sysPermModuleService;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysPerm> mapper() {
return sysPermMapper;
}
/**
* 保存新增的权限资源对象。
*
* @param perm 新增的权限资源对象。
* @return 新增后的权限资源对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public SysPerm saveNew(SysPerm perm) {
perm.setPermId(idGenerator.nextLongId());
MyModelUtil.fillCommonsForInsert(perm);
perm.setDeletedFlag(GlobalDeletedFlag.NORMAL);
sysPermMapper.insert(perm);
return perm;
}
/**
* 更新权限资源对象。
*
* @param perm 更新的权限资源对象。
* @param originalPerm 原有的权限资源对象。
* @return 更新成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(SysPerm perm, SysPerm originalPerm) {
MyModelUtil.fillCommonsForUpdate(perm, originalPerm);
perm.setDeletedFlag(GlobalDeletedFlag.NORMAL);
return sysPermMapper.updateByPrimaryKeySelective(perm) != 0;
}
/**
* 删除权限资源。
*
* @param permId 权限资源主键Id。
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long permId) {
if (!this.removeById(permId)) {
return false;
}
SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePerm.setPermId(permId);
sysPermCodePermMapper.delete(permCodePerm);
return true;
}
/**
* 获取权限数据列表。
*
* @param sysPermFilter 过滤对象。
* @return 权限列表。
*/
@Override
public List<SysPerm> getPermListWithRelation(SysPerm sysPermFilter) {
Example e = new Example(SysPerm.class);
e.orderBy("showOrder");
Example.Criteria c = e.createCriteria();
if (ObjectUtil.isNotNull(sysPermFilter.getModuleId())) {
c.andEqualTo("moduleId", sysPermFilter.getModuleId());
}
if (ObjectUtil.isNotNull(sysPermFilter.getUrl())) {
c.andLike("url", "%" + sysPermFilter.getUrl() + "%");
}
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL);
List<SysPerm> permList = sysPermMapper.selectByExample(e);
// 这里因为权限只有字典数据,所以仅仅做字典关联。
this.buildRelationForDataList(permList, MyRelationParam.dictOnly());
return permList;
}
/**
* 获取与指定用户关联的权限资源列表。
*
* @param userId 关联的用户主键Id。
* @return 与指定用户Id关联的权限资源列表。
*/
@Override
public List<SysPerm> getPermListByUserId(Long userId) {
return sysPermMapper.getPermListByUserId(userId);
}
/**
* 验证权限资源对象关联的数据是否都合法。
*
* @param sysPerm 当前操作的对象。
* @param originalSysPerm 原有对象。
* @return 验证结果。
*/
@Override
public CallResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm) {
if (this.needToVerify(sysPerm, originalSysPerm, SysPerm::getModuleId)) {
SysPermModule permModule = sysPermModuleService.getById(sysPerm.getModuleId());
if (permModule == null) {
return CallResult.error("数据验证失败关联的权限模块Id并不存在请刷新后重试");
}
}
return CallResult.ok();
}
/**
* 查询权限资源地址的用户列表。同时返回详细的分配路径。
*
* @param permId 权限资源Id。
* @param loginName 登录名。
* @return 包含从权限资源到用户的完整权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysUserListWithDetail(Long permId, String loginName) {
return sysPermMapper.getSysUserListWithDetail(permId, loginName);
}
/**
* 查询权限资源地址的角色列表。同时返回详细的分配路径。
*
* @param permId 权限资源Id。
* @param roleName 角色名。
* @return 包含从权限资源到角色的权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysRoleListWithDetail(Long permId, String roleName) {
return sysPermMapper.getSysRoleListWithDetail(permId, roleName);
}
/**
* 查询权限资源地址的菜单列表。同时返回详细的分配路径。
*
* @param permId 权限资源Id。
* @param menuName 菜单名。
* @return 包含从权限资源到菜单的权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysMenuListWithDetail(Long permId, String menuName) {
return sysPermMapper.getSysMenuListWithDetail(permId, menuName);
}
}

View File

@@ -0,0 +1,49 @@
package com.orange.demo.upmsservice.service.impl;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.upmsservice.dao.SysPermWhitelistMapper;
import com.orange.demo.upmsservice.model.SysPermWhitelist;
import com.orange.demo.upmsservice.service.SysPermWhitelistService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 白名单数据服务类。
*
* @author Jerry
* @date 2020-08-08
*/
@Service("sysPermWhitelistService")
public class SysPermWhitelistServiceImpl extends BaseService<SysPermWhitelist, String> implements SysPermWhitelistService {
@Autowired
private SysPermWhitelistMapper sysPermWhitelistMapper;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysPermWhitelist> mapper() {
return sysPermWhitelistMapper;
}
/**
* 获取白名单权限资源的列表。
*
* @return 白名单权限资源地址列表。
*/
@Override
public List<String> getWhitelistPermList() {
List<SysPermWhitelist> dataList = this.getAllList();
Function<SysPermWhitelist, String> getterFunc = SysPermWhitelist::getPermUrl;
return dataList.stream()
.filter(x -> getterFunc.apply(x) != null).map(getterFunc).collect(Collectors.toList());
}
}

View File

@@ -0,0 +1,221 @@
package com.orange.demo.upmsservice.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.util.MyModelUtil;
import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.upmsservice.dao.SysRoleMapper;
import com.orange.demo.upmsservice.dao.SysRoleMenuMapper;
import com.orange.demo.upmsservice.dao.SysUserRoleMapper;
import com.orange.demo.upmsservice.model.SysRole;
import com.orange.demo.upmsservice.model.SysRoleMenu;
import com.orange.demo.upmsservice.model.SysUserRole;
import com.orange.demo.upmsservice.service.SysMenuService;
import com.orange.demo.upmsservice.service.SysRoleService;
import org.apache.commons.lang3.StringUtils;
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;
/**
* 角色数据服务类。
*
* @author Jerry
* @date 2020-08-08
*/
@Service("sysRoleService")
public class SysRoleServiceImpl extends BaseService<SysRole, Long> implements SysRoleService {
@Autowired
private SysRoleMapper sysRoleMapper;
@Autowired
private SysRoleMenuMapper sysRoleMenuMapper;
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
@Autowired
private SysMenuService sysMenuService;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回主对象的Mapper对象。
*
* @return 主对象的Mapper对象。
*/
@Override
protected BaseDaoMapper<SysRole> mapper() {
return sysRoleMapper;
}
/**
* 保存新增的角色对象。
*
* @param role 新增的角色对象。
* @param menuIdSet 菜单Id列表。
* @return 新增后的角色对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public SysRole saveNew(SysRole role, Set<Long> menuIdSet) {
role.setRoleId(idGenerator.nextLongId());
MyModelUtil.fillCommonsForInsert(role);
role.setDeletedFlag(GlobalDeletedFlag.NORMAL);
sysRoleMapper.insert(role);
if (menuIdSet != null) {
List<SysRoleMenu> roleMenuList = new LinkedList<>();
for (Long menuId : menuIdSet) {
SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setRoleId(role.getRoleId());
roleMenu.setMenuId(menuId);
roleMenuList.add(roleMenu);
}
sysRoleMenuMapper.insertList(roleMenuList);
}
return role;
}
/**
* 更新角色对象。
*
* @param role 更新的角色对象。
* @param originalRole 原有的角色对象。
* @param menuIdSet 菜单Id列表。
* @return 更新成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(SysRole role, SysRole originalRole, Set<Long> menuIdSet) {
MyModelUtil.fillCommonsForUpdate(role, originalRole);
role.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysRoleMapper.updateByPrimaryKey(role) != 1) {
return false;
}
SysRoleMenu deletedRoleMenu = new SysRoleMenu();
deletedRoleMenu.setRoleId(role.getRoleId());
sysRoleMenuMapper.delete(deletedRoleMenu);
if (menuIdSet != null) {
List<SysRoleMenu> roleMenuList = new LinkedList<>();
for (Long menuId : menuIdSet) {
SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setRoleId(role.getRoleId());
roleMenu.setMenuId(menuId);
roleMenuList.add(roleMenu);
}
sysRoleMenuMapper.insertList(roleMenuList);
}
return true;
}
/**
* 删除指定角色。
*
* @param roleId 角色主键Id。
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long roleId) {
if (!this.removeById(roleId)) {
return false;
}
SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setRoleId(roleId);
sysRoleMenuMapper.delete(roleMenu);
SysUserRole userRole = new SysUserRole();
userRole.setRoleId(roleId);
sysUserRoleMapper.delete(userRole);
return true;
}
/**
* 获取角色列表。
*
* @param filter 角色过滤对象。
* @param orderBy 排序参数。
* @return 角色列表。
*/
@Override
public List<SysRole> getSysRoleList(SysRole filter, String orderBy) {
return sysRoleMapper.getSysRoleList(filter, orderBy);
}
/**
* 批量新增用户角色关联。
*
* @param userRoleList 用户角色关系数据列表。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void addUserRoleList(List<SysUserRole> userRoleList) {
sysUserRoleMapper.insertList(userRoleList);
}
/**
* 移除指定用户和指定角色的关联关系。
*
* @param roleId 角色主键Id。
* @param userId 用户主键Id。
* @return 移除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean removeUserRole(Long roleId, Long userId) {
SysUserRole userRole = new SysUserRole();
userRole.setRoleId(roleId);
userRole.setUserId(userId);
return sysUserRoleMapper.delete(userRole) == 1;
}
/**
* 验证角色对象关联的数据是否都合法。
*
* @param sysRole 当前操作的对象。
* @param originalSysRole 原有对象。
* @param menuIdListString 逗号分隔的menuId列表。
* @return 验证结果。
*/
@Override
public CallResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString) {
JSONObject jsonObject = null;
if (StringUtils.isNotBlank(menuIdListString)) {
Set<Long> menuIdSet = Arrays.stream(
menuIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
if (!sysMenuService.existAllPrimaryKeys(menuIdSet)) {
return CallResult.error("数据验证失败,存在不合法的菜单权限,请刷新后重试!");
}
jsonObject = new JSONObject();
jsonObject.put("menuIdSet", menuIdSet);
}
return CallResult.ok(jsonObject);
}
/**
* 查询角色的权限资源地址列表。同时返回详细的分配路径。
*
* @param roleId 角色Id。
* @param url url过滤条件。
* @return 包含从角色到权限资源的完整权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysPermListWithDetail(Long roleId, String url) {
return sysRoleMapper.getSysPermListWithDetail(roleId, url);
}
/**
* 查询角色的权限字列表。同时返回详细的分配路径。
*
* @param roleId 角色Id。
* @param permCode 权限字名称过滤条件。
* @return 包含从角色到权限字的权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysPermCodeListWithDetail(Long roleId, String permCode) {
return sysRoleMapper.getSysPermCodeListWithDetail(roleId, permCode);
}
}

View File

@@ -0,0 +1,336 @@
package com.orange.demo.upmsservice.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.orange.demo.upmsservice.service.*;
import com.orange.demo.upmsservice.dao.*;
import com.orange.demo.upmsservice.model.*;
import com.orange.demo.common.core.util.*;
import com.orange.demo.common.core.object.*;
import com.orange.demo.common.core.constant.GlobalDeletedFlag;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.upmsinterface.constant.SysUserStatus;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*;
import java.util.stream.Collectors;
/**
* 用户管理数据操作服务类。
*
* @author Jerry
* @date 2020-08-08
*/
@Service("sysUserService")
public class SysUserServiceImpl extends BaseService<SysUser, Long> implements SysUserService {
@Autowired
private SysUserMapper sysUserMapper;
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
@Autowired
private SysPermService sysPermService;
@Autowired
private SysRoleService sysRoleService;
@Autowired
private IdGeneratorWrapper idGenerator;
@Autowired
private PasswordEncoder passwordEncoder;
/**
* 返回当前Service的主表Mapper对象。
*
* @return 主表Mapper对象。
*/
@Override
protected BaseDaoMapper<SysUser> mapper() {
return sysUserMapper;
}
/**
* 获取指定登录名的用户对象。
*
* @param loginName 指定登录用户名。
* @return 用户对象。
*/
@Override
public SysUser getSysUserByLoginName(String loginName) {
Example e = new Example(SysUser.class);
Example.Criteria c = e.createCriteria();
c.andEqualTo("loginName", loginName);
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL);
return sysUserMapper.selectOneByExample(e);
}
/**
* 保存新增的用户对象。
*
* @param user 新增的用户对象。
* @param roleIdSet 用户角色Id集合。
* @return 新增后的用户对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public SysUser saveNew(SysUser user, Set<Long> roleIdSet) {
user.setUserId(idGenerator.nextLongId());
user.setPassword(passwordEncoder.encode(user.getPassword()));
user.setUserStatus(SysUserStatus.STATUS_NORMAL);
user.setDeletedFlag(GlobalDeletedFlag.NORMAL);
MyModelUtil.fillCommonsForInsert(user);
sysUserMapper.insert(user);
if (CollectionUtils.isNotEmpty(roleIdSet)) {
List<SysUserRole> userRoleList = new LinkedList<>();
for (Long roleId : roleIdSet) {
SysUserRole userRole = new SysUserRole();
userRole.setUserId(user.getUserId());
userRole.setRoleId(roleId);
userRoleList.add(userRole);
}
sysUserRoleMapper.insertList(userRoleList);
}
return user;
}
/**
* 更新用户对象。
*
* @param user 更新的用户对象。
* @param originalUser 原有的用户对象。
* @param roleIdSet 用户角色Id列表。
* @return 更新成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(SysUser user, SysUser originalUser, Set<Long> roleIdSet) {
user.setLoginName(originalUser.getLoginName());
user.setPassword(originalUser.getPassword());
MyModelUtil.fillCommonsForUpdate(user, originalUser);
user.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysUserMapper.updateByPrimaryKey(user) != 1) {
return false;
}
// 先删除原有的User-Role关联关系再重新插入新的关联关系
SysUserRole deletedUserRole = new SysUserRole();
deletedUserRole.setUserId(user.getUserId());
sysUserRoleMapper.delete(deletedUserRole);
if (CollectionUtils.isNotEmpty(roleIdSet)) {
List<SysUserRole> userRoleList = new LinkedList<>();
for (Long roleId : roleIdSet) {
SysUserRole userRole = new SysUserRole();
userRole.setUserId(user.getUserId());
userRole.setRoleId(roleId);
userRoleList.add(userRole);
}
sysUserRoleMapper.insertList(userRoleList);
}
return true;
}
/**
* 重置用户密码。
* @param userId 用户主键Id。
* @param newPass 新密码。
* @return 成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean changePassword(Long userId, String newPass) {
Example e = new Example(SysUser.class);
e.createCriteria()
.andEqualTo(super.idFieldName, userId)
.andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
SysUser updatedUser = new SysUser();
updatedUser.setPassword(passwordEncoder.encode(newPass));
return sysUserMapper.updateByExampleSelective(updatedUser, e) == 1;
}
/**
* 删除指定数据。
*
* @param userId 主键Id。
* @return 成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long userId) {
// 这里先删除主数据
if (!this.removeById(userId)) {
return false;
}
SysUserRole userRole = new SysUserRole();
userRole.setUserId(userId);
sysUserRoleMapper.delete(userRole);
return true;
}
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getSysUserListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<SysUser> getSysUserList(SysUser filter, String orderBy) {
return sysUserMapper.getSysUserList(null, null, filter, orderBy);
}
/**
* 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。
* 由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getSysUserListWithRelation)方法。
*
* @param inFilterField (In-list)指定的字段(Java成员字段而非数据列名)。
* @param inFilterValues inFilterField指定字段的(In-list)数据列表。
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public <M> List<SysUser> getSysUserList(
String inFilterField, Set<M> inFilterValues, SysUser filter, String orderBy) {
String inFilterColumn = MyModelUtil.mapToColumnName(inFilterField, SysUser.class);
return sysUserMapper.getSysUserList(inFilterColumn, inFilterValues, filter, orderBy);
}
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getSysUserList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序对象。
* @return 查询结果集。
*/
@Override
public List<SysUser> getSysUserListWithRelation(SysUser filter, String orderBy) {
List<SysUser> resultList = sysUserMapper.getSysUserList(null, null, filter, orderBy);
this.buildRelationForDataList(resultList, MyRelationParam.normal());
return resultList;
}
/**
* 获取主表的查询结果,查询条件中包括主表过滤对象和指定字段的(in list)过滤。
* 同时还包含主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 如果仅仅需要获取主表数据,请移步(getSysUserList),以便获取更好的查询性能。
*
* @param inFilterField (In-list)指定的字段(Java成员字段而非数据列名)。
* @param inFilterValues inFilterField指定字段的(In-list)数据列表。
* @param filter 主表过滤对象。
* @param orderBy 排序对象。
* @return 查询结果集。
*/
@Override
public <M> List<SysUser> getSysUserListWithRelation(
String inFilterField, Set<M> inFilterValues, SysUser filter, String orderBy) {
List<SysUser> resultList =
sysUserMapper.getSysUserList(inFilterField, inFilterValues, filter, orderBy);
this.buildRelationForDataList(resultList, MyRelationParam.dictOnly());
return resultList;
}
/**
* 获取指定用户的权限集合。
*
* @param userId 用户主键Id。
* @return 用户权限集合。
*/
@Override
public Set<String> getSysPermSetByUserId(Long userId) {
List<SysPerm> permList = sysPermService.getPermListByUserId(userId);
return permList.stream().map(SysPerm::getUrl).collect(Collectors.toSet());
}
/**
* 获取指定角色的用户列表。
*
* @param roleId 角色主键Id。
* @param filter 用户过滤对象。
* @param orderBy 排序参数。
* @return 用户列表。
*/
@Override
public List<SysUser> getSysUserListByRoleId(Long roleId, SysUser filter, String orderBy) {
return sysUserMapper.getSysUserListByRoleId(roleId, filter, orderBy);
}
/**
* 获取不属于指定角色的用户列表。
*
* @param roleId 角色主键Id。
* @param filter 用户过滤对象。
* @param orderBy 排序参数。
* @return 用户列表。
*/
@Override
public List<SysUser> getNotInSysUserListByRoleId(Long roleId, SysUser filter, String orderBy) {
return sysUserMapper.getNotInSysUserListByRoleId(roleId, filter, orderBy);
}
/**
* 查询用户的权限资源地址列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param url url过滤条件。
* @return 包含从用户到权限资源的完整权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysPermListWithDetail(Long userId, String url) {
return sysUserMapper.getSysPermListWithDetail(userId, url);
}
/**
* 查询用户的权限字列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param permCode 权限字名称过滤条件。
* @return 包含从用户到权限字的权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysPermCodeListWithDetail(Long userId, String permCode) {
return sysUserMapper.getSysPermCodeListWithDetail(userId, permCode);
}
/**
* 查询用户的菜单列表。同时返回详细的分配路径。
*
* @param userId 用户Id。
* @param menuName 菜单名称过滤条件。
* @return 包含从用户到菜单的权限分配路径信息的查询结果列表。
*/
@Override
public List<Map<String, Object>> getSysMenuListWithDetail(Long userId, String menuName) {
return sysUserMapper.getSysMenuListWithDetail(userId, menuName);
}
/**
* 验证用户对象关联的数据是否都合法。
*
* @param sysUser 当前操作的对象。
* @param originalSysUser 原有对象。
* @param roleIdListString 逗号分隔的角色Id列表字符串。
* @return 验证结果。
*/
@Override
public CallResult verifyRelatedData(SysUser sysUser, SysUser originalSysUser, String roleIdListString) {
JSONObject jsonObject = new JSONObject();
if (StringUtils.isBlank(roleIdListString)) {
return CallResult.error("数据验证失败,用户的角色数据不能为空!");
}
Set<Long> roleIdSet = Arrays.stream(
roleIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
if (!sysRoleService.existAllPrimaryKeys(roleIdSet)) {
return CallResult.error("数据验证失败,存在不合法的用户角色,请刷新后重试!");
}
jsonObject.put("roleIdSet", roleIdSet);
return CallResult.ok(jsonObject);
}
}

View File

@@ -82,12 +82,12 @@
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-extra:1.1.5" level="project" />
<orderEntry type="library" name="Maven: tk.mybatis:mapper-spring-boot-autoconfigure:2.1.5" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.13" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.1" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.1" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.13" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.1.11" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.3.0" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.3" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.3.0" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />
<orderEntry type="module" module-name="application-common" />
<orderEntry type="module" module-name="common-swagger" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-micro-spring-boot-starter:2.0.5" level="project" />