feat(修改): 删除不用实体类

This commit is contained in:
Bunny 2024-07-27 16:14:30 +08:00
parent 2c4ba3ebea
commit de39351b9e
53 changed files with 44 additions and 1414 deletions

View File

@ -1,13 +1,11 @@
package cn.bunny.common.service.context; package cn.bunny.common.service.context;
import cn.bunny.vo.system.login.LoginVo;
public class BaseContext { public class BaseContext {
private static final ThreadLocal<Long> userId = new ThreadLocal<>(); private static final ThreadLocal<Long> userId = new ThreadLocal<>();
private static final ThreadLocal<String> username = new ThreadLocal<String>(); private static final ThreadLocal<String> username = new ThreadLocal<>();
private static final ThreadLocal<Long> adminId = new ThreadLocal<>(); private static final ThreadLocal<Long> adminId = new ThreadLocal<>();
private static final ThreadLocal<String> adminName = new ThreadLocal<>(); private static final ThreadLocal<String> adminName = new ThreadLocal<>();
private static final ThreadLocal<LoginVo> loginVo = new ThreadLocal<>();
// 用户id相关 // 用户id相关
public static Long getUserId() { public static Long getUserId() {
@ -26,18 +24,9 @@ public class BaseContext {
username.set(_username); username.set(_username);
} }
public static LoginVo getLoginVo() {
return loginVo.get();
}
public static void setLoginVo(LoginVo _loginVo) {
loginVo.set(_loginVo);
}
public static void removeUser() { public static void removeUser() {
username.remove(); username.remove();
userId.remove(); userId.remove();
loginVo.remove();
} }
// adminId 相关 // adminId 相关

View File

@ -1,4 +1,4 @@
package cn.bunny.dto.quartz; package cn.bunny.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;

View File

@ -0,0 +1,24 @@
package cn.bunny.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class QuartzDto {
private String jobName;// 任务名称
private String jobGroup;// 任务分组
private String description;// 任务描述
private String jobClassName;// 执行类
private String jobMethodName;// 执行方法
private String cronExpression;// 执行时间
private String triggerName;// 执行时间
private String triggerState;// 任务状态
private String oldJobName;// 任务名称 用于修改
private String oldJobGroup;// 任务分组 用于修改
}

View File

@ -1,4 +1,4 @@
package cn.bunny.dto.quartz; package cn.bunny.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;

View File

@ -1,21 +0,0 @@
package cn.bunny.dto.email;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class EmailTemplateDto {
// 模板名称
private String templateName;
// 主题
private String subject;
// 邮件内容
private String body;
// 邮件类型
private String type;
}

View File

@ -1,30 +0,0 @@
package cn.bunny.dto.email;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 添加邮箱用户
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class EmailUsersDto {
// 修改时需要传
private Long id;
// 邮箱
private String email;
// 密码
private String password;
// SMTP服务器
private String host;
// 端口号
private Integer port;
// 邮箱协议
private Integer smtpAgreement;
// 是否为默认邮件
private Boolean isDefault;
}

View File

@ -1,24 +0,0 @@
package cn.bunny.dto.quartz;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class QuartzDto {
private String jobName;// 任务名称
private String jobGroup;// 任务分组
private String description;// 任务描述
private String jobClassName;// 执行类
private String jobMethodName;// 执行方法
private String cronExpression;// 执行时间
private String triggerName;// 执行时间
private String triggerState;// 任务状态
private String oldJobName;// 任务名称 用于修改
private String oldJobGroup;// 任务分组 用于修改
}

View File

@ -1,19 +0,0 @@
package cn.bunny.dto.user;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class LoginDto {
// 用户名
private String username;
// 密码
private String password;
// 邮箱验证码
private String emailCode;
}

View File

@ -1,4 +1,4 @@
package cn.bunny.entity.system.quartz; package cn.bunny.entity.quartz;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;

View File

@ -1,58 +0,0 @@
package cn.bunny.entity.system.admin;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author Bunny
* @since 2024-05-18
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("admin_power")
@ApiModel(value = "AdminPower对象", description = "")
public class AdminPower implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@ApiModelProperty("权限ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty("权限名称")
private String powerName;
@ApiModelProperty("权限编码")
private String powerCode;
@ApiModelProperty("描述")
private String description;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
@ApiModelProperty("更新用户")
private String updateUser;
@ApiModelProperty("是否删除0-未删除1-已删除")
private Byte isDelete;
}

View File

@ -1,55 +0,0 @@
package cn.bunny.entity.system.admin;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author Bunny
* @since 2024-05-18
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("admin_role")
@ApiModel(value = "AdminRole对象", description = "")
public class AdminRole implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private String id;
@ApiModelProperty("角色名称")
private String roleName;
@ApiModelProperty("描述")
private String description;
@ApiModelProperty("角色代码")
private String roleCode;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
@ApiModelProperty("操作用户")
private String updateUser;
@ApiModelProperty("是否删除")
private Byte isDeleted;
}

View File

@ -1,56 +0,0 @@
package cn.bunny.entity.system.admin;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author Bunny
* @since 2024-05-18
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("admin_role_power")
@ApiModel(value = "AdminRolePower对象", description = "")
public class AdminRolePower implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@TableId(value = "id", type = IdType.AUTO)
private String id;
@ApiModelProperty("角色id")
private String roleId;
@ApiModelProperty("权限id")
private String powerId;
@ApiModelProperty("描述")
private String description;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
@ApiModelProperty("更新用户")
private String updateUser;
@ApiModelProperty("是否删除0-未删除1-已删除")
private Byte isDelete;
}

View File

@ -1,56 +0,0 @@
package cn.bunny.entity.system.admin;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author Bunny
* @since 2024-05-18
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("admin_user_role")
@ApiModel(value = "AdminUserRole对象", description = "")
public class AdminUserRole implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@TableId(value = "id", type = IdType.AUTO)
private String id;
@ApiModelProperty("用户id")
private String userId;
@ApiModelProperty("角色id")
private String roleId;
@ApiModelProperty("描述")
private String description;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
@ApiModelProperty("更新用户")
private String updateUser;
@ApiModelProperty("是否删除0-未删除1-已删除")
private Byte isDelete;
}

