diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousAccess.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousAccess.java index a941eac2..12109384 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousAccess.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousAccess.java @@ -15,7 +15,12 @@ */ package cn.odboy.annotation; -import java.lang.annotation.*; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** * 用于标记匿名访问方法 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java index f37cb132..80b9ef51 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java @@ -16,12 +16,15 @@ package cn.odboy.annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import java.lang.annotation.*; - /** * Annotation for mapping HTTP {@code DELETE} requests onto specific handler methods. 支持匿名访问 DeleteMapping * diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousGetMapping.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousGetMapping.java index e72c492b..af391e10 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousGetMapping.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousGetMapping.java @@ -16,12 +16,15 @@ package cn.odboy.annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import java.lang.annotation.*; - /** * Annotation for mapping HTTP {@code GET} requests onto specific handler methods. *

diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPatchMapping.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPatchMapping.java index 4a49586e..d0930695 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPatchMapping.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPatchMapping.java @@ -16,12 +16,15 @@ package cn.odboy.annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import java.lang.annotation.*; - /** * Annotation for mapping HTTP {@code PATCH} requests onto specific handler methods. 支持匿名访问 PatchMapping * diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPostMapping.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPostMapping.java index aeaa028f..e21e8a4a 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPostMapping.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPostMapping.java @@ -16,12 +16,15 @@ package cn.odboy.annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import java.lang.annotation.*; - /** * Annotation for mapping HTTP {@code POST} requests onto specific handler methods. 支持匿名访问 PostMapping * diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPutMapping.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPutMapping.java index 5f54ef12..a0a7a768 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPutMapping.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousPutMapping.java @@ -16,12 +16,15 @@ package cn.odboy.annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import java.lang.annotation.*; - /** * Annotation for mapping HTTP {@code PUT} requests onto specific handler methods. 支持匿名访问 PutMapping * diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitArgs.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitArgs.java index c60e860b..dd80b505 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitArgs.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitArgs.java @@ -30,14 +30,12 @@ public class KitArgs { @Getter @Setter public static class FindByLongId extends KitObject { - @NotNull(message = "id必填") - private Long id; + @NotNull(message = "id必填") private Long id; } @Getter @Setter public static class DeleteById extends KitObject { - @NotNull(message = "id必填") - private Long id; + @NotNull(message = "id必填") private Long id; } } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseCreateTimeTb.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseCreateTimeTb.java index b37211d0..77702288 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseCreateTimeTb.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseCreateTimeTb.java @@ -19,17 +19,15 @@ package cn.odboy.base; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Date; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; -import java.util.Date; - @Getter @Setter @EqualsAndHashCode(callSuper = false) public class KitBaseCreateTimeTb extends KitObject { - @Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) - @TableField(fill = FieldFill.INSERT) - private Date createTime; + @Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) @TableField(fill = FieldFill.INSERT) private Date + createTime; } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseTimeTb.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseTimeTb.java index 468ab3e2..aa02ba20 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseTimeTb.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseTimeTb.java @@ -19,21 +19,18 @@ package cn.odboy.base; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Date; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; -import java.util.Date; - @Getter @Setter @EqualsAndHashCode(callSuper = false) public class KitBaseTimeTb extends KitObject { - @TableField(fill = FieldFill.INSERT) - @Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) - private Date createTime; + @TableField(fill = FieldFill.INSERT) @Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) private Date + createTime; - @TableField(fill = FieldFill.INSERT_UPDATE) - @Schema(name = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) + @TableField(fill = FieldFill.INSERT_UPDATE) @Schema(name = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) private Date updateTime; } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUpdateTimeTb.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUpdateTimeTb.java index 38c5aa45..b1b9e9ec 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUpdateTimeTb.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUpdateTimeTb.java @@ -19,17 +19,15 @@ package cn.odboy.base; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Date; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; -import java.util.Date; - @Getter @Setter @EqualsAndHashCode(callSuper = false) public class KitBaseUpdateTimeTb extends KitObject { - @Schema(name = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) - @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(name = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserCreateTimeTb.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserCreateTimeTb.java index d0cbc92f..e189efed 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserCreateTimeTb.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserCreateTimeTb.java @@ -19,28 +19,23 @@ package cn.odboy.base; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.reflect.Field; +import java.util.Date; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.builder.ToStringBuilder; import org.springframework.data.annotation.CreatedBy; -import java.lang.reflect.Field; -import java.util.Date; - @Getter @Setter @EqualsAndHashCode(callSuper = false) public class KitBaseUserCreateTimeTb extends KitObject { - @CreatedBy - @TableField(fill = FieldFill.INSERT) - @Schema(name = "创建人", hidden = true) - private String createBy; + @CreatedBy @TableField(fill = FieldFill.INSERT) @Schema(name = "创建人", hidden = true) private String createBy; - @TableField(fill = FieldFill.INSERT) - @Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) - private Date createTime; + @TableField(fill = FieldFill.INSERT) @Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) private Date + createTime; @Override public String toString() { @@ -58,10 +53,8 @@ public class KitBaseUserCreateTimeTb extends KitObject { } /* 分组校验 */ - public @interface Create { - } + public @interface Create {} /* 分组校验 */ - public @interface Update { - } + public @interface Update {} } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserTimeLogicTb.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserTimeLogicTb.java index 824e1bc9..5d0ec87c 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserTimeLogicTb.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserTimeLogicTb.java @@ -20,13 +20,12 @@ import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Date; import lombok.Getter; import lombok.Setter; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.LastModifiedBy; -import java.util.Date; - /** * 逻辑删除通用模型 * @@ -36,22 +35,13 @@ import java.util.Date; @Getter @Setter public class KitBaseUserTimeLogicTb extends KitObject { - @CreatedBy - @TableField(value = "create_by", fill = FieldFill.INSERT) - @Schema(name = "创建人", hidden = true) + @CreatedBy @TableField(value = "create_by", fill = FieldFill.INSERT) @Schema(name = "创建人", hidden = true) private String createBy; - @LastModifiedBy - @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) - @Schema(name = "更新人", hidden = true) - private String updateBy; - @TableField(value = "create_time", fill = FieldFill.INSERT) - @Schema(name = "创建时间", hidden = true) - private Date createTime; - @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) - @Schema(name = "更新时间", hidden = true) + @LastModifiedBy @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) + @Schema(name = "更新人", hidden = true) private String updateBy; + @TableField(value = "create_time", fill = FieldFill.INSERT) @Schema(name = "创建时间", hidden = true) private Date + createTime; + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) @Schema(name = "更新时间", hidden = true) private Date updateTime; - @Schema(name = "数据有效性", hidden = true) - @TableLogic - @TableField("available") - private Integer available; + @Schema(name = "数据有效性", hidden = true) @TableLogic @TableField("available") private Integer available; } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserTimeTb.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserTimeTb.java index 29d74d42..0d40ff03 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserTimeTb.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitBaseUserTimeTb.java @@ -19,6 +19,8 @@ package cn.odboy.base; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.reflect.Field; +import java.util.Date; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @@ -26,30 +28,20 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.LastModifiedBy; -import java.lang.reflect.Field; -import java.util.Date; - @Getter @Setter @EqualsAndHashCode(callSuper = false) public class KitBaseUserTimeTb extends KitObject { - @CreatedBy - @TableField(fill = FieldFill.INSERT) - @Schema(name = "创建人", hidden = true) - private String createBy; + @CreatedBy @TableField(fill = FieldFill.INSERT) @Schema(name = "创建人", hidden = true) private String createBy; - @LastModifiedBy - @TableField(fill = FieldFill.INSERT_UPDATE) - @Schema(name = "更新人", hidden = true) - private String updateBy; + @LastModifiedBy @TableField(fill = FieldFill.INSERT_UPDATE) @Schema(name = "更新人", hidden = true) private String + updateBy; - @TableField(fill = FieldFill.INSERT) - @Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) - private Date createTime; + @TableField(fill = FieldFill.INSERT) @Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) private Date + createTime; - @TableField(fill = FieldFill.INSERT_UPDATE) - @Schema(name = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) + @TableField(fill = FieldFill.INSERT_UPDATE) @Schema(name = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) private Date updateTime; @Override @@ -68,10 +60,8 @@ public class KitBaseUserTimeTb extends KitObject { } /* 分组校验 */ - public @interface Create { - } + public @interface Create {} /* 分组校验 */ - public @interface Update { - } + public @interface Update {} } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitObject.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitObject.java index f4e735bf..42239538 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitObject.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitObject.java @@ -26,6 +26,5 @@ import java.io.Serializable; * @date 2022-01-12 */ public class KitObject implements Serializable { - @Serial - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitPageArgs.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitPageArgs.java index b0729525..7945eb37 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitPageArgs.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitPageArgs.java @@ -19,12 +19,11 @@ package cn.odboy.base; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; +import java.io.Serializable; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import java.io.Serializable; - /** * 数据分页参数 * @@ -35,13 +34,9 @@ import java.io.Serializable; @NoArgsConstructor @AllArgsConstructor public class KitPageArgs implements Serializable { - @NotNull(message = "参数page不能为空") - @Min(value = 1, message = "参数page最小值为1") - @Schema(name = "页码", example = "1") - private Integer page; - @NotNull(message = "参数size不能为空") - @Min(value = 1, message = "参数size最小值为1") - @Schema(name = "每页数据量", example = "10") - private Integer size; + @NotNull(message = "参数page不能为空") @Min(value = 1, message = "参数page最小值为1") + @Schema(name = "页码", example = "1") private Integer page; + @NotNull(message = "参数size不能为空") @Min(value = 1, message = "参数size最小值为1") + @Schema(name = "每页数据量", example = "10") private Integer size; private T args; } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitPageResult.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitPageResult.java index 88ee1a48..67a958c0 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitPageResult.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitPageResult.java @@ -17,14 +17,13 @@ package cn.odboy.base; import com.baomidou.mybatisplus.core.metadata.IPage; +import java.util.ArrayList; +import java.util.List; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; -import java.util.ArrayList; -import java.util.List; - /** * 结果封装类 */ diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitSelectOptionVo.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitSelectOptionVo.java index fd37e725..7f784ed3 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitSelectOptionVo.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/base/KitSelectOptionVo.java @@ -16,9 +16,12 @@ package cn.odboy.base; -import lombok.*; - import java.util.Map; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; /** * 元数据选项 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/BootApplication.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/BootApplication.java index ef9693d6..251f917f 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/BootApplication.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/BootApplication.java @@ -17,14 +17,13 @@ package cn.odboy.framework.context; import cn.hutool.core.util.StrUtil; +import java.net.InetAddress; +import java.net.UnknownHostException; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.core.env.Environment; -import java.net.InetAddress; -import java.net.UnknownHostException; - /** * 主要目的是输出应用的服务地址 * @@ -37,7 +36,8 @@ public class BootApplication { Environment env = application.getEnvironment(); String ip = InetAddress.getLocalHost().getHostAddress(); String port = env.getProperty("server.port"); - String path = StrUtil.isEmpty(env.getProperty("config.servlet.context-path")) ? "" : env.getProperty("config.servlet.context-path"); + String path = StrUtil.isEmpty(env.getProperty("config.servlet.context-path")) ? "" + : env.getProperty("config.servlet.context-path"); log.info(""" ---------------------------------------------------------- \tApplication is running! Access URLs: diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitRequestHolder.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitRequestHolder.java index 944bd124..5f7453aa 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitRequestHolder.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitRequestHolder.java @@ -18,17 +18,17 @@ package cn.odboy.framework.context; import jakarta.servlet.http.HttpServletRequest; +import java.util.Objects; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import java.util.Objects; - /** * 获取 HttpServletRequest */ public class KitRequestHolder { public static HttpServletRequest getHttpServletRequest() { - return ((ServletRequestAttributes)Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); + return ((ServletRequestAttributes)Objects.requireNonNull( + RequestContextHolder.getRequestAttributes())).getRequest(); } } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitScriptHelper.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitScriptHelper.java index 6a7b7261..c24ae120 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitScriptHelper.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitScriptHelper.java @@ -16,13 +16,12 @@ package cn.odboy.framework.context; +import java.util.Map; import lombok.extern.slf4j.Slf4j; import org.mozilla.javascript.Context; import org.mozilla.javascript.Scriptable; import org.springframework.stereotype.Component; -import java.util.Map; - /** * 脚本工具 * diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java index a9985df6..605e42a1 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java @@ -16,6 +16,9 @@ package cn.odboy.framework.context; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; @@ -24,10 +27,6 @@ import org.springframework.context.ApplicationContextAware; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - @Slf4j @SuppressWarnings({"unchecked", "all"}) public class KitSpringBeanHolder implements ApplicationContextAware, DisposableBean { @@ -109,8 +108,8 @@ public class KitSpringBeanHolder implements ApplicationContextAware, DisposableB */ private static void assertContextInjected() { if (applicationContext == null) { - throw new IllegalStateException( - "applicaitonContext属性未注入, 请在applicationContext" + ".xml中定义SpringContextHolder或在SpringBoot启动类中注册SpringContextHolder."); + throw new IllegalStateException("applicaitonContext属性未注入, 请在applicationContext" + + ".xml中定义SpringContextHolder或在SpringBoot启动类中注册SpringContextHolder."); } } @@ -139,7 +138,8 @@ public class KitSpringBeanHolder implements ApplicationContextAware, DisposableB @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (KitSpringBeanHolder.applicationContext != null) { - log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + KitSpringBeanHolder.applicationContext); + log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + + KitSpringBeanHolder.applicationContext); } KitSpringBeanHolder.applicationContext = applicationContext; if (addCallback) { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFace.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFace.java index c1f67785..40cde9d8 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFace.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFace.java @@ -16,7 +16,12 @@ package cn.odboy.framework.logging; -import java.lang.annotation.*; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** * 统计执行时长 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFaceAspect.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFaceAspect.java index bcd41cda..6d166815 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFaceAspect.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/logging/ExecutionTimeStatisticsFaceAspect.java @@ -34,15 +34,18 @@ import org.springframework.stereotype.Component; @Component public class ExecutionTimeStatisticsFaceAspect { @Around("@annotation(executionTimeStatisticsFace)") - public Object aroundFace(ProceedingJoinPoint joinPoint, ExecutionTimeStatisticsFace executionTimeStatisticsFace) throws Throwable { + public Object aroundFace(ProceedingJoinPoint joinPoint, ExecutionTimeStatisticsFace executionTimeStatisticsFace) + throws Throwable { TimeInterval timeInterval = new TimeInterval(); try { Object proceed = joinPoint.proceed(); - log.info("[{}] 接口执行成功,耗时: {} ms", executionTimeStatisticsFace.description(), timeInterval.intervalMs()); + log.info("[{}] 接口执行成功,耗时: {} ms", executionTimeStatisticsFace.description(), + timeInterval.intervalMs()); return proceed; } catch (Exception e) { if (executionTimeStatisticsFace.showErrLog()) { - log.error("[{}] 接口执行失败,耗时: {} ms", executionTimeStatisticsFace.description(), timeInterval.intervalMs(), e); + log.error("[{}] 接口执行失败,耗时: {} ms", executionTimeStatisticsFace.description(), + timeInterval.intervalMs(), e); } throw e; } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/monitor/controller/HealthCheckController.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/monitor/controller/HealthCheckController.java index c2c947b4..e43e36f3 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/monitor/controller/HealthCheckController.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/monitor/controller/HealthCheckController.java @@ -31,8 +31,7 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/healthCheck") @Tag(name = "系统:健康检查接口") public class HealthCheckController { - @Autowired - private KitHealthCheckPointService kitHealthCheckPointService; + @Autowired private KitHealthCheckPointService kitHealthCheckPointService; /** * 就绪检查 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/DataTypeEnum.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/DataTypeEnum.java index 97515e42..164f56f5 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/DataTypeEnum.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/DataTypeEnum.java @@ -94,7 +94,8 @@ public enum DataTypeEnum { private String aliasPrefix; private String aliasSuffix; - DataTypeEnum(String feature, String desc, String driver, String keywordPrefix, String keywordSuffix, String aliasPrefix, String aliasSuffix) { + DataTypeEnum(String feature, String desc, String driver, String keywordPrefix, String keywordSuffix, + String aliasPrefix, String aliasSuffix) { this.feature = feature; this.desc = desc; this.driver = driver; diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MpCustomP6SpyLogger.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MpCustomP6SpyLogger.java index 70c6abac..2a7f2e0e 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MpCustomP6SpyLogger.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MpCustomP6SpyLogger.java @@ -55,13 +55,14 @@ public class MpCustomP6SpyLogger implements MessageFormattingStrategy { * @return 格式化后的sql */ @Override - public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) { + public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, + String sql, String url) { // 去掉换行和多余空格 if (StrUtil.isNotBlank(sql)) { sql = sql.replaceAll("\\s+", " ").trim(); } // 格式化并加上颜色 - return String.format("CuteJava - %s%s%s %s[%s] %sREVIEW_SQL [Interval: %dms]%s -> %s;", RED, now, RESET, GREEN, Thread.currentThread().getName(), BLUE, - elapsed, RESET, sql); + return String.format("CuteJava - %s%s%s %s[%s] %sREVIEW_SQL [Interval: %dms]%s -> %s;", RED, now, RESET, GREEN, + Thread.currentThread().getName(), BLUE, elapsed, RESET, sql); } } \ No newline at end of file diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MpInsertBatchSqlInjector.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MpInsertBatchSqlInjector.java index 88c8402e..26d140da 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MpInsertBatchSqlInjector.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MpInsertBatchSqlInjector.java @@ -22,9 +22,8 @@ import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.extension.injector.methods.AlwaysUpdateSomeColumnById; import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn; -import org.apache.ibatis.session.Configuration; - import java.util.List; +import org.apache.ibatis.session.Configuration; /** * 批量插入SQL注入器 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/RemoveDruidAdConfig.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/RemoveDruidAdConfig.java index 40c239dc..0b96f6c1 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/RemoveDruidAdConfig.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/RemoveDruidAdConfig.java @@ -19,9 +19,15 @@ package cn.odboy.framework.mybatisplus.config; import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure; import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties; import com.alibaba.druid.util.Utils; -import jakarta.servlet.*; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; @@ -29,13 +35,12 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.io.IOException; - @Configuration @SuppressWarnings({"unchecked", "all"}) @ConditionalOnWebApplication @AutoConfigureAfter(DruidDataSourceAutoConfigure.class) -@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true", matchIfMissing = true) +@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true", + matchIfMissing = true) public class RemoveDruidAdConfig { /** @@ -62,7 +67,8 @@ public class RemoveDruidAdConfig { } @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest)request; HttpServletResponse httpResponse = (HttpServletResponse)response; if (httpRequest.getRequestURI().endsWith("js/common.js")) { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpAnyQUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpAnyQUtil.java index 644a89c6..c46d8ed2 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpAnyQUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpAnyQUtil.java @@ -20,7 +20,6 @@ import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - import java.util.ArrayList; import java.util.List; @@ -69,7 +68,8 @@ public class KitMpAnyQUtil { return baseMapper.selectPage(page, queryWrapper); } - public static Page selectPage(BaseMapper baseMapper, Page page, Object queryParams, Class mapperClazz) { + public static Page selectPage(BaseMapper baseMapper, Page page, Object queryParams, + Class mapperClazz) { QueryWrapper queryWrapper = KitMpQUtil.build(queryParams); Page tPage = baseMapper.selectPage(page, queryWrapper); Page mapperTarget = new Page<>(); diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpCmdGenUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpCmdGenUtil.java index 6ada1734..961bdfa6 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpCmdGenUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpCmdGenUtil.java @@ -21,7 +21,12 @@ import cn.odboy.base.KitBaseUserTimeTb; import cn.odboy.framework.exception.BadRequestException; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.FastAutoGenerator; -import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.GlobalConfig; +import com.baomidou.mybatisplus.generator.config.IDbQuery; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.PackageConfig; +import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; @@ -29,13 +34,12 @@ import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; -import lombok.Data; -import org.apache.ibatis.annotations.Mapper; - import java.sql.Types; import java.util.Collections; import java.util.List; import java.util.function.Consumer; +import lombok.Data; +import org.apache.ibatis.annotations.Mapper; /** * 代码生成器入口 @@ -67,14 +71,16 @@ public class KitMpCmdGenUtil { private static Consumer getEntityConfigConsumer() { return strategyConfigBuilder -> strategyConfigBuilder.entityBuilder().enableLombok() // 如果不需要生成注解, 去掉.enableTableFieldAnnotation() - .enableTableFieldAnnotation().enableFileOverride().naming(NamingStrategy.underline_to_camel).columnNaming(NamingStrategy.underline_to_camel) - .idType(IdType.AUTO); + .enableTableFieldAnnotation().enableFileOverride().naming(NamingStrategy.underline_to_camel) + .columnNaming(NamingStrategy.underline_to_camel).idType(IdType.AUTO); } private static Consumer getStrategyConfigConsumer(List tableNames) { - return strategyConfigBuilder -> strategyConfigBuilder.enableCapitalMode().enableSkipView().disableSqlFilter().addInclude(tableNames) + return strategyConfigBuilder -> strategyConfigBuilder.enableCapitalMode().enableSkipView().disableSqlFilter() + .addInclude(tableNames) // 实体类生成策略 - .entityBuilder().superClass(KitBaseUserTimeTb.class).addIgnoreColumns("create_time", "update_time", "create_by", "update_by") + .entityBuilder().superClass(KitBaseUserTimeTb.class) + .addIgnoreColumns("create_time", "update_time", "create_by", "update_by") // 开启生成实体时生成字段注解。 // 会在实体类的属性前,添加[@TableField("nickname")] .enableTableFieldAnnotation().disableSerialVersionUID() @@ -99,13 +105,13 @@ public class KitMpCmdGenUtil { private static Consumer getGlobalConfigConsumer() { String outputDir = projectRootPath + "CodeGen"; - return globalConfigBuilder -> globalConfigBuilder.enableSwagger().outputDir(outputDir).author("codegen").commentDate("yyyy-MM-dd") - .dateType(DateType.TIME_PACK); + return globalConfigBuilder -> globalConfigBuilder.enableSwagger().outputDir(outputDir).author("codegen") + .commentDate("yyyy-MM-dd").dateType(DateType.TIME_PACK); } private static Consumer getStrategyConfigConsumer() { - return strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder().mapperAnnotation(Mapper.class).formatMapperFileName("%sMapper") - .formatXmlFileName("%sMapper").entityBuilder().formatFileName("%sTb"); + return strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder().mapperAnnotation(Mapper.class) + .formatMapperFileName("%sMapper").formatXmlFileName("%sMapper").entityBuilder().formatFileName("%sTb"); } private static Consumer getDataSourceConfigConsumer() { @@ -138,7 +144,8 @@ public class KitMpCmdGenUtil { this.parentModuleName = moduleName; // 1.数据库配置 DataSourceConfig.Builder dataSourceConfigBuilder = - new DataSourceConfig.Builder(this.databaseUrl, this.databaseUsername, this.databasePassword).driverClassName(this.driverClassName); + new DataSourceConfig.Builder(this.databaseUrl, this.databaseUsername, + this.databasePassword).driverClassName(this.driverClassName); dataSourceConfigBuilder.dbQuery(DB_QUERY); dataSourceConfigBuilder.keyWordsHandler(new MySqlKeyWordsHandler()); // 1.1.快速生成器 @@ -168,7 +175,8 @@ public class KitMpCmdGenUtil { fastAutoGenerator.strategyConfig(getStrategyConfigConsumer(tableNames)); if (tablePrefix != null) { // 表前缀, 可多个 - fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.addTablePrefix(tablePrefix)); + fastAutoGenerator.strategyConfig( + strategyConfigBuilder -> strategyConfigBuilder.addTablePrefix(tablePrefix)); } // 5.1.Entity策略配置 // 生成实体时生成字段的注解, 包括@TableId注解等 @@ -178,10 +186,13 @@ public class KitMpCmdGenUtil { fastAutoGenerator.strategyConfig(getEntityConfigConsumer()); // 5.2.Controller策略配置 // 开启生成@RestController控制器 - fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder().enableRestStyle()); - // 如果不需要生成Controller, fastAutoGenerator.templateConfig(templateConfig -> templateConfig.controller(""))。5.3.Service策略配置:格式化service接口和实现类的文件名称, 去掉默认的ServiceName前面的I fastAutoGenerator.strategyConfig( - strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder().formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImpl")); + strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder().enableRestStyle()); + // 如果不需要生成Controller, fastAutoGenerator.templateConfig(templateConfig -> templateConfig.controller(""))。5.3 + // .Service策略配置:格式化service接口和实现类的文件名称, 去掉默认的ServiceName前面的I + fastAutoGenerator.strategyConfig( + strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder().formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl")); // 5.4.Mapper策略配置 // 格式化 mapper文件名,格式化xml实现类文件名称 fastAutoGenerator.strategyConfig(getStrategyConfigConsumer()); @@ -194,8 +205,9 @@ public class KitMpCmdGenUtil { if (StrUtil.isBlank(this.parentModuleName)) { throw new BadRequestException("模块名称必填"); } - return packageConfigBuilder -> packageConfigBuilder.parent(this.parentPackageName).moduleName(this.parentModuleName).entity("dal.dataobject") - .mapper("dal.mysql").service("service").serviceImpl("service.impl").controller("controller") + return packageConfigBuilder -> packageConfigBuilder.parent(this.parentPackageName) + .moduleName(this.parentModuleName).entity("dal.dataobject").mapper("dal.mysql").service("service") + .serviceImpl("service.impl").controller("controller") .pathInfo(Collections.singletonMap(OutputFile.xml, mapperPath)); } } \ No newline at end of file diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpQUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpQUtil.java index f8c509c7..dc8bf54b 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpQUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/KitMpQUtil.java @@ -29,10 +29,13 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; -import lombok.extern.slf4j.Slf4j; - import java.lang.reflect.Field; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import lombok.extern.slf4j.Slf4j; /** * 查询条件创建工具 @@ -77,7 +80,8 @@ public class KitMpQUtil { return StrUtil.toUnderlineCase(attributeName); } - private static void handleWrapper(KitMpQuery q, QueryWrapper queryWrapper, String attributeName, Object fieldVal) { + private static void handleWrapper(KitMpQuery q, QueryWrapper queryWrapper, String attributeName, + Object fieldVal) { switch (q.type()) { case EQUAL -> queryWrapper.eq(attributeName, fieldVal); case GREATER_THAN -> queryWrapper.ge(attributeName, fieldVal); @@ -97,7 +101,8 @@ public class KitMpQUtil { } } - private static void handleInOrNotQuery(boolean b, QueryWrapper queryWrapper, String attributeName, Object fieldVal) { + private static void handleInOrNotQuery(boolean b, QueryWrapper queryWrapper, String attributeName, + Object fieldVal) { Collection wrapNotInVal = (Collection)fieldVal; if (CollectionUtil.isNotEmpty(wrapNotInVal)) { Optional anyValOptional = wrapNotInVal.stream().findAny(); @@ -122,7 +127,8 @@ public class KitMpQUtil { } } - private static void handleBetweenQuery(QueryWrapper queryWrapper, Object fieldVal, String finalAttributeName) { + private static void handleBetweenQuery(QueryWrapper queryWrapper, Object fieldVal, + String finalAttributeName) { if (fieldVal instanceof List) { List between = new ArrayList<>((List)fieldVal); int minLength = 2; @@ -182,14 +188,10 @@ public class KitMpQUtil { @TableName("test_domain") private static class TestDomain { - @NotNull(groups = KitBaseUserTimeTb.Update.class) - @TableId(value = "user_id", type = IdType.AUTO) - private Long id; - @TableField(value = "dept_id") - private Long deptId; - @NotBlank - private String username; - @NotBlank - private String nickName; + @NotNull(groups = KitBaseUserTimeTb.Update.class) @TableId(value = "user_id", type = IdType.AUTO) private Long + id; + @TableField(value = "dept_id") private Long deptId; + @NotBlank private String username; + @NotBlank private String nickName; } } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpMapper.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpMapper.java index fed74bed..b41ad9f5 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpMapper.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpMapper.java @@ -26,15 +26,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.apache.ibatis.annotations.Param; -import org.springframework.data.domain.Pageable; - import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.apache.ibatis.annotations.Param; +import org.springframework.data.domain.Pageable; /** * 公共抽象Mapper接口类 @@ -137,7 +136,8 @@ public interface KitMpMapper extends BaseMapper { * @param clazz 期望的对象类型 * @return IPage */ - default KitPageResult queryFeatureClazzPage(Pageable pageable, LambdaQueryWrapper wrapper, Class clazz) { + default KitPageResult queryFeatureClazzPage(Pageable pageable, LambdaQueryWrapper wrapper, + Class clazz) { int pageNumber = pageable.getPageNumber(); int pageSize = pageable.getPageSize(); pageNumber = pageNumber <= 0 ? 1 : pageNumber; @@ -157,7 +157,8 @@ public interface KitMpMapper extends BaseMapper { * @param clazz 期望的对象类型 * @return IPage */ - default KitPageResult queryFeatureClazzPage(Pageable pageable, LambdaQueryChainWrapper wrapper, Class clazz) { + default KitPageResult queryFeatureClazzPage(Pageable pageable, LambdaQueryChainWrapper wrapper, + Class clazz) { int pageNumber = pageable.getPageNumber(); int pageSize = pageable.getPageSize(); pageNumber = pageNumber <= 0 ? 1 : pageNumber; diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpService.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpService.java index d75208ef..d8929d75 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpService.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpService.java @@ -21,7 +21,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.service.IService; - import java.io.Serializable; import java.util.Collection; import java.util.List; @@ -59,7 +58,8 @@ public interface KitMpService extends IService { KitPageResult queryClazzPageByArgs(LambdaQueryWrapper wrapper, IPage pageable); - KitPageResult queryFeatureClazzPageByArgs(LambdaQueryWrapper wrapper, IPage pageable, Class targetClazz); + KitPageResult queryFeatureClazzPageByArgs(LambdaQueryWrapper wrapper, IPage pageable, + Class targetClazz); KitPageResult queryFeatureClazzPageByArgs(Q criteria, IPage pageable, Class targetClazz); diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpServiceImpl.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpServiceImpl.java index 75a881f2..fc79e640 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpServiceImpl.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/KitMpServiceImpl.java @@ -27,11 +27,10 @@ import com.baomidou.mybatisplus.core.enums.SqlMethod; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.apache.ibatis.binding.MapperMethod; - import java.io.Serializable; import java.util.Collection; import java.util.List; +import org.apache.ibatis.binding.MapperMethod; /** * 公共抽象Mapper接口类 @@ -138,7 +137,8 @@ public class KitMpServiceImpl, T> extends ServiceImpl List queryFeatureClazzListByIds(List ids, Class targetClazz) { List entitys = this.listByIds(ids); - return entitys == null || entitys.isEmpty() ? CollUtil.newArrayList() : BeanUtil.copyToList(entitys, targetClazz); + return entitys == null || entitys.isEmpty() ? CollUtil.newArrayList() + : BeanUtil.copyToList(entitys, targetClazz); } /** @@ -209,18 +209,21 @@ public class KitMpServiceImpl, T> extends ServiceImpl KitPageResult queryFeatureClazzPageByArgs(LambdaQueryWrapper wrapper, IPage pageable, Class targetClazz) { + public KitPageResult queryFeatureClazzPageByArgs(LambdaQueryWrapper wrapper, IPage pageable, + Class targetClazz) { if (wrapper == null) { wrapper = new LambdaQueryWrapper<>(); } IPage originPageData = baseMapper.selectPage(pageable, wrapper); - return new KitPageResult<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), originPageData.getTotal()); + return new KitPageResult<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), + originPageData.getTotal()); } public KitPageResult queryFeatureClazzPageByArgs(Q criteria, IPage pageable, Class targetClazz) { QueryWrapper wrapper = KitMpQUtil.build(criteria); IPage originPageData = baseMapper.selectPage(pageable, wrapper); - return new KitPageResult<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), originPageData.getTotal()); + return new KitPageResult<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), + originPageData.getTotal()); } public KitPageResult queryClazzPageByArgs(Q criteria, IPage pageable) { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/properties/AppProperties.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/properties/AppProperties.java index a6d75448..641bed53 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/properties/AppProperties.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/properties/AppProperties.java @@ -16,7 +16,12 @@ package cn.odboy.framework.properties; -import cn.odboy.framework.properties.model.*; +import cn.odboy.framework.properties.model.CaptchaModel; +import cn.odboy.framework.properties.model.ContentRsaEncodeSettingModel; +import cn.odboy.framework.properties.model.JwtAuthSettingModel; +import cn.odboy.framework.properties.model.StorageOSSModel; +import cn.odboy.framework.properties.model.ThreadPoolSettingModel; +import cn.odboy.framework.properties.model.UserLoginSettingModel; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginCaptchaSettingModel.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginCaptchaSettingModel.java index 480b25f0..0de54afe 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginCaptchaSettingModel.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginCaptchaSettingModel.java @@ -20,13 +20,16 @@ import cn.hutool.core.util.StrUtil; import cn.odboy.base.KitObject; import cn.odboy.constant.CaptchaCodeEnum; import cn.odboy.framework.exception.BadRequestException; -import com.wf.captcha.*; +import com.wf.captcha.ArithmeticCaptcha; +import com.wf.captcha.ChineseCaptcha; +import com.wf.captcha.ChineseGifCaptcha; +import com.wf.captcha.GifCaptcha; +import com.wf.captcha.SpecCaptcha; import com.wf.captcha.base.Captcha; +import java.awt.Font; import lombok.Getter; import lombok.Setter; -import java.awt.*; - /** * 验证码配置 * diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/quartz/core/QuartzRunnable.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/quartz/core/QuartzRunnable.java index 4a8285e9..14b30340 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/quartz/core/QuartzRunnable.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/quartz/core/QuartzRunnable.java @@ -17,13 +17,12 @@ package cn.odboy.framework.quartz.core; import cn.odboy.framework.context.KitSpringBeanHolder; +import java.lang.reflect.Method; +import java.util.concurrent.Callable; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.util.ReflectionUtils; -import java.lang.reflect.Method; -import java.util.concurrent.Callable; - /** * 执行定时任务 */ @@ -33,7 +32,8 @@ public class QuartzRunnable implements Callable { private final Method method; private final String params; - public QuartzRunnable(String beanName, String methodName, String params) throws NoSuchMethodException, SecurityException { + public QuartzRunnable(String beanName, String methodName, String params) + throws NoSuchMethodException, SecurityException { this.target = KitSpringBeanHolder.getBean(beanName); this.params = params; if (StringUtils.isNotBlank(params)) { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java index 404bd042..12001523 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java @@ -21,17 +21,27 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson2.JSON; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.*; +import org.springframework.data.redis.core.ConvertingCursor; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisConnectionUtils; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ScanOptions; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Component; -import java.util.*; -import java.util.concurrent.TimeUnit; - @Component @SuppressWarnings({"unchecked", "all"}) public class KitRedisHelper { @@ -204,8 +214,8 @@ public class KitRedisHelper { public void scanDel(String pattern) { ScanOptions options = ScanOptions.scanOptions().match(pattern).build(); try (Cursor cursor = redisTemplate.executeWithStickyConnection( - (RedisCallback>)connection -> (Cursor)new ConvertingCursor<>(connection.scan(options), - redisTemplate.getKeySerializer()::deserialize))) { + (RedisCallback>)connection -> (Cursor)new ConvertingCursor<>( + connection.scan(options), redisTemplate.getKeySerializer()::deserialize))) { while (cursor.hasNext()) { redisTemplate.delete(cursor.next()); } @@ -293,7 +303,8 @@ public class KitRedisHelper { public List multiGet(List keys) { List list = redisTemplate.opsForValue().multiGet(Sets.newHashSet(keys)); List resultList = Lists.newArrayList(); - Optional.ofNullable(list).ifPresent(e -> list.forEach(ele -> Optional.ofNullable(ele).ifPresent(resultList::add))); + Optional.ofNullable(list) + .ifPresent(e -> list.forEach(ele -> Optional.ofNullable(ele).ifPresent(resultList::add))); return resultList; } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java index 39f02286..1192857d 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java @@ -19,6 +19,10 @@ package cn.odboy.framework.redis; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONFactory; import com.alibaba.fastjson2.JSONWriter; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.MurmurHash3; import org.springframework.boot.autoconfigure.AutoConfigureBefore; @@ -39,11 +43,6 @@ import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.SerializationException; import org.springframework.data.redis.serializer.StringRedisSerializer; -import java.nio.charset.StandardCharsets; -import java.time.Duration; -import java.util.HashMap; -import java.util.Map; - @Slf4j @Configuration @EnableCaching @@ -53,7 +52,8 @@ public class RedisConfiguration { * 自动识别json对象白名单配置(仅允许解析的包名, 范围越小越安全)
未配置可能导致, 登录失败, 反复登录等问题 */ private static final String[] WHITELIST_STR = - {"org.springframework", "cn.odboy.system.dal.dataobject", "cn.odboy.system.dal.model", "cn.odboy.task.dal.dataobject", "cn.odboy.task.dal.model",}; + {"org.springframework", "cn.odboy.system.dal.dataobject", "cn.odboy.system.dal.model", + "cn.odboy.task.dal.dataobject", "cn.odboy.task.dal.model",}; /** * 设置 redis 数据默认过期时间,默认2小时 设置@cacheable 序列化方式 @@ -62,7 +62,8 @@ public class RedisConfiguration { public RedisCacheConfiguration redisCacheConfiguration() { FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); - configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)) + configuration = configuration.serializeValuesWith( + RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)) .entryTtl(Duration.ofHours(2)); return configuration; } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/config/AsyncTheadPoolConfig.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/config/AsyncTheadPoolConfig.java index 82532f1b..8803ae92 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/config/AsyncTheadPoolConfig.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/config/AsyncTheadPoolConfig.java @@ -19,6 +19,12 @@ package cn.odboy.framework.server.config; import cn.odboy.framework.properties.AppProperties; import cn.odboy.framework.properties.model.ThreadPoolSettingModel; import com.alibaba.ttl.TtlRunnable; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -26,17 +32,13 @@ import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicInteger; - /** * 创建自定义的线程池 */ @EnableAsync @Configuration public class AsyncTheadPoolConfig implements AsyncConfigurer { - @Autowired - private AppProperties properties; + @Autowired private AppProperties properties; /** * 自定义线程池, 用法 @Async @@ -49,8 +51,10 @@ public class AsyncTheadPoolConfig implements AsyncConfigurer { // 自定义工厂 ThreadFactory factory = r -> new Thread(r, "DefaultAsync-" + new AtomicInteger(1).getAndIncrement()); // 自定义线程池 - return new ThreadPoolExecutor(asyncTaskPool.getCorePoolSize(), asyncTaskPool.getMaxPoolSize(), asyncTaskPool.getKeepAliveSeconds(), TimeUnit.SECONDS, - new ArrayBlockingQueue<>(asyncTaskPool.getQueueCapacity()), factory, new ThreadPoolExecutor.CallerRunsPolicy()); + return new ThreadPoolExecutor(asyncTaskPool.getCorePoolSize(), asyncTaskPool.getMaxPoolSize(), + asyncTaskPool.getKeepAliveSeconds(), TimeUnit.SECONDS, + new ArrayBlockingQueue<>(asyncTaskPool.getQueueCapacity()), factory, + new ThreadPoolExecutor.CallerRunsPolicy()); } /** diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/converters/DateStringArraysToListDateConverter.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/converters/DateStringArraysToListDateConverter.java index 20b7f30c..4ec41f37 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/converters/DateStringArraysToListDateConverter.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/converters/DateStringArraysToListDateConverter.java @@ -16,19 +16,19 @@ package cn.odboy.framework.server.converters; -import org.springframework.core.convert.converter.Converter; -import org.springframework.stereotype.Component; - import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; @Component public class DateStringArraysToListDateConverter implements Converter> { - private static final ThreadLocal SDF = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); + private static final ThreadLocal SDF = + ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); @Override public List convert(String[] source) { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/converters/DateStringToDateConverter.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/converters/DateStringToDateConverter.java index e7fe40ba..fb44c7bd 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/converters/DateStringToDateConverter.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/converters/DateStringToDateConverter.java @@ -17,16 +17,16 @@ package cn.odboy.framework.server.converters; import cn.hutool.core.util.StrUtil; -import org.springframework.core.convert.converter.Converter; -import org.springframework.stereotype.Component; - import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; @Component public class DateStringToDateConverter implements Converter { - private static final ThreadLocal SDF = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); + private static final ThreadLocal SDF = + ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); @Override public Date convert(String source) { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java index e33307e0..edd9eaae 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java @@ -21,6 +21,9 @@ import cn.odboy.framework.server.converters.DateStringToDateConverter; import com.alibaba.fastjson2.JSONWriter; import com.alibaba.fastjson2.support.config.FastJsonConfig; import com.alibaba.fastjson2.support.spring6.http.converter.FastJsonHttpMessageConverter; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -35,10 +38,6 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.List; - /** * 跨越、静态资源映射、Http消息转换 * @@ -48,12 +47,9 @@ import java.util.List; @Configuration @EnableWebMvc public class ConfigurerAdapter implements WebMvcConfigurer { - @Autowired - private DateStringArraysToListDateConverter dateStringArraysToListDateConverter; - @Autowired - private DateStringToDateConverter dateStringToDateConverter; - @Autowired - private KitFileLocalUploadHelper fileUploadPathHelper; + @Autowired private DateStringArraysToListDateConverter dateStringArraysToListDateConverter; + @Autowired private DateStringToDateConverter dateStringToDateConverter; + @Autowired private KitFileLocalUploadHelper fileUploadPathHelper; @Bean public CorsFilter corsFilter() { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/config/UndertowWebSocketConfig.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/config/UndertowWebSocketConfig.java index f49cadfd..4676ca40 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/config/UndertowWebSocketConfig.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/config/UndertowWebSocketConfig.java @@ -7,7 +7,8 @@ import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.stereotype.Component; /** - * 解决启动io.undertow.websockets.jsr UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used的警告 + * 解决启动io.undertow.websockets.jsr UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be + * used的警告 * * @author odboy * @date 2025-10-30 @@ -34,8 +35,10 @@ public class UndertowWebSocketConfig implements WebServerFactoryCustomizer { WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo(); - webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(false, bufferSize, maxPoolSize, threadLocalCacheSize)); - deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo); + webSocketDeploymentInfo.setBuffers( + new DefaultByteBufferPool(false, bufferSize, maxPoolSize, threadLocalCacheSize)); + deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", + webSocketDeploymentInfo); }); } } \ No newline at end of file diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/KitWsClientManager.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/KitWsClientManager.java index 3123c732..0cdb851d 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/KitWsClientManager.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/KitWsClientManager.java @@ -16,11 +16,10 @@ package cn.odboy.framework.websocket.context; -import lombok.extern.slf4j.Slf4j; - import java.util.Collection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import lombok.extern.slf4j.Slf4j; /** * WebSocket客户端管理 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/KitWsServer.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/KitWsServer.java index c9ecaf2f..ff455bba 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/KitWsServer.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/KitWsServer.java @@ -17,16 +17,19 @@ package cn.odboy.framework.websocket.context; import com.alibaba.fastjson2.JSON; -import jakarta.websocket.*; +import jakarta.websocket.OnClose; +import jakarta.websocket.OnError; +import jakarta.websocket.OnMessage; +import jakarta.websocket.OnOpen; +import jakarta.websocket.Session; import jakarta.websocket.server.PathParam; import jakarta.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.Objects; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.io.IOException; -import java.util.Objects; - @Slf4j @Component @ServerEndpoint("/websocket/{sid}") @@ -62,7 +65,8 @@ public class KitWsServer { KitWsMessage wsMessage = JSON.parseObject(message, KitWsMessage.class); String bizCode = wsMessage.getBizCode(); Object data = wsMessage.getData(); - log.info("收到来 sid={} 的信息: message={}, bizCode={}, data={}", sid, message, bizCode, JSON.toJSONString(data)); + log.info("收到来 sid={} 的信息: message={}, bizCode={}, data={}", sid, message, bizCode, + JSON.toJSONString(data)); } /** diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitAnonTagUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitAnonTagUtil.java index d151792a..dd3849db 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitAnonTagUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitAnonTagUtil.java @@ -19,6 +19,13 @@ package cn.odboy.util; import cn.odboy.annotation.AnonymousAccess; import cn.odboy.constant.RequestMethodEnum; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import lombok.experimental.UtilityClass; import org.springframework.context.ApplicationContext; import org.springframework.web.bind.annotation.RequestMethod; @@ -27,8 +34,6 @@ import org.springframework.web.servlet.mvc.condition.PathPatternsRequestConditio import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; -import java.util.*; - /** * 匿名标记工具 */ @@ -42,7 +47,8 @@ public class KitAnonTagUtil { * @return / */ public static Map> getAnonymousUrl(final ApplicationContext applicationContext) { - RequestMappingHandlerMapping requestMappingHandlerMapping = applicationContext.getBean(RequestMappingHandlerMapping.class); + RequestMappingHandlerMapping requestMappingHandlerMapping = + applicationContext.getBean(RequestMappingHandlerMapping.class); Map handlerMethodMap = requestMappingHandlerMapping.getHandlerMethods(); Map> anonymousUrls = new HashMap<>(8); // 获取匿名标记 @@ -56,8 +62,10 @@ public class KitAnonTagUtil { HandlerMethod handlerMethod = infoEntry.getValue(); AnonymousAccess anonymousAccess = handlerMethod.getMethodAnnotation(AnonymousAccess.class); if (null != anonymousAccess && infoEntry.getKey() != null) { - List requestMethods = new ArrayList<>(infoEntry.getKey().getMethodsCondition().getMethods()); - RequestMethodEnum request = RequestMethodEnum.find(requestMethods.isEmpty() ? RequestMethodEnum.ALL.getType() : requestMethods.get(0).name()); + List requestMethods = + new ArrayList<>(infoEntry.getKey().getMethodsCondition().getMethods()); + RequestMethodEnum request = RequestMethodEnum.find( + requestMethods.isEmpty() ? RequestMethodEnum.ALL.getType() : requestMethods.get(0).name()); PathPatternsRequestCondition pathPatternsCondition = infoEntry.getKey().getPathPatternsCondition(); if (pathPatternsCondition != null) { switch (Objects.requireNonNull(request)) { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBase64SecretUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBase64SecretUtil.java index 1c9370d4..2ac024e6 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBase64SecretUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBase64SecretUtil.java @@ -18,9 +18,8 @@ package cn.odboy.util; import cn.hutool.core.codec.Base64Encoder; import cn.hutool.core.util.IdUtil; -import lombok.experimental.UtilityClass; - import java.nio.charset.StandardCharsets; +import lombok.experimental.UtilityClass; /** * 加密令牌生成工具 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBigDecimalUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBigDecimalUtil.java index b03d595f..07d8ed64 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBigDecimalUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBigDecimalUtil.java @@ -17,10 +17,9 @@ package cn.odboy.util; -import lombok.experimental.UtilityClass; - import java.math.BigDecimal; import java.math.RoundingMode; +import lombok.experimental.UtilityClass; /** * 计算类 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBrowserUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBrowserUtil.java index f30de21f..4d69851d 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBrowserUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitBrowserUtil.java @@ -19,11 +19,10 @@ package cn.odboy.util; import cn.hutool.http.useragent.UserAgent; import cn.hutool.http.useragent.UserAgentUtil; import jakarta.servlet.http.HttpServletRequest; -import lombok.experimental.UtilityClass; -import lombok.extern.slf4j.Slf4j; - import java.net.InetAddress; import java.net.UnknownHostException; +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; /** * 浏览器 相关 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitClassUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitClassUtil.java index 9574530e..663fe582 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitClassUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitClassUtil.java @@ -17,11 +17,10 @@ package cn.odboy.util; -import lombok.experimental.UtilityClass; - import java.lang.reflect.Field; import java.util.Arrays; import java.util.List; +import lombok.experimental.UtilityClass; /** * 类 相关 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitCloseUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitCloseUtil.java index f9e22228..012b21b2 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitCloseUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitCloseUtil.java @@ -17,9 +17,8 @@ package cn.odboy.util; -import lombok.experimental.UtilityClass; - import java.io.Closeable; +import lombok.experimental.UtilityClass; /** * 用于关闭各种连接, 缺啥补啥 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitCollUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitCollUtil.java index cc78a7fd..0719a568 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitCollUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitCollUtil.java @@ -18,15 +18,19 @@ package cn.odboy.util; import cn.odboy.base.KitSelectOptionVo; import com.alibaba.fastjson2.JSON; -import lombok.experimental.UtilityClass; - import java.lang.reflect.Field; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; +import lombok.experimental.UtilityClass; /** * 集合工具 @@ -61,7 +65,8 @@ public final class KitCollUtil extends cn.hutool.core.collection.CollUtil { * @param / * @return / */ - public static > List streamAscSort(List data, Function keyExtractor) { + public static > List streamAscSort(List data, + Function keyExtractor) { return data.stream().sorted(Comparator.comparing(keyExtractor)).toList(); } @@ -76,7 +81,8 @@ public final class KitCollUtil extends cn.hutool.core.collection.CollUtil { * @param / * @return / */ - public static > List streamDescSort(List data, Function keyExtractor) { + public static > List streamDescSort(List data, + Function keyExtractor) { return data.stream().sorted(Comparator.comparing(keyExtractor).reversed()).toList(); } @@ -93,7 +99,8 @@ public final class KitCollUtil extends cn.hutool.core.collection.CollUtil { * @param / * @return / */ - public static Map streamToMap(List data, Function keyMapper, Function valueMapper) { + public static Map streamToMap(List data, Function keyMapper, + Function valueMapper) { // 根据key去重再并流 return streamDistinct(data, keyMapper).stream().collect(Collectors.toMap(keyMapper, valueMapper)); } @@ -185,7 +192,8 @@ public final class KitCollUtil extends cn.hutool.core.collection.CollUtil { * @return / */ public static BigDecimal streamBigDecimalAvg(List data) { - return data.stream().filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(data.size()), 6, RoundingMode.FLOOR); + return data.stream().filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add) + .divide(BigDecimal.valueOf(data.size()), 6, RoundingMode.FLOOR); } public static void main(String[] args) { @@ -204,7 +212,8 @@ public final class KitCollUtil extends cn.hutool.core.collection.CollUtil { System.out.println(JSON.toJSONString(selectOptions2)); List selectOptions3 = KitCollUtil.streamDistinct(testData, KitSelectOptionVo::getValue); System.out.println(JSON.toJSONString(selectOptions3)); - Map selectMap1 = KitCollUtil.streamToMap(testData, KitSelectOptionVo::getValue, KitSelectOptionVo::getLabel); + Map selectMap1 = + KitCollUtil.streamToMap(testData, KitSelectOptionVo::getValue, KitSelectOptionVo::getLabel); System.out.println(JSON.toJSONString(selectMap1)); // 这只是一个示范 BigDecimal total1 = KitCollUtil.streamBigDecimalAdd(testData, "value"); diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDateUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDateUtil.java index 5384efb4..f00f1e22 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDateUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDateUtil.java @@ -18,9 +18,8 @@ package cn.odboy.util; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; -import lombok.experimental.UtilityClass; - import java.util.Date; +import lombok.experimental.UtilityClass; /** * 时间相关工具 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDesEncryptUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDesEncryptUtil.java index c5af74e6..1133c91b 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDesEncryptUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDesEncryptUtil.java @@ -16,14 +16,13 @@ package cn.odboy.util; -import lombok.experimental.UtilityClass; - +import java.nio.charset.StandardCharsets; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.IvParameterSpec; -import java.nio.charset.StandardCharsets; +import lombok.experimental.UtilityClass; /** * DES加密 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDistributedIdUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDistributedIdUtil.java index 5287bc67..3b5c1812 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDistributedIdUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitDistributedIdUtil.java @@ -17,7 +17,6 @@ package cn.odboy.util; import cn.odboy.framework.exception.BadRequestException; - import java.util.concurrent.atomic.AtomicLong; /** @@ -96,7 +95,8 @@ public final class KitDistributedIdUtil { * @param workerIdBits 机器 ID 所占位数 * @param sequenceBits 序列号所占位数 */ - public KitDistributedIdUtil(long dataCenterId, long workerId, long dataCenterIdBits, long workerIdBits, long sequenceBits) { + public KitDistributedIdUtil(long dataCenterId, long workerId, long dataCenterIdBits, long workerIdBits, + long sequenceBits) { this.dataCenterIdBits = dataCenterIdBits; this.workerIdBits = workerIdBits; this.sequenceBits = sequenceBits; @@ -110,7 +110,8 @@ public final class KitDistributedIdUtil { this.timestampLeftShift = sequenceBits + workerIdBits + dataCenterIdBits; if (dataCenterId > maxDataCenterId || dataCenterId < 0) { - throw new IllegalArgumentException("Data center ID can't be greater than " + maxDataCenterId + " or less than 0"); + throw new IllegalArgumentException( + "Data center ID can't be greater than " + maxDataCenterId + " or less than 0"); } if (workerId > maxWorkerId || workerId < 0) { throw new IllegalArgumentException("Worker ID can't be greater than " + maxWorkerId + " or less than 0"); @@ -154,7 +155,9 @@ public final class KitDistributedIdUtil { // 如果当前时间戳小于上一次生成 ID 的时间戳, 说明时钟回拨,抛出异常 if (currentTimestamp < lastTimestamp.get()) { - throw new BadRequestException("Clock moved backwards. Refusing to generate id for " + (lastTimestamp.get() - currentTimestamp) + " milliseconds"); + throw new BadRequestException( + "Clock moved backwards. Refusing to generate id for " + (lastTimestamp.get() - currentTimestamp) + + " milliseconds"); } long lastTimestampValue = lastTimestamp.get(); @@ -165,12 +168,14 @@ public final class KitDistributedIdUtil { // 序列号溢出,等待下一毫秒 currentTimestamp = waitNextMillis(lastTimestampValue); } - return ((currentTimestamp - START_TIMESTAMP) << timestampLeftShift) | (dataCenterId << dataCenterIdShift) | (workerId << workerIdShift) | seq; + return ((currentTimestamp - START_TIMESTAMP) << timestampLeftShift) | (dataCenterId << dataCenterIdShift) | + (workerId << workerIdShift) | seq; } else { // 时间戳改变,重置序列号 sequence.set(0L); lastTimestamp.set(currentTimestamp); - return ((currentTimestamp - START_TIMESTAMP) << timestampLeftShift) | (dataCenterId << dataCenterIdShift) | (workerId << workerIdShift); + return ((currentTimestamp - START_TIMESTAMP) << timestampLeftShift) | (dataCenterId << dataCenterIdShift) | + (workerId << workerIdShift); } } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitFileUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitFileUtil.java index d732b63a..c58eecfd 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitFileUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitFileUtil.java @@ -26,13 +26,11 @@ import cn.odboy.framework.exception.BadRequestException; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import lombok.experimental.UtilityClass; -import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.IOUtils; -import org.apache.poi.xssf.streaming.SXSSFSheet; -import org.springframework.web.multipart.MultipartFile; - -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.nio.file.Files; import java.security.MessageDigest; import java.text.DecimalFormat; @@ -41,8 +39,16 @@ import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.springframework.web.multipart.MultipartFile; -import static cn.odboy.constant.SystemConst.*; +import static cn.odboy.constant.SystemConst.SYMBOL_ADD; +import static cn.odboy.constant.SystemConst.SYMBOL_AT; +import static cn.odboy.constant.SystemConst.SYMBOL_EQUAL; +import static cn.odboy.constant.SystemConst.SYMBOL_SUBTRACT; /** * File工具类, 扩展 hutool 工具包 @@ -189,8 +195,8 @@ public final class KitFileUtil extends cn.hutool.core.io.FileUtil { map.forEach((key, value) -> { if (value instanceof String strValue) { // 检查并处理以特殊字符开头的值 - if (strValue.startsWith(SYMBOL_EQUAL) || strValue.startsWith(SYMBOL_ADD) || strValue.startsWith(SYMBOL_SUBTRACT) || strValue.startsWith( - SYMBOL_AT)) { + if (strValue.startsWith(SYMBOL_EQUAL) || strValue.startsWith(SYMBOL_ADD) || + strValue.startsWith(SYMBOL_SUBTRACT) || strValue.startsWith(SYMBOL_AT)) { // 添加单引号前缀 strValue = "'" + strValue; } @@ -322,7 +328,8 @@ public final class KitFileUtil extends cn.hutool.core.io.FileUtil { * @param response / * @param file / */ - public static void downloadFile(HttpServletRequest request, HttpServletResponse response, File file, boolean deleteOnExit) { + public static void downloadFile(HttpServletRequest request, HttpServletResponse response, File file, + boolean deleteOnExit) { response.setCharacterEncoding(request.getCharacterEncoding()); response.setContentType("application/octet-stream"); FileInputStream fis = null; @@ -379,7 +386,8 @@ public final class KitFileUtil extends cn.hutool.core.io.FileUtil { fileName = fileName.replaceAll("^\\.+/", ""); // 保留文件名中最后一个 "." 字符,过滤掉其他 "." - fileName = fileName.replaceAll("^(.*)(\\.[^.]*)$", "$1").replaceAll("\\.", "") + fileName.replaceAll("^(.*)(\\.[^.]*)$", "$2"); + fileName = fileName.replaceAll("^(.*)(\\.[^.]*)$", "$1").replaceAll("\\.", "") + + fileName.replaceAll("^(.*)(\\.[^.]*)$", "$2"); return fileName; } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitIPUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitIPUtil.java index 5f318219..7ce06d80 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitIPUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitIPUtil.java @@ -17,13 +17,12 @@ package cn.odboy.util; import cn.odboy.framework.context.KitSpringBeanHolder; -import lombok.experimental.UtilityClass; -import net.dreamlu.mica.ip2region.core.Ip2regionSearcher; -import net.dreamlu.mica.ip2region.core.IpInfo; - import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; +import lombok.experimental.UtilityClass; +import net.dreamlu.mica.ip2region.core.Ip2regionSearcher; +import net.dreamlu.mica.ip2region.core.IpInfo; /** * IP地址 相关 @@ -55,10 +54,12 @@ public final class KitIPUtil { try { InetAddress candidateAddress = null; // 遍历所有的网络接口 - for (Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements(); ) { + for (Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); + interfaces.hasMoreElements(); ) { NetworkInterface anInterface = interfaces.nextElement(); // 在所有的接口下再遍历IP - for (Enumeration inetAddresses = anInterface.getInetAddresses(); inetAddresses.hasMoreElements(); ) { + for (Enumeration inetAddresses = anInterface.getInetAddresses(); + inetAddresses.hasMoreElements(); ) { InetAddress inetAddr = inetAddresses.nextElement(); // 排除loopback类型地址 if (!inetAddr.isLoopbackAddress()) { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitJsonUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitJsonUtil.java index 0e97fcae..04db1aa5 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitJsonUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitJsonUtil.java @@ -18,10 +18,9 @@ package cn.odboy.util; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.TypeReference; -import lombok.experimental.UtilityClass; - import java.util.List; import java.util.Map; +import lombok.experimental.UtilityClass; /** * Json工具 @@ -32,13 +31,11 @@ import java.util.Map; @UtilityClass public final class KitJsonUtil { public static Map toMap(String jsonStr, Class kClass, Class vClass) { - return JSON.parseObject(jsonStr, new TypeReference<>() { - }); + return JSON.parseObject(jsonStr, new TypeReference<>() {}); } public static List toList(String jsonStr, Class vClass) { - return JSON.parseObject(jsonStr, new TypeReference<>() { - }); + return JSON.parseObject(jsonStr, new TypeReference<>() {}); } public static void main(String[] args) { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitListUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitListUtil.java index 7ca9a785..0bb742d0 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitListUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitListUtil.java @@ -18,12 +18,11 @@ package cn.odboy.util; import cn.hutool.core.date.DateTime; import cn.odboy.base.KitBaseUserTimeTb; -import lombok.experimental.UtilityClass; - import java.util.ArrayList; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; +import lombok.experimental.UtilityClass; /** * List 工具 @@ -40,12 +39,14 @@ public final class KitListUtil { * @param classifier 对象T属性表达式, 比如: User::getName */ public static List distinctByArgs(List items, Function classifier) { - return items.stream().collect(Collectors.groupingBy(classifier)).values().stream().map(monitorItem -> monitorItem.iterator().next()).toList(); + return items.stream().collect(Collectors.groupingBy(classifier)).values().stream() + .map(monitorItem -> monitorItem.iterator().next()).toList(); } /** - * list转map, 保留新值 -> Map userMap = items.stream().collect(Collectors.toMap(User::getName, user -> user))
list转map, 保留旧值 -> Map userMap = users.stream().collect(Collectors.toMap(User::getName, user -> user, (existing, replacement) -> existing)); + * list转map, 保留新值 -> Map userMap = items.stream().collect(Collectors.toMap(User::getName, user -> + * user))
list转map, 保留旧值 -> Map userMap = users.stream().collect(Collectors.toMap(User::getName, + * user -> user, (existing, replacement) -> existing)); */ public static void main(String[] args) { List entities = new ArrayList<>(); diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitPageUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitPageUtil.java index 40227de6..c5e41d16 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitPageUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitPageUtil.java @@ -20,11 +20,10 @@ import cn.odboy.base.KitPageResult; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.experimental.UtilityClass; - import java.util.ArrayList; import java.util.Collections; import java.util.List; +import lombok.experimental.UtilityClass; /** * 分页工具 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitResourceTemplateUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitResourceTemplateUtil.java index d62cf1de..3310ae53 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitResourceTemplateUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitResourceTemplateUtil.java @@ -34,7 +34,8 @@ import lombok.experimental.UtilityClass; public class KitResourceTemplateUtil { public static String render(String moduleName, String filename, Dict params) { String path = StrUtil.isBlank(moduleName) ? "template" : "template/" + moduleName; - TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig(path, TemplateConfig.ResourceMode.CLASSPATH)); + TemplateEngine engine = + TemplateUtil.createEngine(new TemplateConfig(path, TemplateConfig.ResourceMode.CLASSPATH)); Template template = engine.getTemplate(filename); return template.render(params); } diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitReturnValueHandleUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitReturnValueHandleUtil.java index 5a44daa4..9871ccda 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitReturnValueHandleUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitReturnValueHandleUtil.java @@ -17,14 +17,13 @@ package cn.odboy.util; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.reflect.MethodSignature; - import java.lang.reflect.Method; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.reflect.MethodSignature; /** * 返回值处理 工具 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitRsaEncryptUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitRsaEncryptUtil.java index 920557f0..6a6a0801 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitRsaEncryptUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitRsaEncryptUtil.java @@ -16,16 +16,20 @@ package cn.odboy.util; -import lombok.experimental.UtilityClass; -import org.apache.commons.codec.binary.Base64; - -import javax.crypto.Cipher; import java.io.ByteArrayOutputStream; -import java.security.*; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; +import javax.crypto.Cipher; +import lombok.experimental.UtilityClass; +import org.apache.commons.codec.binary.Base64; /** * Rsa 工具类, 公钥私钥生成, 加解密 diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitStringUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitStringUtil.java index f6b186e2..ff51f821 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitStringUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitStringUtil.java @@ -17,11 +17,10 @@ package cn.odboy.util; -import lombok.experimental.UtilityClass; -import lombok.extern.slf4j.Slf4j; - import java.util.Calendar; import java.util.Date; +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; /** * 字符串工具类, 继承org.apache.commons.lang3.StringUtils类 @@ -35,7 +34,8 @@ public final class KitStringUtil { /** * 驼峰命名法工具 * - * @return toCamelCase(" hello_world ") == "helloWorld" toCapitalizeCamelCase("hello_world") == "HelloWorld" toUnderScoreCase("helloWorld") = "hello_world" + * @return toCamelCase(" hello_world ") == "helloWorld" toCapitalizeCamelCase("hello_world") == "HelloWorld" + * toUnderScoreCase("helloWorld") = "hello_world" */ public static String toCamelCase(String s) { if (s == null) { @@ -65,7 +65,8 @@ public final class KitStringUtil { /** * 驼峰命名法工具 * - * @return toCamelCase(" hello_world ") == "helloWorld" toCapitalizeCamelCase("hello_world") == "HelloWorld" toUnderScoreCase("helloWorld") = "hello_world" + * @return toCamelCase(" hello_world ") == "helloWorld" toCapitalizeCamelCase("hello_world") == "HelloWorld" + * toUnderScoreCase("helloWorld") = "hello_world" */ public static String toCapitalizeCamelCase(String s) { if (s == null) { @@ -78,7 +79,8 @@ public final class KitStringUtil { /** * 驼峰命名法工具 * - * @return toCamelCase(" hello_world ") == "helloWorld" toCapitalizeCamelCase("hello_world") == "HelloWorld" toUnderScoreCase("helloWorld") = "hello_world" + * @return toCamelCase(" hello_world ") == "helloWorld" toCapitalizeCamelCase("hello_world") == "HelloWorld" + * toUnderScoreCase("helloWorld") = "hello_world" */ public static String toUnderScoreCase(String s) { if (s == null) { diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitValidUtil.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitValidUtil.java index bc676827..6148b1ce 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitValidUtil.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/util/KitValidUtil.java @@ -22,10 +22,9 @@ import jakarta.validation.Validation; import jakarta.validation.Validator; import jakarta.validation.ValidatorFactory; import jakarta.validation.groups.Default; -import lombok.experimental.UtilityClass; - import java.util.Set; import java.util.stream.Collectors; +import lombok.experimental.UtilityClass; /** * Bean验证工具 @@ -46,7 +45,8 @@ public final class KitValidUtil { public static void validate(T object) { Set> violations = VALIDATOR.validate(object, Default.class); if (!violations.isEmpty()) { - throw new BadRequestException(violations.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(","))); + throw new BadRequestException( + violations.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(","))); } } } \ No newline at end of file diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/constant/SystemCaptchaBizEnum.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/constant/SystemCaptchaBizEnum.java index a1c7663d..6c41976f 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/constant/SystemCaptchaBizEnum.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/constant/SystemCaptchaBizEnum.java @@ -27,7 +27,8 @@ import lombok.Getter; public enum SystemCaptchaBizEnum { /* 通过手机号码重置邮箱 */ - PHONE_RESET_EMAIL_CODE("10000", "phone_reset_email_code_", "SystemEmailCaptchaTemplate.ftl", "通过手机号码重置邮箱"), + PHONE_RESET_EMAIL_CODE("10000", "phone_reset_email_code_", "SystemEmailCaptchaTemplate.ftl", + "通过手机号码重置邮箱"), /* 通过旧邮箱重置邮箱 */ EMAIL_RESET_EMAIL_CODE("10001", "email_reset_email_code_", "SystemEmailCaptchaTemplate.ftl", "通过旧邮箱重置邮箱"), diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java index 0b0f52b1..01b96f58 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java @@ -38,6 +38,9 @@ import com.wf.captcha.base.Captcha; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -51,10 +54,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; - /** * 授权、根据token获取用户详细信息 */ @@ -63,24 +62,20 @@ import java.util.concurrent.TimeUnit; @RequestMapping("/auth") @Tag(name = "系统:系统授权接口") public class SystemAuthController { - @Autowired - private KitRedisHelper redisHelper; - @Autowired - private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; - @Autowired - private TokenProvider tokenProvider; - @Autowired - private AppProperties properties; - @Autowired - private PasswordEncoder passwordEncoder; - @Autowired - private UserDetailsHandler userDetailsService; + @Autowired private KitRedisHelper redisHelper; + @Autowired private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; + @Autowired private TokenProvider tokenProvider; + @Autowired private AppProperties properties; + @Autowired private PasswordEncoder passwordEncoder; + @Autowired private UserDetailsHandler userDetailsService; @Operation(summary = "登录授权") @AnonymousPostMapping(value = "/login") - public ResponseEntity> login(@Validated @RequestBody SystemUserLoginArgs loginRequest, HttpServletRequest request) throws Exception { + public ResponseEntity> login(@Validated @RequestBody SystemUserLoginArgs loginRequest, + HttpServletRequest request) throws Exception { // 密码解密 - String password = KitRsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), loginRequest.getPassword()); + String password = + KitRsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), loginRequest.getPassword()); // 查询验证码 String code = redisHelper.get(loginRequest.getUuid(), String.class); // 清除验证码 @@ -97,7 +92,8 @@ public class SystemAuthController { if (!passwordEncoder.matches(password, jwtUser.getPassword())) { throw new BadRequestException("登录密码错误"); } - Authentication authentication = new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities()); + Authentication authentication = + new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authentication); // 生成令牌 String token = tokenProvider.createToken(jwtUser); @@ -119,7 +115,7 @@ public class SystemAuthController { @Operation(summary = "获取用户信息") @PostMapping(value = "/info") public ResponseEntity getUserInfo() { - SystemUserJwtVo jwtUser = (SystemUserJwtVo) KitSecurityHelper.getCurrentUser(); + SystemUserJwtVo jwtUser = (SystemUserJwtVo)KitSecurityHelper.getCurrentUser(); SystemUserInfoVo userInfoVo = BeanUtil.copyProperties(jwtUser, SystemUserInfoVo.class); return ResponseEntity.ok(userInfoVo); } @@ -132,11 +128,13 @@ public class SystemAuthController { String uuid = SystemCacheKey.CAPTCHA_LOGIN + IdUtil.simpleUUID(); //当验证码类型为 arithmetic时且长度 >= 2 时, captcha.text()的结果有几率为浮点型 String captchaValue = captcha.text(); - if (captcha.getCharType() - 1 == CaptchaCodeEnum.ARITHMETIC.ordinal() && captchaValue.contains(SystemConst.SYMBOL_DOT)) { + if (captcha.getCharType() - 1 == CaptchaCodeEnum.ARITHMETIC.ordinal() && + captchaValue.contains(SystemConst.SYMBOL_DOT)) { captchaValue = captchaValue.split("\\.")[0]; } // 保存 - redisHelper.set(uuid, captchaValue, properties.getLogin().getCaptchaSetting().getExpiration(), TimeUnit.MINUTES); + redisHelper.set(uuid, captchaValue, properties.getLogin().getCaptchaSetting().getExpiration(), + TimeUnit.MINUTES); // 验证码信息 Map imgResult = new HashMap<>(2) {{ put("img", captcha.toBase64()); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemCaptchaController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemCaptchaController.java index 8e136cef..a11bcaad 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemCaptchaController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemCaptchaController.java @@ -25,14 +25,17 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/captcha") @Tag(name = "系统:验证码管理") public class SystemCaptchaController { - @Autowired - private SystemEmailService systemEmailService; + @Autowired private SystemEmailService systemEmailService; @Operation(summary = "重置邮箱, 发送验证码") @PostMapping(value = "/sendResetEmailCaptcha") diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemComponentController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemComponentController.java index f35ac21b..c1bd9196 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemComponentController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemComponentController.java @@ -30,8 +30,7 @@ import org.springframework.web.bind.annotation.RestController; @Tag(name = "系统:组件数据源") @RequestMapping("/api/component") public class SystemComponentController { - @Autowired - private SystemDeptService systemDeptService; + @Autowired private SystemDeptService systemDeptService; @Operation(summary = "查询部门下拉选择数据源") @PostMapping(value = "/queryDeptSelectDataSource") diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDeptController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDeptController.java index 35abc201..042eda7c 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDeptController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDeptController.java @@ -26,23 +26,26 @@ import cn.odboy.util.KitPageUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; @RestController @Tag(name = "系统:部门管理") @RequestMapping("/api/dept") public class SystemDeptController { - @Autowired - private SystemDeptService systemDeptService; + @Autowired private SystemDeptService systemDeptService; @Operation(summary = "导出部门数据") @GetMapping(value = "/download") @@ -54,7 +57,8 @@ public class SystemDeptController { @Operation(summary = "查询部门") @PostMapping @PreAuthorize("@el.check('user:list','dept:list')") - public ResponseEntity> queryDept(@Validated @RequestBody KitPageArgs args) throws Exception { + public ResponseEntity> queryDept( + @Validated @RequestBody KitPageArgs args) throws Exception { SystemQueryDeptArgs criteria = args.getArgs(); List depts = systemDeptService.queryAllDept(criteria, true); return ResponseEntity.ok(KitPageUtil.toPage(depts)); @@ -64,7 +68,7 @@ public class SystemDeptController { @PostMapping("/queryDeptSuperiorTree") @PreAuthorize("@el.check('user:list','dept:list')") public ResponseEntity> queryDeptSuperiorTree(@RequestBody List ids, - @RequestParam(defaultValue = "false") Boolean exclude) { + @RequestParam(defaultValue = "false") Boolean exclude) { Set deptSet = new LinkedHashSet<>(); for (Long id : ids) { // 同级数据 diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictController.java index d22d6a9a..6e50e79d 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictController.java @@ -26,22 +26,24 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.io.IOException; -import java.util.List; -import java.util.Set; +import org.springframework.web.bind.annotation.GetMapping; +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; @RestController @Tag(name = "系统:字典管理") @RequestMapping("/api/dict") public class SystemDictController { - @Autowired - private SystemDictService systemDictService; + @Autowired private SystemDictService systemDictService; @Operation(summary = "导出字典数据") @GetMapping(value = "/download") @@ -60,7 +62,8 @@ public class SystemDictController { @Operation(summary = "查询字典") @PostMapping @PreAuthorize("@el.check('dict:list')") - public ResponseEntity> queryDictByArgs(@Validated @RequestBody KitPageArgs args) { + public ResponseEntity> queryDictByArgs( + @Validated @RequestBody KitPageArgs args) { Page page; SystemQueryDictArgs criteria = args.getArgs(); if (args.getSize() != null) { diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictDetailController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictDetailController.java index cd5f9fe7..46ce4414 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictDetailController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictDetailController.java @@ -20,37 +20,43 @@ import cn.odboy.base.KitPageArgs; import cn.odboy.base.KitPageResult; import cn.odboy.system.dal.dataobject.SystemDictDetailTb; import cn.odboy.system.dal.model.SystemCreateDictDetailArgs; +import cn.odboy.system.dal.model.SystemDictDetailVo; import cn.odboy.system.dal.model.SystemQueryDictDetailArgs; import cn.odboy.system.service.SystemDictDetailService; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import org.springframework.web.bind.annotation.GetMapping; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; @RestController @Tag(name = "系统:字典详情管理") @RequestMapping("/api/dictDetail") public class SystemDictDetailController { - @Autowired - private SystemDictDetailService systemDictDetailService; + @Autowired private SystemDictDetailService systemDictDetailService; @Operation(summary = "查询字典详情") @PostMapping - public ResponseEntity> queryDictDetailByCrud(@Validated @RequestBody KitPageArgs args) { + public ResponseEntity> queryDictDetailByCrud( + @Validated @RequestBody KitPageArgs args) { return queryDictDetailByArgs(args); } @Operation(summary = "查询字典详情") @PostMapping(value = "/queryDictDetailByArgs") - public ResponseEntity> queryDictDetailByArgs(@Validated @RequestBody KitPageArgs args) { + public ResponseEntity> queryDictDetailByArgs( + @Validated @RequestBody KitPageArgs args) { SystemQueryDictDetailArgs criteria = args.getArgs(); Page page = new Page<>(args.getPage(), args.getSize()); return ResponseEntity.ok(systemDictDetailService.queryDictDetailByArgs(criteria, page)); @@ -58,9 +64,9 @@ public class SystemDictDetailController { @Operation(summary = "查询多个字典详情") @GetMapping(value = "/getDictDetailMaps") - public ResponseEntity>> getDictDetailMaps(@RequestParam String dictName) { + public ResponseEntity>> getDictDetailMaps(@RequestParam String dictName) { String[] names = dictName.split("[,, ]"); - Map> dictMap = new HashMap<>(16); + Map> dictMap = new HashMap<>(16); for (String name : names) { dictMap.put(name, systemDictDetailService.queryDictDetailByName(name)); } @@ -78,7 +84,8 @@ public class SystemDictDetailController { @Operation(summary = "修改字典详情") @PostMapping(value = "/modifyDictDetailById") @PreAuthorize("@el.check('dict:edit')") - public ResponseEntity modifyDictDetailById(@Validated(SystemDictDetailTb.Update.class) @RequestBody SystemDictDetailTb args) { + public ResponseEntity modifyDictDetailById( + @Validated(SystemDictDetailTb.Update.class) @RequestBody SystemDictDetailTb args) { systemDictDetailService.modifyDictDetailById(args); return ResponseEntity.ok(null); } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemEmailController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemEmailController.java index 197fdfb3..0039c75c 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemEmailController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemEmailController.java @@ -36,8 +36,7 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("api/email") @Tag(name = "工具:邮件管理") public class SystemEmailController { - @Autowired - private SystemEmailService systemEmailService; + @Autowired private SystemEmailService systemEmailService; @Operation(summary = "查询配置") @PostMapping(value = "/getLastEmailConfig") @@ -47,7 +46,8 @@ public class SystemEmailController { @Operation(summary = "配置邮件") @PostMapping(value = "/modifyEmailConfig") - public ResponseEntity modifyEmailConfig(@Validated @RequestBody SystemEmailConfigTb emailConfig) throws Exception { + public ResponseEntity modifyEmailConfig(@Validated @RequestBody SystemEmailConfigTb emailConfig) + throws Exception { systemEmailService.modifyEmailConfig(emailConfig); return ResponseEntity.ok(null); } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemJobController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemJobController.java index 5c5c4d66..d5b23cc0 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemJobController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemJobController.java @@ -26,21 +26,23 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.io.IOException; -import java.util.Set; +import org.springframework.web.bind.annotation.GetMapping; +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; @RestController @Tag(name = "系统:岗位管理") @RequestMapping("/api/job") public class SystemJobController { - @Autowired - private SystemJobService systemJobService; + @Autowired private SystemJobService systemJobService; @Operation(summary = "导出岗位数据") @GetMapping(value = "/download") @@ -52,7 +54,8 @@ public class SystemJobController { @Operation(summary = "查询岗位") @PostMapping(value = "/queryAllEnableJob") @PreAuthorize("@el.check('job:list','user:list')") - public ResponseEntity> queryJobByArgs(@Validated @RequestBody KitPageArgs args) { + public ResponseEntity> queryJobByArgs( + @Validated @RequestBody KitPageArgs args) { SystemQueryJobArgs criteria = args.getArgs(); Page page = new Page<>(criteria.getPage(), criteria.getSize()); return ResponseEntity.ok(systemJobService.queryJobByArgs(criteria, page)); @@ -61,7 +64,8 @@ public class SystemJobController { @Operation(summary = "查询岗位") @PostMapping @PreAuthorize("@el.check('job:list','user:list')") - public ResponseEntity> queryJobByCrud(@Validated @RequestBody KitPageArgs args) { + public ResponseEntity> queryJobByCrud( + @Validated @RequestBody KitPageArgs args) { return queryJobByArgs(args); } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemLocalStorageController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemLocalStorageController.java index 558a4708..59912dd0 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemLocalStorageController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemLocalStorageController.java @@ -28,26 +28,30 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; - @RestController @Tag(name = "工具:本地存储管理") @RequestMapping("/api/localStorage") public class SystemLocalStorageController { - @Autowired - private SystemLocalStorageService localStorageService; + @Autowired private SystemLocalStorageService localStorageService; @Operation(summary = "查询文件") @PostMapping @PreAuthorize("@el.check('storage:list')") - public ResponseEntity> queryLocalStorage(@Validated @RequestBody KitPageArgs args) { + public ResponseEntity> queryLocalStorage( + @Validated @RequestBody KitPageArgs args) { SystemQueryStorageArgs criteria = args.getArgs(); Page page = new Page<>(criteria.getPage(), criteria.getSize()); return ResponseEntity.ok(localStorageService.queryLocalStorage(criteria, page)); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMenuController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMenuController.java index 8dae6aa5..b1eb4474 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMenuController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMenuController.java @@ -30,23 +30,29 @@ import cn.odboy.util.KitPageUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.*; -import java.util.stream.Collectors; +import org.springframework.web.bind.annotation.GetMapping; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; @RestController @Tag(name = "系统:菜单管理") @RequestMapping("/api/menu") public class SystemMenuController { - @Autowired - private SystemMenuService systemMenuService; - @Autowired - private SystemMenuMapper systemMenuMapper; + @Autowired private SystemMenuService systemMenuService; + @Autowired private SystemMenuMapper systemMenuMapper; @Operation(summary = "导出菜单数据") @GetMapping(value = "/download") @@ -85,14 +91,16 @@ public class SystemMenuController { @PostMapping @Operation(summary = "查询菜单") @PreAuthorize("@el.check('menu:list')") - public ResponseEntity> queryAllMenuByCrud(@Validated @RequestBody KitPageArgs args) throws Exception { + public ResponseEntity> queryAllMenuByCrud( + @Validated @RequestBody KitPageArgs args) throws Exception { return queryAllMenu(args); } @PostMapping(value = "/queryMenuByArgs") @Operation(summary = "查询菜单") @PreAuthorize("@el.check('menu:list')") - public ResponseEntity> queryAllMenu(@Validated @RequestBody KitPageArgs args) throws Exception { + public ResponseEntity> queryAllMenu( + @Validated @RequestBody KitPageArgs args) throws Exception { SystemQueryMenuArgs criteria = args.getArgs(); List menuList = systemMenuService.queryAllMenu(criteria, true); return ResponseEntity.ok(KitPageUtil.toPage(menuList)); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMonitorController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMonitorController.java index 4a39e7a5..abe78b1e 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMonitorController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMonitorController.java @@ -19,6 +19,7 @@ package cn.odboy.system.controller; import cn.odboy.system.service.SystemMonitorService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; @@ -26,14 +27,11 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.Map; - @RestController @Tag(name = "系统-服务监控管理") @RequestMapping("/api/monitor") public class SystemMonitorController { - @Autowired - private SystemMonitorService systemMonitorService; + @Autowired private SystemMonitorService systemMonitorService; @PostMapping(value = "/queryServerMonitorInfo") @Operation(summary = "查询服务监控") diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java index c610cad7..57d3a177 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java @@ -26,26 +26,29 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.io.IOException; -import java.util.Set; +import org.springframework.web.bind.annotation.GetMapping; +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; @RestController @RequestMapping("/api/user/online") @Tag(name = "系统:在线用户管理") public class SystemOnlineController { - @Autowired - private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; + @Autowired private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; @Operation(summary = "查询在线用户") @PostMapping @PreAuthorize("@el.check()") - public ResponseEntity> queryOnlineUser(@Validated @RequestBody KitPageArgs args) { + public ResponseEntity> queryOnlineUser( + @Validated @RequestBody KitPageArgs args) { IPage page = new Page<>(args.getPage(), args.getSize()); return ResponseEntity.ok(systemUserOnlineInfoDAO.queryUserOnlineModelPage(args.getArgs(), page)); } @@ -54,7 +57,8 @@ public class SystemOnlineController { @GetMapping(value = "/download") @PreAuthorize("@el.check()") public void exportOnlineUser(HttpServletResponse response, String username) throws IOException { - systemUserOnlineInfoDAO.downloadUserOnlineModelExcel(systemUserOnlineInfoDAO.queryUserOnlineModelListByUsername(username), response); + systemUserOnlineInfoDAO.downloadUserOnlineModelExcel( + systemUserOnlineInfoDAO.queryUserOnlineModelListByUsername(username), response); } @Operation(summary = "踢出用户") diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOssStorageController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOssStorageController.java index c4938c69..a5ea18b0 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOssStorageController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOssStorageController.java @@ -26,28 +26,32 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; - @Slf4j @RestController @Tag(name = "工具:OSS存储管理") @RequestMapping("/api/ossStorage") public class SystemOssStorageController { - @Autowired - private SystemOssStorageService systemOssStorageService; + @Autowired private SystemOssStorageService systemOssStorageService; @Operation(summary = "查询文件") @PostMapping @PreAuthorize("@el.check('storage:list')") - public ResponseEntity> queryOssStorage(@Validated @RequestBody KitPageArgs args) { + public ResponseEntity> queryOssStorage( + @Validated @RequestBody KitPageArgs args) { SystemQueryStorageArgs criteria = args.getArgs(); Page page = new Page<>(criteria.getPage(), criteria.getSize()); return ResponseEntity.ok(systemOssStorageService.queryOssStorage(criteria, page)); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQuartzJobController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQuartzJobController.java index b402d428..28dc0c7b 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQuartzJobController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQuartzJobController.java @@ -29,28 +29,33 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Set; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.io.IOException; -import java.util.Set; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController @RequestMapping("/api/quartzJob") @Tag(name = "系统:定时任务管理") public class SystemQuartzJobController { - @Autowired - private SystemQuartzJobService systemQuartzJobService; + @Autowired private SystemQuartzJobService systemQuartzJobService; @Operation(summary = "查询定时任务") @PostMapping @PreAuthorize("@el.check('quartzJob:list')") - public ResponseEntity> queryQuartzJobByCrud(@Validated @RequestBody KitPageArgs args) { + public ResponseEntity> queryQuartzJobByCrud( + @Validated @RequestBody KitPageArgs args) { SystemQueryQuartzJobArgs criteria = args.getArgs(); Page page = new Page<>(criteria.getPage(), criteria.getSize()); return ResponseEntity.ok(systemQuartzJobService.queryQuartzJobByArgs(criteria, page)); @@ -94,7 +99,8 @@ public class SystemQuartzJobController { @Operation(summary = "修改定时任务") @PutMapping @PreAuthorize("@el.check('quartzJob:edit')") - public ResponseEntity updateQuartzJob(@Validated(SystemQuartzJobTb.Update.class) @RequestBody SystemUpdateQuartzJobArgs args) { + public ResponseEntity updateQuartzJob( + @Validated(SystemQuartzJobTb.Update.class) @RequestBody SystemUpdateQuartzJobArgs args) { // 验证Bean是不是合法的, 合法的定时任务 Bean 需要用 @Service 定义 checkBean(args.getBeanName()); systemQuartzJobService.modifyQuartzJobResumeCron(args); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemRoleController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemRoleController.java index c23b7b73..4402e7eb 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemRoleController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemRoleController.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package cn.odboy.system.controller; import cn.hutool.core.lang.Dict; @@ -23,67 +22,71 @@ import cn.odboy.framework.exception.BadRequestException; import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.model.SystemCreateRoleArgs; import cn.odboy.system.dal.model.SystemQueryRoleArgs; +import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.service.SystemRoleService; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import jakarta.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.Set; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +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; @RestController -@Tag(name = "系统:角色管理") +@Api(tags = "系统:角色管理") @RequestMapping("/api/role") public class SystemRoleController { - @Autowired - private SystemRoleService systemRoleService; + @Autowired private SystemRoleService systemRoleService; - @Operation(summary = "获取单个role") + @ApiOperation("获取单个role") @PostMapping(value = "/queryRoleById") @PreAuthorize("@el.check('roles:list')") public ResponseEntity queryRoleById(@RequestBody SystemRoleTb args) { return ResponseEntity.ok(systemRoleService.getRoleById(args.getId())); } - @Operation(summary = "导出角色数据") + @ApiOperation("导出角色数据") @GetMapping(value = "/download") @PreAuthorize("@el.check('role:list')") public void exportRole(HttpServletResponse response, SystemQueryRoleArgs criteria) throws IOException { systemRoleService.exportRoleExcel(systemRoleService.queryRoleByArgs(criteria), response); } - @Operation(summary = "返回全部的角色") + @ApiOperation("返回全部的角色") @PostMapping(value = "/queryRoleList") @PreAuthorize("@el.check('roles:list','user:add','user:edit')") public ResponseEntity> queryRoleList() { return ResponseEntity.ok(systemRoleService.queryAllRole()); } - @Operation(summary = "查询角色") + @ApiOperation("查询角色") @PostMapping @PreAuthorize("@el.check('roles:list')") - public ResponseEntity> queryRoleByArgs(@Validated @RequestBody KitPageArgs args) { + public ResponseEntity> queryRoleByArgs( + @Validated @RequestBody KitPageArgs args) { SystemQueryRoleArgs criteria = args.getArgs(); Page page = new Page<>(criteria.getPage(), criteria.getSize()); return ResponseEntity.ok(systemRoleService.queryRoleByArgs(criteria, page)); } - @Operation(summary = "获取用户级别") + @ApiOperation("获取用户级别") @PostMapping(value = "/queryRoleLevel") public ResponseEntity queryRoleLevel() { return ResponseEntity.ok(Dict.create().set("level", checkRoleLevels(null))); } - @Operation(summary = "新增角色") + @ApiOperation("新增角色") @PostMapping(value = "/saveRole") @PreAuthorize("@el.check('roles:add')") public ResponseEntity saveRole(@Validated @RequestBody SystemCreateRoleArgs args) { @@ -92,26 +95,26 @@ public class SystemRoleController { return ResponseEntity.ok(null); } - @Operation(summary = "修改角色") + @ApiOperation("修改角色") @PostMapping(value = "/modifyRoleById") @PreAuthorize("@el.check('roles:edit')") - public ResponseEntity modifyRoleById(@Validated(SystemRoleTb.Update.class) @RequestBody SystemRoleTb args) { + public ResponseEntity modifyRoleById(@Validated(SystemRoleTb.Update.class) @RequestBody SystemRoleVo args) { checkRoleLevels(args.getLevel()); systemRoleService.modifyRoleById(args); return ResponseEntity.ok(null); } - @Operation(summary = "修改角色菜单") + @ApiOperation("修改角色菜单") @PostMapping(value = "/modifyBindMenuById") @PreAuthorize("@el.check('roles:edit')") - public ResponseEntity modifyBindMenuById(@RequestBody SystemRoleTb args) { + public ResponseEntity modifyBindMenuById(@RequestBody SystemRoleVo args) { SystemRoleTb role = systemRoleService.getRoleById(args.getId()); checkRoleLevels(role.getLevel()); systemRoleService.modifyBindMenuById(args); return ResponseEntity.ok(null); } - @Operation(summary = "删除角色") + @ApiOperation("删除角色") @PostMapping(value = "/removeRoleByIds") @PreAuthorize("@el.check('roles:del')") public ResponseEntity removeRoleByIds(@RequestBody Set ids) { @@ -131,7 +134,8 @@ public class SystemRoleController { * @return / */ private int checkRoleLevels(Integer level) { - List levels = systemRoleService.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream().map(SystemRoleTb::getLevel).toList(); + List levels = systemRoleService.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream() + .map(SystemRoleTb::getLevel).toList(); int min = Collections.min(levels); if (level != null) { if (level < min) { diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemUserController.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemUserController.java index 87efae18..a2e7e4cd 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemUserController.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemUserController.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package cn.odboy.system.controller; import cn.hutool.core.collection.CollectionUtil; @@ -28,6 +27,7 @@ import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.model.SystemQueryUserArgs; import cn.odboy.system.dal.model.SystemUpdateUserPasswordArgs; +import cn.odboy.system.dal.model.SystemUserVo; import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.system.service.SystemDataService; import cn.odboy.system.service.SystemDeptService; @@ -37,9 +37,8 @@ import cn.odboy.system.service.SystemUserService; import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitRsaEncryptUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collections; @@ -61,7 +60,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -@Tag(name = "系统:用户管理") +@Api(tags = "系统:用户管理") @RestController @RequestMapping("/api/user") public class SystemUserController { @@ -73,17 +72,17 @@ public class SystemUserController { @Autowired private SystemEmailService systemEmailService; @Autowired private AppProperties properties; - @Operation(summary = "导出用户数据") + @ApiOperation("导出用户数据") @GetMapping(value = "/download") @PreAuthorize("@el.check('user:list')") public void exportUserExcel(HttpServletResponse response, SystemQueryUserArgs criteria) throws IOException { systemUserService.exportUserExcel(systemUserService.queryUserByArgs(criteria), response); } - @Operation(summary = "查询用户") + @ApiOperation("查询用户") @PostMapping @PreAuthorize("@el.check('user:list')") - public ResponseEntity> queryUserByArgs( + public ResponseEntity> queryUserByArgs( @Validated @RequestBody KitPageArgs args) { Page page = new Page<>(args.getPage(), args.getSize()); SystemQueryUserArgs criteria = args.getArgs(); @@ -112,10 +111,10 @@ public class SystemUserController { return ResponseEntity.ok(KitPageUtil.emptyData()); } - @Operation(summary = "新增用户") + @ApiOperation("新增用户") @PostMapping(value = "/saveUser") @PreAuthorize("@el.check('user:add')") - public ResponseEntity saveUser(@Validated @RequestBody SystemUserTb args) { + public ResponseEntity saveUser(@Validated @RequestBody SystemUserVo args) { checkLevel(args); // 默认密码 123456 args.setPassword(passwordEncoder.encode("123456")); @@ -123,16 +122,16 @@ public class SystemUserController { return ResponseEntity.ok(null); } - @Operation(summary = "修改用户") + @ApiOperation("修改用户") @PostMapping(value = "/modifyUserById") @PreAuthorize("@el.check('user:edit')") - public ResponseEntity modifyUserById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserTb args) { + public ResponseEntity modifyUserById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserVo args) { checkLevel(args); systemUserService.modifyUserById(args); return ResponseEntity.ok(null); } - @Operation(summary = "修改用户:个人中心") + @ApiOperation("修改用户:个人中心") @PostMapping(value = "modifyUserCenterInfoById") public ResponseEntity modifyUserCenterInfoById( @Validated(SystemUserTb.Update.class) @RequestBody SystemUserTb args) { @@ -143,7 +142,7 @@ public class SystemUserController { return ResponseEntity.ok(null); } - @Operation(summary = "删除用户") + @ApiOperation("删除用户") @PostMapping(value = "/removeUserByIds") @PreAuthorize("@el.check('user:del')") public ResponseEntity removeUserByIds(@RequestBody Set ids) { @@ -162,7 +161,7 @@ public class SystemUserController { return ResponseEntity.ok(null); } - @Operation(summary = "修改密码") + @ApiOperation("修改密码") @PostMapping(value = "/modifyUserPasswordByUsername") public ResponseEntity modifyUserPasswordByUsername(@RequestBody SystemUpdateUserPasswordArgs passVo) throws Exception { @@ -181,7 +180,7 @@ public class SystemUserController { return ResponseEntity.ok(null); } - @Operation(summary = "重置密码") + @ApiOperation("重置密码") @PostMapping(value = "/resetUserPasswordByIds") public ResponseEntity resetUserPasswordByIds(@RequestBody Set ids) { String defaultPwd = passwordEncoder.encode("123456"); @@ -189,13 +188,13 @@ public class SystemUserController { return ResponseEntity.ok(null); } - @Operation(summary = "修改头像") + @ApiOperation("修改头像") @PostMapping(value = "/modifyUserAvatar") public ResponseEntity modifyUserAvatar(@RequestParam MultipartFile avatar) { return ResponseEntity.ok(systemUserService.modifyUserAvatar(avatar)); } - @Operation(summary = "修改邮箱") + @ApiOperation("修改邮箱") @PostMapping(value = "/modifyUserEmailByUsername/{code}") public ResponseEntity modifyUserEmailByUsername(@PathVariable String code, @RequestBody SystemUserTb args) throws Exception { @@ -215,7 +214,7 @@ public class SystemUserController { * * @param args / */ - private void checkLevel(SystemUserTb args) { + private void checkLevel(SystemUserVo args) { Integer currentLevel = Collections.min( systemRoleService.queryRoleByUsersId(KitSecurityHelper.getCurrentUserId()).stream() .map(SystemRoleTb::getLevel).toList()); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemDeptTb.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemDeptTb.java index 5d33d116..fdef2076 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemDeptTb.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemDeptTb.java @@ -34,6 +34,7 @@ import lombok.Setter; @Setter @TableName("system_dept") public class SystemDeptTb extends KitBaseUserTimeTb { + @NotNull(groups = Update.class) @TableId(value = "dept_id", type = IdType.AUTO) @ApiModelProperty(value = "ID", hidden = true) private Long id; @TableField(exist = false) @JSONField(serialize = false) @ApiModelProperty(value = "角色") private Set diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemJobTb.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemJobTb.java index 2b36e430..857c09ac 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemJobTb.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemJobTb.java @@ -20,9 +20,9 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; -import java.util.Objects; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import java.util.Objects; import lombok.Getter; import lombok.Setter; diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemMenuTb.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemMenuTb.java index 86db5f1c..6bddbf23 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemMenuTb.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemMenuTb.java @@ -22,10 +22,10 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; +import jakarta.validation.constraints.NotNull; import java.util.List; import java.util.Objects; import java.util.Set; -import jakarta.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemRoleTb.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemRoleTb.java index 27f73384..b15300ba 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemRoleTb.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemRoleTb.java @@ -23,10 +23,9 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; -import java.util.Objects; -import java.util.Set; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import java.util.Objects; import lombok.Getter; import lombok.Setter; @@ -39,9 +38,6 @@ import lombok.Setter; public class SystemRoleTb extends KitBaseUserTimeTb { @NotNull(groups = {Update.class}) @TableId(value = "role_id", type = IdType.AUTO) @ApiModelProperty(value = "ID", hidden = true) private Long id; - @TableField(exist = false) @ApiModelProperty(value = "用户", hidden = true) private Set users; - @TableField(exist = false) @ApiModelProperty(value = "菜单", hidden = true) private Set menus; - @TableField(exist = false) @ApiModelProperty(value = "部门", hidden = true) private Set depts; @NotBlank @ApiModelProperty(value = "名称", hidden = true) private String name; @ApiModelProperty(value = "数据权限,全部 、 本级 、 自定义") private String dataScope = SystemDataScopeEnum.THIS_LEVEL.getValue(); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemUserTb.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemUserTb.java index f606b6ec..5a4bb11c 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemUserTb.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemUserTb.java @@ -21,12 +21,11 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; -import java.util.Date; -import java.util.Objects; -import java.util.Set; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import java.util.Date; +import java.util.Objects; import lombok.Getter; import lombok.Setter; @@ -36,8 +35,6 @@ import lombok.Setter; public class SystemUserTb extends KitBaseUserTimeTb { @NotNull(groups = Update.class) @TableId(value = "user_id", type = IdType.AUTO) @ApiModelProperty(value = "ID", hidden = true) private Long id; - @TableField(exist = false) @ApiModelProperty(value = "用户角色") private Set roles; - @TableField(exist = false) @ApiModelProperty(value = "用户岗位") private Set jobs; @TableField(value = "dept_id") @ApiModelProperty(hidden = true) private Long deptId; @ApiModelProperty(value = "用户部门") @TableField(exist = false) private SystemDeptTb dept; @NotBlank @ApiModelProperty(value = "用户名称") private String username; diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateRoleArgs.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateRoleArgs.java index 470b6927..5e69340d 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateRoleArgs.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateRoleArgs.java @@ -17,9 +17,9 @@ package cn.odboy.system.dal.model; import cn.odboy.base.KitObject; import cn.odboy.system.dal.dataobject.SystemDeptTb; -import java.util.Set; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import java.util.Set; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemRoleVo.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemRoleVo.java new file mode 100644 index 00000000..c3be95df --- /dev/null +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemRoleVo.java @@ -0,0 +1,18 @@ +package cn.odboy.system.dal.model; + +import cn.odboy.system.dal.dataobject.SystemDeptTb; +import cn.odboy.system.dal.dataobject.SystemMenuTb; +import cn.odboy.system.dal.dataobject.SystemRoleTb; +import cn.odboy.system.dal.dataobject.SystemUserTb; +import io.swagger.annotations.ApiModelProperty; +import java.util.Set; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SystemRoleVo extends SystemRoleTb { + @ApiModelProperty(value = "用户", hidden = true) private Set users; + @ApiModelProperty(value = "菜单", hidden = true) private Set menus; + @ApiModelProperty(value = "部门", hidden = true) private Set depts; +} diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemSendEmailArgs.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemSendEmailArgs.java index 6f7463c0..59c27f71 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemSendEmailArgs.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemSendEmailArgs.java @@ -16,9 +16,9 @@ package cn.odboy.system.dal.model; import io.swagger.annotations.ApiModelProperty; -import java.util.List; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; +import java.util.List; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUserVo.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUserVo.java new file mode 100644 index 00000000..17aaab59 --- /dev/null +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUserVo.java @@ -0,0 +1,16 @@ +package cn.odboy.system.dal.model; + +import cn.odboy.system.dal.dataobject.SystemJobTb; +import cn.odboy.system.dal.dataobject.SystemRoleTb; +import cn.odboy.system.dal.dataobject.SystemUserTb; +import io.swagger.annotations.ApiModelProperty; +import java.util.Set; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SystemUserVo extends SystemUserTb { + @ApiModelProperty(value = "用户角色") private Set roles; + @ApiModelProperty(value = "用户岗位") private Set jobs; +} diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java index 3a6e8426..726d36ec 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java @@ -19,6 +19,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.model.SystemQueryRoleArgs; +import cn.odboy.system.dal.model.SystemRoleVo; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; @@ -46,9 +47,9 @@ public interface SystemRoleMapper extends BaseMapper { } return selectCount(wrapper); } - List selectRoleByArgs(@Param("criteria") SystemQueryRoleArgs criteria); - List selectRoleByUserId(@Param("userId") Long userId); - List selectRoleByMenuId(@Param("menuId") Long menuId); - SystemRoleTb getRoleById(@Param("roleId") Long roleId); + List selectRoleByArgs(@Param("criteria") SystemQueryRoleArgs criteria); + List selectRoleByUserId(@Param("userId") Long userId); + List selectRoleByMenuId(@Param("menuId") Long menuId); + SystemRoleVo getRoleById(@Param("roleId") Long roleId); Integer countRoleByDeptIds(@Param("deptIds") Set deptIds); } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemUserMapper.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemUserMapper.java index 4e96ca2c..72f89cd0 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemUserMapper.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemUserMapper.java @@ -17,6 +17,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.model.SystemQueryUserArgs; +import cn.odboy.system.dal.model.SystemUserVo; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -29,14 +30,14 @@ import org.apache.ibatis.annotations.Param; @Mapper public interface SystemUserMapper extends BaseMapper { - List selectUserByArgs(@Param("criteria") SystemQueryUserArgs criteria); - IPage selectUserByArgs(@Param("criteria") SystemQueryUserArgs criteria, Page page); - List selectUserByRoleId(@Param("roleId") Long roleId); - List selectUserByDeptId(@Param("deptId") Long deptId); - List selectUserByMenuId(@Param("menuId") Long menuId); + List selectUserByArgs(@Param("criteria") SystemQueryUserArgs criteria); + IPage selectUserByArgs(@Param("criteria") SystemQueryUserArgs criteria, Page page); + List selectUserByRoleId(@Param("roleId") Long roleId); + List selectUserByDeptId(@Param("deptId") Long deptId); + List selectUserByMenuId(@Param("menuId") Long menuId); Long countUserByJobIds(@Param("jobIds") Set jobIds); Long countUserByRoleIds(@Param("roleIds") Set roleIds); - SystemUserTb getUserByUsername(@Param("username") String username); + SystemUserVo getUserByUsername(@Param("username") String username); default long countUserByDeptIds(Set deptIds) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(SystemUserTb::getDeptId, deptIds); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLock.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLock.java index e27b8159..4fa147e4 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLock.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLock.java @@ -16,7 +16,12 @@ package cn.odboy.system.framework.bizlock; -import java.lang.annotation.*; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.util.concurrent.TimeUnit; /** diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java index ac091709..a3f16d59 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java @@ -18,6 +18,7 @@ package cn.odboy.system.framework.bizlock; import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.redis.KitRedisHelper; +import java.lang.reflect.Method; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; @@ -28,8 +29,6 @@ import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.stereotype.Component; -import java.lang.reflect.Method; - @Aspect @Component public class BizLockAspect { @@ -60,7 +59,8 @@ public class BizLockAspect { private String parseLockKey(ProceedingJoinPoint joinPoint, BizLock bizLock) { // 如果key为空,使用默认格式: bizName:方法名 if (bizLock.key().isEmpty()) { - return String.format("%s:%s", bizLock.bizName(), ((MethodSignature)joinPoint.getSignature()).getMethod().getName()); + return String.format("%s:%s", bizLock.bizName(), + ((MethodSignature)joinPoint.getSignature()).getMethod().getName()); } // 解析SpEL表达式 diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java index 33d37709..e43e2e82 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java @@ -19,11 +19,10 @@ package cn.odboy.system.framework.mybatisplus; import cn.hutool.core.date.DateTime; import cn.odboy.system.framework.permission.core.KitSecurityHelper; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import java.util.Date; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; -import java.util.Date; - @Component public class MpMetaObjectHandler implements MetaObjectHandler { diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLog.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLog.java index 6de423fe..c318a2a8 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLog.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLog.java @@ -16,7 +16,12 @@ package cn.odboy.system.framework.operalog; -import java.lang.annotation.*; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** * 捕捉操作日志 diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLogAspect.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLogAspect.java index a6a293d9..30f67f52 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLogAspect.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLogAspect.java @@ -28,6 +28,7 @@ import cn.odboy.util.KitIPUtil; import com.alibaba.fastjson2.JSON; import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; @@ -36,8 +37,6 @@ import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.lang.reflect.Method; - /** * 捕捉操作日志 * @@ -48,8 +47,7 @@ import java.lang.reflect.Method; @Aspect @Component public class OperationLogAspect { - @Autowired - private SystemOperationLogMapper systemOperationLogMapper; + @Autowired private SystemOperationLogMapper systemOperationLogMapper; @Around("@annotation(operationLog)") public Object operationLogCatch(ProceedingJoinPoint joinPoint, OperationLog operationLog) throws Throwable { @@ -83,7 +81,8 @@ public class OperationLogAspect { } } - private SystemOperationLogTb getOperationLogTb(ProceedingJoinPoint joinPoint, OperationLog annotation, TimeInterval timeInterval) { + private SystemOperationLogTb getOperationLogTb(ProceedingJoinPoint joinPoint, OperationLog annotation, + TimeInterval timeInterval) { long executeTime = timeInterval.intervalMs(); MethodSignature signature = (MethodSignature)joinPoint.getSignature(); String bizName = annotation.bizName(); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/annotaions/OperationLog.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/annotaions/OperationLog.java index 3fbee830..21cfbdaf 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/annotaions/OperationLog.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/annotaions/OperationLog.java @@ -15,7 +15,12 @@ */ package cn.odboy.system.framework.operalog.annotaions; -import java.lang.annotation.*; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** * 捕捉操作日志 diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/core/SystemOperationLogAspect.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/core/SystemOperationLogAspect.java index 9cbfb440..076b05bb 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/core/SystemOperationLogAspect.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/core/SystemOperationLogAspect.java @@ -28,6 +28,7 @@ import cn.odboy.util.KitIPUtil; import com.alibaba.fastjson2.JSON; import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; @@ -36,8 +37,6 @@ import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.lang.reflect.Method; - /** * 捕捉操作日志 * @@ -48,8 +47,7 @@ import java.lang.reflect.Method; @Aspect @Component public class SystemOperationLogAspect { - @Autowired - private SystemOperationLogMapper systemOperationLogMapper; + @Autowired private SystemOperationLogMapper systemOperationLogMapper; @Around("@annotation(operationLog)") public Object operationLogCatch(ProceedingJoinPoint joinPoint, OperationLog operationLog) throws Throwable { @@ -85,7 +83,8 @@ public class SystemOperationLogAspect { } } - private SystemOperationLogTb getOperationLogTb(ProceedingJoinPoint joinPoint, OperationLog annotation, TimeInterval timeInterval) { + private SystemOperationLogTb getOperationLogTb(ProceedingJoinPoint joinPoint, OperationLog annotation, + TimeInterval timeInterval) { long executeTime = timeInterval.intervalMs(); MethodSignature signature = (MethodSignature)joinPoint.getSignature(); String bizName = annotation.bizName(); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/AuthorityConfig.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/AuthorityConfig.java index 6947737e..c077f96d 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/AuthorityConfig.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/AuthorityConfig.java @@ -17,11 +17,10 @@ package cn.odboy.system.framework.permission.config; import cn.odboy.system.framework.permission.core.KitSecurityHelper; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.stereotype.Service; - import java.util.Arrays; import java.util.List; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.stereotype.Service; @Service(value = "el") public class AuthorityConfig { @@ -34,7 +33,8 @@ public class AuthorityConfig { */ public Boolean check(String... permissions) { // 获取当前用户的所有权限 - List roleList = KitSecurityHelper.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).toList(); + List roleList = + KitSecurityHelper.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).toList(); // 判断当前用户的所有权限是否包含接口上定义的权限 return roleList.contains("admin") || Arrays.stream(permissions).anyMatch(roleList::contains); } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/SpringSecurityConfig.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/SpringSecurityConfig.java index e412aaeb..f0861025 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/SpringSecurityConfig.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/SpringSecurityConfig.java @@ -23,6 +23,8 @@ import cn.odboy.system.framework.permission.core.handler.JwtAuthenticationEntryP import cn.odboy.system.framework.permission.core.handler.TokenFilter; import cn.odboy.system.framework.permission.core.handler.TokenProvider; import cn.odboy.util.KitAnonTagUtil; +import java.util.Map; +import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; @@ -40,24 +42,15 @@ import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.filter.CorsFilter; -import java.util.Map; -import java.util.Set; - @Configuration @EnableMethodSecurity(prePostEnabled = true, securedEnabled = true) public class SpringSecurityConfig { - @Autowired - private TokenProvider tokenProvider; - @Autowired - private CorsFilter corsFilter; - @Autowired - private JwtAuthenticationEntryPoint authenticationErrorHandler; - @Autowired - private JwtAccessDeniedHandler jwtAccessDeniedHandler; - @Autowired - private ApplicationContext applicationContext; - @Autowired - private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; + @Autowired private TokenProvider tokenProvider; + @Autowired private CorsFilter corsFilter; + @Autowired private JwtAuthenticationEntryPoint authenticationErrorHandler; + @Autowired private JwtAccessDeniedHandler jwtAccessDeniedHandler; + @Autowired private ApplicationContext applicationContext; + @Autowired private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; @Bean public GrantedAuthorityDefaults grantedAuthorityDefaults() { @@ -81,20 +74,23 @@ public class SpringSecurityConfig { return httpSecurity // 禁用 CSRF - .csrf(AbstractHttpConfigurer::disable).addFilter(corsFilter).addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class) + .csrf(AbstractHttpConfigurer::disable).addFilter(corsFilter) + .addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class) // 授权异常 .exceptionHandling( - exceptionHandling -> exceptionHandling.authenticationEntryPoint(authenticationErrorHandler).accessDeniedHandler(jwtAccessDeniedHandler)) + exceptionHandling -> exceptionHandling.authenticationEntryPoint(authenticationErrorHandler) + .accessDeniedHandler(jwtAccessDeniedHandler)) // 防止iframe 造成跨域 .headers(headers -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)) // 不创建会话 - .sessionManagement(sessionManagement -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .sessionManagement( + sessionManagement -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(authorizeRequests -> authorizeRequests // 静态资源等等 .requestMatchers(HttpMethod.GET, "*.html", "*.css", "*.js", "/websocket/**").permitAll() // Knife4j 和 OpenAPI 相关路径 - .requestMatchers("/doc.html", "/webjars/**", "/v3/api-docs", "/v3/api-docs/**", "/swagger-resources", "/swagger-resources/**", - "/configuration/ui", "/configuration/security").permitAll() + .requestMatchers("/doc.html", "/webjars/**", "/v3/api-docs", "/v3/api-docs/**", "/swagger-resources", + "/swagger-resources/**", "/configuration/ui", "/configuration/security").permitAll() // 文件 .requestMatchers("/avatar/**").permitAll().requestMatchers("/file/**").permitAll() // 阿里巴巴 druid @@ -103,15 +99,20 @@ public class SpringSecurityConfig { .requestMatchers(HttpMethod.OPTIONS, "/**").permitAll() // 自定义匿名访问所有url放行:允许匿名和带Token访问,细腻化到每个 Request 类型 // GET - .requestMatchers(HttpMethod.GET, anonymousUrls.get(RequestMethodEnum.GET.getType()).toArray(new String[0])).permitAll() + .requestMatchers(HttpMethod.GET, + anonymousUrls.get(RequestMethodEnum.GET.getType()).toArray(new String[0])).permitAll() // POST - .requestMatchers(HttpMethod.POST, anonymousUrls.get(RequestMethodEnum.POST.getType()).toArray(new String[0])).permitAll() + .requestMatchers(HttpMethod.POST, + anonymousUrls.get(RequestMethodEnum.POST.getType()).toArray(new String[0])).permitAll() // PUT - .requestMatchers(HttpMethod.PUT, anonymousUrls.get(RequestMethodEnum.PUT.getType()).toArray(new String[0])).permitAll() + .requestMatchers(HttpMethod.PUT, + anonymousUrls.get(RequestMethodEnum.PUT.getType()).toArray(new String[0])).permitAll() // PATCH - .requestMatchers(HttpMethod.PATCH, anonymousUrls.get(RequestMethodEnum.PATCH.getType()).toArray(new String[0])).permitAll() + .requestMatchers(HttpMethod.PATCH, + anonymousUrls.get(RequestMethodEnum.PATCH.getType()).toArray(new String[0])).permitAll() // DELETE - .requestMatchers(HttpMethod.DELETE, anonymousUrls.get(RequestMethodEnum.DELETE.getType()).toArray(new String[0])).permitAll() + .requestMatchers(HttpMethod.DELETE, + anonymousUrls.get(RequestMethodEnum.DELETE.getType()).toArray(new String[0])).permitAll() // 所有类型的接口都放行 .requestMatchers(anonymousUrls.get(RequestMethodEnum.ALL.getType()).toArray(new String[0])).permitAll() // 所有请求都需要认证 diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java index 4aa01885..9d9b6eb5 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java @@ -26,6 +26,8 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import jakarta.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Objects; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; @@ -33,9 +35,6 @@ import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import java.util.List; -import java.util.Objects; - /** * 获取当前登录的用户 */ @@ -122,7 +121,8 @@ public class KitSecurityHelper { * @return / */ public static String getToken() { - HttpServletRequest request = ((ServletRequestAttributes)Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); + HttpServletRequest request = ((ServletRequestAttributes)Objects.requireNonNull( + RequestContextHolder.getRequestAttributes())).getRequest(); String bearerToken = request.getHeader(SystemConst.HEADER_NAME); if (bearerToken != null && bearerToken.startsWith(SystemConst.TOKEN_PREFIX)) { // 去掉令牌前缀 diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAccessDeniedHandler.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAccessDeniedHandler.java index 32bd3504..c7fb9f1a 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAccessDeniedHandler.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAccessDeniedHandler.java @@ -20,23 +20,24 @@ import cn.odboy.framework.exception.handler.ApiError; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; import org.springframework.http.HttpStatus; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.stereotype.Component; -import java.io.IOException; - @Component public class JwtAccessDeniedHandler implements AccessDeniedHandler { @Override - public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException { + public void handle(HttpServletRequest request, HttpServletResponse response, + AccessDeniedException accessDeniedException) throws IOException { //当用户在没有授权的情况下访问受保护的REST资源时,将调用此方法发送403 Forbidden响应 response.setStatus(HttpStatus.FORBIDDEN.value()); response.setContentType("application/json;charset=UTF-8"); ObjectMapper objectMapper = new ObjectMapper(); - String jsonResponse = objectMapper.writeValueAsString(ApiError.error(HttpStatus.FORBIDDEN.value(), "禁止访问,您没有权限访问此资源")); + String jsonResponse = objectMapper.writeValueAsString( + ApiError.error(HttpStatus.FORBIDDEN.value(), "禁止访问,您没有权限访问此资源")); response.getWriter().write(jsonResponse); } } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAuthenticationEntryPoint.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAuthenticationEntryPoint.java index d3235743..474f8640 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAuthenticationEntryPoint.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAuthenticationEntryPoint.java @@ -20,26 +20,27 @@ import cn.odboy.framework.exception.handler.ApiError; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.stereotype.Component; -import java.io.IOException; - @Slf4j @Component public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override - public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException { + public void commence(HttpServletRequest request, HttpServletResponse response, + AuthenticationException authException) throws IOException { // 当用户尝试访问安全的REST资源而不提供任何凭据时,将调用此方法发送401 响应 int code = HttpStatus.UNAUTHORIZED.value(); response.setStatus(code); response.setContentType("application/json;charset=UTF-8"); ObjectMapper objectMapper = new ObjectMapper(); - String jsonResponse = objectMapper.writeValueAsString(ApiError.error(HttpStatus.UNAUTHORIZED.value(), "登录状态已过期,请重新登录")); + String jsonResponse = objectMapper.writeValueAsString( + ApiError.error(HttpStatus.UNAUTHORIZED.value(), "登录状态已过期,请重新登录")); response.getWriter().write(jsonResponse); } } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java index dba2ec68..46ab61de 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java @@ -25,14 +25,13 @@ import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServletRequest; +import java.io.IOException; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.StringUtils; import org.springframework.web.filter.GenericFilterBean; -import java.io.IOException; - @Slf4j public class TokenFilter extends GenericFilterBean { private final TokenProvider tokenProvider; @@ -48,7 +47,8 @@ public class TokenFilter extends GenericFilterBean { } @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException { + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws ServletException, IOException { HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest; String token = resolveToken(httpServletRequest); // 对于 Token 为空的不需要去查 Redis diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java index 66dc4d12..e43b48e4 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java @@ -30,6 +30,12 @@ import io.jsonwebtoken.Jwts; import io.jsonwebtoken.io.Decoders; import io.jsonwebtoken.security.Keys; import jakarta.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.crypto.SecretKey; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; @@ -38,22 +44,13 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.User; import org.springframework.stereotype.Component; -import javax.crypto.SecretKey; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; - @Slf4j @Component public class TokenProvider implements InitializingBean { public static final String AUTHORITIES_UUID_KEY = "uid"; public static final String AUTHORITIES_UID_KEY = "userId"; - @Autowired - private KitRedisHelper redisHelper; - @Autowired - private AppProperties properties; + @Autowired private KitRedisHelper redisHelper; + @Autowired private AppProperties properties; // 0.11.x版本 // private Key signingKey; // 0.12.x版本 diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java index 81258bc3..2e99a56b 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java @@ -24,27 +24,22 @@ import cn.odboy.system.dal.redis.SystemUserInfoDAO; import cn.odboy.system.service.SystemDataService; import cn.odboy.system.service.SystemRoleService; import cn.odboy.system.service.SystemUserService; +import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Service; -import java.util.List; - /** * TODO 通过用户名判断用户信息,并获取拥有的权限与部门 */ @Slf4j @Service("userDetailsService") public class UserDetailsHandler implements UserDetailsService { - @Autowired - private SystemRoleService systemRoleService; - @Autowired - private SystemUserService systemUserService; - @Autowired - private SystemDataService systemDataService; - @Autowired - private SystemUserInfoDAO systemUserInfoDAO; + @Autowired private SystemRoleService systemRoleService; + @Autowired private SystemUserService systemUserService; + @Autowired private SystemDataService systemDataService; + @Autowired private SystemUserInfoDAO systemUserInfoDAO; @Override public SystemUserJwtVo loadUserByUsername(String username) { diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/ExecutionJobBean.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/ExecutionJobBean.java index 19028ec1..39fff57e 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/ExecutionJobBean.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/ExecutionJobBean.java @@ -31,16 +31,15 @@ import cn.odboy.system.dal.model.SystemSendEmailArgs; import cn.odboy.system.dal.mysql.SystemQuartzLogMapper; import cn.odboy.system.service.SystemEmailService; import cn.odboy.system.service.SystemQuartzJobService; -import lombok.extern.slf4j.Slf4j; -import org.quartz.JobExecutionContext; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.scheduling.quartz.QuartzJobBean; - import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Future; +import lombok.extern.slf4j.Slf4j; +import org.quartz.JobExecutionContext; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.scheduling.quartz.QuartzJobBean; @Slf4j public class ExecutionJobBean extends QuartzJobBean { @@ -69,7 +68,8 @@ public class ExecutionJobBean extends QuartzJobBean { quartzLog.setCronExpression(quartzJob.getCronExpression()); try { // 执行任务 - QuartzRunnable task = new QuartzRunnable(quartzJob.getBeanName(), quartzJob.getMethodName(), quartzJob.getParams()); + QuartzRunnable task = + new QuartzRunnable(quartzJob.getBeanName(), quartzJob.getMethodName(), quartzJob.getParams()); Future future = executor.submit(task); // 忽略任务执行结果 future.get(); @@ -122,7 +122,8 @@ public class ExecutionJobBean extends QuartzJobBean { Map data = new HashMap<>(16); data.put("task", quartzJob); data.put("msg", msg); - TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH)); + TemplateEngine engine = + TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH)); Template template = engine.getTemplate("SystemQuartzJobTaskAlarmTemplate.ftl"); sendEmailRequest.setContent(template.render(data)); List emails = Arrays.asList(quartzJob.getEmail().split("[,,]")); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java index e2bbe20a..44a9c411 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java @@ -19,26 +19,35 @@ package cn.odboy.system.framework.quartz; import cn.odboy.framework.exception.BadRequestException; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import jakarta.annotation.Resource; +import java.util.Date; import lombok.extern.slf4j.Slf4j; -import org.quartz.*; +import org.quartz.CronScheduleBuilder; +import org.quartz.CronTrigger; +import org.quartz.JobBuilder; +import org.quartz.JobDataMap; +import org.quartz.JobDetail; +import org.quartz.JobKey; +import org.quartz.ObjectAlreadyExistsException; +import org.quartz.Scheduler; +import org.quartz.Trigger; +import org.quartz.TriggerBuilder; +import org.quartz.TriggerKey; import org.quartz.impl.triggers.CronTriggerImpl; import org.springframework.stereotype.Component; -import java.util.Date; - @Slf4j @Component public class QuartzManage { private static final String JOB_NAME = "TASK_"; - @Resource - private Scheduler scheduler; + @Resource private Scheduler scheduler; public void addJob(SystemQuartzJobTb quartzJob) { try { // 构建job信息 - JobDetail jobDetail = JobBuilder.newJob(ExecutionJobBean.class).withIdentity(JOB_NAME + quartzJob.getId()).build(); + JobDetail jobDetail = + JobBuilder.newJob(ExecutionJobBean.class).withIdentity(JOB_NAME + quartzJob.getId()).build(); // 通过触发器名和cron 表达式创建 Trigger Trigger trigger = TriggerBuilder.newTrigger().withIdentity(JOB_NAME + quartzJob.getId()).startNow() diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/OssStorageConfiguration.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/OssStorageConfiguration.java index 7d09ce44..02215702 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/OssStorageConfiguration.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/OssStorageConfiguration.java @@ -28,14 +28,14 @@ import org.springframework.context.annotation.Configuration; @Slf4j @Configuration public class OssStorageConfiguration { - @Autowired - private AppProperties properties; + @Autowired private AppProperties properties; @Bean public MinioClient minioClient() { try { OSSConfigModel minio = properties.getOss().getMinio(); - return MinioClient.builder().endpoint(minio.getEndpoint()).credentials(minio.getAccessKey(), minio.getSecretKey()).build(); + return MinioClient.builder().endpoint(minio.getEndpoint()) + .credentials(minio.getAccessKey(), minio.getSecretKey()).build(); } catch (Exception e) { log.error("创建Minio客户端失败", e); throw new BadRequestException("创建Minio客户端失败"); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java index 92c46b4f..9dd91297 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java @@ -19,6 +19,7 @@ package cn.odboy.system.framework.storage.local; import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.properties.AppProperties; import jakarta.servlet.MultipartConfigElement; +import java.io.File; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -27,15 +28,11 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.unit.DataSize; -import java.io.File; - @Slf4j @Configuration public class MultipartConfig { - @Value("${spring.application.name}") - private String name; - @Autowired - private AppProperties properties; + @Value("${spring.application.name}") private String name; + @Autowired private AppProperties properties; /** * 文件上传临时路径 diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/minio/MinioRepository.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/minio/MinioRepository.java index 44f68ee7..98e5b11b 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/minio/MinioRepository.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/minio/MinioRepository.java @@ -30,30 +30,37 @@ import cn.odboy.framework.properties.model.StorageOSSModel; import cn.odboy.system.dal.dataobject.SystemOssStorageTb; import cn.odboy.util.KitDateUtil; import cn.odboy.util.KitFileUtil; -import io.minio.*; +import io.minio.BucketExistsArgs; +import io.minio.GetObjectArgs; +import io.minio.GetObjectResponse; +import io.minio.GetPresignedObjectUrlArgs; +import io.minio.ListObjectsArgs; +import io.minio.MakeBucketArgs; +import io.minio.MinioClient; +import io.minio.PutObjectArgs; +import io.minio.RemoveBucketArgs; +import io.minio.RemoveObjectArgs; +import io.minio.Result; import io.minio.http.Method; import io.minio.messages.Bucket; import io.minio.messages.Item; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.web.multipart.MultipartFile; - import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; @Slf4j @Component public class MinioRepository { - @Autowired - private AppProperties properties; - @Autowired - private MinioClient minioClient; + @Autowired private AppProperties properties; + @Autowired private MinioClient minioClient; /** * 检查存储bucket是否存在 @@ -136,7 +143,8 @@ public class MinioRepository { * @param md5 文件md5 * @return String 上传后的文件名,上传失败返回 null */ - public SystemOssStorageTb upload(File tempFile, String originalFilename, long fileSize, String contentType, String md5) { + public SystemOssStorageTb upload(File tempFile, String originalFilename, long fileSize, String contentType, + String md5) { StorageOSSModel ossConfig = properties.getOss(); OSSConfigModel ossMinioConfig = ossConfig.getMinio(); String type = FileTypeUtil.getType(tempFile); @@ -164,9 +172,8 @@ public class MinioRepository { systemOssStorageTb.setObjectName(objectName); try (InputStream fileInputStream = KitFileUtil.getInputStream(tempFile)) { - PutObjectArgs objectArgs = - PutObjectArgs.builder().bucket(ossMinioConfig.getBucketName()).object(objectName).stream(fileInputStream, fileSize, -1).contentType(contentType) - .build(); + PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(ossMinioConfig.getBucketName()).object(objectName) + .stream(fileInputStream, fileSize, -1).contentType(contentType).build(); minioClient.putObject(objectArgs); log.info("文件上传成功,并删除临时文件,文件名:{}", originalFilename); return systemOssStorageTb; @@ -204,8 +211,8 @@ public class MinioRepository { log.info("准备上传文件,原文件名:{},上传后文件名:{}", originalFilename, fileName); try (InputStream fileInputStream = file.getInputStream()) { PutObjectArgs objectArgs = - PutObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(objectName).stream(fileInputStream, file.getSize(), -1) - .contentType(file.getContentType()).build(); + PutObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(objectName) + .stream(fileInputStream, file.getSize(), -1).contentType(file.getContentType()).build(); // 使用重试机制进行上传 uploadWithRetry(objectArgs, 3); log.info("文件上传成功,objectName: {}", objectName); @@ -254,7 +261,8 @@ public class MinioRepository { } try { GetPresignedObjectUrlArgs presignedUrlArgs = - GetPresignedObjectUrlArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fullFileName).method(Method.GET) + GetPresignedObjectUrlArgs.builder().bucket(properties.getOss().getMinio().getBucketName()) + .object(fullFileName).method(Method.GET) // 设置 URL 过期时间为 7 天, 最大 7 天, 别挣扎了 .expiry(3600 * 24 * 7).build(); String url = minioClient.getPresignedObjectUrl(presignedUrlArgs); @@ -273,9 +281,11 @@ public class MinioRepository { * @param res HTTP 响应 */ public void download(String fileName, HttpServletResponse res) { - GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build(); + GetObjectArgs objectArgs = + GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build(); - try (GetObjectResponse response = minioClient.getObject(objectArgs); FastByteArrayOutputStream os = new FastByteArrayOutputStream()) { + try (GetObjectResponse response = minioClient.getObject(objectArgs); + FastByteArrayOutputStream os = new FastByteArrayOutputStream()) { byte[] buf = new byte[1024]; int len; @@ -303,7 +313,8 @@ public class MinioRepository { * @param res HTTP 响应 */ public void downloadOptimizedVersion(String fileName, HttpServletResponse res) { - GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build(); + GetObjectArgs objectArgs = + GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build(); try (GetObjectResponse response = minioClient.getObject(objectArgs)) { // 增大缓冲区 @@ -337,7 +348,8 @@ public class MinioRepository { */ public List queryAllObjects() { try { - Iterable> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).build()); + Iterable> results = minioClient.listObjects( + ListObjectsArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).build()); List items = new ArrayList<>(); for (Result result : results) { items.add(result.get()); @@ -357,7 +369,9 @@ public class MinioRepository { */ public boolean removeBucketFile(String fileName) { try { - minioClient.removeObject(RemoveObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build()); + minioClient.removeObject( + RemoveObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName) + .build()); log.info("删除文件成功,fileName: {}", fileName); return true; } catch (Exception e) { diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDataService.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDataService.java index 9547d004..9f29f8d4 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDataService.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDataService.java @@ -20,6 +20,7 @@ import cn.odboy.system.constant.SystemDataScopeEnum; import cn.odboy.system.dal.dataobject.SystemDeptTb; import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemUserTb; +import cn.odboy.system.dal.model.SystemRoleVo; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -47,7 +48,7 @@ public class SystemDataService { public List findDeptIdListByArgs(SystemUserTb user) { List deptIds = new ArrayList<>(); // 查询用户角色 - List roleList = systemRoleService.queryRoleByUsersId(user.getId()); + List roleList = systemRoleService.queryRoleByUsersId(user.getId()); // 获取对应的部门ID for (SystemRoleTb role : roleList) { SystemDataScopeEnum dataScopeEnum = SystemDataScopeEnum.find(role.getDataScope()); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java index 0514a1a2..472bf126 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java @@ -21,7 +21,6 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.odboy.base.KitPageResult; -import cn.odboy.framework.context.KitSpringBeanHolder; import cn.odboy.framework.exception.BadRequestException; import cn.odboy.system.constant.SystemDataScopeEnum; import cn.odboy.system.dal.dataobject.SystemDeptTb; @@ -35,7 +34,6 @@ import cn.odboy.system.dal.mysql.SystemUserMapper; import cn.odboy.system.framework.permission.core.KitSecurityHelper; import cn.odboy.util.KitClassUtil; import cn.odboy.util.KitFileUtil; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Field; diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java index 421b938b..83659318 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java @@ -28,6 +28,7 @@ import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.model.SystemMenuMetaVo; import cn.odboy.system.dal.model.SystemMenuVo; import cn.odboy.system.dal.model.SystemQueryMenuArgs; +import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.mysql.SystemMenuMapper; import cn.odboy.system.dal.mysql.SystemRoleMenuMapper; import cn.odboy.util.KitClassUtil; @@ -241,7 +242,7 @@ public class SystemMenuService { * @return / */ public List queryMenuListByUserId(Long currentUserId) { - List roles = systemRoleService.queryRoleByUsersId(currentUserId); + List roles = systemRoleService.queryRoleByUsersId(currentUserId); Set roleIds = roles.stream().map(SystemRoleTb::getId).collect(Collectors.toSet()); return new ArrayList<>(systemRoleMenuService.queryMenuByRoleIdsAndType(roleIds, 2)); } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java index 3262f16a..de670d0a 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java @@ -27,6 +27,7 @@ import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.model.SystemCreateRoleArgs; import cn.odboy.system.dal.model.SystemQueryRoleArgs; import cn.odboy.system.dal.model.SystemRoleCodeVo; +import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.mysql.SystemRoleMapper; import cn.odboy.system.dal.mysql.SystemUserMapper; import cn.odboy.util.KitFileUtil; @@ -83,8 +84,8 @@ public class SystemRoleService { * @param args / */ @Transactional(rollbackFor = Exception.class) - public void modifyRoleById(SystemRoleTb args) { - SystemRoleTb role = systemRoleMapper.selectById(args.getId()); + public void modifyRoleById(SystemRoleVo args) { + SystemRoleVo role = BeanUtil.copyProperties(systemRoleMapper.selectById(args.getId()), SystemRoleVo.class); SystemRoleTb role1 = this.getRoleByName(args.getName()); if (role1 != null && !role1.getId().equals(role.getId())) { throw new BadRequestException("角色名称已存在"); @@ -109,7 +110,7 @@ public class SystemRoleService { * * @param role / */ - public void modifyBindMenuById(SystemRoleTb role) { + public void modifyBindMenuById(SystemRoleVo role) { // 更新菜单 systemRoleMenuService.deleteRoleMenuByRoleId(role.getId()); // 判断是否为空 @@ -138,9 +139,9 @@ public class SystemRoleService { * @param response / * @throws IOException */ - public void exportRoleExcel(List roles, HttpServletResponse response) throws IOException { + public void exportRoleExcel(List roles, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); - for (SystemRoleTb role : roles) { + for (SystemRoleVo role : roles) { Map map = new LinkedHashMap<>(); map.put("角色名称", role.getName()); map.put("角色级别", role.getLevel()); @@ -172,7 +173,7 @@ public class SystemRoleService { * @param criteria 条件 * @return */ - public List queryRoleByArgs(SystemQueryRoleArgs criteria) { + public List queryRoleByArgs(SystemQueryRoleArgs criteria) { return systemRoleMapper.selectRoleByArgs(criteria); } @@ -183,9 +184,9 @@ public class SystemRoleService { * @param page 分页参数 * @return */ - public KitPageResult queryRoleByArgs(SystemQueryRoleArgs criteria, Page page) { + public KitPageResult queryRoleByArgs(SystemQueryRoleArgs criteria, Page page) { criteria.setOffset(page.offset()); - List roles = systemRoleMapper.selectRoleByArgs(criteria); + List roles = systemRoleMapper.selectRoleByArgs(criteria); Long total = systemRoleMapper.countRoleByArgs(criteria); return KitPageUtil.toPage(roles, total); } @@ -196,7 +197,7 @@ public class SystemRoleService { * @param userId 用户ID * @return / */ - public List queryRoleByUsersId(Long userId) { + public List queryRoleByUsersId(Long userId) { return systemRoleMapper.selectRoleByUserId(userId); } @@ -230,7 +231,7 @@ public class SystemRoleService { permissions.add("admin"); return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList()); } - List roles = systemRoleMapper.selectRoleByUserId(user.getId()); + List roles = systemRoleMapper.selectRoleByUserId(user.getId()); permissions = roles.stream().flatMap(role -> role.getMenus().stream()).map(SystemMenuTb::getPermission) .filter(StrUtil::isNotBlank).collect(Collectors.toSet()); return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList()); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java index 1cf6bcae..47f2a8ff 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java @@ -15,6 +15,7 @@ */ package cn.odboy.system.service; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import cn.odboy.base.KitPageArgs; import cn.odboy.base.KitPageResult; @@ -25,6 +26,7 @@ import cn.odboy.system.dal.dataobject.SystemJobTb; import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.model.SystemQueryUserArgs; +import cn.odboy.system.dal.model.SystemUserVo; import cn.odboy.system.dal.mysql.SystemUserMapper; import cn.odboy.system.dal.redis.SystemUserInfoDAO; import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO; @@ -66,7 +68,7 @@ public class SystemUserService { * @param args / */ @Transactional(rollbackFor = Exception.class) - public void saveUser(SystemUserTb args) { + public void saveUser(SystemUserVo args) { args.setDeptId(args.getDept().getId()); if (systemUserMapper.getUserByUsername(args.getUsername()) != null) { throw new BadRequestException("用户名已存在"); @@ -91,9 +93,9 @@ public class SystemUserService { * @throws Exception / */ @Transactional(rollbackFor = Exception.class) - public void modifyUserById(SystemUserTb args) { - SystemUserTb user = systemUserMapper.selectById(args.getId()); - SystemUserTb user1 = systemUserMapper.getUserByUsername(args.getUsername()); + public void modifyUserById(SystemUserVo args) { + SystemUserVo user = BeanUtil.copyProperties(systemUserMapper.selectById(args.getId()), SystemUserVo.class); + SystemUserVo user1 = systemUserMapper.getUserByUsername(args.getUsername()); SystemUserTb user2 = systemUserMapper.getUserByEmail(args.getEmail()); SystemUserTb user3 = systemUserMapper.getUserByPhone(args.getPhone()); if (user1 != null && !user.getId().equals(user1.getId())) { @@ -254,9 +256,9 @@ public class SystemUserService { * @param response / * @throws IOException / */ - public void exportUserExcel(List users, HttpServletResponse response) throws IOException { + public void exportUserExcel(List users, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); - for (SystemUserTb user : users) { + for (SystemUserVo user : users) { List roles = user.getRoles().stream().map(SystemRoleTb::getName).collect(Collectors.toList()); Map map = new LinkedHashMap<>(); map.put("用户名", user.getUsername()); @@ -280,8 +282,8 @@ public class SystemUserService { * @param page 分页参数 * @return / */ - public KitPageResult queryUserByArgs(SystemQueryUserArgs criteria, Page page) { - IPage users = systemUserMapper.selectUserByArgs(criteria, page); + public KitPageResult queryUserByArgs(SystemQueryUserArgs criteria, Page page) { + IPage users = systemUserMapper.selectUserByArgs(criteria, page); return KitPageUtil.toPage(users); } @@ -291,7 +293,7 @@ public class SystemUserService { * @param criteria 条件 * @return / */ - public List queryUserByArgs(SystemQueryUserArgs criteria) { + public List queryUserByArgs(SystemQueryUserArgs criteria) { return systemUserMapper.selectUserByArgs(criteria); } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/util/KitSqlUtil.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/util/KitSqlUtil.java index 48404fc3..15061bc0 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/util/KitSqlUtil.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/util/KitSqlUtil.java @@ -22,9 +22,6 @@ import cn.odboy.util.KitCloseUtil; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.google.common.collect.Lists; import com.zaxxer.hikari.HikariDataSource; -import lombok.extern.slf4j.Slf4j; - -import javax.sql.DataSource; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; @@ -35,6 +32,8 @@ import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.List; +import javax.sql.DataSource; +import lombok.extern.slf4j.Slf4j; @Slf4j public final class KitSqlUtil { @@ -165,7 +164,8 @@ public final class KitSqlUtil { private static List readSqlList(File sqlFile) throws Exception { List sqlList = Lists.newArrayList(); StringBuilder sb = new StringBuilder(); - try (BufferedReader reader = new BufferedReader(new InputStreamReader(Files.newInputStream(sqlFile.toPath()), StandardCharsets.UTF_8))) { + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(Files.newInputStream(sqlFile.toPath()), StandardCharsets.UTF_8))) { String tmp; while ((tmp = reader.readLine()) != null) { log.info("line:{}", tmp); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/resources/mapper/SystemRoleMapper.xml b/cutejava-springboot3/cutejava-module-system/src/main/resources/mapper/SystemRoleMapper.xml index d99d3bee..44379f87 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/resources/mapper/SystemRoleMapper.xml +++ b/cutejava-springboot3/cutejava-module-system/src/main/resources/mapper/SystemRoleMapper.xml @@ -1,7 +1,7 @@ - + @@ -54,50 +54,50 @@ order by role.role_level - SELECT role.role_id as id FROM system_role role, - system_roles_menus rm + system_roles_menus rm WHERE role.role_id = rm.role_id - AND rm.menu_id = #{menuId} + AND rm.menu_id = #{menuId} \ No newline at end of file diff --git a/cutejava-springboot3/cutejava-module-system/src/main/resources/mapper/SystemUserMapper.xml b/cutejava-springboot3/cutejava-module-system/src/main/resources/mapper/SystemUserMapper.xml index 6041f971..47808d32 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/resources/mapper/SystemUserMapper.xml +++ b/cutejava-springboot3/cutejava-module-system/src/main/resources/mapper/SystemUserMapper.xml @@ -1,7 +1,7 @@ - + @@ -27,7 +27,7 @@ - + @@ -91,56 +91,56 @@ order by u.user_id desc - SELECT u.user_id as id, u.username FROM system_user u, - system_users_roles r + system_users_roles r WHERE u.user_id = r.user_id - AND r.role_id = #{roleId} + AND r.role_id = #{roleId} group by u.user_id - SELECT u.* FROM system_user u, - system_users_roles r, - system_roles_depts d + system_users_roles r, + system_roles_depts d WHERE u.user_id = r.user_id - AND r.role_id = d.role_id - AND d.dept_id = #{deptId} + AND r.role_id = d.role_id + AND d.dept_id = #{deptId} group by u.user_id - SELECT u.user_id as id, u.username FROM system_user u, - system_users_roles ur, - system_roles_menus rm + system_users_roles ur, + system_roles_menus rm WHERE u.user_id = ur.user_id - AND ur.role_id = rm.role_id - AND rm.menu_id = #{menuId} + AND ur.role_id = rm.role_id + AND rm.menu_id = #{menuId} group by u.user_id - select role.*, - dept.dept_id as dept_id, dept.name as dept_name, - menu.menu_id as menu_id, menu.title as menu_title, menu.permission as menu_permission - from ( - select - role.role_id as role_role_id, role.name as role_name, role.data_scope as role_data_scope, - role.level as role_level, role.description as role_description, role.create_by as role_create_by, - role.update_by as role_update_by, role.create_time as role_create_time, role.update_time as role_update_time - from system_role role - - - and ( - role.name like concat('%', #{criteria.blurry}, '%') - or role.description like concat('%', #{criteria.blurry}, '%') - ) - - - and role.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]} - - - order by role.level - - limit #{criteria.offset}, #{criteria.size} - - ) role - left join system_roles_menus srm on role.role_role_id = srm.role_id - left join system_menu menu on menu.menu_id = srm.menu_id - left join system_roles_depts srd on role.role_role_id = srd.role_id - left join system_dept dept on dept.dept_id = srd.dept_id - order by role.role_level - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cutejava/cutejava-module-system/src/main/resources/mapper/SystemUserMapper.xml b/cutejava/cutejava-module-system/src/main/resources/mapper/SystemUserMapper.xml index 4a1aec47..18d47f7f 100644 --- a/cutejava/cutejava-module-system/src/main/resources/mapper/SystemUserMapper.xml +++ b/cutejava/cutejava-module-system/src/main/resources/mapper/SystemUserMapper.xml @@ -1,160 +1,160 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + select u.user_id as user_user_id, + u.dept_id as user_dept_id, + u.username as user_username, + u.nick_name as user_nick_name, + u.email as user_email, + u.phone as user_phone, + u.gender as user_gender, + u.avatar_name as user_avatar_name, + u.avatar_path as user_avatar_path, + u.enabled as user_enabled, + u.pwd_reset_time as user_pwd_reset_time, + u.create_by as user_create_by, + u.update_by as user_update_by, + u.create_time as user_create_time, + u.update_time as user_update_time, + d.dept_id as dept_id, + d.name as dept_name, + j.id as job_id, + j.name as job_name, + r.role_id as role_id, + r.name as role_name, + r.level as role_level, + r.data_scope as role_data_scope + from system_user u + left join system_dept d on u.dept_id = d.dept_id + left join system_users_jobs suj on u.user_id = suj.user_id + left join system_job j on suj.job_id = j.id + left join system_users_roles sur on u.user_id = sur.user_id + left join system_role r on sur.role_id = r.role_id + + + and u.user_id = #{criteria.id} + + + and u.enabled = #{criteria.enabled} + + + and u.dept_id in + + #{deptId} - - + + + and ( + u.username like concat('%', #{criteria.blurry}, '%') + or u.nick_name like concat('%', #{criteria.blurry}, '%') + or u.email like concat('%', #{criteria.blurry}, '%') + ) + + + and u.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]} + + + order by u.user_id desc + + + + + + + \ No newline at end of file diff --git a/cutejava/cutejava-module-system/src/main/resources/template/SystemEmailCaptchaTemplate.ftl b/cutejava/cutejava-module-system/src/main/resources/template/SystemEmailCaptchaTemplate.ftl index 1e4a8513..78b79672 100644 --- a/cutejava/cutejava-module-system/src/main/resources/template/SystemEmailCaptchaTemplate.ftl +++ b/cutejava/cutejava-module-system/src/main/resources/template/SystemEmailCaptchaTemplate.ftl @@ -3,9 +3,9 @@ - - cutejava - cn.odboy - 1.4.1 - - 4.0.0 - cutejava-module-task-v1 - 任务模块:强制停止任务线程 - - - cn.odboy - cutejava-module-system - 1.4.1 - - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + cutejava + cn.odboy + 1.4.1 + + 4.0.0 + cutejava-module-task-v1 + 任务模块:强制停止任务线程 + + + cn.odboy + cutejava-module-system + 1.4.1 + + diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskChangeTypeEnum.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskChangeTypeEnum.java index 587de031..6d207108 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskChangeTypeEnum.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskChangeTypeEnum.java @@ -27,14 +27,14 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum TaskChangeTypeEnum { - AppApply("AppApply", "申请应用"), AppContainerRestart("AppContainerRestart", "容器应用重启"), - AppContainerDeploy("AppContainerDeploy", "容器应用部署"), AppOffline("AppOffline", "应用下线"), - AppChangeReplicas("AppChangeReplicas", "应用扩缩容"), AppUpgrade("AppUpgrade", "应用升配"), - AppDowngrade("AppDowngrade", "应用降配"), AppHostRestart("AppHostRestart", "主机应用重启"), - AppHostDeploy("AppHostDeploy", "主机应用部署"), AppContainerRollback("AppContainerRollback", "容器应用回滚"), - AppHostRollback("AppHostRollback", "主机应用回滚"), ResourceApply("ResourceApply", "申请资源"), - ResourceOffline("ResourceOffline", "资源下线"), DataChange("DataChange", "数据变更"), - HostnameApply("HostnameApply", "申请域名"), HostnameChange("HostnameChange", "域名变更"); - private final String code; - private final String name; + AppApply("AppApply", "申请应用"), AppContainerRestart("AppContainerRestart", "容器应用重启"), + AppContainerDeploy("AppContainerDeploy", "容器应用部署"), AppOffline("AppOffline", "应用下线"), + AppChangeReplicas("AppChangeReplicas", "应用扩缩容"), AppUpgrade("AppUpgrade", "应用升配"), + AppDowngrade("AppDowngrade", "应用降配"), AppHostRestart("AppHostRestart", "主机应用重启"), + AppHostDeploy("AppHostDeploy", "主机应用部署"), AppContainerRollback("AppContainerRollback", "容器应用回滚"), + AppHostRollback("AppHostRollback", "主机应用回滚"), ResourceApply("ResourceApply", "申请资源"), + ResourceOffline("ResourceOffline", "资源下线"), DataChange("DataChange", "数据变更"), + HostnameApply("HostnameApply", "申请域名"), HostnameChange("HostnameChange", "域名变更"); + private final String code; + private final String name; } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskJobKeys.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskJobKeys.java index 783c7597..1bef1a87 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskJobKeys.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskJobKeys.java @@ -7,10 +7,11 @@ package cn.odboy.task.constant; * @date 2025-10-25 */ public interface TaskJobKeys { - String ID = "id"; - String CONTEXT_NAME = "contextName"; - String LANGUAGE = "language"; - String ENV_ALIAS = "envAlias"; - String CHANGE_TYPE = "changeType"; - String RETRY_NODE_CODE = "retryNodeCode"; + + String ID = "id"; + String CONTEXT_NAME = "contextName"; + String LANGUAGE = "language"; + String ENV_ALIAS = "envAlias"; + String CHANGE_TYPE = "changeType"; + String RETRY_NODE_CODE = "retryNodeCode"; } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskStatusEnum.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskStatusEnum.java index 32f66b4e..ff694321 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskStatusEnum.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/constant/TaskStatusEnum.java @@ -27,17 +27,17 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum TaskStatusEnum { - Pending("pending", "未开始"), Running("running", "运行中"), Success("success", "执行成功"), - Fail("fail", "执行失败"); - private final String code; - private final String name; + Pending("pending", "未开始"), Running("running", "运行中"), Success("success", "执行成功"), + Fail("fail", "执行失败"); + private final String code; + private final String name; - public static String getDesc(String code) { - for (TaskStatusEnum taskStatusEnum : TaskStatusEnum.values()) { - if (taskStatusEnum.code.equals(code)) { - return taskStatusEnum.getName(); - } - } - return code; + public static String getDesc(String code) { + for (TaskStatusEnum taskStatusEnum : TaskStatusEnum.values()) { + if (taskStatusEnum.code.equals(code)) { + return taskStatusEnum.getName(); + } } + return code; + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/controller/TaskTestsController.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/controller/TaskTestsController.java index 4c912b9e..208fa520 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/controller/TaskTestsController.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/controller/TaskTestsController.java @@ -34,48 +34,50 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/task") public class TaskTestsController { - @Autowired private TaskManage taskManage; - @AnonymousAccess - @GetMapping(value = "/testCreate") - public ResponseEntity testCreate() { - TaskInstanceInfoTb instanceInfo = - taskManage.createJob("cutejava", TaskChangeTypeEnum.AppContainerDeploy, "java", "daily", "cutejava", - "功能测试", null); - log.info("任务创建成功,实例为:{}", JSON.toJSONString(instanceInfo)); - return ResponseEntity.ok(instanceInfo); - } + @Autowired + private TaskManage taskManage; - @AnonymousAccess - @GetMapping(value = "/testCreateAfterStop") - public ResponseEntity testCreateAfterStop() { - TaskInstanceInfoTb instanceInfo = - taskManage.createJob("cutejava", TaskChangeTypeEnum.AppContainerDeploy, "java", "daily", "cutejava", - "功能测试", null); - log.info("任务创建成功,实例为:{}", JSON.toJSONString(instanceInfo)); - ThreadUtil.execAsync(() -> { - ThreadUtil.safeSleep(5000); - taskManage.stopJob(instanceInfo.getId()); - }); - return ResponseEntity.ok(null); - } + @AnonymousAccess + @GetMapping(value = "/testCreate") + public ResponseEntity testCreate() { + TaskInstanceInfoTb instanceInfo = + taskManage.createJob("cutejava", TaskChangeTypeEnum.AppContainerDeploy, "java", "daily", "cutejava", + "功能测试", null); + log.info("任务创建成功,实例为:{}", JSON.toJSONString(instanceInfo)); + return ResponseEntity.ok(instanceInfo); + } - @AnonymousAccess - @GetMapping(value = "/testRetry") - public ResponseEntity testRetry(@RequestParam Long instanceId, @RequestParam String retryNodeCode) { - TaskInstanceInfoTb instanceInfo = taskManage.retryJob(instanceId, retryNodeCode); - log.info("任务重试成功,实例为:{}", JSON.toJSONString(instanceInfo)); - return ResponseEntity.ok(null); - } + @AnonymousAccess + @GetMapping(value = "/testCreateAfterStop") + public ResponseEntity testCreateAfterStop() { + TaskInstanceInfoTb instanceInfo = + taskManage.createJob("cutejava", TaskChangeTypeEnum.AppContainerDeploy, "java", "daily", "cutejava", + "功能测试", null); + log.info("任务创建成功,实例为:{}", JSON.toJSONString(instanceInfo)); + ThreadUtil.execAsync(() -> { + ThreadUtil.safeSleep(5000); + taskManage.stopJob(instanceInfo.getId()); + }); + return ResponseEntity.ok(null); + } - @AnonymousAccess - @GetMapping(value = "/last") - public ResponseEntity testLast() { - String contextName = "cutejava"; - String language = "java"; - String changeType = TaskChangeTypeEnum.AppContainerDeploy.getCode(); - String envAlias = "daily"; - TaskInstanceInfoVo instanceInfo = taskManage.getLastInfo(contextName, language, envAlias, changeType); - return ResponseEntity.ok(instanceInfo); - } + @AnonymousAccess + @GetMapping(value = "/testRetry") + public ResponseEntity testRetry(@RequestParam Long instanceId, @RequestParam String retryNodeCode) { + TaskInstanceInfoTb instanceInfo = taskManage.retryJob(instanceId, retryNodeCode); + log.info("任务重试成功,实例为:{}", JSON.toJSONString(instanceInfo)); + return ResponseEntity.ok(null); + } + + @AnonymousAccess + @GetMapping(value = "/last") + public ResponseEntity testLast() { + String contextName = "cutejava"; + String language = "java"; + String changeType = TaskChangeTypeEnum.AppContainerDeploy.getCode(); + String envAlias = "daily"; + TaskInstanceInfoVo instanceInfo = taskManage.getLastInfo(contextName, language, envAlias, changeType); + return ResponseEntity.ok(instanceInfo); + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskJobBean.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskJobBean.java index 6d3ed05d..8631f7a0 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskJobBean.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskJobBean.java @@ -41,173 +41,175 @@ import org.springframework.scheduling.quartz.QuartzJobBean; @Slf4j public class TaskJobBean extends QuartzJobBean implements InterruptableJob { - private Thread workThread = null; - private String getBeanAlias(String code) { - if (StrUtil.isBlank(code)) { - throw new ServerException("参数code必填"); + private Thread workThread = null; + + private String getBeanAlias(String code) { + if (StrUtil.isBlank(code)) { + throw new ServerException("参数code必填"); + } + // node_init + String[] s = code.split("_"); + return Arrays.stream(s).map(StrUtil::upperFirst).collect(Collectors.joining()); + } + + @Override + public void executeInternal(JobExecutionContext context) { + this.workThread = Thread.currentThread(); + // ========================== 获取代理类 ========================== + TaskInstanceInfoService taskInstanceInfoService = KitSpringBeanHolder.getBean(TaskInstanceInfoService.class); + TaskInstanceDetailService taskInstanceDetailService = + KitSpringBeanHolder.getBean(TaskInstanceDetailService.class); + // ========================== 获取参数 ========================== + JobDataMap dataMap = context.getMergedJobDataMap(); + long id = dataMap.getLong(TaskJobKeys.ID); + // ========================== 获取任务编排模板 ========================== + TaskInstanceInfoTb taskInstanceInfoVo = taskInstanceInfoService.getById(id); + String templateInfo = taskInstanceInfoVo.getTemplate(); + List taskTemplateNodeVos = JSON.parseArray(templateInfo, TaskTemplateNodeVo.class); + // ========================== 判断是否重试任务 ========================== + String retryNodeCode = dataMap.getString(TaskJobKeys.RETRY_NODE_CODE); + if (StrUtil.isBlank(retryNodeCode)) { + executeNormalTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos); + } else { + executeRetryTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos, + retryNodeCode); + } + } + + /** + * 执行普通任务(非重试任务) + * + * @param taskInstanceInfoService 任务实例信息服务 + * @param taskInstanceDetailService 任务实例明细服务 + * @param id 任务实例ID + * @param dataMap 数据映射 + * @param taskTemplateNodeVos 模板节点列表 + */ + private void executeNormalTask(TaskInstanceInfoService taskInstanceInfoService, + TaskInstanceDetailService taskInstanceDetailService, long id, JobDataMap dataMap, + List taskTemplateNodeVos) { + // ========================== 初始化执行明细 ========================== + List taskInstanceDetails = + taskTemplateNodeVos.stream().map(taskTemplateNodeVo -> buildTaskInstanceDetail(id, taskTemplateNodeVo)) + .collect(Collectors.toList()); + taskInstanceDetailService.saveBatch(taskInstanceDetails); + Map codeIdMap = taskInstanceDetails.stream() + .collect(Collectors.toMap(TaskInstanceDetailTb::getBizCode, TaskInstanceDetailTb::getId)); + // ========================== 顺序执行 ========================== + executeTaskSteps(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos, + codeIdMap); + } + + /** + * 执行重试任务 + * + * @param taskInstanceInfoService 任务实例信息服务 + * @param taskInstanceDetailService 任务实例明细服务 + * @param id 任务实例ID + * @param dataMap 数据映射 + * @param taskTemplateNodeVos 模板节点列表 + * @param retryNodeCode 重试节点编码 + */ + private void executeRetryTask(TaskInstanceInfoService taskInstanceInfoService, + TaskInstanceDetailService taskInstanceDetailService, long id, JobDataMap dataMap, + List taskTemplateNodeVos, String retryNodeCode) { + boolean isFound = false; + // ========================== 初始化执行明细 ========================== + List taskInstanceDetails = new ArrayList<>(); + List taskTemplateNodeRetryList = new ArrayList<>(); + for (TaskTemplateNodeVo taskTemplateNodeVo : taskTemplateNodeVos) { + if (isFound) { + taskInstanceDetails.add(buildTaskInstanceDetail(id, taskTemplateNodeVo)); + taskTemplateNodeRetryList.add(taskTemplateNodeVo); + continue; + } + if (taskTemplateNodeVo.getCode().equals(retryNodeCode)) { + if (!taskTemplateNodeVo.getRetry()) { + throw new BadRequestException("节点 '" + taskTemplateNodeVo.getName() + "' 不支持重试"); } - // node_init - String[] s = code.split("_"); - return Arrays.stream(s).map(StrUtil::upperFirst).collect(Collectors.joining()); + taskInstanceDetails.add(buildTaskInstanceDetail(id, taskTemplateNodeVo)); + taskTemplateNodeRetryList.add(taskTemplateNodeVo); + isFound = true; + } } + TaskInstanceStepDetailService taskInstanceStepDetailService = + KitSpringBeanHolder.getBean(TaskInstanceStepDetailService.class); + List bizCodeList = + taskInstanceDetails.stream().map(TaskInstanceDetailTb::getBizCode).distinct().collect(Collectors.toList()); + List taskInstanceDetailTbs = + taskInstanceDetailService.queryByInstanceIdAndBizCodeList(id, bizCodeList); + List taskInstanceDetailIds = + taskInstanceDetailTbs.stream().map(TaskInstanceDetailTb::getId).collect(Collectors.toList()); + // 根据ID删除明细 + taskInstanceDetailService.removeByIds(taskInstanceDetailIds); + // 根据明细删除步骤 + taskInstanceStepDetailService.removeByInstanceDetailIds(taskInstanceDetailIds); + taskInstanceDetailService.saveBatch(taskInstanceDetails); + Map codeIdMap = taskInstanceDetails.stream() + .collect(Collectors.toMap(TaskInstanceDetailTb::getBizCode, TaskInstanceDetailTb::getId)); + // ========================== 顺序执行 ========================== + executeTaskSteps(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeRetryList, + codeIdMap); + } - @Override - public void executeInternal(JobExecutionContext context) { - this.workThread = Thread.currentThread(); - // ========================== 获取代理类 ========================== - TaskInstanceInfoService taskInstanceInfoService = KitSpringBeanHolder.getBean(TaskInstanceInfoService.class); - TaskInstanceDetailService taskInstanceDetailService = - KitSpringBeanHolder.getBean(TaskInstanceDetailService.class); - // ========================== 获取参数 ========================== - JobDataMap dataMap = context.getMergedJobDataMap(); - long id = dataMap.getLong(TaskJobKeys.ID); - // ========================== 获取任务编排模板 ========================== - TaskInstanceInfoTb taskInstanceInfoVo = taskInstanceInfoService.getById(id); - String templateInfo = taskInstanceInfoVo.getTemplate(); - List taskTemplateNodeVos = JSON.parseArray(templateInfo, TaskTemplateNodeVo.class); - // ========================== 判断是否重试任务 ========================== - String retryNodeCode = dataMap.getString(TaskJobKeys.RETRY_NODE_CODE); - if (StrUtil.isBlank(retryNodeCode)) { - executeNormalTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos); - } else { - executeRetryTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos, - retryNodeCode); - } - } + /** + * 构建任务实例明细对象 + * + * @param id 实例ID + * @param taskTemplateNodeVo 模板节点 + * @return 任务实例明细对象 + */ + private TaskInstanceDetailTb buildTaskInstanceDetail(long id, TaskTemplateNodeVo taskTemplateNodeVo) { + TaskInstanceDetailTb taskInstanceDetail = new TaskInstanceDetailTb(); + taskInstanceDetail.setInstanceId(id); + taskInstanceDetail.setFinishTime(null); + taskInstanceDetail.setBizCode(taskTemplateNodeVo.getCode()); + taskInstanceDetail.setBizName(taskTemplateNodeVo.getName()); + taskInstanceDetail.setExecuteInfo(TaskStatusEnum.Pending.getName()); + taskInstanceDetail.setExecuteStatus(TaskStatusEnum.Pending.getCode()); + return taskInstanceDetail; + } - /** - * 执行普通任务(非重试任务) - * - * @param taskInstanceInfoService 任务实例信息服务 - * @param taskInstanceDetailService 任务实例明细服务 - * @param id 任务实例ID - * @param dataMap 数据映射 - * @param taskTemplateNodeVos 模板节点列表 - */ - private void executeNormalTask(TaskInstanceInfoService taskInstanceInfoService, - TaskInstanceDetailService taskInstanceDetailService, long id, JobDataMap dataMap, - List taskTemplateNodeVos) { - // ========================== 初始化执行明细 ========================== - List taskInstanceDetails = - taskTemplateNodeVos.stream().map(taskTemplateNodeVo -> buildTaskInstanceDetail(id, taskTemplateNodeVo)) - .collect(Collectors.toList()); - taskInstanceDetailService.saveBatch(taskInstanceDetails); - Map codeIdMap = taskInstanceDetails.stream() - .collect(Collectors.toMap(TaskInstanceDetailTb::getBizCode, TaskInstanceDetailTb::getId)); - // ========================== 顺序执行 ========================== - executeTaskSteps(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos, - codeIdMap); - } - - /** - * 执行重试任务 - * - * @param taskInstanceInfoService 任务实例信息服务 - * @param taskInstanceDetailService 任务实例明细服务 - * @param id 任务实例ID - * @param dataMap 数据映射 - * @param taskTemplateNodeVos 模板节点列表 - * @param retryNodeCode 重试节点编码 - */ - private void executeRetryTask(TaskInstanceInfoService taskInstanceInfoService, - TaskInstanceDetailService taskInstanceDetailService, long id, JobDataMap dataMap, - List taskTemplateNodeVos, String retryNodeCode) { - boolean isFound = false; - // ========================== 初始化执行明细 ========================== - List taskInstanceDetails = new ArrayList<>(); - List taskTemplateNodeRetryList = new ArrayList<>(); - for (TaskTemplateNodeVo taskTemplateNodeVo : taskTemplateNodeVos) { - if (isFound) { - taskInstanceDetails.add(buildTaskInstanceDetail(id, taskTemplateNodeVo)); - taskTemplateNodeRetryList.add(taskTemplateNodeVo); - continue; - } - if (taskTemplateNodeVo.getCode().equals(retryNodeCode)) { - if (!taskTemplateNodeVo.getRetry()) { - throw new BadRequestException("节点 '" + taskTemplateNodeVo.getName() + "' 不支持重试"); - } - taskInstanceDetails.add(buildTaskInstanceDetail(id, taskTemplateNodeVo)); - taskTemplateNodeRetryList.add(taskTemplateNodeVo); - isFound = true; - } - } - TaskInstanceStepDetailService taskInstanceStepDetailService = - KitSpringBeanHolder.getBean(TaskInstanceStepDetailService.class); - List bizCodeList = - taskInstanceDetails.stream().map(TaskInstanceDetailTb::getBizCode).distinct().collect(Collectors.toList()); - List taskInstanceDetailTbs = - taskInstanceDetailService.queryByInstanceIdAndBizCodeList(id, bizCodeList); - List taskInstanceDetailIds = - taskInstanceDetailTbs.stream().map(TaskInstanceDetailTb::getId).collect(Collectors.toList()); - // 根据ID删除明细 - taskInstanceDetailService.removeByIds(taskInstanceDetailIds); - // 根据明细删除步骤 - taskInstanceStepDetailService.removeByInstanceDetailIds(taskInstanceDetailIds); - taskInstanceDetailService.saveBatch(taskInstanceDetails); - Map codeIdMap = taskInstanceDetails.stream() - .collect(Collectors.toMap(TaskInstanceDetailTb::getBizCode, TaskInstanceDetailTb::getId)); - // ========================== 顺序执行 ========================== - executeTaskSteps(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeRetryList, - codeIdMap); - } - - /** - * 构建任务实例明细对象 - * - * @param id 实例ID - * @param taskTemplateNodeVo 模板节点 - * @return 任务实例明细对象 - */ - private TaskInstanceDetailTb buildTaskInstanceDetail(long id, TaskTemplateNodeVo taskTemplateNodeVo) { - TaskInstanceDetailTb taskInstanceDetail = new TaskInstanceDetailTb(); - taskInstanceDetail.setInstanceId(id); - taskInstanceDetail.setFinishTime(null); - taskInstanceDetail.setBizCode(taskTemplateNodeVo.getCode()); - taskInstanceDetail.setBizName(taskTemplateNodeVo.getName()); - taskInstanceDetail.setExecuteInfo(TaskStatusEnum.Pending.getName()); - taskInstanceDetail.setExecuteStatus(TaskStatusEnum.Pending.getCode()); - return taskInstanceDetail; - } - - /** - * 执行任务步骤 - * - * @param taskInstanceInfoService 任务实例信息服务 - * @param taskInstanceDetailService 任务实例明细服务 - * @param id 实例ID - * @param dataMap 数据映射 - * @param taskTemplateNodes 需要执行的任务节点列表 - * @param codeIdMap 节点编码与明细ID映射 - */ - private void executeTaskSteps(TaskInstanceInfoService taskInstanceInfoService, - TaskInstanceDetailService taskInstanceDetailService, Long id, JobDataMap dataMap, - List taskTemplateNodes, Map codeIdMap) { + /** + * 执行任务步骤 + * + * @param taskInstanceInfoService 任务实例信息服务 + * @param taskInstanceDetailService 任务实例明细服务 + * @param id 实例ID + * @param dataMap 数据映射 + * @param taskTemplateNodes 需要执行的任务节点列表 + * @param codeIdMap 节点编码与明细ID映射 + */ + private void executeTaskSteps(TaskInstanceInfoService taskInstanceInfoService, + TaskInstanceDetailService taskInstanceDetailService, Long id, JobDataMap dataMap, + List taskTemplateNodes, Map codeIdMap) { + try { + for (TaskTemplateNodeVo taskTemplateNodeVo : taskTemplateNodes) { + String code = taskTemplateNodeVo.getCode(); try { - for (TaskTemplateNodeVo taskTemplateNodeVo : taskTemplateNodes) { - String code = taskTemplateNodeVo.getCode(); - try { - TaskStepExecutor executor = KitSpringBeanHolder.getBean("taskStep" + getBeanAlias(code)); - taskInstanceDetailService.fastStart(id, code, dataMap); - executor.execute(codeIdMap.getOrDefault(code, null), dataMap, taskTemplateNodeVo); - taskInstanceDetailService.fastSuccessWithInfo(id, code, null); - } catch (Exception e) { - log.error("任务节点执行失败", e); - taskInstanceDetailService.fastFailWithInfo(id, code, e.getMessage()); - throw new ServerException(e); - } - } - taskInstanceInfoService.fastSuccessWithData(id, dataMap); + TaskStepExecutor executor = KitSpringBeanHolder.getBean("taskStep" + getBeanAlias(code)); + taskInstanceDetailService.fastStart(id, code, dataMap); + executor.execute(codeIdMap.getOrDefault(code, null), dataMap, taskTemplateNodeVo); + taskInstanceDetailService.fastSuccessWithInfo(id, code, null); } catch (Exception e) { - log.error("任务执行失败", e); - taskInstanceInfoService.fastFailWithMessageData(id, e.getMessage(), dataMap); + log.error("任务节点执行失败", e); + taskInstanceDetailService.fastFailWithInfo(id, code, e.getMessage()); + throw new ServerException(e); } + } + taskInstanceInfoService.fastSuccessWithData(id, dataMap); + } catch (Exception e) { + log.error("任务执行失败", e); + taskInstanceInfoService.fastFailWithMessageData(id, e.getMessage(), dataMap); } + } - @Override - public void interrupt() { - if (workThread != null) { - workThread.stop(); - } + @Override + public void interrupt() { + if (workThread != null) { + // TODO 非正常手段 + workThread.stop(); } + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskManage.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskManage.java index f6d100fb..231f2886 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskManage.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskManage.java @@ -55,211 +55,212 @@ import org.springframework.transaction.annotation.Transactional; @Component @RequiredArgsConstructor public class TaskManage { - private final Scheduler scheduler; - private final TaskTemplateInfoService taskTemplateInfoService; - private final TaskInstanceInfoService taskInstanceInfoService; - private final TaskInstanceDetailService taskInstanceDetailService; - /** - * 创建任务单(注:同一应用同一变更类型无法并发多实例) - * - * @param contextName 上下文名称,这里特指应用名 - * @param changeTypeEnum 变更类型 - * @param language 开发语言、资源版本 - * @param envAlias 环境别名 - * @param source 来源 - * @param reason 变更原因 - * @param dataMap 任务参数 - */ - @Transactional(rollbackFor = Exception.class) - public TaskInstanceInfoTb createJob(String contextName, TaskChangeTypeEnum changeTypeEnum, String language, - String envAlias, String source, String reason, JobDataMap dataMap) { - if (StrUtil.isBlank(contextName)) { - throw new BadRequestException("参数contextName必填"); - } - if (changeTypeEnum == null) { - throw new BadRequestException("参数changeTypeEnum必填"); - } - if (StrUtil.isBlank(language)) { - throw new BadRequestException("参数language必填"); - } - if (StrUtil.isBlank(envAlias)) { - throw new BadRequestException("参数envAlias必填"); - } - if (StrUtil.isBlank(source)) { - throw new BadRequestException("参数source必填"); - } - if (dataMap == null) { - dataMap = new JobDataMap(); - } - // ========================== 获取任务编排模板 ========================== - TaskTemplateInfoVo taskInstanceInfoVo = - taskTemplateInfoService.getTemplateInfoByECL(envAlias, contextName, language, changeTypeEnum.getCode()); - if (taskInstanceInfoVo == null) { - throw new BadRequestException("没有查询到任务编排模板"); - } - String templateInfo = taskInstanceInfoVo.getTemplateInfo(); - List taskTemplateNodeVos; - try { - taskTemplateNodeVos = JSON.parseArray(templateInfo, TaskTemplateNodeVo.class); - } catch (Exception e) { - log.error("任务编排模板解析失败", e); - throw new BadRequestException("任务编排模板解析失败"); - } - if (taskTemplateNodeVos == null || taskTemplateNodeVos.isEmpty()) { - throw new BadRequestException("没有查询到任务编排明细"); - } - // ========================== 创建任务 ========================== - TaskManage taskManage = KitSpringBeanHolder.getBean(TaskManage.class); - TaskInstanceInfoTb newInstance = - taskManage.saveTaskInstanceInfoTb(contextName, changeTypeEnum, language, envAlias, source, reason, dataMap, - templateInfo); - dataMap.put(TaskJobKeys.ID, newInstance.getId()); - // 应用名、资源类型 - dataMap.put(TaskJobKeys.CONTEXT_NAME, contextName); - // 开发语言、资源版本 - dataMap.put(TaskJobKeys.LANGUAGE, language); - dataMap.put(TaskJobKeys.ENV_ALIAS, envAlias); - // 变更类型 - dataMap.put(TaskJobKeys.CHANGE_TYPE, changeTypeEnum.getCode()); - buildAndSchedule(changeTypeEnum.getCode(), contextName, dataMap); - return newInstance; - } + private final Scheduler scheduler; + private final TaskTemplateInfoService taskTemplateInfoService; + private final TaskInstanceInfoService taskInstanceInfoService; + private final TaskInstanceDetailService taskInstanceDetailService; - @Transactional(rollbackFor = Exception.class) - public TaskInstanceInfoTb saveTaskInstanceInfoTb(String contextName, TaskChangeTypeEnum changeTypeEnum, - String language, String envAlias, String source, String reason, JobDataMap dataMap, String templateInfo) { - TaskInstanceInfoTb newInstance = new TaskInstanceInfoTb(); - newInstance.setContextName(contextName); - newInstance.setLanguage(language); - newInstance.setChangeType(changeTypeEnum.getCode()); - newInstance.setEnvAlias(envAlias); - newInstance.setStatus(TaskStatusEnum.Running.getCode()); - newInstance.setFinishTime(null); - newInstance.setSource(source); - newInstance.setReason(reason); - newInstance.setTemplate(templateInfo); - newInstance.setJobData(JSON.toJSONString(dataMap)); - taskInstanceInfoService.save(newInstance); - return newInstance; + /** + * 创建任务单(注:同一应用同一变更类型无法并发多实例) + * + * @param contextName 上下文名称,这里特指应用名 + * @param changeTypeEnum 变更类型 + * @param language 开发语言、资源版本 + * @param envAlias 环境别名 + * @param source 来源 + * @param reason 变更原因 + * @param dataMap 任务参数 + */ + @Transactional(rollbackFor = Exception.class) + public TaskInstanceInfoTb createJob(String contextName, TaskChangeTypeEnum changeTypeEnum, String language, + String envAlias, String source, String reason, JobDataMap dataMap) { + if (StrUtil.isBlank(contextName)) { + throw new BadRequestException("参数contextName必填"); } + if (changeTypeEnum == null) { + throw new BadRequestException("参数changeTypeEnum必填"); + } + if (StrUtil.isBlank(language)) { + throw new BadRequestException("参数language必填"); + } + if (StrUtil.isBlank(envAlias)) { + throw new BadRequestException("参数envAlias必填"); + } + if (StrUtil.isBlank(source)) { + throw new BadRequestException("参数source必填"); + } + if (dataMap == null) { + dataMap = new JobDataMap(); + } + // ========================== 获取任务编排模板 ========================== + TaskTemplateInfoVo taskInstanceInfoVo = + taskTemplateInfoService.getTemplateInfoByECL(envAlias, contextName, language, changeTypeEnum.getCode()); + if (taskInstanceInfoVo == null) { + throw new BadRequestException("没有查询到任务编排模板"); + } + String templateInfo = taskInstanceInfoVo.getTemplateInfo(); + List taskTemplateNodeVos; + try { + taskTemplateNodeVos = JSON.parseArray(templateInfo, TaskTemplateNodeVo.class); + } catch (Exception e) { + log.error("任务编排模板解析失败", e); + throw new BadRequestException("任务编排模板解析失败"); + } + if (taskTemplateNodeVos == null || taskTemplateNodeVos.isEmpty()) { + throw new BadRequestException("没有查询到任务编排明细"); + } + // ========================== 创建任务 ========================== + TaskManage taskManage = KitSpringBeanHolder.getBean(TaskManage.class); + TaskInstanceInfoTb newInstance = + taskManage.saveTaskInstanceInfoTb(contextName, changeTypeEnum, language, envAlias, source, reason, dataMap, + templateInfo); + dataMap.put(TaskJobKeys.ID, newInstance.getId()); + // 应用名、资源类型 + dataMap.put(TaskJobKeys.CONTEXT_NAME, contextName); + // 开发语言、资源版本 + dataMap.put(TaskJobKeys.LANGUAGE, language); + dataMap.put(TaskJobKeys.ENV_ALIAS, envAlias); + // 变更类型 + dataMap.put(TaskJobKeys.CHANGE_TYPE, changeTypeEnum.getCode()); + buildAndSchedule(changeTypeEnum.getCode(), contextName, dataMap); + return newInstance; + } - private void buildAndSchedule(String changeTypeEnum, String contextName, JobDataMap dataMap) { - // ========================== 执行任务 ========================== - JobKey jobKey = JobKey.jobKey(changeTypeEnum, contextName); - TriggerKey triggerKey = TriggerKey.triggerKey(changeTypeEnum, contextName); - JobDetail jobDetail = JobBuilder.newJob(TaskJobBean.class).withIdentity(jobKey).usingJobData(dataMap).build(); - Trigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).startNow().build(); - try { - scheduler.scheduleJob(jobDetail, trigger); - } catch (ObjectAlreadyExistsException e) { - log.error("任务jobKey={},triggerKey={}任务已存在,跳过加载", jobKey.getName(), triggerKey.getName(), e); - throw new BadRequestException("任务已存在,跳过加载"); - } catch (SchedulerException e) { - log.error("任务jobKey={},triggerKey={}执行失败", jobKey.getName(), triggerKey.getName(), e); - throw new BadRequestException(e); - } - } + @Transactional(rollbackFor = Exception.class) + public TaskInstanceInfoTb saveTaskInstanceInfoTb(String contextName, TaskChangeTypeEnum changeTypeEnum, + String language, String envAlias, String source, String reason, JobDataMap dataMap, String templateInfo) { + TaskInstanceInfoTb newInstance = new TaskInstanceInfoTb(); + newInstance.setContextName(contextName); + newInstance.setLanguage(language); + newInstance.setChangeType(changeTypeEnum.getCode()); + newInstance.setEnvAlias(envAlias); + newInstance.setStatus(TaskStatusEnum.Running.getCode()); + newInstance.setFinishTime(null); + newInstance.setSource(source); + newInstance.setReason(reason); + newInstance.setTemplate(templateInfo); + newInstance.setJobData(JSON.toJSONString(dataMap)); + taskInstanceInfoService.save(newInstance); + return newInstance; + } - @Transactional(rollbackFor = Exception.class) - public void stopJob(Long instanceId) { - TaskInstanceInfoTb taskInstanceInfoTb = taskInstanceInfoService.getRunningById(instanceId); - String changeType = taskInstanceInfoTb.getChangeType(); - String contextName = taskInstanceInfoTb.getContextName(); - taskInstanceInfoTb.setStatus(TaskStatusEnum.Fail.getCode()); - taskInstanceInfoTb.setErrorMessage("任务被中断"); - taskInstanceInfoTb.setFinishTime(new Date()); - taskInstanceInfoService.updateById(taskInstanceInfoTb); - try { - JobKey jobKey = JobKey.jobKey(changeType, contextName); - TriggerKey triggerKey = TriggerKey.triggerKey(changeType, contextName); - // 停止触发器 - scheduler.pauseTrigger(triggerKey); - // 移除触发器 - scheduler.unscheduleJob(triggerKey); - // 删除并中断任务 - scheduler.deleteJob(jobKey); - scheduler.interrupt(jobKey); - } catch (SchedulerException e) { - log.error("任务停止失败", e); - throw new RuntimeException(e); - } + private void buildAndSchedule(String changeTypeEnum, String contextName, JobDataMap dataMap) { + // ========================== 执行任务 ========================== + JobKey jobKey = JobKey.jobKey(changeTypeEnum, contextName); + TriggerKey triggerKey = TriggerKey.triggerKey(changeTypeEnum, contextName); + JobDetail jobDetail = JobBuilder.newJob(TaskJobBean.class).withIdentity(jobKey).usingJobData(dataMap).build(); + Trigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).startNow().build(); + try { + scheduler.scheduleJob(jobDetail, trigger); + } catch (ObjectAlreadyExistsException e) { + log.error("任务jobKey={},triggerKey={}任务已存在,跳过加载", jobKey.getName(), triggerKey.getName(), e); + throw new BadRequestException("任务已存在,跳过加载"); + } catch (SchedulerException e) { + log.error("任务jobKey={},triggerKey={}执行失败", jobKey.getName(), triggerKey.getName(), e); + throw new BadRequestException(e); } + } - @Transactional(rollbackFor = Exception.class) - public TaskInstanceInfoTb retryJob(Long id, String retryNodeCode) { - // ========================== 查询任务 ========================== - TaskInstanceInfoTb taskInstanceInfoTb = taskInstanceInfoService.getById(id); - if (taskInstanceInfoTb == null) { - throw new BadRequestException("任务不存在"); - } - // ========================== 失败的任务才能重试 ========================== - if (TaskStatusEnum.Success.getCode().equals(taskInstanceInfoTb.getStatus())) { - throw new BadRequestException("任务已执行完毕,无法重试"); - } - // 参数重放 - JobDataMap dataMap = JSON.parseObject(taskInstanceInfoTb.getJobData(), JobDataMap.class); - if (dataMap == null) { - dataMap = new JobDataMap(); - } - taskInstanceInfoTb.setStatus(TaskStatusEnum.Running.getCode()); - taskInstanceInfoTb.setFinishTime(null); - taskInstanceInfoService.updateById(taskInstanceInfoTb); - // ========================== 执行任务 ========================== - dataMap.put(TaskJobKeys.RETRY_NODE_CODE, retryNodeCode); - String changeType = taskInstanceInfoTb.getChangeType(); - String contextName = taskInstanceInfoTb.getContextName(); - buildAndSchedule(changeType, contextName, dataMap); - return taskInstanceInfoTb; + @Transactional(rollbackFor = Exception.class) + public void stopJob(Long instanceId) { + TaskInstanceInfoTb taskInstanceInfoTb = taskInstanceInfoService.getRunningById(instanceId); + String changeType = taskInstanceInfoTb.getChangeType(); + String contextName = taskInstanceInfoTb.getContextName(); + taskInstanceInfoTb.setStatus(TaskStatusEnum.Fail.getCode()); + taskInstanceInfoTb.setErrorMessage("任务被中断"); + taskInstanceInfoTb.setFinishTime(new Date()); + taskInstanceInfoService.updateById(taskInstanceInfoTb); + try { + JobKey jobKey = JobKey.jobKey(changeType, contextName); + TriggerKey triggerKey = TriggerKey.triggerKey(changeType, contextName); + // 停止触发器 + scheduler.pauseTrigger(triggerKey); + // 移除触发器 + scheduler.unscheduleJob(triggerKey); + // 删除并中断任务 + scheduler.deleteJob(jobKey); + scheduler.interrupt(jobKey); + } catch (SchedulerException e) { + log.error("任务停止失败", e); + throw new RuntimeException(e); } + } - public TaskInstanceInfoVo getLastInfo(String contextName, String language, String envAlias, String changeType) { - TaskInstanceInfoVo record = new TaskInstanceInfoVo(); - TaskInstanceInfoTb historyInstance = - taskInstanceInfoService.getLastHistoryInstance(contextName, language, envAlias, changeType); - if (historyInstance == null) { - // 仅返回模板 - TaskTemplateInfoVo templateInfo = - taskTemplateInfoService.getTemplateInfoByECL(envAlias, contextName, language, changeType); - if (templateInfo == null) { - throw new BadRequestException("没有查询到任务编排模板"); - } - record.setTemplate(templateInfo.getTemplateInfo()); - return record; - } - record = BeanUtil.copyProperties(historyInstance, TaskInstanceInfoVo.class); - record.setHistory(buildNodeList(record)); - TaskInstanceInfoTb runningInstance = - taskInstanceInfoService.getLastRunningInstance(contextName, language, envAlias, changeType); - if (runningInstance != null) { - TaskInstanceInfoVo taskInstanceInfoVo = BeanUtil.copyProperties(runningInstance, TaskInstanceInfoVo.class); - record.setCurrent(buildNodeList(taskInstanceInfoVo)); - } - return record; + @Transactional(rollbackFor = Exception.class) + public TaskInstanceInfoTb retryJob(Long id, String retryNodeCode) { + // ========================== 查询任务 ========================== + TaskInstanceInfoTb taskInstanceInfoTb = taskInstanceInfoService.getById(id); + if (taskInstanceInfoTb == null) { + throw new BadRequestException("任务不存在"); } + // ========================== 失败的任务才能重试 ========================== + if (TaskStatusEnum.Success.getCode().equals(taskInstanceInfoTb.getStatus())) { + throw new BadRequestException("任务已执行完毕,无法重试"); + } + // 参数重放 + JobDataMap dataMap = JSON.parseObject(taskInstanceInfoTb.getJobData(), JobDataMap.class); + if (dataMap == null) { + dataMap = new JobDataMap(); + } + taskInstanceInfoTb.setStatus(TaskStatusEnum.Running.getCode()); + taskInstanceInfoTb.setFinishTime(null); + taskInstanceInfoService.updateById(taskInstanceInfoTb); + // ========================== 执行任务 ========================== + dataMap.put(TaskJobKeys.RETRY_NODE_CODE, retryNodeCode); + String changeType = taskInstanceInfoTb.getChangeType(); + String contextName = taskInstanceInfoTb.getContextName(); + buildAndSchedule(changeType, contextName, dataMap); + return taskInstanceInfoTb; + } - private List buildNodeList(TaskInstanceInfoVo record) { - List records = new ArrayList<>(); - // 节点明细 - List taskInstanceDetails = taskInstanceDetailService.queryByInstanceId(record.getId()); - for (TaskInstanceDetailTb taskInstanceDetail : taskInstanceDetails) { - TaskInstanceNodeVo instanceNodeVo = new TaskInstanceNodeVo(); - instanceNodeVo.setCode(taskInstanceDetail.getBizCode()); - instanceNodeVo.setName(taskInstanceDetail.getBizName()); - instanceNodeVo.setStartTime(taskInstanceDetail.getStartTime()); - instanceNodeVo.setFinishTime(taskInstanceDetail.getFinishTime()); - if (taskInstanceDetail.getFinishTime() == null) { - instanceNodeVo.setDurationDesc( - KitDateUtil.formatSecondsDuration(taskInstanceDetail.getStartTime(), new Date())); - } else { - instanceNodeVo.setDurationDesc(KitDateUtil.formatSecondsDuration(taskInstanceDetail.getStartTime(), - taskInstanceDetail.getFinishTime())); - } - instanceNodeVo.setRunningDesc(taskInstanceDetail.getExecuteInfo()); - instanceNodeVo.setStatus(taskInstanceDetail.getExecuteStatus()); - instanceNodeVo.setStatusDesc(TaskStatusEnum.getDesc(taskInstanceDetail.getExecuteStatus())); - records.add(instanceNodeVo); - } - return records; + public TaskInstanceInfoVo getLastInfo(String contextName, String language, String envAlias, String changeType) { + TaskInstanceInfoVo record = new TaskInstanceInfoVo(); + TaskInstanceInfoTb historyInstance = + taskInstanceInfoService.getLastHistoryInstance(contextName, language, envAlias, changeType); + if (historyInstance == null) { + // 仅返回模板 + TaskTemplateInfoVo templateInfo = + taskTemplateInfoService.getTemplateInfoByECL(envAlias, contextName, language, changeType); + if (templateInfo == null) { + throw new BadRequestException("没有查询到任务编排模板"); + } + record.setTemplate(templateInfo.getTemplateInfo()); + return record; } + record = BeanUtil.copyProperties(historyInstance, TaskInstanceInfoVo.class); + record.setHistory(buildNodeList(record)); + TaskInstanceInfoTb runningInstance = + taskInstanceInfoService.getLastRunningInstance(contextName, language, envAlias, changeType); + if (runningInstance != null) { + TaskInstanceInfoVo taskInstanceInfoVo = BeanUtil.copyProperties(runningInstance, TaskInstanceInfoVo.class); + record.setCurrent(buildNodeList(taskInstanceInfoVo)); + } + return record; + } + + private List buildNodeList(TaskInstanceInfoVo record) { + List records = new ArrayList<>(); + // 节点明细 + List taskInstanceDetails = taskInstanceDetailService.queryByInstanceId(record.getId()); + for (TaskInstanceDetailTb taskInstanceDetail : taskInstanceDetails) { + TaskInstanceNodeVo instanceNodeVo = new TaskInstanceNodeVo(); + instanceNodeVo.setCode(taskInstanceDetail.getBizCode()); + instanceNodeVo.setName(taskInstanceDetail.getBizName()); + instanceNodeVo.setStartTime(taskInstanceDetail.getStartTime()); + instanceNodeVo.setFinishTime(taskInstanceDetail.getFinishTime()); + if (taskInstanceDetail.getFinishTime() == null) { + instanceNodeVo.setDurationDesc( + KitDateUtil.formatSecondsDuration(taskInstanceDetail.getStartTime(), new Date())); + } else { + instanceNodeVo.setDurationDesc(KitDateUtil.formatSecondsDuration(taskInstanceDetail.getStartTime(), + taskInstanceDetail.getFinishTime())); + } + instanceNodeVo.setRunningDesc(taskInstanceDetail.getExecuteInfo()); + instanceNodeVo.setStatus(taskInstanceDetail.getExecuteStatus()); + instanceNodeVo.setStatusDesc(TaskStatusEnum.getDesc(taskInstanceDetail.getExecuteStatus())); + records.add(instanceNodeVo); + } + return records; + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskStepExecutor.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskStepExecutor.java index f362f4f7..a56ec20f 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskStepExecutor.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/TaskStepExecutor.java @@ -20,11 +20,12 @@ import cn.odboy.task.dal.model.TaskTemplateNodeVo; import org.quartz.JobDataMap; public interface TaskStepExecutor { - /** - * @param instanceDetailId 任务实例明细id - * @param jobDataMap 执行参数 - * @param taskTemplateNode 任务节点信息 - */ - void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) - throws BadRequestException; + + /** + * @param instanceDetailId 任务实例明细id + * @param jobDataMap 执行参数 + * @param taskTemplateNode 任务节点信息 + */ + void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) + throws BadRequestException; } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeBuildJava.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeBuildJava.java index 57e8a66c..be202e44 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeBuildJava.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeBuildJava.java @@ -26,9 +26,10 @@ import org.springframework.stereotype.Component; @Slf4j @Component public class TaskStepNodeBuildJava implements TaskStepExecutor { - @Override - public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) - throws BadRequestException { - ThreadUtil.sleep(2000); - } + + @Override + public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) + throws BadRequestException { + ThreadUtil.sleep(2000); + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeDeployJava.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeDeployJava.java index 8194be2f..37e11fb0 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeDeployJava.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeDeployJava.java @@ -26,9 +26,10 @@ import org.springframework.stereotype.Component; @Slf4j @Component public class TaskStepNodeDeployJava implements TaskStepExecutor { - @Override - public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) - throws BadRequestException { - ThreadUtil.sleep(5000); - } + + @Override + public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) + throws BadRequestException { + ThreadUtil.sleep(5000); + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeInit.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeInit.java index 2850b098..4a2adfcf 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeInit.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeInit.java @@ -27,13 +27,15 @@ import org.springframework.stereotype.Component; @Slf4j @Component public class TaskStepNodeInit implements TaskStepExecutor { - @Autowired private TaskInstanceStepDetailService stepDetailService; - @Override - public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) - throws BadRequestException { - stepDetailService.success(instanceDetailId, "开始初始化"); - stepDetailService.success(instanceDetailId, "初始化完毕后,放入了一些参数"); - jobDataMap.put("ExcuseMe", "Hello World!"); - } + @Autowired + private TaskInstanceStepDetailService stepDetailService; + + @Override + public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) + throws BadRequestException { + stepDetailService.success(instanceDetailId, "开始初始化"); + stepDetailService.success(instanceDetailId, "初始化完毕后,放入了一些参数"); + jobDataMap.put("ExcuseMe", "Hello World!"); + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeMergeBranch.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeMergeBranch.java index 565de0b8..442aab2c 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeMergeBranch.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/core/impl/TaskStepNodeMergeBranch.java @@ -28,13 +28,15 @@ import org.springframework.stereotype.Component; @Slf4j @Component public class TaskStepNodeMergeBranch implements TaskStepExecutor { - @Autowired private TaskInstanceStepDetailService stepDetailService; - @Override - public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) - throws BadRequestException { - ThreadUtil.sleep(3000); - stepDetailService.fail(instanceDetailId, "执行失败测试"); - // stepDetailService.success(instanceDetailId, "执行成功"); - } + @Autowired + private TaskInstanceStepDetailService stepDetailService; + + @Override + public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) + throws BadRequestException { + ThreadUtil.sleep(3000); + stepDetailService.fail(instanceDetailId, "执行失败测试"); + // stepDetailService.success(instanceDetailId, "执行成功"); + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceDetailTb.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceDetailTb.java index a28f2814..eb040ad3 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceDetailTb.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceDetailTb.java @@ -45,44 +45,65 @@ import lombok.ToString; @TableName("task_instance_detail") @ApiModel(value = "TaskInstanceDetailTb对象", description = "任务实例明细") public class TaskInstanceDetailTb extends KitObject { - @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) - private Date createTime; - /** - * id - */ - @ApiModelProperty("id") @TableId(value = "id", type = IdType.ASSIGN_ID) - @JsonSerialize(using = ToStringSerializer.class) @JSONField(format = "string") private Long id; - /** - * 任务实例id - */ - @TableField("instance_id") @ApiModelProperty("任务实例id") private Long instanceId; - /** - * 开始时间 - */ - @ApiModelProperty("开始时间") @TableField("start_time") private Date startTime; - /** - * 结束时间 - */ - @ApiModelProperty("结束时间") @TableField("finish_time") private Date finishTime; - /** - * 业务编码 - */ - @TableField("biz_code") @ApiModelProperty("业务编码") private String bizCode; - /** - * 业务名称(步骤) - */ - @TableField("biz_name") @ApiModelProperty("业务名称(步骤)") private String bizName; - /** - * 执行参数 - */ - @ApiModelProperty("执行参数") @TableField("execute_params") private String executeParams; - /** - * 执行信息 - */ - @ApiModelProperty("执行信息") @TableField("execute_info") private String executeInfo; - /** - * 执行状态(running进行中 success成功 fail失败) - */ - @TableField("execute_status") @ApiModelProperty("执行状态(running进行中 success成功 fail失败)") private String - executeStatus; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) + private Date createTime; + /** + * id + */ + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + @JSONField(format = "string") + private Long id; + /** + * 任务实例id + */ + @TableField("instance_id") + @ApiModelProperty("任务实例id") + private Long instanceId; + /** + * 开始时间 + */ + @ApiModelProperty("开始时间") + @TableField("start_time") + private Date startTime; + /** + * 结束时间 + */ + @ApiModelProperty("结束时间") + @TableField("finish_time") + private Date finishTime; + /** + * 业务编码 + */ + @TableField("biz_code") + @ApiModelProperty("业务编码") + private String bizCode; + /** + * 业务名称(步骤) + */ + @TableField("biz_name") + @ApiModelProperty("业务名称(步骤)") + private String bizName; + /** + * 执行参数 + */ + @ApiModelProperty("执行参数") + @TableField("execute_params") + private String executeParams; + /** + * 执行信息 + */ + @ApiModelProperty("执行信息") + @TableField("execute_info") + private String executeInfo; + /** + * 执行状态(running进行中 success成功 fail失败) + */ + @TableField("execute_status") + @ApiModelProperty("执行状态(running进行中 success成功 fail失败)") + private String + executeStatus; } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceInfoTb.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceInfoTb.java index c68f8426..bb2bb838 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceInfoTb.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceInfoTb.java @@ -46,59 +46,90 @@ import org.springframework.data.annotation.CreatedBy; @TableName("task_instance_info") @ApiModel(value = "TaskInstanceInfoTb对象", description = "任务实例") public class TaskInstanceInfoTb extends KitObject { - @CreatedBy @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "创建人", hidden = true) private String - createBy; - @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) - private Date createTime; - @TableField(fill = FieldFill.INSERT_UPDATE) - @ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) private Date updateTime; - /** - * id, @JsonSerialize和@JSONField,用于处理大数精度丢失问题 - */ - @ApiModelProperty("id") @TableId(value = "id", type = IdType.ASSIGN_ID) - @JsonSerialize(using = ToStringSerializer.class) @JSONField(format = "string") private Long id; - /** - * 名称 - */ - @ApiModelProperty("名称") @TableField("context_name") private String contextName; - /** - * 语言 - */ - @ApiModelProperty("语言") @TableField("`language`") private String language; - /** - * 变更类型 - */ - @ApiModelProperty("变更类型") @TableField("change_type") private String changeType; - /** - * 环境别名 - */ - @TableField("env_alias") @ApiModelProperty("环境别名") private String envAlias; - /** - * 状态(running进行中 success成功 fail失败) - */ - @TableField("`status`") @ApiModelProperty("状态(running进行中 success成功 fail失败)") private String status; - /** - * 完成时间 - */ - @ApiModelProperty("完成时间") @TableField("finish_time") private Date finishTime; - /** - * 来源 - */ - @ApiModelProperty("来源") @TableField("`source`") private String source; - /** - * 变更原因 - */ - @TableField("reason") @ApiModelProperty("变更原因") private String reason; - /** - * 任务模板 - */ - @TableField("template") @ApiModelProperty("template") private String template; - /** - * QuartzJob参数 - */ - @TableField("job_data") @ApiModelProperty("QuartzJob参数") private String jobData; - /** - * 异常信息 - */ - @TableField("error_message") @ApiModelProperty("异常信息") private String errorMessage; + + @CreatedBy + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建人", hidden = true) + private String + createBy; + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) + private Date createTime; + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) + private Date updateTime; + /** + * id, @JsonSerialize和@JSONField,用于处理大数精度丢失问题 + */ + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + @JSONField(format = "string") + private Long id; + /** + * 名称 + */ + @ApiModelProperty("名称") + @TableField("context_name") + private String contextName; + /** + * 语言 + */ + @ApiModelProperty("语言") + @TableField("`language`") + private String language; + /** + * 变更类型 + */ + @ApiModelProperty("变更类型") + @TableField("change_type") + private String changeType; + /** + * 环境别名 + */ + @TableField("env_alias") + @ApiModelProperty("环境别名") + private String envAlias; + /** + * 状态(running进行中 success成功 fail失败) + */ + @TableField("`status`") + @ApiModelProperty("状态(running进行中 success成功 fail失败)") + private String status; + /** + * 完成时间 + */ + @ApiModelProperty("完成时间") + @TableField("finish_time") + private Date finishTime; + /** + * 来源 + */ + @ApiModelProperty("来源") + @TableField("`source`") + private String source; + /** + * 变更原因 + */ + @TableField("reason") + @ApiModelProperty("变更原因") + private String reason; + /** + * 任务模板 + */ + @TableField("template") + @ApiModelProperty("template") + private String template; + /** + * QuartzJob参数 + */ + @TableField("job_data") + @ApiModelProperty("QuartzJob参数") + private String jobData; + /** + * 异常信息 + */ + @TableField("error_message") + @ApiModelProperty("异常信息") + private String errorMessage; } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceStepDetailTb.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceStepDetailTb.java index abef4c11..04238676 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceStepDetailTb.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceStepDetailTb.java @@ -45,23 +45,34 @@ import lombok.ToString; @TableName("task_instance_step_detail") @ApiModel(value = "TaskInstanceStepDetailTb对象", description = "") public class TaskInstanceStepDetailTb extends KitObject { - @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) - private Date createTime; - /** - * id - */ - @ApiModelProperty("id") @TableId(value = "id", type = IdType.ASSIGN_ID) - @JsonSerialize(using = ToStringSerializer.class) @JSONField(format = "string") private Long id; - /** - * task_instance_detail表id - */ - @TableField("instance_detail_id") @ApiModelProperty("task_instance_detail表id") private Long instanceDetailId; - /** - * 步骤描述 - */ - @TableField("step_desc") @ApiModelProperty("步骤描述") private String stepDesc; - /** - * 状态(success成功 fail失败) - */ - @TableField("step_status") @ApiModelProperty("状态(success成功 fail失败)") private String stepStatus; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) + private Date createTime; + /** + * id + */ + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + @JSONField(format = "string") + private Long id; + /** + * task_instance_detail表id + */ + @TableField("instance_detail_id") + @ApiModelProperty("task_instance_detail表id") + private Long instanceDetailId; + /** + * 步骤描述 + */ + @TableField("step_desc") + @ApiModelProperty("步骤描述") + private String stepDesc; + /** + * 状态(success成功 fail失败) + */ + @TableField("step_status") + @ApiModelProperty("状态(success成功 fail失败)") + private String stepStatus; } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskTemplateInfoTb.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskTemplateInfoTb.java index 70ded132..b1a3ba56 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskTemplateInfoTb.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/dataobject/TaskTemplateInfoTb.java @@ -40,36 +40,53 @@ import lombok.ToString; @TableName("task_template_info") @ApiModel(value = "TaskTemplateInfoTb对象", description = "任务模板") public class TaskTemplateInfoTb extends KitBaseUserTimeTb { - /** - * id - */ - @ApiModelProperty("id") @TableId(value = "id", type = IdType.AUTO) private Long id; - /** - * 数据有效性 - */ - @TableField("available") @ApiModelProperty("数据有效性") private Boolean available; - /** - * 变更类型 - */ - @ApiModelProperty("变更类型") @TableField("change_type") private String changeType; - /** - * 流水线名称 - */ - @TableField("`name`") @ApiModelProperty("流水线名称") private String name; - /** - * 流水线描述 - */ - @ApiModelProperty("流水线描述") @TableField("`description`") private String description; - /** - * 流水线模板内容 - */ - @TableField("template") @ApiModelProperty("流水线模板内容") private String template; - /** - * 环境别名 - */ - @TableField("env_alias") @ApiModelProperty("环境别名") private String envAlias; - /** - * 应用为语言,资源为类型 - */ - @TableField("`language`") @ApiModelProperty("应用为语言,资源为类型") private String language; + + /** + * id + */ + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 数据有效性 + */ + @TableField("available") + @ApiModelProperty("数据有效性") + private Boolean available; + /** + * 变更类型 + */ + @ApiModelProperty("变更类型") + @TableField("change_type") + private String changeType; + /** + * 流水线名称 + */ + @TableField("`name`") + @ApiModelProperty("流水线名称") + private String name; + /** + * 流水线描述 + */ + @ApiModelProperty("流水线描述") + @TableField("`description`") + private String description; + /** + * 流水线模板内容 + */ + @TableField("template") + @ApiModelProperty("流水线模板内容") + private String template; + /** + * 环境别名 + */ + @TableField("env_alias") + @ApiModelProperty("环境别名") + private String envAlias; + /** + * 应用为语言,资源为类型 + */ + @TableField("`language`") + @ApiModelProperty("应用为语言,资源为类型") + private String language; } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskInstanceInfoVo.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskInstanceInfoVo.java index 0072a506..5b1fcff1 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskInstanceInfoVo.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskInstanceInfoVo.java @@ -14,12 +14,13 @@ import lombok.Setter; @Getter @Setter public class TaskInstanceInfoVo extends TaskInstanceInfoTb { - /** - * 进行中 - */ - private List current; - /** - * 历史已完成或异常 - */ - private List history; + + /** + * 进行中 + */ + private List current; + /** + * 历史已完成或异常 + */ + private List history; } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskInstanceNodeVo.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskInstanceNodeVo.java index ea1ca05a..a9dea70b 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskInstanceNodeVo.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskInstanceNodeVo.java @@ -28,36 +28,37 @@ import lombok.Setter; @Getter @Setter public class TaskInstanceNodeVo extends KitObject { - /** - * 业务编码 - */ - protected String code; - /** - * 业务名称 - */ - protected String name; - /** - * 开始时间 - */ - protected Date startTime; - /** - * 完成时间 - */ - protected Date finishTime; - /** - * 耗时多久 - */ - protected String durationDesc; - /** - * 进行中描述 - */ - protected String runningDesc; - /** - * 节点状态编码 - */ - protected String status; - /** - * 节点状态描述 - */ - protected String statusDesc; + + /** + * 业务编码 + */ + protected String code; + /** + * 业务名称 + */ + protected String name; + /** + * 开始时间 + */ + protected Date startTime; + /** + * 完成时间 + */ + protected Date finishTime; + /** + * 耗时多久 + */ + protected String durationDesc; + /** + * 进行中描述 + */ + protected String runningDesc; + /** + * 节点状态编码 + */ + protected String status; + /** + * 节点状态描述 + */ + protected String statusDesc; } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateInfoVo.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateInfoVo.java index 3a7d0930..7028ebe2 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateInfoVo.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateInfoVo.java @@ -22,11 +22,12 @@ import lombok.Setter; @Getter @Setter public class TaskTemplateInfoVo extends KitObject { - private String changeType; - private String name; - private String description; - private String envAlias; - private String language; - private String contextName; - private String templateInfo; + + private String changeType; + private String name; + private String description; + private String envAlias; + private String language; + private String contextName; + private String templateInfo; } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeOperateButtonVo.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeOperateButtonVo.java index a63ebb2a..3140f825 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeOperateButtonVo.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeOperateButtonVo.java @@ -29,20 +29,21 @@ import lombok.Setter; @Getter @Setter public class TaskTemplateNodeOperateButtonVo extends KitObject { - /** - * 按钮类型(service:调用某个服务并传递参数 link:带参跳转) - */ - private String type; - /** - * 按钮标题 - */ - private String title; - /** - * 按钮传递的参数 - */ - private String code; - /** - * 默认附加参数 - */ - private Map parameters = new HashMap<>(); + + /** + * 按钮类型(service:调用某个服务并传递参数 link:带参跳转) + */ + private String type; + /** + * 按钮标题 + */ + private String title; + /** + * 按钮传递的参数 + */ + private String code; + /** + * 默认附加参数 + */ + private Map parameters = new HashMap<>(); } \ No newline at end of file diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeVo.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeVo.java index ffd8690b..c2189617 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeVo.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeVo.java @@ -31,36 +31,37 @@ import lombok.Setter; @Getter @Setter public class TaskTemplateNodeVo extends KitObject { - /** - * 业务编码 - */ - protected String code; - /** - * 业务类型(service:系统内置服务 rpc:远程调用) - */ - protected String type; - /** - * 业务名称 - */ - protected String name; - /** - * 是否可点击 - */ - protected Boolean click = false; - /** - * 是否可重试 - */ - protected Boolean retry = false; - /** - * 是否可点击:点击展示详情,详情内容类型 - */ - protected String detailType = ""; - /** - * 默认参数
execute: 执行调用 describe: 明细调用 - */ - protected Map parameters = new HashMap<>(); - /** - * 流水线节点控制按钮 - */ - protected List buttons = new ArrayList<>(); + + /** + * 业务编码 + */ + protected String code; + /** + * 业务类型(service:系统内置服务 rpc:远程调用) + */ + protected String type; + /** + * 业务名称 + */ + protected String name; + /** + * 是否可点击 + */ + protected Boolean click = false; + /** + * 是否可重试 + */ + protected Boolean retry = false; + /** + * 是否可点击:点击展示详情,详情内容类型 + */ + protected String detailType = ""; + /** + * 默认参数
execute: 执行调用 describe: 明细调用 + */ + protected Map parameters = new HashMap<>(); + /** + * 流水线节点控制按钮 + */ + protected List buttons = new ArrayList<>(); } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceDetailMapper.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceDetailMapper.java index 9536b3dd..c79849e5 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceDetailMapper.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceDetailMapper.java @@ -28,4 +28,6 @@ import org.apache.ibatis.annotations.Mapper; * @since 2025-09-26 */ @Mapper -public interface TaskInstanceDetailMapper extends BaseMapper {} +public interface TaskInstanceDetailMapper extends BaseMapper { + +} diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceInfoMapper.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceInfoMapper.java index 7fb0336b..682b0b8c 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceInfoMapper.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceInfoMapper.java @@ -28,4 +28,6 @@ import org.apache.ibatis.annotations.Mapper; * @since 2025-09-26 */ @Mapper -public interface TaskInstanceInfoMapper extends BaseMapper {} +public interface TaskInstanceInfoMapper extends BaseMapper { + +} diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceStepDetailMapper.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceStepDetailMapper.java index 29cdf5ae..67451484 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceStepDetailMapper.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceStepDetailMapper.java @@ -28,4 +28,6 @@ import org.apache.ibatis.annotations.Mapper; * @since 2025-09-28 */ @Mapper -public interface TaskInstanceStepDetailMapper extends BaseMapper {} +public interface TaskInstanceStepDetailMapper extends BaseMapper { + +} diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskTemplateInfoMapper.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskTemplateInfoMapper.java index 50419cfa..3a646577 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskTemplateInfoMapper.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/dal/mysql/TaskTemplateInfoMapper.java @@ -31,14 +31,15 @@ import org.apache.ibatis.annotations.Param; */ @Mapper public interface TaskTemplateInfoMapper extends BaseMapper { - /** - * @param envAlias 环境别称 - * @param contextName 应用名称、资源类型 - * @param language 语言、版本 - * @param changeType 变更类型 - * @return / - */ - TaskTemplateInfoVo selectTemplateInfoByECL(@Param("envAlias") String envAlias, - @Param("contextName") String contextName, @Param("language") String language, - @Param("changeType") String changeType); + + /** + * @param envAlias 环境别称 + * @param contextName 应用名称、资源类型 + * @param language 语言、版本 + * @param changeType 变更类型 + * @return / + */ + TaskTemplateInfoVo selectTemplateInfoByECL(@Param("envAlias") String envAlias, + @Param("contextName") String contextName, @Param("language") String language, + @Param("changeType") String changeType); } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceDetailService.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceDetailService.java index 1ab378d6..be7c69e9 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceDetailService.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceDetailService.java @@ -38,72 +38,74 @@ import org.springframework.stereotype.Service; */ @Service public class TaskInstanceDetailService { - @Autowired private TaskInstanceDetailMapper taskInstanceDetailMapper; - public void fastFailWithInfo(Long instanceId, String code, String executeInfo) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.eq(TaskInstanceDetailTb::getBizCode, code); - wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); - wrapper.set(TaskInstanceDetailTb::getExecuteInfo, executeInfo); - wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Fail.getCode()); - taskInstanceDetailMapper.update(null, wrapper); - } + @Autowired + private TaskInstanceDetailMapper taskInstanceDetailMapper; - public void fastSuccess(Long instanceId, String code) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.eq(TaskInstanceDetailTb::getBizCode, code); - wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); - wrapper.set(TaskInstanceDetailTb::getExecuteInfo, TaskStatusEnum.Success.getName()); - wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Success.getCode()); - taskInstanceDetailMapper.update(null, wrapper); - } + public void fastFailWithInfo(Long instanceId, String code, String executeInfo) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.eq(TaskInstanceDetailTb::getBizCode, code); + wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); + wrapper.set(TaskInstanceDetailTb::getExecuteInfo, executeInfo); + wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Fail.getCode()); + taskInstanceDetailMapper.update(null, wrapper); + } - public void fastSuccessWithInfo(Long instanceId, String code, String executeInfo) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.eq(TaskInstanceDetailTb::getBizCode, code); - wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); - wrapper.set(TaskInstanceDetailTb::getExecuteInfo, - executeInfo == null ? TaskStatusEnum.Success.getName() : executeInfo); - wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Success.getCode()); - taskInstanceDetailMapper.update(null, wrapper); - } + public void fastSuccess(Long instanceId, String code) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.eq(TaskInstanceDetailTb::getBizCode, code); + wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); + wrapper.set(TaskInstanceDetailTb::getExecuteInfo, TaskStatusEnum.Success.getName()); + wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Success.getCode()); + taskInstanceDetailMapper.update(null, wrapper); + } - public void fastStart(Long instanceId, String code, JobDataMap dataMap) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.eq(TaskInstanceDetailTb::getBizCode, code); - wrapper.set(TaskInstanceDetailTb::getStartTime, new Date()); - wrapper.set(TaskInstanceDetailTb::getExecuteInfo, TaskStatusEnum.Running.getName()); - wrapper.set(TaskInstanceDetailTb::getExecuteParams, JSON.toJSONString(dataMap)); - wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Running.getCode()); - taskInstanceDetailMapper.update(null, wrapper); - } + public void fastSuccessWithInfo(Long instanceId, String code, String executeInfo) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.eq(TaskInstanceDetailTb::getBizCode, code); + wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); + wrapper.set(TaskInstanceDetailTb::getExecuteInfo, + executeInfo == null ? TaskStatusEnum.Success.getName() : executeInfo); + wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Success.getCode()); + taskInstanceDetailMapper.update(null, wrapper); + } - public List queryByInstanceIdAndBizCodeList(Long instanceId, List bizCodeList) { - if (CollUtil.isEmpty(bizCodeList)) { - return CollUtil.newArrayList(); - } - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.in(TaskInstanceDetailTb::getBizCode, bizCodeList); - return taskInstanceDetailMapper.selectList(wrapper); - } + public void fastStart(Long instanceId, String code, JobDataMap dataMap) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.eq(TaskInstanceDetailTb::getBizCode, code); + wrapper.set(TaskInstanceDetailTb::getStartTime, new Date()); + wrapper.set(TaskInstanceDetailTb::getExecuteInfo, TaskStatusEnum.Running.getName()); + wrapper.set(TaskInstanceDetailTb::getExecuteParams, JSON.toJSONString(dataMap)); + wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Running.getCode()); + taskInstanceDetailMapper.update(null, wrapper); + } - public List queryByInstanceId(Long instanceId) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.orderByAsc(TaskInstanceDetailTb::getId); - return taskInstanceDetailMapper.selectList(wrapper); + public List queryByInstanceIdAndBizCodeList(Long instanceId, List bizCodeList) { + if (CollUtil.isEmpty(bizCodeList)) { + return CollUtil.newArrayList(); } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.in(TaskInstanceDetailTb::getBizCode, bizCodeList); + return taskInstanceDetailMapper.selectList(wrapper); + } - public void saveBatch(List taskInstanceDetails) { - taskInstanceDetailMapper.insert(taskInstanceDetails); - } + public List queryByInstanceId(Long instanceId) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.orderByAsc(TaskInstanceDetailTb::getId); + return taskInstanceDetailMapper.selectList(wrapper); + } - public void removeByIds(List taskInstanceDetailIds) { - taskInstanceDetailMapper.deleteByIds(taskInstanceDetailIds); - } + public void saveBatch(List taskInstanceDetails) { + taskInstanceDetailMapper.insert(taskInstanceDetails); + } + + public void removeByIds(List taskInstanceDetailIds) { + taskInstanceDetailMapper.deleteByIds(taskInstanceDetailIds); + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceInfoService.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceInfoService.java index 512755d7..97437c85 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceInfoService.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceInfoService.java @@ -36,80 +36,82 @@ import org.springframework.transaction.annotation.Transactional; */ @Service public class TaskInstanceInfoService { - @Autowired private TaskInstanceInfoMapper taskInstanceInfoMapper; - public TaskInstanceInfoTb getRunningById(Long id) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceInfoTb::getId, id); - wrapper.eq(TaskInstanceInfoTb::getStatus, TaskStatusEnum.Running.getCode()); - wrapper.orderByDesc(TaskInstanceInfoTb::getId); - return taskInstanceInfoMapper.selectOne(wrapper); - } + @Autowired + private TaskInstanceInfoMapper taskInstanceInfoMapper; - @Transactional(rollbackFor = Exception.class) - public void fastFailWithMessage(Long id, String errorMessage) { - TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); - updRecord.setId(id); - updRecord.setFinishTime(new Date()); - updRecord.setStatus(TaskStatusEnum.Fail.getCode()); - updRecord.setErrorMessage(errorMessage); - taskInstanceInfoMapper.updateById(updRecord); - } + public TaskInstanceInfoTb getRunningById(Long id) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceInfoTb::getId, id); + wrapper.eq(TaskInstanceInfoTb::getStatus, TaskStatusEnum.Running.getCode()); + wrapper.orderByDesc(TaskInstanceInfoTb::getId); + return taskInstanceInfoMapper.selectOne(wrapper); + } - @Transactional(rollbackFor = Exception.class) - public void fastFailWithMessageData(Long id, String errorMessage, JobDataMap dataMap) { - TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); - updRecord.setId(id); - updRecord.setFinishTime(new Date()); - updRecord.setStatus(TaskStatusEnum.Fail.getCode()); - updRecord.setErrorMessage(errorMessage); - updRecord.setJobData(JSON.toJSONString(dataMap)); - taskInstanceInfoMapper.updateById(updRecord); - } + @Transactional(rollbackFor = Exception.class) + public void fastFailWithMessage(Long id, String errorMessage) { + TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); + updRecord.setId(id); + updRecord.setFinishTime(new Date()); + updRecord.setStatus(TaskStatusEnum.Fail.getCode()); + updRecord.setErrorMessage(errorMessage); + taskInstanceInfoMapper.updateById(updRecord); + } - @Transactional(rollbackFor = Exception.class) - public void fastSuccessWithData(Long id, JobDataMap dataMap) { - TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); - updRecord.setId(id); - updRecord.setFinishTime(new Date()); - updRecord.setStatus(TaskStatusEnum.Success.getCode()); - updRecord.setJobData(JSON.toJSONString(dataMap)); - taskInstanceInfoMapper.updateById(updRecord); - } + @Transactional(rollbackFor = Exception.class) + public void fastFailWithMessageData(Long id, String errorMessage, JobDataMap dataMap) { + TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); + updRecord.setId(id); + updRecord.setFinishTime(new Date()); + updRecord.setStatus(TaskStatusEnum.Fail.getCode()); + updRecord.setErrorMessage(errorMessage); + updRecord.setJobData(JSON.toJSONString(dataMap)); + taskInstanceInfoMapper.updateById(updRecord); + } - public TaskInstanceInfoTb getLastRunningInstance(String contextName, String language, String envAlias, - String changeType) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceInfoTb::getContextName, contextName); - wrapper.eq(TaskInstanceInfoTb::getLanguage, language); - wrapper.eq(TaskInstanceInfoTb::getEnvAlias, envAlias); - wrapper.eq(TaskInstanceInfoTb::getChangeType, changeType); - wrapper.eq(TaskInstanceInfoTb::getStatus, TaskStatusEnum.Running.getCode()); - wrapper.orderByDesc(TaskInstanceInfoTb::getId); - return taskInstanceInfoMapper.selectOne(wrapper); - } + @Transactional(rollbackFor = Exception.class) + public void fastSuccessWithData(Long id, JobDataMap dataMap) { + TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); + updRecord.setId(id); + updRecord.setFinishTime(new Date()); + updRecord.setStatus(TaskStatusEnum.Success.getCode()); + updRecord.setJobData(JSON.toJSONString(dataMap)); + taskInstanceInfoMapper.updateById(updRecord); + } - public TaskInstanceInfoTb getLastHistoryInstance(String contextName, String language, String envAlias, - String changeType) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceInfoTb::getContextName, contextName); - wrapper.eq(TaskInstanceInfoTb::getLanguage, language); - wrapper.eq(TaskInstanceInfoTb::getEnvAlias, envAlias); - wrapper.eq(TaskInstanceInfoTb::getChangeType, changeType); - wrapper.orderByDesc(TaskInstanceInfoTb::getId); - wrapper.last("LIMIT 1"); - return taskInstanceInfoMapper.selectOne(wrapper); - } + public TaskInstanceInfoTb getLastRunningInstance(String contextName, String language, String envAlias, + String changeType) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceInfoTb::getContextName, contextName); + wrapper.eq(TaskInstanceInfoTb::getLanguage, language); + wrapper.eq(TaskInstanceInfoTb::getEnvAlias, envAlias); + wrapper.eq(TaskInstanceInfoTb::getChangeType, changeType); + wrapper.eq(TaskInstanceInfoTb::getStatus, TaskStatusEnum.Running.getCode()); + wrapper.orderByDesc(TaskInstanceInfoTb::getId); + return taskInstanceInfoMapper.selectOne(wrapper); + } - public void save(TaskInstanceInfoTb newInstance) { - taskInstanceInfoMapper.insert(newInstance); - } + public TaskInstanceInfoTb getLastHistoryInstance(String contextName, String language, String envAlias, + String changeType) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceInfoTb::getContextName, contextName); + wrapper.eq(TaskInstanceInfoTb::getLanguage, language); + wrapper.eq(TaskInstanceInfoTb::getEnvAlias, envAlias); + wrapper.eq(TaskInstanceInfoTb::getChangeType, changeType); + wrapper.orderByDesc(TaskInstanceInfoTb::getId); + wrapper.last("LIMIT 1"); + return taskInstanceInfoMapper.selectOne(wrapper); + } - public TaskInstanceInfoTb getById(Long id) { - return taskInstanceInfoMapper.selectById(id); - } + public void save(TaskInstanceInfoTb newInstance) { + taskInstanceInfoMapper.insert(newInstance); + } - public void updateById(TaskInstanceInfoTb taskInstanceInfoTb) { - taskInstanceInfoMapper.updateById(taskInstanceInfoTb); - } + public TaskInstanceInfoTb getById(Long id) { + return taskInstanceInfoMapper.selectById(id); + } + + public void updateById(TaskInstanceInfoTb taskInstanceInfoTb) { + taskInstanceInfoMapper.updateById(taskInstanceInfoTb); + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceStepDetailService.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceStepDetailService.java index 5fc17068..6284be14 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceStepDetailService.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskInstanceStepDetailService.java @@ -35,48 +35,50 @@ import org.springframework.stereotype.Service; */ @Service public class TaskInstanceStepDetailService { - @Autowired private TaskInstanceStepDetailMapper taskInstanceStepDetailMapper; - /** - * 步骤执行成功 - * - * @param instanceDetailId 任务实例明细id - * @param stepDesc 步骤描述 - */ - public void success(Long instanceDetailId, String stepDesc) { - TaskInstanceStepDetailTb stepDetail = new TaskInstanceStepDetailTb(); - stepDetail.setInstanceDetailId(instanceDetailId); - stepDetail.setStepDesc(stepDesc); - stepDetail.setStepStatus(TaskStatusEnum.Success.getCode()); - taskInstanceStepDetailMapper.insert(stepDetail); - } + @Autowired + private TaskInstanceStepDetailMapper taskInstanceStepDetailMapper; - /** - * 步骤执行失败 - * - * @param instanceDetailId 任务实例明细id - * @param stepDesc 步骤描述 - */ - public void fail(Long instanceDetailId, String stepDesc) { - TaskInstanceStepDetailTb stepDetail = new TaskInstanceStepDetailTb(); - stepDetail.setInstanceDetailId(instanceDetailId); - stepDetail.setStepDesc(stepDesc); - stepDetail.setStepStatus(TaskStatusEnum.Fail.getCode()); - taskInstanceStepDetailMapper.insert(stepDetail); - throw new BadRequestException(stepDesc); - } + /** + * 步骤执行成功 + * + * @param instanceDetailId 任务实例明细id + * @param stepDesc 步骤描述 + */ + public void success(Long instanceDetailId, String stepDesc) { + TaskInstanceStepDetailTb stepDetail = new TaskInstanceStepDetailTb(); + stepDetail.setInstanceDetailId(instanceDetailId); + stepDetail.setStepDesc(stepDesc); + stepDetail.setStepStatus(TaskStatusEnum.Success.getCode()); + taskInstanceStepDetailMapper.insert(stepDetail); + } - /** - * 根据明细ID删除步骤明细 - * - * @param instanceDetailIds 任务实例明细id集合 - */ - public void removeByInstanceDetailIds(List instanceDetailIds) { - if (CollUtil.isNotEmpty(instanceDetailIds)) { - return; - } - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(TaskInstanceStepDetailTb::getInstanceDetailId, instanceDetailIds); - taskInstanceStepDetailMapper.delete(wrapper); + /** + * 步骤执行失败 + * + * @param instanceDetailId 任务实例明细id + * @param stepDesc 步骤描述 + */ + public void fail(Long instanceDetailId, String stepDesc) { + TaskInstanceStepDetailTb stepDetail = new TaskInstanceStepDetailTb(); + stepDetail.setInstanceDetailId(instanceDetailId); + stepDetail.setStepDesc(stepDesc); + stepDetail.setStepStatus(TaskStatusEnum.Fail.getCode()); + taskInstanceStepDetailMapper.insert(stepDetail); + throw new BadRequestException(stepDesc); + } + + /** + * 根据明细ID删除步骤明细 + * + * @param instanceDetailIds 任务实例明细id集合 + */ + public void removeByInstanceDetailIds(List instanceDetailIds) { + if (CollUtil.isNotEmpty(instanceDetailIds)) { + return; } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(TaskInstanceStepDetailTb::getInstanceDetailId, instanceDetailIds); + taskInstanceStepDetailMapper.delete(wrapper); + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskTemplateInfoService.java b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskTemplateInfoService.java index 960b0716..6f0a9195 100644 --- a/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskTemplateInfoService.java +++ b/cutejava/cutejava-module-task-v1/src/main/java/cn/odboy/task/service/TaskTemplateInfoService.java @@ -30,10 +30,12 @@ import org.springframework.stereotype.Service; */ @Service public class TaskTemplateInfoService { - @Autowired private TaskTemplateInfoMapper taskTemplateInfoMapper; - public TaskTemplateInfoVo getTemplateInfoByECL(String envAlias, String contextName, String language, - String changeType) { - return taskTemplateInfoMapper.selectTemplateInfoByECL(envAlias, contextName, language, changeType); - } + @Autowired + private TaskTemplateInfoMapper taskTemplateInfoMapper; + + public TaskTemplateInfoVo getTemplateInfoByECL(String envAlias, String contextName, String language, + String changeType) { + return taskTemplateInfoMapper.selectTemplateInfoByECL(envAlias, contextName, language, changeType); + } } diff --git a/cutejava/cutejava-module-task-v1/src/main/resources/mapper/TaskTemplateInfoMapper.xml b/cutejava/cutejava-module-task-v1/src/main/resources/mapper/TaskTemplateInfoMapper.xml index b0f24dbd..f440ada8 100644 --- a/cutejava/cutejava-module-task-v1/src/main/resources/mapper/TaskTemplateInfoMapper.xml +++ b/cutejava/cutejava-module-task-v1/src/main/resources/mapper/TaskTemplateInfoMapper.xml @@ -1,19 +1,19 @@ - + diff --git a/cutejava/cutejava-module-task-v2/pom.xml b/cutejava/cutejava-module-task-v2/pom.xml index b5752e8f..36f6c9f3 100644 --- a/cutejava/cutejava-module-task-v2/pom.xml +++ b/cutejava/cutejava-module-task-v2/pom.xml @@ -1,19 +1,19 @@ - - cutejava - cn.odboy - 1.4.1 - - 4.0.0 - cutejava-module-task-v2 - 任务模块V2:根据任务标记停止轮询检查 - - - cn.odboy - cutejava-module-system - 1.4.1 - - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + cutejava + cn.odboy + 1.4.1 + + 4.0.0 + cutejava-module-task-v2 + 任务模块V2:根据任务标记停止轮询检查 + + + cn.odboy + cutejava-module-system + 1.4.1 + + diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskChangeTypeEnum.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskChangeTypeEnum.java index 587de031..6d207108 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskChangeTypeEnum.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskChangeTypeEnum.java @@ -27,14 +27,14 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum TaskChangeTypeEnum { - AppApply("AppApply", "申请应用"), AppContainerRestart("AppContainerRestart", "容器应用重启"), - AppContainerDeploy("AppContainerDeploy", "容器应用部署"), AppOffline("AppOffline", "应用下线"), - AppChangeReplicas("AppChangeReplicas", "应用扩缩容"), AppUpgrade("AppUpgrade", "应用升配"), - AppDowngrade("AppDowngrade", "应用降配"), AppHostRestart("AppHostRestart", "主机应用重启"), - AppHostDeploy("AppHostDeploy", "主机应用部署"), AppContainerRollback("AppContainerRollback", "容器应用回滚"), - AppHostRollback("AppHostRollback", "主机应用回滚"), ResourceApply("ResourceApply", "申请资源"), - ResourceOffline("ResourceOffline", "资源下线"), DataChange("DataChange", "数据变更"), - HostnameApply("HostnameApply", "申请域名"), HostnameChange("HostnameChange", "域名变更"); - private final String code; - private final String name; + AppApply("AppApply", "申请应用"), AppContainerRestart("AppContainerRestart", "容器应用重启"), + AppContainerDeploy("AppContainerDeploy", "容器应用部署"), AppOffline("AppOffline", "应用下线"), + AppChangeReplicas("AppChangeReplicas", "应用扩缩容"), AppUpgrade("AppUpgrade", "应用升配"), + AppDowngrade("AppDowngrade", "应用降配"), AppHostRestart("AppHostRestart", "主机应用重启"), + AppHostDeploy("AppHostDeploy", "主机应用部署"), AppContainerRollback("AppContainerRollback", "容器应用回滚"), + AppHostRollback("AppHostRollback", "主机应用回滚"), ResourceApply("ResourceApply", "申请资源"), + ResourceOffline("ResourceOffline", "资源下线"), DataChange("DataChange", "数据变更"), + HostnameApply("HostnameApply", "申请域名"), HostnameChange("HostnameChange", "域名变更"); + private final String code; + private final String name; } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskJobKeys.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskJobKeys.java index 783c7597..1bef1a87 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskJobKeys.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskJobKeys.java @@ -7,10 +7,11 @@ package cn.odboy.task.constant; * @date 2025-10-25 */ public interface TaskJobKeys { - String ID = "id"; - String CONTEXT_NAME = "contextName"; - String LANGUAGE = "language"; - String ENV_ALIAS = "envAlias"; - String CHANGE_TYPE = "changeType"; - String RETRY_NODE_CODE = "retryNodeCode"; + + String ID = "id"; + String CONTEXT_NAME = "contextName"; + String LANGUAGE = "language"; + String ENV_ALIAS = "envAlias"; + String CHANGE_TYPE = "changeType"; + String RETRY_NODE_CODE = "retryNodeCode"; } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskStatusEnum.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskStatusEnum.java index 32f66b4e..ff694321 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskStatusEnum.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/constant/TaskStatusEnum.java @@ -27,17 +27,17 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum TaskStatusEnum { - Pending("pending", "未开始"), Running("running", "运行中"), Success("success", "执行成功"), - Fail("fail", "执行失败"); - private final String code; - private final String name; + Pending("pending", "未开始"), Running("running", "运行中"), Success("success", "执行成功"), + Fail("fail", "执行失败"); + private final String code; + private final String name; - public static String getDesc(String code) { - for (TaskStatusEnum taskStatusEnum : TaskStatusEnum.values()) { - if (taskStatusEnum.code.equals(code)) { - return taskStatusEnum.getName(); - } - } - return code; + public static String getDesc(String code) { + for (TaskStatusEnum taskStatusEnum : TaskStatusEnum.values()) { + if (taskStatusEnum.code.equals(code)) { + return taskStatusEnum.getName(); + } } + return code; + } } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/controller/TaskTestsController.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/controller/TaskTestsController.java index 4c912b9e..208fa520 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/controller/TaskTestsController.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/controller/TaskTestsController.java @@ -34,48 +34,50 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/task") public class TaskTestsController { - @Autowired private TaskManage taskManage; - @AnonymousAccess - @GetMapping(value = "/testCreate") - public ResponseEntity testCreate() { - TaskInstanceInfoTb instanceInfo = - taskManage.createJob("cutejava", TaskChangeTypeEnum.AppContainerDeploy, "java", "daily", "cutejava", - "功能测试", null); - log.info("任务创建成功,实例为:{}", JSON.toJSONString(instanceInfo)); - return ResponseEntity.ok(instanceInfo); - } + @Autowired + private TaskManage taskManage; - @AnonymousAccess - @GetMapping(value = "/testCreateAfterStop") - public ResponseEntity testCreateAfterStop() { - TaskInstanceInfoTb instanceInfo = - taskManage.createJob("cutejava", TaskChangeTypeEnum.AppContainerDeploy, "java", "daily", "cutejava", - "功能测试", null); - log.info("任务创建成功,实例为:{}", JSON.toJSONString(instanceInfo)); - ThreadUtil.execAsync(() -> { - ThreadUtil.safeSleep(5000); - taskManage.stopJob(instanceInfo.getId()); - }); - return ResponseEntity.ok(null); - } + @AnonymousAccess + @GetMapping(value = "/testCreate") + public ResponseEntity testCreate() { + TaskInstanceInfoTb instanceInfo = + taskManage.createJob("cutejava", TaskChangeTypeEnum.AppContainerDeploy, "java", "daily", "cutejava", + "功能测试", null); + log.info("任务创建成功,实例为:{}", JSON.toJSONString(instanceInfo)); + return ResponseEntity.ok(instanceInfo); + } - @AnonymousAccess - @GetMapping(value = "/testRetry") - public ResponseEntity testRetry(@RequestParam Long instanceId, @RequestParam String retryNodeCode) { - TaskInstanceInfoTb instanceInfo = taskManage.retryJob(instanceId, retryNodeCode); - log.info("任务重试成功,实例为:{}", JSON.toJSONString(instanceInfo)); - return ResponseEntity.ok(null); - } + @AnonymousAccess + @GetMapping(value = "/testCreateAfterStop") + public ResponseEntity testCreateAfterStop() { + TaskInstanceInfoTb instanceInfo = + taskManage.createJob("cutejava", TaskChangeTypeEnum.AppContainerDeploy, "java", "daily", "cutejava", + "功能测试", null); + log.info("任务创建成功,实例为:{}", JSON.toJSONString(instanceInfo)); + ThreadUtil.execAsync(() -> { + ThreadUtil.safeSleep(5000); + taskManage.stopJob(instanceInfo.getId()); + }); + return ResponseEntity.ok(null); + } - @AnonymousAccess - @GetMapping(value = "/last") - public ResponseEntity testLast() { - String contextName = "cutejava"; - String language = "java"; - String changeType = TaskChangeTypeEnum.AppContainerDeploy.getCode(); - String envAlias = "daily"; - TaskInstanceInfoVo instanceInfo = taskManage.getLastInfo(contextName, language, envAlias, changeType); - return ResponseEntity.ok(instanceInfo); - } + @AnonymousAccess + @GetMapping(value = "/testRetry") + public ResponseEntity testRetry(@RequestParam Long instanceId, @RequestParam String retryNodeCode) { + TaskInstanceInfoTb instanceInfo = taskManage.retryJob(instanceId, retryNodeCode); + log.info("任务重试成功,实例为:{}", JSON.toJSONString(instanceInfo)); + return ResponseEntity.ok(null); + } + + @AnonymousAccess + @GetMapping(value = "/last") + public ResponseEntity testLast() { + String contextName = "cutejava"; + String language = "java"; + String changeType = TaskChangeTypeEnum.AppContainerDeploy.getCode(); + String envAlias = "daily"; + TaskInstanceInfoVo instanceInfo = taskManage.getLastInfo(contextName, language, envAlias, changeType); + return ResponseEntity.ok(instanceInfo); + } } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskJobBean.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskJobBean.java index 63180f0b..9d3db724 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskJobBean.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskJobBean.java @@ -41,193 +41,194 @@ import org.springframework.scheduling.quartz.QuartzJobBean; @Slf4j public class TaskJobBean extends QuartzJobBean { - private String getBeanAlias(String code) { - if (StrUtil.isBlank(code)) { - throw new ServerException("参数code必填"); + + private String getBeanAlias(String code) { + if (StrUtil.isBlank(code)) { + throw new ServerException("参数code必填"); + } + // node_init + String[] s = code.split("_"); + return Arrays.stream(s).map(StrUtil::upperFirst).collect(Collectors.joining()); + } + + @Override + public void executeInternal(JobExecutionContext context) { + // ========================== 获取代理类 ========================== + TaskInstanceInfoService taskInstanceInfoService = KitSpringBeanHolder.getBean(TaskInstanceInfoService.class); + TaskInstanceDetailService taskInstanceDetailService = + KitSpringBeanHolder.getBean(TaskInstanceDetailService.class); + // ========================== 获取参数 ========================== + JobDataMap dataMap = context.getMergedJobDataMap(); + long id = dataMap.getLong(TaskJobKeys.ID); + // ========================== 获取任务编排模板 ========================== + TaskInstanceInfoTb taskInstanceInfoVo = taskInstanceInfoService.getRunningById(id); + String templateInfo = taskInstanceInfoVo.getTemplate(); + List taskTemplateNodeVos = JSON.parseArray(templateInfo, TaskTemplateNodeVo.class); + // ========================== 判断是否重试任务 ========================== + String retryNodeCode = dataMap.getString(TaskJobKeys.RETRY_NODE_CODE); + if (StrUtil.isBlank(retryNodeCode)) { + executeNormalTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos); + } else { + executeRetryTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos, + retryNodeCode); + } + } + + /** + * 执行普通任务(非重试任务) + * + * @param taskInstanceInfoService 任务实例信息服务 + * @param taskInstanceDetailService 任务实例明细服务 + * @param id 任务实例ID + * @param dataMap 数据映射 + * @param taskTemplateNodeVos 模板节点列表 + */ + private void executeNormalTask(TaskInstanceInfoService taskInstanceInfoService, + TaskInstanceDetailService taskInstanceDetailService, long id, JobDataMap dataMap, + List taskTemplateNodeVos) { + // ========================== 初始化执行明细 ========================== + List taskInstanceDetails = + taskTemplateNodeVos.stream().map(taskTemplateNodeVo -> buildTaskInstanceDetail(id, taskTemplateNodeVo)) + .collect(Collectors.toList()); + taskInstanceDetailService.saveBatch(taskInstanceDetails); + Map codeIdMap = taskInstanceDetails.stream() + .collect(Collectors.toMap(TaskInstanceDetailTb::getBizCode, TaskInstanceDetailTb::getId)); + // ========================== 顺序执行 ========================== + executeTaskSteps(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos, + codeIdMap); + } + + /** + * 执行重试任务 + * + * @param taskInstanceInfoService 任务实例信息服务 + * @param taskInstanceDetailService 任务实例明细服务 + * @param id 任务实例ID + * @param dataMap 数据映射 + * @param taskTemplateNodeVos 模板节点列表 + * @param retryNodeCode 重试节点编码 + */ + private void executeRetryTask(TaskInstanceInfoService taskInstanceInfoService, + TaskInstanceDetailService taskInstanceDetailService, long id, JobDataMap dataMap, + List taskTemplateNodeVos, String retryNodeCode) { + boolean isFound = false; + // ========================== 初始化执行明细 ========================== + List taskInstanceDetails = new ArrayList<>(); + List taskTemplateNodeRetryList = new ArrayList<>(); + for (TaskTemplateNodeVo taskTemplateNodeVo : taskTemplateNodeVos) { + if (isFound) { + taskInstanceDetails.add(buildTaskInstanceDetail(id, taskTemplateNodeVo)); + taskTemplateNodeRetryList.add(taskTemplateNodeVo); + continue; + } + if (taskTemplateNodeVo.getCode().equals(retryNodeCode)) { + if (!taskTemplateNodeVo.getRetry()) { + throw new BadRequestException("节点 '" + taskTemplateNodeVo.getName() + "' 不支持重试"); } - // node_init - String[] s = code.split("_"); - return Arrays.stream(s).map(StrUtil::upperFirst).collect(Collectors.joining()); + taskInstanceDetails.add(buildTaskInstanceDetail(id, taskTemplateNodeVo)); + taskTemplateNodeRetryList.add(taskTemplateNodeVo); + isFound = true; + } } + TaskInstanceStepDetailService taskInstanceStepDetailService = + KitSpringBeanHolder.getBean(TaskInstanceStepDetailService.class); + List bizCodeList = + taskInstanceDetails.stream().map(TaskInstanceDetailTb::getBizCode).distinct().collect(Collectors.toList()); + List taskInstanceDetailTbs = + taskInstanceDetailService.queryByInstanceIdAndBizCodeList(id, bizCodeList); + List taskInstanceDetailIds = + taskInstanceDetailTbs.stream().map(TaskInstanceDetailTb::getId).collect(Collectors.toList()); + // 根据ID删除明细 + taskInstanceDetailService.removeByIds(taskInstanceDetailIds); + // 根据明细删除步骤 + taskInstanceStepDetailService.removeByInstanceDetailIds(taskInstanceDetailIds); + taskInstanceDetailService.saveBatch(taskInstanceDetails); + Map codeIdMap = taskInstanceDetails.stream() + .collect(Collectors.toMap(TaskInstanceDetailTb::getBizCode, TaskInstanceDetailTb::getId)); + // ========================== 顺序执行 ========================== + executeTaskSteps(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeRetryList, + codeIdMap); + } - @Override - public void executeInternal(JobExecutionContext context) { - // ========================== 获取代理类 ========================== - TaskInstanceInfoService taskInstanceInfoService = KitSpringBeanHolder.getBean(TaskInstanceInfoService.class); - TaskInstanceDetailService taskInstanceDetailService = - KitSpringBeanHolder.getBean(TaskInstanceDetailService.class); - // ========================== 获取参数 ========================== - JobDataMap dataMap = context.getMergedJobDataMap(); - long id = dataMap.getLong(TaskJobKeys.ID); - // ========================== 获取任务编排模板 ========================== - TaskInstanceInfoTb taskInstanceInfoVo = taskInstanceInfoService.getRunningById(id); - String templateInfo = taskInstanceInfoVo.getTemplate(); - List taskTemplateNodeVos = JSON.parseArray(templateInfo, TaskTemplateNodeVo.class); - // ========================== 判断是否重试任务 ========================== - String retryNodeCode = dataMap.getString(TaskJobKeys.RETRY_NODE_CODE); - if (StrUtil.isBlank(retryNodeCode)) { - executeNormalTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos); - } else { - executeRetryTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos, - retryNodeCode); + /** + * 构建任务实例明细对象 + * + * @param id 实例ID + * @param taskTemplateNodeVo 模板节点 + * @return 任务实例明细对象 + */ + private TaskInstanceDetailTb buildTaskInstanceDetail(long id, TaskTemplateNodeVo taskTemplateNodeVo) { + TaskInstanceDetailTb taskInstanceDetail = new TaskInstanceDetailTb(); + taskInstanceDetail.setInstanceId(id); + taskInstanceDetail.setFinishTime(null); + taskInstanceDetail.setBizCode(taskTemplateNodeVo.getCode()); + taskInstanceDetail.setBizName(taskTemplateNodeVo.getName()); + taskInstanceDetail.setExecuteInfo(TaskStatusEnum.Pending.getName()); + taskInstanceDetail.setExecuteStatus(TaskStatusEnum.Pending.getCode()); + return taskInstanceDetail; + } + + /** + * 执行任务步骤 + * + * @param taskInstanceInfoService 任务实例信息服务 + * @param taskInstanceDetailService 任务实例明细服务 + * @param id 实例ID + * @param dataMap 数据映射 + * @param taskTemplateNodes 需要执行的任务节点列表 + * @param codeIdMap 节点编码与明细ID映射 + */ + private void executeTaskSteps(TaskInstanceInfoService taskInstanceInfoService, + TaskInstanceDetailService taskInstanceDetailService, Long id, JobDataMap dataMap, + List taskTemplateNodes, Map codeIdMap) { + try { + boolean isTerminate = false; + for (TaskTemplateNodeVo taskTemplateNodeVo : taskTemplateNodes) { + String code = taskTemplateNodeVo.getCode(); + while (true) { + TaskInstanceDetailTb currentTaskInstanceNode = + taskInstanceDetailService.getOneByInstanceIdAndCode(id, code); + if (TaskStatusEnum.Fail.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) { + log.info("任务节点执行失败, instanceId={}, bizCode={}", id, code); + isTerminate = true; + break; + } else if (TaskStatusEnum.Success.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) { + log.info("任务节点执行成功, instanceId={}, bizCode={}", id, code); + break; + } else if (TaskStatusEnum.Pending.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) { + log.info("任务节点由待执行变更为执行中, instanceId={}, bizCode={}", id, code); + try { + TaskStepExecutor executor = KitSpringBeanHolder.getBean("taskStep" + getBeanAlias(code)); + taskInstanceDetailService.fastStart(id, code, dataMap); + executor.execute(codeIdMap.getOrDefault(code, null), dataMap, taskTemplateNodeVo); + taskInstanceDetailService.fastSuccessWithInfo(id, code, null); + } catch (Exception e) { + log.error("任务节点执行失败", e); + taskInstanceDetailService.fastFailWithInfo(id, code, e.getMessage()); + throw new ServerException(e); + } + break; + } else if (TaskStatusEnum.Running.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) { + ThreadUtil.safeSleep(5000); + } else { + // 处理未知状态 + log.warn("任务节点处于未知状态, instanceId={}, bizCode={}, status={}", id, code, + currentTaskInstanceNode.getExecuteStatus()); + ThreadUtil.safeSleep(5000); + } } - } - - /** - * 执行普通任务(非重试任务) - * - * @param taskInstanceInfoService 任务实例信息服务 - * @param taskInstanceDetailService 任务实例明细服务 - * @param id 任务实例ID - * @param dataMap 数据映射 - * @param taskTemplateNodeVos 模板节点列表 - */ - private void executeNormalTask(TaskInstanceInfoService taskInstanceInfoService, - TaskInstanceDetailService taskInstanceDetailService, long id, JobDataMap dataMap, - List taskTemplateNodeVos) { - // ========================== 初始化执行明细 ========================== - List taskInstanceDetails = - taskTemplateNodeVos.stream().map(taskTemplateNodeVo -> buildTaskInstanceDetail(id, taskTemplateNodeVo)) - .collect(Collectors.toList()); - taskInstanceDetailService.saveBatch(taskInstanceDetails); - Map codeIdMap = taskInstanceDetails.stream() - .collect(Collectors.toMap(TaskInstanceDetailTb::getBizCode, TaskInstanceDetailTb::getId)); - // ========================== 顺序执行 ========================== - executeTaskSteps(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos, - codeIdMap); - } - - /** - * 执行重试任务 - * - * @param taskInstanceInfoService 任务实例信息服务 - * @param taskInstanceDetailService 任务实例明细服务 - * @param id 任务实例ID - * @param dataMap 数据映射 - * @param taskTemplateNodeVos 模板节点列表 - * @param retryNodeCode 重试节点编码 - */ - private void executeRetryTask(TaskInstanceInfoService taskInstanceInfoService, - TaskInstanceDetailService taskInstanceDetailService, long id, JobDataMap dataMap, - List taskTemplateNodeVos, String retryNodeCode) { - boolean isFound = false; - // ========================== 初始化执行明细 ========================== - List taskInstanceDetails = new ArrayList<>(); - List taskTemplateNodeRetryList = new ArrayList<>(); - for (TaskTemplateNodeVo taskTemplateNodeVo : taskTemplateNodeVos) { - if (isFound) { - taskInstanceDetails.add(buildTaskInstanceDetail(id, taskTemplateNodeVo)); - taskTemplateNodeRetryList.add(taskTemplateNodeVo); - continue; - } - if (taskTemplateNodeVo.getCode().equals(retryNodeCode)) { - if (!taskTemplateNodeVo.getRetry()) { - throw new BadRequestException("节点 '" + taskTemplateNodeVo.getName() + "' 不支持重试"); - } - taskInstanceDetails.add(buildTaskInstanceDetail(id, taskTemplateNodeVo)); - taskTemplateNodeRetryList.add(taskTemplateNodeVo); - isFound = true; - } - } - TaskInstanceStepDetailService taskInstanceStepDetailService = - KitSpringBeanHolder.getBean(TaskInstanceStepDetailService.class); - List bizCodeList = - taskInstanceDetails.stream().map(TaskInstanceDetailTb::getBizCode).distinct().collect(Collectors.toList()); - List taskInstanceDetailTbs = - taskInstanceDetailService.queryByInstanceIdAndBizCodeList(id, bizCodeList); - List taskInstanceDetailIds = - taskInstanceDetailTbs.stream().map(TaskInstanceDetailTb::getId).collect(Collectors.toList()); - // 根据ID删除明细 - taskInstanceDetailService.removeByIds(taskInstanceDetailIds); - // 根据明细删除步骤 - taskInstanceStepDetailService.removeByInstanceDetailIds(taskInstanceDetailIds); - taskInstanceDetailService.saveBatch(taskInstanceDetails); - Map codeIdMap = taskInstanceDetails.stream() - .collect(Collectors.toMap(TaskInstanceDetailTb::getBizCode, TaskInstanceDetailTb::getId)); - // ========================== 顺序执行 ========================== - executeTaskSteps(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeRetryList, - codeIdMap); - } - - /** - * 构建任务实例明细对象 - * - * @param id 实例ID - * @param taskTemplateNodeVo 模板节点 - * @return 任务实例明细对象 - */ - private TaskInstanceDetailTb buildTaskInstanceDetail(long id, TaskTemplateNodeVo taskTemplateNodeVo) { - TaskInstanceDetailTb taskInstanceDetail = new TaskInstanceDetailTb(); - taskInstanceDetail.setInstanceId(id); - taskInstanceDetail.setFinishTime(null); - taskInstanceDetail.setBizCode(taskTemplateNodeVo.getCode()); - taskInstanceDetail.setBizName(taskTemplateNodeVo.getName()); - taskInstanceDetail.setExecuteInfo(TaskStatusEnum.Pending.getName()); - taskInstanceDetail.setExecuteStatus(TaskStatusEnum.Pending.getCode()); - return taskInstanceDetail; - } - - /** - * 执行任务步骤 - * - * @param taskInstanceInfoService 任务实例信息服务 - * @param taskInstanceDetailService 任务实例明细服务 - * @param id 实例ID - * @param dataMap 数据映射 - * @param taskTemplateNodes 需要执行的任务节点列表 - * @param codeIdMap 节点编码与明细ID映射 - */ - private void executeTaskSteps(TaskInstanceInfoService taskInstanceInfoService, - TaskInstanceDetailService taskInstanceDetailService, Long id, JobDataMap dataMap, - List taskTemplateNodes, Map codeIdMap) { - try { - boolean isTerminate = false; - for (TaskTemplateNodeVo taskTemplateNodeVo : taskTemplateNodes) { - String code = taskTemplateNodeVo.getCode(); - while (true) { - TaskInstanceDetailTb currentTaskInstanceNode = - taskInstanceDetailService.getOneByInstanceIdAndCode(id, code); - if (TaskStatusEnum.Fail.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) { - log.info("任务节点执行失败, instanceId={}, bizCode={}", id, code); - isTerminate = true; - break; - } else if (TaskStatusEnum.Success.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) { - log.info("任务节点执行成功, instanceId={}, bizCode={}", id, code); - break; - } else if (TaskStatusEnum.Pending.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) { - log.info("任务节点由待执行变更为执行中, instanceId={}, bizCode={}", id, code); - try { - TaskStepExecutor executor = KitSpringBeanHolder.getBean("taskStep" + getBeanAlias(code)); - taskInstanceDetailService.fastStart(id, code, dataMap); - executor.execute(codeIdMap.getOrDefault(code, null), dataMap, taskTemplateNodeVo); - taskInstanceDetailService.fastSuccessWithInfo(id, code, null); - } catch (Exception e) { - log.error("任务节点执行失败", e); - taskInstanceDetailService.fastFailWithInfo(id, code, e.getMessage()); - throw new ServerException(e); - } - break; - } else if (TaskStatusEnum.Running.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) { - ThreadUtil.safeSleep(5000); - } else { - // 处理未知状态 - log.warn("任务节点处于未知状态, instanceId={}, bizCode={}, status={}", id, code, - currentTaskInstanceNode.getExecuteStatus()); - ThreadUtil.safeSleep(5000); - } - } - if (isTerminate) { - break; - } - } - if (isTerminate) { - taskInstanceInfoService.fastFailWithMessageData(id, "任务执行失败", dataMap); - } else { - taskInstanceInfoService.fastSuccessWithData(id, dataMap); - } - } catch (Exception e) { - log.error("任务执行失败", e); - taskInstanceInfoService.fastFailWithMessageData(id, e.getMessage(), dataMap); + if (isTerminate) { + break; } + } + if (isTerminate) { + taskInstanceInfoService.fastFailWithMessageData(id, "任务执行失败", dataMap); + } else { + taskInstanceInfoService.fastSuccessWithData(id, dataMap); + } + } catch (Exception e) { + log.error("任务执行失败", e); + taskInstanceInfoService.fastFailWithMessageData(id, e.getMessage(), dataMap); } + } } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskManage.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskManage.java index 7a045fa9..31a7a163 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskManage.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskManage.java @@ -55,211 +55,212 @@ import org.springframework.transaction.annotation.Transactional; @Component @RequiredArgsConstructor public class TaskManage { - private final Scheduler scheduler; - private final TaskTemplateInfoService taskTemplateInfoService; - private final TaskInstanceInfoService taskInstanceInfoService; - private final TaskInstanceDetailService taskInstanceDetailService; - /** - * 创建任务单(注:同一应用同一变更类型无法并发多实例) - * - * @param contextName 上下文名称,这里特指应用名 - * @param changeTypeEnum 变更类型 - * @param language 开发语言、资源版本 - * @param envAlias 环境别名 - * @param source 来源 - * @param reason 变更原因 - * @param dataMap 任务参数 - */ - @Transactional(rollbackFor = Exception.class) - public TaskInstanceInfoTb createJob(String contextName, TaskChangeTypeEnum changeTypeEnum, String language, - String envAlias, String source, String reason, JobDataMap dataMap) { - if (StrUtil.isBlank(contextName)) { - throw new BadRequestException("参数contextName必填"); - } - if (changeTypeEnum == null) { - throw new BadRequestException("参数changeTypeEnum必填"); - } - if (StrUtil.isBlank(language)) { - throw new BadRequestException("参数language必填"); - } - if (StrUtil.isBlank(envAlias)) { - throw new BadRequestException("参数envAlias必填"); - } - if (StrUtil.isBlank(source)) { - throw new BadRequestException("参数source必填"); - } - if (dataMap == null) { - dataMap = new JobDataMap(); - } - // ========================== 获取任务编排模板 ========================== - TaskTemplateInfoVo taskInstanceInfoVo = - taskTemplateInfoService.getTemplateInfoByECL(envAlias, contextName, language, changeTypeEnum.getCode()); - if (taskInstanceInfoVo == null) { - throw new BadRequestException("没有查询到任务编排模板"); - } - String templateInfo = taskInstanceInfoVo.getTemplateInfo(); - List taskTemplateNodeVos; - try { - taskTemplateNodeVos = JSON.parseArray(templateInfo, TaskTemplateNodeVo.class); - } catch (Exception e) { - log.error("任务编排模板解析失败", e); - throw new BadRequestException("任务编排模板解析失败"); - } - if (taskTemplateNodeVos == null || taskTemplateNodeVos.isEmpty()) { - throw new BadRequestException("没有查询到任务编排明细"); - } - // ========================== 创建任务 ========================== - TaskManage taskManage = KitSpringBeanHolder.getBean(TaskManage.class); - TaskInstanceInfoTb newInstance = - taskManage.saveTaskInstanceInfoTb(contextName, changeTypeEnum, language, envAlias, source, reason, dataMap, - templateInfo); - dataMap.put(TaskJobKeys.ID, newInstance.getId()); - // 应用名、资源类型 - dataMap.put(TaskJobKeys.CONTEXT_NAME, contextName); - // 开发语言、资源版本 - dataMap.put(TaskJobKeys.LANGUAGE, language); - dataMap.put(TaskJobKeys.ENV_ALIAS, envAlias); - // 变更类型 - dataMap.put(TaskJobKeys.CHANGE_TYPE, changeTypeEnum.getCode()); - buildAndSchedule(changeTypeEnum.getCode(), contextName, dataMap); - return newInstance; - } + private final Scheduler scheduler; + private final TaskTemplateInfoService taskTemplateInfoService; + private final TaskInstanceInfoService taskInstanceInfoService; + private final TaskInstanceDetailService taskInstanceDetailService; - @Transactional(rollbackFor = Exception.class) - public TaskInstanceInfoTb saveTaskInstanceInfoTb(String contextName, TaskChangeTypeEnum changeTypeEnum, - String language, String envAlias, String source, String reason, JobDataMap dataMap, String templateInfo) { - TaskInstanceInfoTb newInstance = new TaskInstanceInfoTb(); - newInstance.setContextName(contextName); - newInstance.setLanguage(language); - newInstance.setChangeType(changeTypeEnum.getCode()); - newInstance.setEnvAlias(envAlias); - newInstance.setStatus(TaskStatusEnum.Running.getCode()); - newInstance.setFinishTime(null); - newInstance.setSource(source); - newInstance.setReason(reason); - newInstance.setTemplate(templateInfo); - newInstance.setJobData(JSON.toJSONString(dataMap)); - taskInstanceInfoService.save(newInstance); - return newInstance; + /** + * 创建任务单(注:同一应用同一变更类型无法并发多实例) + * + * @param contextName 上下文名称,这里特指应用名 + * @param changeTypeEnum 变更类型 + * @param language 开发语言、资源版本 + * @param envAlias 环境别名 + * @param source 来源 + * @param reason 变更原因 + * @param dataMap 任务参数 + */ + @Transactional(rollbackFor = Exception.class) + public TaskInstanceInfoTb createJob(String contextName, TaskChangeTypeEnum changeTypeEnum, String language, + String envAlias, String source, String reason, JobDataMap dataMap) { + if (StrUtil.isBlank(contextName)) { + throw new BadRequestException("参数contextName必填"); } + if (changeTypeEnum == null) { + throw new BadRequestException("参数changeTypeEnum必填"); + } + if (StrUtil.isBlank(language)) { + throw new BadRequestException("参数language必填"); + } + if (StrUtil.isBlank(envAlias)) { + throw new BadRequestException("参数envAlias必填"); + } + if (StrUtil.isBlank(source)) { + throw new BadRequestException("参数source必填"); + } + if (dataMap == null) { + dataMap = new JobDataMap(); + } + // ========================== 获取任务编排模板 ========================== + TaskTemplateInfoVo taskInstanceInfoVo = + taskTemplateInfoService.getTemplateInfoByECL(envAlias, contextName, language, changeTypeEnum.getCode()); + if (taskInstanceInfoVo == null) { + throw new BadRequestException("没有查询到任务编排模板"); + } + String templateInfo = taskInstanceInfoVo.getTemplateInfo(); + List taskTemplateNodeVos; + try { + taskTemplateNodeVos = JSON.parseArray(templateInfo, TaskTemplateNodeVo.class); + } catch (Exception e) { + log.error("任务编排模板解析失败", e); + throw new BadRequestException("任务编排模板解析失败"); + } + if (taskTemplateNodeVos == null || taskTemplateNodeVos.isEmpty()) { + throw new BadRequestException("没有查询到任务编排明细"); + } + // ========================== 创建任务 ========================== + TaskManage taskManage = KitSpringBeanHolder.getBean(TaskManage.class); + TaskInstanceInfoTb newInstance = + taskManage.saveTaskInstanceInfoTb(contextName, changeTypeEnum, language, envAlias, source, reason, dataMap, + templateInfo); + dataMap.put(TaskJobKeys.ID, newInstance.getId()); + // 应用名、资源类型 + dataMap.put(TaskJobKeys.CONTEXT_NAME, contextName); + // 开发语言、资源版本 + dataMap.put(TaskJobKeys.LANGUAGE, language); + dataMap.put(TaskJobKeys.ENV_ALIAS, envAlias); + // 变更类型 + dataMap.put(TaskJobKeys.CHANGE_TYPE, changeTypeEnum.getCode()); + buildAndSchedule(changeTypeEnum.getCode(), contextName, dataMap); + return newInstance; + } - private void buildAndSchedule(String changeTypeEnum, String contextName, JobDataMap dataMap) { - // ========================== 执行任务 ========================== - JobKey jobKey = JobKey.jobKey(changeTypeEnum, contextName); - TriggerKey triggerKey = TriggerKey.triggerKey(changeTypeEnum, contextName); - JobDetail jobDetail = JobBuilder.newJob(TaskJobBean.class).withIdentity(jobKey).usingJobData(dataMap).build(); - Trigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).startNow().build(); - try { - scheduler.scheduleJob(jobDetail, trigger); - } catch (ObjectAlreadyExistsException e) { - log.error("任务jobKey={},triggerKey={}任务已存在,跳过加载", jobKey.getName(), triggerKey.getName(), e); - throw new BadRequestException("任务已存在,跳过加载"); - } catch (SchedulerException e) { - log.error("任务jobKey={},triggerKey={}执行失败", jobKey.getName(), triggerKey.getName(), e); - throw new BadRequestException(e); - } - } + @Transactional(rollbackFor = Exception.class) + public TaskInstanceInfoTb saveTaskInstanceInfoTb(String contextName, TaskChangeTypeEnum changeTypeEnum, + String language, String envAlias, String source, String reason, JobDataMap dataMap, String templateInfo) { + TaskInstanceInfoTb newInstance = new TaskInstanceInfoTb(); + newInstance.setContextName(contextName); + newInstance.setLanguage(language); + newInstance.setChangeType(changeTypeEnum.getCode()); + newInstance.setEnvAlias(envAlias); + newInstance.setStatus(TaskStatusEnum.Running.getCode()); + newInstance.setFinishTime(null); + newInstance.setSource(source); + newInstance.setReason(reason); + newInstance.setTemplate(templateInfo); + newInstance.setJobData(JSON.toJSONString(dataMap)); + taskInstanceInfoService.save(newInstance); + return newInstance; + } - @Transactional(rollbackFor = Exception.class) - public void stopJob(Long instanceId) { - TaskInstanceInfoTb taskInstanceInfoTb = taskInstanceInfoService.getRunningById(instanceId); - String changeType = taskInstanceInfoTb.getChangeType(); - String contextName = taskInstanceInfoTb.getContextName(); - taskInstanceInfoTb.setStatus(TaskStatusEnum.Fail.getCode()); - taskInstanceInfoTb.setErrorMessage("任务被中断"); - taskInstanceInfoTb.setFinishTime(new Date()); - taskInstanceInfoService.updateById(taskInstanceInfoTb); - try { - JobKey jobKey = JobKey.jobKey(changeType, contextName); - TriggerKey triggerKey = TriggerKey.triggerKey(changeType, contextName); - // 停止触发器 - scheduler.pauseTrigger(triggerKey); - // 移除触发器 - scheduler.unscheduleJob(triggerKey); - // 删除任务 - scheduler.deleteJob(jobKey); - // scheduler.interrupt(jobKey); - } catch (SchedulerException e) { - log.error("任务停止失败", e); - throw new RuntimeException(e); - } + private void buildAndSchedule(String changeTypeEnum, String contextName, JobDataMap dataMap) { + // ========================== 执行任务 ========================== + JobKey jobKey = JobKey.jobKey(changeTypeEnum, contextName); + TriggerKey triggerKey = TriggerKey.triggerKey(changeTypeEnum, contextName); + JobDetail jobDetail = JobBuilder.newJob(TaskJobBean.class).withIdentity(jobKey).usingJobData(dataMap).build(); + Trigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).startNow().build(); + try { + scheduler.scheduleJob(jobDetail, trigger); + } catch (ObjectAlreadyExistsException e) { + log.error("任务jobKey={},triggerKey={}任务已存在,跳过加载", jobKey.getName(), triggerKey.getName(), e); + throw new BadRequestException("任务已存在,跳过加载"); + } catch (SchedulerException e) { + log.error("任务jobKey={},triggerKey={}执行失败", jobKey.getName(), triggerKey.getName(), e); + throw new BadRequestException(e); } + } - @Transactional(rollbackFor = Exception.class) - public TaskInstanceInfoTb retryJob(Long id, String retryNodeCode) { - // ========================== 查询任务 ========================== - TaskInstanceInfoTb taskInstanceInfoTb = taskInstanceInfoService.getById(id); - if (taskInstanceInfoTb == null) { - throw new BadRequestException("任务不存在"); - } - // ========================== 失败的任务才能重试 ========================== - if (TaskStatusEnum.Success.getCode().equals(taskInstanceInfoTb.getStatus())) { - throw new BadRequestException("任务已执行完毕,无法重试"); - } - // 参数重放 - JobDataMap dataMap = JSON.parseObject(taskInstanceInfoTb.getJobData(), JobDataMap.class); - if (dataMap == null) { - dataMap = new JobDataMap(); - } - taskInstanceInfoTb.setStatus(TaskStatusEnum.Pending.getCode()); - taskInstanceInfoTb.setFinishTime(null); - taskInstanceInfoService.updateById(taskInstanceInfoTb); - // ========================== 执行任务 ========================== - dataMap.put(TaskJobKeys.RETRY_NODE_CODE, retryNodeCode); - String changeType = taskInstanceInfoTb.getChangeType(); - String contextName = taskInstanceInfoTb.getContextName(); - buildAndSchedule(changeType, contextName, dataMap); - return taskInstanceInfoTb; + @Transactional(rollbackFor = Exception.class) + public void stopJob(Long instanceId) { + TaskInstanceInfoTb taskInstanceInfoTb = taskInstanceInfoService.getRunningById(instanceId); + String changeType = taskInstanceInfoTb.getChangeType(); + String contextName = taskInstanceInfoTb.getContextName(); + taskInstanceInfoTb.setStatus(TaskStatusEnum.Fail.getCode()); + taskInstanceInfoTb.setErrorMessage("任务被中断"); + taskInstanceInfoTb.setFinishTime(new Date()); + taskInstanceInfoService.updateById(taskInstanceInfoTb); + try { + JobKey jobKey = JobKey.jobKey(changeType, contextName); + TriggerKey triggerKey = TriggerKey.triggerKey(changeType, contextName); + // 停止触发器 + scheduler.pauseTrigger(triggerKey); + // 移除触发器 + scheduler.unscheduleJob(triggerKey); + // 删除任务 + scheduler.deleteJob(jobKey); + // scheduler.interrupt(jobKey); + } catch (SchedulerException e) { + log.error("任务停止失败", e); + throw new RuntimeException(e); } + } - public TaskInstanceInfoVo getLastInfo(String contextName, String language, String envAlias, String changeType) { - TaskInstanceInfoVo record = new TaskInstanceInfoVo(); - TaskInstanceInfoTb historyInstance = - taskInstanceInfoService.getLastHistoryInstance(contextName, language, envAlias, changeType); - if (historyInstance == null) { - // 仅返回模板 - TaskTemplateInfoVo templateInfo = - taskTemplateInfoService.getTemplateInfoByECL(envAlias, contextName, language, changeType); - if (templateInfo == null) { - throw new BadRequestException("没有查询到任务编排模板"); - } - record.setTemplate(templateInfo.getTemplateInfo()); - return record; - } - record = BeanUtil.copyProperties(historyInstance, TaskInstanceInfoVo.class); - record.setHistory(buildNodeList(record)); - TaskInstanceInfoTb runningInstance = - taskInstanceInfoService.getLastRunningInstance(contextName, language, envAlias, changeType); - if (runningInstance != null) { - TaskInstanceInfoVo taskInstanceInfoVo = BeanUtil.copyProperties(runningInstance, TaskInstanceInfoVo.class); - record.setCurrent(buildNodeList(taskInstanceInfoVo)); - } - return record; + @Transactional(rollbackFor = Exception.class) + public TaskInstanceInfoTb retryJob(Long id, String retryNodeCode) { + // ========================== 查询任务 ========================== + TaskInstanceInfoTb taskInstanceInfoTb = taskInstanceInfoService.getById(id); + if (taskInstanceInfoTb == null) { + throw new BadRequestException("任务不存在"); } + // ========================== 失败的任务才能重试 ========================== + if (TaskStatusEnum.Success.getCode().equals(taskInstanceInfoTb.getStatus())) { + throw new BadRequestException("任务已执行完毕,无法重试"); + } + // 参数重放 + JobDataMap dataMap = JSON.parseObject(taskInstanceInfoTb.getJobData(), JobDataMap.class); + if (dataMap == null) { + dataMap = new JobDataMap(); + } + taskInstanceInfoTb.setStatus(TaskStatusEnum.Pending.getCode()); + taskInstanceInfoTb.setFinishTime(null); + taskInstanceInfoService.updateById(taskInstanceInfoTb); + // ========================== 执行任务 ========================== + dataMap.put(TaskJobKeys.RETRY_NODE_CODE, retryNodeCode); + String changeType = taskInstanceInfoTb.getChangeType(); + String contextName = taskInstanceInfoTb.getContextName(); + buildAndSchedule(changeType, contextName, dataMap); + return taskInstanceInfoTb; + } - private List buildNodeList(TaskInstanceInfoVo record) { - List records = new ArrayList<>(); - // 节点明细 - List taskInstanceDetails = taskInstanceDetailService.queryByInstanceId(record.getId()); - for (TaskInstanceDetailTb taskInstanceDetail : taskInstanceDetails) { - TaskInstanceNodeVo instanceNodeVo = new TaskInstanceNodeVo(); - instanceNodeVo.setCode(taskInstanceDetail.getBizCode()); - instanceNodeVo.setName(taskInstanceDetail.getBizName()); - instanceNodeVo.setStartTime(taskInstanceDetail.getStartTime()); - instanceNodeVo.setFinishTime(taskInstanceDetail.getFinishTime()); - if (taskInstanceDetail.getFinishTime() == null) { - instanceNodeVo.setDurationDesc( - KitDateUtil.formatSecondsDuration(taskInstanceDetail.getStartTime(), new Date())); - } else { - instanceNodeVo.setDurationDesc(KitDateUtil.formatSecondsDuration(taskInstanceDetail.getStartTime(), - taskInstanceDetail.getFinishTime())); - } - instanceNodeVo.setRunningDesc(taskInstanceDetail.getExecuteInfo()); - instanceNodeVo.setStatus(taskInstanceDetail.getExecuteStatus()); - instanceNodeVo.setStatusDesc(TaskStatusEnum.getDesc(taskInstanceDetail.getExecuteStatus())); - records.add(instanceNodeVo); - } - return records; + public TaskInstanceInfoVo getLastInfo(String contextName, String language, String envAlias, String changeType) { + TaskInstanceInfoVo record = new TaskInstanceInfoVo(); + TaskInstanceInfoTb historyInstance = + taskInstanceInfoService.getLastHistoryInstance(contextName, language, envAlias, changeType); + if (historyInstance == null) { + // 仅返回模板 + TaskTemplateInfoVo templateInfo = + taskTemplateInfoService.getTemplateInfoByECL(envAlias, contextName, language, changeType); + if (templateInfo == null) { + throw new BadRequestException("没有查询到任务编排模板"); + } + record.setTemplate(templateInfo.getTemplateInfo()); + return record; } + record = BeanUtil.copyProperties(historyInstance, TaskInstanceInfoVo.class); + record.setHistory(buildNodeList(record)); + TaskInstanceInfoTb runningInstance = + taskInstanceInfoService.getLastRunningInstance(contextName, language, envAlias, changeType); + if (runningInstance != null) { + TaskInstanceInfoVo taskInstanceInfoVo = BeanUtil.copyProperties(runningInstance, TaskInstanceInfoVo.class); + record.setCurrent(buildNodeList(taskInstanceInfoVo)); + } + return record; + } + + private List buildNodeList(TaskInstanceInfoVo record) { + List records = new ArrayList<>(); + // 节点明细 + List taskInstanceDetails = taskInstanceDetailService.queryByInstanceId(record.getId()); + for (TaskInstanceDetailTb taskInstanceDetail : taskInstanceDetails) { + TaskInstanceNodeVo instanceNodeVo = new TaskInstanceNodeVo(); + instanceNodeVo.setCode(taskInstanceDetail.getBizCode()); + instanceNodeVo.setName(taskInstanceDetail.getBizName()); + instanceNodeVo.setStartTime(taskInstanceDetail.getStartTime()); + instanceNodeVo.setFinishTime(taskInstanceDetail.getFinishTime()); + if (taskInstanceDetail.getFinishTime() == null) { + instanceNodeVo.setDurationDesc( + KitDateUtil.formatSecondsDuration(taskInstanceDetail.getStartTime(), new Date())); + } else { + instanceNodeVo.setDurationDesc(KitDateUtil.formatSecondsDuration(taskInstanceDetail.getStartTime(), + taskInstanceDetail.getFinishTime())); + } + instanceNodeVo.setRunningDesc(taskInstanceDetail.getExecuteInfo()); + instanceNodeVo.setStatus(taskInstanceDetail.getExecuteStatus()); + instanceNodeVo.setStatusDesc(TaskStatusEnum.getDesc(taskInstanceDetail.getExecuteStatus())); + records.add(instanceNodeVo); + } + return records; + } } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskStepExecutor.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskStepExecutor.java index f362f4f7..a56ec20f 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskStepExecutor.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/TaskStepExecutor.java @@ -20,11 +20,12 @@ import cn.odboy.task.dal.model.TaskTemplateNodeVo; import org.quartz.JobDataMap; public interface TaskStepExecutor { - /** - * @param instanceDetailId 任务实例明细id - * @param jobDataMap 执行参数 - * @param taskTemplateNode 任务节点信息 - */ - void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) - throws BadRequestException; + + /** + * @param instanceDetailId 任务实例明细id + * @param jobDataMap 执行参数 + * @param taskTemplateNode 任务节点信息 + */ + void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) + throws BadRequestException; } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeBuildJava.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeBuildJava.java index 57e8a66c..be202e44 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeBuildJava.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeBuildJava.java @@ -26,9 +26,10 @@ import org.springframework.stereotype.Component; @Slf4j @Component public class TaskStepNodeBuildJava implements TaskStepExecutor { - @Override - public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) - throws BadRequestException { - ThreadUtil.sleep(2000); - } + + @Override + public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) + throws BadRequestException { + ThreadUtil.sleep(2000); + } } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeDeployJava.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeDeployJava.java index 8194be2f..37e11fb0 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeDeployJava.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeDeployJava.java @@ -26,9 +26,10 @@ import org.springframework.stereotype.Component; @Slf4j @Component public class TaskStepNodeDeployJava implements TaskStepExecutor { - @Override - public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) - throws BadRequestException { - ThreadUtil.sleep(5000); - } + + @Override + public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) + throws BadRequestException { + ThreadUtil.sleep(5000); + } } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeInit.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeInit.java index 2850b098..4a2adfcf 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeInit.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeInit.java @@ -27,13 +27,15 @@ import org.springframework.stereotype.Component; @Slf4j @Component public class TaskStepNodeInit implements TaskStepExecutor { - @Autowired private TaskInstanceStepDetailService stepDetailService; - @Override - public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) - throws BadRequestException { - stepDetailService.success(instanceDetailId, "开始初始化"); - stepDetailService.success(instanceDetailId, "初始化完毕后,放入了一些参数"); - jobDataMap.put("ExcuseMe", "Hello World!"); - } + @Autowired + private TaskInstanceStepDetailService stepDetailService; + + @Override + public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) + throws BadRequestException { + stepDetailService.success(instanceDetailId, "开始初始化"); + stepDetailService.success(instanceDetailId, "初始化完毕后,放入了一些参数"); + jobDataMap.put("ExcuseMe", "Hello World!"); + } } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeMergeBranch.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeMergeBranch.java index 565de0b8..442aab2c 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeMergeBranch.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/core/impl/TaskStepNodeMergeBranch.java @@ -28,13 +28,15 @@ import org.springframework.stereotype.Component; @Slf4j @Component public class TaskStepNodeMergeBranch implements TaskStepExecutor { - @Autowired private TaskInstanceStepDetailService stepDetailService; - @Override - public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) - throws BadRequestException { - ThreadUtil.sleep(3000); - stepDetailService.fail(instanceDetailId, "执行失败测试"); - // stepDetailService.success(instanceDetailId, "执行成功"); - } + @Autowired + private TaskInstanceStepDetailService stepDetailService; + + @Override + public void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) + throws BadRequestException { + ThreadUtil.sleep(3000); + stepDetailService.fail(instanceDetailId, "执行失败测试"); + // stepDetailService.success(instanceDetailId, "执行成功"); + } } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceDetailTb.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceDetailTb.java index a28f2814..eb040ad3 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceDetailTb.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceDetailTb.java @@ -45,44 +45,65 @@ import lombok.ToString; @TableName("task_instance_detail") @ApiModel(value = "TaskInstanceDetailTb对象", description = "任务实例明细") public class TaskInstanceDetailTb extends KitObject { - @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) - private Date createTime; - /** - * id - */ - @ApiModelProperty("id") @TableId(value = "id", type = IdType.ASSIGN_ID) - @JsonSerialize(using = ToStringSerializer.class) @JSONField(format = "string") private Long id; - /** - * 任务实例id - */ - @TableField("instance_id") @ApiModelProperty("任务实例id") private Long instanceId; - /** - * 开始时间 - */ - @ApiModelProperty("开始时间") @TableField("start_time") private Date startTime; - /** - * 结束时间 - */ - @ApiModelProperty("结束时间") @TableField("finish_time") private Date finishTime; - /** - * 业务编码 - */ - @TableField("biz_code") @ApiModelProperty("业务编码") private String bizCode; - /** - * 业务名称(步骤) - */ - @TableField("biz_name") @ApiModelProperty("业务名称(步骤)") private String bizName; - /** - * 执行参数 - */ - @ApiModelProperty("执行参数") @TableField("execute_params") private String executeParams; - /** - * 执行信息 - */ - @ApiModelProperty("执行信息") @TableField("execute_info") private String executeInfo; - /** - * 执行状态(running进行中 success成功 fail失败) - */ - @TableField("execute_status") @ApiModelProperty("执行状态(running进行中 success成功 fail失败)") private String - executeStatus; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) + private Date createTime; + /** + * id + */ + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + @JSONField(format = "string") + private Long id; + /** + * 任务实例id + */ + @TableField("instance_id") + @ApiModelProperty("任务实例id") + private Long instanceId; + /** + * 开始时间 + */ + @ApiModelProperty("开始时间") + @TableField("start_time") + private Date startTime; + /** + * 结束时间 + */ + @ApiModelProperty("结束时间") + @TableField("finish_time") + private Date finishTime; + /** + * 业务编码 + */ + @TableField("biz_code") + @ApiModelProperty("业务编码") + private String bizCode; + /** + * 业务名称(步骤) + */ + @TableField("biz_name") + @ApiModelProperty("业务名称(步骤)") + private String bizName; + /** + * 执行参数 + */ + @ApiModelProperty("执行参数") + @TableField("execute_params") + private String executeParams; + /** + * 执行信息 + */ + @ApiModelProperty("执行信息") + @TableField("execute_info") + private String executeInfo; + /** + * 执行状态(running进行中 success成功 fail失败) + */ + @TableField("execute_status") + @ApiModelProperty("执行状态(running进行中 success成功 fail失败)") + private String + executeStatus; } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceInfoTb.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceInfoTb.java index c68f8426..bb2bb838 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceInfoTb.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceInfoTb.java @@ -46,59 +46,90 @@ import org.springframework.data.annotation.CreatedBy; @TableName("task_instance_info") @ApiModel(value = "TaskInstanceInfoTb对象", description = "任务实例") public class TaskInstanceInfoTb extends KitObject { - @CreatedBy @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "创建人", hidden = true) private String - createBy; - @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) - private Date createTime; - @TableField(fill = FieldFill.INSERT_UPDATE) - @ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) private Date updateTime; - /** - * id, @JsonSerialize和@JSONField,用于处理大数精度丢失问题 - */ - @ApiModelProperty("id") @TableId(value = "id", type = IdType.ASSIGN_ID) - @JsonSerialize(using = ToStringSerializer.class) @JSONField(format = "string") private Long id; - /** - * 名称 - */ - @ApiModelProperty("名称") @TableField("context_name") private String contextName; - /** - * 语言 - */ - @ApiModelProperty("语言") @TableField("`language`") private String language; - /** - * 变更类型 - */ - @ApiModelProperty("变更类型") @TableField("change_type") private String changeType; - /** - * 环境别名 - */ - @TableField("env_alias") @ApiModelProperty("环境别名") private String envAlias; - /** - * 状态(running进行中 success成功 fail失败) - */ - @TableField("`status`") @ApiModelProperty("状态(running进行中 success成功 fail失败)") private String status; - /** - * 完成时间 - */ - @ApiModelProperty("完成时间") @TableField("finish_time") private Date finishTime; - /** - * 来源 - */ - @ApiModelProperty("来源") @TableField("`source`") private String source; - /** - * 变更原因 - */ - @TableField("reason") @ApiModelProperty("变更原因") private String reason; - /** - * 任务模板 - */ - @TableField("template") @ApiModelProperty("template") private String template; - /** - * QuartzJob参数 - */ - @TableField("job_data") @ApiModelProperty("QuartzJob参数") private String jobData; - /** - * 异常信息 - */ - @TableField("error_message") @ApiModelProperty("异常信息") private String errorMessage; + + @CreatedBy + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建人", hidden = true) + private String + createBy; + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) + private Date createTime; + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) + private Date updateTime; + /** + * id, @JsonSerialize和@JSONField,用于处理大数精度丢失问题 + */ + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + @JSONField(format = "string") + private Long id; + /** + * 名称 + */ + @ApiModelProperty("名称") + @TableField("context_name") + private String contextName; + /** + * 语言 + */ + @ApiModelProperty("语言") + @TableField("`language`") + private String language; + /** + * 变更类型 + */ + @ApiModelProperty("变更类型") + @TableField("change_type") + private String changeType; + /** + * 环境别名 + */ + @TableField("env_alias") + @ApiModelProperty("环境别名") + private String envAlias; + /** + * 状态(running进行中 success成功 fail失败) + */ + @TableField("`status`") + @ApiModelProperty("状态(running进行中 success成功 fail失败)") + private String status; + /** + * 完成时间 + */ + @ApiModelProperty("完成时间") + @TableField("finish_time") + private Date finishTime; + /** + * 来源 + */ + @ApiModelProperty("来源") + @TableField("`source`") + private String source; + /** + * 变更原因 + */ + @TableField("reason") + @ApiModelProperty("变更原因") + private String reason; + /** + * 任务模板 + */ + @TableField("template") + @ApiModelProperty("template") + private String template; + /** + * QuartzJob参数 + */ + @TableField("job_data") + @ApiModelProperty("QuartzJob参数") + private String jobData; + /** + * 异常信息 + */ + @TableField("error_message") + @ApiModelProperty("异常信息") + private String errorMessage; } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceStepDetailTb.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceStepDetailTb.java index abef4c11..04238676 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceStepDetailTb.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskInstanceStepDetailTb.java @@ -45,23 +45,34 @@ import lombok.ToString; @TableName("task_instance_step_detail") @ApiModel(value = "TaskInstanceStepDetailTb对象", description = "") public class TaskInstanceStepDetailTb extends KitObject { - @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) - private Date createTime; - /** - * id - */ - @ApiModelProperty("id") @TableId(value = "id", type = IdType.ASSIGN_ID) - @JsonSerialize(using = ToStringSerializer.class) @JSONField(format = "string") private Long id; - /** - * task_instance_detail表id - */ - @TableField("instance_detail_id") @ApiModelProperty("task_instance_detail表id") private Long instanceDetailId; - /** - * 步骤描述 - */ - @TableField("step_desc") @ApiModelProperty("步骤描述") private String stepDesc; - /** - * 状态(success成功 fail失败) - */ - @TableField("step_status") @ApiModelProperty("状态(success成功 fail失败)") private String stepStatus; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) + private Date createTime; + /** + * id + */ + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + @JSONField(format = "string") + private Long id; + /** + * task_instance_detail表id + */ + @TableField("instance_detail_id") + @ApiModelProperty("task_instance_detail表id") + private Long instanceDetailId; + /** + * 步骤描述 + */ + @TableField("step_desc") + @ApiModelProperty("步骤描述") + private String stepDesc; + /** + * 状态(success成功 fail失败) + */ + @TableField("step_status") + @ApiModelProperty("状态(success成功 fail失败)") + private String stepStatus; } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskTemplateInfoTb.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskTemplateInfoTb.java index 70ded132..b1a3ba56 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskTemplateInfoTb.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/dataobject/TaskTemplateInfoTb.java @@ -40,36 +40,53 @@ import lombok.ToString; @TableName("task_template_info") @ApiModel(value = "TaskTemplateInfoTb对象", description = "任务模板") public class TaskTemplateInfoTb extends KitBaseUserTimeTb { - /** - * id - */ - @ApiModelProperty("id") @TableId(value = "id", type = IdType.AUTO) private Long id; - /** - * 数据有效性 - */ - @TableField("available") @ApiModelProperty("数据有效性") private Boolean available; - /** - * 变更类型 - */ - @ApiModelProperty("变更类型") @TableField("change_type") private String changeType; - /** - * 流水线名称 - */ - @TableField("`name`") @ApiModelProperty("流水线名称") private String name; - /** - * 流水线描述 - */ - @ApiModelProperty("流水线描述") @TableField("`description`") private String description; - /** - * 流水线模板内容 - */ - @TableField("template") @ApiModelProperty("流水线模板内容") private String template; - /** - * 环境别名 - */ - @TableField("env_alias") @ApiModelProperty("环境别名") private String envAlias; - /** - * 应用为语言,资源为类型 - */ - @TableField("`language`") @ApiModelProperty("应用为语言,资源为类型") private String language; + + /** + * id + */ + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 数据有效性 + */ + @TableField("available") + @ApiModelProperty("数据有效性") + private Boolean available; + /** + * 变更类型 + */ + @ApiModelProperty("变更类型") + @TableField("change_type") + private String changeType; + /** + * 流水线名称 + */ + @TableField("`name`") + @ApiModelProperty("流水线名称") + private String name; + /** + * 流水线描述 + */ + @ApiModelProperty("流水线描述") + @TableField("`description`") + private String description; + /** + * 流水线模板内容 + */ + @TableField("template") + @ApiModelProperty("流水线模板内容") + private String template; + /** + * 环境别名 + */ + @TableField("env_alias") + @ApiModelProperty("环境别名") + private String envAlias; + /** + * 应用为语言,资源为类型 + */ + @TableField("`language`") + @ApiModelProperty("应用为语言,资源为类型") + private String language; } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskInstanceInfoVo.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskInstanceInfoVo.java index 0072a506..5b1fcff1 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskInstanceInfoVo.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskInstanceInfoVo.java @@ -14,12 +14,13 @@ import lombok.Setter; @Getter @Setter public class TaskInstanceInfoVo extends TaskInstanceInfoTb { - /** - * 进行中 - */ - private List current; - /** - * 历史已完成或异常 - */ - private List history; + + /** + * 进行中 + */ + private List current; + /** + * 历史已完成或异常 + */ + private List history; } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskInstanceNodeVo.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskInstanceNodeVo.java index ea1ca05a..a9dea70b 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskInstanceNodeVo.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskInstanceNodeVo.java @@ -28,36 +28,37 @@ import lombok.Setter; @Getter @Setter public class TaskInstanceNodeVo extends KitObject { - /** - * 业务编码 - */ - protected String code; - /** - * 业务名称 - */ - protected String name; - /** - * 开始时间 - */ - protected Date startTime; - /** - * 完成时间 - */ - protected Date finishTime; - /** - * 耗时多久 - */ - protected String durationDesc; - /** - * 进行中描述 - */ - protected String runningDesc; - /** - * 节点状态编码 - */ - protected String status; - /** - * 节点状态描述 - */ - protected String statusDesc; + + /** + * 业务编码 + */ + protected String code; + /** + * 业务名称 + */ + protected String name; + /** + * 开始时间 + */ + protected Date startTime; + /** + * 完成时间 + */ + protected Date finishTime; + /** + * 耗时多久 + */ + protected String durationDesc; + /** + * 进行中描述 + */ + protected String runningDesc; + /** + * 节点状态编码 + */ + protected String status; + /** + * 节点状态描述 + */ + protected String statusDesc; } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateInfoVo.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateInfoVo.java index 3a7d0930..7028ebe2 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateInfoVo.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateInfoVo.java @@ -22,11 +22,12 @@ import lombok.Setter; @Getter @Setter public class TaskTemplateInfoVo extends KitObject { - private String changeType; - private String name; - private String description; - private String envAlias; - private String language; - private String contextName; - private String templateInfo; + + private String changeType; + private String name; + private String description; + private String envAlias; + private String language; + private String contextName; + private String templateInfo; } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeOperateButtonVo.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeOperateButtonVo.java index a63ebb2a..3140f825 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeOperateButtonVo.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeOperateButtonVo.java @@ -29,20 +29,21 @@ import lombok.Setter; @Getter @Setter public class TaskTemplateNodeOperateButtonVo extends KitObject { - /** - * 按钮类型(service:调用某个服务并传递参数 link:带参跳转) - */ - private String type; - /** - * 按钮标题 - */ - private String title; - /** - * 按钮传递的参数 - */ - private String code; - /** - * 默认附加参数 - */ - private Map parameters = new HashMap<>(); + + /** + * 按钮类型(service:调用某个服务并传递参数 link:带参跳转) + */ + private String type; + /** + * 按钮标题 + */ + private String title; + /** + * 按钮传递的参数 + */ + private String code; + /** + * 默认附加参数 + */ + private Map parameters = new HashMap<>(); } \ No newline at end of file diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeVo.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeVo.java index ffd8690b..c2189617 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeVo.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/model/TaskTemplateNodeVo.java @@ -31,36 +31,37 @@ import lombok.Setter; @Getter @Setter public class TaskTemplateNodeVo extends KitObject { - /** - * 业务编码 - */ - protected String code; - /** - * 业务类型(service:系统内置服务 rpc:远程调用) - */ - protected String type; - /** - * 业务名称 - */ - protected String name; - /** - * 是否可点击 - */ - protected Boolean click = false; - /** - * 是否可重试 - */ - protected Boolean retry = false; - /** - * 是否可点击:点击展示详情,详情内容类型 - */ - protected String detailType = ""; - /** - * 默认参数
execute: 执行调用 describe: 明细调用 - */ - protected Map parameters = new HashMap<>(); - /** - * 流水线节点控制按钮 - */ - protected List buttons = new ArrayList<>(); + + /** + * 业务编码 + */ + protected String code; + /** + * 业务类型(service:系统内置服务 rpc:远程调用) + */ + protected String type; + /** + * 业务名称 + */ + protected String name; + /** + * 是否可点击 + */ + protected Boolean click = false; + /** + * 是否可重试 + */ + protected Boolean retry = false; + /** + * 是否可点击:点击展示详情,详情内容类型 + */ + protected String detailType = ""; + /** + * 默认参数
execute: 执行调用 describe: 明细调用 + */ + protected Map parameters = new HashMap<>(); + /** + * 流水线节点控制按钮 + */ + protected List buttons = new ArrayList<>(); } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceDetailMapper.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceDetailMapper.java index 9536b3dd..c79849e5 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceDetailMapper.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceDetailMapper.java @@ -28,4 +28,6 @@ import org.apache.ibatis.annotations.Mapper; * @since 2025-09-26 */ @Mapper -public interface TaskInstanceDetailMapper extends BaseMapper {} +public interface TaskInstanceDetailMapper extends BaseMapper { + +} diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceInfoMapper.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceInfoMapper.java index 7fb0336b..682b0b8c 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceInfoMapper.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceInfoMapper.java @@ -28,4 +28,6 @@ import org.apache.ibatis.annotations.Mapper; * @since 2025-09-26 */ @Mapper -public interface TaskInstanceInfoMapper extends BaseMapper {} +public interface TaskInstanceInfoMapper extends BaseMapper { + +} diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceStepDetailMapper.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceStepDetailMapper.java index 29cdf5ae..67451484 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceStepDetailMapper.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskInstanceStepDetailMapper.java @@ -28,4 +28,6 @@ import org.apache.ibatis.annotations.Mapper; * @since 2025-09-28 */ @Mapper -public interface TaskInstanceStepDetailMapper extends BaseMapper {} +public interface TaskInstanceStepDetailMapper extends BaseMapper { + +} diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskTemplateInfoMapper.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskTemplateInfoMapper.java index 50419cfa..3a646577 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskTemplateInfoMapper.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/dal/mysql/TaskTemplateInfoMapper.java @@ -31,14 +31,15 @@ import org.apache.ibatis.annotations.Param; */ @Mapper public interface TaskTemplateInfoMapper extends BaseMapper { - /** - * @param envAlias 环境别称 - * @param contextName 应用名称、资源类型 - * @param language 语言、版本 - * @param changeType 变更类型 - * @return / - */ - TaskTemplateInfoVo selectTemplateInfoByECL(@Param("envAlias") String envAlias, - @Param("contextName") String contextName, @Param("language") String language, - @Param("changeType") String changeType); + + /** + * @param envAlias 环境别称 + * @param contextName 应用名称、资源类型 + * @param language 语言、版本 + * @param changeType 变更类型 + * @return / + */ + TaskTemplateInfoVo selectTemplateInfoByECL(@Param("envAlias") String envAlias, + @Param("contextName") String contextName, @Param("language") String language, + @Param("changeType") String changeType); } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceDetailService.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceDetailService.java index b4b7f83e..36c6fe94 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceDetailService.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceDetailService.java @@ -38,71 +38,81 @@ import org.springframework.stereotype.Service; */ @Service public class TaskInstanceDetailService { - @Autowired private TaskInstanceDetailMapper taskInstanceDetailMapper; - public TaskInstanceDetailTb getOneByInstanceIdAndCode(Long id, String code) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, id); - wrapper.eq(TaskInstanceDetailTb::getBizCode, code); - return taskInstanceDetailMapper.selectOne(wrapper); - } + @Autowired + private TaskInstanceDetailMapper taskInstanceDetailMapper; - public void fastFailWithInfo(Long instanceId, String code, String executeInfo) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.eq(TaskInstanceDetailTb::getBizCode, code); - wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); - wrapper.set(TaskInstanceDetailTb::getExecuteInfo, executeInfo); - wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Fail.getCode()); - taskInstanceDetailMapper.update(null, wrapper); - } + public TaskInstanceDetailTb getOneByInstanceIdAndCode(Long id, String code) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, id); + wrapper.eq(TaskInstanceDetailTb::getBizCode, code); + return taskInstanceDetailMapper.selectOne(wrapper); + } - public void fastSuccess(Long instanceId, String code) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.eq(TaskInstanceDetailTb::getBizCode, code); - wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); - wrapper.set(TaskInstanceDetailTb::getExecuteInfo, TaskStatusEnum.Success.getName()); - wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Success.getCode()); - taskInstanceDetailMapper.update(null, wrapper); - } + public void fastFailWithInfo(Long instanceId, String code, String executeInfo) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.eq(TaskInstanceDetailTb::getBizCode, code); + wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); + wrapper.set(TaskInstanceDetailTb::getExecuteInfo, executeInfo); + wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Fail.getCode()); + taskInstanceDetailMapper.update(null, wrapper); + } - public void fastSuccessWithInfo(Long instanceId, String code, String executeInfo) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.eq(TaskInstanceDetailTb::getBizCode, code); - wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); - wrapper.set(TaskInstanceDetailTb::getExecuteInfo, - executeInfo == null ? TaskStatusEnum.Success.getName() : executeInfo); - wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Success.getCode()); - taskInstanceDetailMapper.update(null, wrapper); - } + public void fastSuccess(Long instanceId, String code) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.eq(TaskInstanceDetailTb::getBizCode, code); + wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); + wrapper.set(TaskInstanceDetailTb::getExecuteInfo, TaskStatusEnum.Success.getName()); + wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Success.getCode()); + taskInstanceDetailMapper.update(null, wrapper); + } - public void fastStart(Long instanceId, String code, JobDataMap dataMap) { - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.eq(TaskInstanceDetailTb::getBizCode, code); - wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); - wrapper.set(TaskInstanceDetailTb::getExecuteInfo, TaskStatusEnum.Running.getName()); - wrapper.set(TaskInstanceDetailTb::getExecuteParams, JSON.toJSONString(dataMap)); - wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Running.getCode()); - taskInstanceDetailMapper.update(null, wrapper); - } + public void fastSuccessWithInfo(Long instanceId, String code, String executeInfo) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.eq(TaskInstanceDetailTb::getBizCode, code); + wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); + wrapper.set(TaskInstanceDetailTb::getExecuteInfo, + executeInfo == null ? TaskStatusEnum.Success.getName() : executeInfo); + wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Success.getCode()); + taskInstanceDetailMapper.update(null, wrapper); + } - public List queryByInstanceIdAndBizCodeList(Long instanceId, List bizCodeList) { - if (CollUtil.isEmpty(bizCodeList)) { - return CollUtil.newArrayList(); - } - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.in(TaskInstanceDetailTb::getBizCode, bizCodeList); - return taskInstanceDetailMapper.selectList(wrapper); - } + public void fastStart(Long instanceId, String code, JobDataMap dataMap) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.eq(TaskInstanceDetailTb::getBizCode, code); + wrapper.set(TaskInstanceDetailTb::getFinishTime, new Date()); + wrapper.set(TaskInstanceDetailTb::getExecuteInfo, TaskStatusEnum.Running.getName()); + wrapper.set(TaskInstanceDetailTb::getExecuteParams, JSON.toJSONString(dataMap)); + wrapper.set(TaskInstanceDetailTb::getExecuteStatus, TaskStatusEnum.Running.getCode()); + taskInstanceDetailMapper.update(null, wrapper); + } - public List queryByInstanceId(Long instanceId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); - wrapper.orderByAsc(TaskInstanceDetailTb::getId); - return taskInstanceDetailMapper.selectList(wrapper); + public List queryByInstanceIdAndBizCodeList(Long instanceId, List bizCodeList) { + if (CollUtil.isEmpty(bizCodeList)) { + return CollUtil.newArrayList(); } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.in(TaskInstanceDetailTb::getBizCode, bizCodeList); + return taskInstanceDetailMapper.selectList(wrapper); + } + + public List queryByInstanceId(Long instanceId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TaskInstanceDetailTb::getInstanceId, instanceId); + wrapper.orderByAsc(TaskInstanceDetailTb::getId); + return taskInstanceDetailMapper.selectList(wrapper); + } + + public void saveBatch(List taskInstanceDetails) { + taskInstanceDetailMapper.insert(taskInstanceDetails); + } + + public void removeByIds(List taskInstanceDetailIds) { + taskInstanceDetailMapper.deleteByIds(taskInstanceDetailIds); + } } \ No newline at end of file diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceInfoService.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceInfoService.java index 6299d357..103fb74a 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceInfoService.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceInfoService.java @@ -36,79 +36,81 @@ import org.springframework.transaction.annotation.Transactional; */ @Service public class TaskInstanceInfoService { - @Autowired private TaskInstanceInfoMapper taskInstanceInfoMapper; - public TaskInstanceInfoTb getRunningById(Long id) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(TaskInstanceInfoTb::getStatus, TaskStatusEnum.Running.getCode()); - wrapper.orderByDesc(TaskInstanceInfoTb::getId); - return taskInstanceInfoMapper.selectOne(wrapper); - } + @Autowired + private TaskInstanceInfoMapper taskInstanceInfoMapper; - @Transactional(rollbackFor = Exception.class) - public void fastFailWithMessage(Long id, String errorMessage) { - TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); - updRecord.setId(id); - updRecord.setFinishTime(new Date()); - updRecord.setStatus(TaskStatusEnum.Fail.getCode()); - updRecord.setErrorMessage(errorMessage); - taskInstanceInfoMapper.updateById(updRecord); - } + public TaskInstanceInfoTb getRunningById(Long id) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TaskInstanceInfoTb::getStatus, TaskStatusEnum.Running.getCode()); + wrapper.orderByDesc(TaskInstanceInfoTb::getId); + return taskInstanceInfoMapper.selectOne(wrapper); + } - @Transactional(rollbackFor = Exception.class) - public void fastFailWithMessageData(Long id, String errorMessage, JobDataMap dataMap) { - TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); - updRecord.setId(id); - updRecord.setFinishTime(new Date()); - updRecord.setStatus(TaskStatusEnum.Fail.getCode()); - updRecord.setErrorMessage(errorMessage); - updRecord.setJobData(JSON.toJSONString(dataMap)); - taskInstanceInfoMapper.updateById(updRecord); - } + @Transactional(rollbackFor = Exception.class) + public void fastFailWithMessage(Long id, String errorMessage) { + TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); + updRecord.setId(id); + updRecord.setFinishTime(new Date()); + updRecord.setStatus(TaskStatusEnum.Fail.getCode()); + updRecord.setErrorMessage(errorMessage); + taskInstanceInfoMapper.updateById(updRecord); + } - @Transactional(rollbackFor = Exception.class) - public void fastSuccessWithData(Long id, JobDataMap dataMap) { - TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); - updRecord.setId(id); - updRecord.setFinishTime(new Date()); - updRecord.setStatus(TaskStatusEnum.Success.getCode()); - updRecord.setJobData(JSON.toJSONString(dataMap)); - taskInstanceInfoMapper.updateById(updRecord); - } + @Transactional(rollbackFor = Exception.class) + public void fastFailWithMessageData(Long id, String errorMessage, JobDataMap dataMap) { + TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); + updRecord.setId(id); + updRecord.setFinishTime(new Date()); + updRecord.setStatus(TaskStatusEnum.Fail.getCode()); + updRecord.setErrorMessage(errorMessage); + updRecord.setJobData(JSON.toJSONString(dataMap)); + taskInstanceInfoMapper.updateById(updRecord); + } - public TaskInstanceInfoTb getLastRunningInstance(String contextName, String language, String envAlias, - String changeType) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(TaskInstanceInfoTb::getContextName, contextName); - wrapper.eq(TaskInstanceInfoTb::getLanguage, language); - wrapper.eq(TaskInstanceInfoTb::getEnvAlias, envAlias); - wrapper.eq(TaskInstanceInfoTb::getChangeType, changeType); - wrapper.eq(TaskInstanceInfoTb::getStatus, TaskStatusEnum.Running.getCode()); - wrapper.orderByDesc(TaskInstanceInfoTb::getId); - return taskInstanceInfoMapper.selectOne(wrapper); - } + @Transactional(rollbackFor = Exception.class) + public void fastSuccessWithData(Long id, JobDataMap dataMap) { + TaskInstanceInfoTb updRecord = new TaskInstanceInfoTb(); + updRecord.setId(id); + updRecord.setFinishTime(new Date()); + updRecord.setStatus(TaskStatusEnum.Success.getCode()); + updRecord.setJobData(JSON.toJSONString(dataMap)); + taskInstanceInfoMapper.updateById(updRecord); + } - public TaskInstanceInfoTb getLastHistoryInstance(String contextName, String language, String envAlias, - String changeType) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(TaskInstanceInfoTb::getContextName, contextName); - wrapper.eq(TaskInstanceInfoTb::getLanguage, language); - wrapper.eq(TaskInstanceInfoTb::getEnvAlias, envAlias); - wrapper.eq(TaskInstanceInfoTb::getChangeType, changeType); - wrapper.orderByDesc(TaskInstanceInfoTb::getId); - wrapper.last("LIMIT 1"); - return taskInstanceInfoMapper.selectOne(wrapper); - } + public TaskInstanceInfoTb getLastRunningInstance(String contextName, String language, String envAlias, + String changeType) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TaskInstanceInfoTb::getContextName, contextName); + wrapper.eq(TaskInstanceInfoTb::getLanguage, language); + wrapper.eq(TaskInstanceInfoTb::getEnvAlias, envAlias); + wrapper.eq(TaskInstanceInfoTb::getChangeType, changeType); + wrapper.eq(TaskInstanceInfoTb::getStatus, TaskStatusEnum.Running.getCode()); + wrapper.orderByDesc(TaskInstanceInfoTb::getId); + return taskInstanceInfoMapper.selectOne(wrapper); + } - public void save(TaskInstanceInfoTb newInstance) { - taskInstanceInfoMapper.insert(newInstance); - } + public TaskInstanceInfoTb getLastHistoryInstance(String contextName, String language, String envAlias, + String changeType) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TaskInstanceInfoTb::getContextName, contextName); + wrapper.eq(TaskInstanceInfoTb::getLanguage, language); + wrapper.eq(TaskInstanceInfoTb::getEnvAlias, envAlias); + wrapper.eq(TaskInstanceInfoTb::getChangeType, changeType); + wrapper.orderByDesc(TaskInstanceInfoTb::getId); + wrapper.last("LIMIT 1"); + return taskInstanceInfoMapper.selectOne(wrapper); + } - public void updateById(TaskInstanceInfoTb taskInstanceInfoTb) { - taskInstanceInfoMapper.updateById(taskInstanceInfoTb); - } + public void save(TaskInstanceInfoTb newInstance) { + taskInstanceInfoMapper.insert(newInstance); + } - public TaskInstanceInfoTb getById(Long id) { - return taskInstanceInfoMapper.selectById(id); - } + public void updateById(TaskInstanceInfoTb taskInstanceInfoTb) { + taskInstanceInfoMapper.updateById(taskInstanceInfoTb); + } + + public TaskInstanceInfoTb getById(Long id) { + return taskInstanceInfoMapper.selectById(id); + } } \ No newline at end of file diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceStepDetailService.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceStepDetailService.java index 6eb6f23d..4102c85e 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceStepDetailService.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskInstanceStepDetailService.java @@ -35,48 +35,50 @@ import org.springframework.stereotype.Service; */ @Service public class TaskInstanceStepDetailService { - @Autowired private TaskInstanceStepDetailMapper taskInstanceStepDetailMapper; - /** - * 步骤执行成功 - * - * @param instanceDetailId 任务实例明细id - * @param stepDesc 步骤描述 - */ - public void success(Long instanceDetailId, String stepDesc) { - TaskInstanceStepDetailTb stepDetail = new TaskInstanceStepDetailTb(); - stepDetail.setInstanceDetailId(instanceDetailId); - stepDetail.setStepDesc(stepDesc); - stepDetail.setStepStatus(TaskStatusEnum.Success.getCode()); - taskInstanceStepDetailMapper.insert(stepDetail); - } + @Autowired + private TaskInstanceStepDetailMapper taskInstanceStepDetailMapper; - /** - * 步骤执行失败 - * - * @param instanceDetailId 任务实例明细id - * @param stepDesc 步骤描述 - */ - public void fail(Long instanceDetailId, String stepDesc) { - TaskInstanceStepDetailTb stepDetail = new TaskInstanceStepDetailTb(); - stepDetail.setInstanceDetailId(instanceDetailId); - stepDetail.setStepDesc(stepDesc); - stepDetail.setStepStatus(TaskStatusEnum.Fail.getCode()); - taskInstanceStepDetailMapper.insert(stepDetail); - throw new BadRequestException(stepDesc); - } + /** + * 步骤执行成功 + * + * @param instanceDetailId 任务实例明细id + * @param stepDesc 步骤描述 + */ + public void success(Long instanceDetailId, String stepDesc) { + TaskInstanceStepDetailTb stepDetail = new TaskInstanceStepDetailTb(); + stepDetail.setInstanceDetailId(instanceDetailId); + stepDetail.setStepDesc(stepDesc); + stepDetail.setStepStatus(TaskStatusEnum.Success.getCode()); + taskInstanceStepDetailMapper.insert(stepDetail); + } - /** - * 根据明细ID删除步骤明细 - * - * @param instanceDetailIds 任务实例明细id集合 - */ - public void removeByInstanceDetailIds(List instanceDetailIds) { - if (CollUtil.isEmpty(instanceDetailIds)) { - return; - } - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(TaskInstanceStepDetailTb::getInstanceDetailId, instanceDetailIds); - taskInstanceStepDetailMapper.delete(wrapper); + /** + * 步骤执行失败 + * + * @param instanceDetailId 任务实例明细id + * @param stepDesc 步骤描述 + */ + public void fail(Long instanceDetailId, String stepDesc) { + TaskInstanceStepDetailTb stepDetail = new TaskInstanceStepDetailTb(); + stepDetail.setInstanceDetailId(instanceDetailId); + stepDetail.setStepDesc(stepDesc); + stepDetail.setStepStatus(TaskStatusEnum.Fail.getCode()); + taskInstanceStepDetailMapper.insert(stepDetail); + throw new BadRequestException(stepDesc); + } + + /** + * 根据明细ID删除步骤明细 + * + * @param instanceDetailIds 任务实例明细id集合 + */ + public void removeByInstanceDetailIds(List instanceDetailIds) { + if (CollUtil.isEmpty(instanceDetailIds)) { + return; } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(TaskInstanceStepDetailTb::getInstanceDetailId, instanceDetailIds); + taskInstanceStepDetailMapper.delete(wrapper); + } } diff --git a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskTemplateInfoService.java b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskTemplateInfoService.java index 960b0716..6f0a9195 100644 --- a/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskTemplateInfoService.java +++ b/cutejava/cutejava-module-task-v2/src/main/java/cn/odboy/task/service/TaskTemplateInfoService.java @@ -30,10 +30,12 @@ import org.springframework.stereotype.Service; */ @Service public class TaskTemplateInfoService { - @Autowired private TaskTemplateInfoMapper taskTemplateInfoMapper; - public TaskTemplateInfoVo getTemplateInfoByECL(String envAlias, String contextName, String language, - String changeType) { - return taskTemplateInfoMapper.selectTemplateInfoByECL(envAlias, contextName, language, changeType); - } + @Autowired + private TaskTemplateInfoMapper taskTemplateInfoMapper; + + public TaskTemplateInfoVo getTemplateInfoByECL(String envAlias, String contextName, String language, + String changeType) { + return taskTemplateInfoMapper.selectTemplateInfoByECL(envAlias, contextName, language, changeType); + } } diff --git a/cutejava/cutejava-module-task-v2/src/main/resources/mapper/TaskTemplateInfoMapper.xml b/cutejava/cutejava-module-task-v2/src/main/resources/mapper/TaskTemplateInfoMapper.xml index b0f24dbd..f440ada8 100644 --- a/cutejava/cutejava-module-task-v2/src/main/resources/mapper/TaskTemplateInfoMapper.xml +++ b/cutejava/cutejava-module-task-v2/src/main/resources/mapper/TaskTemplateInfoMapper.xml @@ -1,19 +1,19 @@ - + diff --git a/cutejava/cutejava-starter/pom.xml b/cutejava/cutejava-starter/pom.xml index da67bf5e..02821544 100644 --- a/cutejava/cutejava-starter/pom.xml +++ b/cutejava/cutejava-starter/pom.xml @@ -1,38 +1,38 @@ - - cutejava - cn.odboy - 1.4.1 - - 4.0.0 - cutejava-starter - 启动模块 - - - cn.odboy - cutejava-module-task-v1 - 1.4.1 - - - - - - cutejava - - - org.springframework.boot - spring-boot-maven-plugin - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + cutejava + cn.odboy + 1.4.1 + + 4.0.0 + cutejava-starter + 启动模块 + + + cn.odboy + cutejava-module-task-v1 + 1.4.1 + + + + + + cutejava + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + \ No newline at end of file diff --git a/cutejava/cutejava-starter/src/main/java/cn/odboy/AppRun.java b/cutejava/cutejava-starter/src/main/java/cn/odboy/AppRun.java index 8c0b76d4..04b35d94 100644 --- a/cutejava/cutejava-starter/src/main/java/cn/odboy/AppRun.java +++ b/cutejava/cutejava-starter/src/main/java/cn/odboy/AppRun.java @@ -26,8 +26,9 @@ import org.springframework.cache.annotation.EnableCaching; @EnableCaching @SpringBootApplication public class AppRun extends BootApplication { - public static void main(String[] args) throws UnknownHostException { - SpringApplication springApplication = new SpringApplication(AppRun.class); - inited(springApplication.run(args)); - } + + public static void main(String[] args) throws UnknownHostException { + SpringApplication springApplication = new SpringApplication(AppRun.class); + inited(springApplication.run(args)); + } } diff --git a/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java b/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java index ea8064de..9f44c44f 100644 --- a/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java +++ b/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java @@ -22,24 +22,25 @@ import java.util.List; * 代码生成入口 */ public class GenCode { - private static final String ADDR = "192.168.100.128"; - private static final Integer PORT = 23306; - private static final String DATABASE_NAME = "cutejava"; - private static final String DATABASE_USER = "root"; - private static final String DATABASE_PWD = "kd123456"; - private static final String URL = String.format("jdbc:mysql://%s:%s/%s", ADDR, PORT, DATABASE_NAME); - public static void main(String[] args) { - KitMpCmdGenUtil generator = new KitMpCmdGenUtil(); - generator.setDatabaseUrl(URL); - generator.setDriverClassName("com.mysql.cj.jdbc.Driver"); - generator.setDatabaseUsername(DATABASE_USER); - generator.setDatabasePassword(DATABASE_PWD); - genTaskCode(generator); - } + private static final String ADDR = "192.168.100.128"; + private static final Integer PORT = 23306; + private static final String DATABASE_NAME = "cutejava"; + private static final String DATABASE_USER = "root"; + private static final String DATABASE_PWD = "kd123456"; + private static final String URL = String.format("jdbc:mysql://%s:%s/%s", ADDR, PORT, DATABASE_NAME); - private static void genTaskCode(KitMpCmdGenUtil generator) { - generator.gen("task", "", - List.of("task_instance_info", "task_instance_detail", "task_template_info", "task_instance_step_detail")); - } + public static void main(String[] args) { + KitMpCmdGenUtil generator = new KitMpCmdGenUtil(); + generator.setDatabaseUrl(URL); + generator.setDriverClassName("com.mysql.cj.jdbc.Driver"); + generator.setDatabaseUsername(DATABASE_USER); + generator.setDatabasePassword(DATABASE_PWD); + genTaskCode(generator); + } + + private static void genTaskCode(KitMpCmdGenUtil generator) { + generator.gen("task", "", + List.of("task_instance_info", "task_instance_detail", "task_template_info", "task_instance_step_detail")); + } } diff --git a/cutejava/cutejava-starter/src/main/java/cn/odboy/HealthCheckPointer.java b/cutejava/cutejava-starter/src/main/java/cn/odboy/HealthCheckPointer.java index 5da45267..c52eff91 100644 --- a/cutejava/cutejava-starter/src/main/java/cn/odboy/HealthCheckPointer.java +++ b/cutejava/cutejava-starter/src/main/java/cn/odboy/HealthCheckPointer.java @@ -23,21 +23,23 @@ import org.springframework.stereotype.Component; @Component public class HealthCheckPointer implements KitHealthCheckPointService { - @Autowired private SystemDictService systemDictService; - /** - * 系统准备就绪 - */ - @Override - public ResponseEntity doReadiness() { - return ResponseEntity.ok(null); - } + @Autowired + private SystemDictService systemDictService; - /** - * 系统是否正常 - */ - @Override - public ResponseEntity doLiveness() { - return ResponseEntity.ok(systemDictService.getById(1)); - } + /** + * 系统准备就绪 + */ + @Override + public ResponseEntity doReadiness() { + return ResponseEntity.ok(null); + } + + /** + * 系统是否正常 + */ + @Override + public ResponseEntity doLiveness() { + return ResponseEntity.ok(systemDictService.getById(1)); + } } diff --git a/cutejava/cutejava-starter/src/test/java/cn/odboy/MyBatisMapperTests.java b/cutejava/cutejava-starter/src/test/java/cn/odboy/MyBatisMapperTests.java index 1c775267..86fb5cae 100644 --- a/cutejava/cutejava-starter/src/test/java/cn/odboy/MyBatisMapperTests.java +++ b/cutejava/cutejava-starter/src/test/java/cn/odboy/MyBatisMapperTests.java @@ -27,20 +27,22 @@ import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class MyBatisMapperTests { - @Autowired private SystemUserMapper systemUserMapper; - @Test - public void testMapper1() { - // SELECT * FROM system_user WHERE (create_time > '2025-08-18T14:48:18.400+0800'); - systemUserMapper.selectList(new LambdaQueryWrapper().gt(SystemUserTb::getCreateTime, new Date())); - // SELECT * FROM system_user WHERE (create_time > '2025-08-18T14:50:16.786+0800'); - systemUserMapper.selectList( - new LambdaQueryWrapper().gt(SystemUserTb::getCreateTime, DateTime.now())); - // SELECT * FROM system_user WHERE (create_time > '2025-08-18 14:53:46'); - systemUserMapper.selectList(new LambdaQueryWrapper().gt(SystemUserTb::getCreateTime, - DateUtil.formatDateTime(new Date()))); - // SELECT * FROM system_user WHERE (create_time > '2025-08-18'); - systemUserMapper.selectList( - new LambdaQueryWrapper().gt(SystemUserTb::getCreateTime, DateUtil.formatDate(new Date()))); - } + @Autowired + private SystemUserMapper systemUserMapper; + + @Test + public void testMapper1() { + // SELECT * FROM system_user WHERE (create_time > '2025-08-18T14:48:18.400+0800'); + systemUserMapper.selectList(new LambdaQueryWrapper().gt(SystemUserTb::getCreateTime, new Date())); + // SELECT * FROM system_user WHERE (create_time > '2025-08-18T14:50:16.786+0800'); + systemUserMapper.selectList( + new LambdaQueryWrapper().gt(SystemUserTb::getCreateTime, DateTime.now())); + // SELECT * FROM system_user WHERE (create_time > '2025-08-18 14:53:46'); + systemUserMapper.selectList(new LambdaQueryWrapper().gt(SystemUserTb::getCreateTime, + DateUtil.formatDateTime(new Date()))); + // SELECT * FROM system_user WHERE (create_time > '2025-08-18'); + systemUserMapper.selectList( + new LambdaQueryWrapper().gt(SystemUserTb::getCreateTime, DateUtil.formatDate(new Date()))); + } } diff --git a/cutejava/cutejava-starter/src/test/java/cn/odboy/SystemApplicationTests.java b/cutejava/cutejava-starter/src/test/java/cn/odboy/SystemApplicationTests.java index 132891f6..a5302327 100644 --- a/cutejava/cutejava-starter/src/test/java/cn/odboy/SystemApplicationTests.java +++ b/cutejava/cutejava-starter/src/test/java/cn/odboy/SystemApplicationTests.java @@ -19,7 +19,7 @@ import cn.hutool.core.collection.CollUtil; import cn.odboy.system.dal.dataobject.SystemDeptTb; import cn.odboy.system.dal.dataobject.SystemJobTb; import cn.odboy.system.dal.dataobject.SystemRoleTb; -import cn.odboy.system.dal.dataobject.SystemUserTb; +import cn.odboy.system.dal.model.SystemUserVo; import cn.odboy.system.service.SystemUserService; import java.util.Set; import org.junit.jupiter.api.Test; @@ -29,34 +29,37 @@ import org.springframework.security.crypto.password.PasswordEncoder; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class SystemApplicationTests { - @Autowired private PasswordEncoder passwordEncoder; - @Autowired private SystemUserService systemUserService; - public static void main(String[] args) { - } + @Autowired + private PasswordEncoder passwordEncoder; + @Autowired + private SystemUserService systemUserService; - @Test - public void contextLoads() { - SystemDeptTb systemDept = new SystemDeptTb(); - systemDept.setId(2L); - SystemJobTb systemJob = new SystemJobTb(); - systemJob.setId(11L); - Set systemJobs = CollUtil.newHashSet(systemJob); - SystemRoleTb systemRole = new SystemRoleTb(); - systemRole.setId(2L); - Set systemRoles = CollUtil.newHashSet(systemRole); - String pwd = passwordEncoder.encode("123456"); - for (int i = 100; i < 200; i++) { - SystemUserTb systemUser = new SystemUserTb(); - systemUser.setDept(systemDept); - systemUser.setJobs(systemJobs); - systemUser.setRoles(systemRoles); - systemUser.setUsername("odboy" + i); - systemUser.setEmail("1943815" + i + "@qq.com"); - systemUser.setPhone("18797874" + i); - systemUser.setPassword(pwd); - systemUser.setEnabled(true); - systemUserService.saveUser(systemUser); - } + public static void main(String[] args) { + } + + @Test + public void contextLoads() { + SystemDeptTb systemDept = new SystemDeptTb(); + systemDept.setId(2L); + SystemJobTb systemJob = new SystemJobTb(); + systemJob.setId(11L); + Set systemJobs = CollUtil.newHashSet(systemJob); + SystemRoleTb systemRole = new SystemRoleTb(); + systemRole.setId(2L); + Set systemRoles = CollUtil.newHashSet(systemRole); + String pwd = passwordEncoder.encode("123456"); + for (int i = 100; i < 200; i++) { + SystemUserVo systemUser = new SystemUserVo(); + systemUser.setDept(systemDept); + systemUser.setJobs(systemJobs); + systemUser.setRoles(systemRoles); + systemUser.setUsername("odboy" + i); + systemUser.setEmail("1943815" + i + "@qq.com"); + systemUser.setPhone("18797874" + i); + systemUser.setPassword(pwd); + systemUser.setEnabled(true); + systemUserService.saveUser(systemUser); } + } } diff --git a/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitDesEncryptUtilTest.java b/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitDesEncryptUtilTest.java index 83d05e13..0e560a13 100644 --- a/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitDesEncryptUtilTest.java +++ b/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitDesEncryptUtilTest.java @@ -15,40 +15,41 @@ */ package cn.odboy.util; -import lombok.SneakyThrows; -import org.junit.jupiter.api.Test; - import static cn.odboy.util.KitDesEncryptUtil.desDecrypt; import static cn.odboy.util.KitDesEncryptUtil.desEncrypt; import static org.junit.jupiter.api.Assertions.assertEquals; +import lombok.SneakyThrows; +import org.junit.jupiter.api.Test; + public class KitDesEncryptUtilTest { - @SneakyThrows - public static void main(String[] args) { - System.err.println(desEncrypt("abc12345678")); - } - /** - * 对称加密 - */ - @Test - public void testDesEncrypt() { - try { - assertEquals("7772841DC6099402", desEncrypt("abc12345678")); - } catch (Exception e) { - e.printStackTrace(); - } - } + @SneakyThrows + public static void main(String[] args) { + System.err.println(desEncrypt("abc12345678")); + } - /** - * 对称解密 - */ - @Test - public void testDesDecrypt() { - try { - assertEquals("abc12345678", desDecrypt("7772841DC6099402")); - } catch (Exception e) { - e.printStackTrace(); - } + /** + * 对称加密 + */ + @Test + public void testDesEncrypt() { + try { + assertEquals("7772841DC6099402", desEncrypt("abc12345678")); + } catch (Exception e) { + e.printStackTrace(); } + } + + /** + * 对称解密 + */ + @Test + public void testDesDecrypt() { + try { + assertEquals("abc12345678", desDecrypt("7772841DC6099402")); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitFileUtilTest.java b/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitFileUtilTest.java index 73e1afd3..d5f5ec3c 100644 --- a/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitFileUtilTest.java +++ b/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitFileUtilTest.java @@ -15,39 +15,40 @@ */ package cn.odboy.util; -import org.junit.jupiter.api.Test; -import org.springframework.mock.web.MockMultipartFile; - import static cn.odboy.util.KitFileUtil.getPrefix; import static cn.odboy.util.KitFileUtil.getSize; import static cn.odboy.util.KitFileUtil.getSuffix; import static cn.odboy.util.KitFileUtil.toFile; import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.springframework.mock.web.MockMultipartFile; + public class KitFileUtilTest { - @Test - public void testToFile() { - long retval = toFile(new MockMultipartFile("foo", (byte[])null)).getTotalSpace(); - assertEquals(500695072768L, retval); - } - @Test - public void testGetExtensionName() { - assertEquals("foo", getSuffix("foo")); - assertEquals("exe", getSuffix("bar.exe")); - } + @Test + public void testToFile() { + long retval = toFile(new MockMultipartFile("foo", (byte[]) null)).getTotalSpace(); + assertEquals(500695072768L, retval); + } - @Test - public void testGetFileNameNoEx() { - assertEquals("foo", getPrefix("foo")); - assertEquals("bar", getPrefix("bar.txt")); - } + @Test + public void testGetExtensionName() { + assertEquals("foo", getSuffix("foo")); + assertEquals("exe", getSuffix("bar.exe")); + } - @Test - public void testGetSize() { - assertEquals("1000B ", getSize(1000)); - assertEquals("1.00KB ", getSize(1024)); - assertEquals("1.00MB ", getSize(1048576)); - assertEquals("1.00GB ", getSize(1073741824)); - } + @Test + public void testGetFileNameNoEx() { + assertEquals("foo", getPrefix("foo")); + assertEquals("bar", getPrefix("bar.txt")); + } + + @Test + public void testGetSize() { + assertEquals("1000B ", getSize(1000)); + assertEquals("1.00KB ", getSize(1024)); + assertEquals("1.00MB ", getSize(1048576)); + assertEquals("1.00GB ", getSize(1073741824)); + } } diff --git a/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitStringUtilTest.java b/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitStringUtilTest.java index b038246c..936e725c 100644 --- a/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitStringUtilTest.java +++ b/cutejava/cutejava-starter/src/test/java/cn/odboy/util/KitStringUtilTest.java @@ -15,43 +15,44 @@ */ package cn.odboy.util; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + import java.text.SimpleDateFormat; import java.util.Date; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.mock.web.MockHttpServletRequest; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - public class KitStringUtilTest { - @Test - public void testToCamelCase() { - assertNull(KitStringUtil.toCamelCase(null)); - } - @Test - public void testToCapitalizeCamelCase() { - assertNull(KitStringUtil.toCapitalizeCamelCase(null)); - assertEquals("HelloWorld", KitStringUtil.toCapitalizeCamelCase("hello_world")); - } + @Test + public void testToCamelCase() { + assertNull(KitStringUtil.toCamelCase(null)); + } - @Test - public void testToUnderScoreCase() { - assertNull(KitStringUtil.toUnderScoreCase(null)); - assertEquals("hello_world", KitStringUtil.toUnderScoreCase("helloWorld")); - assertEquals("\u0000\u0000", KitStringUtil.toUnderScoreCase("\u0000\u0000")); - assertEquals("\u0000_a", KitStringUtil.toUnderScoreCase("\u0000A")); - } + @Test + public void testToCapitalizeCamelCase() { + assertNull(KitStringUtil.toCapitalizeCamelCase(null)); + assertEquals("HelloWorld", KitStringUtil.toCapitalizeCamelCase("hello_world")); + } - @Test - public void testGetWeekDay() { - SimpleDateFormat simpleDateformat = new SimpleDateFormat("E"); - assertEquals(simpleDateformat.format(new Date()), KitStringUtil.getWeekDay()); - } + @Test + public void testToUnderScoreCase() { + assertNull(KitStringUtil.toUnderScoreCase(null)); + assertEquals("hello_world", KitStringUtil.toUnderScoreCase("helloWorld")); + assertEquals("\u0000\u0000", KitStringUtil.toUnderScoreCase("\u0000\u0000")); + assertEquals("\u0000_a", KitStringUtil.toUnderScoreCase("\u0000A")); + } - @Test - public void testGetIP() { - Assertions.assertEquals("127.0.0.1", KitBrowserUtil.getIp(new MockHttpServletRequest())); - } + @Test + public void testGetWeekDay() { + SimpleDateFormat simpleDateformat = new SimpleDateFormat("E"); + assertEquals(simpleDateformat.format(new Date()), KitStringUtil.getWeekDay()); + } + + @Test + public void testGetIP() { + Assertions.assertEquals("127.0.0.1", KitBrowserUtil.getIp(new MockHttpServletRequest())); + } } diff --git a/cutejava/cutejava-starter/src/test/java/cn/odboy/util/WorkTimeTests.java b/cutejava/cutejava-starter/src/test/java/cn/odboy/util/WorkTimeTests.java index aebb7c97..06dafdef 100644 --- a/cutejava/cutejava-starter/src/test/java/cn/odboy/util/WorkTimeTests.java +++ b/cutejava/cutejava-starter/src/test/java/cn/odboy/util/WorkTimeTests.java @@ -19,11 +19,12 @@ package cn.odboy.util; * 钉钉 Teambition 实际工时数计算 */ public class WorkTimeTests { - public static void main(String[] args) { - // 总工作时长(时) - double totalHour = 11; - // 实际工作时长(天),一天8小时工作制 - double actualHour = totalHour / 8.0; - System.err.println("actualHour=" + actualHour + " 天"); - } + + public static void main(String[] args) { + // 总工作时长(时) + double totalHour = 11; + // 实际工作时长(天),一天8小时工作制 + double actualHour = totalHour / 8.0; + System.err.println("actualHour=" + actualHour + " 天"); + } } diff --git a/cutejava/pom.xml b/cutejava/pom.xml index 8ffa6a80..aa21126e 100644 --- a/cutejava/pom.xml +++ b/cutejava/pom.xml @@ -1,427 +1,427 @@ - 4.0.0 - cn.odboy - cutejava - pom - 1.4.1 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + cn.odboy + cutejava + pom + 1.4.1 - - - cutejava-framework - cutejava-module-system - cutejava-module-task-v1 - cutejava-module-task-v2 - cutejava-starter - + + + cutejava-framework + cutejava-module-system + cutejava-module-task-v1 + cutejava-module-task-v2 + cutejava-starter + - CuteJava 后台 + CuteJava 后台 - - org.springframework.boot - spring-boot-starter-parent - 2.7.18 - + + org.springframework.boot + spring-boot-starter-parent + 2.7.18 + - - UTF-8 - UTF-8 - UTF-8 - 11 - 1.2.9 - 2.0.60 - 1.2.27 - 2.11.1 - 3.5.14 - 5.8.40 - 0.12.6 - - 5.8.0 - 1.4.7 - + + UTF-8 + UTF-8 + UTF-8 + 11 + 1.2.9 + 2.0.60 + 1.2.27 + 2.11.1 + 3.5.14 + 5.8.40 + 0.12.6 + + 5.8.0 + 1.4.7 + - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-json - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-undertow - - - io.undertow - undertow-core - - - - - io.undertow - undertow-core - 2.3.18.Final - + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-json + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.boot + spring-boot-starter-undertow + + + io.undertow + undertow-core + + + + + io.undertow + undertow-core + 2.3.18.Final + - - - org.springframework.boot - spring-boot-starter-test - test - + + + org.springframework.boot + spring-boot-starter-test + test + - - - org.springframework.boot - spring-boot-starter-security - + + + org.springframework.boot + spring-boot-starter-security + - - - org.springframework.boot - spring-boot-starter-validation - + + + org.springframework.boot + spring-boot-starter-validation + - - - org.springframework.boot - spring-boot-starter-cache - + + + org.springframework.boot + spring-boot-starter-cache + - - - org.springframework.boot - spring-boot-starter-data-redis - + + + org.springframework.boot + spring-boot-starter-data-redis + - - - org.springframework.boot - spring-boot-starter-websocket - + + + org.springframework.boot + spring-boot-starter-websocket + - - - com.baomidou - mybatis-plus-boot-starter - ${mybatis-plus.version} - - - com.baomidou - mybatis-plus-jsqlparser - ${mybatis-plus.version} - - - org.springframework.boot - spring-boot-starter-freemarker - - - org.freemarker - freemarker - - - - - org.freemarker - freemarker - 2.3.34 - - - com.baomidou - mybatis-plus-generator - ${mybatis-plus.version} - + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + com.baomidou + mybatis-plus-jsqlparser + ${mybatis-plus.version} + + + org.springframework.boot + spring-boot-starter-freemarker + + + org.freemarker + freemarker + + + + + org.freemarker + freemarker + 2.3.34 + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus.version} + - - - - org.apache.commons - commons-pool2 - ${commons-pool2.version} - - - org.apache.commons - commons-lang3 - + + + + org.apache.commons + commons-pool2 + ${commons-pool2.version} + + + org.apache.commons + commons-lang3 + - - - p6spy - p6spy - 3.9.1 - + + + p6spy + p6spy + 3.9.1 + - - - com.github.xiaoymin - knife4j-spring-boot-starter - 3.0.3 - - - - io.swagger - swagger-annotations - - - - - io.swagger - swagger-annotations - 1.5.22 - + + + com.github.xiaoymin + knife4j-spring-boot-starter + 3.0.3 + + + + io.swagger + swagger-annotations + + + + + io.swagger + swagger-annotations + 1.5.22 + - - - com.mysql - mysql-connector-j - 9.3.0 - runtime - + + + com.mysql + mysql-connector-j + 9.3.0 + runtime + - - - com.alibaba - druid-spring-boot-starter - ${druid.version} - + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + - - - net.dreamlu - mica-ip2region - 2.7.18.9 - + + + net.dreamlu + mica-ip2region + 2.7.18.9 + - - - org.aspectj - aspectjrt - 1.9.7 - - - - org.aspectj - aspectjweaver - 1.9.7 - + + + org.aspectj + aspectjrt + 1.9.7 + + + + org.aspectj + aspectjweaver + 1.9.7 + - - - org.projectlombok - lombok - true - + + + org.projectlombok + lombok + true + - - - org.springframework.boot - spring-boot-configuration-processor - true - + + + org.springframework.boot + spring-boot-configuration-processor + true + - - - com.alibaba.fastjson2 - fastjson2 - ${fastjson2.version} - + + + com.alibaba.fastjson2 + fastjson2 + ${fastjson2.version} + - - com.alibaba.fastjson2 - fastjson2-extension-spring5 - ${fastjson2.version} - + + com.alibaba.fastjson2 + fastjson2-extension-spring5 + ${fastjson2.version} + - - - com.github.whvcse - easy-captcha - 1.6.2 - + + + com.github.whvcse + easy-captcha + 1.6.2 + - - org.apache.commons - commons-text - 1.13.0 - + + org.apache.commons + commons-text + 1.13.0 + - - - com.alibaba - transmittable-thread-local - 2.14.5 - + + + com.alibaba + transmittable-thread-local + 2.14.5 + - - - org.springframework.boot - spring-boot-starter-aop - + + + org.springframework.boot + spring-boot-starter-aop + - - - cn.hutool - hutool-all - ${hutool.version} - + + + cn.hutool + hutool-all + ${hutool.version} + - - - io.jsonwebtoken - jjwt-api - ${jjwt.version} - - - io.jsonwebtoken - jjwt-impl - ${jjwt.version} - - - io.jsonwebtoken - jjwt-jackson - ${jjwt.version} - + + + io.jsonwebtoken + jjwt-api + ${jjwt.version} + + + io.jsonwebtoken + jjwt-impl + ${jjwt.version} + + + io.jsonwebtoken + jjwt-jackson + ${jjwt.version} + - - - ch.ethz.ganymed - ganymed-ssh2 - build210 - - - com.jcraft - jsch - 0.1.55 - + + + ch.ethz.ganymed + ganymed-ssh2 + build210 + + + com.jcraft + jsch + 0.1.55 + - - - com.github.oshi - oshi-core - 6.6.5 - + + + com.github.oshi + oshi-core + 6.6.5 + - - - javax.mail - mail - ${mail.version} - + + + javax.mail + mail + ${mail.version} + - - - org.springframework.boot - spring-boot-starter-quartz - - - org.quartz-scheduler - quartz - - - - - org.quartz-scheduler - quartz - 2.5.0 - - - com.mchange - c3p0 - 0.10.1 - + + + org.springframework.boot + spring-boot-starter-quartz + + + org.quartz-scheduler + quartz + + + + + org.quartz-scheduler + quartz + 2.5.0 + + + com.mchange + c3p0 + 0.10.1 + - - - commons-net - commons-net - 3.11.1 - + + + commons-net + commons-net + 3.11.1 + - - joda-time - joda-time - 2.12.7 - + + joda-time + joda-time + 2.12.7 + - - - io.github.biezhi - TinyPinyin - 2.0.3.RELEASE - + + + io.github.biezhi + TinyPinyin + 2.0.3.RELEASE + - - - - cn.idev.excel - fastexcel - 1.2.0 - compile - + + + + cn.idev.excel + fastexcel + 1.2.0 + compile + - - - org.mozilla - rhino - 1.8.0 - - - - - - com.ezylang - EvalEx - 3.3.0 - - + + + org.mozilla + rhino + 1.8.0 + + + + + + com.ezylang + EvalEx + 3.3.0 + + - - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + - - - public - aliyun nexus - https://maven.aliyun.com/nexus/content/groups/public/ - - true - - - + + + public + aliyun nexus + https://maven.aliyun.com/nexus/content/groups/public/ + + true + + + - - - public - aliyun nexus - https://maven.aliyun.com/nexus/content/groups/public/ - - true - - - false - - - + + + public + aliyun nexus + https://maven.aliyun.com/nexus/content/groups/public/ + + true + + + false + + +