test1(String key, String value){
- return AjaxResult.success("操作成功", value);
- }
+ /**
+ * 测试 @Cacheable
+ *
+ * 表示这个方法有了缓存的功能,方法的返回值会被缓存下来
+ * 下一次调用该方法前,会去检查是否缓存中已经有值
+ * 如果有就直接返回,不调用方法
+ * 如果没有,就调用方法,然后把结果缓存起来
+ * 这个注解「一般用在查询方法上」
+ *
+ * 重点说明: 缓存注解严谨与其他筛选数据功能一起使用
+ * 例如: 数据权限注解 会造成 缓存击穿 与 数据不一致问题
+ *
+ * cacheNames 为配置文件内 groupId
+ */
+ @ApiOperation("测试 @Cacheable")
+ @Cacheable(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null")
+ @GetMapping("/test1")
+ public AjaxResult test1(String key, String value) {
+ return AjaxResult.success("操作成功", value);
+ }
- /**
- * 测试 @CachePut
- *
- * 加了@CachePut注解的方法,会把方法的返回值put到缓存里面缓存起来,供其它地方使用
- * 它「通常用在新增方法上」
- *
- * cacheNames 为 配置文件内 groupId
- */
- @ApiOperation("测试 @CachePut")
- @CachePut(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null")
- @GetMapping("/test2")
- public AjaxResult test2(String key, String value){
- return AjaxResult.success("操作成功", value);
- }
+ /**
+ * 测试 @CachePut
+ *
+ * 加了@CachePut注解的方法,会把方法的返回值put到缓存里面缓存起来,供其它地方使用
+ * 它「通常用在新增方法上」
+ *
+ * cacheNames 为 配置文件内 groupId
+ */
+ @ApiOperation("测试 @CachePut")
+ @CachePut(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null")
+ @GetMapping("/test2")
+ public AjaxResult test2(String key, String value) {
+ return AjaxResult.success("操作成功", value);
+ }
- /**
- * 测试 @CacheEvict
- *
- * 使用了CacheEvict注解的方法,会清空指定缓存
- * 「一般用在更新或者删除的方法上」
- *
- * cacheNames 为 配置文件内 groupId
- */
- @ApiOperation("测试 @CacheEvict")
- @CacheEvict(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null")
- @GetMapping("/test3")
- public AjaxResult test3(String key, String value){
- return AjaxResult.success("操作成功", value);
- }
+ /**
+ * 测试 @CacheEvict
+ *
+ * 使用了CacheEvict注解的方法,会清空指定缓存
+ * 「一般用在更新或者删除的方法上」
+ *
+ * cacheNames 为 配置文件内 groupId
+ */
+ @ApiOperation("测试 @CacheEvict")
+ @CacheEvict(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null")
+ @GetMapping("/test3")
+ public AjaxResult test3(String key, String value) {
+ return AjaxResult.success("操作成功", value);
+ }
- /**
- * 测试设置过期时间
- * 手动设置过期时间10秒
- * 11秒后获取 判断是否相等
- */
- @ApiOperation("测试设置过期时间")
- @GetMapping("/test6")
- public AjaxResult test6(String key, String value){
- RedisUtils.setCacheObject(key, value);
- boolean flag = RedisUtils.expire(key, 10, TimeUnit.SECONDS);
- System.out.println("***********" + flag);
- try {
- Thread.sleep(11 * 1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- Object obj = RedisUtils.getCacheObject(key);
- return AjaxResult.success("操作成功", value.equals(obj));
- }
+ /**
+ * 测试设置过期时间
+ * 手动设置过期时间10秒
+ * 11秒后获取 判断是否相等
+ */
+ @ApiOperation("测试设置过期时间")
+ @GetMapping("/test6")
+ public AjaxResult test6(String key, String value) {
+ RedisUtils.setCacheObject(key, value);
+ boolean flag = RedisUtils.expire(key, 10, TimeUnit.SECONDS);
+ System.out.println("***********" + flag);
+ try {
+ Thread.sleep(11 * 1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ Object obj = RedisUtils.getCacheObject(key);
+ return AjaxResult.success("操作成功", value.equals(obj));
+ }
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java
index a72024663..94ad3c3a3 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java
@@ -9,7 +9,6 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -28,59 +27,50 @@ import java.time.LocalTime;
@RequestMapping("/demo/redisLock")
public class RedisLockController {
- @Autowired
- private LockTemplate lockTemplate;
+ @Autowired
+ private LockTemplate lockTemplate;
- /**
- * 测试lock4j 注解
- */
- @ApiOperation("测试lock4j 注解")
- @Lock4j(keys = {"#key"})
- @GetMapping("/testLock4j")
- public AjaxResult testLock4j(String key,String value){
- System.out.println("start:"+key+",time:"+ LocalTime.now().toString());
- try {
- Thread.sleep(10000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println("end :"+key+",time:"+LocalTime.now().toString());
- return AjaxResult.success("操作成功",value);
- }
+ /**
+ * 测试lock4j 注解
+ */
+ @ApiOperation("测试lock4j 注解")
+ @Lock4j(keys = {"#key"})
+ @GetMapping("/testLock4j")
+ public AjaxResult testLock4j(String key, String value) {
+ System.out.println("start:" + key + ",time:" + LocalTime.now().toString());
+ try {
+ Thread.sleep(10000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ System.out.println("end :" + key + ",time:" + LocalTime.now().toString());
+ return AjaxResult.success("操作成功", value);
+ }
- /**
- * 测试lock4j 工具
- */
- @ApiOperation("测试lock4j 工具")
- @GetMapping("/testLock4jLockTemaplate")
- public AjaxResult testLock4jLockTemaplate(String key,String value){
- final LockInfo lockInfo = lockTemplate.lock(key, 30000L, 5000L, RedissonLockExecutor.class);
- if (null == lockInfo) {
- throw new RuntimeException("业务处理中,请稍后再试");
- }
- // 获取锁成功,处理业务
- try {
- try {
- Thread.sleep(8000);
- } catch (InterruptedException e) {
- //
- }
- System.out.println("执行简单方法1 , 当前线程:" + Thread.currentThread().getName());
- } finally {
- //释放锁
- lockTemplate.releaseLock(lockInfo);
- }
- //结束
- return AjaxResult.success("操作成功",value);
- }
+ /**
+ * 测试lock4j 工具
+ */
+ @ApiOperation("测试lock4j 工具")
+ @GetMapping("/testLock4jLockTemaplate")
+ public AjaxResult testLock4jLockTemaplate(String key, String value) {
+ final LockInfo lockInfo = lockTemplate.lock(key, 30000L, 5000L, RedissonLockExecutor.class);
+ if (null == lockInfo) {
+ throw new RuntimeException("业务处理中,请稍后再试");
+ }
+ // 获取锁成功,处理业务
+ try {
+ try {
+ Thread.sleep(8000);
+ } catch (InterruptedException e) {
+ //
+ }
+ System.out.println("执行简单方法1 , 当前线程:" + Thread.currentThread().getName());
+ } finally {
+ //释放锁
+ lockTemplate.releaseLock(lockInfo);
+ }
+ //结束
+ return AjaxResult.success("操作成功", value);
+ }
- /**
- * 测试spring-cache注解
- */
- @ApiOperation("测试spring-cache注解")
- @Cacheable(value = "test", key = "#key")
- @GetMapping("/testCache")
- public AjaxResult testCache(String key) {
- return AjaxResult.success("操作成功", key);
- }
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java
index 810b307dc..619a69028 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java
@@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.RedisUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -21,22 +22,22 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/demo/redis/pubsub")
public class RedisPubSubController {
- @ApiOperation("发布消息")
- @GetMapping("/pub")
- public AjaxResult pub(String key, String value){
- RedisUtils.publish(key, value, consumer -> {
- System.out.println("发布通道 => " + key + ", 发送值 => " + value);
- });
- return AjaxResult.success("操作成功");
- }
+ @ApiOperation("发布消息")
+ @GetMapping("/pub")
+ public AjaxResult pub(@ApiParam("通道Key") String key, @ApiParam("发送内容") String value) {
+ RedisUtils.publish(key, value, consumer -> {
+ System.out.println("发布通道 => " + key + ", 发送值 => " + value);
+ });
+ return AjaxResult.success("操作成功");
+ }
- @ApiOperation("订阅消息")
- @GetMapping("/sub")
- public AjaxResult sub(String key){
- RedisUtils.subscribe(key, String.class, msg -> {
- System.out.println("订阅通道 => " + key + ", 接收值 => " + msg);
- });
- return AjaxResult.success("操作成功");
- }
+ @ApiOperation("订阅消息")
+ @GetMapping("/sub")
+ public AjaxResult sub(@ApiParam("通道Key") String key) {
+ RedisUtils.subscribe(key, String.class, msg -> {
+ System.out.println("订阅通道 => " + key + ", 接收值 => " + msg);
+ });
+ return AjaxResult.success("操作成功");
+ }
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisRateLimiterController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisRateLimiterController.java
index 33d75093b..1eeab6114 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisRateLimiterController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisRateLimiterController.java
@@ -22,37 +22,37 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/demo/rateLimiter")
public class RedisRateLimiterController {
- /**
- * 测试全局限流
- * 全局影响
- */
- @ApiOperation("测试全局限流")
- @RateLimiter(count = 2, time = 10)
- @GetMapping("/test")
- public AjaxResult test(String value){
- return AjaxResult.success("操作成功",value);
- }
+ /**
+ * 测试全局限流
+ * 全局影响
+ */
+ @ApiOperation("测试全局限流")
+ @RateLimiter(count = 2, time = 10)
+ @GetMapping("/test")
+ public AjaxResult test(String value) {
+ return AjaxResult.success("操作成功", value);
+ }
- /**
- * 测试请求IP限流
- * 同一IP请求受影响
- */
- @ApiOperation("测试请求IP限流")
- @RateLimiter(count = 2, time = 10, limitType = LimitType.IP)
- @GetMapping("/testip")
- public AjaxResult testip(String value){
- return AjaxResult.success("操作成功",value);
- }
+ /**
+ * 测试请求IP限流
+ * 同一IP请求受影响
+ */
+ @ApiOperation("测试请求IP限流")
+ @RateLimiter(count = 2, time = 10, limitType = LimitType.IP)
+ @GetMapping("/testip")
+ public AjaxResult testip(String value) {
+ return AjaxResult.success("操作成功", value);
+ }
- /**
- * 测试集群实例限流
- * 启动两个后端服务互不影响
- */
- @ApiOperation("测试集群实例限流")
- @RateLimiter(count = 2, time = 10, limitType = LimitType.CLUSTER)
- @GetMapping("/testcluster")
- public AjaxResult testcluster(String value){
- return AjaxResult.success("操作成功",value);
- }
+ /**
+ * 测试集群实例限流
+ * 启动两个后端服务互不影响
+ */
+ @ApiOperation("测试集群实例限流")
+ @RateLimiter(count = 2, time = 10, limitType = LimitType.CLUSTER)
+ @GetMapping("/testcluster")
+ public AjaxResult testcluster(String value) {
+ return AjaxResult.success("操作成功", value);
+ }
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/Swagger3DemoController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/Swagger3DemoController.java
index a8efb64e4..6b73d64a8 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/Swagger3DemoController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/Swagger3DemoController.java
@@ -21,18 +21,18 @@ import org.springframework.web.multipart.MultipartFile;
@RequestMapping("/swagger/demo")
public class Swagger3DemoController {
- /**
- * 上传请求
- * 必须使用 @RequestPart 注解标注为文件
- * dataType 必须为 "java.io.File"
- */
- @ApiOperation(value = "通用上传请求")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "file", value = "文件", dataType = "java.io.File", required = true),
- })
- @PostMapping(value = "/upload")
- public AjaxResult upload(@RequestPart("file") MultipartFile file) {
- return AjaxResult.success("操作成功", file.getOriginalFilename());
- }
+ /**
+ * 上传请求
+ * 必须使用 @RequestPart 注解标注为文件
+ * dataType 必须为 "java.io.File"
+ */
+ @ApiOperation(value = "通用上传请求")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "file", value = "文件", dataType = "java.io.File", required = true),
+ })
+ @PostMapping(value = "/upload")
+ public AjaxResult upload(@RequestPart("file") MultipartFile file) {
+ return AjaxResult.success("操作成功", file.getOriginalFilename());
+ }
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java
index ef117a11c..d6e691dbb 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java
@@ -34,48 +34,48 @@ public class TestBatchController extends BaseController {
/**
* 新增批量方法 可完美替代 saveBatch 秒级插入上万数据 (对mysql负荷较大)
*/
- @ApiOperation(value = "新增批量方法")
+ @ApiOperation(value = "新增批量方法")
@PostMapping("/add")
// @DataSource(DataSourceType.SLAVE)
public AjaxResult add() {
- List list = new ArrayList<>();
- for (int i = 0; i < 1000; i++) {
- list.add(new TestDemo().setOrderNum(-1L).setTestKey("批量新增").setValue("测试新增"));
- }
+ List list = new ArrayList<>();
+ for (int i = 0; i < 1000; i++) {
+ list.add(new TestDemo().setOrderNum(-1L).setTestKey("批量新增").setValue("测试新增"));
+ }
return toAjax(iTestDemoService.saveAll(list) ? 1 : 0);
}
- /**
- * 新增或更新 可完美替代 saveOrUpdateBatch 高性能
- */
- @ApiOperation(value = "新增或更新批量方法")
- @PostMapping("/addOrUpdate")
+ /**
+ * 新增或更新 可完美替代 saveOrUpdateBatch 高性能
+ */
+ @ApiOperation(value = "新增或更新批量方法")
+ @PostMapping("/addOrUpdate")
// @DataSource(DataSourceType.SLAVE)
- public AjaxResult addOrUpdate() {
- List list = new ArrayList<>();
- for (int i = 0; i < 1000; i++) {
- list.add(new TestDemo().setOrderNum(-1L).setTestKey("批量新增").setValue("测试新增"));
- }
- iTestDemoService.saveAll(list);
- for (int i = 0; i < list.size(); i++) {
- TestDemo testDemo = list.get(i);
- testDemo.setTestKey("批量新增或修改").setValue("批量新增或修改");
- if (i % 2 == 0) {
- testDemo.setId(null);
- }
- }
- return toAjax(iTestDemoService.saveOrUpdateAll(list) ? 1 : 0);
- }
+ public AjaxResult addOrUpdate() {
+ List list = new ArrayList<>();
+ for (int i = 0; i < 1000; i++) {
+ list.add(new TestDemo().setOrderNum(-1L).setTestKey("批量新增").setValue("测试新增"));
+ }
+ iTestDemoService.saveAll(list);
+ for (int i = 0; i < list.size(); i++) {
+ TestDemo testDemo = list.get(i);
+ testDemo.setTestKey("批量新增或修改").setValue("批量新增或修改");
+ if (i % 2 == 0) {
+ testDemo.setId(null);
+ }
+ }
+ return toAjax(iTestDemoService.saveOrUpdateAll(list) ? 1 : 0);
+ }
/**
* 删除批量方法
*/
- @ApiOperation(value = "删除批量方法")
+ @ApiOperation(value = "删除批量方法")
@DeleteMapping()
// @DataSource(DataSourceType.SLAVE)
public AjaxResult remove() {
return toAjax(iTestDemoService.remove(new LambdaQueryWrapper()
- .eq(TestDemo::getOrderNum, -1L)) ? 1 : 0);
+ .eq(TestDemo::getOrderNum, -1L)) ? 1 : 0);
}
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java
index a137a3d1e..7d558aede 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java
@@ -1,6 +1,7 @@
package com.ruoyi.demo.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
@@ -10,16 +11,20 @@ import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.core.validate.QueryGroup;
import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ValidatorUtils;
+import com.ruoyi.common.excel.ExcelResult;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.demo.domain.TestDemo;
import com.ruoyi.demo.domain.bo.TestDemoBo;
+import com.ruoyi.demo.domain.bo.TestDemoImportVo;
import com.ruoyi.demo.domain.vo.TestDemoVo;
import com.ruoyi.demo.service.ITestDemoService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
@@ -63,20 +68,35 @@ public class TestDemoController extends BaseController {
return iTestDemoService.customPageList(bo);
}
- /**
+ @ApiOperation("导入测试-校验")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "file", value = "导入文件", dataType = "java.io.File", required = true),
+ })
+ @Log(title = "测试单表", businessType = BusinessType.IMPORT)
+ @PreAuthorize("@ss.hasPermi('demo:demo:import')")
+ @PostMapping("/importData")
+ public AjaxResult importData(@RequestPart("file") MultipartFile file) throws Exception {
+ ExcelResult excelResult = ExcelUtil.importExcel(file.getInputStream(), TestDemoImportVo.class, true);
+ List volist = excelResult.getList();
+ List list = BeanUtil.copyToList(volist, TestDemo.class);
+ iTestDemoService.saveAll(list);
+ return AjaxResult.success(excelResult.getAnalysis());
+ }
+
+ /**
* 导出测试单表列表
*/
@ApiOperation("导出测试单表列表")
@SaCheckPermission("demo:demo:export")
@Log(title = "测试单表", businessType = BusinessType.EXPORT)
- @GetMapping("/export")
+ @PostMapping("/export")
public void export(@Validated TestDemoBo bo, HttpServletResponse response) {
List list = iTestDemoService.queryList(bo);
- // 测试雪花id导出
+ // 测试雪花id导出
// for (TestDemoVo vo : list) {
// vo.setId(1234567891234567893L);
// }
- ExcelUtil.exportExcel(list, "测试单表", TestDemoVo.class, response);
+ ExcelUtil.exportExcel(list, "测试单表", TestDemoVo.class, response);
}
/**
@@ -85,8 +105,9 @@ public class TestDemoController extends BaseController {
@ApiOperation("获取测试单表详细信息")
@SaCheckPermission("demo:demo:query")
@GetMapping("/{id}")
- public AjaxResult getInfo(@NotNull(message = "主键不能为空")
- @PathVariable("id") Long id) {
+ public AjaxResult getInfo(@ApiParam("测试ID")
+ @NotNull(message = "主键不能为空")
+ @PathVariable("id") Long id) {
return AjaxResult.success(iTestDemoService.queryById(id));
}
@@ -98,7 +119,10 @@ public class TestDemoController extends BaseController {
@Log(title = "测试单表", businessType = BusinessType.INSERT)
@RepeatSubmit(interval = 2, timeUnit = TimeUnit.SECONDS, message = "不允许重复提交")
@PostMapping()
- public AjaxResult add(@Validated(AddGroup.class) @RequestBody TestDemoBo bo) {
+ public AjaxResult add(@RequestBody TestDemoBo bo) {
+ // 使用校验工具对标 @Validated(AddGroup.class) 注解
+ // 用于在非 Controller 的地方校验对象
+ ValidatorUtils.validate(bo, AddGroup.class);
return toAjax(iTestDemoService.insertByBo(bo) ? 1 : 0);
}
@@ -121,8 +145,9 @@ public class TestDemoController extends BaseController {
@SaCheckPermission("demo:demo:remove")
@Log(title = "测试单表" , businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
- public AjaxResult remove(@NotEmpty(message = "主键不能为空")
- @PathVariable Long[] ids) {
+ public AjaxResult remove(@ApiParam("测试ID串")
+ @NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ids) {
return toAjax(iTestDemoService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
}
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestI18nController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestI18nController.java
index bb0695f78..40b031b51 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestI18nController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestI18nController.java
@@ -4,16 +4,24 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.MessageUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.Data;
+import org.hibernate.validator.constraints.Range;
+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.RestController;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
/**
* 测试国际化
*
* @author Lion Li
*/
+@Validated
@Api(value = "测试国际化控制器", tags = {"测试国际化管理"})
@RestController
@RequestMapping("/demo/i18n")
@@ -27,7 +35,42 @@ public class TestI18nController {
*/
@ApiOperation("通过code获取国际化内容")
@GetMapping()
- public AjaxResult get(String code) {
+ public AjaxResult get(@ApiParam("国际化code") String code) {
return AjaxResult.success(MessageUtils.message(code));
}
+
+ /**
+ * Validator 校验国际化
+ * 不传值 分别查看异常返回
+ *
+ * 测试使用 not.null
+ */
+ @ApiOperation("Validator 校验国际化")
+ @GetMapping("/test1")
+ public AjaxResult test1(@NotBlank(message = "{not.null}") String str) {
+ return AjaxResult.success(str);
+ }
+
+ /**
+ * Bean 校验国际化
+ * 不传值 分别查看异常返回
+ *
+ * 测试使用 not.null
+ */
+ @ApiOperation("Bean 校验国际化")
+ @GetMapping("/test2")
+ public AjaxResult test2(@Validated TestI18nBo bo) {
+ return AjaxResult.success(bo);
+ }
+
+ @Data
+ public static class TestI18nBo {
+
+ @NotBlank(message = "{not.null}")
+ private String name;
+
+ @NotNull(message = "{not.null}")
+ @Range(min = 0, max = 100, message = "{length.not.valid}")
+ private Integer age;
+ }
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestTreeController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestTreeController.java
index f1d3b3c51..f0231bb2c 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestTreeController.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestTreeController.java
@@ -15,6 +15,7 @@ import com.ruoyi.demo.domain.vo.TestTreeVo;
import com.ruoyi.demo.service.ITestTreeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -61,7 +62,7 @@ public class TestTreeController extends BaseController {
@GetMapping("/export")
public void export(@Validated TestTreeBo bo, HttpServletResponse response) {
List list = iTestTreeService.queryList(bo);
- ExcelUtil.exportExcel(list, "测试树表", TestTreeVo.class, response);
+ ExcelUtil.exportExcel(list, "测试树表", TestTreeVo.class, response);
}
/**
@@ -70,8 +71,9 @@ public class TestTreeController extends BaseController {
@ApiOperation("获取测试树表详细信息")
@SaCheckPermission("demo:tree:query")
@GetMapping("/{id}")
- public AjaxResult getInfo(@NotNull(message = "主键不能为空")
- @PathVariable("id") Long id) {
+ public AjaxResult getInfo(@ApiParam("测试树ID")
+ @NotNull(message = "主键不能为空")
+ @PathVariable("id") Long id) {
return AjaxResult.success(iTestTreeService.queryById(id));
}
@@ -106,8 +108,9 @@ public class TestTreeController extends BaseController {
@SaCheckPermission("demo:tree:remove")
@Log(title = "测试树表" , businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
- public AjaxResult remove(@NotEmpty(message = "主键不能为空")
- @PathVariable Long[] ids) {
+ public AjaxResult remove(@ApiParam("测试树ID串")
+ @NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ids) {
return toAjax(iTestTreeService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
}
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java
new file mode 100644
index 000000000..7185514fd
--- /dev/null
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/bo/TestDemoImportVo.java
@@ -0,0 +1,61 @@
+package com.ruoyi.demo.domain.bo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 测试单表业务对象 test_demo
+ *
+ * @author Lion Li
+ * @date 2021-07-26
+ */
+@Data
+@ApiModel("测试单表业务对象")
+public class TestDemoImportVo {
+
+ /**
+ * 部门id
+ */
+ @ApiModelProperty("部门id")
+ @NotNull(message = "部门id不能为空")
+ @ExcelProperty(value = "部门id")
+ private Long deptId;
+
+ /**
+ * 用户id
+ */
+ @ApiModelProperty("用户id")
+ @NotNull(message = "用户id不能为空")
+ @ExcelProperty(value = "用户id")
+ private Long userId;
+
+ /**
+ * 排序号
+ */
+ @ApiModelProperty("排序号")
+ @NotNull(message = "排序号不能为空")
+ @ExcelProperty(value = "排序号")
+ private Long orderNum;
+
+ /**
+ * key键
+ */
+ @ApiModelProperty("key键")
+ @NotBlank(message = "key键不能为空")
+ @ExcelProperty(value = "key键")
+ private String testKey;
+
+ /**
+ * 值
+ */
+ @ApiModelProperty("值")
+ @NotBlank(message = "值不能为空")
+ @ExcelProperty(value = "值")
+ private String value;
+
+}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java
deleted file mode 100644
index 50eb4ebf6..000000000
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.ruoyi.demo.feign;
-
-import com.ruoyi.demo.feign.constant.FeignTestConstant;
-import com.ruoyi.demo.feign.fallback.FeignTestFallback;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-/**
- * feign测试service
- * 规范接口 Service 无感调用
- * 常量管理请求路径 更加规范
- * 自定义容错处理 安全可靠 (需自行配置熔断器)
- * 增加 feign 的目的为使 http 请求接口化
- *
- * @author Lion Li
- * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除
- */
-@FeignClient(
- name = FeignTestConstant.BAIDU_NAME,
- url = FeignTestConstant.BAIDU_URL,
- fallback = FeignTestFallback.class)
-public interface FeignTestService {
-
- @GetMapping("/s")
- String search(@RequestParam("wd") String wd);
-}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java
deleted file mode 100644
index 28dfa8adb..000000000
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.ruoyi.demo.feign.constant;
-
-/**
- * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除
- */
-@Deprecated
-public class FeignTestConstant {
-
- public static final String BAIDU_NAME = "baidu";
-
- public static final String BAIDU_URL = "http://www.baidu.com";
-
-}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java
deleted file mode 100644
index 8e81ad7ad..000000000
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.ruoyi.demo.feign.fallback;
-
-
-import com.ruoyi.demo.feign.FeignTestService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-/**
- * feign测试fallback
- * 自定义封装结构体熔断
- * 需重写解码器 根据自定义实体 自行解析熔断
- *
- * 熔断器需要自行添加配置
- *
- * @see {com.ruoyi.framework.config.FeignConfig#errorDecoder()}
- * @author Lion Li
- * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除
- */
-@Slf4j
-@Component
-public class FeignTestFallback implements FeignTestService {
-
- @Override
- public String search(String wd) {
- log.error("fallback");
- return "报错啦";
- }
-}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java
deleted file mode 100644
index 47983a0e1..000000000
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java
+++ /dev/null
@@ -1 +0,0 @@
-package com.ruoyi.demo.feign.fallback;
\ No newline at end of file
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java
deleted file mode 100644
index 91e4b4a5b..000000000
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java
+++ /dev/null
@@ -1 +0,0 @@
-package com.ruoyi.demo.feign;
\ No newline at end of file
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java
index efbbffc44..dccea6154 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java
@@ -2,11 +2,9 @@ package com.ruoyi.demo.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache;
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
import com.ruoyi.demo.domain.TestDemo;
import com.ruoyi.demo.domain.vo.TestDemoVo;
-import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.Param;
/**
@@ -15,8 +13,6 @@ import org.apache.ibatis.annotations.Param;
* @author Lion Li
* @date 2021-07-26
*/
-// 如使需切换数据源 请勿使用缓存 会造成数据不一致现象
-@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class)
public interface TestDemoMapper extends BaseMapperPlus {
Page customPageList(@Param("page") Page page, @Param("ew") Wrapper wrapper);
diff --git a/ruoyi-demo/src/main/resources/mapper/demo/package-info.md b/ruoyi-demo/src/main/resources/mapper/demo/package-info.md
deleted file mode 100644
index e69de29bb..000000000
diff --git a/ruoyi-demo/src/main/resources/mapper/package-info.md b/ruoyi-demo/src/main/resources/mapper/package-info.md
new file mode 100644
index 000000000..c938b1e50
--- /dev/null
+++ b/ruoyi-demo/src/main/resources/mapper/package-info.md
@@ -0,0 +1,3 @@
+java包使用 `.` 分割 resource 目录使用 `/` 分割
+
+此文件目的 防止文件夹粘连找不到 `xml` 文件
\ No newline at end of file
diff --git a/ruoyi-extend/ruoyi-monitor-admin/pom.xml b/ruoyi-extend/ruoyi-monitor-admin/pom.xml
index 33a78516d..fc321bd58 100644
--- a/ruoyi-extend/ruoyi-monitor-admin/pom.xml
+++ b/ruoyi-extend/ruoyi-monitor-admin/pom.xml
@@ -28,6 +28,12 @@
de.codecentric
spring-boot-admin-starter-server
+
+
+ de.codecentric
+ spring-boot-admin-starter-client
+
+
diff --git a/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java b/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java
index ca9072c78..7335e2f25 100644
--- a/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java
+++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java
@@ -34,6 +34,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
//授予对所有静态资产和登录页面的公共访问权限。
.antMatchers(adminContextPath + "/assets/**").permitAll()
.antMatchers(adminContextPath + "/login").permitAll()
+ .antMatchers("/actuator").anonymous()
+ .antMatchers("/actuator/**").anonymous()
//必须对每个其他请求进行身份验证
.anyRequest().authenticated().and()
//配置登录和注销
diff --git a/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-dev.yml b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-dev.yml
new file mode 100644
index 000000000..829314b41
--- /dev/null
+++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-dev.yml
@@ -0,0 +1,14 @@
+--- # 监控配置
+spring:
+ boot:
+ admin:
+ # Spring Boot Admin Client 客户端的相关配置
+ client:
+ # 增加客户端开关
+ enabled: true
+ # 设置 Spring Boot Admin Server 地址
+ url: http://localhost:9090/admin
+ instance:
+ prefer-ip: true # 注册实例时,优先使用 IP
+ username: ruoyi
+ password: 123456
diff --git a/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-prod.yml b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-prod.yml
new file mode 100644
index 000000000..e8cac1369
--- /dev/null
+++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-prod.yml
@@ -0,0 +1,14 @@
+--- # 监控配置
+spring:
+ boot:
+ admin:
+ # Spring Boot Admin Client 客户端的相关配置
+ client:
+ # 增加客户端开关
+ enabled: true
+ # 设置 Spring Boot Admin Server 地址
+ url: http://172.30.0.90:9090/admin
+ instance:
+ prefer-ip: true # 注册实例时,优先使用 IP
+ username: ruoyi
+ password: 123456
diff --git a/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml
index 631f3e772..bf0db5620 100644
--- a/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml
+++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml
@@ -1,6 +1,12 @@
server:
port: 9090
+spring:
+ application:
+ name: ruoyi-monitor-admin
+ profiles:
+ active: @profiles.active@
+--- # 监控中心服务端配置
spring:
security:
user:
@@ -9,3 +15,17 @@ spring:
boot:
admin:
context-path: /admin
+
+--- # Actuator 监控端点的配置项
+management:
+ endpoints:
+ web:
+ # Actuator 提供的 API 接口的根目录。默认为 /actuator
+ base-path: /actuator
+ exposure:
+ # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+ # 生产环境不建议放开所有 根据项目需求放开即可
+ include: @endpoints.include@
+ endpoint:
+ logfile:
+ external-file: ./logs/ruoyi-monitor-admin.log
diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml
index a2b198fc9..26892d424 100644
--- a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml
+++ b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml
@@ -71,6 +71,11 @@
${mysql-connector-java.version}
+
+ de.codecentric
+ spring-boot-admin-starter-client
+
+
com.xuxueli
diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-dev.yml b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-dev.yml
index 065b34262..540a3237a 100644
--- a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-dev.yml
@@ -1,3 +1,18 @@
+--- # 监控配置
+spring:
+ boot:
+ admin:
+ # Spring Boot Admin Client 客户端的相关配置
+ client:
+ # 增加客户端开关
+ enabled: true
+ # 设置 Spring Boot Admin Server 地址
+ url: http://localhost:9090/admin
+ instance:
+ prefer-ip: true # 注册实例时,优先使用 IP
+ username: ruoyi
+ password: 123456
+
--- # 数据库配置
spring:
datasource:
diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-prod.yml b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-prod.yml
index 2994909ac..bcec9d82e 100644
--- a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-prod.yml
@@ -1,3 +1,18 @@
+--- # 监控配置
+spring:
+ boot:
+ admin:
+ # Spring Boot Admin Client 客户端的相关配置
+ client:
+ # 增加客户端开关
+ enabled: true
+ # 设置 Spring Boot Admin Server 地址
+ url: http://172.30.0.90:9090/admin
+ instance:
+ prefer-ip: true # 注册实例时,优先使用 IP
+ username: ruoyi
+ password: 123456
+
--- # 数据库配置
spring:
datasource:
diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml
index edafdb01b..202272087 100644
--- a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml
+++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml
@@ -4,6 +4,8 @@ server:
servlet:
context-path: /xxl-job-admin
spring:
+ application:
+ name: ruoyi-xxl-job-admin
profiles:
active: @profiles.active@
mvc:
@@ -28,13 +30,22 @@ spring:
suffix: .ftl
templateLoaderPath: classpath:/templates/
---- # 监控配置
+--- # Actuator 监控端点的配置项
management:
health:
mail:
enabled: false
- server:
- base-path: /actuator
+ endpoints:
+ web:
+ # Actuator 提供的 API 接口的根目录。默认为 /actuator
+ base-path: /actuator
+ exposure:
+ # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
+ # 生产环境不建议放开所有 根据项目需求放开即可
+ include: @endpoints.include@
+ endpoint:
+ logfile:
+ external-file: ./logs/ruoyi-xxl-job-admin.log
--- # xxljob系统配置
xxl:
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
index 393b2e650..dcf805877 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -7,6 +7,7 @@ import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.reflect.ReflectUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatSubmitAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatSubmitAspect.java
index bb8b0f19c..fd02a9be4 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatSubmitAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatSubmitAspect.java
@@ -1,13 +1,12 @@
package com.ruoyi.framework.aspectj;
import cn.dev33.satoken.SaManager;
-import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
-import com.baomidou.lock.LockInfo;
-import com.baomidou.lock.LockTemplate;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.JsonUtils;
+import com.ruoyi.common.utils.RedisUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.config.properties.RepeatSubmitProperties;
@@ -18,8 +17,14 @@ import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
/**
* 防止重复提交
@@ -33,7 +38,6 @@ import javax.servlet.http.HttpServletRequest;
public class RepeatSubmitAspect {
private final RepeatSubmitProperties repeatSubmitProperties;
- private final LockTemplate lockTemplate;
@Before("@annotation(repeatSubmit)")
public void doBefore(JoinPoint point, RepeatSubmit repeatSubmit) throws Throwable {
@@ -46,7 +50,7 @@ public class RepeatSubmitAspect {
throw new ServiceException("重复提交间隔时间不能小于'1'秒");
}
HttpServletRequest request = ServletUtils.getRequest();
- String nowParams = StrUtil.join(",", point.getArgs());
+ String nowParams = argsArrayToString(point.getArgs());
// 请求地址(作为存放cache的key值)
String url = request.getRequestURI();
@@ -59,10 +63,58 @@ public class RepeatSubmitAspect {
submitKey = SecureUtil.md5(submitKey + ":" + nowParams);
// 唯一标识(指定key + 消息头)
String cacheRepeatKey = Constants.REPEAT_SUBMIT_KEY + submitKey;
- LockInfo lock = lockTemplate.lock(cacheRepeatKey, interval, interval / 2);
- if (lock == null) {
+ String key = RedisUtils.getCacheObject(cacheRepeatKey);
+ if (key == null) {
+ RedisUtils.setCacheObject(cacheRepeatKey, "", interval, TimeUnit.MILLISECONDS);
+ } else {
throw new ServiceException(repeatSubmit.message());
}
}
+ /**
+ * 参数拼装
+ */
+ private String argsArrayToString(Object[] paramsArray) {
+ StringBuilder params = new StringBuilder();
+ if (paramsArray != null && paramsArray.length > 0) {
+ for (Object o : paramsArray) {
+ if (StringUtils.isNotNull(o) && !isFilterObject(o)) {
+ try {
+ params.append(JsonUtils.toJsonString(o)).append(" ");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ return params.toString().trim();
+ }
+
+ /**
+ * 判断是否需要过滤的对象。
+ *
+ * @param o 对象信息。
+ * @return 如果是需要过滤的对象,则返回true;否则返回false。
+ */
+ @SuppressWarnings("rawtypes")
+ public boolean isFilterObject(final Object o) {
+ Class> clazz = o.getClass();
+ if (clazz.isArray()) {
+ return clazz.getComponentType().isAssignableFrom(MultipartFile.class);
+ } else if (Collection.class.isAssignableFrom(clazz)) {
+ Collection collection = (Collection) o;
+ for (Object value : collection) {
+ return value instanceof MultipartFile;
+ }
+ } else if (Map.class.isAssignableFrom(clazz)) {
+ Map map = (Map) o;
+ for (Object value : map.entrySet()) {
+ Map.Entry entry = (Map.Entry) value;
+ return entry.getValue() instanceof MultipartFile;
+ }
+ }
+ return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse
+ || o instanceof BindingResult;
+ }
+
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java
deleted file mode 100644
index 8b432ad89..000000000
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.ruoyi.framework.config;
-
-import feign.*;
-import okhttp3.ConnectionPool;
-import okhttp3.OkHttpClient;
-import org.springframework.boot.autoconfigure.AutoConfigureBefore;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.cloud.openfeign.EnableFeignClients;
-import org.springframework.cloud.openfeign.FeignAutoConfiguration;
-import org.springframework.cloud.openfeign.support.SpringMvcContract;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * openfeign配置类
- *
- * @author Lion Li
- * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除
- */
-@Deprecated
-@EnableFeignClients("${feign.package}")
-@Configuration
-@ConditionalOnClass(Feign.class)
-@AutoConfigureBefore(FeignAutoConfiguration.class)
-public class FeignConfig {
-
- @Bean
- public OkHttpClient okHttpClient(){
- return new OkHttpClient.Builder()
- .readTimeout(60, TimeUnit.SECONDS)
- .connectTimeout(60, TimeUnit.SECONDS)
- .writeTimeout(120, TimeUnit.SECONDS)
- .connectionPool(new ConnectionPool())
- .build();
- }
-
- @Bean
- public Contract feignContract() {
- return new SpringMvcContract();
- }
-
- @Bean
- public Logger.Level feignLoggerLevel() {
- return Logger.Level.BASIC;
- }
-
- @Bean
- public Request.Options feignRequestOptions() {
- return new Request.Options(10, TimeUnit.SECONDS, 60,TimeUnit.SECONDS,true);
- }
-
- @Bean
- public Retryer feignRetry() {
- return new Retryer.Default();
- }
-
-// /**
-// * 自定义异常解码器
-// * 用于自定义返回体异常熔断
-// */
-// @Bean
-// public ErrorDecoder errorDecoder() {
-// return new CustomErrorDecoder();
-// }
-//
-//
-// /**
-// * 自定义返回体解码器
-// */
-// @Slf4j
-// public static class CustomErrorDecoder implements ErrorDecoder {
-//
-// @Override
-// public Exception decode(String methodKey, Response response) {
-// Exception exception = null;
-// try {
-// // 获取原始的返回内容
-// String json = JsonUtils.toJsonString(response.body().asReader(StandardCharsets.UTF_8));
-// exception = new RuntimeException(json);
-// // 将返回内容反序列化为Result,这里应根据自身项目作修改
-// AjaxResult result = JsonUtils.parseObject(json, AjaxResult.class);
-// // 业务异常抛出简单的 RuntimeException,保留原来错误信息
-// if (result.getCode() != 200) {
-// exception = new RuntimeException(result.getMsg());
-// }
-// } catch (IOException e) {
-// log.error(e.getMessage(), e);
-// }
-// return exception;
-// }
-// }
-
-}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
index 459020d87..6f3b099ab 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
@@ -20,7 +20,6 @@ import java.util.Map;
* @author Lion Li
*/
@Configuration
-@ConditionalOnProperty(value = "xss.enabled", havingValue = "true")
public class FilterConfig {
@Autowired
@@ -28,6 +27,7 @@ public class FilterConfig {
@SuppressWarnings({"rawtypes", "unchecked"})
@Bean
+ @ConditionalOnProperty(value = "xss.enabled", havingValue = "true")
public FilterRegistrationBean xssFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setDispatcherTypes(DispatcherType.REQUEST);
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java
index 48b341beb..20b52a8e2 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java
@@ -1,7 +1,6 @@
package com.ruoyi.framework.config;
import cn.hutool.core.util.StrUtil;
-import org.jetbrains.annotations.NotNull;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
@@ -28,7 +27,6 @@ public class I18nConfig {
*/
static class I18nLocaleResolver implements LocaleResolver {
- @NotNull
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
String language = httpServletRequest.getHeader("content-language");
@@ -41,7 +39,7 @@ public class I18nConfig {
}
@Override
- public void setLocale(@NotNull HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
+ public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java
index 937be3543..4a956a2e9 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java
@@ -2,6 +2,7 @@ package com.ruoyi.framework.config;
import cn.dev33.satoken.config.SaTokenConfig;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.framework.config.properties.SwaggerProperties;
@@ -34,6 +35,9 @@ public class SwaggerConfig {
@Autowired
private SaTokenConfig saTokenConfig;
+ @Autowired
+ private OpenApiExtensionResolver openApiExtensionResolver;
+
/**
* 创建API
*/
@@ -58,6 +62,7 @@ public class SwaggerConfig {
// 设置安全模式,swagger可以设置访问token
.securitySchemes(securitySchemes())
.securityContexts(securityContexts())
+ .extensions(openApiExtensionResolver.buildExtensions(group.getName()))
.pathMapping(swaggerProperties.getPathMapping());
String beanName = StringUtils.substringAfterLast(basePackage, ".") + "Docket";
SpringUtils.registerBean(beanName, docket);
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java
index 68bc425d6..c1665d9b0 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java
@@ -1,7 +1,6 @@
package com.ruoyi.framework.config;
import com.yomahub.tlog.core.aop.AspectLogAop;
-import com.yomahub.tlog.feign.filter.TLogFeignFilter;
import com.yomahub.tlog.spring.TLogPropertyInit;
import com.yomahub.tlog.spring.TLogSpringAware;
import com.yomahub.tlog.springboot.property.TLogProperty;
@@ -41,9 +40,4 @@ public class TLogConfig {
return new AspectLogAop();
}
- @Bean
- public TLogFeignFilter tLogFeignFilter() {
- return new TLogFeignFilter();
- }
-
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ValidatorConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ValidatorConfig.java
index 258e855cd..0a2007c81 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ValidatorConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ValidatorConfig.java
@@ -1,12 +1,14 @@
package com.ruoyi.framework.config;
import org.hibernate.validator.HibernateValidator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
-import javax.validation.Validation;
import javax.validation.Validator;
-import javax.validation.ValidatorFactory;
+import java.util.Properties;
/**
* 校验框架配置类
@@ -16,16 +18,26 @@ import javax.validation.ValidatorFactory;
@Configuration
public class ValidatorConfig {
+ @Autowired
+ private MessageSource messageSource;
+
/**
* 配置校验框架 快速返回模式
*/
@Bean
public Validator validator() {
- ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
- .configure()
- .failFast(true)
- .buildValidatorFactory();
- return validatorFactory.getValidator();
+ LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
+ // 国际化
+ factoryBean.setValidationMessageSource(messageSource);
+ // 设置使用 HibernateValidator 校验器
+ factoryBean.setProviderClass(HibernateValidator.class);
+ Properties properties = new Properties();
+ // 设置 快速异常返回
+ properties.setProperty("hibernate.validator.fail_fast", "true");
+ factoryBean.setValidationProperties(properties);
+ // 加载配置
+ factoryBean.afterPropertiesSet();
+ return factoryBean.getValidator();
}
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java
index 4ed536690..ef77a219a 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java
@@ -14,7 +14,7 @@ import java.util.concurrent.ScheduledExecutorService;
*
* @author Lion Li
*/
-@Slf4j(topic = "sys-user")
+@Slf4j
@Component
public class ShutdownManager {
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java
index d0f00c6da..2be7afa6b 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java
@@ -16,7 +16,9 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
+import java.util.stream.Collectors;
/**
* 全局异常处理器
@@ -104,7 +106,9 @@ public class GlobalExceptionHandler {
@ExceptionHandler(BindException.class)
public AjaxResult handleBindException(BindException e) {
log.error(e.getMessage(), e);
- String message = e.getAllErrors().get(0).getDefaultMessage();
+ String message = e.getAllErrors().stream()
+ .map(DefaultMessageSourceResolvable::getDefaultMessage)
+ .collect(Collectors.joining(", "));
return AjaxResult.error(message);
}
@@ -114,7 +118,9 @@ public class GlobalExceptionHandler {
@ExceptionHandler(ConstraintViolationException.class)
public AjaxResult constraintViolationException(ConstraintViolationException e) {
log.error(e.getMessage(), e);
- String message = e.getConstraintViolations().iterator().next().getMessage();
+ String message = e.getConstraintViolations().stream()
+ .map(ConstraintViolation::getMessage)
+ .collect(Collectors.joining(", "));
return AjaxResult.error(message);
}
diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml
index 668489f6e..045ecbaf8 100644
--- a/ruoyi-generator/pom.xml
+++ b/ruoyi-generator/pom.xml
@@ -20,7 +20,7 @@
org.apache.velocity
- velocity
+ velocity-engine-core
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
index 55c93d8d4..af85c847e 100644
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
@@ -2,6 +2,7 @@ package com.ruoyi.generator.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.convert.Convert;
+import cn.hutool.core.io.IoUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
@@ -14,7 +15,6 @@ import com.ruoyi.generator.service.IGenTableService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
-import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -201,6 +201,6 @@ public class GenController extends BaseController {
response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\"");
response.addHeader("Content-Length", "" + data.length);
response.setContentType("application/octet-stream; charset=UTF-8");
- IOUtils.write(data, response.getOutputStream());
+ IoUtil.write(response.getOutputStream(), false, data);
}
}
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
index 62fe67a3a..b53393f0c 100644
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
@@ -2,6 +2,7 @@ package com.ruoyi.generator.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
+import cn.hutool.core.io.IoUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.GenConstants;
@@ -21,7 +22,7 @@ import com.ruoyi.generator.util.GenUtils;
import com.ruoyi.generator.util.VelocityInitializer;
import com.ruoyi.generator.util.VelocityUtils;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.io.IOUtils;
+import org.apache.poi.util.IOUtils;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
@@ -33,6 +34,7 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
@@ -341,8 +343,8 @@ public class GenTableServiceImpl extends ServicePlusImpl dicts = new ArrayList();
for (GenTableColumn column : columns) {
if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny(
- column.getHtmlType(), new String[]{GenConstants.HTML_SELECT, GenConstants.HTML_RADIO})) {
+ column.getHtmlType(),
+ new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX })) {
dicts.add("'" + column.getDictType() + "'");
}
}
diff --git a/ruoyi-generator/src/main/resources/mapper/package-info.md b/ruoyi-generator/src/main/resources/mapper/package-info.md
new file mode 100644
index 000000000..c938b1e50
--- /dev/null
+++ b/ruoyi-generator/src/main/resources/mapper/package-info.md
@@ -0,0 +1,3 @@
+java包使用 `.` 分割 resource 目录使用 `/` 分割
+
+此文件目的 防止文件夹粘连找不到 `xml` 文件
\ No newline at end of file
diff --git a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm
index 13e22818f..d35642e15 100644
--- a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm
+++ b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm
@@ -28,6 +28,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
#elseif($table.tree)
#end
import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiOperation;
/**
@@ -80,7 +81,8 @@ public class ${ClassName}Controller extends BaseController {
@ApiOperation("获取${functionName}详细信息")
@SaCheckPermission("${permissionPrefix}:query")
@GetMapping("/{${pkColumn.javaField}}")
- public AjaxResult<${ClassName}Vo> getInfo(@NotNull(message = "主键不能为空")
+ public AjaxResult<${ClassName}Vo> getInfo(@ApiParam("主键")
+ @NotNull(message = "主键不能为空")
@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) {
return AjaxResult.success(i${ClassName}Service.queryById(${pkColumn.javaField}));
}
@@ -116,7 +118,8 @@ public class ${ClassName}Controller extends BaseController {
@SaCheckPermission("${permissionPrefix}:remove")
@Log(title = "${functionName}" , businessType = BusinessType.DELETE)
@DeleteMapping("/{${pkColumn.javaField}s}")
- public AjaxResult remove(@NotEmpty(message = "主键不能为空")
+ public AjaxResult remove(@ApiParam("主键串")
+ @NotEmpty(message = "主键不能为空")
@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) {
return toAjax(i${ClassName}Service.deleteWithValidByIds(Arrays.asList(${pkColumn.javaField}s), true) ? 1 : 0);
}
diff --git a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
index 24494adf3..7c530cb13 100644
--- a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
+++ b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
@@ -108,7 +108,11 @@
#elseif($column.list && $column.dictType && "" != $column.dictType)
+#if($column.htmlType == "checkbox")
+
+#else
+#end
#elseif($column.list && "" != $javaField)
@@ -296,8 +300,7 @@ export default {
queryParams: {
#foreach ($column in $columns)
#if($column.query)
- $column.javaField: null#if($velocityCount != $columns.size()),#end
-
+ $column.javaField: null#if($foreach.count != $columns.size()),#end
#end
#end
},
@@ -315,8 +318,7 @@ export default {
#end
$column.javaField: [
{ required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select")"change"#else"blur"#end }
- ]#if($velocityCount != $columns.size()),#end
-
+ ]#if($foreach.count != $columns.size()),#end
#end
#end
}
@@ -379,14 +381,12 @@ export default {
this.form = {
#foreach ($column in $columns)
#if($column.htmlType == "radio")
- $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($velocityCount != $columns.size()),#end
+ $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($foreach.count != $columns.size()),#end
#elseif($column.htmlType == "checkbox")
- $column.javaField: []#if($velocityCount != $columns.size()),#end
-
+ $column.javaField: []#if($foreach.count != $columns.size()),#end
#else
- $column.javaField: null#if($velocityCount != $columns.size()),#end
-
+ $column.javaField: null#if($foreach.count != $columns.size()),#end
#end
#end
};
diff --git a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
index 7e28c2e9e..c0a5bf716 100644
--- a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
+++ b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
@@ -108,7 +108,6 @@
plain
icon="el-icon-download"
size="mini"
- :loading="exportLoading"
@click="handleExport"
v-hasPermi="['${moduleName}:${businessName}:export']"
>导出
@@ -137,7 +136,11 @@
#elseif($column.list && $column.dictType && "" != $column.dictType)
+#if($column.htmlType == "checkbox")
+
+#else
+#end
#elseif($column.list && "" != $javaField)
@@ -324,8 +327,6 @@ export default {
buttonLoading: false,
// 遮罩层
loading: true,
- // 导出遮罩层
- exportLoading: false,
// 选中数组
ids: [],
#if($table.sub)
@@ -363,8 +364,7 @@ export default {
pageSize: 10,
#foreach ($column in $columns)
#if($column.query)
- $column.javaField: undefined#if($velocityCount != $columns.size()),#end
-
+ $column.javaField: undefined#if($foreach.count != $columns.size()),#end
#end
#end
},
@@ -382,8 +382,7 @@ export default {
#end
$column.javaField: [
{ required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select")"change"#else"blur"#end }
- ]#if($velocityCount != $columns.size()),#end
-
+ ]#if($foreach.count != $columns.size()),#end
#end
#end
}
@@ -427,14 +426,11 @@ export default {
this.form = {
#foreach ($column in $columns)
#if($column.htmlType == "radio")
- $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($velocityCount != $columns.size()),#end
-
+ $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($foreach.count != $columns.size()),#end
#elseif($column.htmlType == "checkbox")
- $column.javaField: []#if($velocityCount != $columns.size()),#end
-
+ $column.javaField: []#if($foreach.count != $columns.size()),#end
#else
- $column.javaField: undefined#if($velocityCount != $columns.size()),#end
-
+ $column.javaField: undefined#if($foreach.count != $columns.size()),#end
#end
#end
};
@@ -573,7 +569,9 @@ export default {
#end
/** 导出按钮操作 */
handleExport() {
- this.#[[$download]]#.excel('/${moduleName}/${businessName}/export', this.queryParams);
+ this.download('${moduleName}/${businessName}/export', {
+ ...this.queryParams
+ }, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
}
}
};
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java
similarity index 73%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java
index 7bba1f4db..b5236bfe7 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java
@@ -8,7 +8,7 @@ import java.util.List;
*
* @author Lion Li
*/
-public class CloudConstant {
+public class OssConstant {
/**
* OSS模块KEY
@@ -18,12 +18,12 @@ public class CloudConstant {
/**
* 对象存储配置KEY
*/
- public static final String CLOUD_STORAGE_CONFIG_KEY = "CloudStorageConfig";
+ public static final String OSS_CONFIG_KEY = "OssConfig";
/**
* 缓存配置KEY
*/
- public static final String CACHE_CONFIG_KEY = SYS_OSS_KEY + CLOUD_STORAGE_CONFIG_KEY;
+ public static final String CACHE_CONFIG_KEY = SYS_OSS_KEY + OSS_CONFIG_KEY;
/**
* 预览列表资源开关Key
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java
similarity index 56%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java
index ac8ad8184..4defca40e 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java
@@ -1,10 +1,10 @@
package com.ruoyi.oss.enumd;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.oss.service.impl.AliyunCloudStorageStrategy;
-import com.ruoyi.oss.service.impl.MinioCloudStorageStrategy;
-import com.ruoyi.oss.service.impl.QcloudCloudStorageStrategy;
-import com.ruoyi.oss.service.impl.QiniuCloudStorageStrategy;
+import com.ruoyi.oss.service.impl.AliyunOssStrategy;
+import com.ruoyi.oss.service.impl.MinioOssStrategy;
+import com.ruoyi.oss.service.impl.QcloudOssStrategy;
+import com.ruoyi.oss.service.impl.QiniuOssStrategy;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -15,34 +15,34 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
-public enum CloudServiceEnumd {
+public enum OssEnumd {
/**
* 七牛云
*/
- QINIU("qiniu", QiniuCloudStorageStrategy.class),
+ QINIU("qiniu", QiniuOssStrategy.class),
/**
* 阿里云
*/
- ALIYUN("aliyun", AliyunCloudStorageStrategy.class),
+ ALIYUN("aliyun", AliyunOssStrategy.class),
/**
* 腾讯云
*/
- QCLOUD("qcloud", QcloudCloudStorageStrategy.class),
+ QCLOUD("qcloud", QcloudOssStrategy.class),
/**
* minio
*/
- MINIO("minio", MinioCloudStorageStrategy.class);
+ MINIO("minio", MinioOssStrategy.class);
private final String value;
private final Class> serviceClass;
public static Class> getServiceClass(String value) {
- for (CloudServiceEnumd clazz : values()) {
+ for (OssEnumd clazz : values()) {
if (clazz.getValue().equals(value)) {
return clazz.getServiceClass();
}
@@ -51,7 +51,7 @@ public enum CloudServiceEnumd {
}
public static String getServiceName(String value) {
- for (CloudServiceEnumd clazz : values()) {
+ for (OssEnumd clazz : values()) {
if (clazz.getValue().equals(value)) {
return StringUtils.uncapitalize(clazz.getServiceClass().getSimpleName());
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
index ecb269dd7..169159602 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
@@ -1,16 +1,15 @@
package com.ruoyi.oss.factory;
-import cn.hutool.core.convert.Convert;
import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.common.utils.RedisUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.reflect.ReflectUtils;
-import com.ruoyi.oss.constant.CloudConstant;
-import com.ruoyi.oss.enumd.CloudServiceEnumd;
+import com.ruoyi.oss.constant.OssConstant;
+import com.ruoyi.oss.enumd.OssEnumd;
import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.service.ICloudStorageStrategy;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
+import com.ruoyi.oss.properties.OssProperties;
+import com.ruoyi.oss.service.IOssStrategy;
+import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
@@ -24,24 +23,31 @@ import java.util.concurrent.ConcurrentHashMap;
@Slf4j
public class OssFactory {
- static {
- RedisUtils.subscribe(CloudConstant.CACHE_CONFIG_KEY, String.class, msg -> {
- refreshService(msg);
- log.info("订阅刷新OSS配置 => " + msg);
- });
- }
-
/**
* 服务实例缓存
*/
- private static final Map SERVICES = new ConcurrentHashMap<>();
+ private static final Map SERVICES = new ConcurrentHashMap<>();
+
+ /**
+ * 初始化工厂
+ */
+ public static void init() {
+ log.info("初始化OSS工厂");
+ RedisUtils.subscribe(OssConstant.CACHE_CONFIG_KEY, String.class, type -> {
+ // 没有的实例不处理
+ if (SERVICES.containsKey(type)) {
+ refreshService(type);
+ log.info("订阅刷新OSS配置 => " + type);
+ }
+ });
+ }
/**
* 获取默认实例
*/
- public static ICloudStorageStrategy instance() {
+ public static IOssStrategy instance() {
// 获取redis 默认类型
- String type = Convert.toStr(RedisUtils.getCacheObject(CloudConstant.CACHE_CONFIG_KEY));
+ String type = RedisUtils.getCacheObject(OssConstant.CACHE_CONFIG_KEY);
if (StringUtils.isEmpty(type)) {
throw new OssException("文件存储服务类型无法找到!");
}
@@ -51,8 +57,8 @@ public class OssFactory {
/**
* 根据类型获取实例
*/
- public static ICloudStorageStrategy instance(String type) {
- ICloudStorageStrategy service = SERVICES.get(type);
+ public static IOssStrategy instance(String type) {
+ IOssStrategy service = SERVICES.get(type);
if (service == null) {
refreshService(type);
service = SERVICES.get(type);
@@ -61,14 +67,14 @@ public class OssFactory {
}
private static void refreshService(String type) {
- Object json = RedisUtils.getCacheObject(CloudConstant.SYS_OSS_KEY + type);
- CloudStorageProperties properties = JsonUtils.parseObject(json.toString(), CloudStorageProperties.class);
+ Object json = RedisUtils.getCacheObject(OssConstant.SYS_OSS_KEY + type);
+ OssProperties properties = JsonUtils.parseObject(json.toString(), OssProperties.class);
if (properties == null) {
throw new OssException("系统异常, '" + type + "'配置信息不存在!");
}
// 获取redis配置信息 创建对象 并缓存
- ICloudStorageStrategy service = (ICloudStorageStrategy) ReflectUtils.newInstance(CloudServiceEnumd.getServiceClass(type));
- ((AbstractCloudStorageStrategy)service).init(properties);
+ IOssStrategy service = (IOssStrategy) ReflectUtils.newInstance(OssEnumd.getServiceClass(type));
+ ((AbstractOssStrategy)service).init(properties);
SERVICES.put(type, service);
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java
similarity index 81%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java
index 9d3f15afb..48a478b7a 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java
@@ -2,15 +2,13 @@ package com.ruoyi.oss.properties;
import lombok.Data;
-import java.util.Date;
-
/**
* OSS对象存储 配置属性
*
* @author Lion Li
*/
@Data
-public class CloudStorageProperties {
+public class OssProperties {
/**
* 域名
@@ -47,9 +45,4 @@ public class CloudStorageProperties {
*/
private String isHttps;
- /**
- * 更新时间
- */
- private Date updateTime;
-
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java
similarity index 84%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java
index 96ea53992..34d25e477 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java
@@ -9,7 +9,7 @@ import java.io.InputStream;
*
* @author Lion Li
*/
-public interface ICloudStorageStrategy {
+public interface IOssStrategy {
void createBucket();
@@ -18,15 +18,6 @@ public interface ICloudStorageStrategy {
*/
String getServiceType();
- /**
- * 文件路径
- *
- * @param prefix 前缀
- * @param suffix 后缀
- * @return 返回上传路径
- */
- String getPath(String prefix, String suffix);
-
/**
* 文件上传
*
@@ -70,5 +61,4 @@ public interface ICloudStorageStrategy {
*/
UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType);
- String getEndpointLink();
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java
similarity index 80%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java
index 8f5e9625d..9fa52acb4 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java
@@ -5,8 +5,8 @@ import cn.hutool.core.util.IdUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.service.ICloudStorageStrategy;
+import com.ruoyi.oss.properties.OssProperties;
+import com.ruoyi.oss.service.IOssStrategy;
import java.io.InputStream;
@@ -15,11 +15,11 @@ import java.io.InputStream;
*
* @author Lion Li
*/
-public abstract class AbstractCloudStorageStrategy implements ICloudStorageStrategy {
+public abstract class AbstractOssStrategy implements IOssStrategy {
- protected CloudStorageProperties properties;
+ protected OssProperties properties;
- public abstract void init(CloudStorageProperties properties);
+ public abstract void init(OssProperties properties);
@Override
public abstract void createBucket();
@@ -27,7 +27,6 @@ public abstract class AbstractCloudStorageStrategy implements ICloudStorageStrat
@Override
public abstract String getServiceType();
- @Override
public String getPath(String prefix, String suffix) {
// 生成uuid
String uuid = IdUtil.fastSimpleUUID();
@@ -57,6 +56,5 @@ public abstract class AbstractCloudStorageStrategy implements ICloudStorageStrat
@Override
public abstract UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType);
- @Override
public abstract String getEndpointLink();
}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java
similarity index 90%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java
index 04ee67500..db9ad910e 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java
@@ -9,10 +9,10 @@ import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.enumd.CloudServiceEnumd;
+import com.ruoyi.oss.enumd.OssEnumd;
import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
+import com.ruoyi.oss.properties.OssProperties;
+import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@@ -22,12 +22,12 @@ import java.io.InputStream;
*
* @author Lion Li
*/
-public class AliyunCloudStorageStrategy extends AbstractCloudStorageStrategy {
+public class AliyunOssStrategy extends AbstractOssStrategy {
private OSSClient client;
@Override
- public void init(CloudStorageProperties cloudStorageProperties) {
+ public void init(OssProperties cloudStorageProperties) {
properties = cloudStorageProperties;
try {
ClientConfiguration configuration = new ClientConfiguration();
@@ -57,7 +57,7 @@ public class AliyunCloudStorageStrategy extends AbstractCloudStorageStrategy {
@Override
public String getServiceType() {
- return CloudServiceEnumd.ALIYUN.getValue();
+ return OssEnumd.ALIYUN.getValue();
}
@Override
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java
similarity index 94%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java
index 3bbf187c9..0423dcc8a 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java
@@ -2,11 +2,11 @@ package com.ruoyi.oss.service.impl;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.enumd.CloudServiceEnumd;
+import com.ruoyi.oss.enumd.OssEnumd;
import com.ruoyi.oss.enumd.PolicyType;
import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
+import com.ruoyi.oss.properties.OssProperties;
+import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
import io.minio.*;
import org.springframework.http.MediaType;
@@ -18,12 +18,12 @@ import java.io.InputStream;
*
* @author Lion Li
*/
-public class MinioCloudStorageStrategy extends AbstractCloudStorageStrategy {
+public class MinioOssStrategy extends AbstractOssStrategy {
private MinioClient minioClient;
@Override
- public void init(CloudStorageProperties cloudStorageProperties) {
+ public void init(OssProperties cloudStorageProperties) {
properties = cloudStorageProperties;
try {
minioClient = MinioClient.builder()
@@ -57,7 +57,7 @@ public class MinioCloudStorageStrategy extends AbstractCloudStorageStrategy {
@Override
public String getServiceType() {
- return CloudServiceEnumd.MINIO.getValue();
+ return OssEnumd.MINIO.getValue();
}
@Override
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java
similarity index 91%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java
index 9bd366e0d..156eb24c5 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java
@@ -9,10 +9,10 @@ import com.qcloud.cos.model.*;
import com.qcloud.cos.region.Region;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.enumd.CloudServiceEnumd;
+import com.ruoyi.oss.enumd.OssEnumd;
import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
+import com.ruoyi.oss.properties.OssProperties;
+import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@@ -22,12 +22,12 @@ import java.io.InputStream;
*
* @author Lion Li
*/
-public class QcloudCloudStorageStrategy extends AbstractCloudStorageStrategy {
+public class QcloudOssStrategy extends AbstractOssStrategy {
private COSClient client;
@Override
- public void init(CloudStorageProperties cloudStorageProperties) {
+ public void init(OssProperties cloudStorageProperties) {
properties = cloudStorageProperties;
try {
COSCredentials credentials = new BasicCOSCredentials(
@@ -65,7 +65,7 @@ public class QcloudCloudStorageStrategy extends AbstractCloudStorageStrategy {
@Override
public String getServiceType() {
- return CloudServiceEnumd.QCLOUD.getValue();
+ return OssEnumd.QCLOUD.getValue();
}
@Override
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java
similarity index 82%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java
index e9b8dc096..bf90aa824 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java
@@ -8,10 +8,10 @@ import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.enumd.CloudServiceEnumd;
+import com.ruoyi.oss.enumd.OssEnumd;
import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
+import com.ruoyi.oss.properties.OssProperties;
+import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
import java.io.InputStream;
@@ -20,14 +20,14 @@ import java.io.InputStream;
*
* @author Lion Li
*/
-public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy {
+public class QiniuOssStrategy extends AbstractOssStrategy {
private UploadManager uploadManager;
private BucketManager bucketManager;
- private String token;
+ private Auth auth;
@Override
- public void init(CloudStorageProperties cloudStorageProperties) {
+ public void init(OssProperties cloudStorageProperties) {
properties = cloudStorageProperties;
try {
Configuration config = new Configuration(getRegion(properties.getRegion()));
@@ -35,9 +35,8 @@ public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy {
config.useHttpsDomains = false;
config.useHttpsDomains = "Y".equals(properties.getIsHttps());
uploadManager = new UploadManager(config);
- Auth auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
+ auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
String bucketName = properties.getBucketName();
- token = auth.uploadToken(bucketName);
bucketManager = new BucketManager(auth, config);
if (!ArrayUtil.contains(bucketManager.buckets(), bucketName)) {
@@ -63,15 +62,16 @@ public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy {
@Override
public String getServiceType() {
- return CloudServiceEnumd.QINIU.getValue();
+ return OssEnumd.QINIU.getValue();
}
@Override
public UploadResult upload(byte[] data, String path, String contentType) {
try {
- Response res = uploadManager.put(data, path, token, null, contentType, false);
+ String token = auth.uploadToken(properties.getBucketName());
+ Response res = uploadManager.put(data, path, token, null, contentType, false);
if (!res.isOK()) {
- throw new RuntimeException("上传七牛出错:" + res.toString());
+ throw new RuntimeException("上传七牛出错:" + res.error);
}
} catch (Exception e) {
throw new OssException("上传文件失败,请核对七牛配置信息:[" + e.getMessage() + "]");
@@ -85,7 +85,7 @@ public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy {
path = path.replace(getEndpointLink() + "/", "");
Response res = bucketManager.delete(properties.getBucketName(), path);
if (!res.isOK()) {
- throw new RuntimeException("删除七牛文件出错:" + res.toString());
+ throw new RuntimeException("删除七牛文件出错:" + res.error);
}
} catch (Exception e) {
throw new OssException(e.getMessage());
diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml
deleted file mode 100644
index 1480b8133..000000000
--- a/ruoyi-quartz/pom.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
- ruoyi-vue-plus
- com.ruoyi
- 3.3.0
-
- 4.0.0
-
- ruoyi-quartz
-
-
- quartz定时任务
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-starter-quartz
-
-
- com.mchange
- c3p0
-
-
-
-
-
-
- com.ruoyi
- ruoyi-common
-
-
-
-
-
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java
deleted file mode 100644
index c5fa2ec0f..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.ruoyi.quartz.config;
-
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 定时任务配置
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author Lion Li
- */
-@Deprecated
-@Configuration
-public class ScheduleConfig {
-
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
deleted file mode 100644
index 7a86393b5..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package com.ruoyi.quartz.controller;
-
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import com.ruoyi.common.annotation.Log;
-import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.common.exception.job.TaskException;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.quartz.domain.SysJob;
-import com.ruoyi.quartz.service.ISysJobService;
-import com.ruoyi.quartz.util.CronUtils;
-import org.quartz.SchedulerException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * 调度任务信息操作处理
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/monitor/job")
-public class SysJobController extends BaseController
-{
- @Autowired
- private ISysJobService jobService;
-
- /**
- * 查询定时任务列表
- */
- @SaCheckPermission("monitor:job:list")
- @GetMapping("/list")
- public TableDataInfo list(SysJob sysJob)
- {
- return jobService.selectPageJobList(sysJob);
- }
-
- /**
- * 导出定时任务列表
- */
- @SaCheckPermission("monitor:job:export")
- @Log(title = "定时任务", businessType = BusinessType.EXPORT)
- @GetMapping("/export")
- public void export(SysJob sysJob, HttpServletResponse response)
- {
- List list = jobService.selectJobList(sysJob);
- ExcelUtil.exportExcel(list, "定时任务", SysJob.class, response);
- }
-
- /**
- * 获取定时任务详细信息
- */
- @SaCheckPermission("monitor:job:query")
- @GetMapping(value = "/{jobId}")
- public AjaxResult getInfo(@PathVariable("jobId") Long jobId)
- {
- return AjaxResult.success(jobService.selectJobById(jobId));
- }
-
- /**
- * 新增定时任务
- */
- @SaCheckPermission("monitor:job:add")
- @Log(title = "定时任务", businessType = BusinessType.INSERT)
- @PostMapping
- public AjaxResult add(@RequestBody SysJob job) throws SchedulerException, TaskException
- {
- if (!CronUtils.isValid(job.getCronExpression()))
- {
- return error("新增任务'" + job.getJobName() + "'失败,Cron表达式不正确");
- }
- else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI))
- {
- return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi://'调用");
- }
- else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_LDAP))
- {
- return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap://'调用");
- }
- else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS }))
- {
- return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)//'调用");
- }
- return toAjax(jobService.insertJob(job));
- }
-
- /**
- * 修改定时任务
- */
- @SaCheckPermission("monitor:job:edit")
- @Log(title = "定时任务", businessType = BusinessType.UPDATE)
- @PutMapping
- public AjaxResult edit(@RequestBody SysJob job) throws SchedulerException, TaskException
- {
- if (!CronUtils.isValid(job.getCronExpression()))
- {
- return error("修改任务'" + job.getJobName() + "'失败,Cron表达式不正确");
- }
- else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI))
- {
- return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi://'调用");
- }
- else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_LDAP))
- {
- return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap://'调用");
- }
- else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS }))
- {
- return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)//'调用");
- }
- return toAjax(jobService.updateJob(job));
- }
-
- /**
- * 定时任务状态修改
- */
- @SaCheckPermission("monitor:job:changeStatus")
- @Log(title = "定时任务", businessType = BusinessType.UPDATE)
- @PutMapping("/changeStatus")
- public AjaxResult changeStatus(@RequestBody SysJob job) throws SchedulerException
- {
- SysJob newJob = jobService.selectJobById(job.getJobId());
- newJob.setStatus(job.getStatus());
- return toAjax(jobService.changeStatus(newJob));
- }
-
- /**
- * 定时任务立即执行一次
- */
- @SaCheckPermission("monitor:job:changeStatus")
- @Log(title = "定时任务", businessType = BusinessType.UPDATE)
- @PutMapping("/run")
- public AjaxResult run(@RequestBody SysJob job) throws SchedulerException
- {
- jobService.run(job);
- return AjaxResult.success();
- }
-
- /**
- * 删除定时任务
- */
- @SaCheckPermission("monitor:job:remove")
- @Log(title = "定时任务", businessType = BusinessType.DELETE)
- @DeleteMapping("/{jobIds}")
- public AjaxResult remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException
- {
- jobService.deleteJobByIds(jobIds);
- return AjaxResult.success();
- }
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java
deleted file mode 100644
index 8ab3229d9..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.ruoyi.quartz.controller;
-
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import com.ruoyi.common.annotation.Log;
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.quartz.domain.SysJobLog;
-import com.ruoyi.quartz.service.ISysJobLogService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * 调度日志操作处理
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-@RestController
-@RequestMapping("/monitor/jobLog")
-public class SysJobLogController extends BaseController
-{
- @Autowired
- private ISysJobLogService jobLogService;
-
- /**
- * 查询定时任务调度日志列表
- */
-
- @SaCheckPermission("monitor:job:list")
- @GetMapping("/list")
- public TableDataInfo list(SysJobLog sysJobLog)
- {
- return jobLogService.selectPageJobLogList(sysJobLog);
- }
-
- /**
- * 导出定时任务调度日志列表
- */
- @SaCheckPermission("monitor:job:export")
- @Log(title = "任务调度日志", businessType = BusinessType.EXPORT)
- @GetMapping("/export")
- public void export(SysJobLog sysJobLog, HttpServletResponse response)
- {
- List list = jobLogService.selectJobLogList(sysJobLog);
- ExcelUtil.exportExcel(list, "调度日志", SysJobLog.class, response);
- }
-
- /**
- * 根据调度编号获取详细信息
- */
- @SaCheckPermission("monitor:job:query")
- @GetMapping(value = "/{configId}")
- public AjaxResult getInfo(@PathVariable Long jobLogId)
- {
- return AjaxResult.success(jobLogService.selectJobLogById(jobLogId));
- }
-
-
- /**
- * 删除定时任务调度日志
- */
- @SaCheckPermission("monitor:job:remove")
- @Log(title = "定时任务调度日志", businessType = BusinessType.DELETE)
- @DeleteMapping("/{jobLogIds}")
- public AjaxResult remove(@PathVariable Long[] jobLogIds)
- {
- return toAjax(jobLogService.deleteJobLogByIds(jobLogIds));
- }
-
- /**
- * 清空定时任务调度日志
- */
- @SaCheckPermission("monitor:job:remove")
- @Log(title = "调度日志", businessType = BusinessType.CLEAN)
- @DeleteMapping("/clean")
- public AjaxResult clean()
- {
- jobLogService.cleanJobLog();
- return AjaxResult.success();
- }
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java
deleted file mode 100644
index ee15e552e..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package com.ruoyi.quartz.domain;
-
-import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.common.annotation.ExcelDictFormat;
-import com.ruoyi.common.constant.ScheduleConstants;
-import com.ruoyi.common.convert.ExcelDictConvert;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.quartz.util.CronUtils;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-import java.io.Serializable;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 定时任务调度表 sys_job
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-
-@Data
-@NoArgsConstructor
-@Accessors(chain = true)
-@TableName("sys_job")
-@ExcelIgnoreUnannotated
-public class SysJob implements Serializable {
- private static final long serialVersionUID = 1L;
-
- /**
- * 任务ID
- */
- @ExcelProperty(value = "任务序号")
- @TableId(value = "job_id", type = IdType.AUTO)
- private Long jobId;
-
- /**
- * 任务名称
- */
- @NotBlank(message = "任务名称不能为空")
- @Size(min = 0, max = 64, message = "任务名称不能超过64个字符")
- @ExcelProperty(value = "任务名称")
- private String jobName;
-
- /**
- * 任务组名
- */
- @ExcelProperty(value = "任务组名", converter = ExcelDictConvert.class)
- @ExcelDictFormat(dictType = "sys_job_group")
- private String jobGroup;
-
- /**
- * 调用目标字符串
- */
- @NotBlank(message = "调用目标字符串不能为空")
- @Size(min = 0, max = 500, message = "调用目标字符串长度不能超过500个字符")
- @ExcelProperty(value = "调用目标字符串")
- private String invokeTarget;
-
- /**
- * cron执行表达式
- */
- @NotBlank(message = "Cron执行表达式不能为空")
- @Size(min = 0, max = 255, message = "Cron执行表达式不能超过255个字符")
- @ExcelProperty(value = "执行表达式")
- private String cronExpression;
-
- /**
- * cron计划策略
- */
- @ExcelProperty(value = "计划策略 ", converter = ExcelDictConvert.class)
- @ExcelDictFormat(readConverterExp = "0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行")
- private String misfirePolicy = ScheduleConstants.MISFIRE_DEFAULT;
-
- /**
- * 是否并发执行(0允许 1禁止)
- */
- @ExcelProperty(value = "并发执行", converter = ExcelDictConvert.class)
- @ExcelDictFormat(readConverterExp = "0=允许,1=禁止")
- private String concurrent;
-
- /**
- * 任务状态(0正常 1暂停)
- */
- @ExcelProperty(value = "任务状态", converter = ExcelDictConvert.class)
- @ExcelDictFormat(dictType = "sys_job_status")
- private String status;
-
- /**
- * 创建者
- */
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
-
- /**
- * 创建时间
- */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /**
- * 更新者
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updateBy;
-
- /**
- * 更新时间
- */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-
- /**
- * 备注
- */
- private String remark;
-
- /**
- * 请求参数
- */
- @TableField(exist = false)
- private Map params = new HashMap<>();
-
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- public Date getNextValidTime() {
- if (StringUtils.isNotEmpty(cronExpression)) {
- return CronUtils.getNextExecution(cronExpression);
- }
- return null;
- }
-
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java
deleted file mode 100644
index 2ea63df5c..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.ruoyi.quartz.domain;
-
-import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.baomidou.mybatisplus.annotation.*;
-import com.ruoyi.common.annotation.ExcelDictFormat;
-import com.ruoyi.common.convert.ExcelDictConvert;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 定时任务调度日志表 sys_job_log
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-
-@Data
-@NoArgsConstructor
-@Accessors(chain = true)
-@TableName("sys_job_log")
-@ExcelIgnoreUnannotated
-public class SysJobLog
-{
- private static final long serialVersionUID = 1L;
-
- /** ID */
- @ExcelProperty(value = "日志序号")
- @TableId(value = "job_log_id", type = IdType.AUTO)
- private Long jobLogId;
-
- /** 任务名称 */
- @ExcelProperty(value = "任务名称")
- private String jobName;
-
- /** 任务组名 */
- @ExcelProperty(value = "任务组名", converter = ExcelDictConvert.class)
- @ExcelDictFormat(dictType = "sys_job_group")
- private String jobGroup;
-
- /** 调用目标字符串 */
- @ExcelProperty(value = "调用目标字符串")
- private String invokeTarget;
-
- /** 日志信息 */
- @ExcelProperty(value = "日志信息")
- private String jobMessage;
-
- /** 执行状态(0正常 1失败) */
- @ExcelProperty(value = "执行状态", converter = ExcelDictConvert.class)
- @ExcelDictFormat(dictType = "sys_common_status")
- private String status;
-
- /** 异常信息 */
- @ExcelProperty(value = "异常信息")
- private String exceptionInfo;
-
- /**
- * 创建时间
- */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /**
- * 请求参数
- */
- @TableField(exist = false)
- private Map params = new HashMap<>();
-
- /** 开始时间 */
- @TableField(exist = false)
- private Date startTime;
-
- /** 停止时间 */
- @TableField(exist = false)
- private Date stopTime;
-
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java
deleted file mode 100644
index 0bffa118c..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ruoyi.quartz.mapper;
-
-import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
-import com.ruoyi.quartz.domain.SysJobLog;
-
-/**
- * 调度任务日志信息 数据层
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-public interface SysJobLogMapper extends BaseMapperPlus {
-
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java
deleted file mode 100644
index 13f2da7c7..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ruoyi.quartz.mapper;
-
-import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
-import com.ruoyi.quartz.domain.SysJob;
-
-/**
- * 调度任务信息 数据层
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-public interface SysJobMapper extends BaseMapperPlus {
-
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java
deleted file mode 100644
index ff8451acc..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.ruoyi.quartz.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.quartz.domain.SysJobLog;
-
-import java.util.List;
-
-/**
- * 定时任务调度日志信息信息 服务层
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-public interface ISysJobLogService extends IService {
-
-
- TableDataInfo selectPageJobLogList(SysJobLog jobLog);
-
- /**
- * 获取quartz调度器日志的计划任务
- *
- * @param jobLog 调度日志信息
- * @return 调度任务日志集合
- */
- public List selectJobLogList(SysJobLog jobLog);
-
- /**
- * 通过调度任务日志ID查询调度信息
- *
- * @param jobLogId 调度任务日志ID
- * @return 调度任务日志对象信息
- */
- public SysJobLog selectJobLogById(Long jobLogId);
-
- /**
- * 新增任务日志
- *
- * @param jobLog 调度日志信息
- */
- public void addJobLog(SysJobLog jobLog);
-
- /**
- * 批量删除调度日志信息
- *
- * @param logIds 需要删除的日志ID
- * @return 结果
- */
- public int deleteJobLogByIds(Long[] logIds);
-
- /**
- * 删除任务日志
- *
- * @param jobId 调度日志ID
- * @return 结果
- */
- public int deleteJobLogById(Long jobId);
-
- /**
- * 清空任务日志
- */
- public void cleanJobLog();
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java
deleted file mode 100644
index cbe4621fd..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.ruoyi.quartz.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.exception.job.TaskException;
-import com.ruoyi.quartz.domain.SysJob;
-import org.quartz.SchedulerException;
-
-import java.util.List;
-
-/**
- * 定时任务调度信息信息 服务层
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-public interface ISysJobService extends IService {
- /**
- * 获取quartz调度器的计划任务
- *
- * @param job 调度信息
- * @return 调度任务集合
- */
- public TableDataInfo selectPageJobList(SysJob job);
-
- public List selectJobList(SysJob job);
-
- /**
- * 通过调度任务ID查询调度信息
- *
- * @param jobId 调度任务ID
- * @return 调度任务对象信息
- */
- public SysJob selectJobById(Long jobId);
-
- /**
- * 暂停任务
- *
- * @param job 调度信息
- * @return 结果
- */
- public int pauseJob(SysJob job) throws SchedulerException;
-
- /**
- * 恢复任务
- *
- * @param job 调度信息
- * @return 结果
- */
- public int resumeJob(SysJob job) throws SchedulerException;
-
- /**
- * 删除任务后,所对应的trigger也将被删除
- *
- * @param job 调度信息
- * @return 结果
- */
- public int deleteJob(SysJob job) throws SchedulerException;
-
- /**
- * 批量删除调度信息
- *
- * @param jobIds 需要删除的任务ID
- * @return 结果
- */
- public void deleteJobByIds(Long[] jobIds) throws SchedulerException;
-
- /**
- * 任务调度状态修改
- *
- * @param job 调度信息
- * @return 结果
- */
- public int changeStatus(SysJob job) throws SchedulerException;
-
- /**
- * 立即运行任务
- *
- * @param job 调度信息
- * @return 结果
- */
- public void run(SysJob job) throws SchedulerException;
-
- /**
- * 新增任务
- *
- * @param job 调度信息
- * @return 结果
- */
- public int insertJob(SysJob job) throws SchedulerException, TaskException;
-
- /**
- * 更新任务
- *
- * @param job 调度信息
- * @return 结果
- */
- public int updateJob(SysJob job) throws SchedulerException, TaskException;
-
- /**
- * 校验cron表达式是否有效
- *
- * @param cronExpression 表达式
- * @return 结果
- */
- public boolean checkCronExpressionIsValid(String cronExpression);
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java
deleted file mode 100644
index 76edb49bb..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.ruoyi.quartz.service.impl;
-
-import com.ruoyi.common.utils.StringUtils;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.utils.PageUtils;
-import com.ruoyi.quartz.domain.SysJobLog;
-import com.ruoyi.quartz.mapper.SysJobLogMapper;
-import com.ruoyi.quartz.service.ISysJobLogService;
-import org.springframework.stereotype.Service;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 定时任务调度日志信息 服务层
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-@Service
-public class SysJobLogServiceImpl extends ServicePlusImpl implements ISysJobLogService {
-
- @Override
- public TableDataInfo selectPageJobLogList(SysJobLog jobLog) {
- Map params = jobLog.getParams();
- LambdaQueryWrapper lqw = new LambdaQueryWrapper()
- .like(StringUtils.isNotBlank(jobLog.getJobName()), SysJobLog::getJobName, jobLog.getJobName())
- .eq(StringUtils.isNotBlank(jobLog.getJobGroup()), SysJobLog::getJobGroup, jobLog.getJobGroup())
- .eq(StringUtils.isNotBlank(jobLog.getStatus()), SysJobLog::getStatus, jobLog.getStatus())
- .like(StringUtils.isNotBlank(jobLog.getInvokeTarget()), SysJobLog::getInvokeTarget, jobLog.getInvokeTarget())
- .apply(StringUtils.isNotEmpty(params.get("beginTime")),
- "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')",
- params.get("beginTime"))
- .apply(StringUtils.isNotEmpty(params.get("endTime")),
- "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')",
- params.get("endTime"));
- return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
- }
-
- /**
- * 获取quartz调度器日志的计划任务
- *
- * @param jobLog 调度日志信息
- * @return 调度任务日志集合
- */
- @Override
- public List selectJobLogList(SysJobLog jobLog) {
- Map params = jobLog.getParams();
- return list(new LambdaQueryWrapper()
- .like(StringUtils.isNotBlank(jobLog.getJobName()), SysJobLog::getJobName, jobLog.getJobName())
- .eq(StringUtils.isNotBlank(jobLog.getJobGroup()), SysJobLog::getJobGroup, jobLog.getJobGroup())
- .eq(StringUtils.isNotBlank(jobLog.getStatus()), SysJobLog::getStatus, jobLog.getStatus())
- .like(StringUtils.isNotBlank(jobLog.getInvokeTarget()), SysJobLog::getInvokeTarget, jobLog.getInvokeTarget())
- .apply(StringUtils.isNotEmpty(params.get("beginTime")),
- "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')",
- params.get("beginTime"))
- .apply(StringUtils.isNotEmpty(params.get("endTime")),
- "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')",
- params.get("endTime")));
- }
-
- /**
- * 通过调度任务日志ID查询调度信息
- *
- * @param jobLogId 调度任务日志ID
- * @return 调度任务日志对象信息
- */
- @Override
- public SysJobLog selectJobLogById(Long jobLogId) {
- return getById(jobLogId);
- }
-
- /**
- * 新增任务日志
- *
- * @param jobLog 调度日志信息
- */
- @Override
- public void addJobLog(SysJobLog jobLog) {
- baseMapper.insert(jobLog);
- }
-
- /**
- * 批量删除调度日志信息
- *
- * @param logIds 需要删除的数据ID
- * @return 结果
- */
- @Override
- public int deleteJobLogByIds(Long[] logIds) {
- return baseMapper.deleteBatchIds(Arrays.asList(logIds));
- }
-
- /**
- * 删除任务日志
- *
- * @param jobId 调度日志ID
- */
- @Override
- public int deleteJobLogById(Long jobId) {
- return baseMapper.deleteById(jobId);
- }
-
- /**
- * 清空任务日志
- */
- @Override
- public void cleanJobLog() {
- remove(new LambdaQueryWrapper<>());
- }
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
deleted file mode 100644
index 6962cf1db..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
+++ /dev/null
@@ -1,247 +0,0 @@
-package com.ruoyi.quartz.service.impl;
-
-import com.ruoyi.common.utils.StringUtils;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.ruoyi.common.constant.ScheduleConstants;
-import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.exception.job.TaskException;
-import com.ruoyi.common.utils.PageUtils;
-import com.ruoyi.quartz.domain.SysJob;
-import com.ruoyi.quartz.mapper.SysJobMapper;
-import com.ruoyi.quartz.service.ISysJobService;
-import com.ruoyi.quartz.util.CronUtils;
-import com.ruoyi.quartz.util.ScheduleUtils;
-import org.quartz.JobDataMap;
-import org.quartz.JobKey;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.PostConstruct;
-import java.util.List;
-
-/**
- * 定时任务调度信息 服务层
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-@Service
-public class SysJobServiceImpl extends ServicePlusImpl implements ISysJobService {
- @Autowired
- private Scheduler scheduler;
-
- /**
- * 项目启动时,初始化定时器 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据)
- */
- @PostConstruct
- public void init() throws SchedulerException, TaskException {
- scheduler.clear();
- List jobList = list();
- for (SysJob job : jobList) {
- ScheduleUtils.createScheduleJob(scheduler, job);
- }
- }
-
- @Override
- public TableDataInfo selectPageJobList(SysJob job) {
- LambdaQueryWrapper lqw = new LambdaQueryWrapper()
- .like(StringUtils.isNotBlank(job.getJobName()), SysJob::getJobName, job.getJobName())
- .eq(StringUtils.isNotBlank(job.getJobGroup()), SysJob::getJobGroup, job.getJobGroup())
- .eq(StringUtils.isNotBlank(job.getStatus()), SysJob::getStatus, job.getStatus())
- .like(StringUtils.isNotBlank(job.getInvokeTarget()), SysJob::getInvokeTarget, job.getInvokeTarget());
- return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
- }
-
- /**
- * 获取quartz调度器的计划任务列表
- *
- * @param job 调度信息
- * @return
- */
- @Override
- public List selectJobList(SysJob job) {
- return list(new LambdaQueryWrapper()
- .like(StringUtils.isNotBlank(job.getJobName()), SysJob::getJobName, job.getJobName())
- .eq(StringUtils.isNotBlank(job.getJobGroup()), SysJob::getJobGroup, job.getJobGroup())
- .eq(StringUtils.isNotBlank(job.getStatus()), SysJob::getStatus, job.getStatus())
- .like(StringUtils.isNotBlank(job.getInvokeTarget()), SysJob::getInvokeTarget, job.getInvokeTarget()));
- }
-
- /**
- * 通过调度任务ID查询调度信息
- *
- * @param jobId 调度任务ID
- * @return 调度任务对象信息
- */
- @Override
- public SysJob selectJobById(Long jobId) {
- return getById(jobId);
- }
-
- /**
- * 暂停任务
- *
- * @param job 调度信息
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int pauseJob(SysJob job) throws SchedulerException {
- Long jobId = job.getJobId();
- String jobGroup = job.getJobGroup();
- job.setStatus(ScheduleConstants.Status.PAUSE.getValue());
- int rows = baseMapper.updateById(job);
- if (rows > 0) {
- scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup));
- }
- return rows;
- }
-
- /**
- * 恢复任务
- *
- * @param job 调度信息
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int resumeJob(SysJob job) throws SchedulerException {
- Long jobId = job.getJobId();
- String jobGroup = job.getJobGroup();
- job.setStatus(ScheduleConstants.Status.NORMAL.getValue());
- int rows = baseMapper.updateById(job);
- if (rows > 0) {
- scheduler.resumeJob(ScheduleUtils.getJobKey(jobId, jobGroup));
- }
- return rows;
- }
-
- /**
- * 删除任务后,所对应的trigger也将被删除
- *
- * @param job 调度信息
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int deleteJob(SysJob job) throws SchedulerException {
- Long jobId = job.getJobId();
- String jobGroup = job.getJobGroup();
- int rows = baseMapper.deleteById(jobId);
- if (rows > 0) {
- scheduler.deleteJob(ScheduleUtils.getJobKey(jobId, jobGroup));
- }
- return rows;
- }
-
- /**
- * 批量删除调度信息
- *
- * @param jobIds 需要删除的任务ID
- * @return 结果
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void deleteJobByIds(Long[] jobIds) throws SchedulerException {
- for (Long jobId : jobIds) {
- SysJob job = getById(jobId);
- deleteJob(job);
- }
- }
-
- /**
- * 任务调度状态修改
- *
- * @param job 调度信息
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int changeStatus(SysJob job) throws SchedulerException {
- int rows = 0;
- String status = job.getStatus();
- if (ScheduleConstants.Status.NORMAL.getValue().equals(status)) {
- rows = resumeJob(job);
- } else if (ScheduleConstants.Status.PAUSE.getValue().equals(status)) {
- rows = pauseJob(job);
- }
- return rows;
- }
-
- /**
- * 立即运行任务
- *
- * @param job 调度信息
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void run(SysJob job) throws SchedulerException {
- Long jobId = job.getJobId();
- String jobGroup = job.getJobGroup();
- SysJob properties = selectJobById(job.getJobId());
- // 参数
- JobDataMap dataMap = new JobDataMap();
- dataMap.put(ScheduleConstants.TASK_PROPERTIES, properties);
- scheduler.triggerJob(ScheduleUtils.getJobKey(jobId, jobGroup), dataMap);
- }
-
- /**
- * 新增任务
- *
- * @param job 调度信息 调度信息
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int insertJob(SysJob job) throws SchedulerException, TaskException {
- job.setStatus(ScheduleConstants.Status.PAUSE.getValue());
- int rows = baseMapper.insert(job);
- if (rows > 0) {
- ScheduleUtils.createScheduleJob(scheduler, job);
- }
- return rows;
- }
-
- /**
- * 更新任务的时间表达式
- *
- * @param job 调度信息
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int updateJob(SysJob job) throws SchedulerException, TaskException {
- SysJob properties = selectJobById(job.getJobId());
- int rows = baseMapper.updateById(job);
- if (rows > 0) {
- updateSchedulerJob(job, properties.getJobGroup());
- }
- return rows;
- }
-
- /**
- * 更新任务
- *
- * @param job 任务对象
- * @param jobGroup 任务组名
- */
- public void updateSchedulerJob(SysJob job, String jobGroup) throws SchedulerException, TaskException {
- Long jobId = job.getJobId();
- // 判断是否存在
- JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup);
- if (scheduler.checkExists(jobKey)) {
- // 防止创建时存在数据问题 先移除,然后在执行创建操作
- scheduler.deleteJob(jobKey);
- }
- ScheduleUtils.createScheduleJob(scheduler, job);
- }
-
- /**
- * 校验cron表达式是否有效
- *
- * @param cronExpression 表达式
- * @return 结果
- */
- @Override
- public boolean checkCronExpressionIsValid(String cronExpression) {
- return CronUtils.isValid(cronExpression);
- }
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
deleted file mode 100644
index 7fd55c5d9..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.ruoyi.quartz.task;
-
-import cn.hutool.core.lang.Console;
-import com.ruoyi.common.utils.StringUtils;
-import org.springframework.stereotype.Component;
-
-/**
- * 定时任务调度测试
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-@Component("ryTask")
-public class RyTask
-{
- public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
- {
- Console.log(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
- }
-
- public void ryParams(String params)
- {
- Console.log("执行有参方法:" + params);
- }
-
- public void ryNoParams()
- {
- Console.log("执行无参方法");
- }
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java
deleted file mode 100644
index 1705433f3..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.ruoyi.quartz.util;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.exceptions.ExceptionUtil;
-import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.constant.ScheduleConstants;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.quartz.domain.SysJob;
-import com.ruoyi.quartz.domain.SysJobLog;
-import com.ruoyi.quartz.service.ISysJobLogService;
-import org.quartz.Job;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Date;
-
-/**
- * 抽象quartz调用
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-public abstract class AbstractQuartzJob implements Job
-{
- private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class);
-
- /**
- * 线程本地变量
- */
- private static ThreadLocal threadLocal = new ThreadLocal<>();
-
- @Override
- public void execute(JobExecutionContext context) throws JobExecutionException
- {
- SysJob sysJob = new SysJob();
- BeanUtil.copyProperties(context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES),sysJob);
- try
- {
- before(context, sysJob);
- if (StringUtils.isNotNull(sysJob))
- {
- doExecute(context, sysJob);
- }
- after(context, sysJob, null);
- }
- catch (Exception e)
- {
- log.error("任务执行异常 - :", e);
- after(context, sysJob, e);
- }
- }
-
- /**
- * 执行前
- *
- * @param context 工作执行上下文对象
- * @param sysJob 系统计划任务
- */
- protected void before(JobExecutionContext context, SysJob sysJob)
- {
- threadLocal.set(new Date());
- }
-
- /**
- * 执行后
- *
- * @param context 工作执行上下文对象
- * @param sysJob 系统计划任务
- */
- protected void after(JobExecutionContext context, SysJob sysJob, Exception e)
- {
- Date startTime = threadLocal.get();
- threadLocal.remove();
-
- final SysJobLog sysJobLog = new SysJobLog();
- sysJobLog.setJobName(sysJob.getJobName());
- sysJobLog.setJobGroup(sysJob.getJobGroup());
- sysJobLog.setInvokeTarget(sysJob.getInvokeTarget());
- sysJobLog.setStartTime(startTime);
- sysJobLog.setStopTime(new Date());
- long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime();
- sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒");
- if (e != null)
- {
- sysJobLog.setStatus(Constants.FAIL);
- String errorMsg = StringUtils.substring(ExceptionUtil.stacktraceToString(e), 0, 2000);
- sysJobLog.setExceptionInfo(errorMsg);
- }
- else
- {
- sysJobLog.setStatus(Constants.SUCCESS);
- }
-
- // 写入数据库当中
- SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog);
- }
-
- /**
- * 执行方法,由子类重载
- *
- * @param context 工作执行上下文对象
- * @param sysJob 系统计划任务
- * @throws Exception 执行过程中的异常
- */
- protected abstract void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception;
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java
deleted file mode 100644
index 2253af18c..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.ruoyi.quartz.util;
-
-import org.quartz.CronExpression;
-
-import java.text.ParseException;
-import java.util.Date;
-
-/**
- * cron表达式工具类
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- *
- */
-public class CronUtils
-{
- /**
- * 返回一个布尔值代表一个给定的Cron表达式的有效性
- *
- * @param cronExpression Cron表达式
- * @return boolean 表达式是否有效
- */
- public static boolean isValid(String cronExpression)
- {
- return CronExpression.isValidExpression(cronExpression);
- }
-
- /**
- * 返回一个字符串值,表示该消息无效Cron表达式给出有效性
- *
- * @param cronExpression Cron表达式
- * @return String 无效时返回表达式错误描述,如果有效返回null
- */
- public static String getInvalidMessage(String cronExpression)
- {
- try
- {
- new CronExpression(cronExpression);
- return null;
- }
- catch (ParseException pe)
- {
- return pe.getMessage();
- }
- }
-
- /**
- * 返回下一个执行时间根据给定的Cron表达式
- *
- * @param cronExpression Cron表达式
- * @return Date 下次Cron表达式执行时间
- */
- public static Date getNextExecution(String cronExpression)
- {
- try
- {
- CronExpression cron = new CronExpression(cronExpression);
- return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis()));
- }
- catch (ParseException e)
- {
- throw new IllegalArgumentException(e.getMessage());
- }
- }
-}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java
deleted file mode 100644
index ed15d1f7c..000000000
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package com.ruoyi.quartz.util;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.LinkedList;
-import java.util.List;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.quartz.domain.SysJob;
-
-/**
- * 任务执行工具
- *
- * @deprecated 3.4.0删除 迁移至xxl-job
- * @author ruoyi
- */
-public class JobInvokeUtil
-{
- /**
- * 执行方法
- *
- * @param sysJob 系统任务
- */
- public static void invokeMethod(SysJob sysJob) throws Exception
- {
- String invokeTarget = sysJob.getInvokeTarget();
- String beanName = getBeanName(invokeTarget);
- String methodName = getMethodName(invokeTarget);
- List