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; }