View File

@ -1,21 +0,0 @@
package cn.bunny.entity.system.admin.auth;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AuthUserRole {
// 用户id
private Long userId;
// 角色id
private Long roleId;
// 角色代码
private String roleCode;
// 描述
private String roleDescription;
}

View File

@ -1,42 +0,0 @@
package cn.bunny.entity.system.email;
import cn.bunny.entity.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.io.Serial;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author Bunny
* @since 2024-05-19
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("email_template")
@ApiModel(value = "EmailTemplate对象", description = "邮件模板")
public class EmailTemplate extends BaseEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@ApiModelProperty("模板名称")
private String templateName;
@ApiModelProperty("主题")
private String subject;
@ApiModelProperty("邮件内容")
private String body;
@ApiModelProperty("邮件类型")
private String type;
}

View File

@ -1,49 +0,0 @@
package cn.bunny.entity.system.email;
import cn.bunny.entity.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.io.Serial;
import java.io.Serializable;
/**
* <p>
* 邮箱发送表
* </p>
*
* @author Bunny
* @since 2024-05-17
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("email_users")
@ApiModel(value = "EmailUsers对象", description = "邮箱发送表")
public class EmailUsers extends BaseEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@ApiModelProperty("邮箱")
private String email;
@ApiModelProperty("密码")
private String password;
@ApiModelProperty("Host地址")
private String host;
@ApiModelProperty("端口号")
private Integer port;
@ApiModelProperty("邮箱协议")
private String smtpAgreement;
@ApiModelProperty("是否为默认邮件")
private Integer isDefault;
}

View File

@ -1,78 +0,0 @@
package cn.bunny.entity.system.log;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 系统日志表
* </p>
*
* @author Bunny
* @since 2024-05-31
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("system_log")
@ApiModel(value = "SystemLog对象", description = "系统日志表")
public class SystemLog implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
@ApiModelProperty("所在类路径")
private String classPath;
@ApiModelProperty("执行方法名称")
private String methodName;
@ApiModelProperty("入参内容")
private String args;
@ApiModelProperty("返回参数")
private String result;
@ApiModelProperty("报错堆栈")
private String errorStack;
@ApiModelProperty("报错")
private String errorMessage;
@ApiModelProperty("邮箱")
private String email;
@ApiModelProperty("用户名")
private String nickname;
@ApiModelProperty("当前用户token")
private String token;
@ApiModelProperty("当前用户IP地址")
private String ipAddress;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
@ApiModelProperty("更新用户")
private Long updateUser;
@ApiModelProperty("是否被删除")
private Boolean isDeleted;
}

View File

@ -1,61 +0,0 @@
package cn.bunny.entity.system.user;
import cn.bunny.entity.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 用户信息
* </p>
*
* @author Bunny
* @since 2024-05-17
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@ApiModel(value = "User对象", description = "用户信息")
public class User extends BaseEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@ApiModelProperty("昵称")
private String nickName;
@ApiModelProperty("邮箱")
private String email;
@ApiModelProperty("密码")
private String password;
@ApiModelProperty("头像")
private String avatar;
@ApiModelProperty("0:女 1:男")
private Byte sex;
@ApiModelProperty("个人描述")
private String personDescription;
@ApiModelProperty("加入时间")
private LocalDateTime joinTime;
@ApiModelProperty("最后登录时间")
private LocalDateTime lastLoginTime;
@ApiModelProperty("最后登录IP")
private String lastLoginIp;
@ApiModelProperty("最后登录ip地址")
private String lastLoginIpAddress;
@ApiModelProperty("积分")
private Integer totalIntegral;
@ApiModelProperty("当前积分")
private Integer currentIntegral;
@ApiModelProperty("0:禁用 1:正常")
private Byte status;
}

View File

@ -1,29 +0,0 @@
package cn.bunny.pojo.email;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.multipart.MultipartFile;
/**
* 邮件发送对象
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmailSend {
// 给谁发送
private String sendTo;
// 发送主题
private String subject;
// 是否为富文本
private Boolean isRichText;
// 发送内容
private String message;
// 抄送人
private String ccParam;
// 发送的文件
private MultipartFile[] file;
}

View File

@ -1,20 +0,0 @@
package cn.bunny.pojo.email;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 邮箱发送初始化参数
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmailSendInit {
private Integer port;
private String host;
private String username;
private String password;
}

View File

@ -1,8 +0,0 @@
package cn.bunny.pojo.enums;
/**
* 数据库操作类型
*/
public enum OperationType {
UPDATE, INSERT
}

