优化:优化模型类命名(为数据模型类添加 DO 后缀),并优化所有模型相关变量命名

This commit is contained in:
Charles7c 2023-01-30 21:00:30 +08:00
parent d7851bc811
commit 3075038067
27 changed files with 213 additions and 214 deletions

View File

@ -213,6 +213,7 @@ continew-admin # 全局通用项目配置及依赖版本管理
│ └─ cnadmin
│ └─ common
│ ├─ annotation # 公共注解
│ ├─ base # 公共基类
│ ├─ config # 公共配置
│ │ ├─ jackson # Jackson 配置
│ │ ├─ mybatis # MyBatis Plus 配置
@ -224,7 +225,6 @@ continew-admin # 全局通用项目配置及依赖版本管理
│ ├─ handler # 公共处理器
│ ├─ model # 公共模型
│ │ ├─ dto # 公共 DTOData Transfer Object
│ │ ├─ entity # 公共实体对象
│ │ ├─ query # 公共查询条件
│ │ ├─ request # 公共请求对象
│ │ └─ vo # 公共 VOView Object

View File

@ -29,7 +29,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.charles7c.cnadmin.common.model.query.PageQuery;
import top.charles7c.cnadmin.common.model.vo.PageInfo;
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
import top.charles7c.cnadmin.common.model.vo.R;
/**
@ -67,9 +67,9 @@ public abstract class BaseController<S extends BaseService<V, D, Q, C, U>, V, D,
*/
@Operation(summary = "分页查询列表")
@GetMapping
protected R<PageInfo<V>> page(@Validated Q query, @Validated PageQuery pageQuery) {
PageInfo<V> pageInfo = baseService.page(query, pageQuery);
return R.ok(pageInfo);
protected R<PageDataVO<V>> page(@Validated Q query, @Validated PageQuery pageQuery) {
PageDataVO<V> pageDataVO = baseService.page(query, pageQuery);
return R.ok(pageDataVO);
}
/**

View File

@ -20,7 +20,7 @@ import java.util.Collections;
import java.util.List;
import top.charles7c.cnadmin.common.model.query.PageQuery;
import top.charles7c.cnadmin.common.model.vo.PageInfo;
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
/**
* 业务接口基类
@ -49,8 +49,8 @@ public interface BaseService<V, D, Q, C, U> {
* 分页查询条件
* @return 分页列表信息
*/
default PageInfo<V> page(Q query, PageQuery pageQuery) {
return new PageInfo<>();
default PageDataVO<V> page(Q query, PageQuery pageQuery) {
return new PageDataVO<>();
}
/**

View File

@ -29,7 +29,7 @@ import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
import cn.hutool.core.bean.BeanUtil;
import top.charles7c.cnadmin.common.model.query.PageQuery;
import top.charles7c.cnadmin.common.model.vo.PageInfo;
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
import top.charles7c.cnadmin.common.util.helper.QueryHelper;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
@ -53,10 +53,10 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T, V, D, Q, C, U>
protected Class<D> detailVoClass = currentDetailVoClass();
@Override
public PageInfo<V> page(Q query, PageQuery pageQuery) {
public PageDataVO<V> page(Q query, PageQuery pageQuery) {
QueryWrapper<T> queryWrapper = QueryHelper.build(query);
IPage<T> page = baseMapper.selectPage(pageQuery.toPage(), queryWrapper);
return PageInfo.build(page, voClass);
return PageDataVO.build(page, voClass);
}
@Override

View File

@ -40,7 +40,7 @@ import cn.hutool.core.collection.CollUtil;
@Data
@Accessors(chain = true)
@Schema(description = "分页信息")
public class PageInfo<V> {
public class PageDataVO<V> {
/**
* 列表数据
@ -52,7 +52,7 @@ public class PageInfo<V> {
* 总记录数
*/
@Schema(description = "总记录数")
private long total;
private Long total;
/**
* 基于 MyBatis Plus 分页数据构建分页信息并将源数据转换为指定类型数据
@ -67,14 +67,14 @@ public class PageInfo<V> {
* 目标列表数据类型
* @return 分页信息
*/
public static <T, V> PageInfo<V> build(IPage<T> page, Class<V> targetClass) {
public static <T, V> PageDataVO<V> build(IPage<T> page, Class<V> targetClass) {
if (page == null) {
return null;
}
PageInfo<V> pageInfo = new PageInfo<>();
pageInfo.setList(BeanUtil.copyToList(page.getRecords(), targetClass));
pageInfo.setTotal(page.getTotal());
return pageInfo;
PageDataVO<V> pageDataVO = new PageDataVO<>();
pageDataVO.setList(BeanUtil.copyToList(page.getRecords(), targetClass));
pageDataVO.setTotal(page.getTotal());
return pageDataVO;
}
/**
@ -86,14 +86,14 @@ public class PageInfo<V> {
* 列表数据类型
* @return 分页信息
*/
public static <V> PageInfo<V> build(IPage<V> page) {
public static <V> PageDataVO<V> build(IPage<V> page) {
if (page == null) {
return null;
}
PageInfo<V> pageInfo = new PageInfo<>();
pageInfo.setList(page.getRecords());
pageInfo.setTotal(pageInfo.getTotal());
return pageInfo;
PageDataVO<V> pageDataVO = new PageDataVO<>();
pageDataVO.setList(page.getRecords());
pageDataVO.setTotal(page.getTotal());
return pageDataVO;
}
/**
@ -109,23 +109,23 @@ public class PageInfo<V> {
* 列表数据类型
* @return 分页信息
*/
public static <V> PageInfo<V> build(int page, int size, List<V> list) {
PageInfo<V> pageInfo = new PageInfo<>();
public static <V> PageDataVO<V> build(int page, int size, List<V> list) {
PageDataVO<V> pageDataVO = new PageDataVO<>();
if (CollUtil.isEmpty(list)) {
return pageInfo;
return pageDataVO;
}
pageInfo.setTotal(list.size());
pageDataVO.setTotal((long)list.size());
// 对列表数据进行分页
int fromIndex = (page - 1) * size;
int toIndex = page * size + size;
if (fromIndex > list.size()) {
pageInfo.setList(new ArrayList<>());
pageDataVO.setList(new ArrayList<>());
} else if (toIndex >= list.size()) {
pageInfo.setList(list.subList(fromIndex, list.size()));
pageDataVO.setList(list.subList(fromIndex, list.size()));
} else {
pageInfo.setList(list.subList(fromIndex, toIndex));
pageDataVO.setList(list.subList(fromIndex, toIndex));
}
return pageInfo;
return pageDataVO;
}
}

View File

@ -53,7 +53,7 @@ import top.charles7c.cnadmin.common.util.holder.LogContextHolder;
import top.charles7c.cnadmin.monitor.annotation.Log;
import top.charles7c.cnadmin.monitor.config.properties.LogProperties;
import top.charles7c.cnadmin.monitor.enums.LogStatusEnum;
import top.charles7c.cnadmin.monitor.model.entity.SysLog;
import top.charles7c.cnadmin.monitor.model.entity.LogDO;
/**
* 系统日志拦截器
@ -83,20 +83,20 @@ public class LogInterceptor implements HandlerInterceptor {
public void afterCompletion(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
@NonNull Object handler, Exception e) {
// 记录请求耗时及异常信息
SysLog sysLog = this.logElapsedTimeAndException();
if (sysLog == null) {
LogDO logDO = this.logElapsedTimeAndException();
if (logDO == null) {
return;
}
// 记录日志描述
this.logDescription(sysLog, handler);
this.logDescription(logDO, handler);
// 记录请求信息
this.logRequest(sysLog, request);
this.logRequest(logDO, request);
// 记录响应信息
this.logResponse(sysLog, response);
this.logResponse(logDO, response);
// 保存系统日志
SpringUtil.getApplicationContext().publishEvent(sysLog);
SpringUtil.getApplicationContext().publishEvent(logDO);
}
/**
@ -114,28 +114,28 @@ public class LogInterceptor implements HandlerInterceptor {
*
* @return 系统日志信息
*/
private SysLog logElapsedTimeAndException() {
private LogDO logElapsedTimeAndException() {
LogContext logContext = LogContextHolder.get();
if (logContext != null) {
LogContextHolder.remove();
SysLog sysLog = new SysLog();
sysLog.setCreateTime(logContext.getCreateTime());
sysLog.setElapsedTime(System.currentTimeMillis() - LocalDateTimeUtil.toEpochMilli(sysLog.getCreateTime()));
sysLog.setStatus(LogStatusEnum.SUCCESS);
LogDO logDO = new LogDO();
logDO.setCreateTime(logContext.getCreateTime());
logDO.setElapsedTime(System.currentTimeMillis() - LocalDateTimeUtil.toEpochMilli(logDO.getCreateTime()));
logDO.setStatus(LogStatusEnum.SUCCESS);
// 记录错误信息非未知异常不记录异常详情只记录错误信息
String errorMsg = logContext.getErrorMsg();
if (StrUtil.isNotBlank(errorMsg)) {
sysLog.setStatus(LogStatusEnum.FAILURE);
sysLog.setErrorMsg(errorMsg);
logDO.setStatus(LogStatusEnum.FAILURE);
logDO.setErrorMsg(errorMsg);
}
// 记录异常详情
Exception exception = logContext.getException();
if (exception != null) {
sysLog.setStatus(LogStatusEnum.FAILURE);
sysLog.setExceptionDetail(ExceptionUtil.stacktraceToString(exception, -1));
logDO.setStatus(LogStatusEnum.FAILURE);
logDO.setExceptionDetail(ExceptionUtil.stacktraceToString(exception, -1));
}
return sysLog;
return logDO;
}
return null;
}
@ -143,69 +143,69 @@ public class LogInterceptor implements HandlerInterceptor {
/**
* 记录日志描述
*
* @param sysLog
* @param logDO
* 系统日志信息
* @param handler
* 处理器
*/
private void logDescription(SysLog sysLog, Object handler) {
private void logDescription(LogDO logDO, Object handler) {
HandlerMethod handlerMethod = (HandlerMethod)handler;
Operation methodOperation = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Operation.class);
Log methodLog = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Log.class);
if (methodOperation != null) {
sysLog.setDescription(
logDO.setDescription(
StrUtil.isNotBlank(methodOperation.summary()) ? methodOperation.summary() : "请在该接口方法上指定日志描述");
}
// 例如@Log("获取验证码") -> 获取验证码
if (methodLog != null && StrUtil.isNotBlank(methodLog.value())) {
sysLog.setDescription(methodLog.value());
logDO.setDescription(methodLog.value());
}
}
/**
* 记录请求信息
*
* @param sysLog
* @param logDO
* 系统日志信息
* @param request
* 请求对象
*/
private void logRequest(SysLog sysLog, HttpServletRequest request) {
sysLog.setRequestUrl(StrUtil.isBlank(request.getQueryString()) ? request.getRequestURL().toString()
private void logRequest(LogDO logDO, HttpServletRequest request) {
logDO.setRequestUrl(StrUtil.isBlank(request.getQueryString()) ? request.getRequestURL().toString()
: request.getRequestURL().append("?").append(request.getQueryString()).toString());
sysLog.setRequestMethod(request.getMethod());
sysLog.setRequestHeaders(this.desensitize(ServletUtil.getHeaderMap(request)));
logDO.setRequestMethod(request.getMethod());
logDO.setRequestHeaders(this.desensitize(ServletUtil.getHeaderMap(request)));
String requestBody = this.getRequestBody(request);
if (StrUtil.isNotBlank(requestBody)) {
sysLog.setRequestBody(this.desensitize(
logDO.setRequestBody(this.desensitize(
JSONUtil.isTypeJSON(requestBody) ? JSONUtil.parseObj(requestBody) : ServletUtil.getParamMap(request)));
}
sysLog.setClientIp(ServletUtil.getClientIP(request));
sysLog.setLocation(IpUtils.getCityInfo(sysLog.getClientIp()));
sysLog.setBrowser(ServletUtils.getBrowser(request));
sysLog.setCreateUser(sysLog.getCreateUser() == null ? LoginHelper.getUserId() : sysLog.getCreateUser());
logDO.setClientIp(ServletUtil.getClientIP(request));
logDO.setLocation(IpUtils.getCityInfo(logDO.getClientIp()));
logDO.setBrowser(ServletUtils.getBrowser(request));
logDO.setCreateUser(logDO.getCreateUser() == null ? LoginHelper.getUserId() : logDO.getCreateUser());
}
/**
* 记录响应信息
*
* @param sysLog
* @param logDO
* 系统日志信息
* @param response
* 响应对象
*/
private void logResponse(SysLog sysLog, HttpServletResponse response) {
private void logResponse(LogDO logDO, HttpServletResponse response) {
int status = response.getStatus();
sysLog.setStatusCode(status);
sysLog.setResponseHeaders(this.desensitize(ServletUtil.getHeadersMap(response)));
logDO.setStatusCode(status);
logDO.setResponseHeaders(this.desensitize(ServletUtil.getHeadersMap(response)));
// 响应体不记录非 JSON 响应数据
String responseBody = this.getResponseBody(response);
if (StrUtil.isNotBlank(responseBody) && JSONUtil.isTypeJSON(responseBody)) {
sysLog.setResponseBody(responseBody);
logDO.setResponseBody(responseBody);
}
// 操作失败>= 400
sysLog.setStatus(status >= HttpStatus.HTTP_BAD_REQUEST ? LogStatusEnum.FAILURE : sysLog.getStatus());
logDO.setStatus(status >= HttpStatus.HTTP_BAD_REQUEST ? LogStatusEnum.FAILURE : logDO.getStatus());
}
/**

View File

@ -18,7 +18,7 @@ package top.charles7c.cnadmin.monitor.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import top.charles7c.cnadmin.monitor.model.entity.SysLog;
import top.charles7c.cnadmin.monitor.model.entity.LogDO;
/**
* 系统日志 Mapper
@ -26,4 +26,4 @@ import top.charles7c.cnadmin.monitor.model.entity.SysLog;
* @author Charles7c
* @since 2022/12/22 21:47
*/
public interface LogMapper extends BaseMapper<SysLog> {}
public interface LogMapper extends BaseMapper<LogDO> {}

View File

@ -34,7 +34,7 @@ import top.charles7c.cnadmin.monitor.enums.LogStatusEnum;
*/
@Data
@TableName("sys_log")
public class SysLog implements Serializable {
public class LogDO implements Serializable {
private static final long serialVersionUID = 1L;

View File

@ -17,7 +17,7 @@
package top.charles7c.cnadmin.monitor.service;
import top.charles7c.cnadmin.common.model.query.PageQuery;
import top.charles7c.cnadmin.common.model.vo.PageInfo;
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
import top.charles7c.cnadmin.monitor.model.query.LoginLogQuery;
import top.charles7c.cnadmin.monitor.model.query.OperationLogQuery;
import top.charles7c.cnadmin.monitor.model.query.SystemLogQuery;
@ -43,7 +43,7 @@ public interface LogService {
* 分页查询条件
* @return 操作日志分页信息
*/
PageInfo<OperationLogVO> list(OperationLogQuery query, PageQuery pageQuery);
PageDataVO<OperationLogVO> list(OperationLogQuery query, PageQuery pageQuery);
/**
* 分页查询登录日志列表
@ -54,7 +54,7 @@ public interface LogService {
* 分页查询条件
* @return 登录日志分页信息
*/
PageInfo<LoginLogVO> list(LoginLogQuery query, PageQuery pageQuery);
PageDataVO<LoginLogVO> list(LoginLogQuery query, PageQuery pageQuery);
/**
* 分页查询系统日志列表
@ -65,7 +65,7 @@ public interface LogService {
* 分页查询条件
* @return 系统日志分页信息
*/
PageInfo<SystemLogVO> list(SystemLogQuery query, PageQuery pageQuery);
PageDataVO<SystemLogVO> list(SystemLogQuery query, PageQuery pageQuery);
/**
* 查看系统日志详情

View File

@ -34,13 +34,13 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import top.charles7c.cnadmin.common.model.query.PageQuery;
import top.charles7c.cnadmin.common.model.vo.PageInfo;
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
import top.charles7c.cnadmin.common.util.ExceptionUtils;
import top.charles7c.cnadmin.common.util.ReflectUtils;
import top.charles7c.cnadmin.common.util.helper.QueryHelper;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
import top.charles7c.cnadmin.monitor.mapper.LogMapper;
import top.charles7c.cnadmin.monitor.model.entity.SysLog;
import top.charles7c.cnadmin.monitor.model.entity.LogDO;
import top.charles7c.cnadmin.monitor.model.query.LoginLogQuery;
import top.charles7c.cnadmin.monitor.model.query.OperationLogQuery;
import top.charles7c.cnadmin.monitor.model.query.SystemLogQuery;
@ -64,13 +64,13 @@ public class LogServiceImpl implements LogService {
@Async
@EventListener
public void save(SysLog sysLog) {
logMapper.insert(sysLog);
public void save(LogDO logDO) {
logMapper.insert(logDO);
}
@Override
public PageInfo<OperationLogVO> list(OperationLogQuery query, PageQuery pageQuery) {
QueryWrapper<SysLog> queryWrapper = QueryHelper.build(query);
public PageDataVO<OperationLogVO> list(OperationLogQuery query, PageQuery pageQuery) {
QueryWrapper<LogDO> queryWrapper = QueryHelper.build(query);
// 限定查询信息
String[] fieldsName = ReflectUtils.getNonStaticFieldsName(OperationLogVO.class);
@ -79,24 +79,24 @@ public class LogServiceImpl implements LogService {
queryWrapper.select(columns);
// 分页查询
IPage<SysLog> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
PageInfo<OperationLogVO> pageInfo = PageInfo.build(page, OperationLogVO.class);
IPage<LogDO> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
PageDataVO<OperationLogVO> pageDataVO = PageDataVO.build(page, OperationLogVO.class);
// 填充数据如果是查询个人操作日志只查询一次用户信息即可
if (query.getUid() != null) {
String nickname = ExceptionUtils.exToNull(() -> userService.getById(query.getUid()).getNickname());
pageInfo.getList().forEach(o -> o.setCreateUserString(nickname));
pageDataVO.getList().forEach(o -> o.setCreateUserString(nickname));
} else {
pageInfo.getList().forEach(this::fill);
pageDataVO.getList().forEach(this::fill);
}
return pageInfo;
return pageDataVO;
}
@Override
public PageInfo<LoginLogVO> list(LoginLogQuery query, PageQuery pageQuery) {
QueryWrapper<SysLog> queryWrapper = QueryHelper.build(query);
public PageDataVO<LoginLogVO> list(LoginLogQuery query, PageQuery pageQuery) {
QueryWrapper<LogDO> queryWrapper = QueryHelper.build(query);
queryWrapper.lambda()
.and(qw -> qw.like(SysLog::getRequestUrl, "/auth/login").or().like(SysLog::getRequestUrl, "/auth/logout"));
.and(qw -> qw.like(LogDO::getRequestUrl, "/auth/login").or().like(LogDO::getRequestUrl, "/auth/logout"));
// 限定查询信息
String[] fieldsName = ReflectUtils.getNonStaticFieldsName(LoginLogVO.class);
@ -105,17 +105,17 @@ public class LogServiceImpl implements LogService {
queryWrapper.select(columns);
// 分页查询
IPage<SysLog> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
PageInfo<LoginLogVO> pageInfo = PageInfo.build(page, LoginLogVO.class);
IPage<LogDO> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
PageDataVO<LoginLogVO> pageDataVO = PageDataVO.build(page, LoginLogVO.class);
// 填充数据
pageInfo.getList().forEach(this::fill);
return pageInfo;
pageDataVO.getList().forEach(this::fill);
return pageDataVO;
}
@Override
public PageInfo<SystemLogVO> list(SystemLogQuery query, PageQuery pageQuery) {
QueryWrapper<SysLog> queryWrapper = QueryHelper.build(query);
public PageDataVO<SystemLogVO> list(SystemLogQuery query, PageQuery pageQuery) {
QueryWrapper<LogDO> queryWrapper = QueryHelper.build(query);
// 限定查询信息
String[] fieldsName = ReflectUtils.getNonStaticFieldsName(SystemLogVO.class);
@ -124,35 +124,36 @@ public class LogServiceImpl implements LogService {
queryWrapper.select(columns);
// 分页查询
IPage<SysLog> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
PageInfo<SystemLogVO> pageInfo = PageInfo.build(page, SystemLogVO.class);
IPage<LogDO> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
PageDataVO<SystemLogVO> pageDataVO = PageDataVO.build(page, SystemLogVO.class);
// 填充数据
pageInfo.getList().forEach(this::fill);
return pageInfo;
pageDataVO.getList().forEach(this::fill);
return pageDataVO;
}
@Override
public SystemLogDetailVO detail(Long logId) {
SysLog sysLog = logMapper.selectById(logId);
CheckUtils.throwIfNull(sysLog, String.format("ID为 [%s] 的日志已不存在", logId));
LogDO logDO = logMapper.selectById(logId);
CheckUtils.throwIfNull(logDO, String.format("ID为 [%s] 的日志已不存在", logId));
SystemLogDetailVO detailVO = BeanUtil.copyProperties(sysLog, SystemLogDetailVO.class);
this.fill(detailVO);
return detailVO;
SystemLogDetailVO systemLogDetailVO = BeanUtil.copyProperties(logDO, SystemLogDetailVO.class);
this.fill(systemLogDetailVO);
return systemLogDetailVO;
}
/**
* 填充数据
*
* @param vo
* VO
* @param logVO
* 日志信息
*/
private void fill(LogVO vo) {
Long createUser = vo.getCreateUser();
private void fill(LogVO logVO) {
Long createUser = logVO.getCreateUser();
if (createUser == null) {
return;
}
vo.setCreateUserString(ExceptionUtils.exToNull(() -> userService.getById(vo.getCreateUser())).getNickname());
logVO.setCreateUserString(
ExceptionUtils.exToNull(() -> userService.getById(logVO.getCreateUser())).getNickname());
}
}

View File

@ -29,7 +29,7 @@ import top.charles7c.cnadmin.common.model.dto.LoginUser;
import top.charles7c.cnadmin.common.util.SecureUtils;
import top.charles7c.cnadmin.common.util.helper.LoginHelper;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
import top.charles7c.cnadmin.system.model.entity.SysUser;
import top.charles7c.cnadmin.system.model.entity.UserDO;
import top.charles7c.cnadmin.system.service.UserService;
/**
@ -46,14 +46,14 @@ public class LoginServiceImpl implements LoginService {
@Override
public String login(String username, String password) {
SysUser sysUser = userService.getByUsername(username);
CheckUtils.throwIfNull(sysUser, "用户名或密码错误");
Long userId = sysUser.getUserId();
CheckUtils.throwIfNotEqual(SecureUtils.md5Salt(password, userId.toString()), sysUser.getPassword(), "用户名或密码错误");
CheckUtils.throwIfEqual(DisEnableStatusEnum.DISABLE, sysUser.getStatus(), "此账号已被禁用,如有疑问,请联系管理员");
UserDO userDO = userService.getByUsername(username);
CheckUtils.throwIfNull(userDO, "用户名或密码错误");
Long userId = userDO.getUserId();
CheckUtils.throwIfNotEqual(SecureUtils.md5Salt(password, userId.toString()), userDO.getPassword(), "用户名或密码错误");
CheckUtils.throwIfEqual(DisEnableStatusEnum.DISABLE, userDO.getStatus(), "此账号已被禁用,如有疑问,请联系管理员");
// 登录
LoginUser loginUser = BeanUtil.copyProperties(sysUser, LoginUser.class);
LoginUser loginUser = BeanUtil.copyProperties(userDO, LoginUser.class);
LoginHelper.login(loginUser);
// 返回令牌

View File

@ -18,7 +18,7 @@ package top.charles7c.cnadmin.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import top.charles7c.cnadmin.system.model.entity.SysDept;
import top.charles7c.cnadmin.system.model.entity.DeptDO;
/**
* 部门 Mapper
@ -26,4 +26,4 @@ import top.charles7c.cnadmin.system.model.entity.SysDept;
* @author Charles7c
* @since 2023/1/22 17:56
*/
public interface DeptMapper extends BaseMapper<SysDept> {}
public interface DeptMapper extends BaseMapper<DeptDO> {}

View File

@ -18,7 +18,7 @@ package top.charles7c.cnadmin.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import top.charles7c.cnadmin.system.model.entity.SysUser;
import top.charles7c.cnadmin.system.model.entity.UserDO;
/**
* 用户 Mapper
@ -26,4 +26,4 @@ import top.charles7c.cnadmin.system.model.entity.SysUser;
* @author Charles7c
* @since 2022/12/22 21:47
*/
public interface UserMapper extends BaseMapper<SysUser> {}
public interface UserMapper extends BaseMapper<UserDO> {}

View File

@ -32,7 +32,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
*/
@Data
@TableName("sys_dept")
public class SysDept extends BaseEntity {
public class DeptDO extends BaseEntity {
private static final long serialVersionUID = 1L;

View File

@ -35,7 +35,7 @@ import top.charles7c.cnadmin.common.enums.GenderEnum;
*/
@Data
@TableName("sys_user")
public class SysUser extends BaseEntity {
public class UserDO extends BaseEntity {
private static final long serialVersionUID = 1L;

View File

@ -27,14 +27,14 @@ import io.swagger.v3.oas.annotations.media.Schema;
import org.hibernate.validator.constraints.Length;
/**
* 创建部门信息
* 创建或修改部门信息
*
* @author Charles7c
* @since 2023/1/24 00:21
*/
@Data
@Schema(description = "创建部门信息")
public class CreateDeptRequest implements Serializable {
@Schema(description = "创建或修改部门信息")
public class DeptRequest implements Serializable {
private static final long serialVersionUID = 1L;

View File

@ -23,7 +23,7 @@ import cn.hutool.core.lang.tree.Tree;
import top.charles7c.cnadmin.common.base.BaseService;
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
import top.charles7c.cnadmin.system.model.query.DeptQuery;
import top.charles7c.cnadmin.system.model.request.CreateDeptRequest;
import top.charles7c.cnadmin.system.model.request.DeptRequest;
import top.charles7c.cnadmin.system.model.vo.DeptVO;
/**
@ -32,7 +32,7 @@ import top.charles7c.cnadmin.system.model.vo.DeptVO;
* @author Charles7c
* @since 2023/1/22 17:54
*/
public interface DeptService extends BaseService<DeptVO, DeptVO, DeptQuery, CreateDeptRequest, CreateDeptRequest> {
public interface DeptService extends BaseService<DeptVO, DeptVO, DeptQuery, DeptRequest, DeptRequest> {
/**
* 构建树

View File

@ -18,7 +18,7 @@ package top.charles7c.cnadmin.system.service;
import org.springframework.web.multipart.MultipartFile;
import top.charles7c.cnadmin.system.model.entity.SysUser;
import top.charles7c.cnadmin.system.model.entity.UserDO;
/**
* 用户业务接口
@ -35,7 +35,7 @@ public interface UserService {
* 用户名
* @return 用户信息
*/
SysUser getByUsername(String username);
UserDO getByUsername(String username);
/**
* 上传头像
@ -54,7 +54,7 @@ public interface UserService {
* @param user
* 用户信息
*/
void update(SysUser user);
void update(UserDO user);
/**
* 修改密码
@ -87,5 +87,5 @@ public interface UserService {
* 用户ID
* @return 用户信息
*/
SysUser getById(Long userId);
UserDO getById(Long userId);
}

View File

@ -40,9 +40,9 @@ import top.charles7c.cnadmin.common.util.TreeUtils;
import top.charles7c.cnadmin.common.util.helper.QueryHelper;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
import top.charles7c.cnadmin.system.mapper.DeptMapper;
import top.charles7c.cnadmin.system.model.entity.SysDept;
import top.charles7c.cnadmin.system.model.entity.DeptDO;
import top.charles7c.cnadmin.system.model.query.DeptQuery;
import top.charles7c.cnadmin.system.model.request.CreateDeptRequest;
import top.charles7c.cnadmin.system.model.request.DeptRequest;
import top.charles7c.cnadmin.system.model.vo.DeptVO;
import top.charles7c.cnadmin.system.service.DeptService;
import top.charles7c.cnadmin.system.service.UserService;
@ -55,21 +55,20 @@ import top.charles7c.cnadmin.system.service.UserService;
*/
@Service
@RequiredArgsConstructor
public class DeptServiceImpl
extends BaseServiceImpl<DeptMapper, SysDept, DeptVO, DeptVO, DeptQuery, CreateDeptRequest, CreateDeptRequest>
implements DeptService {
public class DeptServiceImpl extends
BaseServiceImpl<DeptMapper, DeptDO, DeptVO, DeptVO, DeptQuery, DeptRequest, DeptRequest> implements DeptService {
private final UserService userService;
@Override
public List<DeptVO> list(DeptQuery query) {
QueryWrapper<SysDept> queryWrapper = QueryHelper.build(query);
queryWrapper.lambda().orderByAsc(SysDept::getParentId).orderByAsc(SysDept::getDeptSort)
.orderByDesc(SysDept::getUpdateTime);
List<SysDept> list = baseMapper.selectList(queryWrapper);
List<DeptVO> voList = BeanUtil.copyToList(list, DeptVO.class);
voList.forEach(this::fill);
return voList;
QueryWrapper<DeptDO> queryWrapper = QueryHelper.build(query);
queryWrapper.lambda().orderByAsc(DeptDO::getParentId).orderByAsc(DeptDO::getDeptSort)
.orderByDesc(DeptDO::getUpdateTime);
List<DeptDO> deptList = baseMapper.selectList(queryWrapper);
List<DeptVO> list = BeanUtil.copyToList(deptList, DeptVO.class);
list.forEach(this::fill);
return list;
}
@Override
@ -79,8 +78,8 @@ public class DeptServiceImpl
}
// 去除重复子部门列表
List<DeptVO> deDuplicationDeptList = deDuplication(list);
return deDuplicationDeptList.stream().map(d -> d.setChildren(this.getChildren(d, list)))
List<DeptVO> deDuplicationList = deDuplication(list);
return deDuplicationList.stream().map(d -> d.setChildren(this.getChildren(d, list)))
.collect(Collectors.toList());
}
@ -92,7 +91,7 @@ public class DeptServiceImpl
* @return 去重后部门列表
*/
private List<DeptVO> deDuplication(List<DeptVO> list) {
List<DeptVO> deptList = new ArrayList<>();
List<DeptVO> deDuplicationList = new ArrayList<>();
for (DeptVO outerDept : list) {
boolean flag = true;
for (DeptVO innerDept : list) {
@ -104,10 +103,10 @@ public class DeptServiceImpl
}
if (flag) {
deptList.add(outerDept);
deDuplicationList.add(outerDept);
}
}
return deptList;
return deDuplicationList;
}
/**
@ -136,49 +135,50 @@ public class DeptServiceImpl
@Override
@Transactional(rollbackFor = Exception.class)
public Long create(CreateDeptRequest request) {
public Long create(DeptRequest request) {
String deptName = request.getDeptName();
boolean isExist = this.checkDeptNameExist(deptName, request.getParentId(), null);
CheckUtils.throwIf(() -> isExist, String.format("新增失败,'%s'已存在", deptName));
// 保存部门信息
SysDept sysDept = BeanUtil.copyProperties(request, SysDept.class);
sysDept.setStatus(DisEnableStatusEnum.ENABLE);
baseMapper.insert(sysDept);
return sysDept.getDeptId();
DeptDO deptDO = BeanUtil.copyProperties(request, DeptDO.class);
deptDO.setStatus(DisEnableStatusEnum.ENABLE);
baseMapper.insert(deptDO);
return deptDO.getDeptId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateStatus(List<Long> ids, DisEnableStatusEnum status) {
baseMapper.update(null,
Wrappers.<SysDept>lambdaUpdate().set(SysDept::getStatus, status).in(SysDept::getDeptId, ids));
Wrappers.<DeptDO>lambdaUpdate().set(DeptDO::getStatus, status).in(DeptDO::getDeptId, ids));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(List<Long> ids) {
super.delete(ids);
baseMapper.delete(Wrappers.<SysDept>lambdaQuery().in(SysDept::getParentId, ids));
baseMapper.delete(Wrappers.<DeptDO>lambdaQuery().in(DeptDO::getParentId, ids));
}
@Override
public boolean checkDeptNameExist(String deptName, Long parentId, Long deptId) {
return baseMapper.exists(Wrappers.<SysDept>lambdaQuery().eq(SysDept::getDeptName, deptName)
.eq(SysDept::getParentId, parentId).ne(deptId != null, SysDept::getDeptId, deptId));
return baseMapper.exists(Wrappers.<DeptDO>lambdaQuery().eq(DeptDO::getDeptName, deptName)
.eq(DeptDO::getParentId, parentId).ne(deptId != null, DeptDO::getDeptId, deptId));
}
/**
* 填充数据
*
* @param vo
* VO
* @param deptVO
* 部门信息
*/
private void fill(DeptVO vo) {
Long updateUser = vo.getUpdateUser();
private void fill(DeptVO deptVO) {
Long updateUser = deptVO.getUpdateUser();
if (updateUser == null) {
return;
}
vo.setUpdateUserString(ExceptionUtils.exToNull(() -> userService.getById(vo.getUpdateUser())).getNickname());
deptVO.setUpdateUserString(
ExceptionUtils.exToNull(() -> userService.getById(deptVO.getUpdateUser())).getNickname());
}
}

View File

@ -41,7 +41,7 @@ import top.charles7c.cnadmin.common.util.SecureUtils;
import top.charles7c.cnadmin.common.util.helper.LoginHelper;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
import top.charles7c.cnadmin.system.mapper.UserMapper;
import top.charles7c.cnadmin.system.model.entity.SysUser;
import top.charles7c.cnadmin.system.model.entity.UserDO;
import top.charles7c.cnadmin.system.service.UserService;
/**
@ -58,8 +58,8 @@ public class UserServiceImpl implements UserService {
private final LocalStorageProperties localStorageProperties;
@Override
public SysUser getByUsername(String username) {
return userMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, username));
public UserDO getByUsername(String username) {
return userMapper.selectOne(Wrappers.<UserDO>lambdaQuery().eq(UserDO::getUsername, username));
}
@Override
@ -82,7 +82,7 @@ public class UserServiceImpl implements UserService {
// 更新用户头像
String newAvatar = newAvatarFile.getName();
userMapper.update(null,
new LambdaUpdateWrapper<SysUser>().set(SysUser::getAvatar, newAvatar).eq(SysUser::getUserId, userId));
new LambdaUpdateWrapper<UserDO>().set(UserDO::getAvatar, newAvatar).eq(UserDO::getUserId, userId));
// 删除原头像
LoginUser loginUser = LoginHelper.getLoginUser();
@ -99,13 +99,13 @@ public class UserServiceImpl implements UserService {
@Override
@Transactional(rollbackFor = Exception.class)
public void update(SysUser user) {
public void update(UserDO user) {
userMapper.updateById(user);
// 更新登录用户信息
SysUser sysUser = this.getById(user.getUserId());
UserDO userDO = this.getById(user.getUserId());
LoginUser loginUser = LoginHelper.getLoginUser();
BeanUtil.copyProperties(sysUser, loginUser);
BeanUtil.copyProperties(userDO, loginUser);
LoginHelper.updateLoginUser(loginUser);
}
@ -113,16 +113,15 @@ public class UserServiceImpl implements UserService {
@Transactional(rollbackFor = Exception.class)
public void updatePassword(String oldPassword, String newPassword, Long userId) {
CheckUtils.throwIfEqual(newPassword, oldPassword, "新密码不能与当前密码相同");
SysUser sysUser = this.getById(userId);
CheckUtils.throwIfNotEqual(SecureUtils.md5Salt(oldPassword, userId.toString()), sysUser.getPassword(),
"当前密码错误");
UserDO userDO = this.getById(userId);
CheckUtils.throwIfNotEqual(SecureUtils.md5Salt(oldPassword, userId.toString()), userDO.getPassword(), "当前密码错误");
// 更新密码和密码重置时间
LocalDateTime now = LocalDateTime.now();
userMapper.update(null,
new LambdaUpdateWrapper<SysUser>()
.set(SysUser::getPassword, SecureUtils.md5Salt(newPassword, userId.toString()))
.set(SysUser::getPwdResetTime, now).eq(SysUser::getUserId, userId));
new LambdaUpdateWrapper<UserDO>()
.set(UserDO::getPassword, SecureUtils.md5Salt(newPassword, userId.toString()))
.set(UserDO::getPwdResetTime, now).eq(UserDO::getUserId, userId));
// 更新登录用户信息
LoginUser loginUser = LoginHelper.getLoginUser();
@ -133,16 +132,16 @@ public class UserServiceImpl implements UserService {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateEmail(String newEmail, String currentPassword, Long userId) {
SysUser sysUser = this.getById(userId);
CheckUtils.throwIfNotEqual(SecureUtils.md5Salt(currentPassword, userId.toString()), sysUser.getPassword(),
UserDO userDO = this.getById(userId);
CheckUtils.throwIfNotEqual(SecureUtils.md5Salt(currentPassword, userId.toString()), userDO.getPassword(),
"当前密码错误");
Long count = userMapper.selectCount(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getEmail, newEmail));
Long count = userMapper.selectCount(Wrappers.<UserDO>lambdaQuery().eq(UserDO::getEmail, newEmail));
CheckUtils.throwIf(() -> count > 0, "邮箱已绑定其他账号,请更换其他邮箱");
CheckUtils.throwIfEqual(newEmail, sysUser.getEmail(), "新邮箱不能与当前邮箱相同");
CheckUtils.throwIfEqual(newEmail, userDO.getEmail(), "新邮箱不能与当前邮箱相同");
// 更新邮箱
userMapper.update(null,
new LambdaUpdateWrapper<SysUser>().set(SysUser::getEmail, newEmail).eq(SysUser::getUserId, userId));
new LambdaUpdateWrapper<UserDO>().set(UserDO::getEmail, newEmail).eq(UserDO::getUserId, userId));
// 更新登录用户信息
LoginUser loginUser = LoginHelper.getLoginUser();
@ -151,9 +150,9 @@ public class UserServiceImpl implements UserService {
}
@Override
public SysUser getById(Long userId) {
SysUser sysUser = userMapper.selectById(userId);
CheckUtils.throwIfNull(sysUser, String.format("ID为 [%s] 的用户已不存在", userId));
return sysUser;
public UserDO getById(Long userId) {
UserDO userDO = userMapper.selectById(userId);
CheckUtils.throwIfNull(userDO, String.format("ID为 [%s] 的用户已不存在", userId));
return userDO;
}
}

View File

@ -91,7 +91,7 @@ public class LoginController {
@GetMapping("/user/info")
public R<UserInfoVO> getUserInfo() {
LoginUser loginUser = LoginHelper.getLoginUser();
UserInfoVO userInfoVo = BeanUtil.copyProperties(loginUser, UserInfoVO.class);
return R.ok(userInfoVo);
UserInfoVO userInfoVO = BeanUtil.copyProperties(loginUser, UserInfoVO.class);
return R.ok(userInfoVO);
}
}

View File

@ -80,8 +80,8 @@ public class CaptchaController {
Duration.ofMinutes(captchaImage.getExpirationInMinutes()));
// 返回验证码
CaptchaVO captchaVo = new CaptchaVO().setUuid(uuid).setImg(captcha.toBase64());
return R.ok(captchaVo);
CaptchaVO captchaVO = new CaptchaVO().setUuid(uuid).setImg(captcha.toBase64());
return R.ok(captchaVO);
}
@Operation(summary = "获取邮箱验证码", description = "发送验证码到指定邮箱")

View File

@ -54,7 +54,7 @@ public class CommonController {
@GetMapping("/tree/dept")
public R<List<Tree<Long>>> deptTree(@Validated DeptQuery query) {
List<DeptVO> list = deptService.list(query);
List<Tree<Long>> deptTree = deptService.buildTree(list);
return R.ok(deptTree);
List<Tree<Long>> deptTreeList = deptService.buildTree(list);
return R.ok(deptTreeList);
}
}

View File

@ -29,7 +29,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.charles7c.cnadmin.common.model.query.PageQuery;
import top.charles7c.cnadmin.common.model.vo.PageInfo;
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
import top.charles7c.cnadmin.common.model.vo.R;
import top.charles7c.cnadmin.monitor.model.query.LoginLogQuery;
import top.charles7c.cnadmin.monitor.model.query.OperationLogQuery;
@ -56,23 +56,23 @@ public class LogController {
@Operation(summary = "分页查询登录日志列表")
@GetMapping("/login")
public R<PageInfo<LoginLogVO>> list(@Validated LoginLogQuery query, @Validated PageQuery pageQuery) {
PageInfo<LoginLogVO> pageInfo = logService.list(query, pageQuery);
return R.ok(pageInfo);
public R<PageDataVO<LoginLogVO>> list(@Validated LoginLogQuery query, @Validated PageQuery pageQuery) {
PageDataVO<LoginLogVO> pageDataVO = logService.list(query, pageQuery);
return R.ok(pageDataVO);
}
@Operation(summary = "分页查询操作日志列表")
@GetMapping("/operation")
public R<PageInfo<OperationLogVO>> list(@Validated OperationLogQuery query, @Validated PageQuery pageQuery) {
PageInfo<OperationLogVO> pageInfo = logService.list(query, pageQuery);
return R.ok(pageInfo);
public R<PageDataVO<OperationLogVO>> list(@Validated OperationLogQuery query, @Validated PageQuery pageQuery) {
PageDataVO<OperationLogVO> pageDataVO = logService.list(query, pageQuery);
return R.ok(pageDataVO);
}
@Operation(summary = "分页查询系统日志列表")
@GetMapping("/system")
public R<PageInfo<SystemLogVO>> list(@Validated SystemLogQuery query, @Validated PageQuery pageQuery) {
PageInfo<SystemLogVO> pageInfo = logService.list(query, pageQuery);
return R.ok(pageInfo);
public R<PageDataVO<SystemLogVO>> list(@Validated SystemLogQuery query, @Validated PageQuery pageQuery) {
PageDataVO<SystemLogVO> pageDataVO = logService.list(query, pageQuery);
return R.ok(pageDataVO);
}
@Operation(summary = "查看系统日志详情")

View File

@ -41,7 +41,7 @@ import cn.hutool.core.util.StrUtil;
import top.charles7c.cnadmin.common.consts.CacheConstants;
import top.charles7c.cnadmin.common.model.dto.LoginUser;
import top.charles7c.cnadmin.common.model.query.PageQuery;
import top.charles7c.cnadmin.common.model.vo.PageInfo;
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
import top.charles7c.cnadmin.common.model.vo.R;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
import top.charles7c.cnadmin.monitor.model.query.OnlineUserQuery;
@ -61,7 +61,7 @@ public class OnlineUserController {
@Operation(summary = "分页查询在线用户列表")
@GetMapping
public R<PageInfo<OnlineUserVO>> list(@Validated OnlineUserQuery query, @Validated PageQuery pageQuery) {
public R<PageDataVO<OnlineUserVO>> list(@Validated OnlineUserQuery query, @Validated PageQuery pageQuery) {
List<LoginUser> loginUserList = new ArrayList<>();
List<String> tokenKeyList = StpUtil.searchTokenValue("", 0, -1, false);
for (String tokenKey : tokenKeyList) {
@ -82,10 +82,10 @@ public class OnlineUserController {
}
// 构建分页数据
List<OnlineUserVO> onlineUserList = BeanUtil.copyToList(loginUserList, OnlineUserVO.class);
CollUtil.sort(onlineUserList, Comparator.comparing(OnlineUserVO::getLoginTime).reversed());
PageInfo<OnlineUserVO> pageInfo = PageInfo.build(pageQuery.getPage(), pageQuery.getSize(), onlineUserList);
return R.ok(pageInfo);
List<OnlineUserVO> list = BeanUtil.copyToList(loginUserList, OnlineUserVO.class);
CollUtil.sort(list, Comparator.comparing(OnlineUserVO::getLoginTime).reversed());
PageDataVO<OnlineUserVO> pageDataVO = PageDataVO.build(pageQuery.getPage(), pageQuery.getSize(), list);
return R.ok(pageDataVO);
}
/**

View File

@ -33,7 +33,7 @@ import top.charles7c.cnadmin.common.base.BaseController;
import top.charles7c.cnadmin.common.model.request.UpdateStatusRequest;
import top.charles7c.cnadmin.common.model.vo.R;
import top.charles7c.cnadmin.system.model.query.DeptQuery;
import top.charles7c.cnadmin.system.model.request.CreateDeptRequest;
import top.charles7c.cnadmin.system.model.request.DeptRequest;
import top.charles7c.cnadmin.system.model.vo.DeptVO;
import top.charles7c.cnadmin.system.service.DeptService;
@ -46,8 +46,7 @@ import top.charles7c.cnadmin.system.service.DeptService;
@Tag(name = "部门管理 API")
@RestController
@CrudRequestMapping(value = "/system/dept", api = {Api.ALL})
public class DeptController
extends BaseController<DeptService, DeptVO, DeptVO, DeptQuery, CreateDeptRequest, CreateDeptRequest> {
public class DeptController extends BaseController<DeptService, DeptVO, DeptVO, DeptQuery, DeptRequest, DeptRequest> {
@Override
@Operation(summary = "查询部门列表树")

View File

@ -39,7 +39,7 @@ import top.charles7c.cnadmin.common.util.RedisUtils;
import top.charles7c.cnadmin.common.util.SecureUtils;
import top.charles7c.cnadmin.common.util.helper.LoginHelper;
import top.charles7c.cnadmin.common.util.validate.ValidationUtils;
import top.charles7c.cnadmin.system.model.entity.SysUser;
import top.charles7c.cnadmin.system.model.entity.UserDO;
import top.charles7c.cnadmin.system.model.request.UpdateBasicInfoRequest;
import top.charles7c.cnadmin.system.model.request.UpdateEmailRequest;
import top.charles7c.cnadmin.system.model.request.UpdatePasswordRequest;
@ -74,10 +74,10 @@ public class UserCenterController {
@Operation(summary = "修改基础信息", description = "修改用户基础信息")
@PatchMapping("/basic/info")
public R updateBasicInfo(@Validated @RequestBody UpdateBasicInfoRequest updateBasicInfoRequest) {
SysUser user = new SysUser();
user.setUserId(LoginHelper.getUserId());
BeanUtil.copyProperties(updateBasicInfoRequest, user);
userService.update(user);
UserDO userDO = new UserDO();
userDO.setUserId(LoginHelper.getUserId());
BeanUtil.copyProperties(updateBasicInfoRequest, userDO);
userService.update(userDO);
return R.ok("修改成功");
}