diff --git a/src/main/java/com/inspect/nvr/domain/Infrared/Camera.java b/src/main/java/com/inspect/nvr/domain/Infrared/Camera.java index a4fedf4..6a7e037 100644 --- a/src/main/java/com/inspect/nvr/domain/Infrared/Camera.java +++ b/src/main/java/com/inspect/nvr/domain/Infrared/Camera.java @@ -27,4 +27,14 @@ public class Camera { private String Ulr; + private String NvrIp; + + private int nvrPort; + + private String nvrUserName; + + private String nvrPassword; + + private int channel; + } diff --git a/src/main/java/com/inspect/nvr/service/HikVisionService.java b/src/main/java/com/inspect/nvr/service/HikVisionService.java index d6bd3c1..fdbcacc 100644 --- a/src/main/java/com/inspect/nvr/service/HikVisionService.java +++ b/src/main/java/com/inspect/nvr/service/HikVisionService.java @@ -44,5 +44,6 @@ public interface HikVisionService { InputStream downloadCsv(String filePath); - + AjaxResult NvrCameraAngleJump(Camera camera); + public AjaxResult NvrCameraPictrue(Camera camera) throws Exception; } diff --git a/src/main/java/com/inspect/nvr/service/impl/HikVisionServiceImpl.java b/src/main/java/com/inspect/nvr/service/impl/HikVisionServiceImpl.java index c3f0551..fddeb24 100644 --- a/src/main/java/com/inspect/nvr/service/impl/HikVisionServiceImpl.java +++ b/src/main/java/com/inspect/nvr/service/impl/HikVisionServiceImpl.java @@ -6,7 +6,6 @@ import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; -import com.inspect.nvr.constant.AlgConstants; import com.inspect.nvr.domain.Infrared.*; import com.inspect.nvr.domain.algorithm.in.AnalyseReqItem; import com.inspect.nvr.domain.algorithm.in.AnalyseRequest; @@ -17,7 +16,6 @@ import com.inspect.nvr.hikVision.utils.AjaxResult; import com.inspect.nvr.hikVision.utils.StringUtils; import com.inspect.nvr.hikVision.utils.jna.HCNetSDK; import com.inspect.nvr.hikVision.utils.jna.HikVisionUtils; - import com.inspect.nvr.service.HikFRemoteConfigCallBack_imp; import com.inspect.nvr.service.HikVisionService; import com.inspect.nvr.tempCount.TempCount; @@ -35,6 +33,7 @@ import org.apache.commons.net.ftp.FTPSClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @@ -106,6 +105,9 @@ public class HikVisionServiceImpl implements HikVisionService { @Resource private RedisService redisService; + @Autowired + public RedisTemplate redisTemplate; + @Override public AjaxResult login(NvrInfo nvrInfo) { return login_V40(nvrInfo); @@ -401,7 +403,7 @@ public class HikVisionServiceImpl implements HikVisionService { //1:跳转预置位 //家里相机没有预置位,现场相机存在预置位需要跳转到画测温框预置位,否则无法获取规则温度 - cameraAngleJump(camera); +// cameraAngleJump(camera); //2:抓取图片,保存到ftp try { @@ -1064,4 +1066,86 @@ public class HikVisionServiceImpl implements HikVisionService { return fileName + ".csv"; } +// NVR跳转到预置位 + public AjaxResult NvrCameraAngleJump(Camera camera) { + + int lUserID = (int) redisTemplate.opsForValue().get(camera.getIp() + "_userId"); + if (lUserID == -1) { + HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = HikVisionUtils.login_V40( + camera.getIp(), + (short) camera.getPort(), + camera.getUserName(), + camera.getPassword() + ); + HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); + lUserID = hcNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); + redisService.redisTemplate.opsForValue().set(camera.getIp() + "_userId", lUserID); + } + //参数:登录令牌,通道号,预置位跳转,跳转的预置位码 + boolean gotoPreset = hcNetSDK.NET_DVR_PTZPreset_Other(lUserID, camera.getChannel(), HCNetSDK.GOTO_PRESET, camera.getPointNum()); + if (!gotoPreset) { + System.out.println("获取设备预置位跳转设备参数失败,错误码:" + hcNetSDK.NET_DVR_GetLastError()); + return AjaxResult.error(hcNetSDK.NET_DVR_GetErrorMsg(new IntByReference(hcNetSDK.NET_DVR_GetLastError()))); + } else { + System.out.println("海康-成功跳转到预置位!"); + } + + return AjaxResult.success(); + } + + //NVR抓图 + public AjaxResult NvrCameraPictrue(Camera camera) throws IOException { + + int lUserID = (int)redisTemplate.opsForValue().get(camera.getIp() + "_userId"); +// int lUserID = (int) redisTemplate.opsForValue().get(camera.getNvrip() + "_userId"); + if (lUserID == -1) { + HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = HikVisionUtils.login_V40( + camera.getIp(), + (short) camera.getPort(), + camera.getUserName(), + camera.getPassword() + ); + HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); + lUserID = hcNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); + redisService.redisTemplate.opsForValue().set(camera.getIp() + "_userId", lUserID); + } + + HCNetSDK.NET_DVR_JPEGPARA dvrJpegpara = new HCNetSDK.NET_DVR_JPEGPARA(); + dvrJpegpara.wPicSize = 0xff; + dvrJpegpara.wPicQuality = 2; + dvrJpegpara.write(); + + // 2. 创建临时存储目录(系统临时目录更安全) + Path tempDir = Paths.get(System.getProperty("java.io.tmpdir"), "hik_capture"); + if (!Files.exists(tempDir)) { + Files.createDirectories(tempDir); + } + // 3. 生成唯一文件名(IP+时间戳) + String fileName = String.format("%s_%s.jpg", camera.getIp(), DateUtils.dateTimeNow("yyyyMMddHHmmss")); + Path tempImagePath = tempDir.resolve(fileName); + + boolean b = hcNetSDK.NET_DVR_CaptureJPEGPicture(lUserID, camera.getChannel(), dvrJpegpara, + tempImagePath.toString().getBytes("GBK")); + if (!b) { + System.out.println("设置设备进行抓图失败,错误码:" + hcNetSDK.NET_DVR_GetLastError()); + return AjaxResult.error("设置设备进行抓图失败,错误码:" + hcNetSDK.NET_DVR_GetLastError()); + } + + try (InputStream inputStream = Files.newInputStream(tempImagePath)) { + picFtp("/2/" + fileName, + inputStream, + ftpUrlAddress, + ftpUrlPort, + ftpUrlAccount, + ftpUrlPwd + ); + } catch (Exception e) { + log.error("抓图并上传失败:{}", e.getMessage()); + } finally { + // 6. 确保删除临时文件 + Files.deleteIfExists(tempImagePath); + } + return AjaxResult.error(hcNetSDK.NET_DVR_GetErrorMsg(new IntByReference(hcNetSDK.NET_DVR_GetLastError()))); + } + } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application.yml similarity index 54% rename from src/main/resources/application-dev.yml rename to src/main/resources/application.yml index f6a1d53..eb4edbd 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application.yml @@ -1,12 +1,15 @@ server: - port: 18530 + port: 8080 spring: application: name: inspect-nvr profiles: active: dev - + redis: + host: localhost + port: 6379 + password: