初始化仓库

This commit is contained in:
2026-04-21 15:08:07 +08:00
parent 444d984122
commit b5119afb9f
195 changed files with 11034 additions and 19 deletions

27
xtools-boot-api/pom.xml Normal file
View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.xujun</groupId>
<artifactId>xtools-boot</artifactId>
<version>5.0.0</version>
</parent>
<artifactId>xtools-boot-api</artifactId>
<!-- 依赖 -->
<dependencies>
<!-- jakarta.validation -->
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
<!-- swagger annotations -->
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,22 @@
package xtools.boot.api.anntation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* <p>Title : IgnoreXss</p>
* <p>Description : IgnoreXss</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/9 10:07
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreXss {
}

View File

@@ -0,0 +1,46 @@
package xtools.boot.api.constant;
/**
* <p>Title : BootCommonConstant</p>
* <p>Description : BootCommonConstant</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/2/27 15:53
*/
public interface BootCommonConstant {
/**
* 认证
*/
String AUTHORIZATION = "Authorization";
/**
* 日志追踪
*/
String LOG_TRACK = "x-log-track";
/**
* 微服务
*/
String CLOUD = "x-cloud";
/**
* 微服务Token
*/
String CLOUD_TOKEN = "x-cloud-token";
/**
* 用户ID
*/
String UID = "x-uid";
/**
* 认证信息
*/
String AUTH = "x-auth";
}

View File

@@ -0,0 +1,39 @@
package xtools.boot.api.enums;
/**
* <p>Title : BaseEnum</p>
* <p>Description : BaseEnum</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/2/3 10:31
*/
public interface BaseEnum {
/**
* 获取所有枚举
*
* @return 所有枚举
*/
default BaseEnum[] all() {
return null;
}
/**
* 获取枚举编码
*
* @return 枚举编码
*/
int code();
/**
* 获取枚举说明
*
* @return 枚举说明
*/
String desc();
}

View File

@@ -0,0 +1,122 @@
package xtools.boot.api.enums;
import xtools.base.exception.BaseError;
import xtools.base.exception.BaseErrorModule;
/**
* <p>Title : BootError</p>
* <p>Description : BootError</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2025/12/23 16:53
*/
public enum BootError implements BaseError {
/* api begin */
// 认证异常
UNAUTHORIZED_ERROR(401, "UNAUTHORIZED_ERROR", BootErrorModule.BOOT_API, "{}"),
// 公钥错误
BIZ_PUBLIC_KEY_ERROR(9990, "BIZ_PUBLIC_KEY_ERROR", BootErrorModule.BOOT_API, "{}"),
// 业务警告
BIZ_WARNING(9998, "BIZ_WARNING", BootErrorModule.BOOT_API, "{}"),
// 业务异常
BIZ_ERROR(9999, "BIZ_ERROR", BootErrorModule.BOOT_API, "{}"),
// 结果码异常
RESULT_CODE(10000, "RESULT_CODE", BootErrorModule.BOOT_API, "结果码异常,业务错误码必须大于1000,code:{}"),
/* api end */
/* core begin */
// Spring 核心工具异常
SPRING_BASE(10001, "SPRING_BASE", BootErrorModule.BOOT_CORE, "Spring基本工具异常,操作类型:[{}]"),
// 时间转换异常
TIME_CONVERT(10002, "TIME", BootErrorModule.BOOT_CORE, "时间转换异常,时间:{}"),
/* core end */
/* log begin */
// 日志Holder异常
LOG_HOLDER(10100, "LOG", BootErrorModule.BOOT_LOG, "日志 Holder 异常"),
/* log end */
/* mq begin */
MQ(10200, "MQ", BootErrorModule.BOOT_MQ, "MQ异常,错误:{}"),
/* mq end */;
/**
* 错误码
**/
private final int code;
/**
* 错误类型
**/
private final String type;
/**
* 错误模块
**/
private final BaseErrorModule module;
/**
* 错误消息模板
**/
private final String msgTmp;
/**
* 构造方法
*
* @param code 错误码
* @param type 错误类型
* @param msgTmp 错误消息模板
*/
BootError(int code, String type, BaseErrorModule module, String msgTmp) {
this.code = code;
this.type = type;
this.module = module;
this.msgTmp = msgTmp;
}
/**
* 错误码
*
* @return 错误码
*/
@Override
public int code() {
return this.code;
}
/**
* 错误类型
*
* @return 错误类型
*/
@Override
public String type() {
return this.type;
}
/**
* 错误模块
*
* @return 错误模块
*/
@Override
public BaseErrorModule module() {
return this.module;
}
/**
* 错误消息模板
*
* @return 错误消息模板
*/
@Override
public String msgTmp() {
return this.msgTmp;
}
}

View File

@@ -0,0 +1,51 @@
package xtools.boot.api.enums;
import xtools.base.exception.BaseErrorModule;
/**
* <p>Title : BootErrorModule</p>
* <p>Description : BootErrorModule</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2025/12/23 16:53
*/
public enum BootErrorModule implements BaseErrorModule {
// API模块
BOOT_API("xtools-boot-api"),
// 核心模块
BOOT_CORE("xtools-boot-core"),
// 日志模块
BOOT_LOG("xtools-boot-log"),
// MQ模块
BOOT_MQ("xtools-boot-mq"),
;
/**
* 错误模块
**/
private final String module;
/**
* 构造方法
*
* @param module 错误模块
*/
BootErrorModule(String module) {
this.module = module;
}
/**
* 错误模块
*
* @return 错误模块
*/
@Override
public String module() {
return this.module;
}
}

View File

@@ -0,0 +1,105 @@
package xtools.boot.api.enums;
import java.util.Objects;
/**
* <p>Title : DeleteEnum</p>
* <p>Description : DeleteEnum</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/2/20 11:08
*/
public enum DeleteEnum implements BaseEnum {
// 正常
NORMAL(0, "正常"),
// 删除
DELETE(1, "删除"),
;
/**
* 编码
*/
private final int code;
/**
* 说明
*/
private final String desc;
/**
* 构造函数
*
* @param code 编码
* @param desc 说明
*/
DeleteEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
/**
* 判断枚举值类型
*
* @param code 枚举值
* @return 枚举值类型
*/
public static DeleteEnum valueOf(int code) {
for (DeleteEnum type : values()) {
if (type.code == code) {
return type;
}
}
throw new IllegalArgumentException("unknown code, code=" + code);
}
/**
* 获取枚举值类型
*
* @param desc 枚举说明
* @return 枚举值类型
*/
public static DeleteEnum valueOfDesc(String desc) {
for (DeleteEnum type : values()) {
if (Objects.equals(type.desc, desc)) {
return type;
}
}
throw new IllegalArgumentException("unknown desc, desc=" + desc);
}
/**
* 获取所有枚举
*
* @return 所有枚举
*/
@Override
public BaseEnum[] all() {
return values();
}
/**
* 获取枚举编码
*
* @return 枚举编码
*/
@Override
public int code() {
return code;
}
/**
* 获取枚举说明
*
* @return 枚举说明
*/
@Override
public String desc() {
return desc;
}
}

View File

@@ -0,0 +1,73 @@
package xtools.boot.api.enums;
/**
* <p>Title : FileDataType</p>
* <p>Description : FileDataType</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/6 16:44
*/
public enum FileDataType implements BaseEnum {
// 正常
OK(0, "正常"),
// 临时
TEMP(1, "临时"),
// 待删除
DELETE(2, "待删除");
/**
* 编码
*/
private final int code;
/**
* 说明
*/
private final String desc;
/**
* 构造函数
*
* @param code 编码
* @param desc 说明
*/
FileDataType(int code, String desc) {
this.code = code;
this.desc = desc;
}
/**
* 获取所有枚举
*
* @return 所有枚举
*/
@Override
public BaseEnum[] all() {
return values();
}
/**
* 获取枚举编码
*
* @return 枚举编码
*/
@Override
public int code() {
return code;
}
/**
* 获取枚举说明
*
* @return 枚举说明
*/
@Override
public String desc() {
return desc;
}
}

