| | |
| | | package com.ruoyi.device.hiksdk.service.impl; |
| | | |
| | | import com.ruoyi.common.annotation.SdkOperate; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.domain.model.LoginUser; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.file.FileUtils; |
| | | import com.ruoyi.common.utils.uuid.IdUtils; |
| | | import com.ruoyi.constant.CamPriority; |
| | | import com.ruoyi.device.camera.domain.CameraCmd; |
| | | import com.ruoyi.device.camera.mapper.ArdCamerasMapper; |
| | | import com.ruoyi.device.hiksdk.common.GlobalVariable; |
| | |
| | | import com.ruoyi.device.hiksdk.service.IHikClientService; |
| | | import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack; |
| | | import com.ruoyi.device.hiksdk.util.minio.MinioUtils; |
| | | import com.ruoyi.system.mapper.SysUserMapper; |
| | | import com.sun.jna.Native; |
| | | import com.sun.jna.Platform; |
| | | import com.sun.jna.Pointer; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.io.*; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.nio.ByteBuffer; |
| | | import java.text.DecimalFormat; |
| | | import java.text.SimpleDateFormat; |
| | |
| | | |
| | | @Resource |
| | | ArdCamerasMapper ardCamerasMapper; |
| | | |
| | | @Resource |
| | | SysUserMapper sysUserMapper; |
| | | |
| | | private static HCNetSDK hCNetSDK; |
| | | |
| | |
| | | hCNetSDK.NET_DVR_Cleanup(); |
| | | camera.setLoginId(-1); |
| | | } |
| | | if (GlobalVariable.loginMap.containsKey(camera.getId())) { |
| | | GlobalVariable.loginMap.remove(camera.getId()); |
| | | } |
| | | GlobalVariable.loginMap.remove(camera.getId()); |
| | | GlobalVariable.loginMap.put(camera.getId(), lUserID); |
| | | |
| | | camera.setLoginId(lUserID); |
| | | camera.setChannel((int) m_strDeviceInfo.byStartChan); |
| | | return camera; |
| | |
| | | /** |
| | | * 是否在线 |
| | | * |
| | | * @param cmd |
| | | * @param cmd 相机命令 |
| | | */ |
| | | @Override |
| | | public boolean isOnLine(CameraCmd cmd) { |
| | |
| | | return false; |
| | | } |
| | | Integer userId = GlobalVariable.loginMap.get(cameraId); |
| | | boolean isOnLine = hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0); |
| | | return isOnLine; |
| | | return hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0); |
| | | } |
| | | |
| | | /** |
| | |
| | | return false; |
| | | } |
| | | Integer userId = GlobalVariable.loginMap.get(cameraId); |
| | | Integer dwStop; |
| | | int dwStop; |
| | | if (enable) { |
| | | dwStop = 0;//开启 |
| | | } else { |
| | | dwStop = 1;//关闭 |
| | | } |
| | | Integer dwPTZCommand = -1; |
| | | int dwPTZCommand = -1; |
| | | switch (code) { |
| | | /*方向*/ |
| | | case 1: |
| | |
| | | /** |
| | | * 设置聚焦值 |
| | | * |
| | | * @param cmd |
| | | * @param cmd 相机命令 |
| | | */ |
| | | @Override |
| | | @SdkOperate |
| | |
| | | /** |
| | | * 获取聚焦值 |
| | | * |
| | | * @param cmd |
| | | * @param cmd 相机命令 |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getFocusPos(CameraCmd cmd) { |
| | |
| | | /** |
| | | * 设置预置点 |
| | | * |
| | | * @param cmd |
| | | * @param cmd 相机命令 |
| | | */ |
| | | @Override |
| | | @SdkOperate |
| | |
| | | /** |
| | | * 转到预置点 |
| | | * |
| | | * @param cmd |
| | | * @param cmd 相机命令 |
| | | */ |
| | | @Override |
| | | @SdkOperate |
| | |
| | | if (bool) { |
| | | resolution.read(); |
| | | //视频输出口分辨率:0- 1024x768,1- 1280x720,2-1280x1024,3- 1680x1050,4- 1920x1080,5- 3840*2160 |
| | | byte byStreamType = resolution.struNormHighRecordPara.byStreamType; |
| | | int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate; |
| | | // byte byStreamType = resolution.struNormHighRecordPara.byStreamType; |
| | | // int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate; |
| | | int byResolution = resolution.struNormHighRecordPara.byResolution; |
| | | switch (byResolution) { |
| | | case 0: |
| | |
| | | } |
| | | |
| | | /** |
| | | * @return |
| | | * @描述 获取ptz信息 |
| | | * @参数 [userId, channelNum] |
| | | * @返回值 boolean |
| | |
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_PTZPOS, channelNum, pioint, m_ptzPosCurrent.size(), ibrBytesReturned); |
| | | if (bool) { |
| | | m_ptzPosCurrent.read(); |
| | | DecimalFormat df = new DecimalFormat("0.0");//设置保留位数 |
| | | // DecimalFormat df = new DecimalFormat("0.0");//设置保留位数 |
| | | //16进制转Integer后除10,保留小数点1位 |
| | | //实际显示的PTZ值是获取到的十六进制值的十分之一, |
| | | //如获取的水平参数P的值是0x1750,实际显示的P值为175度; |
| | |
| | | double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | // log.debug("T垂直参数为: " + p + "P水平参数为: " + t + "Z变倍参数为: " + z); |
| | | //log.debug("T垂直参数为: " + p + "P水平参数为: " + t + "Z变倍参数为: " + z); |
| | | Map<String, Object> ptzMap = new HashMap<>(); |
| | | ptzMap.put("p", p); |
| | | ptzMap.put("t", t); |
| | |
| | | now.setTime(now.getTime() + cmd.getExpired() * 1000); |
| | | ardCameras.setOperatorExpired(now);//设置当前过期时间 |
| | | ardCamerasMapper.updateArdCameras(ardCameras); |
| | | // String cameraId = cmd.getCameraId();//申请锁的相机 |
| | | // ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId); |
| | | // if (StringUtils.isNull(ardCameras)) { |
| | | // return false;//找不到相机拒绝操控 |
| | | // } |
| | | // Integer expired = cmd.getExpired();//申请控制时长 |
| | | // String operator = cmd.getOperator();//申请者 |
| | | // String currentOperator = ardCameras.getOperatorId();//相机当前控制者 |
| | | // Date currentExpired = ardCameras.getOperatorExpired();//相机当前过期时间 |
| | | // if (currentExpired == null) { |
| | | // //设置当前操作用户ID |
| | | // ardCameras.setOperatorId(operator); |
| | | // //设置当前过期时间 |
| | | // Date now = new Date(); |
| | | // now.setTime(now.getTime() + expired * 1000); |
| | | // ardCameras.setOperatorExpired(now); |
| | | // ardCamerasMapper.updateArdCameras(ardCameras); |
| | | // } else { |
| | | // //如果过期时间有值 |
| | | // //如果是本人直接修改 |
| | | // if (currentOperator.equals(operator)) { |
| | | // //设置当前过期时间 |
| | | // Date now = new Date(); |
| | | // now.setTime(now.getTime() + expired * 1000); |
| | | // ardCameras.setOperatorExpired(now); |
| | | // ardCamerasMapper.updateArdCameras(ardCameras); |
| | | // } else { |
| | | // //如果非本人比较优先级 |
| | | // Integer currentLevel = 0;//当前操作者的优先级 |
| | | // if (CamPriority.priorityMap.containsKey(currentOperator)) { |
| | | // /*当前控制者为系统报警用户*/ |
| | | // currentLevel = (Integer) CamPriority.priorityMap.get(currentOperator); |
| | | // } else { |
| | | // /*当前控制者为普通用户*/ |
| | | // SysUser sysUser = sysUserMapper.selectUserById(currentOperator); |
| | | // currentLevel = sysUser.getCameraPriority(); |
| | | // } |
| | | // Integer operatorLevel = 0;//获取申请者的优先级 |
| | | // if (CamPriority.priorityMap.containsKey(operator)) { |
| | | // /*包含说明当前申请控制者为系统报警用户*/ |
| | | // operatorLevel = (Integer) CamPriority.priorityMap.get(operator); |
| | | // } else { |
| | | // /*否则申请控制者为当前登录用户*/ |
| | | // LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | // SysUser user = loginUser.getUser();//获取登录用户的信息 |
| | | // operatorLevel = user.getCameraPriority(); |
| | | // } |
| | | // //判断优先级 |
| | | // if (operatorLevel > currentLevel) { |
| | | // Date now = new Date(); |
| | | // now.setTime(now.getTime() + expired * 60); |
| | | // ardCameras.setOperatorExpired(now);//设置当前过期时间 |
| | | // ardCameras.setOperatorId(operator);//设置当前用户 |
| | | // ardCamerasMapper.updateArdCameras(ardCameras); |
| | | // } else { |
| | | // return false;//优先级低无法上锁 |
| | | // } |
| | | // } |
| | | // } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * @描述 操控解锁 |
| | | * @参数 [userId, channelNum] |
| | |
| | | String cameraId = cmd.getCameraId();//申请解锁的相机 |
| | | String operator = cmd.getOperator();//申请者 |
| | | ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId); |
| | | if(ardCameras.getOperatorId().equals(operator)) |
| | | { |
| | | if (ardCameras.getOperatorId().equals(operator)) { |
| | | //如果解锁相机的当前用户是申请者,则清空该相机的过期时间 |
| | | ardCameras.setOperatorExpired(null); |
| | | int i = ardCamerasMapper.updateArdCameras(ardCameras); |
| | | if(i>0) |
| | | { |
| | | log.debug(cameraId+"--解锁成功"); |
| | | if (i > 0) { |
| | | log.debug(cameraId + "--解锁成功"); |
| | | } |
| | | } |
| | | return true; |
| | |
| | | return bool; |
| | | } |
| | | |
| | | public String getFocusMode(CameraCmd cmd) |
| | | { |
| | | public String getFocusMode(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | |
| | | log.info("当前聚焦模式:" + struFocusMode.byFocusMode); |
| | | return String.valueOf(struFocusMode.byFocusMode); |
| | | } |
| | | |
| | | /** |
| | | * @描述 云台加热开关 |
| | | * @参数 [userId, channelNum, enable] |
| | |
| | | FileInputStream stream = new FileInputStream(path); |
| | | String simpleUUID = IdUtils.simpleUUID(); |
| | | String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); |
| | | String recordName = cameraId + "/" + time + "/" + ObjectName +"_"+ simpleUUID + ".mp4"; |
| | | String recordName = cameraId + "/" + time + "/" + ObjectName + "_" + simpleUUID + ".mp4"; |
| | | boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType); |
| | | if (b) { |
| | | String url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName; |
| | |
| | | return ""; |
| | | } |
| | | } |
| | | |
| | | } |