From 016aa105789fca71e86cdbb0d26a181812f200f9 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: 星期三, 10 七月 2024 15:33:36 +0800
Subject: [PATCH] 优化:流媒体同步任务
---
ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java | 9
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionUserController.java | 9
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/lib/ToolKits.java | 2
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java | 43 ++
ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java | 6
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java | 49 ++
ard-work/src/main/java/com/ruoyi/media/domain/RtmpSession.java | 1
ard-work/src/main/java/com/ruoyi/media/domain/Vtdu.java | 1
ard-work/src/main/java/com/ruoyi/media/domain/Items.java | 2
ard-work/src/main/java/com/ruoyi/media/service/impl/MediaV2ServiceImpl.java | 26 -
ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java | 118 +++---
ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java | 47 ++
ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java | 67 ++++
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 31 -
ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java | 22 -
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionUserMapper.java | 2
ard-work/src/main/java/com/ruoyi/media/domain/RtspSession.java | 1
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PushTask.java | 105 +++---
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/ConfigModule.java | 16
ard-work/src/main/java/com/ruoyi/media/service/IVtduService.java | 55 ++
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java | 19 +
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java | 73 ++--
ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java | 31 +
ard-work/src/main/java/com/ruoyi/media/domain/Paths.java | 3
ard-work/src/main/java/com/ruoyi/call/dto/CallMessage.java | 20 +
ard-work/src/main/java/com/ruoyi/media/domain/WebrtcSession.java | 1
ard-work/src/main/java/com/ruoyi/media/mapper/VtduMapper.java | 20
ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java | 5
ard-work/src/main/resources/mapper/vtdu/VtduMapper.xml | 3
ard-work/src/main/java/com/ruoyi/device/channel/service/IArdChannelService.java | 25 +
ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java | 64 +--
ard-work/src/main/resources/mapper/call/ArdCallSessionUserMapper.xml | 5
ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java | 27 -
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java | 5
ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionUserService.java | 2
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionUserServiceImpl.java | 19 +
36 files changed, 591 insertions(+), 343 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
index 2099754..3b5c939 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -31,19 +31,22 @@
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
+import java.net.InetAddress;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.UnknownHostException;
import java.util.*;
/**
* app浣嶇疆Controller
- *
+ *
* @author ard
* @date 2023-07-18
*/
@Api(tags = "app浣嶇疆")
@RestController
@RequestMapping("/app/position")
-public class ArdAppPositionController extends BaseController
-{
+public class ArdAppPositionController extends BaseController {
@Autowired
private IArdAppPositionService ardAppPositionService;
@Autowired
@@ -57,8 +60,7 @@
@ApiOperation("鏌ヨapp浣嶇疆鍒楄〃")
// @PreAuthorize("@ss.hasPermi('app:position:list')")
@GetMapping("/list")
- public TableDataInfo list(ArdAppPosition ardAppPosition)
- {
+ public TableDataInfo list(ArdAppPosition ardAppPosition) {
startPage();
List<ArdAppPosition> list = ardAppPositionService.selectArdAppPositionList(ardAppPosition);
return getDataTable(list);
@@ -70,8 +72,7 @@
@PreAuthorize("@ss.hasPermi('app:position:export')")
@Log(title = "app浣嶇疆", businessType = BusinessType.EXPORT)
@PostMapping("/export")
- public void export(HttpServletResponse response, ArdAppPosition ardAppPosition)
- {
+ public void export(HttpServletResponse response, ArdAppPosition ardAppPosition) {
List<ArdAppPosition> list = ardAppPositionService.selectArdAppPositionList(ardAppPosition);
ExcelUtil<ArdAppPosition> util = new ExcelUtil<ArdAppPosition>(ArdAppPosition.class);
util.exportExcel(response, list, "app浣嶇疆鏁版嵁");
@@ -82,8 +83,7 @@
*/
@PreAuthorize("@ss.hasPermi('app:position:query')")
@GetMapping(value = "/{id}")
- public AjaxResult getInfo(@PathVariable("id") String id)
- {
+ public AjaxResult getInfo(@PathVariable("id") String id) {
return success(ardAppPositionService.selectArdAppPositionById(id));
}
@@ -94,8 +94,7 @@
// @PreAuthorize("@ss.hasPermi('app:position:add')")
@Log(title = "app浣嶇疆", businessType = BusinessType.INSERT)
@PostMapping
- public AjaxResult add(@RequestBody ArdAppPosition ardAppPosition)
- {
+ public AjaxResult add(@RequestBody ArdAppPosition ardAppPosition) {
return AjaxResult.success(ardAppPositionService.insertArdAppPosition(ardAppPosition));
}
@@ -105,8 +104,7 @@
@PreAuthorize("@ss.hasPermi('app:position:edit')")
@Log(title = "app浣嶇疆", businessType = BusinessType.UPDATE)
@PutMapping
- public AjaxResult edit(@RequestBody ArdAppPosition ardAppPosition)
- {
+ public AjaxResult edit(@RequestBody ArdAppPosition ardAppPosition) {
return toAjax(ardAppPositionService.updateArdAppPosition(ardAppPosition));
}
@@ -115,19 +113,18 @@
*/
@PreAuthorize("@ss.hasPermi('app:position:remove')")
@Log(title = "app浣嶇疆", businessType = BusinessType.DELETE)
- @DeleteMapping("/{ids}")
- public AjaxResult remove(@PathVariable String[] ids)
- {
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids) {
return toAjax(ardAppPositionService.deleteArdAppPositionByIds(ids));
}
+
/**
* 鑾峰彇鎵�鏈夌敤鎴�
*/
@ApiOperation("鑾峰彇鎵�鏈夌敤鎴�")
@GetMapping("/getUserlist")
- public AjaxResult getUserlist(Long deptId)
- {
- SysUser user=new SysUser();
+ public AjaxResult getUserlist(Long deptId) {
+ SysUser user = new SysUser();
user.setDeptId(deptId);
List<SysUser> list = sysUserService.selectUserList(user);
return AjaxResult.success(list);
@@ -144,57 +141,50 @@
List<SysUser> list = sysUserService.selectAllAppUserList(user);
return AjaxResult.success(list);
}
+
/**
* 鑾峰彇鎵�鏈塧pp鐢ㄦ埛
*/
@ApiOperation("鑾峰彇鎵�鏈塧pp鐢ㄦ埛pc")
@GetMapping("/getAppUserForPclist")
- public AjaxResult getAppUserForPclist(Long deptId)
- {
- SysUser user=new SysUser();
+ public AjaxResult getAppUserForPclist(Long deptId) {
+ SysUser user = new SysUser();
user.setDeptId(deptId);
List<SysUser> list = sysUserService.selectAllAppUserList(user);
- List<SysUser> onLineList=new ArrayList<>();
- List<SysUser> offLineList=new ArrayList<>();
- for(SysUser sysUser:list)
- {
+ List<SysUser> onLineList = new ArrayList<>();
+ List<SysUser> offLineList = new ArrayList<>();
+ for (SysUser sysUser : list) {
ArdAppPosition ardAppPosition = ardAppPositionService.selectLastArdAppPositionByUserId(sysUser.getUserId());
- if(ardAppPosition!=null) {
- Map<String, Object> params =new HashMap<>();
+ if (ardAppPosition != null) {
+ Map<String, Object> params = new HashMap<>();
params.put("longitude", ardAppPosition.getLongitude());
params.put("latitude", ardAppPosition.getLatitude());
params.put("altitude", ardAppPosition.getAltitude());
params.put("bearing", ardAppPosition.getBearing());
sysUser.setParams(params);
}
- if(StringUtils.isNotNull(sysUser.getAppOnlineState()))
- {
- if(sysUser.getAppOnlineState().equals("1"))
- {
+ if (StringUtils.isNotNull(sysUser.getAppOnlineState())) {
+ if (sysUser.getAppOnlineState().equals("1")) {
onLineList.add(sysUser);
- }
- else
- {
+ } else {
offLineList.add(sysUser);
}
- }
- else
- {
+ } else {
offLineList.add(sysUser);
}
}
- Map<String,Object> onlineMap=new HashMap<>();
- onlineMap.put("children",onLineList);
- onlineMap.put("name","鍦ㄧ嚎鐢ㄦ埛("+onLineList.size()+")");
- onlineMap.put("disabled",true);
- onlineMap.put("id","onLine");
- Map<String,Object> offlineMap=new HashMap<>();
- offlineMap.put("children",offLineList);
- offlineMap.put("name","绂荤嚎鐢ㄦ埛("+offLineList.size()+")");
- offlineMap.put("disabled",true);
- offlineMap.put("id","offLine");
- List< Map<String,Object> > lists = new ArrayList<>();
+ Map<String, Object> onlineMap = new HashMap<>();
+ onlineMap.put("children", onLineList);
+ onlineMap.put("name", "鍦ㄧ嚎鐢ㄦ埛(" + onLineList.size() + ")");
+ onlineMap.put("disabled", true);
+ onlineMap.put("id", "onLine");
+ Map<String, Object> offlineMap = new HashMap<>();
+ offlineMap.put("children", offLineList);
+ offlineMap.put("name", "绂荤嚎鐢ㄦ埛(" + offLineList.size() + ")");
+ offlineMap.put("disabled", true);
+ offlineMap.put("id", "offLine");
+ List<Map<String, Object>> lists = new ArrayList<>();
lists.add(onlineMap);
lists.add(offlineMap);
return AjaxResult.success(lists);
@@ -205,24 +195,28 @@
*/
@ApiOperation("鑾峰彇鐢ㄦ埛璇︽儏")
@GetMapping("/getUserInfo")
- public AjaxResult getUserInfo(String userId)
- {
+ public AjaxResult getUserInfo(String userId) {
SysUser sysUser = sysUserService.selectUserById(userId);
return AjaxResult.success(sysUser);
}
+
@PostMapping("/uploadFile")
@ApiOperation("涓婁紶鏂囦欢")
- public AjaxResult uploadFile(MultipartFile file,String type)
- {
- String url = MinioUtil.putObjectAndGetUrl("app",type, file);
- return AjaxResult.success(url);
+ public AjaxResult uploadFile(MultipartFile file, String type) throws MalformedURLException, UnknownHostException {
+ String urlStr = MinioUtil.putObjectAndGetUrl("app", type, file);
+ URL url = new URL(urlStr);
+ // 鏇挎崲 https 涓� http锛屽苟灏嗕富鏈哄悕鍜岀鍙e彿鏇挎崲涓烘湰鍦板湴鍧�
+ String serverIpAddress = InetAddress.getLocalHost().getHostAddress();
+ // 鏋勫缓鏂扮殑 URL 瀵硅薄锛屼娇鐢� HTTPS 鍗忚
+ URL httpsUrl = new URL("https", serverIpAddress, url.getPort(), url.getFile());
+ return AjaxResult.success(httpsUrl);
}
@GetMapping("/getOnlinePCOrCommander")
@ApiOperation("鏌ヨ鏈儴闂ㄥ湪绾縋C绔強鎸囨尌绔�")
public AjaxResult getOnlinePCOrCommander() {
String usersId = SecurityUtils.getUserId();
- Map<String,List<SysUser>> result = ardAppPositionService.getOnlinePCOrCommander(usersId);
+ Map<String, List<SysUser>> result = ardAppPositionService.getOnlinePCOrCommander(usersId);
return AjaxResult.success(result);
}
@@ -230,10 +224,10 @@
@ApiOperation("鍗曞叺绔煡鐪嬪凡閫氳繃瀹℃壒鐨勫湪绾挎寚鎸ョ浣嶇疆")
public AjaxResult getOnlineCommanderPosition() {
String soilderId = SecurityUtils.getUserId();
- try{
- List<Map<String,Object>> result = ardAppPositionService.getOnlineCommanderPosition(soilderId);
+ try {
+ List<Map<String, Object>> result = ardAppPositionService.getOnlineCommanderPosition(soilderId);
return AjaxResult.success(result);
- }catch(Exception e){
+ } catch (Exception e) {
e.printStackTrace();
return AjaxResult.error();
}
@@ -241,11 +235,11 @@
@PostMapping("/getAPPPositionByUserIdAndTime")
@ApiOperation("鏌ョ湅APP鍘嗗彶浣嶇疆")
- public AjaxResult getAPPPositionByUserIdAndTime(@RequestBody Map<String,String> para) {
- try{
+ public AjaxResult getAPPPositionByUserIdAndTime(@RequestBody Map<String, String> para) {
+ try {
List<ArdAppPosition> result = ardAppPositionService.getAPPPositionByUserIdAndTime(para);
return AjaxResult.success(result);
- }catch(Exception e){
+ } catch (Exception e) {
e.printStackTrace();
return AjaxResult.error();
}
diff --git a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java
index 00d1980..d60f957 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java
@@ -126,6 +126,10 @@
Map<String, Object> map = JSONObject.parseObject(message, Map.class);
if (map.size() > 0) {
Boolean enabled = (Boolean) map.get("enabled");
+ if(enabled==null)
+ {
+ return;
+ }
if (enabled) {
//鍚姩鍏ㄥ眬鎺ㄩ��
List<ArdAppPosition> newList = new ArrayList<>(AppPositionPushService.getAppPositionList());
@@ -172,24 +176,6 @@
AppPositionPushService.tempUserTimerMap.remove(userId);
AppPositionPushService.tempDataMap.remove(userId);
}
- //region 鏃ф柟娉�
-// Map<String, List<ArdAppPosition>> dataMap = new HashMap<>();
-// List<ArdAppPosition> positionList = AppPositionPush.initDataMap.get(userId);//鑾峰彇褰撳墠鐢ㄦ埛鐨勯粯璁ゅ彂閫佺殑鏁版嵁map
-// if(frequency>0)
-// {
-// //鎺ユ敹鍒伴鐜囧ぇ浜�0锛屽睘浜庣敵璇峰紩瀵硷紝鑾峰彇闄ゅ紩瀵煎鐨勫叾浠朼pp鐢ㄦ埛鐨勪綅缃甃ist
-// List<ArdAppPosition> appPositionList = positionList.stream()
-// .filter(obj -> !obj.getUserId().equals(uId))
-// .collect(Collectors.toList());
-// dataMap.put(userId,appPositionList);
-// }
-// else {
-// //鎺ユ敹鍒伴鐜囩瓑浜�0锛屽睘浜庨噴鏀惧紩瀵硷紝鑾峰彇鍒板叏閮╝pp鐢ㄦ埛鐨勪綅缃甃ist
-// dataMap.put(userId,AppPositionPush.getAppPositionList());
-// }
-// AppPositionPush.initDataMap.putAll(dataMap);//鏇存柊鍒濆浼氳瘽榛樿鏁版嵁map
-// AppPositionPush.startLocationPushTask(userId,session,uId, frequency);//寮�鍚柊浠诲姟
- //endregion
}
}
catch (Exception ex)
diff --git a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionUserController.java b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionUserController.java
index 5d83e2e..75dd55d 100644
--- a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionUserController.java
+++ b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionUserController.java
@@ -57,11 +57,12 @@
}
/**
- * 鑾峰彇浼氳瘽鐢ㄦ埛涓棿琛ㄨ缁嗕俊鎭�
+ * 鑾峰彇浼氳瘽璇︽儏
*/
- @GetMapping(value = "/{id}")
- public AjaxResult getInfo(@PathVariable("id") String id) {
- return success(ardCallSessionUserService.selectArdCallSessionUserById(id));
+ @ApiOperation("鑾峰彇浼氳瘽璇︽儏")
+ @GetMapping(value = "/{userId}/{sessionId}")
+ public AjaxResult getInfo(@PathVariable("userId") String userId,@PathVariable("sessionId") String sessionId) {
+ return success(ardCallSessionUserService.selectArdCallSessionUserBySesionId(userId,sessionId));
}
/**
diff --git a/ard-work/src/main/java/com/ruoyi/call/dto/CallMessage.java b/ard-work/src/main/java/com/ruoyi/call/dto/CallMessage.java
new file mode 100644
index 0000000..56cca2a
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/call/dto/CallMessage.java
@@ -0,0 +1,20 @@
+package com.ruoyi.call.dto;
+
+import lombok.Data;
+
+/**
+ * @ClassName:CallMessage
+ * @Description:
+ * @Author:ard
+ * @Date:2024骞�07鏈�08鏃�13:48
+ * @Version:1.0
+ **/
+@Data
+public class CallMessage {
+ String step;
+ String roomId;
+ String userId;
+ String targetId;
+ Integer mediaType;
+ Integer type;
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionUserMapper.java b/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionUserMapper.java
index fd7d26e..8e54a4e 100644
--- a/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionUserMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionUserMapper.java
@@ -19,7 +19,7 @@
* @return 浼氳瘽鐢ㄦ埛涓棿琛�
*/
public ArdCallSessionUser selectArdCallSessionUserById(String id);
-
+ public ArdCallSessionUser selectArdCallSessionUserBySesionId(@Param("userId") String userId,@Param("sessionId") String sessionId);
/**
* 鏌ヨ浼氳瘽鐢ㄦ埛涓棿琛ㄥ垪琛�
*
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionUserService.java b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionUserService.java
index f8aa9e5..9441907 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionUserService.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionUserService.java
@@ -18,7 +18,7 @@
* @return 浼氳瘽鐢ㄦ埛涓棿琛�
*/
public ArdCallSessionUser selectArdCallSessionUserById(String id);
-
+ public ArdCallSessionUser selectArdCallSessionUserBySesionId(String userId,String sessionId);
/**
* 鏌ヨ浼氳瘽鐢ㄦ埛涓棿琛ㄥ垪琛�
*
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java
index a2962b4..668544f 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java
@@ -4,6 +4,8 @@
import java.util.List;
import com.ruoyi.call.domain.ArdCallGroup;
+import com.ruoyi.call.domain.ArdCallSessionUser;
+import com.ruoyi.call.mapper.ArdCallSessionUserMapper;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
@@ -36,6 +38,8 @@
private ArdCallGroupUserMapper ardCallGroupUserMapper;
@Resource
private SysUserMapper sysUserMapper;
+ @Resource
+ private ArdCallSessionUserMapper ardCallSessionUserMapper;
/**
* 鏌ヨ缇ょ粍鐢ㄦ埛涓棿
@@ -130,6 +134,19 @@
ardCallGroupUser.setCreateTime(DateUtils.getNowDate());
ardCallGroupUser.setUserId(userId);
ardCallGroupUserMapper.insertArdCallGroupUser(ardCallGroupUser);
+ //閭�璇锋垚鍛樻垚鍔熷悗鍒涘缓session
+ //閫氳繃缇d鑾峰彇缇ession
+ String sessionId = ardCallSessionUserMapper.getGroupSessionId("1", id);
+ if (StringUtils.isNotEmpty(sessionId)) {
+ ArdCallSessionUser ardCallSessionUser = new ArdCallSessionUser();
+ ardCallSessionUser.setId(IdUtils.simpleUUID());
+ ardCallSessionUser.setType("1");
+ ardCallSessionUser.setSessionId(sessionId);
+ ardCallSessionUser.setUserId(userId);
+ ardCallSessionUser.setTargetId(id);
+ ardCallSessionUser.setCreateTime(DateUtils.getNowDate());
+ ardCallSessionUserMapper.insertArdCallSessionUser(ardCallSessionUser);
+ }
});
return userIds.length;
}
@@ -151,7 +168,7 @@
//鑾峰彇骞冲彴鎵�鏈夌敤鎴�
List<SysUser> userList = sysUserMapper.selectUserList(new SysUser());
//鑾峰彇缇ょ粍鍐呯敤鎴�
- ArdCallGroupUser ardCallGroupUser=new ArdCallGroupUser();
+ ArdCallGroupUser ardCallGroupUser = new ArdCallGroupUser();
ardCallGroupUser.setGroupId(groupId);
List<ArdCallGroupUser> ardCallGroupUsers = ardCallGroupUserMapper.selectArdCallGroupUserList(ardCallGroupUser);
// 鎻愬彇groupList涓殑userId鍒颁竴涓猄et涓�
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
index 8667806..82014e5 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
@@ -1,7 +1,10 @@
package com.ruoyi.call.service.impl;
+import java.util.HashMap;
import java.util.List;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.call.domain.*;
import com.ruoyi.call.mapper.*;
import com.ruoyi.common.utils.DateUtils;
@@ -13,12 +16,17 @@
import org.springframework.stereotype.Service;
import java.util.ArrayList;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.call.service.IArdCallHistoryService;
import javax.annotation.Resource;
+import javax.websocket.Session;
import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
@@ -69,6 +77,8 @@
*/
@Override
public int insertArdCallHistory(ArdCallHistory ardCallHistory) {
+
+
ardCallHistory.setId(IdUtils.simpleUUID());
ardCallHistory.setCreateTime(DateUtils.getNowDate());
ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(ardCallHistory.getSessionId());
@@ -86,7 +96,20 @@
ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
}
//websocket鍙戦�佺粰targetId
- WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(ardCallHistory.getTargetId()),ardCallHistory.getContent());
+ // 鏋勫缓姝e垯琛ㄨ揪寮忔ā寮�
+ String regex = "^" + Pattern.quote(ardCallHistory.getTargetId()) + "_\\d+$";
+ Pattern pattern = Pattern.compile(regex);
+ Map<String, Object> messageMap = new HashMap<>();
+ messageMap.put("type", "message");
+ messageMap.put("message", JSON.toJSONString(ardCallHistory));
+ ONLINE_USER_SESSIONS.entrySet().stream()
+ .filter(entry -> {
+ Matcher matcher = pattern.matcher(entry.getKey());
+ return matcher.matches();
+ })
+ .map(Map.Entry::getValue)
+ .forEach(session -> WebSocketUtils.sendMessage(session, messageMap));
+
} else {
//鏇存柊缇よ亰鐢ㄦ埛鏈娑堟伅璁℃暟
ArdCallGroupUser ardCallGroupUser = new ArdCallGroupUser();
@@ -106,9 +129,23 @@
ardCallUnreadMessages.setUnreadCount(ardCallUnreadMessages.getUnreadCount() + 1);
ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
}
+ //websocket鍙戦�佺粰targetId
+ // 鏋勫缓姝e垯琛ㄨ揪寮忔ā寮�
+ String regex = "^" + Pattern.quote(groupUser.getUserId()) + "_\\d+$";
+ Pattern pattern = Pattern.compile(regex);
+ Map<String, Object> messageMap = new HashMap<>();
+ messageMap.put("type", "message");
+ messageMap.put("message", JSON.toJSONString(ardCallHistory));
+ ONLINE_USER_SESSIONS.entrySet().stream()
+ .filter(entry ->
+ {
+ Matcher matcher = pattern.matcher(entry.getKey());
+ return matcher.matches();
+ })
+ .map(Map.Entry::getValue)
+ .forEach(session -> WebSocketUtils.sendMessage(session, messageMap));
}
- //websocket鍙戦�佺粰targetId
- WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(groupUser.getUserId()),ardCallHistory.getContent());
+
});
}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionUserServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionUserServiceImpl.java
index 13c2fdf..f6cdeea 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionUserServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionUserServiceImpl.java
@@ -54,6 +54,25 @@
return ardCallSessionUserMapper.selectArdCallSessionUserById(id);
}
+ @Override
+ public ArdCallSessionUser selectArdCallSessionUserBySesionId(String userId,String sessionId) {
+ ArdCallSessionUser ardCallSessionUser = ardCallSessionUserMapper.selectArdCallSessionUserBySesionId(userId,sessionId);
+ if(ardCallSessionUser!=null)
+ {
+ //鑾峰彇鏈鏁伴噺
+ ArdCallUnreadMessages ardCallUnreadMessages = ardCallUnreadMessagesMapper.getUnreadMessage(ardCallSessionUser.getSessionId(), ardCallSessionUser.getUserId());
+ if (ardCallUnreadMessages != null) {
+ ardCallSessionUser.setUnReadCount(ardCallUnreadMessages.getUnreadCount());
+ } else {
+ ardCallSessionUser.setUnReadCount(0);
+ }
+ //鑾峰彇鏈�鍚庝竴鏉℃秷鎭疄浣�
+ ArdCallHistory ardCallHistory = ardCallHistoryMapper.selectLastArdCallHistory(ardCallSessionUser.getSessionId());
+ ardCallSessionUser.setArdCallHistory(ardCallHistory);
+ }
+ return ardCallSessionUser;
+ }
+
/**
* 鏌ヨ浼氳瘽鐢ㄦ埛涓棿琛ㄥ垪琛�
*
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
index 63e8ade..aea448b 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -85,7 +85,8 @@
for (ArdCameras ardCamera : ardCameras) {
redisCache.setCacheObject(getCacheKey(ardCamera.getId()), ardCamera);
}
-
+ //娓呯┖娴佸獟浣�
+ vtduService.clearVtdu();
}
/**
@@ -95,7 +96,7 @@
* @Param
* @return
*/
- @Scheduled(cron = "0 0/10 * * * ?")
+ //@Scheduled(cron = "0 0/10 * * * ?")
public void clearRecordTemp()
{
log.debug("瀹氭椂娓呯悊鏈湴褰曞儚缂撳瓨鏂囦欢锛堣秴杩�1澶╋級");
diff --git a/ard-work/src/main/java/com/ruoyi/device/channel/service/IArdChannelService.java b/ard-work/src/main/java/com/ruoyi/device/channel/service/IArdChannelService.java
index e926827..eea7265 100644
--- a/ard-work/src/main/java/com/ruoyi/device/channel/service/IArdChannelService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/channel/service/IArdChannelService.java
@@ -65,4 +65,29 @@
* @return 缁撴灉
*/
public int deleteArdChannelByDeviceId(String deviceId);
+ /**
+ * @Author 鍒樿嫃涔�
+ * @Description 鑾峰彇2涓�氶亾鍒楄〃鐨勪氦闆�
+ * @Date 2024/7/10 9:38
+ * @Param
+ * @return
+ */
+ public List<ArdChannel> sameList(List<ArdChannel> oldArrayList, List<ArdChannel> newArrayList);
+ /**
+ * @Author 鍒樿嫃涔�
+ * @Description 鍙�2涓�氶亾鍒楄〃鐨勫樊闆�
+ * @Date 2024/7/10 9:39
+ * @Param
+ * @return
+ */
+ public List<ArdChannel> diffList(List<ArdChannel> firstArrayList, List<ArdChannel> secondArrayList);
+
+ /**
+ * @Author 鍒樿嫃涔�
+ * @Description 鍚屾閫氶亾淇℃伅
+ * @Date 2024/7/10 13:20
+ * @Param
+ * @return
+ */
+ public void asyncChannel(List<ArdChannel> oldArrayList, List<ArdChannel> newArrayList);
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java
index 44ec3b3..ce6565d 100644
--- a/ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.device.channel.service.impl;
import java.util.List;
+import java.util.stream.Collectors;
import com.ruoyi.common.utils.uuid.IdUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -8,6 +9,8 @@
import com.ruoyi.device.channel.mapper.ArdChannelMapper;
import com.ruoyi.device.channel.domain.ArdChannel;
import com.ruoyi.device.channel.service.IArdChannelService;
+
+import javax.annotation.Resource;
/**
* 閫氶亾绠$悊Service涓氬姟灞傚鐞�
@@ -17,7 +20,7 @@
*/
@Service
public class ArdChannelServiceImpl implements IArdChannelService {
- @Autowired
+ @Resource
private ArdChannelMapper ardChannelMapper;
/**
@@ -50,8 +53,8 @@
*/
@Override
public int insertArdChannel(ArdChannel ardChannel) {
- ardChannel.setId(IdUtils.simpleUUID());
- return ardChannelMapper.insertArdChannel(ardChannel);
+ ardChannel.setId(IdUtils.simpleUUID());
+ return ardChannelMapper.insertArdChannel(ardChannel);
}
/**
@@ -86,6 +89,7 @@
public int deleteArdChannelById(String id) {
return ardChannelMapper.deleteArdChannelById(id);
}
+
/**
* 鍒犻櫎閫氶亾绠$悊淇℃伅
*
@@ -96,4 +100,39 @@
public int deleteArdChannelByDeviceId(String deviceId) {
return ardChannelMapper.deleteArdChannelByDeviceId(deviceId);
}
-}
+
+ //姹備袱涓璞ist鐨勪氦闆�
+ @Override
+ public List<ArdChannel> sameList(List<ArdChannel> oldArrayList, List<ArdChannel> newArrayList) {
+ List<ArdChannel> resultList = newArrayList.stream()
+ .filter(item -> oldArrayList.stream().map(e -> e.getChanNo())
+ .collect(Collectors.toList()).contains(item.getChanNo()))
+ .collect(Collectors.toList());
+ return resultList;
+ }
+
+ //姹備袱涓璞ist鐨勫樊闆�
+ @Override
+ public List<ArdChannel> diffList(List<ArdChannel> firstArrayList, List<ArdChannel> secondArrayList) {
+ List<ArdChannel> resultList = firstArrayList.stream()
+ .filter(item -> !secondArrayList.stream().map(e -> e.getChanNo()).collect(Collectors.toList()).contains(item.getChanNo()))
+ .collect(Collectors.toList());
+ return resultList;
+ }
+
+ @Override
+ public void asyncChannel(List<ArdChannel> oldArrayList, List<ArdChannel> newArrayList) {
+ //闇�瑕佹洿鏂扮殑鏁版嵁,鍙傛暟椤哄簭娉ㄦ剰
+ sameList(oldArrayList, newArrayList).stream().forEach(ardChannel -> {
+ updateArdChannel(ardChannel);
+ });
+ //闇�瑕佸垹闄ょ殑鏁版嵁
+ diffList(oldArrayList, newArrayList).stream().forEach(ardChannel -> {
+ deleteArdChannelById(ardChannel.getId());
+ });
+ //闇�瑕佹柊澧炵殑鏁版嵁
+ diffList(newArrayList, oldArrayList).stream().forEach(ardChannel -> {
+ insertArdChannel(ardChannel);
+ });
+ }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java b/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
index 6b39d98..7232194 100644
--- a/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
+++ b/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
@@ -193,13 +193,4 @@
return getDataTable(mediaService.getPullStreamList());
}
- /**
- * 閰嶇疆娴佸獟浣撳弬鏁�
- */
- @PostMapping("/setConfig")
- @ApiOperation("閰嶇疆娴佸獟浣撳弬鏁�")
- @ApiOperationSupport(order = 8)
- public AjaxResult setConfig(@RequestBody Config config) {
- return AjaxResult.success(mediaService.setConfig(config));
- }
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java b/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java
index d61b746..4df6fb0 100644
--- a/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java
+++ b/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java
@@ -114,32 +114,7 @@
*/
@GetMapping(value = "/{name}/noPerm")
public AjaxResult getInfoNoPerm(@PathVariable("name") String name) {
- Vtdu vtdu = vtduService.selectVtduByName(name);
- if (vtdu != null) {
- String cameraId = name.split("_")[0];
- Integer chanNo = Integer.valueOf(name.split("_")[1]);
- CameraCmd cmd = new CameraCmd(cameraId, chanNo);
- Map<String, Object> videoCompressionCfg = cameraSdkService.getVideoCompressionCfg(cmd);
- String videoEncType = (String) videoCompressionCfg.get("videoEncType");
- if (videoEncType != null) {
- if (!videoEncType.equals("鏍囧噯h264")) {
- vtdu.setIsCode("1");
- } else {
- vtdu.setIsCode("0");
- }
- }
- else
- {
- vtdu.setIsCode("0");
- }
- //娴佸獟浣撲笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
- if (!mediaService.checkNameExist(name)) {
- mediaService.addPath(name, vtdu.getRtspSource(), vtdu.getMode(), vtdu.getIsCode());
- } else {
- vtduService.updateVtdu(vtdu);
- }
- }
- return success(vtdu);
+ return success(vtduService.selectVtduByName(name));
}
/**
* 鏂板娴佸獟浣撶鐞�
diff --git a/ard-work/src/main/java/com/ruoyi/media/domain/Items.java b/ard-work/src/main/java/com/ruoyi/media/domain/Items.java
index bd4b340..19c5351 100644
--- a/ard-work/src/main/java/com/ruoyi/media/domain/Items.java
+++ b/ard-work/src/main/java/com/ruoyi/media/domain/Items.java
@@ -23,5 +23,5 @@
private List<Readers> readers;
private List<String> tracks;
private Long bytesReceived;
-
+ private Date readyTime;
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/domain/JsonsRoot.java b/ard-work/src/main/java/com/ruoyi/media/domain/Paths.java
similarity index 78%
rename from ard-work/src/main/java/com/ruoyi/media/domain/JsonsRoot.java
rename to ard-work/src/main/java/com/ruoyi/media/domain/Paths.java
index 08fb974..d6108be 100644
--- a/ard-work/src/main/java/com/ruoyi/media/domain/JsonsRoot.java
+++ b/ard-work/src/main/java/com/ruoyi/media/domain/Paths.java
@@ -1,6 +1,5 @@
package com.ruoyi.media.domain;
-import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@@ -13,7 +12,7 @@
* @Version: 1.0
**/
@Data
-public class JsonsRoot {
+public class Paths {
private int itemCount;
diff --git a/ard-work/src/main/java/com/ruoyi/media/domain/RtmpSession.java b/ard-work/src/main/java/com/ruoyi/media/domain/RtmpSession.java
index 8969464..c9906d3 100644
--- a/ard-work/src/main/java/com/ruoyi/media/domain/RtmpSession.java
+++ b/ard-work/src/main/java/com/ruoyi/media/domain/RtmpSession.java
@@ -15,7 +15,6 @@
public class RtmpSession {
private String name;
private String id;
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date created;
private String remoteAddr;
private String state;
diff --git a/ard-work/src/main/java/com/ruoyi/media/domain/RtspSession.java b/ard-work/src/main/java/com/ruoyi/media/domain/RtspSession.java
index 8fb136a..629baac 100644
--- a/ard-work/src/main/java/com/ruoyi/media/domain/RtspSession.java
+++ b/ard-work/src/main/java/com/ruoyi/media/domain/RtspSession.java
@@ -16,7 +16,6 @@
public class RtspSession {
private String name;
private String id;
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date created;
private String remoteAddr;
private String state;
diff --git a/ard-work/src/main/java/com/ruoyi/media/domain/Vtdu.java b/ard-work/src/main/java/com/ruoyi/media/domain/Vtdu.java
index 7ddf8bb..76d7158 100644
--- a/ard-work/src/main/java/com/ruoyi/media/domain/Vtdu.java
+++ b/ard-work/src/main/java/com/ruoyi/media/domain/Vtdu.java
@@ -57,4 +57,5 @@
* 鐩告満ID
*/
String cameraId;
+
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/domain/WebrtcSession.java b/ard-work/src/main/java/com/ruoyi/media/domain/WebrtcSession.java
index 5e27c27..b66dbbe 100644
--- a/ard-work/src/main/java/com/ruoyi/media/domain/WebrtcSession.java
+++ b/ard-work/src/main/java/com/ruoyi/media/domain/WebrtcSession.java
@@ -15,7 +15,6 @@
public class WebrtcSession {
private String name;
private String id;
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date created;
private String remoteAddr;
private String state;
diff --git a/ard-work/src/main/java/com/ruoyi/media/mapper/VtduMapper.java b/ard-work/src/main/java/com/ruoyi/media/mapper/VtduMapper.java
index f491d55..e3377e2 100644
--- a/ard-work/src/main/java/com/ruoyi/media/mapper/VtduMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/media/mapper/VtduMapper.java
@@ -1,19 +1,19 @@
package com.ruoyi.media.mapper;
import java.util.List;
+
import com.ruoyi.media.domain.Vtdu;
/**
* 娴佸獟浣撶鐞哅apper鎺ュ彛
- *
+ *
* @author ard
* @date 2023-08-29
*/
-public interface VtduMapper
-{
+public interface VtduMapper {
/**
* 鏌ヨ娴佸獟浣撶鐞�
- *
+ *
* @param name 娴佸獟浣撶鐞嗕富閿�
* @return 娴佸獟浣撶鐞�
*/
@@ -21,7 +21,7 @@
/**
* 鏌ヨ娴佸獟浣撶鐞嗗垪琛�
- *
+ *
* @param vtdu 娴佸獟浣撶鐞�
* @return 娴佸獟浣撶鐞嗛泦鍚�
*/
@@ -29,7 +29,7 @@
/**
* 鏂板娴佸獟浣撶鐞�
- *
+ *
* @param vtdu 娴佸獟浣撶鐞�
* @return 缁撴灉
*/
@@ -37,7 +37,7 @@
/**
* 淇敼娴佸獟浣撶鐞�
- *
+ *
* @param vtdu 娴佸獟浣撶鐞�
* @return 缁撴灉
*/
@@ -50,13 +50,15 @@
* @return 缁撴灉
*/
public int deleteVtduByName(String name);
+
/**
* 鎵归噺鍒犻櫎娴佸獟浣撶鐞�
- *
+ *
* @param names 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
* @return 缁撴灉
*/
public int deleteVtduByNames(String[] names);
+
/**
* 鍒犻櫎娴佸獟浣撶鐞嗕俊鎭�
*
@@ -64,4 +66,6 @@
* @return 缁撴灉
*/
public int deleteVtduByCameraId(String cameraId);
+
+ public void clearVtdu();
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java b/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java
index c5a3b28..360b7fe 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java
@@ -55,10 +55,4 @@
Boolean kickWebrtcSession(String sessionId);
- /**
- * 閰嶇疆娴佸獟浣撳弬鏁�
- * 鍒樿嫃涔�
- * 2023/10/13 15:17:57
- */
- public String setConfig(Config config);
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/IVtduService.java b/ard-work/src/main/java/com/ruoyi/media/service/IVtduService.java
index e5d0246..7775461 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/IVtduService.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/IVtduService.java
@@ -1,19 +1,20 @@
package com.ruoyi.media.service;
import java.util.List;
+
+import com.ruoyi.device.channel.domain.ArdChannel;
import com.ruoyi.media.domain.Vtdu;
/**
* 娴佸獟浣撶鐞哠ervice鎺ュ彛
- *
+ *
* @author ard
* @date 2023-08-29
*/
-public interface IVtduService
-{
+public interface IVtduService {
/**
* 鏌ヨ娴佸獟浣撶鐞�
- *
+ *
* @param name 娴佸獟浣撶鐞嗕富閿�
* @return 娴佸獟浣撶鐞�
*/
@@ -21,7 +22,7 @@
/**
* 鏌ヨ娴佸獟浣撶鐞嗗垪琛�
- *
+ *
* @param vtdu 娴佸獟浣撶鐞�
* @return 娴佸獟浣撶鐞嗛泦鍚�
*/
@@ -29,7 +30,7 @@
/**
* 鏂板娴佸獟浣撶鐞�
- *
+ *
* @param vtdu 娴佸獟浣撶鐞�
* @return 缁撴灉
*/
@@ -37,7 +38,7 @@
/**
* 淇敼娴佸獟浣撶鐞�
- *
+ *
* @param vtdu 娴佸獟浣撶鐞�
* @return 缁撴灉
*/
@@ -45,7 +46,7 @@
/**
* 鎵归噺鍒犻櫎娴佸獟浣撶鐞�
- *
+ *
* @param names 闇�瑕佸垹闄ょ殑娴佸獟浣撶鐞嗕富閿泦鍚�
* @return 缁撴灉
*/
@@ -53,7 +54,7 @@
/**
* 鍒犻櫎娴佸獟浣撶鐞嗕俊鎭�
- *
+ *
* @param name 娴佸獟浣撶鐞嗕富閿�
* @return 缁撴灉
*/
@@ -66,4 +67,40 @@
* @return 缁撴灉
*/
public int deleteVtduByCameraId(String cameraId);
+
+ /**
+ * @Author 鍒樿嫃涔�
+ * @Description 娓呯┖娴佸獟浣撴墍鏈夋暟鎹�
+ * @Date 2024/7/10 13:21
+ * @Param
+ * @return
+ */
+ public void clearVtdu();
+
+ /**
+ * @return
+ * @Author 鍒樿嫃涔�
+ * @Description 鑾峰彇2涓�氶亾鍒楄〃鐨勪氦闆�
+ * @Date 2024/7/10 9:38
+ * @Param
+ */
+ public List<Vtdu> sameList(List<Vtdu> vtdus, List<String> names);
+
+ /**
+ * @return
+ * @Author 鍒樿嫃涔�
+ * @Description 鍙�2涓�氶亾鍒楄〃鐨勫樊闆�
+ * @Date 2024/7/10 9:39
+ * @Param
+ */
+ public List<String> diffListToDel(List<Vtdu> vtdus, List<String> names);
+ public List<Vtdu> diffListToAdd(List<Vtdu> vtdus, List<String> names);
+ /**
+ * @return
+ * @Author 鍒樿嫃涔�
+ * @Description 鍚屾娴佸獟浣�
+ * @Date 2024/7/10 13:18
+ * @Param
+ */
+ public void asyncVtdu(List<Vtdu> vtdus, List<String> names);
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java
index eee6a8b..de4f9fc 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java
@@ -1,10 +1,8 @@
package com.ruoyi.media.service.impl;
import com.alibaba.fastjson2.JSONObject;
-import com.dtflys.forest.Forest;
import com.dtflys.forest.exceptions.ForestNetworkException;
import com.dtflys.forest.exceptions.ForestRuntimeException;
-import com.dtflys.forest.http.ForestRequest;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.media.domain.*;
import com.ruoyi.media.service.IMediaService;
@@ -17,9 +15,7 @@
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
-import javax.annotation.PostConstruct;
import javax.annotation.Resource;
-import javax.xml.soap.SOAPEnvelope;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -34,22 +30,14 @@
@Service
@Slf4j(topic = "vtdu")
@Order(2)
-public class MediaServiceImpl implements IMediaService, ApplicationRunner {
- public static List<String> mediaNameList = new ArrayList<>();
+public class MediaServiceImpl implements IMediaService {
+
@Resource
MediaClient mediaClient;
@Value("${mediamtx.host}")
String mediamtxHost;
- @Override
- public void run(ApplicationArguments args) throws Exception {
- mediaNameList = getNameList();
- if (mediaNameList.size() > 0) {
- removePath(mediaNameList.toArray(new String[0]));
- mediaNameList.clear();
- }
- }
/**
* 娣诲姞娴佸獟浣�
@@ -90,7 +78,8 @@
if (!checkNameExist(name)) {
mediaClient.addPath(name, conf);
- mediaNameList.add(name);
+ } else {
+ mediaClient.editPath(name, conf);
}
map.put("rtspUrl", rtspUrl);
@@ -188,7 +177,6 @@
try {
if (checkNameExist(name)) {
mediaClient.removePath(name);
- mediaNameList.remove(name);
}
} catch (ForestRuntimeException ex) {
log.error("绉婚櫎娴佸獟浣撳紓甯革細" + ex.getMessage());
@@ -197,9 +185,8 @@
@Override
public List<StreamInfo> paths() {
- String list = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
+ Paths paths = mediaClient.paths();
+ List<Items> items = paths.getItems();
List<StreamInfo> pathInfoList = new ArrayList<>();
for (Items item : items) {
StreamInfo info = new StreamInfo();
@@ -261,9 +248,8 @@
@Override
public List<StreamInfo> getPushStreamList() {
List<StreamInfo> PushStreamInfoList = new ArrayList<>();
- String list = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
+ Paths paths = mediaClient.paths();
+ List<Items> items = paths.getItems();
for (Items item : items) {
StreamInfo info = new StreamInfo();
//ID
@@ -289,6 +275,7 @@
long bytesReceived = item.getBytesReceived();
String formatReceivedSize = ArdTool.formatFileSize(bytesReceived);
info.setUpTraffic(formatReceivedSize);
+ info.setBeginTime(item.getReadyTime());
} else {
RtspSession rtspSession = getRtspSessionById(source.getId());
//浼氳瘽ID
@@ -336,9 +323,8 @@
@Override
public List<StreamInfo> getPullStreamList() {
List<StreamInfo> PullStreamInfoList = new ArrayList<>();
- String list = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
+ Paths paths = mediaClient.paths();
+ List<Items> items = paths.getItems();
for (Items item : items) {
List<Readers> readers = item.getReaders();
for (Readers reader : readers) {
@@ -375,6 +361,7 @@
PullStreamInfoList.add(info);
break;
case "webRTCSession":
+ case "webrtcSession":
info.setSessionType("webrtc");
//webrtc鎾斁鍦板潃
url = "http://" + mediamtxHost + ":8889/" + name;
@@ -478,41 +465,32 @@
*/
@Override
public List<String> getNameList() {
+ List<String> nameList = new ArrayList<>();
try {
- String paths = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(paths, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
+ Paths paths = mediaClient.paths();
+ List<Items> items = paths.getItems();
for (Items item : items) {
- mediaNameList.add(item.getName());
+ nameList.add(item.getName());
}
- } catch (ForestNetworkException ex) {
- log.error("鑾峰彇娴佸獟浣搉ame鍒楄〃寮傚父锛�" + ex.getMessage());
- } catch (ForestRuntimeException ex) {
+ } catch (Exception ex) {
log.error("鑾峰彇娴佸獟浣搉ame鍒楄〃寮傚父锛�" + ex.getMessage());
}
- return mediaNameList;
+ return nameList;
}
/**
- * 妫�鏌ュ悕绉版槸鍚﹀瓨鍦�
+ * 妫�鏌ame鏄惁瀛樺湪
* 鍒樿嫃涔�
* 2023/10/19 15:18:45
*/
@Override
public boolean checkNameExist(String name) {
boolean result = false;
- if (mediaNameList.contains(name)) {
+ List<String> nameList = getNameList();
+ if (nameList.contains(name)) {
result = true;
}
return result;
- }
-
- /**
- * 閰嶇疆娴佸獟浣撳弬鏁�
- */
- @Override
- public String setConfig(Config config) {
- return mediaClient.setConfig(config);
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaV2ServiceImpl.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaV2ServiceImpl.java
index fcd2cab..ec24786 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaV2ServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaV2ServiceImpl.java
@@ -4,7 +4,6 @@
import com.dtflys.forest.exceptions.ForestNetworkException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.media.domain.*;
-import com.ruoyi.media.service.IMediaService;
import com.ruoyi.media.service.IMediaV2Service;
import com.ruoyi.utils.forest.MediaClient;
import com.ruoyi.utils.tools.ArdTool;
@@ -73,9 +72,8 @@
conf.setSourceProtocol("tcp");
List<String> nameList = new ArrayList<>();
- String paths = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(paths, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
+ Paths paths = mediaClient.paths();
+ List<Items> items = paths.getItems();
for (Items item : items) {
nameList.add(item.getName());
}
@@ -167,9 +165,8 @@
@Override
public List<StreamInfo> paths() {
- String list = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
+ Paths paths = mediaClient.paths();
+ List<Items> items = paths.getItems();
List<StreamInfo> pathInfoList = new ArrayList<>();
for (Items item : items) {
StreamInfo info = new StreamInfo();
@@ -232,9 +229,8 @@
@Override
public List<StreamInfo> getPushStreamList() {
List<StreamInfo> PushStreamInfoList = new ArrayList<>();
- String list = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
+ Paths paths = mediaClient.paths();
+ List<Items> items = paths.getItems();
for (Items item : items) {
StreamInfo info = new StreamInfo();
//ID
@@ -306,9 +302,8 @@
@Override
public List<StreamInfo> getPullStreamList() {
List<StreamInfo> PullStreamInfoList = new ArrayList<>();
- String list = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
+ Paths paths = mediaClient.paths();
+ List<Items> items = paths.getItems();
for (Items item : items) {
List<Readers> readers = item.getReaders();
for (Readers reader : readers) {
@@ -451,9 +446,8 @@
public List<String> getNameList() {
List<String> nameList = new ArrayList<>();
try {
- String paths = mediaClient.paths();
- JsonsRoot jsonsRoot = JSONObject.parseObject(paths, JsonsRoot.class);
- List<Items> items = jsonsRoot.getItems();
+ Paths paths = mediaClient.paths();
+ List<Items> items = paths.getItems();
for (Items item : items) {
nameList.add(item.getName());
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java
index 91e8103..36a8628 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/VtduServiceImpl.java
@@ -3,8 +3,10 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.device.channel.domain.ArdChannel;
import com.ruoyi.media.service.IMediaService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -141,4 +143,69 @@
}
return vtduMapper.deleteVtduByCameraId(cameraId);
}
+
+ /**
+ * @return
+ * @Author 鍒樿嫃涔�
+ * @Description 娓呴櫎鎵�鏈夋祦濯掍綋鏁版嵁
+ * @Date 2024/7/10 13:31
+ * @Param
+ */
+ public void clearVtdu() {
+ vtduMapper.clearVtdu();
+ }
+
+
+ //闇�瑕佹洿鏂扮殑锛堟祦濯掍綋鍜寁tdu鐩稿悓锛�
+ @Override
+ public List<Vtdu> sameList(List<Vtdu> vtdus, List<String> names) {
+ return vtdus.stream().filter(vtdu -> names.contains(vtdu.getName())).collect(Collectors.toList());
+ }
+
+ //闇�瑕佸垹闄ょ殑锛堟祦濯掍綋涓鐨勶級
+ @Override
+ public List<String> diffListToDel(List<Vtdu> vtdus, List<String> names) {
+ if (vtdus.size() >= names.size()) {
+ List<String> nameList = vtdus.stream().map(Vtdu::getName)
+ .filter(item -> !names.contains(item))
+ .collect(Collectors.toList());
+ return nameList;
+ } else {
+
+ List<String> nameList = names.stream().filter(item -> !vtdus.stream().map(Vtdu::getName).collect(Collectors.toList()).contains(item))
+ .collect(Collectors.toList());
+ return nameList;
+ }
+
+ }
+
+ //闇�瑕佹柊澧炵殑锛堟祦濯掍綋涓皯鐨勶級
+ @Override
+ public List<Vtdu> diffListToAdd(List<Vtdu> vtdus, List<String> names) {
+ return vtdus.stream().filter(vtdu -> !names.contains(vtdu.getName())).collect(Collectors.toList());
+ }
+
+ /**
+ * @Author 鍒樿嫃涔�
+ * @Description 鍚屾鏈湴vtdu搴撳拰娴佸獟浣撲腑鐨勬暟鎹�
+ * @Date 2024/7/10 15:26
+ * @Param vtdus vtdu搴撶殑闆嗗悎
+ * @Param names 娴佸獟浣撶殑name闆嗗悎
+ * @return
+ */
+ @Override
+ public void asyncVtdu(List<Vtdu> vtdus, List<String> names) {
+ //闇�瑕佹洿鏂扮殑鏁版嵁,鍙傛暟椤哄簭娉ㄦ剰
+ sameList(vtdus, names).stream().forEach(vtdu -> {
+ mediaService.editPath(vtdu.getName(), vtdu.getRtspSource(), vtdu.getMode(), vtdu.getIsCode());
+ });
+ //闇�瑕佸垹闄ょ殑鏁版嵁
+ diffListToDel(vtdus, names).stream().forEach(name -> {
+ mediaService.removePath(name);
+ });
+ //闇�瑕佹柊澧炵殑鏁版嵁
+ diffListToAdd(vtdus, names).stream().forEach(vtdu -> {
+ mediaService.addPath(vtdu.getName(), vtdu.getRtspSource(), vtdu.getMode(), vtdu.getIsCode());
+ });
+ }
}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java b/ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java
index a187f3e..158a6ee 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java
@@ -4,6 +4,9 @@
import com.ruoyi.media.domain.Conf;
import com.ruoyi.media.domain.Config;
import com.ruoyi.media.domain.Items;
+import com.ruoyi.media.domain.Paths;
+
+import java.nio.file.Path;
/**
* @Description: mediamtx娴佸獟浣撳鎴风
@@ -42,7 +45,7 @@
* 鏌ヨ鎵�鏈夎矾寰�
*/
@Get("/paths/list")
- public String paths();
+ public Paths paths();
/**
* 鏌ヨ鎵�鏈塺tsp浼氳瘽
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/lib/ToolKits.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/lib/ToolKits.java
index e1326a9..269de7f 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/lib/ToolKits.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/lib/ToolKits.java
@@ -488,7 +488,7 @@
int nBufferLen = 2*1024*1024;
byte[] strBuffer = new byte[nBufferLen];
- if(netsdkapi.CLIENT_GetNewDevConfig( hLoginHandle, strCmd , nChn, strBuffer, nBufferLen,error,3000)) {
+ if(netsdkapi.CLIENT_GetNewDevConfig( hLoginHandle, strCmd , nChn, strBuffer, nBufferLen,error,6000)) {
cmdObject.write();
if (configapi.CLIENT_ParseData(strCmd, strBuffer, cmdObject.getPointer(),
cmdObject.size(), null)) {
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/ConfigModule.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/ConfigModule.java
index 645afae..631218d 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/ConfigModule.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/ConfigModule.java
@@ -81,7 +81,20 @@
return result;
}
-
+ public static String getChannelName(NetSDKLib.LLong hLoginHandle,Integer channel) {
+ String channelName = "";
+ NetSDKLib.AV_CFG_ChannelName channelTitleName = new NetSDKLib.AV_CFG_ChannelName();
+ if (ToolKits.GetDevConfig(hLoginHandle, channel, NetSDKLib.CFG_CMD_CHANNELTITLE, channelTitleName)) {
+ try {
+ channelName = new String(channelTitleName.szName, "GBK");
+ } catch (Exception e) {
+ System.err.println("getChannelName Failed!");
+ }
+ } else {
+ System.err.println("Get Channel Name Failed." + ToolKits.getErrorCodePrint());
+ }
+ return channelName;
+ }
public static boolean GetDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) {
boolean result = true;
IntByReference error = new IntByReference(0);
@@ -128,6 +141,7 @@
stOut.read();
ToolKits.GetPointerDataToStructArr(stOut.pCameraStateInfo, arrCameraStatus); // 灏哖ointer鎷疯礉鍒版暟缁勫唴瀛�
final String[] connectionState = {"鏈煡", "姝e湪杩炴帴", "宸茶繛鎺�", "鏈繛鎺�", "閫氶亾鏈厤缃�,鏃犱俊鎭�", "閫氶亾鏈夐厤缃�,浣嗚绂佺敤"};
+ log.debug(connectionState[arrCameraStatus[chanNo - 1].emConnectionState]);
if (connectionState[arrCameraStatus[chanNo - 1].emConnectionState].equals("宸茶繛鎺�")) {
log.debug("閫氶亾" + arrCameraStatus[chanNo - 1].nChannel + connectionState[arrCameraStatus[chanNo - 1].emConnectionState]);
bRet = true;
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
index ec6c8a3..3957ce6 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -112,9 +112,7 @@
log.error("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触:" + getErrorCodePrint());
return AjaxResult.warn(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()));
}
-// if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-// GlobalVariable.loginMap.remove(camera.getId());
-// }
+
camera.setState("1");
camera.setChanNum(m_stDeviceInfo.byChanNum);
camera.setStartDChan(1);
@@ -123,7 +121,12 @@
//鑾峰彇鏈�鏂伴�氶亾
List<ArdChannel> ardChannelList = getChannels(camera);
if (ardChannelList.size() > 0) {
+ ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+ ardChannelList.stream().forEach(channel -> {
+ ardChannelService.insertArdChannel(channel);
+ });
camera.setChanNum(ardChannelList.size());
+ camera.setChannelList(ardChannelList);
ardCamerasService.updateArdCameras(camera);
//閰嶇疆鍒版祦濯掍綋
addVtdu(camera);
@@ -154,9 +157,6 @@
log.error("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触:" + getErrorCodePrint());
return AjaxResult.warn(getErrorCodePrint());
}
-// if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-// GlobalVariable.loginMap.remove(camera.getId());
-// }
camera.setState("1");
camera.setChanNum(m_stDeviceInfo.byChanNum);
camera.setStartDChan(1);
@@ -167,7 +167,12 @@
//鑾峰彇鏈�鏂伴�氶亾
List<ArdChannel> ardChannelList = getChannels(camera);
if (ardChannelList.size() > 0) {
+ ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+ ardChannelList.stream().forEach(channel -> {
+ ardChannelService.insertArdChannel(channel);
+ });
camera.setChanNum(ardChannelList.size());
+ camera.setChannelList(ardChannelList);
ardCamerasService.updateArdCameras(camera);
//閰嶇疆鍒版祦濯掍綋
addVtdu(camera);
@@ -183,17 +188,17 @@
//娣诲姞鍒版祦濯掍綋
private void addVtdu(ArdCameras camera) {
- for (int i = 1; i < camera.getChanNum() + 1; i++) {
- String name = camera.getId() + "_" + i;
- String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + i + "&subtype=0";
- Vtdu vtdu = vtduService.selectVtduByName(name);
- if (vtdu != null) {
+ camera.getChannelList().stream().forEach(channel -> {
+ String name = camera.getId() + "_" + channel.getChanNo();
+ String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + channel.getChanNo() + "&subtype=0";
+ //鍒犻櫎娴佸獟浣�
+ if (vtduService.selectVtduByName(name) != null) {
vtduService.deleteVtduByName(name);
}
//娣诲姞鍒版祦濯掍綋
- CameraCmd cmd = new CameraCmd(camera.getId(), i);
+ CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
- vtdu = new Vtdu();
+ Vtdu vtdu = new Vtdu();
if (videoCompressionCfg.get("videoEncType") != null) {
if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
@@ -204,11 +209,11 @@
vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
}
vtdu.setRtspSource(rtspSource);
- vtdu.setName(camera.getId() + "_" + i);
+ vtdu.setName(name);
vtdu.setMode("1");//榛樿CPU杞В鐮�
vtdu.setCameraId(camera.getId());
vtduService.insertVtdu(vtdu);
- }
+ });
}
//鍒涘缓寮曞闃熷垪
@@ -226,23 +231,12 @@
//鑾峰彇閫氶亾
public List<ArdChannel> getChannels(ArdCameras camera) {
- ardChannelService.deleteArdChannelByDeviceId(camera.getId());
LLong loginId = new LLong(camera.getLoginId());
List<ArdChannel> ardChannelList = new ArrayList<>();
for (int i = 1; i < camera.getChanNum() + 1; i++) {
ArdChannel channel = new ArdChannel();
- NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.AV_CFG_ChannelName();
- boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName);
- if (!b) {
- log.error("鑾峰彇閰嶇疆澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint());
- // return AjaxResult.warn(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()));
- }
- String chanName = "";
- try {
- chanName = new String(av_cfg_channelName.szName, "GBK").trim();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
+ String chanName = ConfigModule.getChannelName(loginId, i - 1).trim();
+ log.debug("鑾峰彇閫氶亾鍚嶇О锛�" + chanName);
channel.setName(chanName.equals("") ? "閫氶亾" + i : chanName);
channel.setDeviceId(camera.getId());
channel.setChanNo(i);
@@ -253,7 +247,6 @@
}
}
ardChannelList.add(channel);
- ardChannelService.insertArdChannel(channel);
}
return ardChannelList;
}
@@ -411,9 +404,9 @@
float t = (float) dh_ptz_location_info.nPTZTilt / 10 * -1;
String nPTZTilt = df.format(t < 0 ? t + 360 : t);
String nPTZZoom = df.format((float) dh_ptz_location_info.nPTZZoom);
- ptzMap.put("p" , nPTZPan);
- ptzMap.put("t" , nPTZTilt);
- ptzMap.put("z" , nPTZZoom);
+ ptzMap.put("p", nPTZPan);
+ ptzMap.put("t", nPTZTilt);
+ ptzMap.put("z", nPTZZoom);
return AjaxResult.success(ptzMap);
}
@@ -591,7 +584,7 @@
// return false;
//}
log.debug("鏈湴褰曞儚寮�濮�");
- return AjaxResult.success("鏈湴褰曞儚寮�濮�" , lRealHandle);
+ return AjaxResult.success("鏈湴褰曞儚寮�濮�", lRealHandle);
} catch (Exception ex) {
log.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage());
return AjaxResult.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage());
@@ -796,7 +789,7 @@
log.error("璁剧疆ptz澶辫触:" + getErrorCodePrint());
return AjaxResult.warn("璁剧疆ptz澶辫触:" + getErrorCodePrint());
}
- return AjaxResult.success("寮曞鐩爣浣嶇疆鎴愬姛",correctPitch);
+ return AjaxResult.success("寮曞鐩爣浣嶇疆鎴愬姛", correctPitch);
} catch (Exception ex) {
log.error("寮曞鐩爣浣嶇疆寮傚父:" + ex.getMessage());
return AjaxResult.error("寮曞鐩爣浣嶇疆寮傚父:" + ex.getMessage());
@@ -1110,10 +1103,10 @@
int nHeight = cfg_encode_info.stuMainStream[0].stuVideoFormat.nHeight;
String resolution = nWidth + "*" + nHeight;
float nFrameRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nFrameRate;
- map.put("resolution" , resolution);//鍒嗚鲸鐜�
- map.put("videoBitrate" , String.valueOf(nBitRate));//姣旂壒鐜�
- map.put("videoEncType" , videoEncType);//缂栫爜
- map.put("nFrameRate" , String.valueOf(nFrameRate));//甯х巼
+ map.put("resolution", resolution);//鍒嗚鲸鐜�
+ map.put("videoBitrate", String.valueOf(nBitRate));//姣旂壒鐜�
+ map.put("videoEncType", videoEncType);//缂栫爜
+ map.put("nFrameRate", String.valueOf(nFrameRate));//甯х巼
}
} catch (Exception ex) {
log.error("鍙栫爜娴佸帇缂╁弬鏁板紓甯�:" + ex.getMessage());
@@ -1140,8 +1133,8 @@
float nAngelH = (float) dh_out_ptz_view_range_status.nAngelH / 10;
float nAngelV = (float) dh_out_ptz_view_range_status.nAngelV / 10;
Map<String, Object> map = getPtz(cmd);//鑾峰彇ptz
- map.put("fHorFieldAngle" , nAngelH);// 姘村钩瑙嗗満瑙�
- map.put("fVerFieldAngle" , nAngelV);// 鍨傜洿瑙嗗満瑙�
+ map.put("fHorFieldAngle", nAngelH);// 姘村钩瑙嗗満瑙�
+ map.put("fVerFieldAngle", nAngelV);// 鍨傜洿瑙嗗満瑙�
return AjaxResult.success(map);
} catch (Exception ex) {
log.error("鑾峰彇浜戝彴鍙鍩熷紓甯�" + ex.getMessage());
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
index ed90621..0269e99 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -144,10 +144,6 @@
log.debug("Set fExceptionCallBack function successfully!");
}
}
-
-// if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-// GlobalVariable.loginMap.remove(camera.getId());
-// }
GlobalVariable.loginMap.put(camera.getId(), lUserID);
GlobalVariable.loginCameraMap.put(lUserID, camera);
camera.setLoginId(lUserID);
@@ -163,6 +159,10 @@
//鑾峰彇鏈�鏂伴�氶亾
List<ArdChannel> cameraChannelList = getChannels(camera);
if (cameraChannelList.size() > 0) {
+ ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+ cameraChannelList.stream().forEach(channel -> {
+ ardChannelService.insertArdChannel(channel);
+ });
camera.setChannelList(cameraChannelList);
camera.setChanNum(cameraChannelList.size());
ardCamerasService.updateArdCameras(camera);
@@ -251,9 +251,7 @@
}
}
}
-// if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-// GlobalVariable.loginMap.remove(camera.getId());
-// }
+
GlobalVariable.loginMap.put(camera.getId(), lUserID);
GlobalVariable.loginCameraMap.put(lUserID, camera);
camera.setLoginId(lUserID);
@@ -269,6 +267,10 @@
//鑾峰彇鏈�鏂伴�氶亾
List<ArdChannel> cameraChannelList = getChannels(camera);
if (cameraChannelList.size() > 0) {
+ ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+ cameraChannelList.stream().forEach(channel -> {
+ ardChannelService.insertArdChannel(channel);
+ });
camera.setChannelList(cameraChannelList);
camera.setChanNum(cameraChannelList.size());
ardCamerasService.updateArdCameras(camera);
@@ -300,17 +302,17 @@
//娣诲姞鍒版祦濯掍綋
private void addVtdu(ArdCameras camera) {
try {
- for (ArdChannel channel : camera.getChannelList()) {
+ camera.getChannelList().stream().forEach(channel->{
String name = camera.getId() + "_" + channel.getChanNo();
String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
- Vtdu vtdu = vtduService.selectVtduByName(name);
- if (vtdu != null) {
+ //鍒犻櫎娴佸獟浣�
+ if (vtduService.selectVtduByName(name) != null) {
vtduService.deleteVtduByName(name);
}
//娣诲姞鍒版祦濯掍綋
- vtdu = new Vtdu();
+ Vtdu vtdu = new Vtdu();
vtdu.setRtspSource(rtspSource);
- vtdu.setName(camera.getId() + "_" + channel.getChanNo());
+ vtdu.setName(name);
CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
@@ -321,7 +323,7 @@
vtdu.setMode("1");//榛樿CPU杞В鐮�
vtdu.setCameraId(camera.getId());
vtduService.insertVtdu(vtdu);
- }
+ });
} catch (Exception ex) {
log.error("閫氶亾娣诲姞鍒版祦濯掍綋寮傚父锛�" + ex.getMessage());
}
@@ -1849,8 +1851,6 @@
//鑾峰彇閫氶亾
List<ArdChannel> channelList = new ArrayList<>();
try {
- //鍒犻櫎绠$悊閫氶亾
- ardChannelService.deleteArdChannelByDeviceId(camera.getId());
IntByReference ibrBytesReturned = new IntByReference(0);//鑾峰彇IP鎺ュ叆閰嶇疆鍙傛暟
HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40();
m_strIpparaCfg.write();
@@ -1891,7 +1891,6 @@
}
channelList.add(channel);
}
- ardChannelService.insertArdChannel(channel);
}
} catch (Exception ex) {
log.error("鑾峰彇IP閫氶亾寮傚父:" + ex.getMessage());
diff --git a/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java b/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
index 5b1dcb4..c988db1 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
@@ -1,6 +1,8 @@
package com.ruoyi.utils.websocket.service;
+import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.app.position.service.impl.AppPositionPushService;
+import com.ruoyi.call.dto.CallMessage;
import com.ruoyi.utils.websocket.util.WebSocketUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -9,6 +11,11 @@
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
/**
* @ClassName ChatServerEndpoint
@@ -33,11 +40,27 @@
@OnMessage
public void onMessage(@PathParam("userId") String userId, String message) {
log.info("鏀跺埌娑堟伅锛�" + message);
- Session session = WebSocketUtils.ONLINE_USER_SESSIONS.get(userId);
- WebSocketUtils.sendMessage(session, message);
- //sendMessageAll("鐢ㄦ埛[" + userid + "] : " + message);
+// Session session = WebSocketUtils.ONLINE_USER_SESSIONS.get(userId);
+// WebSocketUtils.sendMessage(session, message);
+ Map<String, Object> messageMap = JSONObject.parseObject(message, Map.class);
+ if (((String) messageMap.get("type")).equals("callMessage")) {
+ String msg = (String) messageMap.get("message");
+ CallMessage callMessage = JSONObject.parseObject(msg, CallMessage.class);
+ if (callMessage != null && callMessage.getType().equals(0)) {
+ String regex = "^" + Pattern.quote(callMessage.getTargetId()) + "_\\d+$";
+ Pattern pattern = Pattern.compile(regex);
+ ONLINE_USER_SESSIONS.entrySet().stream()
+ .filter(entry -> {
+ Matcher matcher = pattern.matcher(entry.getKey());
+ return matcher.matches();
+ })
+ .map(Map.Entry::getValue)
+ .forEach(session -> WebSocketUtils.sendMessage(session, message));
+ }
+
+ }
// 鏍规嵁鐢ㄦ埛鏂扮殑棰戠巼閲嶆柊璋冩暣瀹氭椂浠诲姟
- AppPositionPushService.messageHandler(userId,message);
+ AppPositionPushService.messageHandler(userId, message);
}
@OnClose
diff --git a/ard-work/src/main/resources/mapper/call/ArdCallSessionUserMapper.xml b/ard-work/src/main/resources/mapper/call/ArdCallSessionUserMapper.xml
index 01cde9a..5eee9a0 100644
--- a/ard-work/src/main/resources/mapper/call/ArdCallSessionUserMapper.xml
+++ b/ard-work/src/main/resources/mapper/call/ArdCallSessionUserMapper.xml
@@ -27,11 +27,14 @@
</where>
</select>
+ <select id="selectArdCallSessionUserBySesionId" parameterType="String" resultMap="ArdCallSessionUserResult">
+ <include refid="selectArdCallSessionUserVo"/>
+ where session_id = #{sessionId} and user_id = #{userId}
+ </select>
<select id="selectArdCallSessionUserById" parameterType="String" resultMap="ArdCallSessionUserResult">
<include refid="selectArdCallSessionUserVo"/>
where id = #{id}
</select>
-
<insert id="insertArdCallSessionUser" parameterType="ArdCallSessionUser">
insert into ard_call_session_user
<trim prefix="(" suffix=")" suffixOverrides=",">
diff --git a/ard-work/src/main/resources/mapper/vtdu/VtduMapper.xml b/ard-work/src/main/resources/mapper/vtdu/VtduMapper.xml
index 41de89d..95d7b5d 100644
--- a/ard-work/src/main/resources/mapper/vtdu/VtduMapper.xml
+++ b/ard-work/src/main/resources/mapper/vtdu/VtduMapper.xml
@@ -118,4 +118,7 @@
from vtdu
where camera_id = #{cameraId}
</delete>
+ <delete id="clearVtdu">
+ delete from vtdu
+ </delete>
</mapper>
\ No newline at end of file
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PushTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PushTask.java
index 6363c40..3bc7376 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PushTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PushTask.java
@@ -17,6 +17,7 @@
import javax.annotation.Resource;
import java.util.*;
+
import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
/**
@@ -36,6 +37,7 @@
ICameraSdkService cameraSdkService;
@Resource
IGlobalAlarmService globalAlarmService;
+
/**
* @鎻忚堪 瀹氭椂鎺ㄩ�佹墍鏈夋姤璀︾殑鐐逛綅鏁伴噺
* @鍙傛暟 []
@@ -66,62 +68,61 @@
*/
public void ptzPush() {
try {
- List<Map<String, Object>> list = new ArrayList<>();
- List<Object> Objects = redisCache.getListKey(CacheConstants.CAMERA_LIST_KEY);
- if (Objects.size() > 0) {
- for (Object obj : Objects) {
- ArdCameras camera = (ArdCameras) obj;
- if (!GlobalVariable.loginMap.containsKey(camera.getId()))//鍙帹閫侀娆$櫥褰曟垚鍔熺殑鐩告満
- {
- continue;
- }
- if(!"1".equals(camera.getGdtype()))
- {
- continue;
- }
- CameraCmd cmd = new CameraCmd();
- cmd.setCameraId(camera.getId());
- cmd.setChanNo(1);
- cmd.setOperator(camera.getOperatorId());
- //鎺ㄩ�佸湪绾跨殑鐩告満
- boolean onLine = cameraSdkService.isOnLine(cmd);
- if(!onLine)
- {
- continue;
- }
- AjaxResult ajaxResult = cameraSdkService.getGisInfo(cmd);
- Map<String, Object> ptz = (Map<String, Object>)ajaxResult.get("data");
- if (StringUtils.isNull(ptz)) {
- continue;
- }
- SysUser sysUser = redisCache.getCacheObject(CacheConstants.USER_LIST_KEY + camera.getOperatorId());
- if (StringUtils.isNotNull(sysUser)) {
- cmd.setOperatorZh(sysUser.getNickName());
- } else {
- cmd.setOperatorZh(cmd.getOperator());
- }
+ if (ONLINE_USER_SESSIONS.size() > 0) {
+ List<Map<String, Object>> list = new ArrayList<>();
+ List<Object> Objects = redisCache.getListKey(CacheConstants.CAMERA_LIST_KEY);
+ if (Objects.size() > 0) {
+ for (Object obj : Objects) {
+ ArdCameras camera = (ArdCameras) obj;
+ if (!GlobalVariable.loginMap.containsKey(camera.getId()))//鍙帹閫侀娆$櫥褰曟垚鍔熺殑鐩告満
+ {
+ continue;
+ }
+ if (!"1".equals(camera.getGdtype())) {
+ continue;
+ }
+ CameraCmd cmd = new CameraCmd();
+ cmd.setCameraId(camera.getId());
+ cmd.setChanNo(1);
+ cmd.setOperator(camera.getOperatorId());
+ //鎺ㄩ�佸湪绾跨殑鐩告満
+ boolean onLine = cameraSdkService.isOnLine(cmd);
+ if (!onLine) {
+ continue;
+ }
+ AjaxResult ajaxResult = cameraSdkService.getGisInfo(cmd);
+ Map<String, Object> ptz = (Map<String, Object>) ajaxResult.get("data");
+ if (StringUtils.isNull(ptz)) {
+ continue;
+ }
+ SysUser sysUser = redisCache.getCacheObject(CacheConstants.USER_LIST_KEY + camera.getOperatorId());
+ if (StringUtils.isNotNull(sysUser)) {
+ cmd.setOperatorZh(sysUser.getNickName());
+ } else {
+ cmd.setOperatorZh(cmd.getOperator());
+ }
- //鑾峰彇鏃堕棿宸�
- long secDatePoor = 0;
- if (StringUtils.isNotNull(camera.getOperatorExpired())) {
- secDatePoor = DateUtils.getSecDatePoor(camera.getOperatorExpired(), new Date());
- if (secDatePoor < 0) {
- secDatePoor = 0;
+ //鑾峰彇鏃堕棿宸�
+ long secDatePoor = 0;
+ if (StringUtils.isNotNull(camera.getOperatorExpired())) {
+ secDatePoor = DateUtils.getSecDatePoor(camera.getOperatorExpired(), new Date());
+ if (secDatePoor < 0) {
+ secDatePoor = 0;
+ }
+ }
+
+ if (ptz.size() > 0) {
+ ptz.put("cameraId", cmd.getCameraId());
+ ptz.put("usernameZh", cmd.getOperatorZh());
+ ptz.put("operatorId", cmd.getOperator());//涓婇攣鐢ㄦ埛id
+ ptz.put("expirationRemainingSecond", secDatePoor);
+ ptz.put("longitude", camera.getLongitude());
+ ptz.put("latitude", camera.getLatitude());
+ ptz.put("altitude", camera.getAltitude());
+ list.add(ptz);
}
}
- if (ptz.size() > 0) {
- ptz.put("cameraId", cmd.getCameraId());
- ptz.put("usernameZh", cmd.getOperatorZh());
- ptz.put("operatorId", cmd.getOperator());//涓婇攣鐢ㄦ埛id
- ptz.put("expirationRemainingSecond", secDatePoor);
- ptz.put("longitude",camera.getLongitude());
- ptz.put("latitude",camera.getLatitude());
- ptz.put("altitude",camera.getAltitude());
- list.add(ptz);
- }
- }
- if (ONLINE_USER_SESSIONS.size() > 0) {
Map<String, Object> sendMap = new HashMap<>();
sendMap.put("10000", list);
WebSocketUtils.sendMessageAll(sendMap);
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
index d6ed2c3..4e7d4ff 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
@@ -3,12 +3,16 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.factory.CameraSDK;
import com.ruoyi.device.camera.factory.CameraSDKFactory;
import com.ruoyi.device.camera.service.IArdCamerasService;
import com.ruoyi.device.camera.service.ICameraSdkService;
+import com.ruoyi.device.channel.domain.ArdChannel;
+import com.ruoyi.device.channel.service.IArdChannelService;
+import com.ruoyi.device.channel.service.impl.ArdChannelServiceImpl;
import com.ruoyi.media.domain.Vtdu;
import com.ruoyi.media.service.IMediaService;
import com.ruoyi.media.service.IVtduService;
@@ -21,6 +25,8 @@
import javax.annotation.Resource;
import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
/**
* @Description: 鍚屾浠诲姟
@@ -43,6 +49,10 @@
IMediaService mediaService;
@Resource
private ICameraSdkService cameraSdkService;
+ @Resource
+ private CameraSDKFactory cameraSDKFactory;
+ @Resource
+ private IArdChannelService ardChannelService;
/**
* 鍚屾鐩告満鍦ㄧ嚎鐘舵��
* 鍒樿嫃涔�
@@ -69,6 +79,34 @@
}
} catch (Exception ex) {
log.error("鍚屾鐩告満鍦ㄧ嚎鐘舵�佸紓甯�:" + ex.getMessage());
+ }
+ }
+
+ /**
+ * @Author 鍒樿嫃涔�
+ * @Description 鍚屾nvr閫氶亾鐘舵�佸疄鏃跺悓姝ユ祦濯掍綋
+ * @Date 2024/7/9 16:01
+ */
+ public void nvrChannelState() {
+ //鑾峰彇鎵�鏈塶vr璁惧
+ List<ArdCameras> ardCamerasList = iArdCamerasService.selectArdCamerasListNoDataScope(new ArdCameras());
+ if (ardCamerasList.size() > 0) {
+ ardCamerasList.stream()
+ .filter(ardCameras -> ardCameras.getGdtype().equals("2"))
+ .forEach(ardCameras -> {
+ //閫氳繃SDK鑾峰彇NVR褰撳墠閫氶亾
+ CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(ardCameras.getFactory());
+ List<ArdChannel> ardChannelList = cameraSDK.getChannels(ardCameras);
+ //鍚屾閫氶亾琛�
+ ArdChannel ardChannel=new ArdChannel();
+ ardChannel.setDeviceId(ardCameras.getId());
+ List<ArdChannel> ardChannelListDb = ardChannelService.selectArdChannelList(ardChannel);
+ ardChannelService.asyncChannel(ardChannelListDb,ardChannelList);
+ //鍚屾娴佸獟浣撹〃
+
+ //鍚屾娴佸獟浣揳pi
+
+ });
}
}
@@ -105,13 +143,8 @@
* 2023/10/13 14:13:53
*/
public void vtdu() {
-
- List<Vtdu> vtdus = vtduService.selectVtduList(new Vtdu());
- for (Vtdu vtdu : vtdus) {
- boolean nameExist = mediaService.checkNameExist(vtdu.getName());
- if (!nameExist) {
- mediaService.addPath(vtdu.getName(), vtdu.getRtspSource(), vtdu.getMode(), vtdu.getIsCode());
- }
- }
+ List<String> nameList = mediaService.getNameList();
+ List<Vtdu> vtduList = vtduService.selectVtduList(new Vtdu());
+ vtduService.asyncVtdu(vtduList,nameList);
}
}
--
Gitblit v1.9.3