ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java
@@ -194,8 +194,8 @@ * 自动注册并登录 */ // @SaCheckPermission("system:user:auto") @PutMapping(value = "auto") public R<LoginVo> auto(@Validated @RequestBody RegisterBody user) { @GetMapping(value = "auto") public R<LoginVo> auto(RegisterBody user) { AutoLoginUtil.padding(user); String clientId = "e5cd7e4891bf95d1d19206ce24a7b32e"; //pc ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java
@@ -78,7 +78,7 @@ SysUserVo sysUserVo = userMapper.selectUserByUserName(username); SysUserRole userRole = new SysUserRole(); userRole.setUserId(sysUserVo.getUserId()); userRole.setRoleId(Long.valueOf(RoleType.INTERNET.getType())); userRole.setRoleId(Long.valueOf(RoleType.VIDEO.getType())); userRoleMapper.insert(userRole); recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success")); } ruoyi-admin/src/main/resources/application-dev.yml
@@ -129,7 +129,7 @@ # 命令等待超时,单位:毫秒 timeout: 3000 # 发布和订阅连接池大小 subscriptionConnectionPoolSize: 50 subscriptionConnectionPoolSize: 100 --- # mail 邮件发送 mail: ruoyi-admin/src/main/resources/application-prod.yml
@@ -105,7 +105,7 @@ spring.data: redis: # 地址 host: 123.207.71.245 host: 162.14.79.111 # 端口,默认为6379 port: 16379 password: 234#Wersdf! ruoyi-admin/src/main/resources/application.yml
@@ -256,7 +256,7 @@ --- # websocket websocket: enabled: true enabled: false # 路径 path: /resource/websocket # 设置访问源地址 ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/config/WebSocketConfig.java
@@ -20,7 +20,7 @@ * @author zendwang */ @AutoConfiguration @ConditionalOnProperty(value = "websocket.enabled", havingValue = "true") @ConditionalOnProperty(value = "websocket.enabled", havingValue = "false") @EnableConfigurationProperties(WebSocketProperties.class) @EnableWebSocket public class WebSocketConfig { ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisPubSubController.java
@@ -1,47 +1,47 @@ package org.dromara.demo.controller; import org.dromara.common.core.domain.R; import org.dromara.common.redis.utils.RedisUtils; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Redis 发布订阅 演示案例 * * @author Lion Li */ @RequiredArgsConstructor @RestController @RequestMapping("/demo/redis/pubsub") public class RedisPubSubController { /** * 发布消息 * * @param key 通道Key * @param value 发送内容 */ @GetMapping("/pub") public R<Void> pub(String key, String value) { RedisUtils.publish(key, value, consumer -> { System.out.println("发布通道 => " + key + ", 发送值 => " + value); }); return R.ok("操作成功"); } /** * 订阅消息 * * @param key 通道Key */ @GetMapping("/sub") public R<Void> sub(String key) { RedisUtils.subscribe(key, String.class, msg -> { System.out.println("订阅通道 => " + key + ", 接收值 => " + msg); }); return R.ok("操作成功"); } } //package org.dromara.demo.controller; // //import org.dromara.common.core.domain.R; //import org.dromara.common.redis.utils.RedisUtils; //import lombok.RequiredArgsConstructor; //import org.springframework.web.bind.annotation.GetMapping; //import org.springframework.web.bind.annotation.RequestMapping; //import org.springframework.web.bind.annotation.RestController; // ///** // * Redis 发布订阅 演示案例 // * // * @author Lion Li // */ //@RequiredArgsConstructor //@RestController //@RequestMapping("/demo/redis/pubsub") //public class RedisPubSubController { // // /** // * 发布消息 // * // * @param key 通道Key // * @param value 发送内容 // */ // @GetMapping("/pub") // public R<Void> pub(String key, String value) { // RedisUtils.publish(key, value, consumer -> { // System.out.println("发布通道 => " + key + ", 发送值 => " + value); // }); // return R.ok("操作成功"); // } // // /** // * 订阅消息 // * // * @param key 通道Key // */ // @GetMapping("/sub") // public R<Void> sub(String key) { // RedisUtils.subscribe(key, String.class, msg -> { // System.out.println("订阅通道 => " + key + ", 接收值 => " + msg); // }); // return R.ok("操作成功"); // } // //} ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java
@@ -1,94 +1,94 @@ package org.dromara.demo.controller.queue; import cn.dev33.satoken.annotation.SaIgnore; import org.dromara.common.core.domain.R; import org.dromara.common.redis.utils.QueueUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.TimeUnit; /** * 延迟队列 演示案例 * <p> * 轻量级队列 重量级数据量 请使用 MQ * 例如: 创建订单30分钟后过期处理 * <p> * 集群测试通过 同一个数据只会被消费一次 做好事务补偿 * 集群测试流程 两台集群分别开启订阅 在其中一台发送数据 观察接收消息的规律 * * @author Lion Li * @version 3.6.0 */ @SaIgnore @Slf4j @RequiredArgsConstructor @RestController @RequestMapping("/demo/queue/delayed") public class DelayedQueueController { /** * 订阅队列 * * @param queueName 队列名 */ @GetMapping("/subscribe") public R<Void> subscribe(String queueName) { log.info("通道: {} 监听中......", queueName); // 项目初始化设置一次即可 QueueUtils.subscribeBlockingQueue(queueName, (String orderNum) -> { // 观察接收时间 log.info("通道: {}, 收到数据: {}", queueName, orderNum); }); return R.ok("操作成功"); } /** * 添加队列数据 * * @param queueName 队列名 * @param orderNum 订单号 // * @param time 延迟时间(秒) */ @GetMapping("/add") public R<Void> add(@RequestParam("queueName") String queueName, @RequestParam("orderNum")String orderNum) { QueueUtils.addDelayedQueueObject(queueName, orderNum, 5, TimeUnit.SECONDS); // 观察发送时间 log.info("通道: {} , 发送数据: {}", queueName, orderNum); return R.ok("操作成功"); } /** * 删除队列数据 * * @param queueName 队列名 * @param orderNum 订单号 */ @GetMapping("/remove") public R<Void> remove(String queueName, String orderNum) { if (QueueUtils.removeDelayedQueueObject(queueName, orderNum)) { log.info("通道: {} , 删除数据: {}", queueName, orderNum); } else { return R.fail("操作失败"); } return R.ok("操作成功"); } /** * 销毁队列 * * @param queueName 队列名 */ @GetMapping("/destroy") public R<Void> destroy(String queueName) { // 用完了一定要销毁 否则会一直存在 QueueUtils.destroyDelayedQueue(queueName); return R.ok("操作成功"); } } //package org.dromara.demo.controller.queue; // //import cn.dev33.satoken.annotation.SaIgnore; //import org.dromara.common.core.domain.R; //import org.dromara.common.redis.utils.QueueUtils; //import lombok.RequiredArgsConstructor; //import lombok.extern.slf4j.Slf4j; //import org.springframework.web.bind.annotation.GetMapping; //import org.springframework.web.bind.annotation.RequestMapping; //import org.springframework.web.bind.annotation.RequestParam; //import org.springframework.web.bind.annotation.RestController; // //import java.util.concurrent.TimeUnit; // ///** // * 延迟队列 演示案例 // * <p> // * 轻量级队列 重量级数据量 请使用 MQ // * 例如: 创建订单30分钟后过期处理 // * <p> // * 集群测试通过 同一个数据只会被消费一次 做好事务补偿 // * 集群测试流程 两台集群分别开启订阅 在其中一台发送数据 观察接收消息的规律 // * // * @author Lion Li // * @version 3.6.0 // */ //@SaIgnore //@Slf4j //@RequiredArgsConstructor //@RestController //@RequestMapping("/demo/queue/delayed") //public class DelayedQueueController { // // /** // * 订阅队列 // * // * @param queueName 队列名 // */ // @GetMapping("/subscribe") // public R<Void> subscribe(String queueName) { // log.info("通道: {} 监听中......", queueName); // // 项目初始化设置一次即可 // QueueUtils.subscribeBlockingQueue(queueName, (String orderNum) -> { // // 观察接收时间 // log.info("通道: {}, 收到数据: {}", queueName, orderNum); // // }); // return R.ok("操作成功"); // } // // /** // * 添加队列数据 // * // * @param queueName 队列名 // * @param orderNum 订单号 //// * @param time 延迟时间(秒) // */ // @GetMapping("/add") // public R<Void> add(@RequestParam("queueName") String queueName, @RequestParam("orderNum")String orderNum) { // QueueUtils.addDelayedQueueObject(queueName, orderNum, 5, TimeUnit.SECONDS); // // 观察发送时间 // log.info("通道: {} , 发送数据: {}", queueName, orderNum); // return R.ok("操作成功"); // } // // /** // * 删除队列数据 // * // * @param queueName 队列名 // * @param orderNum 订单号 // */ // @GetMapping("/remove") // public R<Void> remove(String queueName, String orderNum) { // if (QueueUtils.removeDelayedQueueObject(queueName, orderNum)) { // log.info("通道: {} , 删除数据: {}", queueName, orderNum); // } else { // return R.fail("操作失败"); // } // return R.ok("操作成功"); // } // // /** // * 销毁队列 // * // * @param queueName 队列名 // */ // @GetMapping("/destroy") // public R<Void> destroy(String queueName) { // // 用完了一定要销毁 否则会一直存在 // QueueUtils.destroyDelayedQueue(queueName); // return R.ok("操作成功"); // } // //} ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java
@@ -80,55 +80,55 @@ return R.ok(list); } // /** // * 上传OSS对象存储 视频专网 // * // * @param file 文件 // */ // @SaCheckPermission("system:oss:upload") // @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) // @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) // public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) throws IOException { // if (ObjectUtil.isNull(file)) { // return R.fail("上传文件不能为空"); // } // SysOssVo oss = ossService.upload(file); // SynchronousRequest request = new SynchronousRequest(); // request.setFile(file); // // // // //添加队列数据 // QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.DAYS); // log.info("通道: {} , 发送数据: {}", "OSS", oss.getOssId()); // SysOssUploadVo uploadVo = new SysOssUploadVo(); // uploadVo.setUrl(oss.getUrl()); // uploadVo.setFileName(oss.getOriginalName()); // uploadVo.setOssId(oss.getOssId().toString()); // uploadVo.setPassword(oss.getPassword()); // return R.ok(uploadVo); // } /** * 上传OSS对象存储 互联网 * 上传OSS对象存储 视频专网 * * @param file 文件 */ @SaCheckPermission("system:oss:upload") @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public R<String> upload(@RequestPart("file") MultipartFile file) throws IOException { public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) throws IOException { if (ObjectUtil.isNull(file)) { return R.fail("上传文件不能为空"); } VideoRequest request = new VideoRequest(); SysOssVo oss = ossService.upload(file); SynchronousRequest request = new SynchronousRequest(); request.setFile(file); request.setFileName(file.getOriginalFilename()); String post = post(request); String password = post.substring(post.indexOf("password\":\"") + 9, post.indexOf("\"}")); return R.ok(password); //添加队列数据 QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.DAYS); log.info("通道: {} , 发送数据: {}", "OSS", oss.getOssId()); SysOssUploadVo uploadVo = new SysOssUploadVo(); uploadVo.setUrl(oss.getUrl()); uploadVo.setFileName(oss.getOriginalName()); uploadVo.setOssId(oss.getOssId().toString()); uploadVo.setPassword(oss.getPassword()); return R.ok(uploadVo); } // /** // * 上传OSS对象存储 互联网 // * // * @param file 文件 // */ // @SaCheckPermission("system:oss:upload") // @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) // @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) // public R<String> upload(@RequestPart("file") MultipartFile file) throws IOException { // if (ObjectUtil.isNull(file)) { // return R.fail("上传文件不能为空"); // } // VideoRequest request = new VideoRequest(); // request.setFile(file); // request.setFileName(file.getOriginalFilename()); // String post = post(request); // String password = post.substring(post.indexOf("password\":\"") + 9, post.indexOf("\"}")); // return R.ok(password); // } private String post(VideoRequest request) throws IOException { HashMap<String, String> headers = new HashMap<>(3); String requestUrl = boundary.getChief() + "/resource/synchronization/uploadTwo"; ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java
@@ -52,18 +52,18 @@ log.info("初始化OSS配置成功"); log.info("通道: {} 监听中......", "OSS"); // 项目初始化设置一次即可 // QueueUtils.subscribeBlockingQueue("OSS", (String ossId) -> { // // 观察接收时间 // log.info("通道: {}, 收到数据: {}", "OSS", ossId); // SysOssVo vo = ossMapper.selectVoById(ossId); // client.delete( vo.getUrl()); // ossMapper.deleteById(Long.valueOf(ossId)); // try { // HttpUtils.sendDeleteRequest(boundary.getVideo() + "/resource/synchronization/delete",ossId); // } catch (IOException e) { // throw new RuntimeException(e); // } // }); QueueUtils.subscribeBlockingQueue("OSS", (String ossId) -> { // 观察接收时间 log.info("通道: {}, 收到数据: {}", "OSS", ossId); SysOssVo vo = ossMapper.selectVoById(ossId); client.delete( vo.getUrl()); ossMapper.deleteById(Long.valueOf(ossId)); try { HttpUtils.sendDeleteRequest(boundary.getVideo() + "/resource/synchronization/delete",ossId); } catch (IOException e) { throw new RuntimeException(e); } }); } } ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
@@ -231,7 +231,7 @@ request.setCreateBy("1731588854831022081"); request.setOssId(String.valueOf(oss.getOssId())); // request.setOssId(); post(request); // post(request); SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class); return this.matchingUrl(sysOssVo);