refactor(system): 重构系统模块代码

- 重命名接口和服务类,统一命名规范
- 优化代码结构,提高可维护性
- 异步处理用户JWT和在线用户相关操作
- 更新MyBatis Plus相关类名和方法名
This commit is contained in:
2025-06-23 12:02:00 +08:00
parent 169df00551
commit 0783a140b3
65 changed files with 241 additions and 371 deletions
+1 -1
View File
@@ -16,7 +16,7 @@ const getters = {
fileUploadApi: state => state.api.fileUploadApi,
updateAvatarApi: state => state.api.updateAvatarApi,
qiNiuUploadApi: state => state.api.qiNiuUploadApi,
sqlApi: state => state.api.sqlApi,
druidSqlApi: state => state.api.druidSqlApi,
swaggerApi: state => state.api.swaggerApi,
websocketApi: state => state.api.websocketApi,
sidebarRouters: state => state.permission.sidebarRouters
+1 -1
View File
@@ -9,7 +9,7 @@ const api = {
// 上传文件到七牛云
qiNiuUploadApi: baseUrl + '/api/qiNiuContent',
// Sql 监控
sqlApi: baseUrl + '/druid/index.html',
druidSqlApi: baseUrl + '/druid/index.html',
// websocket
websocketApi: baseUrl + '/webSocket/{sid}',
// swagger
@@ -1,15 +1,15 @@
<template>
<elFrame :src="sqlApi" />
<elFrame :src="druidSqlApi" />
</template>
<script>
import { mapGetters } from 'vuex'
import elFrame from '@/components/Iframe/index'
export default {
name: 'Sql',
name: 'DruidSqlConsole',
components: { elFrame },
computed: {
...mapGetters([
'sqlApi'
'druidSqlApi'
])
}
}
@@ -24,8 +24,8 @@
</template>
<script>
import Config from './config'
import Send from './send'
import Config from './config.vue'
import Send from './send.vue'
export default {
name: 'Email',
components: { Config, Send },
@@ -10,8 +10,8 @@
</template>
<script>
import QiNiu from './qiniu/index'
import Local from './local/index'
import QiNiu from './qiniu/index.vue'
import Local from './local/index.vue'
export default {
name: 'Storage',
components: { QiNiu, Local },
@@ -69,7 +69,7 @@
import crudQiNiu from '@/api/tools/qiniu'
import { mapGetters } from 'vuex'
import { getToken } from '@/utils/auth'
import eForm from './form'
import eForm from './form.vue'
import CRUD, { presenter, header, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
@@ -57,7 +57,7 @@
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username" @keydown.native="keydown($event)" />
</el-form-item>
<el-form-item label="电话" prop="phone">
<el-form-item label="手机号" prop="phone">
<el-input v-model.number="form.phone" />
</el-form-item>
<el-form-item label="昵称" prop="nickName">
@@ -138,7 +138,7 @@
<el-table-column :show-overflow-tooltip="true" prop="username" label="用户名" />
<el-table-column :show-overflow-tooltip="true" prop="nickName" label="昵称" />
<el-table-column prop="gender" label="性别" />
<el-table-column :show-overflow-tooltip="true" prop="phone" width="100" label="电话" />
<el-table-column :show-overflow-tooltip="true" prop="phone" width="100" label="手机号" />
<el-table-column :show-overflow-tooltip="true" width="135" prop="email" label="邮箱" />
<el-table-column :show-overflow-tooltip="true" prop="dept" label="部门">
<template slot-scope="scope">
@@ -11,16 +11,16 @@ import lombok.Getter;
public enum SystemCaptchaBizEnum {
/* 通过手机号码重置邮箱 */
PHONE_RESET_EMAIL_CODE("10000", "phone_reset_email_code_", "email.ftl","通过手机号码重置邮箱"),
PHONE_RESET_EMAIL_CODE("10000", "phone_reset_email_code_", "email.ftl", "通过手机号码重置邮箱"),
/* 通过旧邮箱重置邮箱 */
EMAIL_RESET_EMAIL_CODE("10001", "email_reset_email_code_", "email.ftl","通过旧邮箱重置邮箱"),
EMAIL_RESET_EMAIL_CODE("10001", "email_reset_email_code_", "email.ftl", "通过旧邮箱重置邮箱"),
/* 通过手机号码重置密码 */
PHONE_RESET_PWD_CODE("10002", "phone_reset_pwd_code_", "email.ftl","通过手机号码重置密码"),
PHONE_RESET_PWD_CODE("10002", "phone_reset_pwd_code_", "email.ftl", "通过手机号码重置密码"),
/* 通过邮箱重置密码 */
EMAIL_RESET_PWD_CODE("10003", "email_reset_pwd_code_", "email.ftl","通过邮箱重置密码");
EMAIL_RESET_PWD_CODE("10003", "email_reset_pwd_code_", "email.ftl", "通过邮箱重置密码");
/**
* 业务编码
@@ -4,16 +4,16 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil;
import cn.odboy.annotation.AnonymousPostMapping;
import cn.odboy.constant.SystemConst;
import cn.odboy.core.dal.redis.system.SystemUserOnlineServiceImpl;
import cn.odboy.core.constant.LoginCodeEnum;
import cn.odboy.core.dal.redis.system.SystemRedisKey;
import cn.odboy.core.dal.model.system.SystemUserInfoVo;
import cn.odboy.core.dal.model.system.SystemUserJwtVo;
import cn.odboy.core.dal.model.system.SystemUserLoginArgs;
import cn.odboy.core.dal.redis.system.SystemRedisKey;
import cn.odboy.core.dal.redis.system.SystemUserOnlineDAO;
import cn.odboy.core.framework.permission.core.SecurityHelper;
import cn.odboy.core.framework.permission.core.handler.TokenProvider;
import cn.odboy.core.framework.permission.core.handler.UserDetailsHandler;
import cn.odboy.core.framework.properties.AppProperties;
import cn.odboy.core.dal.model.system.SystemUserJwtVo;
import cn.odboy.core.dal.model.system.SystemUserLoginArgs;
import cn.odboy.exception.BadRequestException;
import cn.odboy.redis.RedisHelper;
import cn.odboy.util.RsaEncryptUtil;
@@ -50,7 +50,7 @@ import java.util.concurrent.TimeUnit;
@Api(tags = "系统:系统授权接口")
public class SystemAuthController {
private final RedisHelper redisHelper;
private final SystemUserOnlineServiceImpl onlineUserService;
private final SystemUserOnlineDAO onlineUserService;
private final TokenProvider tokenProvider;
private final AppProperties properties;
private final PasswordEncoder passwordEncoder;
@@ -2,9 +2,9 @@ package cn.odboy.core.controller.system;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.dataobject.system.SystemDeptTb;
import cn.odboy.core.service.system.SystemDeptService;
import cn.odboy.core.dal.model.system.CreateSystemDeptArgs;
import cn.odboy.core.dal.model.system.QuerySystemDeptArgs;
import cn.odboy.core.service.system.SystemDeptService;
import cn.odboy.util.PageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -16,7 +16,10 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@RestController
@@ -2,9 +2,9 @@ package cn.odboy.core.controller.system;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.dataobject.system.SystemDictTb;
import cn.odboy.core.service.system.SystemDictService;
import cn.odboy.core.dal.model.system.CreateSystemDictArgs;
import cn.odboy.core.dal.model.system.QuerySystemDictArgs;
import cn.odboy.core.service.system.SystemDictService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -2,9 +2,9 @@ package cn.odboy.core.controller.system;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.dataobject.system.SystemDictDetailTb;
import cn.odboy.core.service.system.SystemDictDetailService;
import cn.odboy.core.dal.model.system.CreateSystemDictDetailArgs;
import cn.odboy.core.dal.model.system.QuerySystemDictDetailArgs;
import cn.odboy.core.service.system.SystemDictDetailService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -1,8 +1,8 @@
package cn.odboy.core.controller.system;
import cn.odboy.core.dal.dataobject.system.SystemEmailConfigTb;
import cn.odboy.core.service.system.SystemEmailService;
import cn.odboy.core.dal.model.system.SendSystemEmailArgs;
import cn.odboy.core.service.system.SystemEmailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@@ -2,9 +2,9 @@ package cn.odboy.core.controller.system;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.dataobject.system.SystemJobTb;
import cn.odboy.core.service.system.SystemJobService;
import cn.odboy.core.dal.model.system.CreateSystemJobArgs;
import cn.odboy.core.dal.model.system.QuerySystemJobArgs;
import cn.odboy.core.service.system.SystemJobService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -3,8 +3,8 @@ package cn.odboy.core.controller.system;
import cn.odboy.base.CsResultVo;
import cn.odboy.constant.FileTypeEnum;
import cn.odboy.core.dal.dataobject.system.SystemLocalStorageTb;
import cn.odboy.core.service.system.SystemLocalStorageService;
import cn.odboy.core.dal.model.system.QuerySystemLocalStorageArgs;
import cn.odboy.core.service.system.SystemLocalStorageService;
import cn.odboy.exception.BadRequestException;
import cn.odboy.util.FileUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -3,10 +3,10 @@ package cn.odboy.core.controller.system;
import cn.hutool.core.collection.CollectionUtil;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.dataobject.system.SystemMenuTb;
import cn.odboy.core.dal.model.system.QuerySystemMenuArgs;
import cn.odboy.core.dal.model.system.SystemMenuVo;
import cn.odboy.core.framework.permission.core.SecurityHelper;
import cn.odboy.core.service.system.SystemMenuService;
import cn.odboy.core.dal.model.system.QuerySystemMenuArgs;
import cn.odboy.exception.BadRequestException;
import cn.odboy.util.PageUtil;
import io.swagger.annotations.Api;
@@ -10,6 +10,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@@ -1,9 +1,8 @@
package cn.odboy.core.controller.system;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.redis.system.SystemUserOnlineApi;
import cn.odboy.core.dal.redis.system.SystemUserOnlineService;
import cn.odboy.core.dal.model.system.SystemUserOnlineVo;
import cn.odboy.core.dal.redis.system.SystemUserOnlineDAO;
import cn.odboy.util.DesEncryptUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -25,21 +24,20 @@ import java.util.Set;
@RequestMapping("/auth/online")
@Api(tags = "系统:在线用户管理")
public class SystemOnlineController {
private final SystemUserOnlineApi systemUserOnlineApi;
private final SystemUserOnlineService systemUserOnlineService;
private final SystemUserOnlineDAO systemUserOnlineDAO;
@ApiOperation("查询在线用户")
@GetMapping
@PreAuthorize("@el.check()")
public ResponseEntity<CsResultVo<List<SystemUserOnlineVo>>> queryOnlineUser(String username, Pageable pageable) {
return new ResponseEntity<>(systemUserOnlineApi.queryUserOnlineModelPage(username, pageable), HttpStatus.OK);
return new ResponseEntity<>(systemUserOnlineDAO.queryUserOnlineModelPage(username, pageable), HttpStatus.OK);
}
@ApiOperation("导出数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check()")
public void exportOnlineUser(HttpServletResponse response, String username) throws IOException {
systemUserOnlineService.downloadUserOnlineModelExcel(systemUserOnlineApi.queryUserOnlineModelListByUsername(username), response);
systemUserOnlineDAO.downloadUserOnlineModelExcel(systemUserOnlineDAO.queryUserOnlineModelListByUsername(username), response);
}
@ApiOperation("踢出用户")
@@ -49,7 +47,7 @@ public class SystemOnlineController {
for (String token : keys) {
// 解密Key
token = DesEncryptUtil.desDecrypt(token);
systemUserOnlineService.logoutByToken(token);
systemUserOnlineDAO.logoutByToken(token);
}
return new ResponseEntity<>(HttpStatus.OK);
}
@@ -3,9 +3,9 @@ package cn.odboy.core.controller.system;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.dataobject.system.SystemQiniuConfigTb;
import cn.odboy.core.dal.dataobject.system.SystemQiniuContentTb;
import cn.odboy.core.dal.model.system.QuerySystemQiniuArgs;
import cn.odboy.core.service.system.SystemQiniuConfigService;
import cn.odboy.core.service.system.SystemQiniuContentService;
import cn.odboy.core.dal.model.system.QuerySystemQiniuArgs;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -4,9 +4,9 @@ import cn.odboy.base.CsResultVo;
import cn.odboy.context.SpringBeanHolder;
import cn.odboy.core.dal.dataobject.system.SystemQuartzJobTb;
import cn.odboy.core.dal.dataobject.system.SystemQuartzLogTb;
import cn.odboy.core.service.system.SystemQuartzJobService;
import cn.odboy.core.dal.model.system.QuerySystemQuartzJobArgs;
import cn.odboy.core.dal.model.system.UpdateSystemQuartzJobArgs;
import cn.odboy.core.service.system.SystemQuartzJobService;
import cn.odboy.exception.BadRequestException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -16,11 +16,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collections;
@@ -3,17 +3,15 @@ package cn.odboy.core.controller.system;
import cn.hutool.core.collection.CollectionUtil;
import cn.odboy.base.CsResultVo;
import cn.odboy.base.CsSelectOptionItemVo;
import cn.odboy.core.service.system.*;
import cn.odboy.core.service.system.SystemDataService;
import cn.odboy.core.constant.system.SystemCaptchaBizEnum;
import cn.odboy.core.dal.dataobject.system.SystemDeptTb;
import cn.odboy.core.dal.dataobject.system.SystemRoleTb;
import cn.odboy.core.dal.dataobject.system.SystemUserTb;
import cn.odboy.core.dal.model.system.QuerySystemUserArgs;
import cn.odboy.core.dal.model.system.UpdateSystemUserPasswordArgs;
import cn.odboy.core.framework.permission.core.SecurityHelper;
import cn.odboy.core.framework.properties.AppProperties;
import cn.odboy.core.dal.model.system.QuerySystemUserArgs;
import cn.odboy.core.service.system.SystemDeptService;
import cn.odboy.core.service.system.*;
import cn.odboy.exception.BadRequestException;
import cn.odboy.util.PageUtil;
import cn.odboy.util.RsaEncryptUtil;
@@ -1,14 +0,0 @@
package cn.odboy.core.dal.redis.system;
import cn.odboy.core.dal.model.system.SystemUserJwtVo;
public interface SystemUserJwtApi {
/**
* 返回用户缓存
*
* @param username 用户名
* @return UserJwtVo
*/
SystemUserJwtVo queryUserJwtModelByUsername(String username);
}
@@ -1,27 +0,0 @@
package cn.odboy.core.dal.redis.system;
import cn.odboy.core.dal.model.system.SystemUserJwtVo;
import cn.odboy.redis.RedisHelper;
import cn.odboy.util.StringUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
@RequiredArgsConstructor
public class SystemUserJwtApiImpl implements SystemUserJwtApi {
@Resource
private RedisHelper redisHelper;
@Override
public SystemUserJwtVo queryUserJwtModelByUsername(String username) {
// 转小写
username = StringUtil.lowerCase(username);
if (StringUtil.isNotEmpty(username)) {
// 获取数据
return redisHelper.get(SystemRedisKey.USER_INFO + username, SystemUserJwtVo.class);
}
return null;
}
}
@@ -4,19 +4,26 @@ import cn.hutool.core.util.RandomUtil;
import cn.odboy.core.dal.model.system.SystemUserJwtVo;
import cn.odboy.redis.RedisHelper;
import cn.odboy.util.StringUtil;
import org.springframework.stereotype.Service;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 用户缓存管理
*/
@Service
public class SystemUserJwtServiceImpl implements SystemUserJwtService {
@Component
public class SystemUserJwtDAO {
@Resource
private RedisHelper redisHelper;
@Override
/**
* 添加缓存到Redis
*
* @param userName 用户名
*/
@Async
public void saveUserJwtModelByUserName(String userName, SystemUserJwtVo user) {
// 转小写
userName = StringUtil.lowerCase(userName);
@@ -27,8 +34,14 @@ public class SystemUserJwtServiceImpl implements SystemUserJwtService {
}
}
/**
* 清理用户缓存信息
* 用户信息变更时
*
* @param userName 用户名
*/
@Async
@Override
public void cleanUserJwtModelCacheByUsername(String userName) {
// 转小写
userName = StringUtil.lowerCase(userName);
@@ -37,4 +50,21 @@ public class SystemUserJwtServiceImpl implements SystemUserJwtService {
redisHelper.del(SystemRedisKey.USER_INFO + userName);
}
}
/**
* 返回用户缓存
*
* @param username 用户名
* @return UserJwtVo
*/
public SystemUserJwtVo queryUserJwtModelByUsername(String username) {
// 转小写
username = StringUtil.lowerCase(username);
if (StringUtil.isNotEmpty(username)) {
// 获取数据
return redisHelper.get(SystemRedisKey.USER_INFO + username, SystemUserJwtVo.class);
}
return null;
}
}
@@ -1,23 +0,0 @@
package cn.odboy.core.dal.redis.system;
import cn.odboy.core.dal.model.system.SystemUserJwtVo;
import org.springframework.scheduling.annotation.Async;
public interface SystemUserJwtService {
/**
* 添加缓存到Redis
*
* @param userName 用户名
*/
@Async
void saveUserJwtModelByUserName(String userName, SystemUserJwtVo user);
/**
* 清理用户缓存信息
* 用户信息变更时
*
* @param userName 用户名
*/
@Async
void cleanUserJwtModelCacheByUsername(String userName);
}
@@ -1,35 +0,0 @@
package cn.odboy.core.dal.redis.system;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.model.system.SystemUserOnlineVo;
import org.springframework.data.domain.Pageable;
import java.util.List;
public interface SystemUserOnlineApi {
/**
* 查询全部数据
*
* @param username /
* @param pageable /
* @return /
*/
CsResultVo<List<SystemUserOnlineVo>> queryUserOnlineModelPage(String username, Pageable pageable);
/**
* 查询全部数据,不分页
*
* @param username /
* @return /
*/
List<SystemUserOnlineVo> queryUserOnlineModelListByUsername(String username);
/**
* 查询用户
*
* @param key /
* @return /
*/
SystemUserOnlineVo queryUserOnlineModelByKey(String key);
}
@@ -1,47 +0,0 @@
package cn.odboy.core.dal.redis.system;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.model.system.SystemUserOnlineVo;
import cn.odboy.redis.RedisHelper;
import cn.odboy.util.PageUtil;
import cn.odboy.util.StringUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class SystemUserOnlineApiImpl implements SystemUserOnlineApi {
private final RedisHelper redisHelper;
@Override
public CsResultVo<List<SystemUserOnlineVo>> queryUserOnlineModelPage(String username, Pageable pageable) {
List<SystemUserOnlineVo> onlineUserList = queryUserOnlineModelListByUsername(username);
List<SystemUserOnlineVo> paging = PageUtil.softPaging(pageable.getPageNumber(), pageable.getPageSize(), onlineUserList);
return PageUtil.toPage(paging, onlineUserList.size());
}
@Override
public List<SystemUserOnlineVo> queryUserOnlineModelListByUsername(String username) {
String loginKey = SystemRedisKey.ONLINE_USER + (StringUtil.isBlank(username) ? "" : "*" + username);
List<String> keys = redisHelper.scan(loginKey + "*");
Collections.reverse(keys);
List<SystemUserOnlineVo> onlineUserList = new ArrayList<>();
for (String key : keys) {
onlineUserList.add(redisHelper.get(key, SystemUserOnlineVo.class));
}
onlineUserList.sort((o1, o2) -> o2.getLoginTime().compareTo(o1.getLoginTime()));
return onlineUserList;
}
@Override
public SystemUserOnlineVo queryUserOnlineModelByKey(String key) {
return redisHelper.get(key, SystemUserOnlineVo.class);
}
}
@@ -1,16 +1,15 @@
package cn.odboy.core.dal.redis.system;
import cn.odboy.core.framework.permission.core.handler.TokenProvider;
import cn.odboy.core.framework.properties.AppProperties;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.model.system.SystemUserJwtVo;
import cn.odboy.core.dal.model.system.SystemUserOnlineVo;
import cn.odboy.core.framework.permission.core.handler.TokenProvider;
import cn.odboy.core.framework.properties.AppProperties;
import cn.odboy.redis.RedisHelper;
import cn.odboy.util.BrowserUtil;
import cn.odboy.util.DesEncryptUtil;
import cn.odboy.util.FileUtil;
import cn.odboy.util.IpUtil;
import cn.odboy.util.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
@@ -22,12 +21,19 @@ import java.util.concurrent.TimeUnit;
@Slf4j
@Service
@AllArgsConstructor
public class SystemUserOnlineServiceImpl implements SystemUserOnlineService {
public class SystemUserOnlineDAO {
private final AppProperties properties;
private final TokenProvider tokenProvider;
private final RedisHelper redisHelper;
@Override
/**
* 保存在线用户信息
*
* @param userJwtVo /
* @param token /
* @param request /
*/
public void saveUserJwtModelByToken(SystemUserJwtVo userJwtVo, String token, HttpServletRequest request) {
String dept = userJwtVo.getUser().getDept().getName();
String ip = BrowserUtil.getIp(request);
@@ -53,14 +59,25 @@ public class SystemUserOnlineServiceImpl implements SystemUserOnlineService {
redisHelper.set(loginKey, userOnlineVo, properties.getJwt().getTokenValidityInSeconds(), TimeUnit.MILLISECONDS);
}
/**
* 退出登录
*
* @param token /
*/
@Override
public void logoutByToken(String token) {
String loginKey = tokenProvider.loginKey(token);
redisHelper.del(loginKey);
}
@Override
/**
* 导出
*
* @param all /
* @param response /
* @throws IOException /
*/
public void downloadUserOnlineModelExcel(List<SystemUserOnlineVo> all, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (SystemUserOnlineVo user : all) {
@@ -76,10 +93,58 @@ public class SystemUserOnlineServiceImpl implements SystemUserOnlineService {
FileUtil.downloadExcel(list, response);
}
/**
* 根据用户名强退用户
*
* @param username /
*/
@Override
public void kickOutByUsername(String username) {
String loginKey = SystemRedisKey.ONLINE_USER + username + "*";
redisHelper.scanDel(loginKey);
}
/**
* 查询全部数据
*
* @param username /
* @param pageable /
* @return /
*/
public CsResultVo<List<SystemUserOnlineVo>> queryUserOnlineModelPage(String username, Pageable pageable) {
List<SystemUserOnlineVo> onlineUserList = queryUserOnlineModelListByUsername(username);
List<SystemUserOnlineVo> paging = PageUtil.softPaging(pageable.getPageNumber(), pageable.getPageSize(), onlineUserList);
return PageUtil.toPage(paging, onlineUserList.size());
}
/**
* 查询全部数据,不分页
*
* @param username /
* @return /
*/
public List<SystemUserOnlineVo> queryUserOnlineModelListByUsername(String username) {
String loginKey = SystemRedisKey.ONLINE_USER + (StringUtil.isBlank(username) ? "" : "*" + username);
List<String> keys = redisHelper.scan(loginKey + "*");
Collections.reverse(keys);
List<SystemUserOnlineVo> onlineUserList = new ArrayList<>();
for (String key : keys) {
onlineUserList.add(redisHelper.get(key, SystemUserOnlineVo.class));
}
onlineUserList.sort((o1, o2) -> o2.getLoginTime().compareTo(o1.getLoginTime()));
return onlineUserList;
}
/**
* 查询用户
*
* @param key /
* @return /
*/
public SystemUserOnlineVo queryUserOnlineModelByKey(String key) {
return redisHelper.get(key, SystemUserOnlineVo.class);
}
}
@@ -1,45 +0,0 @@
package cn.odboy.core.dal.redis.system;
import cn.odboy.core.dal.model.system.SystemUserJwtVo;
import cn.odboy.core.dal.model.system.SystemUserOnlineVo;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public interface SystemUserOnlineService {
/**
* 保存在线用户信息
*
* @param userJwtVo /
* @param token /
* @param request /
*/
void saveUserJwtModelByToken(SystemUserJwtVo userJwtVo, String token, HttpServletRequest request);
/**
* 退出登录
*
* @param token /
*/
void logoutByToken(String token);
/**
* 导出
*
* @param all /
* @param response /
* @throws IOException /
*/
void downloadUserOnlineModelExcel(List<SystemUserOnlineVo> all, HttpServletResponse response) throws IOException;
/**
* 根据用户名强退用户
*
* @param username /
*/
void kickOutByUsername(String username);
}
@@ -3,7 +3,7 @@ package cn.odboy.core.framework.mybatisplus.config;
/**
* 动态查询 枚举
*/
public enum QueryTypeEnum {
public enum CsMpQTypeEnum {
/**
* 相等
*/
@@ -21,7 +21,7 @@ public @interface CsMpQuery {
/**
* 查询方式
*/
QueryTypeEnum type() default QueryTypeEnum.EQUAL;
CsMpQTypeEnum type() default CsMpQTypeEnum.EQUAL;
/**
* 连接查询的属性名, 如User类中的dept
@@ -16,12 +16,12 @@ import java.util.List;
*/
public class CsMpAnyQUtil {
public static <T> T selectOne(BaseMapper<T> baseMapper, Object queryParams) {
QueryWrapper<T> queryWrapper = CsMpSimpleQUtil.build(queryParams);
QueryWrapper<T> queryWrapper = CsMpQUtil.build(queryParams);
return baseMapper.selectOne(queryWrapper);
}
public static <T, M> M selectOne(BaseMapper<T> baseMapper, Object queryParams, Class<M> mapperClazz) {
QueryWrapper<T> queryWrapper = CsMpSimpleQUtil.build(queryParams);
QueryWrapper<T> queryWrapper = CsMpQUtil.build(queryParams);
T mapperTarget = baseMapper.selectOne(queryWrapper);
if (mapperTarget == null) {
return null;
@@ -30,12 +30,12 @@ public class CsMpAnyQUtil {
}
public static <T> List<T> selectList(BaseMapper<T> baseMapper, Object queryParams) {
QueryWrapper<T> queryWrapper = CsMpSimpleQUtil.build(queryParams);
QueryWrapper<T> queryWrapper = CsMpQUtil.build(queryParams);
return baseMapper.selectList(queryWrapper);
}
public static <T, M> List<M> selectList(BaseMapper<T> baseMapper, Object queryParams, Class<M> mapperClazz) {
QueryWrapper<T> queryWrapper = CsMpSimpleQUtil.build(queryParams);
QueryWrapper<T> queryWrapper = CsMpQUtil.build(queryParams);
List<T> mapperTarget = baseMapper.selectList(queryWrapper);
if (mapperTarget == null) {
return new ArrayList<>();
@@ -44,17 +44,17 @@ public class CsMpAnyQUtil {
}
public static <T> Long selectCount(BaseMapper<T> baseMapper, Object queryParams) {
QueryWrapper<T> queryWrapper = CsMpSimpleQUtil.build(queryParams);
QueryWrapper<T> queryWrapper = CsMpQUtil.build(queryParams);
return baseMapper.selectCount(queryWrapper);
}
public static <T> Page<T> selectPage(BaseMapper<T> baseMapper, Page<T> page, Object queryParams) {
QueryWrapper<T> queryWrapper = CsMpSimpleQUtil.build(queryParams);
QueryWrapper<T> queryWrapper = CsMpQUtil.build(queryParams);
return baseMapper.selectPage(page, queryWrapper);
}
public static <T, M> Page<M> selectPage(BaseMapper<T> baseMapper, Page<T> page, Object queryParams, Class<M> mapperClazz) {
QueryWrapper<T> queryWrapper = CsMpSimpleQUtil.build(queryParams);
QueryWrapper<T> queryWrapper = CsMpQUtil.build(queryParams);
Page<T> tPage = baseMapper.selectPage(page, queryWrapper);
Page<M> mapperTarget = new Page<>();
mapperTarget.setRecords(BeanUtil.copyToList(tPage.getRecords(), mapperClazz));
@@ -23,7 +23,7 @@ import java.util.stream.Collectors;
* 查询条件创建工具
*/
@Slf4j
public class CsMpSimpleQUtil {
public class CsMpQUtil {
public static <R, Q> QueryWrapper<R> build(Q query) {
QueryWrapper<R> queryWrapper = new QueryWrapper<>();
if (query == null) {
@@ -18,7 +18,7 @@ package cn.odboy.core.framework.mybatisplus.core.interfaces;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.framework.mybatisplus.core.CsMpSimpleQUtil;
import cn.odboy.core.framework.mybatisplus.core.CsMpQUtil;
import cn.odboy.exception.BadRequestException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -146,7 +146,7 @@ public class CsMpServiceImpl<M extends CsMpMapper<T>, T> extends ServiceImpl<M,
* @param criteria 动态条件
*/
public <Q> List<T> queryClazzListByArgs(Q criteria) {
QueryWrapper<T> predicate = CsMpSimpleQUtil.build(criteria);
QueryWrapper<T> predicate = CsMpQUtil.build(criteria);
return baseMapper.selectList(predicate);
}
@@ -169,7 +169,7 @@ public class CsMpServiceImpl<M extends CsMpMapper<T>, T> extends ServiceImpl<M,
* @param targetClazz 目标类型
*/
public <G, Q> List<G> queryFeatureClazzListByArgs(Q criteria, Class<G> targetClazz) {
QueryWrapper<T> predicate = CsMpSimpleQUtil.build(criteria);
QueryWrapper<T> predicate = CsMpQUtil.build(criteria);
List<T> data = baseMapper.selectList(predicate);
return BeanUtil.copyToList(data, targetClazz);
}
@@ -217,13 +217,13 @@ public class CsMpServiceImpl<M extends CsMpMapper<T>, T> extends ServiceImpl<M,
}
public <G, Q> CsResultVo<List<G>> queryFeatureClazzPageByArgs(Q criteria, IPage<T> pageable, Class<G> targetClazz) {
QueryWrapper<T> wrapper = CsMpSimpleQUtil.build(criteria);
QueryWrapper<T> wrapper = CsMpQUtil.build(criteria);
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new CsResultVo<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), originPageData.getTotal());
}
public <Q> CsResultVo<List<T>> queryClazzPageByArgs(Q criteria, IPage<T> pageable) {
QueryWrapper<T> wrapper = CsMpSimpleQUtil.build(criteria);
QueryWrapper<T> wrapper = CsMpQUtil.build(criteria);
IPage<T> originPageData = baseMapper.selectPage(pageable, wrapper);
return new CsResultVo<>(originPageData.getRecords(), originPageData.getTotal());
}
@@ -1,7 +1,7 @@
package cn.odboy.core.framework.permission.config;
import cn.odboy.constant.RequestMethodEnum;
import cn.odboy.core.dal.redis.system.SystemUserOnlineApi;
import cn.odboy.core.dal.redis.system.SystemUserOnlineDAO;
import cn.odboy.core.framework.permission.core.handler.JwtAccessDeniedHandler;
import cn.odboy.core.framework.permission.core.handler.JwtAuthenticationEntryPoint;
import cn.odboy.core.framework.permission.core.handler.TokenProvider;
@@ -34,7 +34,7 @@ public class SpringSecurityConfig {
private final JwtAuthenticationEntryPoint authenticationErrorHandler;
private final JwtAccessDeniedHandler jwtAccessDeniedHandler;
private final ApplicationContext applicationContext;
private final SystemUserOnlineApi systemUserOnlineApi;
private final SystemUserOnlineDAO systemUserOnlineDAO;
@Bean
public GrantedAuthorityDefaults grantedAuthorityDefaults() {
@@ -112,6 +112,6 @@ public class SpringSecurityConfig {
}
private TokenConfigurer securityConfigurerAdapter() {
return new TokenConfigurer(tokenProvider, systemUserOnlineApi);
return new TokenConfigurer(tokenProvider, systemUserOnlineDAO);
}
}
@@ -1,6 +1,6 @@
package cn.odboy.core.framework.permission.config;
import cn.odboy.core.dal.redis.system.SystemUserOnlineApi;
import cn.odboy.core.dal.redis.system.SystemUserOnlineDAO;
import cn.odboy.core.framework.permission.core.handler.TokenFilter;
import cn.odboy.core.framework.permission.core.handler.TokenProvider;
import lombok.RequiredArgsConstructor;
@@ -12,11 +12,11 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
@RequiredArgsConstructor
public class TokenConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {
private final TokenProvider tokenProvider;
private final SystemUserOnlineApi systemUserOnlineApi;
private final SystemUserOnlineDAO systemUserOnlineDAO;
@Override
public void configure(HttpSecurity http) {
TokenFilter customFilter = new TokenFilter(tokenProvider, systemUserOnlineApi);
TokenFilter customFilter = new TokenFilter(tokenProvider, systemUserOnlineDAO);
http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
}
}
@@ -2,8 +2,8 @@ package cn.odboy.core.framework.permission.core.handler;
import cn.hutool.core.util.StrUtil;
import cn.odboy.constant.SystemConst;
import cn.odboy.core.dal.redis.system.SystemUserOnlineApi;
import cn.odboy.core.dal.model.system.SystemUserOnlineVo;
import cn.odboy.core.dal.redis.system.SystemUserOnlineDAO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -20,14 +20,14 @@ import java.io.IOException;
@Slf4j
public class TokenFilter extends GenericFilterBean {
private final TokenProvider tokenProvider;
private final SystemUserOnlineApi systemUserOnlineApi;
private final SystemUserOnlineDAO systemUserOnlineDAO;
/**
* @param tokenProvider Token
* @param systemUserOnlineApi 用户在线
* @param systemUserOnlineDAO 用户在线
*/
public TokenFilter(TokenProvider tokenProvider, SystemUserOnlineApi systemUserOnlineApi) {
this.systemUserOnlineApi = systemUserOnlineApi;
public TokenFilter(TokenProvider tokenProvider, SystemUserOnlineDAO systemUserOnlineDAO) {
this.systemUserOnlineDAO = systemUserOnlineDAO;
this.tokenProvider = tokenProvider;
}
@@ -39,7 +39,7 @@ public class TokenFilter extends GenericFilterBean {
if (StrUtil.isNotBlank(token)) {
// 获取用户Token的Key
String loginKey = tokenProvider.loginKey(token);
SystemUserOnlineVo userOnlineVo = systemUserOnlineApi.queryUserOnlineModelByKey(loginKey);
SystemUserOnlineVo userOnlineVo = systemUserOnlineDAO.queryUserOnlineModelByKey(loginKey);
// 判断用户在线信息是否为空
if (userOnlineVo != null) {
// Token 续期判断
@@ -1,10 +1,9 @@
package cn.odboy.core.framework.permission.core.handler;
import cn.odboy.core.dal.dataobject.system.SystemUserTb;
import cn.odboy.core.dal.model.system.SystemRoleCodeVo;
import cn.odboy.core.dal.model.system.SystemUserJwtVo;
import cn.odboy.core.dal.redis.system.SystemUserJwtApi;
import cn.odboy.core.dal.redis.system.SystemUserJwtService;
import cn.odboy.core.dal.dataobject.system.SystemUserTb;
import cn.odboy.core.dal.redis.system.SystemUserJwtDAO;
import cn.odboy.core.service.system.SystemDataService;
import cn.odboy.core.service.system.SystemRoleService;
import cn.odboy.core.service.system.SystemUserService;
@@ -23,12 +22,11 @@ public class UserDetailsHandler implements UserDetailsService {
private final SystemRoleService systemRoleService;
private final SystemUserService systemUserService;
private final SystemDataService systemDataService;
private final SystemUserJwtService systemUserJwtService;
private final SystemUserJwtApi systemUserJwtApi;
private final SystemUserJwtDAO systemUserJwtDAO;
@Override
public SystemUserJwtVo loadUserByUsername(String username) {
SystemUserJwtVo userJwtVo = systemUserJwtApi.queryUserJwtModelByUsername(username);
SystemUserJwtVo userJwtVo = systemUserJwtDAO.queryUserJwtModelByUsername(username);
if (userJwtVo == null) {
SystemUserTb user = systemUserService.queryUserByUsername(username);
if (user == null) {
@@ -42,7 +40,7 @@ public class UserDetailsHandler implements UserDetailsService {
// 初始化JwtUserDto
userJwtVo = new SystemUserJwtVo(user, systemDataService.queryDeptIdListByArgs(user), authorities);
// 添加缓存数据
systemUserJwtService.saveUserJwtModelByUserName(username, userJwtVo);
systemUserJwtDAO.saveUserJwtModelByUserName(username, userJwtVo);
}
}
return userJwtVo;
@@ -12,6 +12,7 @@ import java.awt.*;
/**
* 验证码配置
*
* @author odboy
*/
@Getter
@@ -5,6 +5,7 @@ import lombok.Setter;
/**
* 登录配置
*
* @author odboy
*/
@Getter
@@ -8,10 +8,10 @@ import cn.hutool.extra.template.TemplateUtil;
import cn.odboy.context.SpringBeanHolder;
import cn.odboy.core.dal.dataobject.system.SystemQuartzJobTb;
import cn.odboy.core.dal.dataobject.system.SystemQuartzLogTb;
import cn.odboy.core.dal.mysql.system.SystemQuartzLogMapper;
import cn.odboy.core.service.system.SystemQuartzJobService;
import cn.odboy.core.service.system.SystemEmailService;
import cn.odboy.core.dal.model.system.SendSystemEmailArgs;
import cn.odboy.core.dal.mysql.system.SystemQuartzLogMapper;
import cn.odboy.core.service.system.SystemEmailService;
import cn.odboy.core.service.system.SystemQuartzJobService;
import cn.odboy.redis.RedisHelper;
import cn.odboy.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
@@ -5,14 +5,10 @@ import cn.odboy.core.constant.system.SystemDataScopeEnum;
import cn.odboy.core.dal.dataobject.system.SystemDeptTb;
import cn.odboy.core.dal.dataobject.system.SystemRoleTb;
import cn.odboy.core.dal.dataobject.system.SystemUserTb;
import cn.odboy.core.dal.redis.system.SystemRedisKey;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.*;
/**
* 数据权限服务实现
@@ -42,6 +42,7 @@ public interface SystemDeptService extends IService<SystemDeptTb> {
* @throws IOException /
*/
void downloadDeptExcel(List<SystemDeptTb> depts, HttpServletResponse response) throws IOException;
/**
* 查询所有数据
*
@@ -21,16 +21,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -6,6 +6,7 @@ import cn.odboy.core.dal.model.system.CreateSystemDictDetailArgs;
import cn.odboy.core.dal.model.system.QuerySystemDictDetailArgs;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -31,6 +32,7 @@ public interface SystemDictDetailService extends IService<SystemDictDetailTb> {
* @param id /
*/
void removeDictDetailById(Long id);
/**
* 分页查询
*
@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@@ -3,14 +3,12 @@ package cn.odboy.core.service.system;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.model.system.QuerySystemDictArgs;
import cn.odboy.core.dal.redis.system.SystemRedisKey;
import cn.odboy.core.dal.dataobject.system.SystemDictDetailTb;
import cn.odboy.core.dal.dataobject.system.SystemDictTb;
import cn.odboy.core.dal.model.system.CreateSystemDictArgs;
import cn.odboy.core.dal.model.system.QuerySystemDictArgs;
import cn.odboy.core.dal.mysql.system.SystemDictDetailMapper;
import cn.odboy.core.dal.mysql.system.SystemDictMapper;
import cn.odboy.core.dal.model.system.CreateSystemDictArgs;
import cn.odboy.redis.RedisHelper;
import cn.odboy.util.FileUtil;
import cn.odboy.util.PageUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -17,6 +17,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collections;
@Service
@@ -43,6 +43,7 @@ public interface SystemJobService extends IService<SystemJobTb> {
* @throws IOException /
*/
void downloadJobExcel(List<SystemJobTb> jobs, HttpServletResponse response) throws IOException;
/**
* 分页查询
*
@@ -8,7 +8,6 @@ import cn.odboy.core.dal.model.system.QuerySystemJobArgs;
import cn.odboy.core.dal.mysql.system.SystemJobMapper;
import cn.odboy.core.dal.mysql.system.SystemUserMapper;
import cn.odboy.exception.BadRequestException;
import cn.odboy.exception.EntityExistException;
import cn.odboy.util.FileUtil;
import cn.odboy.util.PageUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -16,13 +15,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
@Service
@RequiredArgsConstructor
@@ -35,7 +31,7 @@ public class SystemJobServiceImpl extends ServiceImpl<SystemJobMapper, SystemJob
public void saveJob(CreateSystemJobArgs resources) {
SystemJobTb job = systemJobMapper.getJobByName(resources.getName());
if (job != null) {
throw new EntityExistException(SystemJobTb.class, "name", resources.getName());
throw new BadRequestException("职位名称已存在");
}
save(BeanUtil.copyProperties(resources, SystemJobTb.class));
}
@@ -46,7 +42,7 @@ public class SystemJobServiceImpl extends ServiceImpl<SystemJobMapper, SystemJob
SystemJobTb job = getById(resources.getId());
SystemJobTb old = systemJobMapper.getJobByName(resources.getName());
if (old != null && !old.getId().equals(resources.getId())) {
throw new EntityExistException(SystemJobTb.class, "name", resources.getName());
throw new BadRequestException("职位名称已存在");
}
resources.setId(job.getId());
saveOrUpdate(resources);
@@ -13,7 +13,6 @@ import cn.odboy.core.dal.mysql.system.SystemMenuMapper;
import cn.odboy.core.dal.mysql.system.SystemRoleMenuMapper;
import cn.odboy.core.dal.mysql.system.SystemUserMapper;
import cn.odboy.exception.BadRequestException;
import cn.odboy.exception.EntityExistException;
import cn.odboy.util.ClassUtil;
import cn.odboy.util.FileUtil;
import cn.odboy.util.StringUtil;
@@ -21,16 +20,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
@@ -50,11 +44,11 @@ public class SystemMenuServiceImpl extends ServiceImpl<SystemMenuMapper, SystemM
@Transactional(rollbackFor = Exception.class)
public void saveMenu(SystemMenuTb resources) {
if (systemMenuMapper.getMenuByTitle(resources.getTitle()) != null) {
throw new EntityExistException(SystemMenuTb.class, "title", resources.getTitle());
throw new BadRequestException("菜单标题已存在");
}
if (StringUtil.isNotBlank(resources.getComponentName())) {
if (systemMenuMapper.getMenuByComponentName(resources.getComponentName()) != null) {
throw new EntityExistException(SystemMenuTb.class, "componentName", resources.getComponentName());
throw new BadRequestException("菜单组件名称已存在");
}
}
if (Long.valueOf(0L).equals(resources.getPid())) {
@@ -87,7 +81,7 @@ public class SystemMenuServiceImpl extends ServiceImpl<SystemMenuMapper, SystemM
SystemMenuTb menu1 = systemMenuMapper.getMenuByTitle(resources.getTitle());
if (menu1 != null && !menu1.getId().equals(menu.getId())) {
throw new EntityExistException(SystemMenuTb.class, "title", resources.getTitle());
throw new BadRequestException("菜单标题已存在");
}
if (resources.getPid().equals(0L)) {
@@ -101,7 +95,7 @@ public class SystemMenuServiceImpl extends ServiceImpl<SystemMenuMapper, SystemM
if (StringUtil.isNotBlank(resources.getComponentName())) {
menu1 = systemMenuMapper.getMenuByComponentName(resources.getComponentName());
if (menu1 != null && !menu1.getId().equals(menu.getId())) {
throw new EntityExistException(SystemMenuTb.class, "componentName", resources.getComponentName());
throw new BadRequestException("菜单组件名称已存在");
}
}
menu.setTitle(resources.getTitle());
@@ -116,6 +110,9 @@ public class SystemMenuServiceImpl extends ServiceImpl<SystemMenuMapper, SystemM
menu.setComponentName(resources.getComponentName());
menu.setPermission(resources.getPermission());
menu.setType(resources.getType());
// auto fill
menu.setUpdateBy(null);
menu.setUpdateTime(null);
saveOrUpdate(menu);
// 计算父级菜单节点数目
updateSubCnt(oldPid);
@@ -6,9 +6,6 @@ import cn.odboy.core.dal.mysql.system.SystemQiniuConfigMapper;
import cn.odboy.exception.BadRequestException;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -37,7 +34,6 @@ public class SystemQiniuConfigServiceImpl extends ServiceImpl<SystemQiniuConfigM
}
@Override
public SystemQiniuConfigTb queryQiniuConfig() {
SystemQiniuConfigTb qiniuConfig = systemQiniuConfigMapper.selectById(1L);
@@ -56,6 +56,7 @@ public interface SystemQiniuContentService extends IService<SystemQiniuContentTb
* @param id 文件id
*/
void removeFileById(Long id);
/**
* 分页查询
*
@@ -22,7 +22,6 @@ import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@@ -7,10 +7,10 @@ import cn.odboy.base.CsResultVo;
import cn.odboy.core.dal.dataobject.system.SystemQuartzJobTb;
import cn.odboy.core.dal.dataobject.system.SystemQuartzLogTb;
import cn.odboy.core.dal.model.system.QuerySystemQuartzJobArgs;
import cn.odboy.core.dal.model.system.UpdateSystemQuartzJobArgs;
import cn.odboy.core.dal.mysql.system.SystemQuartzJobMapper;
import cn.odboy.core.dal.mysql.system.SystemQuartzLogMapper;
import cn.odboy.core.framework.quartz.core.QuartzManage;
import cn.odboy.core.dal.model.system.UpdateSystemQuartzJobArgs;
import cn.odboy.exception.BadRequestException;
import cn.odboy.redis.RedisHelper;
import cn.odboy.util.FileUtil;
@@ -55,6 +55,7 @@ public interface SystemRoleService extends IService<SystemRoleTb> {
* @throws IOException /
*/
void downloadRoleExcel(List<SystemRoleTb> roles, HttpServletResponse response) throws IOException;
/**
* 查询全部数据
*
@@ -14,9 +14,7 @@ import cn.odboy.core.dal.mysql.system.SystemRoleDeptMapper;
import cn.odboy.core.dal.mysql.system.SystemRoleMapper;
import cn.odboy.core.dal.mysql.system.SystemRoleMenuMapper;
import cn.odboy.core.dal.mysql.system.SystemUserMapper;
import cn.odboy.core.dal.redis.system.SystemUserJwtService;
import cn.odboy.exception.BadRequestException;
import cn.odboy.exception.EntityExistException;
import cn.odboy.util.FileUtil;
import cn.odboy.util.PageUtil;
import cn.odboy.util.StringUtil;
@@ -25,15 +23,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -43,13 +36,12 @@ public class SystemRoleServiceImpl extends ServiceImpl<SystemRoleMapper, SystemR
private final SystemRoleDeptMapper systemRoleDeptMapper;
private final SystemRoleMenuMapper systemRoleMenuMapper;
private final SystemUserMapper systemUserMapper;
private final SystemUserJwtService systemUserJwtService;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveRole(CreateSystemRoleArgs resources) {
if (systemRoleMapper.getRoleByName(resources.getName()) != null) {
throw new EntityExistException(SystemRoleTb.class, "name", resources.getName());
throw new BadRequestException("角色名称已存在");
}
save(BeanUtil.copyProperties(resources, SystemRoleTb.class));
// 判断是否有部门数据,若有,则需创建关联
@@ -64,7 +56,7 @@ public class SystemRoleServiceImpl extends ServiceImpl<SystemRoleMapper, SystemR
SystemRoleTb role = getById(resources.getId());
SystemRoleTb role1 = systemRoleMapper.getRoleByName(resources.getName());
if (role1 != null && !role1.getId().equals(role.getId())) {
throw new EntityExistException(SystemRoleTb.class, "name", resources.getName());
throw new BadRequestException("角色名称已存在");
}
role.setName(resources.getName());
role.setDescription(resources.getDescription());
@@ -8,13 +8,11 @@ import cn.odboy.core.dal.model.system.QuerySystemUserArgs;
import cn.odboy.core.dal.mysql.system.SystemUserJobMapper;
import cn.odboy.core.dal.mysql.system.SystemUserMapper;
import cn.odboy.core.dal.mysql.system.SystemUserRoleMapper;
import cn.odboy.core.dal.redis.system.SystemRedisKey;
import cn.odboy.core.dal.redis.system.SystemUserJwtService;
import cn.odboy.core.dal.redis.system.SystemUserOnlineService;
import cn.odboy.core.dal.redis.system.SystemUserJwtDAO;
import cn.odboy.core.dal.redis.system.SystemUserOnlineDAO;
import cn.odboy.core.framework.permission.core.SecurityHelper;
import cn.odboy.core.framework.properties.AppProperties;
import cn.odboy.exception.BadRequestException;
import cn.odboy.exception.EntityExistException;
import cn.odboy.util.FileUtil;
import cn.odboy.util.PageUtil;
import cn.odboy.util.StringUtil;
@@ -24,18 +22,12 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -45,21 +37,21 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU
private final SystemUserJobMapper systemUserJobMapper;
private final SystemUserRoleMapper systemUserRoleMapper;
private final AppProperties properties;
private final SystemUserJwtService systemUserJwtService;
private final SystemUserOnlineService systemUserOnlineService;
private final SystemUserJwtDAO systemUserJwtDAO;
private final SystemUserOnlineDAO systemUserOnlineDAO;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveUser(SystemUserTb resources) {
resources.setDeptId(resources.getDept().getId());
if (systemUserMapper.getUserByUsername(resources.getUsername()) != null) {
throw new EntityExistException(SystemUserTb.class, "username", resources.getUsername());
throw new BadRequestException("用户名已存在");
}
if (systemUserMapper.getUserByEmail(resources.getEmail()) != null) {
throw new EntityExistException(SystemUserTb.class, "email", resources.getEmail());
throw new BadRequestException("邮箱已存在");
}
if (systemUserMapper.getUserByPhone(resources.getPhone()) != null) {
throw new EntityExistException(SystemUserTb.class, "phone", resources.getPhone());
throw new BadRequestException("手机号已存在");
}
save(resources);
// 保存用户岗位
@@ -76,17 +68,17 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU
SystemUserTb user2 = systemUserMapper.getUserByEmail(resources.getEmail());
SystemUserTb user3 = systemUserMapper.getUserByPhone(resources.getPhone());
if (user1 != null && !user.getId().equals(user1.getId())) {
throw new EntityExistException(SystemUserTb.class, "username", resources.getUsername());
throw new BadRequestException("用户名已存在");
}
if (user2 != null && !user.getId().equals(user2.getId())) {
throw new EntityExistException(SystemUserTb.class, "email", resources.getEmail());
throw new BadRequestException("邮箱已存在");
}
if (user3 != null && !user.getId().equals(user3.getId())) {
throw new EntityExistException(SystemUserTb.class, "phone", resources.getPhone());
throw new BadRequestException("手机号已存在");
}
// 如果用户被禁用,则清除用户登录信息
if (!resources.getEnabled()) {
systemUserOnlineService.kickOutByUsername(resources.getUsername());
systemUserOnlineDAO.kickOutByUsername(resources.getUsername());
}
user.setDeptId(resources.getDept().getId());
user.setUsername(resources.getUsername());
@@ -115,7 +107,7 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU
SystemUserTb user = getById(resources.getId());
SystemUserTb user1 = systemUserMapper.getUserByPhone(resources.getPhone());
if (user1 != null && !user.getId().equals(user1.getId())) {
throw new EntityExistException(SystemUserTb.class, "phone", resources.getPhone());
throw new BadRequestException("手机号已存在");
}
user.setNickName(resources.getNickName());
user.setPhone(resources.getPhone());
@@ -155,7 +147,7 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU
// 清除缓存
flushLoginCacheInfo(user.getUsername());
// 强制退出
systemUserOnlineService.kickOutByUsername(user.getUsername());
systemUserOnlineDAO.kickOutByUsername(user.getUsername());
});
// 重置密码
systemUserMapper.updatePasswordByUserIds(password, ids);
@@ -221,7 +213,7 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU
* @param username /
*/
private void flushLoginCacheInfo(String username) {
systemUserJwtService.cleanUserJwtModelCacheByUsername(username);
systemUserJwtDAO.cleanUserJwtModelCacheByUsername(username);
}
@Override