diff --git a/http-client.env.json b/http-client.env.json
index 9333edc52..51635e164 100644
--- a/http-client.env.json
+++ b/http-client.env.json
@@ -11,8 +11,8 @@
"appTenentId": "1"
},
"gateway": {
- "baseUrl": "http://127.0.0.1:8888/admin-api",
- "systemBaseUrl": "http://127.0.0.1:8888/admin-api",
+ "baseUrl": "http://127.0.0.1:48080/admin-api",
+ "systemBaseUrl": "http://127.0.0.1:48080/admin-api",
"token": "test1",
"adminTenentId": "1",
diff --git a/yudao-framework/yudao-spring-boot-starter-security/pom.xml b/yudao-framework/yudao-spring-boot-starter-security/pom.xml
index f4f623dd9..40d83d633 100644
--- a/yudao-framework/yudao-spring-boot-starter-security/pom.xml
+++ b/yudao-framework/yudao-spring-boot-starter-security/pom.xml
@@ -50,6 +50,21 @@
yudao-module-system-api
${revision}
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-dubbo
+
diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java
index e9045c76f..b70107766 100644
--- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java
+++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java
@@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi;
import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -32,6 +33,7 @@ import javax.annotation.Resource;
*/
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(SecurityProperties.class)
+@EnableFeignClients(clients = OAuth2TokenApi.class)
public class YudaoSecurityAutoConfiguration {
@Resource
diff --git a/yudao-gateway/src/main/resources/application-local.yaml b/yudao-gateway/src/main/resources/application-local.yaml
index 93ea3dd92..e69de29bb 100644
--- a/yudao-gateway/src/main/resources/application-local.yaml
+++ b/yudao-gateway/src/main/resources/application-local.yaml
@@ -1,2 +0,0 @@
-server:
- port: 8888
diff --git a/yudao-gateway/src/main/resources/bootstrap.yaml b/yudao-gateway/src/main/resources/bootstrap.yaml
index 8c0638c5a..bdc9b21ef 100644
--- a/yudao-gateway/src/main/resources/bootstrap.yaml
+++ b/yudao-gateway/src/main/resources/bootstrap.yaml
@@ -4,3 +4,6 @@ spring:
profiles:
active: local
+
+server:
+ port: 48080
diff --git a/yudao-module-infra/yudao-module-infra-biz/pom.xml b/yudao-module-infra/yudao-module-infra-biz/pom.xml
index ab685870d..6b962b41a 100644
--- a/yudao-module-infra/yudao-module-infra-biz/pom.xml
+++ b/yudao-module-infra/yudao-module-infra-biz/pom.xml
@@ -19,6 +19,13 @@
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bootstrap
+
+
+
cn.iocoder.cloud
yudao-module-system-api
@@ -57,14 +64,35 @@
yudao-spring-boot-starter-redis
-
-
-
+
- cn.iocoder.cloud
- yudao-spring-boot-starter-job
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+ com.alibaba.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+
+
+
+
cn.iocoder.cloud
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/InfraServerApplication.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/InfraServerApplication.java
new file mode 100644
index 000000000..3de30d376
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/InfraServerApplication.java
@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.infra;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+// TODO 芋艿:修改启动文档的地址
+
+/**
+ * 项目的启动类
+ *
+ * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ *
+ * @author 芋道源码
+ */
+@SpringBootApplication
+public class InfraServerApplication {
+
+ public static void main(String[] args) {
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+
+ SpringApplication.run(InfraServerApplication.class, args);
+
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ }
+
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java
deleted file mode 100644
index 726a10498..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.config;
-
-import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.*;
-import cn.iocoder.yudao.module.infra.convert.config.ConfigConvert;
-import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
-import cn.iocoder.yudao.module.infra.service.config.ConfigService;
-import cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-import java.io.IOException;
-import java.util.List;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
-
-@Api(tags = "管理后台 - 参数配置")
-@RestController
-@RequestMapping("/infra/config")
-@Validated
-public class ConfigController {
-
- @Resource
- private ConfigService configService;
-
- @PostMapping("/create")
- @ApiOperation("创建参数配置")
- @PreAuthorize("@ss.hasPermission('infra:config:create')")
- public CommonResult createConfig(@Valid @RequestBody ConfigCreateReqVO reqVO) {
- return success(configService.createConfig(reqVO));
- }
-
- @PutMapping("/update")
- @ApiOperation("修改参数配置")
- @PreAuthorize("@ss.hasPermission('infra:config:update')")
- public CommonResult updateConfig(@Valid @RequestBody ConfigUpdateReqVO reqVO) {
- configService.updateConfig(reqVO);
- return success(true);
- }
-
- @DeleteMapping("/delete")
- @ApiOperation("删除参数配置")
- @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
- @PreAuthorize("@ss.hasPermission('infra:config:delete')")
- public CommonResult deleteConfig(@RequestParam("id") Long id) {
- configService.deleteConfig(id);
- return success(true);
- }
-
- @GetMapping(value = "/get")
- @ApiOperation("获得参数配置")
- @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
- @PreAuthorize("@ss.hasPermission('infra:config:query')")
- public CommonResult getConfig(@RequestParam("id") Long id) {
- return success(ConfigConvert.INSTANCE.convert(configService.getConfig(id)));
- }
-
- @GetMapping(value = "/get-value-by-key")
- @ApiOperation(value = "根据参数键名查询参数值", notes = "不可见的配置,不允许返回给前端")
- @ApiImplicitParam(name = "key", value = "参数键", required = true, example = "yunai.biz.username", dataTypeClass = String.class)
- public CommonResult getConfigKey(@RequestParam("key") String key) {
- ConfigDO config = configService.getConfigByKey(key);
- if (config == null) {
- return null;
- }
- if (config.getVisible()) {
- throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_VISIBLE);
- }
- return success(config.getValue());
- }
-
- @GetMapping("/page")
- @ApiOperation("获取参数配置分页")
- @PreAuthorize("@ss.hasPermission('infra:config:query')")
- public CommonResult> getConfigPage(@Valid ConfigPageReqVO reqVO) {
- PageResult page = configService.getConfigPage(reqVO);
- return success(ConfigConvert.INSTANCE.convertPage(page));
- }
-
- @GetMapping("/export")
- @ApiOperation("导出参数配置")
- @PreAuthorize("@ss.hasPermission('infra:config:export')")
- @OperateLog(type = EXPORT)
- public void exportSysConfig(@Valid ConfigExportReqVO reqVO,
- HttpServletResponse response) throws IOException {
- List list = configService.getConfigList(reqVO);
- // 拼接数据
- List datas = ConfigConvert.INSTANCE.convertList(list);
- // 输出
- ExcelUtils.write(response, "参数配置.xls", "数据", ConfigExcelVO.class, datas);
- }
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigBaseVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigBaseVO.java
deleted file mode 100644
index 774b0ac81..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigBaseVO.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.config.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
-/**
- * 参数配置 Base VO,提供给添加、修改、详细的子 VO 使用
- * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
- */
-@Data
-public class ConfigBaseVO {
-
- @ApiModelProperty(value = "参数分组", required = true, example = "biz")
- @NotEmpty(message = "参数分组不能为空")
- @Size(max = 50, message = "参数名称不能超过50个字符")
- private String category;
-
- @ApiModelProperty(value = "参数名称", required = true, example = "数据库名")
- @NotBlank(message = "参数名称不能为空")
- @Size(max = 100, message = "参数名称不能超过100个字符")
- private String name;
-
- @ApiModelProperty(value = "参数键值", required = true, example = "1024")
- @NotBlank(message = "参数键值不能为空")
- @Size(max = 500, message = "参数键值长度不能超过500个字符")
- private String value;
-
- @ApiModelProperty(value = "是否敏感", required = true, example = "true")
- @NotNull(message = "是否敏感不能为空")
- private Boolean visible;
-
- @ApiModelProperty(value = "备注", example = "备注一下很帅气!")
- private String remark;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java
deleted file mode 100644
index 7a2118ae1..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigCreateReqVO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.config.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-
-@ApiModel("管理后台 - 参数配置创建 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class ConfigCreateReqVO extends ConfigBaseVO {
-
- @ApiModelProperty(value = "参数键名", required = true, example = "yunai.db.username")
- @NotBlank(message = "参数键名长度不能为空")
- @Size(max = 100, message = "参数键名长度不能超过100个字符")
- private String key;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExcelVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExcelVO.java
deleted file mode 100644
index 908981e0a..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExcelVO.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.config.vo;
-
-import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
-import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
-import cn.iocoder.yudao.module.infra.enums.DictTypeConstants;
-import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * 参数配置 Excel 导出响应 VO
- */
-@Data
-public class ConfigExcelVO {
-
- @ExcelProperty("参数配置序号")
- private Long id;
-
- @ExcelProperty("参数键名")
- private String key;
-
- @ExcelProperty("参数分组")
- private String group;
-
- @ExcelProperty("参数名称")
- private String name;
-
- @ExcelProperty("参数键值")
- private String value;
-
- @ExcelProperty(value = "参数类型", converter = DictConvert.class)
- @DictFormat(DictTypeConstants.CONFIG_TYPE)
- private Integer type;
-
- @ExcelProperty(value = "是否敏感", converter = DictConvert.class)
- @DictFormat(DictTypeConstants.BOOLEAN_STRING)
- private Boolean sensitive;
-
- @ExcelProperty("备注")
- private String remark;
-
- @ExcelProperty("创建时间")
- private Date createTime;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java
deleted file mode 100644
index 2e328e6d9..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigExportReqVO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.config.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.util.Date;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@ApiModel("管理后台 - 参数配置导出 Request VO")
-@Data
-public class ConfigExportReqVO {
-
- @ApiModelProperty(value = "参数名称", example = "模糊匹配")
- private String name;
-
- @ApiModelProperty(value = "参数键名", example = "yunai.db.username", notes = "模糊匹配")
- private String key;
-
- @ApiModelProperty(value = "参数类型", example = "1", notes = "参见 SysConfigTypeEnum 枚举")
- private Integer type;
-
- @ApiModelProperty(value = "开始时间", example = "2020-10-24 00:00:00")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private Date beginTime;
-
- @ApiModelProperty(value = "结束时间", example = "2020-10-24 23:59:59")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private Date endTime;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java
deleted file mode 100644
index 3f2b1eb61..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigPageReqVO.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.config.vo;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.util.Date;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@ApiModel("管理后台 - 参数配置分页 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class ConfigPageReqVO extends PageParam {
-
- @ApiModelProperty(value = "数据源名称", example = "模糊匹配")
- private String name;
-
- @ApiModelProperty(value = "参数键名", example = "yunai.db.username", notes = "模糊匹配")
- private String key;
-
- @ApiModelProperty(value = "参数类型", example = "1", notes = "参见 SysConfigTypeEnum 枚举")
- private Integer type;
-
- @ApiModelProperty(value = "开始时间", example = "2020-10-24 00:00:00")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private Date beginTime;
-
- @ApiModelProperty(value = "结束时间", example = "2020-10-24 23:59:59")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private Date endTime;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java
deleted file mode 100644
index 03196e060..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigRespVO.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.config.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-import java.util.Date;
-
-@ApiModel("管理后台 - 参数配置信息 Response VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class ConfigRespVO extends ConfigBaseVO {
-
- @ApiModelProperty(value = "参数配置序号", required = true, example = "1024")
- private Long id;
-
- @ApiModelProperty(value = "参数键名", required = true, example = "yunai.db.username")
- @NotBlank(message = "参数键名长度不能为空")
- @Size(max = 100, message = "参数键名长度不能超过100个字符")
- private String key;
-
- @ApiModelProperty(value = "参数类型", required = true, example = "1", notes = "参见 SysConfigTypeEnum 枚举")
- private Integer type;
-
- @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
- private Date createTime;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java
deleted file mode 100644
index 2335d6169..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/vo/ConfigUpdateReqVO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.config.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import javax.validation.constraints.NotNull;
-
-@ApiModel("管理后台 - 参数配置创建 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class ConfigUpdateReqVO extends ConfigBaseVO {
-
- @ApiModelProperty(value = "参数配置序号", required = true, example = "1024")
- @NotNull(message = "参数配置编号不能为空")
- private Long id;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java
deleted file mode 100644
index 47ef687dd..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
-import cn.iocoder.yudao.framework.quartz.core.util.CronUtils;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.*;
-import cn.iocoder.yudao.module.infra.convert.job.JobConvert;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO;
-import cn.iocoder.yudao.module.infra.service.job.JobService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.quartz.SchedulerException;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
-
-@Api(tags = "管理后台 - 定时任务")
-@RestController
-@RequestMapping("/infra/job")
-@Validated
-public class JobController {
-
- @Resource
- private JobService jobService;
-
- @PostMapping("/create")
- @ApiOperation("创建定时任务")
- @PreAuthorize("@ss.hasPermission('infra:job:create')")
- public CommonResult createJob(@Valid @RequestBody JobCreateReqVO createReqVO)
- throws SchedulerException {
- return success(jobService.createJob(createReqVO));
- }
-
- @PutMapping("/update")
- @ApiOperation("更新定时任务")
- @PreAuthorize("@ss.hasPermission('infra:job:update')")
- public CommonResult updateJob(@Valid @RequestBody JobUpdateReqVO updateReqVO)
- throws SchedulerException {
- jobService.updateJob(updateReqVO);
- return success(true);
- }
-
- @PutMapping("/update-status")
- @ApiOperation("更新定时任务的状态")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class),
- @ApiImplicitParam(name = "status", value = "状态", required = true, example = "1", dataTypeClass = Integer.class),
- })
- @PreAuthorize("@ss.hasPermission('infra:job:update')")
- public CommonResult updateJobStatus(@RequestParam(value = "id") Long id, @RequestParam("status") Integer status)
- throws SchedulerException {
- jobService.updateJobStatus(id, status);
- return success(true);
- }
-
- @DeleteMapping("/delete")
- @ApiOperation("删除定时任务")
- @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
- @PreAuthorize("@ss.hasPermission('infra:job:delete')")
- public CommonResult deleteJob(@RequestParam("id") Long id)
- throws SchedulerException {
- jobService.deleteJob(id);
- return success(true);
- }
-
- @PutMapping("/trigger")
- @ApiOperation("触发定时任务")
- @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
- @PreAuthorize("@ss.hasPermission('infra:job:trigger')")
- public CommonResult triggerJob(@RequestParam("id") Long id) throws SchedulerException {
- jobService.triggerJob(id);
- return success(true);
- }
-
- @GetMapping("/get")
- @ApiOperation("获得定时任务")
- @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
- @PreAuthorize("@ss.hasPermission('infra:job:query')")
- public CommonResult getJob(@RequestParam("id") Long id) {
- JobDO job = jobService.getJob(id);
- return success(JobConvert.INSTANCE.convert(job));
- }
-
- @GetMapping("/list")
- @ApiOperation("获得定时任务列表")
- @ApiImplicitParam(name = "ids", value = "编号列表", required = true, dataTypeClass = List.class)
- @PreAuthorize("@ss.hasPermission('infra:job:query')")
- public CommonResult> getJobList(@RequestParam("ids") Collection ids) {
- List list = jobService.getJobList(ids);
- return success(JobConvert.INSTANCE.convertList(list));
- }
-
- @GetMapping("/page")
- @ApiOperation("获得定时任务分页")
- @PreAuthorize("@ss.hasPermission('infra:job:query')")
- public CommonResult> getJobPage(@Valid JobPageReqVO pageVO) {
- PageResult pageResult = jobService.getJobPage(pageVO);
- return success(JobConvert.INSTANCE.convertPage(pageResult));
- }
-
- @GetMapping("/export-excel")
- @ApiOperation("导出定时任务 Excel")
- @PreAuthorize("@ss.hasPermission('infra:job:export')")
- @OperateLog(type = EXPORT)
- public void exportJobExcel(@Valid JobExportReqVO exportReqVO,
- HttpServletResponse response) throws IOException {
- List list = jobService.getJobList(exportReqVO);
- // 导出 Excel
- List datas = JobConvert.INSTANCE.convertList02(list);
- ExcelUtils.write(response, "定时任务.xls", "数据", JobExcelVO.class, datas);
- }
-
- @GetMapping("/get_next_times")
- @ApiOperation("获得定时任务的下 n 次执行时间")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class),
- @ApiImplicitParam(name = "count", value = "数量", example = "5", dataTypeClass = Long.class)
- })
- @PreAuthorize("@ss.hasPermission('infra:job:query')")
- public CommonResult> getJobNextTimes(@RequestParam("id") Long id,
- @RequestParam(value = "count", required = false, defaultValue = "5") Integer count) {
- JobDO job = jobService.getJob(id);
- if (job == null) {
- return success(Collections.emptyList());
- }
- return success(CronUtils.getNextTimes(job.getCronExpression(), count));
- }
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobLogController.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobLogController.java
deleted file mode 100644
index 40de986cf..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobLogController.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExcelVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogRespVO;
-import cn.iocoder.yudao.module.infra.convert.job.JobLogConvert;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO;
-import cn.iocoder.yudao.module.infra.service.job.JobLogService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiOperation;
-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.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.List;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
-
-@Api(tags = "管理后台 - 定时任务日志")
-@RestController
-@RequestMapping("/infra/job-log")
-@Validated
-public class JobLogController {
-
- @Resource
- private JobLogService jobLogService;
-
- @GetMapping("/get")
- @ApiOperation("获得定时任务日志")
- @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
- @PreAuthorize("@ss.hasPermission('infra:job:query')")
- public CommonResult getJobLog(@RequestParam("id") Long id) {
- JobLogDO jobLog = jobLogService.getJobLog(id);
- return success(JobLogConvert.INSTANCE.convert(jobLog));
- }
-
- @GetMapping("/list")
- @ApiOperation("获得定时任务日志列表")
- @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class)
- @PreAuthorize("@ss.hasPermission('infra:job:query')")
- public CommonResult> getJobLogList(@RequestParam("ids") Collection ids) {
- List list = jobLogService.getJobLogList(ids);
- return success(JobLogConvert.INSTANCE.convertList(list));
- }
-
- @GetMapping("/page")
- @ApiOperation("获得定时任务日志分页")
- @PreAuthorize("@ss.hasPermission('infra:job:query')")
- public CommonResult> getJobLogPage(@Valid JobLogPageReqVO pageVO) {
- PageResult pageResult = jobLogService.getJobLogPage(pageVO);
- return success(JobLogConvert.INSTANCE.convertPage(pageResult));
- }
-
- @GetMapping("/export-excel")
- @ApiOperation("导出定时任务日志 Excel")
- @PreAuthorize("@ss.hasPermission('infra:job:export')")
- @OperateLog(type = EXPORT)
- public void exportJobLogExcel(@Valid JobLogExportReqVO exportReqVO,
- HttpServletResponse response) throws IOException {
- List list = jobLogService.getJobLogList(exportReqVO);
- // 导出 Excel
- List datas = JobLogConvert.INSTANCE.convertList02(list);
- ExcelUtils.write(response, "任务日志.xls", "数据", JobLogExcelVO.class, datas);
- }
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobBaseVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobBaseVO.java
deleted file mode 100644
index db3fcac1d..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobBaseVO.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-
-/**
-* 定时任务 Base VO,提供给添加、修改、详细的子 VO 使用
-* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
-*/
-@Data
-public class JobBaseVO {
-
- @ApiModelProperty(value = "任务名称", required = true, example = "测试任务")
- @NotNull(message = "任务名称不能为空")
- private String name;
-
- @ApiModelProperty(value = "处理器的参数", example = "yudao")
- private String handlerParam;
-
- @ApiModelProperty(value = "CRON 表达式", required = true, example = "0/10 * * * * ? *")
- @NotNull(message = "CRON 表达式不能为空")
- private String cronExpression;
-
- @ApiModelProperty(value = "重试次数", required = true, example = "3")
- @NotNull(message = "重试次数不能为空")
- private Integer retryCount;
-
- @ApiModelProperty(value = "重试间隔", required = true, example = "1000")
- @NotNull(message = "重试间隔不能为空")
- private Integer retryInterval;
-
- @ApiModelProperty(value = "监控超时时间", example = "1000")
- private Integer monitorTimeout;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobCreateReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobCreateReqVO.java
deleted file mode 100644
index 0e9f45741..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobCreateReqVO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import javax.validation.constraints.NotNull;
-
-@ApiModel("管理后台 - 定时任务创建 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class JobCreateReqVO extends JobBaseVO {
-
- @ApiModelProperty(value = "处理器的名字", required = true, example = "sysUserSessionTimeoutJob")
- @NotNull(message = "处理器的名字不能为空")
- private String handlerName;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExcelVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExcelVO.java
deleted file mode 100644
index 6b5a6a0b1..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExcelVO.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job;
-
-import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
-import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
-import cn.iocoder.yudao.module.infra.enums.DictTypeConstants;
-import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * 定时任务 Excel VO
- *
- * @author 芋道源码
- */
-@Data
-public class JobExcelVO {
-
- @ExcelProperty("任务编号")
- private Long id;
-
- @ExcelProperty("任务名称")
- private String name;
-
- @ExcelProperty(value = "任务状态", converter = DictConvert.class)
- @DictFormat(DictTypeConstants.JOB_STATUS)
- private Integer status;
-
- @ExcelProperty("处理器的名字")
- private String handlerName;
-
- @ExcelProperty("处理器的参数")
- private String handlerParam;
-
- @ExcelProperty("CRON 表达式")
- private String cronExpression;
-
- @ExcelProperty("最后一次执行的开始时间")
- private Date executeBeginTime;
-
- @ExcelProperty("最后一次执行的结束时间")
- private Date executeEndTime;
-
- @ExcelProperty("上一次触发时间")
- private Date firePrevTime;
-
- @ExcelProperty("下一次触发时间")
- private Date fireNextTime;
-
- @ExcelProperty("监控超时时间")
- private Integer monitorTimeout;
-
- @ExcelProperty("创建时间")
- private Date createTime;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExportReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExportReqVO.java
deleted file mode 100644
index ec393a604..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobExportReqVO.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-@ApiModel(value = "管理后台 - 定时任务 Excel 导出 Request VO", description = "参数和 JobPageReqVO 是一致的")
-@Data
-public class JobExportReqVO {
-
- @ApiModelProperty(value = "任务名称", example = "测试任务", notes = "模糊匹配")
- private String name;
-
- @ApiModelProperty(value = "任务状态", example = "1", notes = "参见 JobStatusEnum 枚举")
- private Integer status;
-
- @ApiModelProperty(value = "处理器的名字", example = "UserSessionTimeoutJob", notes = "模糊匹配")
- private String handlerName;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobPageReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobPageReqVO.java
deleted file mode 100644
index 02d3a7e2b..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobPageReqVO.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-@ApiModel("管理后台 - 定时任务分页 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class JobPageReqVO extends PageParam {
-
- @ApiModelProperty(value = "任务名称", example = "测试任务", notes = "模糊匹配")
- private String name;
-
- @ApiModelProperty(value = "任务状态", example = "1", notes = "参见 JobStatusEnum 枚举")
- private Integer status;
-
- @ApiModelProperty(value = "处理器的名字", example = "sysUserSessionTimeoutJob", notes = "模糊匹配")
- private String handlerName;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobRespVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobRespVO.java
deleted file mode 100644
index 586134278..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobRespVO.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import javax.validation.constraints.NotNull;
-import java.util.Date;
-
-@ApiModel("管理后台 - 定时任务 Response VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class JobRespVO extends JobBaseVO {
-
- @ApiModelProperty(value = "任务编号", required = true, example = "1024")
- private Long id;
-
- @ApiModelProperty(value = "任务状态", required = true, example = "1")
- private Integer status;
-
- @ApiModelProperty(value = "处理器的名字", required = true, example = "sysUserSessionTimeoutJob")
- @NotNull(message = "处理器的名字不能为空")
- private String handlerName;
-
- @ApiModelProperty(value = "创建时间", required = true)
- private Date createTime;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobUpdateReqVO.java
deleted file mode 100644
index f26cd226c..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/job/JobUpdateReqVO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.job;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import javax.validation.constraints.NotNull;
-
-@ApiModel("管理后台 - 定时任务更新 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class JobUpdateReqVO extends JobBaseVO {
-
- @ApiModelProperty(value = "任务编号", required = true, example = "1024")
- @NotNull(message = "任务编号不能为空")
- private Long id;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java
deleted file mode 100644
index 761921349..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogBaseVO.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.log;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import javax.validation.constraints.NotNull;
-import java.util.Date;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-/**
-* 定时任务日志 Base VO,提供给添加、修改、详细的子 VO 使用
-* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
-*/
-@Data
-public class JobLogBaseVO {
-
- @ApiModelProperty(value = "任务编号", required = true, example = "1024")
- @NotNull(message = "任务编号不能为空")
- private Long jobId;
-
- @ApiModelProperty(value = "处理器的名字", required = true, example = "sysUserSessionTimeoutJob")
- @NotNull(message = "处理器的名字不能为空")
- private String handlerName;
-
- @ApiModelProperty(value = "处理器的参数", example = "yudao")
- private String handlerParam;
-
- @ApiModelProperty(value = "第几次执行", required = true, example = "1")
- @NotNull(message = "第几次执行不能为空")
- private Integer executeIndex;
-
- @ApiModelProperty(value = "开始执行时间", required = true)
- @NotNull(message = "开始执行时间不能为空")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private Date beginTime;
-
- @ApiModelProperty(value = "结束执行时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private Date endTime;
-
- @ApiModelProperty(value = "执行时长", example = "123")
- private Integer duration;
-
- @ApiModelProperty(value = "任务状态", required = true, example = "1", notes = "参见 JobLogStatusEnum 枚举")
- @NotNull(message = "任务状态不能为空")
- private Integer status;
-
- @ApiModelProperty(value = "结果数据", example = "执行成功")
- private String result;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExcelVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExcelVO.java
deleted file mode 100644
index 25eed2a3f..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExcelVO.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.log;
-
-import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
-import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
-import cn.iocoder.yudao.module.infra.enums.DictTypeConstants;
-import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * 定时任务 Excel VO
- *
- * @author 芋艿
- */
-@Data
-public class JobLogExcelVO {
-
- @ExcelProperty("日志编号")
- private Long id;
-
- @ExcelProperty("任务编号")
- private Long jobId;
-
- @ExcelProperty("处理器的名字")
- private String handlerName;
-
- @ExcelProperty("处理器的参数")
- private String handlerParam;
-
- @ExcelProperty("第几次执行")
- private Integer executeIndex;
-
- @ExcelProperty("开始执行时间")
- private Date beginTime;
-
- @ExcelProperty("结束执行时间")
- private Date endTime;
-
- @ExcelProperty("执行时长")
- private Integer duration;
-
- @ExcelProperty(value = "任务状态", converter = DictConvert.class)
- @DictFormat(DictTypeConstants.JOB_STATUS)
- private Integer status;
-
- @ExcelProperty("结果数据")
- private String result;
-
- @ExcelProperty("创建时间")
- private Date createTime;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java
deleted file mode 100644
index df482c9d2..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogExportReqVO.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.log;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.util.Date;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@ApiModel(value = "管理后台 - 定时任务 Excel 导出 Request VO", description = "参数和 JobLogPageReqVO 是一致的")
-@Data
-public class JobLogExportReqVO {
-
- @ApiModelProperty(value = "任务编号", example = "10")
- private Long jobId;
-
- @ApiModelProperty(value = "处理器的名字", notes = "模糊匹配")
- private String handlerName;
-
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- @ApiModelProperty(value = "开始执行时间")
- private Date beginTime;
-
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- @ApiModelProperty(value = "结束执行时间")
- private Date endTime;
-
- @ApiModelProperty(value = "任务状态", notes = "参见 JobLogStatusEnum 枚举")
- private Integer status;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java
deleted file mode 100644
index 055cfc56c..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.log;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.util.Date;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@ApiModel("管理后台 - 定时任务日志分页 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class JobLogPageReqVO extends PageParam {
-
- @ApiModelProperty(value = "任务编号", example = "10")
- private Long jobId;
-
- @ApiModelProperty(value = "处理器的名字", notes = "模糊匹配")
- private String handlerName;
-
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- @ApiModelProperty(value = "开始执行时间")
- private Date beginTime;
-
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- @ApiModelProperty(value = "结束执行时间")
- private Date endTime;
-
- @ApiModelProperty(value = "任务状态", notes = "参见 JobLogStatusEnum 枚举")
- private Integer status;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogRespVO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogRespVO.java
deleted file mode 100644
index c806a209a..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/vo/log/JobLogRespVO.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cn.iocoder.yudao.module.infra.controller.admin.job.vo.log;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import java.util.Date;
-
-@ApiModel("管理后台 - 定时任务日志 Response VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class JobLogRespVO extends JobLogBaseVO {
-
- @ApiModelProperty(value = "日志编号", required = true, example = "1024")
- private Long id;
-
- @ApiModelProperty(value = "创建时间", required = true)
- private Date createTime;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/config/ConfigConvert.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/config/ConfigConvert.java
deleted file mode 100644
index 94bcc0eae..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/config/ConfigConvert.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package cn.iocoder.yudao.module.infra.convert.config;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExcelVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigRespVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.factory.Mappers;
-
-import java.util.List;
-
-@Mapper
-public interface ConfigConvert {
-
- ConfigConvert INSTANCE = Mappers.getMapper(ConfigConvert.class);
-
- PageResult convertPage(PageResult page);
-
- @Mapping(source = "configKey", target = "key")
- ConfigRespVO convert(ConfigDO bean);
-
- @Mapping(source = "key", target = "configKey")
- ConfigDO convert(ConfigCreateReqVO bean);
-
- ConfigDO convert(ConfigUpdateReqVO bean);
-
- @Mapping(source = "configKey", target = "key")
- List convertList(List list);
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobConvert.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobConvert.java
deleted file mode 100644
index 2c7aa0297..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobConvert.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cn.iocoder.yudao.module.infra.convert.job;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobCreateReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExcelVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobRespVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobUpdateReqVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-import java.util.List;
-
-/**
- * 定时任务 Convert
- *
- * @author 芋道源码
- */
-@Mapper
-public interface JobConvert {
-
- JobConvert INSTANCE = Mappers.getMapper(JobConvert.class);
-
- JobDO convert(JobCreateReqVO bean);
-
- JobDO convert(JobUpdateReqVO bean);
-
- JobRespVO convert(JobDO bean);
-
- List convertList(List list);
-
- PageResult convertPage(PageResult page);
-
- List convertList02(List list);
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobLogConvert.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobLogConvert.java
deleted file mode 100644
index 3f32c526d..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/job/JobLogConvert.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.iocoder.yudao.module.infra.convert.job;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExcelVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogRespVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-import java.util.List;
-
-/**
- * 定时任务日志 Convert
- *
- * @author 芋艿
- */
-@Mapper
-public interface JobLogConvert {
-
- JobLogConvert INSTANCE = Mappers.getMapper(JobLogConvert.class);
-
- JobLogRespVO convert(JobLogDO bean);
-
- List convertList(List list);
-
- PageResult convertPage(PageResult page);
-
- List convertList02(List list);
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/ConfigDO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/ConfigDO.java
deleted file mode 100644
index 03b677072..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/config/ConfigDO.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package cn.iocoder.yudao.module.infra.dal.dataobject.config;
-
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-/**
- * 参数配置表
- *
- * @author 芋道源码
- */
-@TableName("infra_config")
-@KeySequence("infra_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class ConfigDO extends BaseDO {
-
- /**
- * 参数主键
- */
- @TableId
- private Long id;
- /**
- * 参数分类
- */
- private String category;
- /**
- * 参数名称
- */
- private String name;
- /**
- * 参数键名
- *
- * 支持多 DB 类型时,无法直接使用 key + @TableField("config_key") 来实现转换,原因是 "config_key" AS key 而存在报错
- */
- private String configKey;
- /**
- * 参数键值
- */
- private String value;
- /**
- * 参数类型
- *
- * 枚举 {@link ConfigTypeEnum}
- */
- private Integer type;
- /**
- * 是否可见
- *
- * 不可见的参数,一般是敏感参数,前端不可获取
- */
- private Boolean visible;
- /**
- * 备注
- */
- private String remark;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobDO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobDO.java
deleted file mode 100644
index 18b245a90..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobDO.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package cn.iocoder.yudao.module.infra.dal.dataobject.job;
-
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.infra.enums.job.JobStatusEnum;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.*;
-
-/**
- * 定时任务 DO
- *
- * @author 芋道源码
- */
-@TableName("infra_job")
-@KeySequence("infra_job_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class JobDO extends BaseDO {
-
- /**
- * 任务编号
- */
- @TableId
- private Long id;
- /**
- * 任务名称
- */
- private String name;
- /**
- * 任务状态
- *
- * 枚举 {@link JobStatusEnum}
- */
- private Integer status;
- /**
- * 处理器的名字
- */
- private String handlerName;
- /**
- * 处理器的参数
- */
- private String handlerParam;
- /**
- * CRON 表达式
- */
- private String cronExpression;
-
- // ========== 重试相关字段 ==========
- /**
- * 重试次数
- * 如果不重试,则设置为 0
- */
- private Integer retryCount;
- /**
- * 重试间隔,单位:毫秒
- * 如果没有间隔,则设置为 0
- */
- private Integer retryInterval;
-
- // ========== 监控相关字段 ==========
- /**
- * 监控超时时间,单位:毫秒
- * 为空时,表示不监控
- *
- * 注意,这里的超时的目的,不是进行任务的取消,而是告警任务的执行时间过长
- */
- private Integer monitorTimeout;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobLogDO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobLogDO.java
deleted file mode 100644
index 99fbd79ba..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/job/JobLogDO.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package cn.iocoder.yudao.module.infra.dal.dataobject.job;
-
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
-import cn.iocoder.yudao.module.infra.enums.job.JobLogStatusEnum;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.*;
-
-import java.util.Date;
-
-/**
- * 定时任务的执行日志
- *
- * @author 芋道源码
- */
-@TableName("infra_job_log")
-@KeySequence("infra_job_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class JobLogDO extends BaseDO {
-
- /**
- * 日志编号
- */
- private Long id;
- /**
- * 任务编号
- *
- * 关联 {@link JobDO#getId()}
- */
- private Long jobId;
- /**
- * 处理器的名字
- *
- * 冗余字段 {@link JobDO#getHandlerName()}
- */
- private String handlerName;
- /**
- * 处理器的参数
- *
- * 冗余字段 {@link JobDO#getHandlerParam()}
- */
- private String handlerParam;
- /**
- * 第几次执行
- *
- * 用于区分是不是重试执行。如果是重试执行,则 index 大于 1
- */
- private Integer executeIndex;
-
- /**
- * 开始执行时间
- */
- private Date beginTime;
- /**
- * 结束执行时间
- */
- private Date endTime;
- /**
- * 执行时长,单位:毫秒
- */
- private Integer duration;
- /**
- * 状态
- *
- * 枚举 {@link JobLogStatusEnum}
- */
- private Integer status;
- /**
- * 结果数据
- *
- * 成功时,使用 {@link JobHandler#execute(String)} 的结果
- * 失败时,使用 {@link JobHandler#execute(String)} 的异常堆栈
- */
- private String result;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobLogMapper.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobLogMapper.java
deleted file mode 100644
index fe196df35..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobLogMapper.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package cn.iocoder.yudao.module.infra.dal.mysql.job;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-
-/**
- * 任务日志 Mapper
- *
- * @author 芋道源码
- */
-@Mapper
-public interface JobLogMapper extends BaseMapperX {
-
- default PageResult selectPage(JobLogPageReqVO reqVO) {
- return selectPage(reqVO, new QueryWrapperX()
- .eqIfPresent("job_id", reqVO.getJobId())
- .likeIfPresent("handler_name", reqVO.getHandlerName())
- .geIfPresent("begin_time", reqVO.getBeginTime())
- .leIfPresent("end_time", reqVO.getEndTime())
- .eqIfPresent("status", reqVO.getStatus())
- .orderByDesc("id") // ID 倒序
- );
- }
-
- default List selectList(JobLogExportReqVO reqVO) {
- return selectList(new QueryWrapperX()
- .eqIfPresent("job_id", reqVO.getJobId())
- .likeIfPresent("handler_name", reqVO.getHandlerName())
- .geIfPresent("begin_time", reqVO.getBeginTime())
- .leIfPresent("end_time", reqVO.getEndTime())
- .eqIfPresent("status", reqVO.getStatus())
- .orderByDesc("id") // ID 倒序
- );
- }
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobMapper.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobMapper.java
deleted file mode 100644
index 883906a01..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/job/JobMapper.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package cn.iocoder.yudao.module.infra.dal.mysql.job;
-
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-
-/**
- * 定时任务 Mapper
- *
- * @author 芋道源码
- */
-@Mapper
-public interface JobMapper extends BaseMapperX {
-
- default JobDO selectByHandlerName(String handlerName) {
- return selectOne(JobDO::getHandlerName, handlerName);
- }
-
- default PageResult selectPage(JobPageReqVO reqVO) {
- return selectPage(reqVO, new LambdaQueryWrapperX()
- .likeIfPresent(JobDO::getName, reqVO.getName())
- .eqIfPresent(JobDO::getStatus, reqVO.getStatus())
- .likeIfPresent(JobDO::getHandlerName, reqVO.getHandlerName())
- );
- }
-
- default List selectList(JobExportReqVO reqVO) {
- return selectList(new LambdaQueryWrapperX()
- .likeIfPresent(JobDO::getName, reqVO.getName())
- .eqIfPresent(JobDO::getStatus, reqVO.getStatus())
- .likeIfPresent(JobDO::getHandlerName, reqVO.getHandlerName())
- );
- }
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/config/ConfigTypeEnum.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/config/ConfigTypeEnum.java
deleted file mode 100644
index 15c20152f..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/config/ConfigTypeEnum.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.iocoder.yudao.module.infra.enums.config;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@Getter
-@AllArgsConstructor
-public enum ConfigTypeEnum {
-
- /**
- * 系统配置
- */
- SYSTEM(1),
- /**
- * 自定义配置
- */
- CUSTOM(2);
-
- private final Integer type;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobLogStatusEnum.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobLogStatusEnum.java
deleted file mode 100644
index 95670539e..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobLogStatusEnum.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.iocoder.yudao.module.infra.enums.job;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 任务日志的状态枚举
- *
- * @author 芋道源码
- */
-@Getter
-@AllArgsConstructor
-public enum JobLogStatusEnum {
-
- RUNNING(0), // 运行中
- SUCCESS(1), // 成功
- FAILURE(2); // 失败
-
- /**
- * 状态
- */
- private final Integer status;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobStatusEnum.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobStatusEnum.java
deleted file mode 100644
index 3d9ec3f75..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobStatusEnum.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package cn.iocoder.yudao.module.infra.enums.job;
-
-import com.google.common.collect.Sets;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import org.quartz.impl.jdbcjobstore.Constants;
-
-import java.util.Collections;
-import java.util.Set;
-
-/**
- * 任务状态的枚举
- *
- * @author 芋道源码
- */
-@Getter
-@AllArgsConstructor
-public enum JobStatusEnum {
-
- /**
- * 初始化中
- */
- INIT(0, Collections.emptySet()),
- /**
- * 开启
- */
- NORMAL(1, Sets.newHashSet(Constants.STATE_WAITING, Constants.STATE_ACQUIRED, Constants.STATE_BLOCKED)),
- /**
- * 暂停
- */
- STOP(2, Sets.newHashSet(Constants.STATE_PAUSED, Constants.STATE_PAUSED_BLOCKED));
-
- /**
- * 状态
- */
- private final Integer status;
- /**
- * 对应的 Quartz 触发器的状态集合
- */
- private final Set quartzStates;
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigService.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigService.java
deleted file mode 100644
index abd82e54a..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigService.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package cn.iocoder.yudao.module.infra.service.config;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
-
-import javax.validation.Valid;
-import java.util.List;
-
-/**
- * 参数配置 Service 接口
- *
- * @author 芋道源码
- */
-public interface ConfigService {
-
- /**
- * 创建参数配置
- *
- * @param reqVO 创建信息
- * @return 配置编号
- */
- Long createConfig(@Valid ConfigCreateReqVO reqVO);
-
- /**
- * 更新参数配置
- *
- * @param reqVO 更新信息
- */
- void updateConfig(@Valid ConfigUpdateReqVO reqVO);
-
- /**
- * 删除参数配置
- *
- * @param id 配置编号
- */
- void deleteConfig(Long id);
-
- /**
- * 获得参数配置
- *
- * @param id 配置编号
- * @return 参数配置
- */
- ConfigDO getConfig(Long id);
-
- /**
- * 根据参数键,获得参数配置
- *
- * @param key 配置键
- * @return 参数配置
- */
- ConfigDO getConfigByKey(String key);
-
- /**
- * 获得参数配置分页列表
- *
- * @param reqVO 分页条件
- * @return 分页列表
- */
- PageResult getConfigPage(@Valid ConfigPageReqVO reqVO);
-
- /**
- * 获得参数配置列表
- *
- * @param reqVO 列表
- * @return 列表
- */
- List getConfigList(@Valid ConfigExportReqVO reqVO);
-
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImpl.java
deleted file mode 100644
index 495bbc904..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImpl.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package cn.iocoder.yudao.module.infra.service.config;
-
-import cn.hutool.core.util.StrUtil;
-import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO;
-import cn.iocoder.yudao.module.infra.convert.config.ConfigConvert;
-import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
-import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper;
-import cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants;
-import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum;
-import cn.iocoder.yudao.module.infra.mq.producer.config.ConfigProducer;
-import com.google.common.annotations.VisibleForTesting;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-/**
- * 参数配置 Service 实现类
- */
-@Service
-@Slf4j
-@Validated
-public class ConfigServiceImpl implements ConfigService {
-
- @Resource
- private ConfigMapper configMapper;
-
- @Resource
- private ConfigProducer configProducer;
-
- @Override
- public Long createConfig(ConfigCreateReqVO reqVO) {
- // 校验正确性
- checkCreateOrUpdate(null, reqVO.getKey());
- // 插入参数配置
- ConfigDO config = ConfigConvert.INSTANCE.convert(reqVO);
- config.setType(ConfigTypeEnum.CUSTOM.getType());
- configMapper.insert(config);
- // 发送刷新消息
- configProducer.sendConfigRefreshMessage();
- return config.getId();
- }
-
- @Override
- public void updateConfig(ConfigUpdateReqVO reqVO) {
- // 校验正确性
- checkCreateOrUpdate(reqVO.getId(), null); // 不允许更新 key
- // 更新参数配置
- ConfigDO updateObj = ConfigConvert.INSTANCE.convert(reqVO);
- configMapper.updateById(updateObj);
- // 发送刷新消息
- configProducer.sendConfigRefreshMessage();
- }
-
- @Override
- public void deleteConfig(Long id) {
- // 校验配置存在
- ConfigDO config = checkConfigExists(id);
- // 内置配置,不允许删除
- if (ConfigTypeEnum.SYSTEM.getType().equals(config.getType())) {
- throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE);
- }
- // 删除
- configMapper.deleteById(id);
- // 发送刷新消息
- configProducer.sendConfigRefreshMessage();
- }
-
- @Override
- public ConfigDO getConfig(Long id) {
- return configMapper.selectById(id);
- }
-
- @Override
- public ConfigDO getConfigByKey(String key) {
- return configMapper.selectByKey(key);
- }
-
- @Override
- public PageResult getConfigPage(ConfigPageReqVO reqVO) {
- return configMapper.selectPage(reqVO);
- }
-
- @Override
- public List getConfigList(ConfigExportReqVO reqVO) {
- return configMapper.selectList(reqVO);
- }
-
- private void checkCreateOrUpdate(Long id, String key) {
- // 校验自己存在
- checkConfigExists(id);
- // 校验参数配置 key 的唯一性
- if (StrUtil.isNotEmpty(key)) {
- checkConfigKeyUnique(id, key);
- }
- }
-
- @VisibleForTesting
- public ConfigDO checkConfigExists(Long id) {
- if (id == null) {
- return null;
- }
- ConfigDO config = configMapper.selectById(id);
- if (config == null) {
- throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_NOT_EXISTS);
- }
- return config;
- }
-
- @VisibleForTesting
- public void checkConfigKeyUnique(Long id, String key) {
- ConfigDO config = configMapper.selectByKey(key);
- if (config == null) {
- return;
- }
- // 如果 id 为空,说明不用比较是否为相同 id 的参数配置
- if (id == null) {
- throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_KEY_DUPLICATE);
- }
- if (!config.getId().equals(id)) {
- throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_KEY_DUPLICATE);
- }
- }
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogService.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogService.java
deleted file mode 100644
index e2e9e73e4..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogService.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package cn.iocoder.yudao.module.infra.service.job;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.quartz.core.service.JobLogFrameworkService;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Job 日志 Service 接口
- *
- * @author 芋道源码
- */
-public interface JobLogService extends JobLogFrameworkService {
-
- /**
- * 获得定时任务
- *
- * @param id 编号
- * @return 定时任务
- */
- JobLogDO getJobLog(Long id);
-
- /**
- * 获得定时任务列表
- *
- * @param ids 编号
- * @return 定时任务列表
- */
- List getJobLogList(Collection ids);
-
- /**
- * 获得定时任务分页
- *
- * @param pageReqVO 分页查询
- * @return 定时任务分页
- */
- PageResult getJobLogPage(JobLogPageReqVO pageReqVO);
-
- /**
- * 获得定时任务列表, 用于 Excel 导出
- *
- * @param exportReqVO 查询条件
- * @return 定时任务分页
- */
- List getJobLogList(JobLogExportReqVO exportReqVO);
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImpl.java
deleted file mode 100644
index 8b3c2ef88..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImpl.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package cn.iocoder.yudao.module.infra.service.job;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO;
-import cn.iocoder.yudao.module.infra.dal.mysql.job.JobLogMapper;
-import cn.iocoder.yudao.module.infra.enums.job.JobLogStatusEnum;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-
-import javax.annotation.Resource;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
-/**
- * Job 日志 Service 实现类
- *
- * @author 芋道源码
- */
-@Service
-@Validated
-@Slf4j
-public class JobLogServiceImpl implements JobLogService {
-
- @Resource
- private JobLogMapper jobLogMapper;
-
- @Override
- public Long createJobLog(Long jobId, Date beginTime, String jobHandlerName, String jobHandlerParam, Integer executeIndex) {
- JobLogDO log = JobLogDO.builder().jobId(jobId).handlerName(jobHandlerName).handlerParam(jobHandlerParam).executeIndex(executeIndex)
- .beginTime(beginTime).status(JobLogStatusEnum.RUNNING.getStatus()).build();
- jobLogMapper.insert(log);
- return log.getId();
- }
-
- @Override
- @Async
- public void updateJobLogResultAsync(Long logId, Date endTime, Integer duration, boolean success, String result) {
- try {
- JobLogDO updateObj = JobLogDO.builder().id(logId).endTime(endTime).duration(duration)
- .status(success ? JobLogStatusEnum.SUCCESS.getStatus() : JobLogStatusEnum.FAILURE.getStatus()).result(result).build();
- jobLogMapper.updateById(updateObj);
- } catch (Exception ex) {
- log.error("[updateJobLogResultAsync][logId({}) endTime({}) duration({}) success({}) result({})]",
- logId, endTime, duration, success, result);
- }
- }
-
- @Override
- public JobLogDO getJobLog(Long id) {
- return jobLogMapper.selectById(id);
- }
-
- @Override
- public List getJobLogList(Collection ids) {
- return jobLogMapper.selectBatchIds(ids);
- }
-
- @Override
- public PageResult getJobLogPage(JobLogPageReqVO pageReqVO) {
- return jobLogMapper.selectPage(pageReqVO);
- }
-
- @Override
- public List getJobLogList(JobLogExportReqVO exportReqVO) {
- return jobLogMapper.selectList(exportReqVO);
- }
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobService.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobService.java
deleted file mode 100644
index bd5dd646d..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobService.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package cn.iocoder.yudao.module.infra.service.job;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobCreateReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobUpdateReqVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO;
-import org.quartz.SchedulerException;
-
-import javax.validation.Valid;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 定时任务 Service 接口
- *
- * @author 芋道源码
- */
-public interface JobService {
-
- /**
- * 创建定时任务
- *
- * @param createReqVO 创建信息
- * @return 编号
- */
- Long createJob(@Valid JobCreateReqVO createReqVO) throws SchedulerException;
-
- /**
- * 更新定时任务
- *
- * @param updateReqVO 更新信息
- */
- void updateJob(@Valid JobUpdateReqVO updateReqVO) throws SchedulerException;
-
- /**
- * 更新定时任务的状态
- *
- * @param id 任务编号
- * @param status 状态
- */
- void updateJobStatus(Long id, Integer status) throws SchedulerException;
-
- /**
- * 触发定时任务
- *
- * @param id 任务编号
- */
- void triggerJob(Long id) throws SchedulerException;
-
- /**
- * 删除定时任务
- *
- * @param id 编号
- */
- void deleteJob(Long id) throws SchedulerException;
-
- /**
- * 获得定时任务
- *
- * @param id 编号
- * @return 定时任务
- */
- JobDO getJob(Long id);
-
- /**
- * 获得定时任务列表
- *
- * @param ids 编号
- * @return 定时任务列表
- */
- List getJobList(Collection ids);
-
- /**
- * 获得定时任务分页
- *
- * @param pageReqVO 分页查询
- * @return 定时任务分页
- */
- PageResult getJobPage(JobPageReqVO pageReqVO);
-
- /**
- * 获得定时任务列表, 用于 Excel 导出
- *
- * @param exportReqVO 查询条件
- * @return 定时任务分页
- */
- List getJobList(JobExportReqVO exportReqVO);
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImpl.java
deleted file mode 100644
index e0a245750..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package cn.iocoder.yudao.module.infra.service.job;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager;
-import cn.iocoder.yudao.framework.quartz.core.util.CronUtils;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobCreateReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobUpdateReqVO;
-import cn.iocoder.yudao.module.infra.convert.job.JobConvert;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO;
-import cn.iocoder.yudao.module.infra.dal.mysql.job.JobMapper;
-import cn.iocoder.yudao.module.infra.enums.job.JobStatusEnum;
-import org.quartz.SchedulerException;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.validation.annotation.Validated;
-
-import javax.annotation.Resource;
-import java.util.Collection;
-import java.util.List;
-
-import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*;
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.containsAny;
-
-/**
- * 定时任务 Service 实现类
- *
- * @author 芋道源码
- */
-@Service
-@Validated
-public class JobServiceImpl implements JobService {
-
- @Resource
- private JobMapper jobMapper;
-
- @Resource
- private SchedulerManager schedulerManager;
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public Long createJob(JobCreateReqVO createReqVO) throws SchedulerException {
- validateCronExpression(createReqVO.getCronExpression());
- // 校验唯一性
- if (jobMapper.selectByHandlerName(createReqVO.getHandlerName()) != null) {
- throw exception(JOB_HANDLER_EXISTS);
- }
- // 插入
- JobDO job = JobConvert.INSTANCE.convert(createReqVO);
- job.setStatus(JobStatusEnum.INIT.getStatus());
- fillJobMonitorTimeoutEmpty(job);
- jobMapper.insert(job);
-
- // 添加 Job 到 Quartz 中
- schedulerManager.addJob(job.getId(), job.getHandlerName(), job.getHandlerParam(), job.getCronExpression(),
- createReqVO.getRetryCount(), createReqVO.getRetryInterval());
- // 更新
- JobDO updateObj = JobDO.builder().id(job.getId()).status(JobStatusEnum.NORMAL.getStatus()).build();
- jobMapper.updateById(updateObj);
-
- // 返回
- return job.getId();
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void updateJob(JobUpdateReqVO updateReqVO) throws SchedulerException {
- validateCronExpression(updateReqVO.getCronExpression());
- // 校验存在
- JobDO job = this.validateJobExists(updateReqVO.getId());
- // 只有开启状态,才可以修改.原因是,如果出暂停状态,修改 Quartz Job 时,会导致任务又开始执行
- if (!job.getStatus().equals(JobStatusEnum.NORMAL.getStatus())) {
- throw exception(JOB_UPDATE_ONLY_NORMAL_STATUS);
- }
- // 更新
- JobDO updateObj = JobConvert.INSTANCE.convert(updateReqVO);
- fillJobMonitorTimeoutEmpty(updateObj);
- jobMapper.updateById(updateObj);
-
- // 更新 Job 到 Quartz 中
- schedulerManager.updateJob(job.getHandlerName(), updateReqVO.getHandlerParam(), updateReqVO.getCronExpression(),
- updateReqVO.getRetryCount(), updateReqVO.getRetryInterval());
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void updateJobStatus(Long id, Integer status) throws SchedulerException {
- // 校验 status
- if (!containsAny(status, JobStatusEnum.NORMAL.getStatus(), JobStatusEnum.STOP.getStatus())) {
- throw exception(JOB_CHANGE_STATUS_INVALID);
- }
- // 校验存在
- JobDO job = this.validateJobExists(id);
- // 校验是否已经为当前状态
- if (job.getStatus().equals(status)) {
- throw exception(JOB_CHANGE_STATUS_EQUALS);
- }
- // 更新 Job 状态
- JobDO updateObj = JobDO.builder().id(id).status(status).build();
- jobMapper.updateById(updateObj);
-
- // 更新状态 Job 到 Quartz 中
- if (JobStatusEnum.NORMAL.getStatus().equals(status)) { // 开启
- schedulerManager.resumeJob(job.getHandlerName());
- } else { // 暂停
- schedulerManager.pauseJob(job.getHandlerName());
- }
- }
-
- @Override
- public void triggerJob(Long id) throws SchedulerException {
- // 校验存在
- JobDO job = this.validateJobExists(id);
-
- // 触发 Quartz 中的 Job
- schedulerManager.triggerJob(job.getId(), job.getHandlerName(), job.getHandlerParam());
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void deleteJob(Long id) throws SchedulerException {
- // 校验存在
- JobDO job = this.validateJobExists(id);
- // 更新
- jobMapper.deleteById(id);
-
- // 删除 Job 到 Quartz 中
- schedulerManager.deleteJob(job.getHandlerName());
- }
-
- private JobDO validateJobExists(Long id) {
- JobDO job = jobMapper.selectById(id);
- if (job == null) {
- throw exception(JOB_NOT_EXISTS);
- }
- return job;
- }
-
- private void validateCronExpression(String cronExpression) {
- if (!CronUtils.isValid(cronExpression)) {
- throw exception(JOB_CRON_EXPRESSION_VALID);
- }
- }
-
- @Override
- public JobDO getJob(Long id) {
- return jobMapper.selectById(id);
- }
-
- @Override
- public List getJobList(Collection ids) {
- return jobMapper.selectBatchIds(ids);
- }
-
- @Override
- public PageResult getJobPage(JobPageReqVO pageReqVO) {
- return jobMapper.selectPage(pageReqVO);
- }
-
- @Override
- public List getJobList(JobExportReqVO exportReqVO) {
- return jobMapper.selectList(exportReqVO);
- }
-
- private static void fillJobMonitorTimeoutEmpty(JobDO job) {
- if (job.getMonitorTimeout() == null) {
- job.setMonitorTimeout(0);
- }
- }
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml
new file mode 100644
index 000000000..3681de254
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml
@@ -0,0 +1,204 @@
+server:
+ port: 48082
+
+--- #################### 数据库相关配置 ####################
+
+spring:
+ # 数据源配置项
+ autoconfigure:
+ exclude:
+ - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+ datasource:
+ druid: # Druid 【监控】相关的全局配置
+ web-stat-filter:
+ enabled: true
+ stat-view-servlet:
+ enabled: true
+ allow: # 设置白名单,不填则允许所有访问
+ url-pattern: /druid/*
+ login-username: # 控制台管理用户名和密码
+ login-password:
+ filter:
+ stat:
+ enabled: true
+ log-slow-sql: true # 慢 SQL 记录
+ slow-sql-millis: 100
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
+ dynamic: # 多数据源配置
+ druid: # Druid 【连接池】相关的全局配置
+ initial-size: 5 # 初始连接数
+ min-idle: 10 # 最小连接池数量
+ max-active: 20 # 最大连接池数量
+ max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+ time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+ min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+ max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+ validation-query: SELECT 1 # 配置检测连接是否有效
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ primary: master
+ datasource:
+ master:
+ name: ruoyi-vue-pro
+ url: jdbc:mysql://400-infra.server.iocoder.cn:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&nullCatalogMeansCurrent=true
+ driver-class-name: com.mysql.jdbc.Driver
+ username: root
+ password: 3WLiVUBEwTbvAfsh
+ slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+ name: ruoyi-vue-pro
+ url: jdbc:mysql://400-infra.server.iocoder.cn:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&nullCatalogMeansCurrent=true
+ driver-class-name: com.mysql.jdbc.Driver
+ username: root
+ password: 3WLiVUBEwTbvAfsh
+
+ # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+ redis:
+ host: 400-infra.server.iocoder.cn # 地址
+ port: 6379 # 端口
+ database: 1 # 数据库索引
+# password: 123456 # 密码,建议生产环境开启
+
+jasypt:
+ encryptor:
+ password: yuanma # 加解密的秘钥
+
+--- #################### 定时任务相关配置 ####################
+
+# Quartz 配置项,对应 QuartzProperties 配置类
+spring:
+ quartz:
+ auto-startup: true # 测试环境,需要开启 Job
+ scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
+ job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
+ wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
+ properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档
+ org:
+ quartz:
+ # Scheduler 相关配置
+ scheduler:
+ instanceName: schedulerName
+ instanceId: AUTO # 自动生成 instance ID
+ # JobStore 相关配置
+ jobStore:
+ # JobStore 实现类。可见博客:https://blog.csdn.net/weixin_42458219/article/details/122247162
+ class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
+ isClustered: true # 是集群模式
+ clusterCheckinInterval: 15000 # 集群检查频率,单位:毫秒。默认为 15000,即 15 秒
+ misfireThreshold: 60000 # misfire 阀值,单位:毫秒。
+ # 线程池相关配置
+ threadPool:
+ threadCount: 25 # 线程池大小。默认为 10 。
+ threadPriority: 5 # 线程优先级
+ class: org.quartz.simpl.SimpleThreadPool # 线程池类型
+ jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置
+ initialize-schema: NEVER # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。
+
+--- #################### 配置中心相关配置 ####################
+
+# Apollo 配置中心
+apollo:
+ bootstrap:
+ enabled: true # 设置 Apollo 在启动阶段生效
+ eagerLoad:
+ enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置
+ jdbc: # 自定义的 JDBC 配置项,用于数据库的地址
+ dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigDAOImpl
+ url: ${spring.datasource.dynamic.datasource.master.url}
+ username: ${spring.datasource.dynamic.datasource.master.username}
+ password: ${spring.datasource.dynamic.datasource.master.password}
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+ acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+ expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+# Resilience4j 配置项
+resilience4j:
+ ratelimiter:
+ instances:
+ backendA:
+ limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50
+ limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500
+ timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s
+ register-health-indicator: true # 是否注册到健康监测
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+ endpoints:
+ web:
+ base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+ exposure:
+ include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+ boot:
+ admin:
+ # Spring Boot Admin Client 客户端的相关配置
+ client:
+ url: http://127.0.0.1:${server.port}/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
+ instance:
+ prefer-ip: true # 注册实例时,优先使用 IP
+ # Spring Boot Admin Server 服务端的相关配置
+ context-path: /admin # 配置 Spring
+
+# 日志文件配置
+logging:
+ file:
+ name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+
+--- #################### 微信公众号相关配置 ####################
+wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+ mp:
+ # 公众号配置(必填)
+ app-id: wx041349c6f39b268b
+ secret: 5abee519483bc9f8cb37ce280e814bd0
+ # 存储配置,解决 AccessToken 的跨节点的共享
+ config-storage:
+ type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+ key-prefix: wx # Redis Key 的前缀 TODO 芋艿:解决下 Redis key 管理的配置
+ http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+yudao:
+ security:
+ token-header: Authorization
+ mock-enable: true
+ mock-secret: test
+ xss:
+ enable: false
+ exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
+ - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
+ - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
+ pay:
+ pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify
+ pay-return-url: http://niubi.natapp1.cc/api/pay/order/return
+ refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify
+ demo: true # 开启演示模式
+
+justauth:
+ enabled: true
+ type:
+ DINGTALK: # 钉钉
+ client-id: dingvrnreaje3yqvzhxg
+ client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
+ ignore-check-redirect-uri: true
+ WECHAT_ENTERPRISE: # 企业微信
+ client-id: wwd411c69a39ad2e54
+ client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
+ agent-id: 1000004
+ ignore-check-redirect-uri: true
+ cache:
+ type: REDIS
+ prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+ timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml
new file mode 100644
index 000000000..d302b6567
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml
@@ -0,0 +1,220 @@
+spring:
+ # 数据源配置项
+ autoconfigure:
+ exclude:
+ - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+ datasource:
+ druid: # Druid 【监控】相关的全局配置
+ web-stat-filter:
+ enabled: true
+ stat-view-servlet:
+ enabled: true
+ allow: # 设置白名单,不填则允许所有访问
+ url-pattern: /druid/*
+ login-username: # 控制台管理用户名和密码
+ login-password:
+ filter:
+ stat:
+ enabled: true
+ log-slow-sql: true # 慢 SQL 记录
+ slow-sql-millis: 100
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
+ dynamic: # 多数据源配置
+ druid: # Druid 【连接池】相关的全局配置
+ initial-size: 5 # 初始连接数
+ min-idle: 10 # 最小连接池数量
+ max-active: 20 # 最大连接池数量
+ max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+ time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+ min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+ max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+ validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ primary: master
+ datasource:
+ master:
+ name: ruoyi-vue-pro
+ url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
+# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例
+# url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
+# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
+# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.master.name} # SQLServer 连接的示例
+ username: root
+ password: 123456
+# username: sa
+# password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
+ slave: # 模拟从库,可根据自己需要修改
+ name: ruoyi-vue-pro
+ url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
+# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例
+# url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
+# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
+# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.slave.name} # SQLServer 连接的示例
+ username: root
+ password: 123456
+# username: sa
+# password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
+
+ # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+ redis:
+ host: 127.0.0.1 # 地址
+ port: 6379 # 端口
+ database: 0 # 数据库索引
+# password: 123456 # 密码,建议生产环境开启
+
+jasypt:
+ encryptor:
+ password: yuanma # 加解密的秘钥
+
+--- #################### 定时任务相关配置 ####################
+
+# Quartz 配置项,对应 QuartzProperties 配置类
+spring:
+ quartz:
+ auto-startup: false # 本地开发环境,尽量不要开启 Job
+ scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
+ job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
+ wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
+ properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档
+ org:
+ quartz:
+ # Scheduler 相关配置
+ scheduler:
+ instanceName: schedulerName
+ instanceId: AUTO # 自动生成 instance ID
+ # JobStore 相关配置
+ jobStore:
+ # JobStore 实现类。可见博客:https://blog.csdn.net/weixin_42458219/article/details/122247162
+ class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
+ isClustered: true # 是集群模式
+ clusterCheckinInterval: 15000 # 集群检查频率,单位:毫秒。默认为 15000,即 15 秒
+ misfireThreshold: 60000 # misfire 阀值,单位:毫秒。
+ # 线程池相关配置
+ threadPool:
+ threadCount: 25 # 线程池大小。默认为 10 。
+ threadPriority: 5 # 线程优先级
+ class: org.quartz.simpl.SimpleThreadPool # 线程池类型
+ jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置
+ initialize-schema: NEVER # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。
+
+--- #################### 配置中心相关配置 ####################
+
+# Apollo 配置中心
+apollo:
+ bootstrap:
+ enabled: true # 设置 Apollo 在启动阶段生效
+ eagerLoad:
+ enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置
+ jdbc: # 自定义的 JDBC 配置项,用于数据库的地址
+ dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigDAOImpl
+ url: ${spring.datasource.dynamic.datasource.master.url}
+ username: ${spring.datasource.dynamic.datasource.master.username}
+ password: ${spring.datasource.dynamic.datasource.master.password}
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项
+lock4j:
+ acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
+ expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
+
+# Resilience4j 配置项
+resilience4j:
+ ratelimiter:
+ instances:
+ backendA:
+ limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50
+ limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500
+ timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s
+ register-health-indicator: true # 是否注册到健康监测
+
+--- #################### 监控相关配置 ####################
+
+# Actuator 监控端点的配置项
+management:
+ endpoints:
+ web:
+ base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
+ exposure:
+ include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+
+# Spring Boot Admin 配置项
+spring:
+ boot:
+ admin:
+ # Spring Boot Admin Client 客户端的相关配置
+ client:
+ url: http://127.0.0.1:${server.port}/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
+ instance:
+ prefer-ip: true # 注册实例时,优先使用 IP
+ # Spring Boot Admin Server 服务端的相关配置
+ context-path: /admin # 配置 Spring
+
+# 日志文件配置
+logging:
+ file:
+ name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+ level:
+ # 配置自己写的 MyBatis Mapper 打印日志
+ cn.iocoder.yudao.module.bpm.dal.mysql: debug
+ cn.iocoder.yudao.module.infra.dal.mysql: debug
+ cn.iocoder.yudao.module.pay.dal.mysql: debug
+ cn.iocoder.yudao.module.system.dal.mysql: debug
+ cn.iocoder.yudao.module.tool.dal.mysql: debug
+ cn.iocoder.yudao.module.member.dal.mysql: debug
+
+--- #################### 微信公众号相关配置 ####################
+wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+ mp:
+ # 公众号配置(必填)
+ app-id: wx041349c6f39b268b
+ secret: 5abee519483bc9f8cb37ce280e814bd0
+ # 存储配置,解决 AccessToken 的跨节点的共享
+ config-storage:
+ type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+ key-prefix: wx # Redis Key 的前缀 TODO 芋艿:解决下 Redis key 管理的配置
+ http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
+yudao:
+ captcha:
+ enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试
+ security:
+ token-header: Authorization
+ mock-enable: true
+ mock-secret: test
+ xss:
+ enable: false
+ exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
+ - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
+ - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
+ pay:
+ pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify
+ pay-return-url: http://niubi.natapp1.cc/api/pay/order/return
+ refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify
+ demo: false # 关闭演示模式
+
+justauth:
+ enabled: true
+ type:
+ DINGTALK: # 钉钉
+ client-id: dingvrnreaje3yqvzhxg
+ client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
+ ignore-check-redirect-uri: true
+ WECHAT_ENTERPRISE: # 企业微信
+ client-id: wwd411c69a39ad2e54
+ client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
+ agent-id: 1000004
+ ignore-check-redirect-uri: true
+ cache:
+ type: REDIS
+ prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+ timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
+
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application.yaml
new file mode 100644
index 000000000..a735f854f
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application.yaml
@@ -0,0 +1,146 @@
+spring:
+ main:
+ allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。
+
+ # Servlet 配置
+ servlet:
+ # 文件上传相关配置项
+ multipart:
+ max-file-size: 16MB # 单个文件大小
+ max-request-size: 32MB # 设置总上传的文件大小
+ mvc:
+ pathmatch:
+ matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类
+
+ # Jackson 配置项
+ jackson:
+ serialization:
+ write-dates-as-timestamps: true # 设置 Date 的格式,使用时间戳
+ write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401
+ write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳
+ fail-on-empty-beans: false # 允许序列化无属性的 Bean
+
+ # Cache 配置项
+ cache:
+ type: REDIS
+ redis:
+ time-to-live: 1h # 设置过期时间为 1 小时
+
+ # 工作流 Activiti 配置
+ activiti:
+ # 1. false: 默认值,activiti启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常
+ # 2. true: 启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表
+ # 3. create_drop: 启动时自动创建表,关闭时自动删除表
+ # 4. drop_create: 启动时,删除旧表,再创建新表
+ database-schema-update: true # 设置为 false,可通过 sql/activiti.sql 初始化
+ db-history-used: true # activiti7 默认 false 不生成历史信息表,需手动设置开启
+ check-process-definitions: false # 设置为 false,禁用 /resources/processes 自动部署 BPMN XML 流程
+ history-level: full # full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数
+
+# 工作流 Flowable 配置
+flowable:
+ # 1. false: 默认值,Flowable 启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常
+ # 2. true: 启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表
+ # 3. create_drop: 启动时自动创建表,关闭时自动删除表
+ # 4. drop_create: 启动时,删除旧表,再创建新表
+ database-schema-update: true # 设置为 false,可通过 https://github.com/flowable/flowable-sql 初始化
+ db-history-used: true # flowable6 默认 true 生成信息表,无需手动设置
+ check-process-definitions: false # 设置为 false,禁用 /resources/processes 自动部署 BPMN XML 流程
+ history-level: full # full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数
+
+# MyBatis Plus 的配置项
+mybatis-plus:
+ configuration:
+ map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
+ global-config:
+ db-config:
+ id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。
+# id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库
+# id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库
+# id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解
+ logic-delete-value: 1 # 逻辑已删除值(默认为 1)
+ logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
+ type-aliases-package: ${yudao.info.base-package}.dal.dataobject
+
+--- #################### RPC 远程调用相关配置 ####################
+dubbo:
+ scan:
+ base-packages: ${yudao.info.base-package}.api # 指定 Dubbo 服务实现类的扫描基准包
+ protocol:
+ name: dubbo # 协议名称
+ port: -1 # 协议端口,-1 表示自增端口,从 20880 开始
+ registry:
+ address: spring-cloud://localhost # 设置使用 Spring Cloud 注册中心
+
+--- #################### 芋道相关配置 ####################
+
+yudao:
+ info:
+ version: 1.0.0
+ base-package: cn.iocoder.yudao.module.infra
+ web:
+ admin-api:
+ prefix: /admin-api
+ controller: '**.controller.admin.**'
+ app-api:
+ prefix: /app-api
+ controller: '**.controller.app.**'
+ admin-ui:
+ url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址
+ swagger:
+ title: 管理后台
+ description: 提供管理员管理的所有功能
+ version: ${yudao.info.version}
+ base-package: ${yudao.info.base-package}
+ captcha:
+ timeout: 5m
+ width: 160
+ height: 60
+ codegen:
+ base-package: ${yudao.info.base-package}
+ db-schemas: ${spring.datasource.dynamic.datasource.master.name}
+ error-code: # 错误码相关配置项
+ constants-class-list:
+ - cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants
+ - cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants
+ - cn.iocoder.yudao.module.member.enums.ErrorCodeConstants
+ - cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants
+ - cn.iocoder.yudao.module.system.enums.ErrorCodeConstants
+ tenant: # 多租户相关配置项
+ enable: true
+ ignore-urls:
+ - /admin-api/system/tenant/get-id-by-name # 基于名字获取租户,不许带租户编号
+ - /admin-api/system/captcha/get-image # 获取图片验证码,和租户无关
+ - /admin-api/infra/file/*/get/** # 获取图片,和租户无关
+ - /admin-api/system/sms/callback/* # 短信回调接口,无法带上租户编号
+ ignore-tables:
+ - system_tenant
+ - system_tenant_package
+ - system_dict_data
+ - system_dict_type
+ - system_error_code
+ - system_menu
+ - system_sms_channel
+ - system_sms_template
+ - system_sms_log
+ - system_sensitive_word
+ - system_oauth2_client
+ - infra_codegen_column
+ - infra_codegen_table
+ - infra_test_demo
+ - infra_config
+ - infra_file_config
+ - infra_file
+ - infra_file_content
+ - infra_job
+ - infra_job_log
+ - infra_job_log
+ - infra_data_source_config
+ sms-code: # 短信验证码相关的配置项
+ expire-times: 10m
+ send-frequency: 1m
+ send-maximum-quantity-per-day: 10
+ begin-code: 9999 # 这里配置 9999 的原因是,测试方便。
+ end-code: 9999 # 这里配置 9999 的原因是,测试方便。
+
+debug: false
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/banner.txt b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/banner.txt
new file mode 100644
index 000000000..39a441d7d
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/banner.txt
@@ -0,0 +1,17 @@
+芋道源码 http://www.iocoder.cn
+Application Version: ${yudao.info.version}
+Spring Boot Version: ${spring-boot.version}
+
+.__ __. ______ .______ __ __ _______
+| \ | | / __ \ | _ \ | | | | / _____|
+| \| | | | | | | |_) | | | | | | | __
+| . ` | | | | | | _ < | | | | | | |_ |
+| |\ | | `--' | | |_) | | `--' | | |__| |
+|__| \__| \______/ |______/ \______/ \______|
+
+███╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗
+████╗ ██║██╔═══██╗ ██╔══██╗██║ ██║██╔════╝
+██╔██╗ ██║██║ ██║ ██████╔╝██║ ██║██║ ███╗
+██║╚██╗██║██║ ██║ ██╔══██╗██║ ██║██║ ██║
+██║ ╚████║╚██████╔╝ ██████╔╝╚██████╔╝╚██████╔╝
+╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/bootstrap-local.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/bootstrap-local.yaml
new file mode 100644
index 000000000..37204cde8
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/bootstrap-local.yaml
@@ -0,0 +1,23 @@
+--- #################### 注册中心相关配置 ####################
+
+spring:
+ cloud:
+ nacos:
+ server-addr: 127.0.0.1:8848
+ discovery:
+ namespace: dev # 命名空间。这里使用 dev 开发环境
+ metadata:
+ version: 1.0.0 # 服务实例的版本号,可用于灰度发布
+
+--- #################### 配置中心相关配置 ####################
+
+spring:
+ cloud:
+ nacos:
+ # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类
+ config:
+ server-addr: 127.0.0.1:8848 # Nacos 服务器地址
+ namespace: dev # 命名空间。这里使用 dev 开发环境
+ group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
+ name: # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name
+ file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/bootstrap.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/bootstrap.yaml
new file mode 100644
index 000000000..edace2391
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/bootstrap.yaml
@@ -0,0 +1,16 @@
+spring:
+ application:
+ name: infra-server
+
+ profiles:
+ active: local
+
+server:
+ port: 48082
+
+
+yudao:
+ security: # TODO 芋艿,发现一定要配置,需要找下原因
+ token-header: Authorization
+ mock-enable: true
+ mock-secret: test
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/logback-spring.xml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/logback-spring.xml
new file mode 100644
index 000000000..8c85ad493
--- /dev/null
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/logback-spring.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${PATTERN_DEFAULT}
+
+
+
+
+
+
+
+
+
+ ${PATTERN_DEFAULT}
+
+
+
+ ${LOG_FILE}
+
+
+ ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}
+
+ ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}
+
+ ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}
+
+ ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}
+
+ ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30}
+
+
+
+
+
+ 0
+
+ 256
+
+
+
+
+
+
+
+ ${PATTERN_DEFAULT}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceTest.java b/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceTest.java
deleted file mode 100644
index 2750a981a..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceTest.java
+++ /dev/null
@@ -1,252 +0,0 @@
-package cn.iocoder.yudao.module.infra.service.config;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
-import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
-import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
-import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
-import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper;
-import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum;
-import cn.iocoder.yudao.module.infra.mq.producer.config.ConfigProducer;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.context.annotation.Import;
-
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.function.Consumer;
-
-import static cn.hutool.core.util.RandomUtil.randomEle;
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
-import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
-import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
-import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-@Import(ConfigServiceImpl.class)
-public class ConfigServiceTest extends BaseDbUnitTest {
-
- @Resource
- private ConfigServiceImpl configService;
-
- @Resource
- private ConfigMapper configMapper;
- @MockBean
- private ConfigProducer configProducer;
-
- @Test
- public void testCreateConfig_success() {
- // 准备参数
- ConfigCreateReqVO reqVO = randomPojo(ConfigCreateReqVO.class);
-
- // 调用
- Long configId = configService.createConfig(reqVO);
- // 断言
- assertNotNull(configId);
- // 校验记录的属性是否正确
- ConfigDO config = configMapper.selectById(configId);
- assertPojoEquals(reqVO, config);
- Assertions.assertEquals(ConfigTypeEnum.CUSTOM.getType(), config.getType());
- // 校验调用
- verify(configProducer, times(1)).sendConfigRefreshMessage();
- }
-
- @Test
- public void testUpdateConfig_success() {
- // mock 数据
- ConfigDO dbConfig = randomConfigDO();
- configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据
- // 准备参数
- ConfigUpdateReqVO reqVO = randomPojo(ConfigUpdateReqVO.class, o -> {
- o.setId(dbConfig.getId()); // 设置更新的 ID
- });
-
- // 调用
- configService.updateConfig(reqVO);
- // 校验是否更新正确
- ConfigDO config = configMapper.selectById(reqVO.getId()); // 获取最新的
- assertPojoEquals(reqVO, config);
- // 校验调用
- verify(configProducer, times(1)).sendConfigRefreshMessage();
- }
-
- @Test
- public void testDeleteConfig_success() {
- // mock 数据
- ConfigDO dbConfig = randomConfigDO(o -> {
- o.setType(ConfigTypeEnum.CUSTOM.getType()); // 只能删除 CUSTOM 类型
- });
- configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据
- // 准备参数
- Long id = dbConfig.getId();
-
- // 调用
- configService.deleteConfig(id);
- // 校验数据不存在了
- assertNull(configMapper.selectById(id));
- // 校验调用
- verify(configProducer, times(1)).sendConfigRefreshMessage();
- }
-
- @Test
- public void testDeleteConfig_canNotDeleteSystemType() {
- // mock 数据
- ConfigDO dbConfig = randomConfigDO(o -> {
- o.setType(ConfigTypeEnum.SYSTEM.getType()); // SYSTEM 不允许删除
- });
- configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据
- // 准备参数
- Long id = dbConfig.getId();
-
- // 调用, 并断言异常
- assertServiceException(() -> configService.deleteConfig(id), CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE);
- }
-
- @Test
- public void testCheckConfigExists_success() {
- // mock 数据
- ConfigDO dbConfigDO = randomConfigDO();
- configMapper.insert(dbConfigDO);// @Sql: 先插入出一条存在的数据
-
- // 调用成功
- configService.checkConfigExists(dbConfigDO.getId());
- }
-
- @Test
- public void testCheckConfigExist_notExists() {
- assertServiceException(() -> configService.checkConfigExists(randomLongId()), CONFIG_NOT_EXISTS);
- }
-
- @Test
- public void testCheckConfigKeyUnique_success() {
- // 调用,成功
- configService.checkConfigKeyUnique(randomLongId(), randomString());
- }
-
- @Test
- public void testCheckConfigKeyUnique_keyDuplicateForCreate() {
- // 准备参数
- String key = randomString();
- // mock 数据
- configMapper.insert(randomConfigDO(o -> o.setConfigKey(key)));
-
- // 调用,校验异常
- assertServiceException(() -> configService.checkConfigKeyUnique(null, key),
- CONFIG_KEY_DUPLICATE);
- }
-
- @Test
- public void testCheckConfigKeyUnique_keyDuplicateForUpdate() {
- // 准备参数
- Long id = randomLongId();
- String key = randomString();
- // mock 数据
- configMapper.insert(randomConfigDO(o -> o.setConfigKey(key)));
-
- // 调用,校验异常
- assertServiceException(() -> configService.checkConfigKeyUnique(id, key),
- CONFIG_KEY_DUPLICATE);
- }
-
- @Test
- public void testGetConfigPage() {
- // mock 数据
- ConfigDO dbConfig = randomConfigDO(o -> { // 等会查询到
- o.setName("芋艿");
- o.setConfigKey("yunai");
- o.setType(ConfigTypeEnum.SYSTEM.getType());
- o.setCreateTime(buildTime(2021, 2, 1));
- });
- configMapper.insert(dbConfig);
- // 测试 name 不匹配
- configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setName("土豆")));
- // 测试 key 不匹配
- configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setConfigKey("tudou")));
- // 测试 type 不匹配
- configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setType(ConfigTypeEnum.CUSTOM.getType())));
- // 测试 createTime 不匹配
- configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1))));
- // 准备参数
- ConfigPageReqVO reqVO = new ConfigPageReqVO();
- reqVO.setName("艿");
- reqVO.setKey("nai");
- reqVO.setType(ConfigTypeEnum.SYSTEM.getType());
- reqVO.setBeginTime(buildTime(2021, 1, 15));
- reqVO.setEndTime(buildTime(2021, 2, 15));
-
- // 调用
- PageResult pageResult = configService.getConfigPage(reqVO);
- // 断言
- assertEquals(1, pageResult.getTotal());
- assertEquals(1, pageResult.getList().size());
- assertPojoEquals(dbConfig, pageResult.getList().get(0));
- }
-
- @Test
- public void testGetConfigList() {
- // mock 数据
- ConfigDO dbConfig = randomConfigDO(o -> { // 等会查询到
- o.setName("芋艿");
- o.setConfigKey("yunai");
- o.setType(ConfigTypeEnum.SYSTEM.getType());
- o.setCreateTime(buildTime(2021, 2, 1));
- });
- configMapper.insert(dbConfig);
- // 测试 name 不匹配
- configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setName("土豆")));
- // 测试 key 不匹配
- configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setConfigKey("tudou")));
- // 测试 type 不匹配
- configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setType(ConfigTypeEnum.CUSTOM.getType())));
- // 测试 createTime 不匹配
- configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1))));
- // 准备参数
- ConfigExportReqVO reqVO = new ConfigExportReqVO();
- reqVO.setName("艿");
- reqVO.setKey("nai");
- reqVO.setType(ConfigTypeEnum.SYSTEM.getType());
- reqVO.setBeginTime(buildTime(2021, 1, 15));
- reqVO.setEndTime(buildTime(2021, 2, 15));
-
- // 调用
- List list = configService.getConfigList(reqVO);
- // 断言
- assertEquals(1, list.size());
- assertPojoEquals(dbConfig, list.get(0));
- }
-
- @Test
- public void testGetConfigByKey() {
- // mock 数据
- ConfigDO dbConfig = randomConfigDO();
- configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据
- // 准备参数
- String key = dbConfig.getConfigKey();
-
- // 调用
- ConfigDO config = configService.getConfigByKey(key);
- // 断言
- assertNotNull(config);
- assertPojoEquals(dbConfig, config);
- }
-
- // ========== 随机对象 ==========
-
- @SafeVarargs
- private static ConfigDO randomConfigDO(Consumer... consumers) {
- Consumer consumer = (o) -> {
- o.setType(randomEle(ConfigTypeEnum.values()).getType()); // 保证 key 的范围
- };
- return RandomUtils.randomPojo(ConfigDO.class, ArrayUtils.append(consumer, consumers));
- }
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceTest.java b/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceTest.java
deleted file mode 100644
index 2b7fc0528..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package cn.iocoder.yudao.module.infra.service.job;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
-import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobLogDO;
-import cn.iocoder.yudao.module.infra.dal.mysql.job.JobLogMapper;
-import cn.iocoder.yudao.module.infra.enums.job.JobLogStatusEnum;
-import org.junit.jupiter.api.Test;
-import org.springframework.context.annotation.Import;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-
-import static cn.hutool.core.util.RandomUtil.randomEle;
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
-import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-@Import(JobLogServiceImpl.class)
-public class JobLogServiceTest extends BaseDbUnitTest {
-
- @Resource
- private JobLogServiceImpl jobLogService;
- @Resource
- private JobLogMapper jobLogMapper;
-
- @Test
- public void testCreateJobLog_success() {
- // 准备参数
- JobLogDO reqVO = randomPojo(JobLogDO.class, o -> {
- o.setExecuteIndex(1);
- });
- // 调用
- Long jobLogId = jobLogService.createJobLog(reqVO.getJobId(), reqVO.getBeginTime(), reqVO.getHandlerName(), reqVO.getHandlerParam(), reqVO.getExecuteIndex());
- // 断言
- assertNotNull(jobLogId);
- // 校验记录的属性是否正确
- JobLogDO job = jobLogMapper.selectById(jobLogId);
- assertEquals(JobLogStatusEnum.RUNNING.getStatus(), job.getStatus());
- }
-
- @Test
- public void testUpdateJobLogResultAsync_success() {
- // 准备参数
- JobLogDO reqVO = randomPojo(JobLogDO.class, o -> {
- o.setExecuteIndex(1);
- });
- JobLogDO log = JobLogDO.builder().jobId(reqVO.getJobId()).handlerName(reqVO.getHandlerName()).handlerParam(reqVO.getHandlerParam()).executeIndex(reqVO.getExecuteIndex())
- .beginTime(reqVO.getBeginTime()).status(JobLogStatusEnum.RUNNING.getStatus()).build();
- jobLogMapper.insert(log);
- // 调用
- jobLogService.updateJobLogResultAsync(log.getId(), reqVO.getBeginTime(), reqVO.getDuration(), true,reqVO.getResult());
- // 校验记录的属性是否正确
- JobLogDO job = jobLogMapper.selectById(log.getId());
- assertEquals(JobLogStatusEnum.SUCCESS.getStatus(), job.getStatus());
-
- // 调用
- jobLogService.updateJobLogResultAsync(log.getId(), reqVO.getBeginTime(), reqVO.getDuration(), false,reqVO.getResult());
- // 校验记录的属性是否正确
- JobLogDO job2 = jobLogMapper.selectById(log.getId());
- assertEquals(JobLogStatusEnum.FAILURE.getStatus(), job2.getStatus());
- }
-
- @Test
- public void testGetJobLogListByIds_success() {
- // mock 数据
- JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> {
- o.setExecuteIndex(1);
- o.setStatus(randomEle(JobLogStatusEnum.values()).getStatus()); // 保证 status 的范围
- });
- JobLogDO cloneJobLog = ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString()));
- jobLogMapper.insert(dbJobLog);
- // 测试 handlerName 不匹配
- jobLogMapper.insert(cloneJobLog);
- // 准备参数
- ArrayList ids = new ArrayList<>();
- ids.add(dbJobLog.getId());
- ids.add(cloneJobLog.getId());
- // 调用
- List list = jobLogService.getJobLogList(ids);
- // 断言
- assertEquals(2, list.size());
- assertPojoEquals(dbJobLog, list.get(0));
- }
-
- @Test
- public void testGetJobPage_success() {
- // mock 数据
- JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> {
- o.setExecuteIndex(1);
- o.setHandlerName("handlerName 单元测试");
- o.setStatus(JobLogStatusEnum.SUCCESS.getStatus());
- o.setBeginTime(buildTime(2021, 1, 8));
- o.setEndTime(buildTime(2021, 1, 8));
- });
- jobLogMapper.insert(dbJobLog);
- // 测试 jobId 不匹配
- jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setJobId(randomLongId())));
- // 测试 handlerName 不匹配
- jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString())));
- // 测试 beginTime 不匹配
- jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setBeginTime(buildTime(2021, 1, 7))));
- // 测试 endTime 不匹配
- jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setEndTime(buildTime(2021, 1, 9))));
- // 测试 status 不匹配
- jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setStatus(JobLogStatusEnum.FAILURE.getStatus())));
- // 准备参数
- JobLogPageReqVO reqVo = new JobLogPageReqVO();
- reqVo.setJobId(dbJobLog.getJobId());
- reqVo.setHandlerName("单元");
- reqVo.setBeginTime(dbJobLog.getBeginTime());
- reqVo.setEndTime(dbJobLog.getEndTime());
- reqVo.setStatus(JobLogStatusEnum.SUCCESS.getStatus());
- // 调用
- PageResult pageResult = jobLogService.getJobLogPage(reqVo);
- // 断言
- assertEquals(1, pageResult.getTotal());
- assertEquals(1, pageResult.getList().size());
- assertPojoEquals(dbJobLog, pageResult.getList().get(0));
- }
-
- @Test
- public void testGetJobListForExport_success() {
- // mock 数据
- JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> {
- o.setExecuteIndex(1);
- o.setHandlerName("handlerName 单元测试");
- o.setStatus(JobLogStatusEnum.SUCCESS.getStatus());
- o.setBeginTime(buildTime(2021, 1, 8));
- o.setEndTime(buildTime(2021, 1, 8));
- });
- jobLogMapper.insert(dbJobLog);
- // 测试 jobId 不匹配
- jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setJobId(randomLongId())));
- // 测试 handlerName 不匹配
- jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString())));
- // 测试 beginTime 不匹配
- jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setBeginTime(buildTime(2021, 1, 7))));
- // 测试 endTime 不匹配
- jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setEndTime(buildTime(2021, 1, 9))));
- // 测试 status 不匹配
- jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setStatus(JobLogStatusEnum.FAILURE.getStatus())));
- // 准备参数
- JobLogExportReqVO reqVo = new JobLogExportReqVO();
- reqVo.setJobId(dbJobLog.getJobId());
- reqVo.setHandlerName("单元");
- reqVo.setBeginTime(dbJobLog.getBeginTime());
- reqVo.setEndTime(dbJobLog.getEndTime());
- reqVo.setStatus(JobLogStatusEnum.SUCCESS.getStatus());
- // 调用
- List list = jobLogService.getJobLogList(reqVo);
- // 断言
- assertEquals(1, list.size());
- assertPojoEquals(dbJobLog, list.get(0));
- }
-
-}
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceTest.java b/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceTest.java
deleted file mode 100644
index 1cfcae998..000000000
--- a/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceTest.java
+++ /dev/null
@@ -1,294 +0,0 @@
-package cn.iocoder.yudao.module.infra.service.job;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
-import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager;
-import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobCreateReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExportReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO;
-import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobUpdateReqVO;
-import cn.iocoder.yudao.module.infra.convert.job.JobConvert;
-import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO;
-import cn.iocoder.yudao.module.infra.dal.mysql.job.JobMapper;
-import cn.iocoder.yudao.module.infra.enums.job.JobStatusEnum;
-import org.junit.jupiter.api.Test;
-import org.quartz.SchedulerException;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.context.annotation.Import;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-
-import static cn.hutool.core.util.RandomUtil.randomEle;
-import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
-import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString;
-import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-@Import(JobServiceImpl.class)
-public class JobServiceTest extends BaseDbUnitTest {
-
- @Resource
- private JobServiceImpl jobService;
- @Resource
- private JobMapper jobMapper;
- @MockBean
- private SchedulerManager schedulerManager;
-
- @Test
- public void testCreateJob_cronExpressionValid() {
- // 准备参数。Cron 表达式为 String 类型,默认随机字符串。
- JobCreateReqVO reqVO = randomPojo(JobCreateReqVO.class);
- // 调用,并断言异常
- assertServiceException(() -> jobService.createJob(reqVO), JOB_CRON_EXPRESSION_VALID);
- }
-
- @Test
- public void testCreateJob_jobHandlerExists() throws SchedulerException {
- // 准备参数 指定 Cron 表达式
- JobCreateReqVO reqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
- // 调用
- jobService.createJob(reqVO);
- // 调用,并断言异常
- assertServiceException(() -> jobService.createJob(reqVO), JOB_HANDLER_EXISTS);
- }
-
- @Test
- public void testCreateJob_success() throws SchedulerException {
- // 准备参数 指定 Cron 表达式
- JobCreateReqVO reqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
- // 调用
- Long jobId = jobService.createJob(reqVO);
- // 断言
- assertNotNull(jobId);
- // 校验记录的属性是否正确
- JobDO job = jobMapper.selectById(jobId);
- assertPojoEquals(reqVO, job);
- assertEquals(JobStatusEnum.NORMAL.getStatus(), job.getStatus());
- // 校验调用
- verify(schedulerManager, times(1)).addJob(eq(job.getId()), eq(job.getHandlerName()), eq(job.getHandlerParam()), eq(job.getCronExpression()),
- eq(reqVO.getRetryCount()), eq(reqVO.getRetryInterval()));
- }
-
- @Test
- public void testUpdateJob_jobNotExists(){
- // 准备参数
- JobUpdateReqVO reqVO = randomPojo(JobUpdateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
- // 调用,并断言异常
- assertServiceException(() -> jobService.updateJob(reqVO), JOB_NOT_EXISTS);
- }
-
- @Test
- public void testUpdateJob_onlyNormalStatus(){
- // mock 数据
- JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
- JobDO job = JobConvert.INSTANCE.convert(createReqVO);
- job.setStatus(JobStatusEnum.INIT.getStatus());
- fillJobMonitorTimeoutEmpty(job);
- jobMapper.insert(job);
- // 准备参数
- JobUpdateReqVO updateReqVO = randomPojo(JobUpdateReqVO.class, o -> {
- o.setId(job.getId());
- o.setName(createReqVO.getName());
- o.setCronExpression(createReqVO.getCronExpression());
- });
- // 调用,并断言异常
- assertServiceException(() -> jobService.updateJob(updateReqVO), JOB_UPDATE_ONLY_NORMAL_STATUS);
- }
-
- @Test
- public void testUpdateJob_success() throws SchedulerException {
- // mock 数据
- JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
- JobDO job = JobConvert.INSTANCE.convert(createReqVO);
- job.setStatus(JobStatusEnum.NORMAL.getStatus());
- fillJobMonitorTimeoutEmpty(job);
- jobMapper.insert(job);
- // 准备参数
- JobUpdateReqVO updateReqVO = randomPojo(JobUpdateReqVO.class, o -> {
- o.setId(job.getId());
- o.setName(createReqVO.getName());
- o.setCronExpression(createReqVO.getCronExpression());
- });
- // 调用
- jobService.updateJob(updateReqVO);
- // 校验记录的属性是否正确
- JobDO updateJob = jobMapper.selectById(updateReqVO.getId());
- assertPojoEquals(updateReqVO, updateJob);
- // 校验调用
- verify(schedulerManager, times(1)).updateJob(eq(job.getHandlerName()), eq(updateReqVO.getHandlerParam()), eq(updateReqVO.getCronExpression()),
- eq(updateReqVO.getRetryCount()), eq(updateReqVO.getRetryInterval()));
- }
-
- @Test
- public void testUpdateJobStatus_changeStatusInvalid() {
- // 调用,并断言异常
- assertServiceException(() -> jobService.updateJobStatus(1L, JobStatusEnum.INIT.getStatus()), JOB_CHANGE_STATUS_INVALID);
- }
-
- @Test
- public void testUpdateJobStatus_changeStatusEquals() {
- // mock 数据
- JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
- JobDO job = JobConvert.INSTANCE.convert(createReqVO);
- job.setStatus(JobStatusEnum.NORMAL.getStatus());
- fillJobMonitorTimeoutEmpty(job);
- jobMapper.insert(job);
- // 调用,并断言异常
- assertServiceException(() -> jobService.updateJobStatus(job.getId(), job.getStatus()), JOB_CHANGE_STATUS_EQUALS);
- }
-
- @Test
- public void testUpdateJobStatus_NormalToStop_success() throws SchedulerException {
- // mock 数据
- JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
- JobDO job = JobConvert.INSTANCE.convert(createReqVO);
- job.setStatus(JobStatusEnum.NORMAL.getStatus());
- fillJobMonitorTimeoutEmpty(job);
- jobMapper.insert(job);
- // 调用
- jobService.updateJobStatus(job.getId(), JobStatusEnum.STOP.getStatus());
- // 校验记录的属性是否正确
- JobDO updateJob = jobMapper.selectById(job.getId());
- assertEquals(JobStatusEnum.STOP.getStatus(), updateJob.getStatus());
- // 校验调用
- verify(schedulerManager, times(1)).pauseJob(eq(job.getHandlerName()));
- }
-
- @Test
- public void testUpdateJobStatus_StopToNormal_success() throws SchedulerException {
- // mock 数据
- JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
- JobDO job = JobConvert.INSTANCE.convert(createReqVO);
- job.setStatus(JobStatusEnum.STOP.getStatus());
- fillJobMonitorTimeoutEmpty(job);
- jobMapper.insert(job);
- // 调用
- jobService.updateJobStatus(job.getId(), JobStatusEnum.NORMAL.getStatus());
- // 校验记录的属性是否正确
- JobDO updateJob = jobMapper.selectById(job.getId());
- assertEquals(JobStatusEnum.NORMAL.getStatus(), updateJob.getStatus());
- // 校验调用
- verify(schedulerManager, times(1)).resumeJob(eq(job.getHandlerName()));
- }
-
- @Test
- public void testTriggerJob_success() throws SchedulerException {
- // mock 数据
- JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
- JobDO job = JobConvert.INSTANCE.convert(createReqVO);
- job.setStatus(JobStatusEnum.NORMAL.getStatus());
- fillJobMonitorTimeoutEmpty(job);
- jobMapper.insert(job);
- // 调用
- jobService.triggerJob(job.getId());
- // 校验调用
- verify(schedulerManager, times(1)).triggerJob(eq(job.getId()), eq(job.getHandlerName()), eq(job.getHandlerParam()));
- }
-
- @Test
- public void testDeleteJob_success() throws SchedulerException {
- // mock 数据
- JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
- JobDO job = JobConvert.INSTANCE.convert(createReqVO);
- job.setStatus(JobStatusEnum.NORMAL.getStatus());
- fillJobMonitorTimeoutEmpty(job);
- jobMapper.insert(job);
- // 调用 UPDATE inf_job SET deleted=1 WHERE id=? AND deleted=0
- jobService.deleteJob(job.getId());
- // 校验数据不存在了 WHERE id=? AND deleted=0 查询为空正常
- assertNull(jobMapper.selectById(job.getId()));
- // 校验调用
- verify(schedulerManager, times(1)).deleteJob(eq(job.getHandlerName()));
- }
-
- @Test
- public void testGetJobListByIds_success() {
- // mock 数据
- JobDO dbJob = randomPojo(JobDO.class, o -> {
- o.setStatus(randomEle(JobStatusEnum.values()).getStatus()); // 保证 status 的范围
- });
- JobDO cloneJob = ObjectUtils.cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString()));
- jobMapper.insert(dbJob);
- // 测试 handlerName 不匹配
- jobMapper.insert(cloneJob);
- // 准备参数
- ArrayList ids = new ArrayList<>();
- ids.add(dbJob.getId());
- ids.add(cloneJob.getId());
- // 调用
- List list = jobService.getJobList(ids);
- // 断言
- assertEquals(2, list.size());
- assertPojoEquals(dbJob, list.get(0));
- }
-
- @Test
- public void testGetJobPage_success() {
- // mock 数据
- JobDO dbJob = randomPojo(JobDO.class, o -> {
- o.setName("定时任务测试");
- o.setHandlerName("handlerName 单元测试");
- o.setStatus(JobStatusEnum.INIT.getStatus());
- });
- jobMapper.insert(dbJob);
- // 测试 name 不匹配
- jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setName("土豆")));
- // 测试 status 不匹配
- jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus())));
- // 测试 handlerName 不匹配
- jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString())));
- // 准备参数
- JobPageReqVO reqVo = new JobPageReqVO();
- reqVo.setName("定时");
- reqVo.setStatus(JobStatusEnum.INIT.getStatus());
- reqVo.setHandlerName("单元");
- // 调用
- PageResult pageResult = jobService.getJobPage(reqVo);
- // 断言
- assertEquals(1, pageResult.getTotal());
- assertEquals(1, pageResult.getList().size());
- assertPojoEquals(dbJob, pageResult.getList().get(0));
- }
-
- @Test
- public void testGetJobListForExport_success() {
- // mock 数据
- JobDO dbJob = randomPojo(JobDO.class, o -> {
- o.setName("定时任务测试");
- o.setHandlerName("handlerName 单元测试");
- o.setStatus(JobStatusEnum.INIT.getStatus());
- });
- jobMapper.insert(dbJob);
- // 测试 name 不匹配
- jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setName("土豆")));
- // 测试 status 不匹配
- jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus())));
- // 测试 handlerName 不匹配
- jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString())));
- // 准备参数
- JobExportReqVO reqVo = new JobExportReqVO();
- reqVo.setName("定时");
- reqVo.setStatus(JobStatusEnum.INIT.getStatus());
- reqVo.setHandlerName("单元");
- // 调用
- List list = jobService.getJobList(reqVo);
- // 断言
- assertEquals(1, list.size());
- assertPojoEquals(dbJob, list.get(0));
- }
-
- private static void fillJobMonitorTimeoutEmpty(JobDO job) {
- if (job.getMonitorTimeout() == null) {
- job.setMonitorTimeout(0);
- }
- }
-
-}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml
index 53cd3f097..33dee94b9 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml
+++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml
@@ -1,6 +1,3 @@
-server:
- port: 48081
-
--- #################### 数据库相关配置 ####################
spring:
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/bootstrap.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/bootstrap.yaml
index 84f1e20f2..ffb5a84d5 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/resources/bootstrap.yaml
+++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/bootstrap.yaml
@@ -4,3 +4,6 @@ spring:
profiles:
active: local
+
+server:
+ port: 48081