|
|
|
@ -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()))); |
|
|
|
} |
|
|
|
|
|
|
|
} |