View File

@ -1,18 +0,0 @@
package cn.bunny.pojo.file;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class MinioFIlePath {
private String filename;
private String uuidFilename;
private String timeUuidFilename;
private String filepath;
private String bucketNameFilepath;
}

View File

@ -1,11 +0,0 @@
package cn.bunny.pojo.result.constant;
import lombok.Data;
@Data
public class LocalDateTimeConstant {
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
public static final String DEFAULT_DATE_TIME_SECOND_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
}

View File

@ -1,15 +0,0 @@
package cn.bunny.pojo.result.constant;
import lombok.Data;
/**
* 邮箱消息
*/
@Data
public class MailMessageConstant {
public static final String EMPTY_SEND_OBJECT = "空发送对象";
public static final String ADDRESS_NOT_NULL = "收件人不能为空";
public static final String TITLE_NOT_NULL = "标题不能为空";
public static final String SEND_MESSAGE_NOT_NULL = "发送消息不能为空";
public static final String EMAIL_CONFIG_NOT_FOUND = "邮箱配置为空";
}

View File

@ -1,39 +0,0 @@
package cn.bunny.pojo.result.constant;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class MinioConstant {
public static final String favicon = "favicon";
public static final String avatar = "avatar";
public static final String article = "article";
public static final String carousel = "carousel";
public static final String feedback = "feedback";
public static final String articleCovers = "articleCovers";
public static final String articleAttachment = "articleAttachment";
private static final Map<String, String> typeMap = new HashMap<>();
static {
typeMap.put(favicon, "/favicon/");
typeMap.put(avatar, "/avatar/");
typeMap.put(article, "/article/");
typeMap.put(carousel, "/carousel/");
typeMap.put(feedback, "/feedback/");
typeMap.put("articleImages", "/articleImages/");
typeMap.put("articleVideo", "/articleVideo/");
typeMap.put(articleCovers, "/articleCovers/");
typeMap.put(articleAttachment, "/articleAttachment/");
typeMap.put("images", "/images/");
typeMap.put("video", "/video/");
typeMap.put("default", "/default/");
}
public static String getType(String type) {
String value = typeMap.get(type);
if (value != null) return value;
throw new RuntimeException(FileMessageConstant.COMPOSE_OBJECT_EXCEPTION);
}
}

