qirong
2023-12-08 fb766b5ff9f913561f76aa747c76eae5c3678589
三方同步
11个文件已修改
394 ■■■■ 已修改文件
ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-prod.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/config/WebSocketConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisPubSubController.java 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);