View File

@@ -0,0 +1,78 @@
package xtools.boot.api.enums;
/**
* <p>Title : ResultType</p>
* <p>Description : ResultType</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/5 14:10
*/
public enum ResultType {
// 请求成功
OK(true, 200, "ok", "请求成功"),
// 服务器内部错误
INTERNAL_SERVER_ERROR(false, 500, "internal_server_error", "服务器内部错误"),
// 请求参数缺失 | 参数格式错误(如:期望数字却传了字符串) | 参数类型不匹配 | JSON/XML格式错误 | 必填参数为空
BAD_REQUEST(false, 400, "bad_request", "请求参数缺失 | 参数格式错误(如:期望数字却传了字符串) | 参数类型不匹配 | JSON/XML格式错误 | 必填参数为空"),
// 认证失败
UNAUTHORIZED(false, 401, "unauthorized", "认证失败"),
// 权限不足
FORBIDDEN(false, 403, "forbidden", "权限不足"),
// 资源不存在
NOT_FOUND(false, 404, "not_found", "资源不存在"),
// 请求方法不被允许
METHOD_NOT_ALLOWED(false, 405, "method_not_allowed", "请求方法不被允许"),
// 请求过于频繁
TOO_MANY_REQUESTS(false, 429, "too_many_requests", "请求过于频繁"),
;
/**
* 是否成功
*/
private final boolean success;
/**
* 响应码
*/
private final int code;
/**
* 响应信息
*/
private final String msg;
/**
* 响应描述
*/
private final String desc;
ResultType(boolean success, int code, String msg, String desc) {
this.success = success;
this.code = code;
this.msg = msg;
this.desc = desc;
}
public boolean success() {
return success;
}
public int code() {
return code;
}
public String msg() {
return msg;
}
public String desc() {
return desc;
}
}

View File

@@ -0,0 +1,105 @@
package xtools.boot.api.enums;
import java.util.Objects;
/**
* <p>Title : StatusEnum</p>
* <p>Description : StatusEnum</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/2/20 11:08
*/
public enum StatusEnum implements BaseEnum {
// 正常
NORMAL(1, "正常"),
// 停用
DISABLED(0, "停用"),
;
/**
* 编码
*/
private final int code;
/**
* 说明
*/
private final String desc;
/**
* 构造函数
*
* @param code 编码
* @param desc 说明
*/
StatusEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
/**
* 判断枚举值类型
*
* @param code 枚举值
* @return 枚举值类型
*/
public static StatusEnum valueOf(int code) {
for (StatusEnum type : values()) {
if (type.code == code) {
return type;
}
}
throw new IllegalArgumentException("unknown code, code=" + code);
}
/**
* 获取枚举值类型
*
* @param desc 枚举说明
* @return 枚举值类型
*/
public static StatusEnum valueOfDesc(String desc) {
for (StatusEnum type : values()) {
if (Objects.equals(type.desc, desc)) {
return type;
}
}
throw new IllegalArgumentException("unknown desc, desc=" + desc);
}
/**
* 获取所有枚举
*
* @return 所有枚举
*/
@Override
public BaseEnum[] all() {
return values();
}
/**
* 获取枚举编码
*
* @return 枚举编码
*/
@Override
public int code() {
return code;
}
/**
* 获取枚举说明
*
* @return 枚举说明
*/
@Override
public String desc() {
return desc;
}
}

View File