View File

@ -1,67 +0,0 @@
package cn.bunny.pojo.result.constant;
import lombok.Data;
/**
* Redis用户前缀设置
*/
@Data
public class RedisUserConstant {
// 管理员用户
public static final String ADMIN_LOGIN_INFO_PREFIX = "ADMIN::LOGIN_INFO::";
public static final String ADMIN_EMAIL_CODE_PREFIX = "ADMIN::EMAIL_CODE::";
// 普通用户
public static final String USER_LOGIN_INFO_PREFIX = "USER::LOGIN_INFO::";
public static final String USER_EMAIL_CODE_PREFIX = "USER::EMAIL_CODE::";
public static final String USER_DO_LIKE_PREFIX = "USER::doLike::";
/**
* * 管理员用户登录信息
*
* @param adminUser 管理员用户
* @return 登录信息key
*/
public static String getAdminLoginInfoPrefix(String adminUser) {
return ADMIN_LOGIN_INFO_PREFIX + adminUser;
}
/**
* * 管理员用户邮箱验证码
*
* @param adminUser 管理员用户
* @return 管理员用户邮箱验证码key
*/
public static String getAdminUserEmailCodePrefix(String adminUser) {
return ADMIN_EMAIL_CODE_PREFIX + adminUser;
}
/**
* * 用户登录信息
*
* @param user 用户名
* @return 登录信息key
*/
public static String getUserLoginInfoPrefix(String user) {
return USER_LOGIN_INFO_PREFIX + user;
}
/**
* * 用户邮箱验证码
*
* @param user 用户名
* @return 用户邮箱验证码key
*/
public static String getUserEmailCodePrefix(String user) {
return USER_EMAIL_CODE_PREFIX + user;
}
/**
* * 用户点赞操作
*
* @param user 用户名
* @return 用户点赞key
*/
public static String getUserDoLikePrefix(String user) {
return USER_DO_LIKE_PREFIX + user;
}
}

View File

@ -1,14 +0,0 @@
package cn.bunny.pojo.result.constant;
import lombok.Data;
/**
* 数据库中自动填充字段
*/
@Data
public class SQLAutoFillConstant {
public static final String SET_CREATE_TIME = "setCreateTime";
public static final String SET_UPDATE_TIME = "setUpdateTime";
public static final String SET_CREATE_USER = "setCreateUser";
public static final String SET_UPDATE_USER = "setUpdateUser";
}

View File

@ -1,13 +0,0 @@
package cn.bunny.pojo.result.constant;
import lombok.Data;
import java.util.Arrays;
import java.util.List;
@Data
public class SecurityConstant {
public static String[] annotations = {"/", "/test/**", "/diagram-viewer/**", "/editor-app/**", "/*.html",
"/*/*/noAuth/**", "/*/noAuth/**", "/favicon.ico", "/swagger-resources/**", "/webjars/**", "/v3/**", "/swagger-ui.html/**", "/doc.html"};
public static List<String> annotationsList = Arrays.asList(annotations);
}

View File

@ -1,14 +0,0 @@
package cn.bunny.pojo.result.constant;
import lombok.Data;
/**
* 状态常量启用或者禁用
*/
@Data
public class StatusConstant {
// 启用为1
public static final Integer ENABLE = 1;
// 禁用为0
public static final Integer DISABLE = 0;
}

View File

@ -1,8 +0,0 @@
package cn.bunny.pojo.result.constant;
import lombok.Data;
@Data
public class UserConstant {
public static final String USER_AVATAR = "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132";
}

