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