@@ -0,0 +1,71 @@
package xtools.boot.api.enums;
/**
* <p>Title : ThreadType</p>
* <p>Description : ThreadType</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/6 16:44
*/
public enum ThreadType implements BaseEnum {
// 主线程
MAIN(0, "主线程"),
// 子线程
THREAD(1, "子线程");
/**
* 编码
*/
private final int code;
/**
* 说明
*/
private final String desc;
/**
* 构造函数
*
* @param code 编码
* @param desc 说明
*/
ThreadType(int code, String desc) {
this.code = code;
this.desc = desc;
}
/**
* 获取所有枚举
*
* @return 所有枚举
*/
@Override
public BaseEnum[] all() {
return values();
}
/**
* 获取枚举编码
*
* @return 枚举编码
*/
@Override
public int code() {
return code;
}
/**
* 获取枚举说明
*
* @return 枚举说明
*/
@Override
public String desc() {
return desc;
}
}

View File

@@ -0,0 +1,27 @@
package xtools.boot.api.exection;
import xtools.base.exception.CommonException;
import xtools.boot.api.enums.BootError;
/**
* <p>Title : BizError</p>
* <p>Description : BizError</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/29 11:08
*/
public class BizError extends CommonException {
/**
* 构造方法
*
* @param message 错误消息
*/
public BizError(String message) {
super(BootError.BIZ_ERROR, message);
}
}

View File

@@ -0,0 +1,27 @@
package xtools.boot.api.exection;
import xtools.base.exception.CommonException;
import xtools.boot.api.enums.BootError;
/**
* <p>Title : BizPublicKeyError</p>
* <p>Description : BizPublicKeyError</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/29 11:08
*/
public class BizPublicKeyError extends CommonException {
/**
* 构造方法
*
* @param message 错误消息
*/
public BizPublicKeyError(String message) {
super(BootError.BIZ_PUBLIC_KEY_ERROR, message);
}
}

View File

@@ -0,0 +1,27 @@
package xtools.boot.api.exection;
import xtools.base.exception.CommonException;
import xtools.boot.api.enums.BootError;
/**
* <p>Title : BizWarning</p>
* <p>Description : BizWarning</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/29 11:08
*/
public class BizWarning extends CommonException {
/**
* 构造方法
*
* @param message 错误消息
*/
public BizWarning(String message) {
super(BootError.BIZ_WARNING, message);
}
}

View File

@@ -0,0 +1,25 @@
package xtools.boot.api.exection;
import xtools.base.exception.CommonException;
import xtools.boot.api.enums.BootError;
/**
* <p>Title : UnauthorizedError</p>
* <p>Description : UnauthorizedError</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/29 11:08
*/
public class UnauthorizedError extends CommonException {
/**
* 构造方法
*/
public UnauthorizedError() {
super(BootError.UNAUTHORIZED_ERROR, "认证异常");
}
}

View File

@@ -0,0 +1,34 @@
package xtools.boot.api.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* <p>Title : EnumInfoDto</p>
* <p>Description : EnumInfoDto</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/2/14 16:30
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EnumInfoDto implements Serializable {
/**
* 枚举值
*/
private int code;
/**
* 枚举说明
*/
private String desc;
}

View File