View File

@ -1,4 +1,4 @@
package cn.bunny.vo.page; package cn.bunny.vo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;

View File

@ -1,19 +0,0 @@
package cn.bunny.vo.email;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class EmailTemplateVo {
// 模板名称
private String templateName;
// 主题
private String subject;
// 邮件内容
private String body;
}

View File

@ -1,48 +0,0 @@
package cn.bunny.vo.system.login;
import cn.bunny.pojo.result.constant.LocalDateTimeConstant;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.List;
/**
* 用户登录返回内容
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class LoginVo {
private Long id;
private String nickName;
private String email;
private String password;
private String avatar;
private Byte sex;
private String personDescription;
@JsonFormat(pattern = LocalDateTimeConstant.DEFAULT_DATE_TIME_SECOND_FORMAT)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime joinTime;
@JsonFormat(pattern = LocalDateTimeConstant.DEFAULT_DATE_TIME_SECOND_FORMAT)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime lastLoginTime;
private String lastLoginIp;
private String lastLoginIpAddress;
private Integer totalIntegral;
private Integer currentIntegral;
private Byte status;
private String token;
private List<String> roleList;
private List<String> powerList;
}

View File

@ -1,20 +0,0 @@
package cn.bunny.vo.system.login;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Schema(description = "验证码响应结果实体类")
public class ValidateCodeVo {
@Schema(description = "验证码key")
private String codeKey; // 验证码的key
@Schema(description = "验证码value")
private String codeValue; // 图片验证码对应的字符串数据
}

View File

@ -1,43 +0,0 @@
package cn.bunny.vo.system.user;
import cn.bunny.pojo.result.constant.LocalDateTimeConstant;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* 获取用户信息返回参数
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserInfoVo {
private Long userId;
private String nickName;
private String email;
private String avatar;
private Byte sex;
private String personDescription;
@JsonFormat(pattern = LocalDateTimeConstant.DEFAULT_DATE_TIME_SECOND_FORMAT)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime joinTime;
@JsonFormat(pattern = LocalDateTimeConstant.DEFAULT_DATE_TIME_SECOND_FORMAT)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime lastLoginTime;
private String lastLoginIp;
private String lastLoginIpAddress;
private Integer totalIntegral;
private Integer currentIntegral;
private Byte status;
}

View File

@ -1,11 +1,11 @@
package cn.bunny.service.controller; package cn.bunny.service.controller;
import cn.bunny.dto.quartz.QuartzAddDto; import cn.bunny.dto.QuartzAddDto;
import cn.bunny.dto.quartz.QuartzOperationDto; import cn.bunny.dto.QuartzOperationDto;
import cn.bunny.entity.system.quartz.JobList; import cn.bunny.entity.quartz.JobList;
import cn.bunny.pojo.result.Result; import cn.bunny.pojo.result.Result;
import cn.bunny.service.service.JobService; import cn.bunny.service.service.JobService;
import cn.bunny.vo.page.PageResult; import cn.bunny.vo.PageResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -26,7 +26,7 @@ public class JobController {
@PathVariable Integer page, @PathVariable Integer page,
@PathVariable Integer limit @PathVariable Integer limit
) { ) {
Page<JobList> pageParams = new Page<>(page,limit); Page<JobList> pageParams = new Page<>(page, limit);
PageResult<JobList> pageResult = jobService.pageQuery(pageParams); PageResult<JobList> pageResult = jobService.pageQuery(pageParams);
return Result.success(pageResult); return Result.success(pageResult);
} }

View File

@ -1,29 +0,0 @@
package cn.bunny.service.controller;
import cn.bunny.dto.user.LoginDto;
import cn.bunny.pojo.result.Result;
import cn.bunny.service.service.UserService;
import cn.bunny.vo.system.login.LoginVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
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;
@Tag(name = "登录相关接口")
@RestController
@RequestMapping("/admin")
public class LoginController {
@Autowired
private UserService userService;
@Operation(summary = "登录接口", description = "后台用户登录接口")
@PostMapping("login")
public Result<LoginVo> login(@RequestBody LoginDto loginDto) {
LoginVo vo = userService.login(loginDto);
return Result.success(vo);
}
}

View File

@ -1,34 +0,0 @@
package cn.bunny.service.mapper;
import cn.bunny.entity.system.admin.AdminPower;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author Bunny
* @since 2024-05-18
*/
@Mapper
public interface AdminPowerMapper extends BaseMapper<AdminPower> {
/**
* 查询用户权限信息
*
* @param roleIdList 角色id 列表
* @return 用户对应的权限
*/
AdminPower[] selectByPowerWithRoleIdList(List<Long> roleIdList);
/**
* 查询用户权限
*
* @param userId 用户id
* @return 用户权限列表
*/
List<AdminPower> queryByUserIdWithPower(Long userId);
}

