From 7e02d0258ed8631d92649a600758974959ddf984 Mon Sep 17 00:00:00 2001 From: htjcAdmin Date: Wed, 23 Jul 2025 17:26:23 +0800 Subject: [PATCH] =?UTF-8?q?/*=E7=81=B5=E5=B7=9E=E7=AB=99=E7=BA=A2=E5=A4=96?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4*/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/IvsCameraServiceImpl.java | 55 +++++++++++++++---- .../inspect/nvr/utils/StringHexConverter.java | 28 ++++++++++ 2 files changed, 72 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/inspect/nvr/utils/StringHexConverter.java diff --git a/src/main/java/com/inspect/nvr/service/impl/IvsCameraServiceImpl.java b/src/main/java/com/inspect/nvr/service/impl/IvsCameraServiceImpl.java index 1df4603..ec04d0f 100644 --- a/src/main/java/com/inspect/nvr/service/impl/IvsCameraServiceImpl.java +++ b/src/main/java/com/inspect/nvr/service/impl/IvsCameraServiceImpl.java @@ -10,8 +10,10 @@ import com.inspect.nvr.hikVision.utils.jna.HCNetSDK; import com.inspect.nvr.hikVision.utils.jna.HikVisionUtils; import com.inspect.nvr.service.IvsCameraService; import com.inspect.nvr.utils.DateUtils; +import com.inspect.nvr.utils.StringHexConverter; import com.inspect.nvr.utils.redis.RedisService; import com.sun.jna.ptr.IntByReference; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -33,9 +35,9 @@ import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; +@Slf4j @Service public class IvsCameraServiceImpl implements IvsCameraService { - private final Logger log = LoggerFactory.getLogger(this.getClass()); @Value("${test-mode:false}") private boolean testMode; @@ -50,7 +52,7 @@ public class IvsCameraServiceImpl implements IvsCameraService { @Override public IvsPresetListView ptzPresetList(String cameraCode, String domainCode) { - if(testMode) { + if (testMode) { List list = new ArrayList<>(); list.add(IvsPresetListView.PtzPresetInfo .builder().presetName("preset").presetIndex(0).focusSwitch(1).reserve("reserve") @@ -70,7 +72,7 @@ public class IvsCameraServiceImpl implements IvsCameraService { //跳转预置位 @Override public PtzControlResult ptzControl(PtzControlParam param) { - if(testMode) { + if (testMode) { return PtzControlResult.builder() .resultCode("0") .build(); @@ -135,9 +137,16 @@ public class IvsCameraServiceImpl implements IvsCameraService { public SnapshotInfoListResult getSnapshotList(SnapshotInfoListParam param) { SnapshotInfoListResult.SnapshotInfoList snapshotInfoList = new SnapshotInfoListResult.SnapshotInfoList(); List infoList = new ArrayList<>(); + final String rawString = String.join((":"), param.getAddress(), param.getUsername(), param.getPassword()); + final String hexString = StringHexConverter.toHex(rawString); + + + String[] addressArray = param.getAddress().split(":"); + final String pictureUrl = "http://" + addressArray[0] + ":" + addressArray[1] + "/downloadfile?filesessionid=" + hexString; + log.info("GET_SNAPSHOT_LIST rawString: {}, hexString: {}, pictureUrl: {}", rawString, hexString, pictureUrl); infoList.add( SnapshotInfoListResult.SnapshotInfo.builder() - .pictureUrl("http://192.168.1.172:18539/downloadfile?filesessionid=" + param.getTaskID()) + .pictureUrl(pictureUrl) .cameraCode(param.getCameraCode()) .build()); snapshotInfoList.setTotal(1); @@ -152,6 +161,8 @@ public class IvsCameraServiceImpl implements IvsCameraService { @Override public ByteArrayInputStream downloadFile(String fileSessionId) { + final String rawString = StringHexConverter.fromHex(fileSessionId); + log.info("DOWNLOAD_FILE hexString: {}, rawString: {}", fileSessionId, rawString); if (testMode) { try { return new ByteArrayInputStream(loadDefaultImage()); @@ -160,14 +171,38 @@ public class IvsCameraServiceImpl implements IvsCameraService { } } + String[] cameraAddressInfos = rawString.split((":")); + if (cameraAddressInfos.length != 6) { + log.error("DOWNLOAD_FILE ADDRESS INFO ERROR rawString: {}", rawString); + try { + return new ByteArrayInputStream(loadDefaultImage()); + } catch (IOException e) { + throw new RuntimeException("测试环境生成错误图片失败2", e); + } + } + // 从nvr或者camera下载图片, 开发中 Camera camera = new Camera(); //赋值 - camera.setIp("192.168.1.231"); - camera.setPort(8000); - camera.setUserName("admin"); - camera.setPassword("2016.h.BD"); - camera.setChannel(11); +// camera.setIp("192.168.1.231"); +// camera.setPort(8000); +// camera.setUserName("admin"); +// camera.setPassword("2016.h.BD"); +// camera.setChannel(11); + + log.info("DOWNLOAD_FILE ip: {}, port: {}, username: {}, password: {}, channel: {}, pointName: {}", + cameraAddressInfos[0], + cameraAddressInfos[1], + cameraAddressInfos[2], + cameraAddressInfos[3], + cameraAddressInfos[4], + cameraAddressInfos[5]); + camera.setIp(cameraAddressInfos[0]); + camera.setPort(Integer.parseInt(cameraAddressInfos[1])); + camera.setUserName(cameraAddressInfos[2]); + camera.setPassword(cameraAddressInfos[3]); + camera.setChannel(Integer.parseInt(cameraAddressInfos[4])); + camera.setPointNum(Integer.parseInt(cameraAddressInfos[5])); //从redis中获取lUserID(存在时间200) lUserID = (Integer) redisService.redisTemplate.opsForValue().get(camera.getIp() + "_userId"); @@ -211,8 +246,6 @@ public class IvsCameraServiceImpl implements IvsCameraService { byte[] bytes = StreamUtils.copyToByteArray(inputStream); - - // 确保删除临时文件 Files.deleteIfExists(tempImagePath); diff --git a/src/main/java/com/inspect/nvr/utils/StringHexConverter.java b/src/main/java/com/inspect/nvr/utils/StringHexConverter.java new file mode 100644 index 0000000..0b17d44 --- /dev/null +++ b/src/main/java/com/inspect/nvr/utils/StringHexConverter.java @@ -0,0 +1,28 @@ +package com.inspect.nvr.utils; + +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; + +@Slf4j +public class StringHexConverter { + // 字符串 -> 十六进制字符串 + public static String toHex(String input) { + byte[] bytes = input.getBytes(StandardCharsets.UTF_8); + StringBuilder hex = new StringBuilder(bytes.length * 2); + for (byte b : bytes) { + hex.append(String.format("%02x", b)); + } + return hex.toString(); + } + + // 十六进制字符串 -> 原始字符串 + public static String fromHex(String hex) { + int length = hex.length(); + byte[] bytes = new byte[length / 2]; + for (int i = 0; i < length; i += 2) { + bytes[i / 2] = (byte) Integer.parseInt(hex.substring(i, i + 2), 16); + } + return new String(bytes, StandardCharsets.UTF_8); + } +}