@@ -0,0 +1,139 @@
package xtools.boot.api.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import xtools.base.config.BaseParams;
import xtools.base.exception.CommonException;
import xtools.boot.api.enums.BootError;
import xtools.boot.api.enums.ResultType;
import xtools.boot.api.exection.BizError;
import java.util.Objects;
/**
* <p>Title : Result</p>
* <p>Description : Result</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2025/12/22 14:07
*/
@Data
public final class Result<T> implements BaseParams {
@Schema(description = "是否成功")
private boolean success;
@Schema(description = "响应代码")
private int code;
@Schema(description = "提示信息")
private Object msg;
@Schema(description = "响应数据")
private T data;
/**
* 构造函数
*/
public Result() {
}
/**
* 构造函数
*
* @param success 是否成功
* @param code 响应代码
* @param msg 提示信息
* @param data 响应数据
*/
public Result(boolean success, int code, Object msg, T data) {
this.success = success;
this.code = code;
this.msg = msg;
this.data = data;
}
/**
* 构造函数
*
* @param type 响应类型
* @param data 数据
*/
public Result(ResultType type, T data) {
this.success = type.success();
this.code = type.code();
this.msg = type.msg() + CP_COMMA + type.desc();
this.data = data;
}
/**
* 请求成功
*
* @return 结果
*/
public static Result<Object> ok() {
return new Result<>(ResultType.OK, null);
}
/**
* 请求成功
*
* @param data 数据
* @param <T> 泛型
* @return 结果
*/
public static <T> Result<T> ok(T data) {
return new Result<>(ResultType.OK, data);
}
/**
* 请求成功,业务失败
*
* @param code 业务错误码
* @param msg 业务错误信息
* @return 响应结果
*/
public static Result<Object> fail(int code, Object msg) {
if (code < CP_NUM1000) {
throw CommonException.create(BootError.RESULT_CODE, code);
}
return new Result<>(true, code, msg, null);
}
/**
* 请求参数缺失 | 参数格式错误(如:期望数字却传了字符串) | 参数类型不匹配 | JSON/XML格式错误 | 必填参数为空
*
* @return 响应结果
*/
public static <T> Result<T> badRequest() {
return new Result<>(ResultType.BAD_REQUEST, null);
}
/**
* 请求参数缺失 | 参数格式错误(如:期望数字却传了字符串) | 参数类型不匹配 | JSON/XML格式错误 | 必填参数为空
*
* @param msg 错误信息
* @return 响应结果
*/
public static <T> Result<T> badRequest(Object msg) {
ResultType type = ResultType.BAD_REQUEST;
return new Result<>(type.success(), type.code(), msg, null);
}
/**
* 获取数据
*
* @return 数据
*/
public T data() {
if (Objects.equals(success, false) || !Objects.equals(code, CP_NUM200)) {
throw new BizError(Objects.isNull(msg) ? "业务处理失败" : String.valueOf(msg));
}
return data;
}
}

View File

@@ -0,0 +1,74 @@
package xtools.boot.api.model.dto.log;
import lombok.Data;
import xtools.base.config.BaseParams;
import xtools.boot.api.enums.ThreadType;
import java.util.concurrent.atomic.AtomicInteger;
/**
* <p>Title : HolderLogTrack</p>
* <p>Description : HolderLogTrack</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/6 16:44
*/
@Data
public class HolderLogTrack implements BaseParams {
/**
* 日志追踪 ID
*/
private final String traceId;
/**
* 父线日志 ID
*/
private final String parentId;
/**
* 线程类型
*/
private final ThreadType type;
/**
* 日志获取次数
*/
private final AtomicInteger count;
/**
* 是否保存日志
*/
private boolean save;
/**
* 构造方法
*
* @param traceId 日志追踪 ID
* @param parentId 父日志 ID
* @param type 线程类型
*/
public HolderLogTrack(String traceId, String parentId, ThreadType type) {
this.save = true;
this.traceId = traceId;
this.parentId = parentId;
this.type = type;
this.count = new AtomicInteger(CP_NUM0);
}
/**
* 构造方法
*
* @param traceId 日志追踪 ID
* @param parentId 父日志 ID
* @param type 线程类型
* @param count 日志获取次数
*/
public HolderLogTrack(String traceId, String parentId, ThreadType type, int count) {
this.save = true;
this.traceId = traceId;
this.parentId = parentId;
this.type = type;
this.count = new AtomicInteger(count);
}
}

View File