View File

@ -1,26 +0,0 @@
package cn.bunny.service.mapper;
import cn.bunny.entity.system.admin.AdminRole;
import cn.bunny.entity.system.admin.auth.AuthUserRole;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author Bunny
* @since 2024-05-18
*/
@Mapper
public interface AdminRoleMapper extends BaseMapper<AdminRole> {
/**
* 查询用户所有的角色信息
*
* @param userId 用户id
* @return 用户对应的角色
*/
AuthUserRole[] selectByRoleWithUserId(Long userId);
}

View File

@ -1,24 +0,0 @@
package cn.bunny.service.mapper;
import cn.bunny.entity.system.email.EmailUsers;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author Bunny
* @since 2024-05-14
*/
@Mapper
public interface EmailUsersMapper extends BaseMapper<EmailUsers> {
/**
* 彻底删除邮箱用户
*
* @param id 用户ID
*/
void thoroughDeleteById(Long id);
}

View File

@ -1,6 +1,6 @@
package cn.bunny.service.mapper; package cn.bunny.service.mapper;
import cn.bunny.entity.system.quartz.JobList; import cn.bunny.entity.quartz.JobList;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;

View File

@ -1,18 +0,0 @@
package cn.bunny.service.mapper;
import cn.bunny.entity.system.log.SystemLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 系统日志表 Mapper 接口
* </p>
*
* @author Bunny
* @since 2024-05-31
*/
@Mapper
public interface SystemLogMapper extends BaseMapper<SystemLog> {
}

View File

@ -1,25 +0,0 @@
package cn.bunny.service.mapper;
import cn.bunny.entity.system.user.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 用户信息 Mapper 接口
* </p>
*
* @author Bunny
* @since 2024-05-18
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {
/**
* 前台用户登录接口
*
* @param username 邮箱/昵称
* @param password Image
* @return 登录参数
*/
User login(String username, String password);
}

View File

@ -1,9 +1,9 @@
package cn.bunny.service.service; package cn.bunny.service.service;
import cn.bunny.dto.quartz.QuartzAddDto; import cn.bunny.dto.QuartzAddDto;
import cn.bunny.dto.quartz.QuartzOperationDto; import cn.bunny.dto.QuartzOperationDto;
import cn.bunny.entity.system.quartz.JobList; import cn.bunny.entity.quartz.JobList;
import cn.bunny.vo.page.PageResult; import cn.bunny.vo.PageResult;
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;

View File

@ -1,24 +0,0 @@
package cn.bunny.service.service;
import cn.bunny.dto.user.LoginDto;
import cn.bunny.entity.system.user.User;
import cn.bunny.vo.system.login.LoginVo;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 用户信息 服务类
* </p>
*
* @author Bunny
* @since 2024-05-18
*/
public interface UserService extends IService<User> {
/**
* 前台用户登录接口
*
* @param loginDto 登录参数
* @return 登录后结果返回
*/
LoginVo login(LoginDto loginDto);
}

View File

@ -1,11 +1,11 @@
package cn.bunny.service.service.impl; package cn.bunny.service.service.impl;
import cn.bunny.dto.quartz.QuartzAddDto; import cn.bunny.dto.QuartzAddDto;
import cn.bunny.dto.quartz.QuartzOperationDto; import cn.bunny.dto.QuartzOperationDto;
import cn.bunny.entity.system.quartz.JobList; import cn.bunny.entity.quartz.JobList;
import cn.bunny.service.mapper.JobListMapper; import cn.bunny.service.mapper.JobListMapper;
import cn.bunny.service.service.JobService; import cn.bunny.service.service.JobService;
import cn.bunny.vo.page.PageResult; import cn.bunny.vo.PageResult;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

