supplier) {
+ HttpServletRequest request = ServletUtils.getRequest();
+ String errorKey = Constants.LOGIN_ERROR + username;
+ Integer errorLimitTime = Constants.LOGIN_ERROR_LIMIT_TIME;
+ Integer setErrorNumber = Constants.LOGIN_ERROR_NUMBER;
+ String loginFail = Constants.LOGIN_FAIL;
+
+ // 获取用户登录错误次数(可自定义限制策略 例如: key + username + ip)
+ Integer errorNumber = RedisUtils.getCacheObject(errorKey);
+ // 锁定时间内登录 则踢出
+ if (ObjectUtil.isNotNull(errorNumber) && errorNumber.equals(setErrorNumber)) {
+ asyncService.recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), errorLimitTime), request);
+ throw new UserException(loginType.getRetryLimitExceed(), errorLimitTime);
+ }
+
+ if (supplier.get()) {
+ // 是否第一次
+ errorNumber = ObjectUtil.isNull(errorNumber) ? 1 : errorNumber + 1;
+ // 达到规定错误次数 则锁定登录
+ if (errorNumber.equals(setErrorNumber)) {
+ RedisUtils.setCacheObject(errorKey, errorNumber, errorLimitTime, TimeUnit.MINUTES);
+ asyncService.recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), errorLimitTime), request);
+ throw new UserException(loginType.getRetryLimitExceed(), errorLimitTime);
+ } else {
+ // 未达到规定错误次数 则递增
+ RedisUtils.setCacheObject(errorKey, errorNumber);
+ asyncService.recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber), request);
+ throw new UserException(loginType.getRetryLimitCount(), errorNumber);
+ }
+ }
+
+ // 登录成功 清空错误次数
+ RedisUtils.deleteObject(errorKey);
+ }
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java
index 2803a59ed..d2c5d5cb0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java
@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.helper.DataBaseHelper;
import com.ruoyi.system.domain.SysRoleDept;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.mapper.SysRoleDeptMapper;
@@ -14,6 +15,14 @@ import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
+/**
+ * 数据权限 实现
+ *
+ * 注意: 此Service内不允许调用标注`数据权限`注解的方法
+ * 例如: deptMapper.selectList 此 selectList 方法标注了`数据权限`注解 会出现循环解析的问题
+ *
+ * @author Lion Li
+ */
@RequiredArgsConstructor
@Service("sdss")
public class SysDataScopeServiceImpl implements ISysDataScopeService {
@@ -35,11 +44,14 @@ public class SysDataScopeServiceImpl implements ISysDataScopeService {
@Override
public String getDeptAndChild(Long deptId) {
+ List deptList = deptMapper.selectList(new LambdaQueryWrapper()
+ .select(SysDept::getDeptId)
+ .apply(DataBaseHelper.findInSet(deptId, "ancestors")));
+ List ids = deptList.stream().map(SysDept::getDeptId).collect(Collectors.toList());
+ ids.add(deptId);
List list = deptMapper.selectList(new LambdaQueryWrapper()
.select(SysDept::getDeptId)
- .eq(SysDept::getDeptId, deptId)
- .or()
- .apply("find_in_set({0},ancestors)", deptId));
+ .in(SysDept::getDeptId, ids));
if (CollUtil.isNotEmpty(list)) {
return list.stream().map(d -> Convert.toStr(d.getDeptId())).collect(Collectors.joining(","));
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index 6b13f0b19..32e06d3d4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -11,6 +11,7 @@ import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.helper.DataBaseHelper;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.TreeBuildUtils;
@@ -21,6 +22,7 @@ import com.ruoyi.system.service.ISysDeptService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -45,7 +47,15 @@ public class SysDeptServiceImpl implements ISysDeptService {
*/
@Override
public List selectDeptList(SysDept dept) {
- return baseMapper.selectDeptList(dept);
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
+ lqw.eq(SysDept::getDelFlag, "0")
+ .eq(ObjectUtil.isNotNull(dept.getDeptId()), SysDept::getDeptId, dept.getDeptId())
+ .eq(ObjectUtil.isNotNull(dept.getParentId()), SysDept::getParentId, dept.getParentId())
+ .like(StringUtils.isNotBlank(dept.getDeptName()), SysDept::getDeptName, dept.getDeptName())
+ .eq(StringUtils.isNotBlank(dept.getStatus()), SysDept::getStatus, dept.getStatus())
+ .orderByAsc(SysDept::getParentId)
+ .orderByAsc(SysDept::getOrderNum);
+ return baseMapper.selectDeptList(lqw);
}
/**
@@ -75,7 +85,7 @@ public class SysDeptServiceImpl implements ISysDeptService {
@Override
public List selectDeptListByRoleId(Long roleId) {
SysRole role = roleMapper.selectById(roleId);
- return baseMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly());
+ return baseMapper.selectDeptListByRoleId(roleId, role.getDeptCheckStrictly());
}
/**
@@ -99,7 +109,7 @@ public class SysDeptServiceImpl implements ISysDeptService {
public long selectNormalChildrenDeptById(Long deptId) {
return baseMapper.selectCount(new LambdaQueryWrapper()
.eq(SysDept::getStatus, UserConstants.DEPT_NORMAL)
- .apply("find_in_set({0}, ancestors)", deptId));
+ .apply(DataBaseHelper.findInSet(deptId, "ancestors")));
}
/**
@@ -225,12 +235,16 @@ public class SysDeptServiceImpl implements ISysDeptService {
*/
public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) {
List children = baseMapper.selectList(new LambdaQueryWrapper()
- .apply("find_in_set({0},ancestors)", deptId));
+ .apply(DataBaseHelper.findInSet(deptId, "ancestors")));
+ List list = new ArrayList<>();
for (SysDept child : children) {
- child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
+ SysDept dept = new SysDept();
+ dept.setDeptId(child.getDeptId());
+ dept.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
+ list.add(dept);
}
- if (children.size() > 0) {
- baseMapper.updateDeptChildren(children);
+ if (list.size() > 0) {
+ baseMapper.updateBatchById(list);
}
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
index e9c28e1ca..2f9d0020a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysMenu;
@@ -65,8 +67,14 @@ public class SysMenuServiceImpl implements ISysMenuService {
.orderByAsc(SysMenu::getParentId)
.orderByAsc(SysMenu::getOrderNum));
} else {
- menu.getParams().put("userId", userId);
- menuList = baseMapper.selectMenuListByUserId(menu);
+ QueryWrapper wrapper = Wrappers.query();
+ wrapper.eq("ur.user_id", userId)
+ .like(StringUtils.isNotBlank(menu.getMenuName()), "m.menu_name", menu.getMenuName())
+ .eq(StringUtils.isNotBlank(menu.getVisible()), "m.visible", menu.getVisible())
+ .eq(StringUtils.isNotBlank(menu.getStatus()), "m.status", menu.getStatus())
+ .orderByAsc("m.parent_id")
+ .orderByAsc("m.order_num");
+ menuList = baseMapper.selectMenuListByUserId(wrapper);
}
return menuList;
}
@@ -115,7 +123,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
@Override
public List selectMenuListByRoleId(Long roleId) {
SysRole role = roleMapper.selectById(roleId);
- return baseMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly());
+ return baseMapper.selectMenuListByRoleId(roleId, role.getMenuCheckStrictly());
}
/**
@@ -133,9 +141,9 @@ public class SysMenuServiceImpl implements ISysMenuService {
router.setName(getRouteName(menu));
router.setPath(getRouterPath(menu));
router.setComponent(getComponent(menu));
- router.setQuery(menu.getQuery());
+ router.setQuery(menu.getQueryParam());
router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
- List cMenus = (List) menu.getChildren();
+ List cMenus = menu.getChildren();
if (!cMenus.isEmpty() && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
router.setAlwaysShow(true);
router.setRedirect("noRedirect");
@@ -148,12 +156,12 @@ public class SysMenuServiceImpl implements ISysMenuService {
children.setComponent(menu.getComponent());
children.setName(StringUtils.capitalize(menu.getPath()));
children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
- children.setQuery(menu.getQuery());
+ children.setQuery(menu.getQueryParam());
childrenList.add(children);
router.setChildren(childrenList);
} else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) {
router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
- router.setPath("/inner");
+ router.setPath("/");
List childrenList = new ArrayList();
RouterVo children = new RouterVo();
String routerPath = innerLinkReplaceEach(menu.getPath());
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
index 86ba97d13..f78be1e83 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
@@ -63,7 +63,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
}
@Override
- public SysOssConfigVo queryById(Integer ossConfigId) {
+ public SysOssConfigVo queryById(Long ossConfigId) {
return baseMapper.selectVoById(ossConfigId);
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
index 19f3211f5..e7e5b53c5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -2,7 +2,11 @@ package com.ruoyi.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.PageQuery;
@@ -40,7 +44,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
@Override
public TableDataInfo selectPageRoleList(SysRole role, PageQuery pageQuery) {
- Page page = baseMapper.selectPageRoleList(pageQuery.build(), role);
+ Page page = baseMapper.selectPageRoleList(pageQuery.build(), this.buildQueryWrapper(role));
return TableDataInfo.build(page);
}
@@ -52,7 +56,21 @@ public class SysRoleServiceImpl implements ISysRoleService {
*/
@Override
public List selectRoleList(SysRole role) {
- return baseMapper.selectRoleList(role);
+ return baseMapper.selectRoleList(this.buildQueryWrapper(role));
+ }
+
+ private Wrapper buildQueryWrapper(SysRole role) {
+ Map params = role.getParams();
+ QueryWrapper wrapper = Wrappers.query();
+ wrapper.eq("r.del_flag", UserConstants.ROLE_NORMAL)
+ .eq(ObjectUtil.isNotNull(role.getRoleId()), "r.role_id", role.getRoleId())
+ .like(StringUtils.isNotBlank(role.getRoleName()), "r.role_name", role.getRoleName())
+ .eq(StringUtils.isNotBlank(role.getStatus()), "r.status", role.getStatus())
+ .like(StringUtils.isNotBlank(role.getRoleKey()), "r.role_key", role.getRoleKey())
+ .between(params.get("beginTime") != null && params.get("endTime") != null,
+ "r.create_time", params.get("beginTime"), params.get("endTime"))
+ .orderByAsc("r.role_sort");
+ return wrapper;
}
/**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 6ec437b97..2ef63881c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -2,15 +2,20 @@ package com.ruoyi.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.helper.DataBaseHelper;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysPost;
@@ -26,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -39,6 +45,7 @@ import java.util.stream.Collectors;
public class SysUserServiceImpl implements ISysUserService {
private final SysUserMapper baseMapper;
+ private final SysDeptMapper deptMapper;
private final SysRoleMapper roleMapper;
private final SysPostMapper postMapper;
private final SysUserRoleMapper userRoleMapper;
@@ -46,7 +53,7 @@ public class SysUserServiceImpl implements ISysUserService {
@Override
public TableDataInfo selectPageUserList(SysUser user, PageQuery pageQuery) {
- Page page = baseMapper.selectPageUserList(pageQuery.build(), user);
+ Page page = baseMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user));
return TableDataInfo.build(page);
}
@@ -58,7 +65,28 @@ public class SysUserServiceImpl implements ISysUserService {
*/
@Override
public List selectUserList(SysUser user) {
- return baseMapper.selectUserList(user);
+ return baseMapper.selectUserList(this.buildQueryWrapper(user));
+ }
+
+ private Wrapper buildQueryWrapper(SysUser user) {
+ Map params = user.getParams();
+ QueryWrapper wrapper = Wrappers.query();
+ wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
+ .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
+ .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
+ .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
+ .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
+ .between(params.get("beginTime") != null && params.get("endTime") != null,
+ "u.create_time", params.get("beginTime"), params.get("endTime"))
+ .and(ObjectUtil.isNotNull(user.getDeptId()), w -> {
+ List deptList = deptMapper.selectList(new LambdaQueryWrapper()
+ .select(SysDept::getDeptId)
+ .apply(DataBaseHelper.findInSet(user.getDeptId(), "ancestors")));
+ List ids = deptList.stream().map(SysDept::getDeptId).collect(Collectors.toList());
+ ids.add(user.getDeptId());
+ w.in("u.dept_id", ids);
+ });
+ return wrapper;
}
/**
@@ -69,7 +97,13 @@ public class SysUserServiceImpl implements ISysUserService {
*/
@Override
public TableDataInfo selectAllocatedList(SysUser user, PageQuery pageQuery) {
- Page page = baseMapper.selectAllocatedList(pageQuery.build(), user);
+ QueryWrapper wrapper = Wrappers.query();
+ wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
+ .eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId())
+ .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
+ .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
+ .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber());
+ Page page = baseMapper.selectAllocatedList(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}
@@ -81,7 +115,14 @@ public class SysUserServiceImpl implements ISysUserService {
*/
@Override
public TableDataInfo selectUnallocatedList(SysUser user, PageQuery pageQuery) {
- Page page = baseMapper.selectUnallocatedList(pageQuery.build(), user);
+ List userId = userRoleMapper.selectUserIdsByRoleId(user.getRoleId());
+ QueryWrapper wrapper = Wrappers.query();
+ wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
+ .and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id"))
+ .notIn("u.user_id", userId)
+ .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
+ .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber());
+ Page page = baseMapper.selectUnallocatedList(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}
@@ -96,6 +137,17 @@ public class SysUserServiceImpl implements ISysUserService {
return baseMapper.selectUserByUserName(userName);
}
+ /**
+ * 通过手机号查询用户
+ *
+ * @param phonenumber 手机号
+ * @return 用户对象信息
+ */
+ @Override
+ public SysUser selectUserByPhonenumber(String phonenumber) {
+ return baseMapper.selectUserByPhonenumber(phonenumber);
+ }
+
/**
* 通过用户ID查询用户
*
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index b1ce3f829..00493be9e 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -22,27 +22,8 @@
-
- select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time
- from sys_dept d
-
-
-