‘liusuyi’
2023-07-17 1e79a0e52ad5c666d38f900ae10ee92e26804da4
提交
已添加1个文件
已重命名1个文件
已修改14个文件
已删除1个文件
454 ■■■■■ 文件已修改
ard-work/pom.xml 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/media/domain/Items.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/rongcloud/controller/RongCloudController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/rongcloud/domain/RongCloudParam.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/rongcloud/service/Impl/RongCloudServiceImpl.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/rongcloud/service/MyAddressSource.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/rongcloud/service/RongCloudService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/forest/RongCloudClient.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/pom.xml
@@ -65,18 +65,12 @@
            <artifactId>minio</artifactId>
            <version>8.3.5</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.6.2</version>
            <scope>compile</scope>
        </dependency>
        <!-- Forest -->
        <dependency>
            <groupId>com.dtflys.forest</groupId>
            <artifactId>forest-spring-boot-starter</artifactId>
            <version>1.5.22</version>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>io.swagger</groupId>-->
<!--            <artifactId>swagger-annotations</artifactId>-->
<!--            <version>1.6.2</version>-->
<!--            <scope>compile</scope>-->
<!--        </dependency>-->
        <!--mqtt-->
        <dependency>
            <groupId>org.springframework.integration</groupId>
@@ -87,18 +81,22 @@
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-system</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-core</artifactId>
            <version>3.0.0</version>
            <scope>compile</scope>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>io.springfox</groupId>-->
<!--            <artifactId>springfox-core</artifactId>-->
<!--            <version>3.0.0</version>-->
<!--            <scope>compile</scope>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-annotations</artifactId>
            <artifactId>knife4j-spring</artifactId>
            <version>2.0.9</version>
            <scope>compile</scope>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>com.github.xiaoymin</groupId>-->
<!--            <artifactId>knife4j-annotations</artifactId>-->
<!--            <version>2.0.9</version>-->
<!--        </dependency>-->
        <!--张建提供引导依赖-->
        <dependency>
            <groupId>org.gavaghan</groupId>
@@ -114,7 +112,7 @@
        <dependency>
            <groupId>com.dtflys.forest</groupId>
            <artifactId>forest-spring-boot-starter</artifactId>
            <version>1.5.22</version>
            <version>1.5.28</version>
        </dependency>
    </dependencies>
ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
@@ -45,8 +45,9 @@
    @GetMapping("/getPaths")
    @ApiOperation("获取当前转码列表")
    public AjaxResult getPaths() {
        return AjaxResult.success(mediaService.paths());
    public TableDataInfo getPaths() {
        startPage();
        return getDataTable(mediaService.paths());
    }
    @GetMapping("/getRtspSessions")
ard-work/src/main/java/com/ruoyi/media/domain/Items.java
@@ -24,7 +24,7 @@
    private List<Readers> readers;
    private boolean sourceReady;
    private List<String> tracks;
    private String mode;
    private String id;
    private Date created;
ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java
@@ -9,7 +9,7 @@
    public String addPath(String name, String rtspPath);
    public void removePath(String name);
    public List<Items>paths();
    public List<StreamInfo>paths();
    public List<Items> rtspconns();
    public List<Items> rtspsessions();
ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
@@ -1,10 +1,12 @@
package com.ruoyi.media.service.impl;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.media.domain.*;
import com.ruoyi.media.service.IMediaService;
import com.ruoyi.utils.forest.MediaClient;
import com.ruoyi.utils.tools.ArdTool;
import io.minio.messages.Item;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -61,11 +63,46 @@
    }
    @Override
    public List<Items> paths() {
    public List<StreamInfo> paths() {
        String apiUrl = "http://" + mediamtxHost + ":9997/v2";
        String list = mediaClient.paths(apiUrl);
        JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
        return jsonsRoot.getItems();
        List<Items> items = jsonsRoot.getItems();
        List<StreamInfo> pathInfoList = new ArrayList<>();
        for (Items item : items) {
            StreamInfo info = new StreamInfo();
            //ID
            String name = item.getName();
            info.setName(name);
            String runoninit="";
            String runondemand = item.getConf().getRunondemand();
            if (StringUtils.isNotEmpty(runondemand))
            {
                runoninit= item.getConf().getRunondemand();
            }
            else
            {
                runoninit = item.getConf().getRunoninit();
            }
            //RTSP源地址
            runoninit = item.getConf().getRunondemand();
            String regex = "rtsp://[^\\s\"]+";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(runoninit);
            if (matcher.find()) {
                info.setRtspSource(matcher.group());
            }
            //传输协议
            regex = "-rtsp_transport\\s+(\\w+)";
            pattern = Pattern.compile(regex);
            matcher = pattern.matcher(runoninit);
            if (matcher.find()) {
                info.setProtocol(matcher.group(1));
            }
            pathInfoList.add(info);
        }
        return pathInfoList;
    }
    @Override
ard-work/src/main/java/com/ruoyi/rongcloud/controller/RongCloudController.java
@@ -7,13 +7,12 @@
import com.ruoyi.rongcloud.service.RongCloudService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * @Description:
@@ -37,6 +36,7 @@
        String token = rongCloudService.getToken(userId, name);
        return AjaxResult.success(token);
    }
    @PostMapping("/uploadPic")
    @ApiOperation("上传用户头像")
    public AjaxResult uploadPic(MultipartFile file)