View File

@ -1,80 +0,0 @@
package cn.bunny.service.service.impl;
import cn.bunny.common.service.utils.EmptyUtil;
import cn.bunny.common.service.utils.JwtHelper;
import cn.bunny.dto.user.LoginDto;
import cn.bunny.entity.system.admin.AdminPower;
import cn.bunny.entity.system.admin.auth.AuthUserRole;
import cn.bunny.entity.system.user.User;
import cn.bunny.pojo.result.constant.ExceptionConstant;
import cn.bunny.service.mapper.AdminPowerMapper;
import cn.bunny.service.mapper.AdminRoleMapper;
import cn.bunny.service.mapper.EmailUsersMapper;
import cn.bunny.service.mapper.UserMapper;
import cn.bunny.service.service.UserService;
import cn.bunny.vo.system.login.LoginVo;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.util.Arrays;
import java.util.List;
/**
* <p>
* 用户信息 服务实现类
* </p>
*
* @author Bunny
* @since 2024-05-18
*/
@Service
@DS("master")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Autowired
private AdminRoleMapper roleMapper;
@Autowired
private AdminPowerMapper powerMapper;
@Autowired
private EmailUsersMapper emailUsersMapper;
/**
* 前台用户登录接口
*
* @param loginDto 登录参数
* @return 登录后结果返回
*/
@Override
public LoginVo login(LoginDto loginDto) {
// 判断用户和密码是否为空
String username = loginDto.getUsername();
EmptyUtil.isEmpty(username, ExceptionConstant.USERNAME_IS_EMPTY_Exception);
// 密码不能为空
EmptyUtil.isEmpty(loginDto.getPassword(), ExceptionConstant.PASSWORD_NOT_EMPTY_Exception);
String password = DigestUtils.md5DigestAsHex(loginDto.getPassword().getBytes());
// 查询数据库用户对应的角色权限
User user = baseMapper.login(username, password);
Long userId = user.getId();
// 查询用户所有的角色信息
AuthUserRole[] roleList = roleMapper.selectByRoleWithUserId(userId);
List<String> roleCodeList = Arrays.stream(roleList).map(AuthUserRole::getRoleCode).toList();
List<Long> roleIdList = Arrays.stream(roleList).map(AuthUserRole::getRoleId).toList();
// 查询用户权限信息
AdminPower[] adminPowerList = powerMapper.selectByPowerWithRoleIdList(roleIdList);
List<String> powerCodeList = Arrays.stream(adminPowerList).map(AdminPower::getPowerCode).toList();
// 设置返回类型
LoginVo loginVo = new LoginVo();
BeanUtils.copyProperties(user, loginVo);
String token = JwtHelper.createToken(loginVo.getId(), loginVo.getEmail(), 7);
loginVo.setToken(token);
loginVo.setRoleList(roleCodeList);
loginVo.setPowerList(powerCodeList);
return loginVo;
}
}

View File

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.bunny.service.mapper.AdminPowerMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.bunny.entity.system.admin.AdminPower">
<id column="id" property="id"/>
<result column="power_name" property="powerName"/>
<result column="power_code" property="powerCode"/>
<result column="description" property="description"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="update_user" property="updateUser"/>
<result column="is_delete" property="isDelete"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, power_name, power_code, description, create_time, update_time, update_user, is_delete
</sql>
<!-- 查询用户权限信息 -->
<select id="selectByPowerWithRoleIdList">
SELECT *
FROM admin_power
WHERE id IN (SELECT arp.power_id
FROM admin_role_power arp
WHERE arp.role_id IN <foreach collection="roleIdList" item="roleId" open="(" close=")" separator=",">
#{roleId}
</foreach> )
</select>
<!-- 查询用户权限 -->
<select id="queryByUserIdWithPower" resultType="cn.bunny.entity.system.admin.AdminPower">
SELECT ap.*
FROM admin_user_role aur
INNER JOIN admin_role_power arp ON aur.role_id = arp.role_id
INNER JOIN admin_power ap ON ap.id = arp.power_id
WHERE aur.user_id = #{userId}
</select>
</mapper>

