| | |
| | | import com.ruoyi.device.channel.domain.ArdChannel; |
| | | import com.ruoyi.device.hiksdk.common.GlobalVariable; |
| | | import com.ruoyi.device.camera.domain.ArdCameras; |
| | | import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil; |
| | | import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK; |
| | | import com.ruoyi.utils.gis.GisUtil; |
| | | import com.ruoyi.device.hiksdk.sdk.HCNetSDK; |
| | | import com.ruoyi.device.hiksdk.service.IHikClientService; |
| | | import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack; |
| | | import com.ruoyi.storage.minio.utils.MinioUtils; |
| | | import com.ruoyi.device.hiksdk.sdk.LoginResultCallBack; |
| | | import com.ruoyi.utils.minio.MinioUtil; |
| | | import com.sun.jna.Native; |
| | | import com.sun.jna.NativeLong; |
| | | import com.sun.jna.Platform; |
| | |
| | | import java.math.BigDecimal; |
| | | import java.nio.ByteBuffer; |
| | | import java.text.DecimalFormat; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | | import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*; |
| | | import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.*; |
| | | |
| | | /** |
| | | * @ClassName: hikClientServiceImpl |
| | |
| | | private static String endpoint; |
| | | @Resource |
| | | private IArdCamerasService ardCamerasService; |
| | | @Resource |
| | | private MinioUtils minioUtil; |
| | | |
| | | private static HCNetSDK hCNetSDK; |
| | | |
| | |
| | | public boolean pTZControlWithSpeed(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Integer speed = cmd.getSpeed(); |
| | | Integer code = cmd.getCode(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | |
| | | @SdkOperate |
| | | public boolean setFocusPos(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Integer dwFocusPos = cmd.getDwFocusPos(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | // 获取参数 |
| | | Integer userId = GlobalVariable.loginMap.get(cameraId); |
| | | |
| | | NET_DVR_FOCUSMODE_CFG focusmodeCfg = new NET_DVR_FOCUSMODE_CFG(); |
| | | Pointer point = focusmodeCfg.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | focusmodeCfg.dwFocusPos = dwFocusPos; |
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, focusmodeCfg.size(), ibrBytesReturned); |
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); |
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); |
| | | struGisInfo.struPtzPosEx.dwFocus=dwFocusPos; |
| | | struStdCfg.read(); |
| | | IntByReference lchannel = new IntByReference(channelNum); |
| | | struStdCfg.lpInBuffer= struGisInfo.getPointer(); |
| | | struStdCfg.lpCondBuffer = lchannel.getPointer(); |
| | | struStdCfg.dwCondSize = 4; |
| | | struStdCfg.dwInSize = struGisInfo.size(); |
| | | struStdCfg.write();//设置前之前要write() |
| | | boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置聚焦值失败,请稍后重试" + code); |
| | | log.error("设置GIS信息数据失败,请稍后重试" + code); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | |
| | | @Override |
| | | public Map<String, Object> getFocusPos(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return new HashMap<>(); |
| | | } |
| | | // 获取参数 |
| | | Integer userId = GlobalVariable.loginMap.get(cameraId); |
| | | |
| | | NET_DVR_FOCUSMODE_CFG focusmodeCfg = new NET_DVR_FOCUSMODE_CFG(); |
| | | Pointer point = focusmodeCfg.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, focusmodeCfg.size(), ibrBytesReturned); |
| | | if (bool) { |
| | | focusmodeCfg.read(); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("dwFocusPos", focusmodeCfg.dwFocusPos); |
| | | map.put("byFocusDefinitionDisplay ", focusmodeCfg.byFocusDefinitionDisplay); |
| | | map.put("dwRelativeFocusPos", focusmodeCfg.dwRelativeFocusPos); |
| | | return map; |
| | | } else { |
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); |
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); |
| | | struStdCfg.read(); |
| | | IntByReference lchannel = new IntByReference(channelNum); |
| | | struStdCfg.lpCondBuffer = lchannel.getPointer(); |
| | | struStdCfg.dwCondSize = 4; |
| | | struStdCfg.lpOutBuffer = struGisInfo.getPointer(); |
| | | struStdCfg.dwOutSize = struGisInfo.size(); |
| | | struStdCfg.write();//设置前之前要write() |
| | | boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.debug("获取聚焦值失败,请稍后重试" + code); |
| | | log.error("获取GIS信息数据失败,请稍后重试" + code); |
| | | return new HashMap<>(); |
| | | } else { |
| | | struGisInfo.read(); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("dwFocus",struGisInfo.struPtzPosEx.dwFocus); |
| | | return map; |
| | | } |
| | | } |
| | | |
| | |
| | | @SdkOperate |
| | | public boolean setPreset(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Integer PresetIndex = cmd.getPresetIndex(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | |
| | | @SdkOperate |
| | | public boolean gotoPreset(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Integer PresetIndex = cmd.getPresetIndex(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | |
| | | @Override |
| | | public String getVideoResolution(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return " "; |
| | | } |
| | |
| | | @Override |
| | | public Map<String, Object> getPtz(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return null; |
| | | } |
| | |
| | | @SdkOperate |
| | | public boolean setPtz(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Map<String, Double> ptz = cmd.getPtzMap(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | |
| | | @SdkOperate |
| | | public boolean guideTargetPosition(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | |
| | | @Override |
| | | public int getPTZLockInfo(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return -1; |
| | | } |
| | |
| | | @SdkOperate |
| | | public boolean setZeroPtz(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | |
| | | @Override |
| | | public Map<String, Object> getPtzScope(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return new HashMap<>(); |
| | | } |
| | |
| | | public boolean controlDefogcfg(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | |
| | | public boolean controlInfrarecfg(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | |
| | | public boolean controlFocusMode(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | | * @描述 获取聚焦模式 |
| | | * @参数 [userId, channelNum] |
| | | * @返回值 boolean |
| | | * @创建人 刘苏义 |
| | | * @创建时间 2023/1/18 13:07 |
| | | * @修改人和其它信息 |
| | | */ |
| | | public String getFocusMode(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return ""; |
| | | } |
| | |
| | | public boolean controlPTHeateRpwron(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | |
| | | public boolean controlCameraDeicing(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | |
| | | */ |
| | | public String captureJPEGPicture(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return ""; |
| | | } |
| | |
| | | @SdkOperate |
| | | public String picCutCate(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return ""; |
| | | } |
| | |
| | | InputStream input = new ByteArrayInputStream(array); |
| | | String url = ""; |
| | | try { |
| | | boolean b = minioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG); |
| | | boolean b = MinioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG); |
| | | if (b) { |
| | | url = minioUtil.getBucketObjectUrl(BucketName, ObjectName); |
| | | url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); |
| | | log.debug("上传文件成功!" + url); |
| | | } |
| | | } catch (IOException ex) { |
| | |
| | | public String record(CameraCmd cmd) { |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); |
| | | boolean enable = cmd.isEnable(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | |
| | | public void recordStart(CameraCmd cmd) { |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return; |
| | |
| | | String url = ""; |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return ""; |
| | |
| | | log.debug("录像停止"); |
| | | //存入minio |
| | | String BucketName = cmd.getRecordBucketName(); |
| | | String ObjectName = cmd.getRecordObjectName()+".mp4"; |
| | | String ObjectName = cmd.getRecordObjectName() + ".mp4"; |
| | | FileInputStream stream = new FileInputStream(path); |
| | | boolean b = minioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4"); |
| | | boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4"); |
| | | if (b) { |
| | | url = minioUtil.getBucketObjectUrl(BucketName, ObjectName); |
| | | url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); |
| | | log.debug("上传文件成功!" + url); |
| | | } |
| | | return url; |
| | |
| | | public void recordStopNotToMinio(CameraCmd cmd) { |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return; |
| | | } |
| | |
| | | // 获取通道号 |
| | | for (int iChannum = 0; iChannum < chanNum; iChannum++) { |
| | | ArdChannel ardChannel = new ArdChannel(); |
| | | int channum = iChannum + startDChan+1; |
| | | int channum = iChannum + startDChan + 1; |
| | | HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); |
| | | strPicCfg.dwSize = strPicCfg.size(); |
| | | strPicCfg.write(); |
| | |
| | | } |
| | | return channelList; |
| | | } |
| | | |
| | | /** |
| | | * @描述 获取GIS信息数据 |
| | | * @参数 [userId, channelNum] |
| | | * @返回值 boolean |
| | | * @创建人 刘苏义 |
| | | * @创建时间 2023/1/17 16:36 |
| | | * @修改人和其它信息 0-解锁 1-锁定 |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getGisInfo(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return new HashMap<>(); |
| | | } |
| | | // 获取参数 |
| | | Integer userId = GlobalVariable.loginMap.get(cameraId); |
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); |
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); |
| | | struStdCfg.read(); |
| | | IntByReference lchannel = new IntByReference(channelNum); |
| | | struStdCfg.lpCondBuffer = lchannel.getPointer(); |
| | | struStdCfg.dwCondSize = 4; |
| | | struStdCfg.lpOutBuffer = struGisInfo.getPointer(); |
| | | struStdCfg.dwOutSize = struGisInfo.size(); |
| | | struStdCfg.write();//设置前之前要write() |
| | | boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("获取GIS信息数据失败,请稍后重试" + code); |
| | | return new HashMap<>(); |
| | | } else { |
| | | struGisInfo.read(); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("p", struGisInfo.struPtzPos.fPanPos); |
| | | map.put("t", struGisInfo.struPtzPos.fTiltPos<0?struGisInfo.struPtzPos.fTiltPos+360:struGisInfo.struPtzPos.fTiltPos); |
| | | map.put("z", struGisInfo.struPtzPos.fZoomPos); |
| | | map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// 水平视场角 |
| | | map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// 垂直视场角 |
| | | return map; |
| | | } |
| | | } |
| | | } |