@@ -0,0 +1,25 @@
package xtools.boot.api.model.dto.log;
import xtools.boot.api.enums.ThreadType;
/**
* <p>Title : LogTrack</p>
* <p>Description : LogTrack</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @param id 日志 ID
* @param time 日志时间
* @param traceId 日志追踪 ID
* @param parentId 父线日志 ID
* @param type 线程类型
* @param index 日志获取次数
* @param save 是否保存日志
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/6 16:44
*/
public record LogTrack(String id, Long time, String traceId, String parentId, ThreadType type, Integer index,
boolean save) {
}

View File

@@ -0,0 +1,43 @@
package xtools.boot.api.model.dto.page;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* <p>Title : PageReq</p>
* <p>Description : PageReq</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2025/12/22 14:58
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageReq<T> implements Serializable {
/**
* 当前页面
*/
@Schema(description = "当前页面", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer currentPage;
/**
* 页面数据条数
*/
@Schema(description = "页面数据条数", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Integer pageSize;
/**
* 查询条件
*/
@Schema(description = "查询条件")
private T query;
}

View File

@@ -0,0 +1,86 @@
package xtools.boot.api.model.dto.page;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.NoArgsConstructor;
import xtools.core.extend.PagingUtils;
import java.io.Serializable;
import java.util.List;
/**
* <p>Title : PageResp</p>
* <p>Description : PageResp</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2025/12/22 14:58
*/
@Data
@NoArgsConstructor
public final class PageResp<T> implements Serializable {
/**
* 当前页面
*/
@Schema(description = "当前页面")
private Integer currentPage;
/**
* 页面数据条数
*/
@Schema(description = "页面数据条数")
private Integer pageSize;
/**
* 数据条数
*/
@Schema(description = "数据条数")
private Long total;
/**
* 总页数
*/
@Schema(description = "总页数")
private Long pageCount;
/**
* 结果数据集
*/
@Schema(description = "结果数据集")
private List<T> data;
/**
* 构造方法
*
* @param req 分页请求
*/
public PageResp(PageReq<?> req) {
this.currentPage = req.getCurrentPage();
this.pageSize = req.getPageSize();
}
/**
* 构造方法
*
* @param req 分页请求
*/
public PageResp(PageReq<?> req, Long total, List<T> data) {
this.currentPage = req.getCurrentPage();
this.pageSize = req.getPageSize();
this.total = total;
this.data = data;
}
/**
* 获取总页数
*
* @return 总页数
*/
public Long getPageCount() {
return PagingUtils.getLastPage(this.total, this.pageSize);
}
}

View File

@@ -0,0 +1,34 @@
package xtools.boot.api.model.dto.req;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* <p>Title : IdListReq</p>
* <p>Description : IdListReq</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/2/4 11:03
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class IdListReq implements Serializable {
/**
* idList
*/
@NotNull(message = "不能为空")
@Schema(description = "Id列表")
private List<Long> idList;
}

View File

@@ -0,0 +1,47 @@
package xtools.boot.api.model.dto.resp;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* <p>Title : TreeResp</p>
* <p>Description : TreeResp</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/30 09:39
*/
@Data
public class TreeResp implements Serializable {
/**
* 父id
*/
@Schema(description = "父id", example = "1")
private Long parentId;
/**
* 值
*/
@Schema(description = "", example = "1")
private Long value;
/**
* 标签
*/
@Schema(description = "标签", example = "1")
private String label;
/**
* 子项
*/
@Schema(description = "子项")
private List<TreeResp> children;
}

View File

@@ -0,0 +1,28 @@
package xtools.boot.api.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.time.Instant;
/**
* <p>Title : BaseEntity</p>
* <p>Description : BaseEntity</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 5.0.0
* @date : 2026/1/17 18:50
*/
@Data
public class BaseEntity implements Serializable {
@Schema(description = "创建时间", example = "2026-01-05 10:32:00")
private Instant gmtCreate;
@Schema(description = "更新时间", example = "2026-01-05 10:32:00")
private Instant gmtModified;
}