View File

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.bunny.service.mapper.AdminRoleMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.bunny.entity.system.admin.AdminRole">
<id column="id" property="id"/>
<result column="role_name" property="roleName"/>
<result column="description" property="description"/>
<result column="role_code" property="roleCode"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="update_user" property="updateUser"/>
<result column="is_deleted" property="isDeleted"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, role_name, description, role_code, create_time, update_time, update_user, is_deleted
</sql>
<!-- 查询用户所有的角色信息 -->
<select id="selectByRoleWithUserId">
SELECT ar.id roleId, ar.role_code, ar.description roleDescription, aur.user_id
FROM admin_user_role aur
LEFT JOIN admin_role ar ON ar.id = aur.role_id
WHERE aur.user_id = #{userId}
</select>
</mapper>

View File

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.bunny.service.mapper.EmailUsersMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.bunny.entity.system.email.EmailUsers">
<id column="id" property="id"/>
<result column="email" property="email"/>
<result column="password" property="password"/>
<result column="host" property="host"/>
<result column="port" property="port"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="update_user" property="updateUser"/>
<result column="is_delete" property="isDeleted"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, email, password, host, port, create_time, update_time, update_user, is_delete
</sql>
<!-- 彻底删除邮箱用户 -->
<delete id="thoroughDeleteById">
delete
from email_users
where id = #{id}
</delete>
</mapper>

View File

@ -3,7 +3,7 @@
<mapper namespace="cn.bunny.service.mapper.JobListMapper"> <mapper namespace="cn.bunny.service.mapper.JobListMapper">
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.bunny.entity.system.quartz.JobList"> <resultMap id="BaseResultMap" type="cn.bunny.entity.quartz.JobList">
<result column="jobName" property="jobName"/> <result column="jobName" property="jobName"/>
<result column="jobGroup" property="jobGroup"/> <result column="jobGroup" property="jobGroup"/>
<result column="description" property="description"/> <result column="description" property="description"/>

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.bunny.service.mapper.SystemLogMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.bunny.entity.system.log.SystemLog">
<id column="id" property="id"/>
<result column="class_path" property="classPath"/>
<result column="method_name" property="methodName"/>
<result column="args" property="args"/>
<result column="result" property="result"/>
<result column="error_stack" property="errorStack"/>
<result column="error_message" property="errorMessage"/>
<result column="email" property="email"/>
<result column="nickname" property="nickname"/>
<result column="token" property="token"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="update_user" property="updateUser"/>
<result column="is_deleted" property="isDeleted"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, class_path, method_name, args, result, error_stack, error_message, email, nickname, token, create_time, update_time, update_user, is_deleted
</sql>
</mapper>

View File

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.bunny.service.mapper.UserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.bunny.entity.system.user.User">
<id column="id" property="id"/>
<result column="nick_name" property="nickName"/>
<result column="email" property="email"/>
<result column="password" property="password"/>
<result column="avatar" property="avatar"/>
<result column="sex" property="sex"/>
<result column="person_description" property="personDescription"/>
<result column="join_time" property="joinTime"/>
<result column="last_login_time" property="lastLoginTime"/>
<result column="last_login_ip" property="lastLoginIp"/>
<result column="last_login_ip_address" property="lastLoginIpAddress"/>
<result column="total_integral" property="totalIntegral"/>
<result column="current_integral" property="currentIntegral"/>
<result column="status" property="status"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="update_user" property="updateUser"/>
<result column="is_deleted" property="isDeleted"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, nick_name, email, password, avatar, sex, person_description, join_time, last_login_time, last_login_ip, last_login_ip_address, total_integral, current_integral, status, create_time, update_time, update_user, is_deleted
</sql>
<!-- 后台登录用户 -->
<select id="login" resultType="cn.bunny.entity.system.user.User">
select *
from user
where (email = #{username} and password = #{password})
or (nick_name = #{username} and password = #{password})
</select>
</mapper>