@@ -44,4 +44,13 @@
        String url = MinioUtils.putObjectAndGetUrl("useravatar", file);
        return AjaxResult.success(url);
    }
    @PostMapping("/checkOnline")
    @ApiOperation("查询用户在线状态")
    public AjaxResult checkOnline(@RequestBody List<String> userIds)
    {
        Map map = rongCloudService.checkOnline(userIds);
        return AjaxResult.success(map);
    }
}
ard-work/src/main/java/com/ruoyi/rongcloud/domain/RongCloudParam.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/rongcloud/domain/TokenParam.java ÐÞ¸Ä
@@ -4,13 +4,13 @@
/**
 * @Description:
 * @ClassName: TokenParam
 * @ClassName: rongCloudParam
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´07月15日16:54:39
 * @Version: 1.0
 **/
@Data
public class TokenParam {
public class RongCloudParam {
    String userId;
    String name;
}
ard-work/src/main/java/com/ruoyi/rongcloud/service/Impl/RongCloudServiceImpl.java
@@ -1,32 +1,23 @@
package com.ruoyi.rongcloud.service.Impl;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.util.JSONPObject;
import com.ruoyi.alarm.stealAlarm.domain.ArdAlarmStealelec;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.common.utils.uuid.UUID;
import com.ruoyi.rongcloud.domain.TokenParam;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.rongcloud.domain.RongCloudParam;
import com.ruoyi.rongcloud.service.RongCloudService;
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.utils.forest.RongCloudClient;
import lombok.extern.slf4j.Slf4j;
import okhttp3.FormBody;
import okhttp3.RequestBody;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import static org.bouncycastle.asn1.x500.style.RFC4519Style.l;
/**
 * @Description:
 * @Description: é€šèžä¸šåŠ¡æœåŠ¡
 * @ClassName: RongCloudServiceImpl
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´07月15日16:49:12
@@ -39,30 +30,57 @@
    @Resource
    RongCloudClient rongCloudClient;
    @Resource
    ISysConfigService iSysConfigService;
    @Override
    public String getToken(String userId,String name) {
    RedisCache redisCache;
        String token="";
    /**
     * èŽ·å–èžäº‘token
     *
     * @param userId ç”¨æˆ·id
     * @param name   ç”¨æˆ·å§“名
     */
    @Override
    public String getToken(String userId, String name) {
        String token = "";
        try {
            String rongyunApiUrl = iSysConfigService.selectConfigByKey("rongyun");
            String appKey = iSysConfigService.selectConfigByKey("RongCloudAppKey");
            String appSecret = iSysConfigService.selectConfigByKey("RongCloudAppSecret");
            TokenParam param = new TokenParam();
            RongCloudParam param = new RongCloudParam();
            param.setUserId(userId);
            param.setName(name);
            String Nonce = RandomStringUtils.randomNumeric(18);
            String Timestamp = String.valueOf(new Date().getTime());
            String Signature = DigestUtils.sha1Hex(appSecret + Nonce + Timestamp);//App Secret + Nonce + Timestamp
            String jsonStr = rongCloudClient.getToken(rongyunApiUrl, appKey, Nonce, Timestamp, Signature, param);
            Map map = JSONObject.parseObject(jsonStr, Map.class);
            Map map = rongCloudClient.getToken(getRongCloudHead(), param);
            token = (String) map.get("token");
            log.debug("用户"+userId+"获取到融云token:"+token);
        }
        catch (Exception ex)
        {
            log.error("获取token异常:"+ex.getMessage());
            log.debug("用户" + userId + "获取到融云token:" + token);
        } catch (Exception ex) {
            log.error("获取token异常:" + ex.getMessage());
        }
        return token;
    }
    @Override
    public Map checkOnline(List<String> userIds) {
        Map<String, Object> onlineMap = new HashMap<>();
        for (String userId : userIds) {
            RongCloudParam param = new RongCloudParam();
            param.setUserId(userId);
            Map isOnline = rongCloudClient.checkOnline(getRongCloudHead(), param);
            onlineMap.put(userId, isOnline.get("status"));
        }
        return onlineMap;
    }
    /**
     * èŽ·å–èžäº‘ç­¾åä¿¡æ¯
     */
    public Map<String, Object> getRongCloudHead() {
        String appKey = redisCache.getCacheObject("sys_config:RongCloudAppKey");
        String appSecret = redisCache.getCacheObject("sys_config:RongCloudAppSecret");
        String nonce = RandomStringUtils.randomNumeric(18);
        String timestamp = String.valueOf(new Date().getTime());
        String signature = DigestUtils.sha1Hex(appSecret + nonce + timestamp);//App Secret + Nonce + T
        Map<String, Object> headerMap=new HashMap<>();
        headerMap.put("App-Key",appKey);
        headerMap.put("Nonce",nonce);
        headerMap.put("Timestamp",timestamp);
        headerMap.put("Signature",signature);
        return headerMap;
    }
}
ard-work/src/main/java/com/ruoyi/rongcloud/service/MyAddressSource.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.ruoyi.rongcloud.service;
import com.dtflys.forest.callback.AddressSource;
import com.dtflys.forest.http.ForestAddress;
import com.dtflys.forest.http.ForestRequest;
import com.ruoyi.common.core.redis.RedisCache;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.net.MalformedURLException;
import java.net.URL;
/**
 * @Description:
 * @ClassName: MyAddressSource
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´07月17日13:40:46
 * @Version: 1.0
 **/
