优化:优化模型类命名(为数据模型类添加 DO 后缀),并优化所有模型相关变量命名
This commit is contained in:
parent
d7851bc811
commit
3075038067
@ -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 # 公共 DTO(Data Transfer Object)
|
||||
│ │ ├─ entity # 公共实体对象
|
||||
│ │ ├─ query # 公共查询条件
|
||||
│ │ ├─ request # 公共请求对象
|
||||
│ │ └─ vo # 公共 VO(View Object)
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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<>();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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> {}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
/**
|
||||
* 查看系统日志详情
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
// 返回令牌
|
||||
|
@ -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> {}
|
||||
|
@ -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> {}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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> {
|
||||
|
||||
/**
|
||||
* 构建树
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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 = "发送验证码到指定邮箱")
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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 = "查看系统日志详情")
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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 = "查询部门列表树")
|
||||
|
@ -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("修改成功");
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user