From 53e14c1919c4a3112f963689d0ce75fa08831021 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期六, 19 八月 2023 12:32:20 +0800
Subject: [PATCH] 增加通道管理业务 修改相机部分实体字段
---
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java | 27 ++
ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java | 2
ard-work/src/main/java/com/ruoyi/device/channel/controller/ArdChannelController.java | 110 ++++++++++
ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java | 25 +
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java | 6
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java | 3
ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml | 12
ard-work/src/main/resources/mapper/device/ArdChannelMapper.xml | 69 ++++++
ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java | 99 +++++++++
ard-work/src/main/java/com/ruoyi/device/channel/service/IArdChannelService.java | 68 ++++++
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 48 ++++
ard-work/src/main/java/com/ruoyi/device/channel/domain/ArdChannel.java | 79 +++++++
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java | 36 ++
ard-work/src/main/java/com/ruoyi/device/channel/mapper/ArdChannelMapper.java | 69 ++++++
14 files changed, 630 insertions(+), 23 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java b/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
index e0efc82..b3c6f7e 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
@@ -137,7 +137,7 @@
Map option = new HashMap();
option.put("value", item.getId());
option.put("label", item.getName());
- option.put("channel", item.getChannel());
+ option.put("channel", item.getChanNo());
List timeList = ardVideoInspectTaskService.getCameraIdleTimeList(item.getId());
option.put("idleTimeList", timeList);//绌洪棽鏃堕棿娈�
options.add(option);
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java b/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
index 472f2b5..cfdf554 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
@@ -1,5 +1,6 @@
package com.ruoyi.device.camera.domain;
+import com.ruoyi.device.channel.domain.ArdChannel;
import com.sun.jna.Structure;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -8,6 +9,7 @@
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.Date;
+import java.util.List;
/**
* 鐩告満璁惧瀵硅薄 ard_cameras
@@ -72,11 +74,7 @@
@Excel(name = "鍏夌數绫诲瀷")
private String gdtype;
- /**
- * 閫氶亾鍙�
- */
- @Excel(name = "閫氶亾鍙�")
- private Integer channel;
+
/**
* 缁忓害
@@ -175,4 +173,21 @@
private Integer loginId;
private String operatorId;
private Date operatorExpired;
+ /**
+ * 閫氶亾鍙�
+ */
+ private Integer chanNo;
+ /**
+ * 璧峰閫氶亾鍙�
+ */
+ private Integer startDChan;
+ /**
+ * 閫氶亾鏁�
+ */
+ @Excel(name = "閫氶亾鏁�")
+ private Integer chanNum;
+ /**
+ * 閫氶亾
+ */
+ private List<ArdChannel> channelList;
}
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 85cf727..88b4637 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
@@ -11,7 +11,11 @@
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.channel.domain.ArdChannel;
+import com.ruoyi.device.channel.mapper.ArdChannelMapper;
+import com.ruoyi.device.channel.service.IArdChannelService;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
+import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.scheduling.domian.SchedulingParam;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.utils.tools.ArdTool;
@@ -43,6 +47,10 @@
private SysDeptMapper sysDeptMapper;
@Resource
private RedisCache redisCache;
+ @Resource
+ private IHikClientService hikClientService;
+ @Resource
+ private ArdChannelMapper ardChannelMapper;
@PostConstruct
@@ -111,7 +119,20 @@
ardCameras.setCreateTime(DateUtils.getNowDate());
ardCameras.setUserId(SecurityUtils.getUserId());
redisCache.setCacheObject(getCacheKey(ardCameras.getId()), ardCameras);
- return ardCamerasMapper.insertArdCameras(ardCameras);
+ int i = ardCamerasMapper.insertArdCameras(ardCameras);
+ if (i > 0) {
+// //鍒犻櫎褰撳墠鐩告満鐨勬墍鏈夐�氶亾
+// ardChannelMapper.deleteArdChannelByDeviceId(ardCameras.getId());
+// //鑾峰彇鐩告満閫氶亾
+// List<ArdChannel> ipChannelList = hikClientService.getCameraChannelList(ardCameras);
+// if (ipChannelList.size() > 0) {
+// for (ArdChannel channel : ipChannelList) {
+// channel.setId(IdUtils.simpleUUID());
+// ardChannelMapper.insertArdChannel(channel);
+// }
+// }
+ }
+ return i;
}
/**
@@ -143,6 +164,8 @@
if (res > 0) {
for (String id : ids) {
redisCache.deleteObject(getCacheKey(id));
+ //鍒犻櫎褰撳墠鐩告満鐨勬墍鏈夐�氶亾
+ ardChannelMapper.deleteArdChannelByDeviceId(id);
}
}
return res;
@@ -156,7 +179,12 @@
*/
@Override
public int deleteArdCamerasById(String id) {
- return ardCamerasMapper.deleteArdCamerasById(id);
+ int i = ardCamerasMapper.deleteArdCamerasById(id);
+ if (i > 0) {
+ //鍒犻櫎褰撳墠鐩告満鐨勬墍鏈夐�氶亾
+ ardChannelMapper.deleteArdChannelByDeviceId(id);
+ }
+ return i;
}
public List findOptions(ArdCameras ardCameras) {
@@ -249,7 +277,7 @@
}
if (distance != 0.0 && distance <= camera.getCamMaxVisibleDistance()) {
distanceMap.put(camera.getId(), distance);
- camera.setChannel(ArdTool.getChannelBydayNightTime(dayNightTime));
+ camera.setChanNo(ArdTool.getChannelBydayNightTime(dayNightTime));
ardCameras.put(distance, camera);
}
@@ -292,7 +320,7 @@
double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
double distance = GisTool.getDistance(new double[]{longitude, latitude}, camPosition);
if (distance <= radius) {
- camera.setChannel(ArdTool.getChannelBydayNightTime(dayNightTime));
+ camera.setChanNo(ArdTool.getChannelBydayNightTime(dayNightTime));
ardCameras.add(camera);
}
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/channel/controller/ArdChannelController.java b/ard-work/src/main/java/com/ruoyi/device/channel/controller/ArdChannelController.java
new file mode 100644
index 0000000..8e67631
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/channel/controller/ArdChannelController.java
@@ -0,0 +1,110 @@
+package com.ruoyi.device.channel.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.device.channel.domain.ArdChannel;
+import com.ruoyi.device.channel.service.IArdChannelService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 閫氶亾绠$悊Controller
+ *
+ * @author ard
+ * @date 2023-08-19
+ */
+@RestController
+@RequestMapping("/device/channel")
+@Api(tags = "閫氶亾绠$悊鎺ュ彛")
+public class ArdChannelController extends BaseController
+{
+ @Autowired
+ private IArdChannelService ardChannelService;
+
+ /**
+ * 鏌ヨ閫氶亾绠$悊鍒楄〃
+ */
+ @ApiOperation("鏌ヨ閫氶亾绠$悊鍒楄〃")
+ @PreAuthorize("@ss.hasPermi('device:channel:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(ArdChannel ardChannel)
+ {
+ startPage();
+ List<ArdChannel> list = ardChannelService.selectArdChannelList(ardChannel);
+ return getDataTable(list);
+ }
+
+ /**
+ * 瀵煎嚭閫氶亾绠$悊鍒楄〃
+ */
+ @PreAuthorize("@ss.hasPermi('device:channel:export')")
+ @Log(title = "閫氶亾绠$悊", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ArdChannel ardChannel)
+ {
+ List<ArdChannel> list = ardChannelService.selectArdChannelList(ardChannel);
+ ExcelUtil<ArdChannel> util = new ExcelUtil<ArdChannel>(ArdChannel.class);
+ util.exportExcel(response, list, "閫氶亾绠$悊鏁版嵁");
+ }
+
+ /**
+ * 鑾峰彇閫氶亾绠$悊璇︾粏淇℃伅
+ */
+ @ApiOperation("鑾峰彇閫氶亾绠$悊璇︾粏淇℃伅")
+ @PreAuthorize("@ss.hasPermi('device:channel:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(ardChannelService.selectArdChannelById(id));
+ }
+
+ /**
+ * 鏂板閫氶亾绠$悊
+ */
+ @PreAuthorize("@ss.hasPermi('device:channel:add')")
+ @Log(title = "閫氶亾绠$悊", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody ArdChannel ardChannel)
+ {
+ return toAjax(ardChannelService.insertArdChannel(ardChannel));
+ }
+
+ /**
+ * 淇敼閫氶亾绠$悊
+ */
+ @PreAuthorize("@ss.hasPermi('device:channel:edit')")
+ @Log(title = "閫氶亾绠$悊", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody ArdChannel ardChannel)
+ {
+ return toAjax(ardChannelService.updateArdChannel(ardChannel));
+ }
+
+ /**
+ * 鍒犻櫎閫氶亾绠$悊
+ */
+ @PreAuthorize("@ss.hasPermi('device:channel:remove')")
+ @Log(title = "閫氶亾绠$悊", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ return toAjax(ardChannelService.deleteArdChannelByIds(ids));
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/channel/domain/ArdChannel.java b/ard-work/src/main/java/com/ruoyi/device/channel/domain/ArdChannel.java
new file mode 100644
index 0000000..c376811
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/channel/domain/ArdChannel.java
@@ -0,0 +1,79 @@
+package com.ruoyi.device.channel.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 閫氶亾绠$悊瀵硅薄 ard_channel
+ *
+ * @author ard
+ * @date 2023-08-19
+ */
+public class ArdChannel extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ private String id;
+
+ /** 閫氶亾鍚嶇О */
+ @Excel(name = "閫氶亾鍚嶇О")
+ private String name;
+
+ /** 閫氶亾鍙� */
+ @Excel(name = "閫氶亾鍙�")
+ private Integer chanNo;
+
+ /** 鎵�灞炶澶噄d */
+ @Excel(name = "鎵�灞炶澶噄d")
+ private String deviceId;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setChanNo(Integer chanNo)
+ {
+ this.chanNo = chanNo;
+ }
+
+ public Integer getChanNo()
+ {
+ return chanNo;
+ }
+ public void setDeviceId(String deviceId)
+ {
+ this.deviceId = deviceId;
+ }
+
+ public String getDeviceId()
+ {
+ return deviceId;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("name", getName())
+ .append("chanNo", getChanNo())
+ .append("deviceId", getDeviceId())
+ .toString();
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/channel/mapper/ArdChannelMapper.java b/ard-work/src/main/java/com/ruoyi/device/channel/mapper/ArdChannelMapper.java
new file mode 100644
index 0000000..7823474
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/channel/mapper/ArdChannelMapper.java
@@ -0,0 +1,69 @@
+package com.ruoyi.device.channel.mapper;
+
+import java.util.List;
+import com.ruoyi.device.channel.domain.ArdChannel;
+
+/**
+ * 閫氶亾绠$悊Mapper鎺ュ彛
+ *
+ * @author ard
+ * @date 2023-08-19
+ */
+public interface ArdChannelMapper
+{
+ /**
+ * 鏌ヨ閫氶亾绠$悊
+ *
+ * @param id 閫氶亾绠$悊涓婚敭
+ * @return 閫氶亾绠$悊
+ */
+ public ArdChannel selectArdChannelById(String id);
+
+ /**
+ * 鏌ヨ閫氶亾绠$悊鍒楄〃
+ *
+ * @param ardChannel 閫氶亾绠$悊
+ * @return 閫氶亾绠$悊闆嗗悎
+ */
+ public List<ArdChannel> selectArdChannelList(ArdChannel ardChannel);
+
+ /**
+ * 鏂板閫氶亾绠$悊
+ *
+ * @param ardChannel 閫氶亾绠$悊
+ * @return 缁撴灉
+ */
+ public int insertArdChannel(ArdChannel ardChannel);
+
+ /**
+ * 淇敼閫氶亾绠$悊
+ *
+ * @param ardChannel 閫氶亾绠$悊
+ * @return 缁撴灉
+ */
+ public int updateArdChannel(ArdChannel ardChannel);
+
+ /**
+ * 鍒犻櫎閫氶亾绠$悊
+ *
+ * @param id 閫氶亾绠$悊涓婚敭
+ * @return 缁撴灉
+ */
+ public int deleteArdChannelById(String id);
+
+ /**
+ * 鎵归噺鍒犻櫎閫氶亾绠$悊
+ *
+ * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+ * @return 缁撴灉
+ */
+ public int deleteArdChannelByIds(String[] ids);
+
+ /**
+ * 鍒犻櫎閫氶亾绠$悊鎸夎澶嘔D
+ *
+ * @param deviceId 鎵�灞炶澶嘔D
+ * @return 缁撴灉
+ */
+ public int deleteArdChannelByDeviceId(String deviceId);
+}
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
new file mode 100644
index 0000000..e926827
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/channel/service/IArdChannelService.java
@@ -0,0 +1,68 @@
+package com.ruoyi.device.channel.service;
+
+import java.util.List;
+import com.ruoyi.device.channel.domain.ArdChannel;
+
+/**
+ * 閫氶亾绠$悊Service鎺ュ彛
+ *
+ * @author ard
+ * @date 2023-08-19
+ */
+public interface IArdChannelService
+{
+ /**
+ * 鏌ヨ閫氶亾绠$悊
+ *
+ * @param id 閫氶亾绠$悊涓婚敭
+ * @return 閫氶亾绠$悊
+ */
+ public ArdChannel selectArdChannelById(String id);
+
+ /**
+ * 鏌ヨ閫氶亾绠$悊鍒楄〃
+ *
+ * @param ardChannel 閫氶亾绠$悊
+ * @return 閫氶亾绠$悊闆嗗悎
+ */
+ public List<ArdChannel> selectArdChannelList(ArdChannel ardChannel);
+
+ /**
+ * 鏂板閫氶亾绠$悊
+ *
+ * @param ardChannel 閫氶亾绠$悊
+ * @return 缁撴灉
+ */
+ public int insertArdChannel(ArdChannel ardChannel);
+
+ /**
+ * 淇敼閫氶亾绠$悊
+ *
+ * @param ardChannel 閫氶亾绠$悊
+ * @return 缁撴灉
+ */
+ public int updateArdChannel(ArdChannel ardChannel);
+
+ /**
+ * 鎵归噺鍒犻櫎閫氶亾绠$悊
+ *
+ * @param ids 闇�瑕佸垹闄ょ殑閫氶亾绠$悊涓婚敭闆嗗悎
+ * @return 缁撴灉
+ */
+ public int deleteArdChannelByIds(String[] ids);
+
+ /**
+ * 鍒犻櫎閫氶亾绠$悊淇℃伅
+ *
+ * @param id 閫氶亾绠$悊涓婚敭
+ * @return 缁撴灉
+ */
+ public int deleteArdChannelById(String id);
+ /**
+ * 鍒犻櫎閫氶亾绠$悊淇℃伅
+ *
+ * @param deviceId 鎵�灞炶澶嘔D
+ * @return 缁撴灉
+ */
+ public int deleteArdChannelByDeviceId(String deviceId);
+}
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
new file mode 100644
index 0000000..44ec3b3
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/channel/service/impl/ArdChannelServiceImpl.java
@@ -0,0 +1,99 @@
+package com.ruoyi.device.channel.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.common.utils.uuid.IdUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.device.channel.mapper.ArdChannelMapper;
+import com.ruoyi.device.channel.domain.ArdChannel;
+import com.ruoyi.device.channel.service.IArdChannelService;
+
+/**
+ * 閫氶亾绠$悊Service涓氬姟灞傚鐞�
+ *
+ * @author ard
+ * @date 2023-08-19
+ */
+@Service
+public class ArdChannelServiceImpl implements IArdChannelService {
+ @Autowired
+ private ArdChannelMapper ardChannelMapper;
+
+ /**
+ * 鏌ヨ閫氶亾绠$悊
+ *
+ * @param id 閫氶亾绠$悊涓婚敭
+ * @return 閫氶亾绠$悊
+ */
+ @Override
+ public ArdChannel selectArdChannelById(String id) {
+ return ardChannelMapper.selectArdChannelById(id);
+ }
+
+ /**
+ * 鏌ヨ閫氶亾绠$悊鍒楄〃
+ *
+ * @param ardChannel 閫氶亾绠$悊
+ * @return 閫氶亾绠$悊
+ */
+ @Override
+ public List<ArdChannel> selectArdChannelList(ArdChannel ardChannel) {
+ return ardChannelMapper.selectArdChannelList(ardChannel);
+ }
+
+ /**
+ * 鏂板閫氶亾绠$悊
+ *
+ * @param ardChannel 閫氶亾绠$悊
+ * @return 缁撴灉
+ */
+ @Override
+ public int insertArdChannel(ArdChannel ardChannel) {
+ ardChannel.setId(IdUtils.simpleUUID());
+ return ardChannelMapper.insertArdChannel(ardChannel);
+ }
+
+ /**
+ * 淇敼閫氶亾绠$悊
+ *
+ * @param ardChannel 閫氶亾绠$悊
+ * @return 缁撴灉
+ */
+ @Override
+ public int updateArdChannel(ArdChannel ardChannel) {
+ return ardChannelMapper.updateArdChannel(ardChannel);
+ }
+
+ /**
+ * 鎵归噺鍒犻櫎閫氶亾绠$悊
+ *
+ * @param ids 闇�瑕佸垹闄ょ殑閫氶亾绠$悊涓婚敭
+ * @return 缁撴灉
+ */
+ @Override
+ public int deleteArdChannelByIds(String[] ids) {
+ return ardChannelMapper.deleteArdChannelByIds(ids);
+ }
+
+ /**
+ * 鍒犻櫎閫氶亾绠$悊淇℃伅
+ *
+ * @param id 閫氶亾绠$悊涓婚敭
+ * @return 缁撴灉
+ */
+ @Override
+ public int deleteArdChannelById(String id) {
+ return ardChannelMapper.deleteArdChannelById(id);
+ }
+ /**
+ * 鍒犻櫎閫氶亾绠$悊淇℃伅
+ *
+ * @param deviceId 鎵�灞炶澶嘔D
+ * @return 缁撴灉
+ */
+ @Override
+ public int deleteArdChannelByDeviceId(String deviceId) {
+ return ardChannelMapper.deleteArdChannelByDeviceId(deviceId);
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
index 2d43e0e..4826aba 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -2,6 +2,9 @@
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.channel.domain.ArdChannel;
+
+import java.util.List;
import java.util.Map;
/**
@@ -103,4 +106,7 @@
//鍋滄褰曞儚-涓嶄笂浼爉inio
void recordStopNotToMinio(CameraCmd cmd);
+
+ //鑾峰彇鐩告満閫氶亾淇℃伅
+ public List<ArdChannel> getCameraChannelList(ArdCameras camera);
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
index 60c0b26..5c35e6d 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -1,9 +1,12 @@
package com.ruoyi.device.hiksdk.service.impl;
+import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.annotation.SdkOperate;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.device.channel.domain.ArdChannel;
+import com.ruoyi.device.channel.service.IArdChannelService;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
@@ -13,11 +16,14 @@
import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack;
import com.ruoyi.storage.minio.utils.MinioUtils;
import com.sun.jna.Native;
+import com.sun.jna.NativeLong;
import com.sun.jna.Platform;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
+
import java.util.Base64;
import javax.annotation.Resource;
import java.io.*;
@@ -26,6 +32,7 @@
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.stream.Collectors;
import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*;
@@ -125,7 +132,7 @@
GlobalVariable.loginMap.remove(camera.getId());
GlobalVariable.loginMap.put(camera.getId(), lUserID);
camera.setLoginId(lUserID);
- camera.setChannel((int) m_strDeviceInfo.byStartChan);
+ camera.setStartDChan((int) m_strDeviceInfo.byStartChan);
return camera;
}
@@ -1093,7 +1100,7 @@
log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is);
Base64.Encoder decoder = Base64.getEncoder();
- // BASE64Encoder encoder = new BASE64Encoder();
+ // BASE64Encoder encoder = new BASE64Encoder();
String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓�
png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n
log.debug("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------");
@@ -1386,4 +1393,41 @@
log.error("褰曞儚鍋滄寮傚父" + ex.getMessage());
}
}
+
+ //鑾峰彇IP閫氶亾
+ @Override
+ public List<ArdChannel> getCameraChannelList(ArdCameras camera) {
+ /*鑾峰彇閫氶亾*/
+ List<ArdChannel> channelList = new ArrayList<>();
+ try {
+ Integer chanNum = camera.getChanNum();
+ Integer startDChan = camera.getStartDChan();
+ if (chanNum > 0) {
+ // 鑾峰彇閫氶亾鍙�
+ for (int iChannum = 0; iChannum < chanNum; iChannum++) {
+ ArdChannel ardChannel = new ArdChannel();
+ int channum = iChannum + startDChan+1;
+ HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40();
+ strPicCfg.dwSize = strPicCfg.size();
+ strPicCfg.write();
+ Pointer pStrPicCfg = strPicCfg.getPointer();
+ NativeLong lChannel = new NativeLong(channum);
+ IntByReference pInt = new IntByReference(0);
+ boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(),
+ pStrPicCfg, strPicCfg.size(), pInt);
+ if (b_GetPicCfg) {
+ strPicCfg.read();
+ String channelName = new String(strPicCfg.sChanName, "GBK").trim();
+ ardChannel.setName(channelName);
+ }
+ ardChannel.setDeviceId(camera.getId());
+ ardChannel.setChanNo(iChannum + 1);
+ channelList.add(ardChannel);
+ }
+ }
+ } catch (Exception ex) {
+ log.error("鑾峰彇鐩告満閫氶亾寮傚父:" + ex.getMessage());
+ }
+ return channelList;
+ }
}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java
index ebc20ec..a07c6d0 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java
@@ -2252,7 +2252,8 @@
public static class NET_DVR_IPCHANINFO extends HIKSDKStructure {/* IP閫氶亾鍖归厤鍙傛暟 */
public byte byEnable; /* 璇ラ�氶亾鏄惁鍚敤 */
public byte byIPID; /* IP璁惧ID 鍙栧��1- MAX_IP_DEVICE */
- public byte byChannel; /* 閫氶亾鍙� */
+ public byte byChannel; /* 閫氶亾鍙� */
+ public byte byIPIDHigh;
public byte[] byres = new byte[33]; /* 淇濈暀 */
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
index 476c083..bbe9c52 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
@@ -3,13 +3,18 @@
import com.ruoyi.alarm.global.domain.GuidePriorityQueue;
import com.ruoyi.alarm.global.domain.GuideTask;
import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.device.channel.domain.ArdChannel;
+import com.ruoyi.device.channel.service.IArdChannelService;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
+import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
import java.util.Comparator;
+import java.util.List;
import java.util.concurrent.PriorityBlockingQueue;
/**
@@ -30,6 +35,9 @@
@Override
public int invoke(int lUserID, int dwResult, HCNetSDK.NET_DVR_DEVICEINFO_V30 lpDeviceinfo, Pointer pUser) {
+ IArdChannelService ardChannelService = SpringUtils.getBean(IArdChannelService.class);
+ IHikClientService hikClientService = SpringUtils.getBean(IHikClientService.class);
+ IArdCamerasService ardCamerasService = SpringUtils.getBean(IArdCamerasService.class);
if (GlobalVariable.loginMap.containsKey(camera.getId())) {
GlobalVariable.loginMap.remove(camera.getId());
}
@@ -37,17 +45,28 @@
GlobalVariable.loginMap.put(camera.getId(), lUserID);
log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛");
camera.setLoginId(lUserID);
- camera.setChannel((int) lpDeviceinfo.byChanNum);
+ camera.setChanNum((int) lpDeviceinfo.byChanNum);
+ camera.setStartDChan((int)lpDeviceinfo.byStartDChan);
+
+ //鑾峰彇鏈�鏂伴�氶亾
+ List<ArdChannel> cameraChannelList = hikClientService.getCameraChannelList(camera);
+ if(cameraChannelList.size()>0) {
+ //鍒犻櫎绠$悊閫氶亾
+ ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+ for (ArdChannel channel : cameraChannelList) {
+ channel.setId(IdUtils.simpleUUID());
+ ardChannelService.insertArdChannel(channel);
+ }
+ }
//鍒涘缓寮曞闃熷垪
Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
- PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000,comparator);
+ PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
} else {
log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触");
- camera.setChannel(0);
+ camera.setChanNum(0);
camera.setLoginId(-1);
}
- IArdCamerasService ardCamerasService = SpringUtils.getBean(IArdCamerasService.class);
ardCamerasService.updateArdCameras(camera);
return 1;
}
diff --git a/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml b/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
index 90c8603..4e17b31 100644
--- a/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
+++ b/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
@@ -13,7 +13,7 @@
<result property="username" column="username"/>
<result property="password" column="password"/>
<result property="gdtype" column="gdtype"/>
- <result property="channel" column="channel"/>
+ <result property="chanNum" column="channel"/>
<result property="longitude" column="longitude"/>
<result property="latitude" column="latitude"/>
<result property="altitude" column="altitude"/>
@@ -78,7 +78,7 @@
<if test="username != null and username != ''">and c.username like '%'||#{username}||'%'</if>
<if test="password != null and password != ''">and c.password = #{password}</if>
<if test="gdtype != null and gdtype != ''">and c.gdtype = #{gdtype}</if>
- <if test="channel != null ">and c.channel = #{channel}</if>
+ <if test="chanNum != null ">and c.channel = #{chanNum}</if>
<if test="longitude != null ">and c.longitude = #{longitude}</if>
<if test="latitude != null ">and c.latitude = #{latitude}</if>
<if test="altitude != null ">and c.altitude = #{altitude}</if>
@@ -111,7 +111,7 @@
<if test="username != null and username != ''">and c.username like '%'||#{username}||'%'</if>
<if test="password != null and password != ''">and c.password = #{password}</if>
<if test="gdtype != null and gdtype != ''">and c.gdtype = #{gdtype}</if>
- <if test="channel != null ">and c.channel = #{channel}</if>
+ <if test="chanNum != null ">and c.channel = #{chanNum}</if>
<if test="longitude != null ">and c.longitude = #{longitude}</if>
<if test="latitude != null ">and c.latitude = #{latitude}</if>
<if test="altitude != null ">and c.altitude = #{altitude}</if>
@@ -148,7 +148,7 @@
<if test="username != null">username,</if>
<if test="password != null">password,</if>
<if test="gdtype != null">gdtype,</if>
- <if test="channel != null">channel,</if>
+ <if test="chanNum != null">channel,</if>
<if test="longitude != null">longitude,</if>
<if test="latitude != null">latitude,</if>
<if test="altitude != null">altitude,</if>
@@ -179,7 +179,7 @@
<if test="username != null">#{username},</if>
<if test="password != null">#{password},</if>
<if test="gdtype != null">#{gdtype},</if>
- <if test="channel != null">#{channel},</if>
+ <if test="chanNum != null">#{chanNum},</if>
<if test="longitude != null">#{longitude},</if>
<if test="latitude != null">#{latitude},</if>
<if test="altitude != null">#{altitude},</if>
@@ -213,7 +213,7 @@
<if test="username != null">username = #{username},</if>
<if test="password != null">password = #{password},</if>
<if test="gdtype != null">gdtype = #{gdtype},</if>
- <if test="channel != null">channel = #{channel},</if>
+ <if test="chanNum != null">channel = #{chanNum},</if>
<if test="longitude != null">longitude = #{longitude},</if>
<if test="latitude != null">latitude = #{latitude},</if>
<if test="altitude != null">altitude = #{altitude},</if>
diff --git a/ard-work/src/main/resources/mapper/device/ArdChannelMapper.xml b/ard-work/src/main/resources/mapper/device/ArdChannelMapper.xml
new file mode 100644
index 0000000..333dbe6
--- /dev/null
+++ b/ard-work/src/main/resources/mapper/device/ArdChannelMapper.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.channel.mapper.ArdChannelMapper">
+
+ <resultMap type="ArdChannel" id="ArdChannelResult">
+ <result property="id" column="id" />
+ <result property="name" column="name" />
+ <result property="chanNo" column="chan_no" />
+ <result property="deviceId" column="device_id" />
+ </resultMap>
+
+ <sql id="selectArdChannelVo">
+ select id, name, chan_no, device_id from ard_channel
+ </sql>
+
+ <select id="selectArdChannelList" parameterType="ArdChannel" resultMap="ArdChannelResult">
+ <include refid="selectArdChannelVo"/>
+ <where>
+ <if test="deviceId!=null">device_id=#{deviceId}</if>
+ </where>
+ </select>
+
+ <select id="selectArdChannelById" parameterType="String" resultMap="ArdChannelResult">
+ <include refid="selectArdChannelVo"/>
+ where id = #{id}
+ </select>
+
+ <insert id="insertArdChannel" parameterType="ArdChannel">
+ insert into ard_channel
+ <trim prefix="(" suffix=")" suffixOverrides=",">
+ <if test="id != null">id,</if>
+ <if test="name != null">name,</if>
+ <if test="chanNo != null">chan_no,</if>
+ <if test="deviceId != null">device_id,</if>
+ </trim>
+ <trim prefix="values (" suffix=")" suffixOverrides=",">
+ <if test="id != null">#{id},</if>
+ <if test="name != null">#{name},</if>
+ <if test="chanNo != null">#{chanNo},</if>
+ <if test="deviceId != null">#{deviceId},</if>
+ </trim>
+ </insert>
+
+ <update id="updateArdChannel" parameterType="ArdChannel">
+ update ard_channel
+ <trim prefix="SET" suffixOverrides=",">
+ <if test="name != null">name = #{name},</if>
+ <if test="chanNo != null">chan_no = #{chanNo},</if>
+ <if test="deviceId != null">device_id = #{deviceId},</if>
+ </trim>
+ where id = #{id}
+ </update>
+
+ <delete id="deleteArdChannelById" parameterType="String">
+ delete from ard_channel where id = #{id}
+ </delete>
+
+ <delete id="deleteArdChannelByIds" parameterType="String">
+ delete from ard_channel where id in
+ <foreach item="id" collection="array" open="(" separator="," close=")">
+ #{id}
+ </foreach>
+ </delete>
+ <delete id="deleteArdChannelByDeviceId" parameterType="String">
+ delete from ard_channel where device_id = #{deviceId}
+ </delete>
+</mapper>
\ No newline at end of file
--
Gitblit v1.9.3