review code.
This commit is contained in:
@@ -2,14 +2,20 @@ package com.orion.ops.framework.mybatis.core.query;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
|
||||||
import com.orion.lang.define.wrapper.DataGrid;
|
import com.orion.lang.define.wrapper.DataGrid;
|
||||||
import com.orion.lang.define.wrapper.IPageRequest;
|
import com.orion.lang.define.wrapper.IPageRequest;
|
||||||
import com.orion.lang.define.wrapper.Pager;
|
import com.orion.lang.define.wrapper.Pager;
|
||||||
import com.orion.lang.utils.Objects1;
|
import com.orion.lang.utils.Objects1;
|
||||||
import com.orion.lang.utils.Valid;
|
import com.orion.lang.utils.Valid;
|
||||||
import com.orion.lang.utils.collect.Lists;
|
import com.orion.lang.utils.collect.Lists;
|
||||||
|
import com.orion.lang.utils.reflect.Classes;
|
||||||
import com.orion.ops.framework.common.constant.Const;
|
import com.orion.ops.framework.common.constant.Const;
|
||||||
|
import com.orion.ops.framework.mybatis.core.domain.BaseDO;
|
||||||
|
import com.orion.spring.SpringHolder;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
@@ -40,6 +46,20 @@ public class DataQuery<T> {
|
|||||||
this.wrapper = wrapper;
|
this.wrapper = wrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过实体类直接获取 DataQuery
|
||||||
|
*
|
||||||
|
* @param entityClass entityClass
|
||||||
|
* @param <T> entityClass
|
||||||
|
* @return DataQuery
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static <T extends BaseDO> DataQuery<T> create(Class<T> entityClass) {
|
||||||
|
TableInfo table = Valid.notNull(TableInfoHelper.getTableInfo(entityClass), "notfound mapper class");
|
||||||
|
Class<BaseMapper<T>> mapperClass = (Class<BaseMapper<T>>) Classes.loadClass(table.getCurrentNamespace());
|
||||||
|
return new DataQuery<T>(SpringHolder.getBean(mapperClass));
|
||||||
|
}
|
||||||
|
|
||||||
public static <T> DataQuery<T> of(BaseMapper<T> dao) {
|
public static <T> DataQuery<T> of(BaseMapper<T> dao) {
|
||||||
Valid.notNull(dao, "dao is null");
|
Valid.notNull(dao, "dao is null");
|
||||||
return new DataQuery<>(dao);
|
return new DataQuery<>(dao);
|
||||||
@@ -60,11 +80,45 @@ public class DataQuery<T> {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public T getOne() {
|
public DataQuery<T> only() {
|
||||||
wrapper.last(Const.LIMIT_1);
|
wrapper.last(Const.LIMIT_1);
|
||||||
return dao.selectOne(wrapper);
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------- id --------------------
|
||||||
|
|
||||||
|
public T get(Serializable id) {
|
||||||
|
Valid.notNull(id, "id is null");
|
||||||
|
return dao.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public <R> R get(Serializable id, Function<T, R> mapper) {
|
||||||
|
Valid.notNull(id, "id is null");
|
||||||
|
Valid.notNull(mapper, "convert function is null");
|
||||||
|
return Objects1.map(dao.selectById(id), mapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<T> optional(Serializable id) {
|
||||||
|
Valid.notNull(id, "id is null");
|
||||||
|
return Optional.ofNullable(dao.selectById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------- one --------------------
|
||||||
|
|
||||||
|
public T getOne() {
|
||||||
|
return this.only().get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public <R> R getOne(Function<T, R> mapper) {
|
||||||
|
return this.only().get(mapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<T> optionalOne() {
|
||||||
|
return this.only().optional();
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------- get --------------------
|
||||||
|
|
||||||
public T get() {
|
public T get() {
|
||||||
return dao.selectOne(wrapper);
|
return dao.selectOne(wrapper);
|
||||||
}
|
}
|
||||||
@@ -78,6 +132,8 @@ public class DataQuery<T> {
|
|||||||
return Optional.ofNullable(dao.selectOne(wrapper));
|
return Optional.ofNullable(dao.selectOne(wrapper));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------- list --------------------
|
||||||
|
|
||||||
public List<T> list() {
|
public List<T> list() {
|
||||||
return dao.selectList(wrapper);
|
return dao.selectList(wrapper);
|
||||||
}
|
}
|
||||||
@@ -91,14 +147,22 @@ public class DataQuery<T> {
|
|||||||
return dao.selectList(wrapper).stream();
|
return dao.selectList(wrapper).stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------- statistic --------------------
|
||||||
|
|
||||||
public Long count() {
|
public Long count() {
|
||||||
return dao.selectCount(wrapper);
|
return dao.selectCount(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean absent() {
|
||||||
|
return dao.selectCount(wrapper) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean present() {
|
public boolean present() {
|
||||||
return dao.selectCount(wrapper) > 0;
|
return dao.selectCount(wrapper) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------- data grid --------------------
|
||||||
|
|
||||||
public DataGrid<T> dataGrid() {
|
public DataGrid<T> dataGrid() {
|
||||||
return this.dataGrid(Function.identity());
|
return this.dataGrid(Function.identity());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -345,6 +345,8 @@ public class CodeGenerator {
|
|||||||
new String[]{"/templates/orion-vue-views-components-table.vue.vm", "${feature}-table.vue", "vue/views/${module}/${feature}/components"},
|
new String[]{"/templates/orion-vue-views-components-table.vue.vm", "${feature}-table.vue", "vue/views/${module}/${feature}/components"},
|
||||||
// enum.types.ts 文件
|
// enum.types.ts 文件
|
||||||
new String[]{"/templates/orion-vue-views-types-enum.types.ts.vm", "enum.types.ts", "vue/views/${module}/${feature}/types"},
|
new String[]{"/templates/orion-vue-views-types-enum.types.ts.vm", "enum.types.ts", "vue/views/${module}/${feature}/types"},
|
||||||
|
// const.ts 文件
|
||||||
|
new String[]{"/templates/orion-vue-views-types-const.ts.vm", "const.ts", "vue/views/${module}/${feature}/types"},
|
||||||
// form.rules.ts 文件
|
// form.rules.ts 文件
|
||||||
new String[]{"/templates/orion-vue-views-types-form.rules.ts.vm", "form.rules.ts", "vue/views/${module}/${feature}/types"},
|
new String[]{"/templates/orion-vue-views-types-form.rules.ts.vm", "form.rules.ts", "vue/views/${module}/${feature}/types"},
|
||||||
// table.vue 文件
|
// table.vue 文件
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Supplier;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -77,10 +76,10 @@ public class AuthenticationServiceImpl implements AuthenticationService {
|
|||||||
UserStatusEnum.checkUserStatus(user.getStatus());
|
UserStatusEnum.checkUserStatus(user.getStatus());
|
||||||
// 设置上次登录时间
|
// 设置上次登录时间
|
||||||
this.setLastLoginTime(user.getId());
|
this.setLastLoginTime(user.getId());
|
||||||
// 检查用户缓存
|
// 删除用户缓存
|
||||||
this.setUserCacheIfPresent(() -> user);
|
this.deleteUserCache(user);
|
||||||
// 删除登陆失败次数缓存
|
// 重设用户缓存
|
||||||
redisTemplate.delete(UserCacheKeyDefine.LOGIN_FAILED_COUNT.format(request.getUsername()));
|
this.setUserCache(user);
|
||||||
// 获取登陆 ip
|
// 获取登陆 ip
|
||||||
String remoteAddr = Servlets.getRemoteAddr(servletRequest);
|
String remoteAddr = Servlets.getRemoteAddr(servletRequest);
|
||||||
String location = IpUtils.getLocation(remoteAddr);
|
String location = IpUtils.getLocation(remoteAddr);
|
||||||
@@ -115,9 +114,15 @@ public class AuthenticationServiceImpl implements AuthenticationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LoginUser getLoginUser(Long userId) {
|
public LoginUser getLoginUser(Long id) {
|
||||||
// 获取用户缓存信息
|
String userInfoKey = UserCacheKeyDefine.USER_INFO.format(id);
|
||||||
return this.setUserCacheIfPresent(() -> systemUserDAO.selectById(userId));
|
String userInfoCache = redisTemplate.opsForValue().get(userInfoKey);
|
||||||
|
// 缓存存在
|
||||||
|
if (userInfoCache != null) {
|
||||||
|
return JSON.parseObject(userInfoCache, LoginUser.class);
|
||||||
|
}
|
||||||
|
// 设置缓存并返回
|
||||||
|
return this.setUserCache(systemUserDAO.selectById(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -251,23 +256,28 @@ public class AuthenticationServiceImpl implements AuthenticationService {
|
|||||||
systemUserDAO.updateById(update);
|
systemUserDAO.updateById(update);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除用户缓存
|
||||||
|
*
|
||||||
|
* @param user user
|
||||||
|
*/
|
||||||
|
private void deleteUserCache(SystemUserDO user) {
|
||||||
|
// 用户信息缓存
|
||||||
|
String userInfoKey = UserCacheKeyDefine.USER_INFO.format(user.getId());
|
||||||
|
// 登陆失败次数缓存
|
||||||
|
String loginFailedCountKey = UserCacheKeyDefine.LOGIN_FAILED_COUNT.format(user.getUsername());
|
||||||
|
// 删除缓存
|
||||||
|
redisTemplate.delete(Lists.of(userInfoKey, loginFailedCountKey));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置用户缓存
|
* 设置用户缓存
|
||||||
*
|
*
|
||||||
* @param supplier supplier
|
* @param user user
|
||||||
* @return 用户缓存
|
* @return loginUser
|
||||||
*/
|
*/
|
||||||
private LoginUser setUserCacheIfPresent(Supplier<SystemUserDO> supplier) {
|
private LoginUser setUserCache(SystemUserDO user) {
|
||||||
SystemUserDO user = supplier.get();
|
|
||||||
Long id = user.getId();
|
Long id = user.getId();
|
||||||
String userInfoKey = UserCacheKeyDefine.USER_INFO.format(id);
|
|
||||||
String userInfoCache = redisTemplate.opsForValue().get(userInfoKey);
|
|
||||||
// 缓存存在
|
|
||||||
if (userInfoCache != null) {
|
|
||||||
return JSON.parseObject(userInfoCache, LoginUser.class);
|
|
||||||
}
|
|
||||||
// 设置缓存
|
|
||||||
LoginUser loginUser = SystemUserConvert.MAPPER.toLoginUser(user);
|
|
||||||
// 查询用户角色
|
// 查询用户角色
|
||||||
List<Long> roleIds = systemUserRoleDAO.selectRoleIdByUserId(id);
|
List<Long> roleIds = systemUserRoleDAO.selectRoleIdByUserId(id);
|
||||||
List<String> roleCodeList = permissionService.getRoleCache()
|
List<String> roleCodeList = permissionService.getRoleCache()
|
||||||
@@ -276,6 +286,9 @@ public class AuthenticationServiceImpl implements AuthenticationService {
|
|||||||
.filter(s -> roleIds.contains(s.getId()))
|
.filter(s -> roleIds.contains(s.getId()))
|
||||||
.map(SystemRoleDO::getCode)
|
.map(SystemRoleDO::getCode)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
// 设置用户缓存
|
||||||
|
String userInfoKey = UserCacheKeyDefine.USER_INFO.format(id);
|
||||||
|
LoginUser loginUser = SystemUserConvert.MAPPER.toLoginUser(user);
|
||||||
loginUser.setRoles(roleCodeList);
|
loginUser.setRoles(roleCodeList);
|
||||||
RedisUtils.setJson(userInfoKey, UserCacheKeyDefine.USER_INFO, loginUser);
|
RedisUtils.setJson(userInfoKey, UserCacheKeyDefine.USER_INFO, loginUser);
|
||||||
return loginUser;
|
return loginUser;
|
||||||
|
|||||||
Reference in New Issue
Block a user