@Component
public class MyAddressSource implements AddressSource {
    @Resource
    RedisCache redisCache;
    @Override
    public ForestAddress getAddress(ForestRequest forestRequest) {
        String apiUrl = redisCache.getCacheObject("sys_config:rongyun");
        URL url = null;
        try {
            url = new URL(apiUrl);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        String host = url.getHost();
        int port = url.getPort();
        return new ForestAddress(host,port);
    }
}
ard-work/src/main/java/com/ruoyi/rongcloud/service/RongCloudService.java
@@ -1,5 +1,8 @@
package com.ruoyi.rongcloud.service;
import java.util.List;
import java.util.Map;
/**
 * @Description:
 * @ClassName: RongCloudService
@@ -10,4 +13,5 @@
public interface RongCloudService {
    String getToken(String userId,String name);
    Map checkOnline(List<String>userIds);
}
ard-work/src/main/java/com/ruoyi/utils/forest/RongCloudClient.java
@@ -1,24 +1,20 @@
package com.ruoyi.utils.forest;
import com.dtflys.forest.annotation.BaseRequest;
import com.dtflys.forest.annotation.Body;
import com.dtflys.forest.annotation.Post;
import com.dtflys.forest.annotation.Var;
import com.ruoyi.rongcloud.domain.TokenParam;
import com.dtflys.forest.annotation.*;
import com.ruoyi.rongcloud.domain.RongCloudParam;
import com.ruoyi.rongcloud.service.MyAddressSource;
import java.util.Map;
@BaseRequest(
        baseURL = "{rongyunApiUrl}",
        headers = {
                "App-Key:{AppKey}",
                "Nonce:{Nonce}",
                "Timestamp:{Timestamp}",
                "Signature:{Signature}",
        },
        sslProtocol = "TLS"
)
@Address(source = MyAddressSource.class)
public interface RongCloudClient {
    @Post(url = "/user/getToken.json")
    public String getToken(@Var("rongyunApiUrl") String rongyunApiUrl,@Var("AppKey") String AppKey, @Var("Nonce") String Nonce, @Var("Timestamp") String Timestamp, @Var("Signature") String Signature, @Body TokenParam param);
    Map getToken(@Header Map<String, Object> headerMap, @Body RongCloudParam param);
    @Post(url = "user/checkOnline.json")
    Map checkOnline(@Header Map<String, Object> headerMap, @Body RongCloudParam param);
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -65,6 +65,7 @@
     * @return ç”¨æˆ·ä¿¡æ¯
     */
    @GetMapping("getInfo")
    @ApiOperation(value = "获取用户信息")
    public AjaxResult getInfo()
    {
        SysUser user = SecurityUtils.getLoginUser().getUser();
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -5,6 +5,7 @@
import javax.servlet.http.HttpServletResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -40,6 +41,7 @@
 * 
 * @author ruoyi
 */
//@Api(tags = "用户信息")
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController
@@ -59,6 +61,7 @@
    /**
     * èŽ·å–ç”¨æˆ·åˆ—è¡¨
     */
//    @ApiOperation(value = "获取用户列表")
    @PreAuthorize("@ss.hasPermi('system:user:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysUser user)
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
ÎļþÒÑɾ³ý
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
@@ -14,7 +14,7 @@
 * 
 * @author ruoyi
 */
@JsonInclude(JsonInclude.Include.NON_NULL)//该注解过滤为空的字段
//@JsonInclude(JsonInclude.Include.NON_NULL)//该注解过滤为空的字段
public class BaseEntity implements Serializable
{
    private static final long serialVersionUID = 1L;
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -2,6 +2,8 @@
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.annotation.Excel.Type;
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -143,7 +143,7 @@
            SysUser sysUser = new SysUser();
            sysUser.setUserId(userId);
            sysUser.setRongCloudToken(token);
            userService.updateUser(sysUser);
            userService.updateUserProfile(sysUser);
        } catch (Exception ex) {
            throw ex;
        }