liusuyi
2026-05-18 b5cd784d0cde5b7c82ea78aef4ac0e5a161d8c5d
ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/hik/service/AbstractHikVisionSDK.java
@@ -41,6 +41,7 @@
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.util.StopWatch;
import org.springframework.web.multipart.MultipartFile;
import java.awt.geom.Point2D;
import java.io.ByteArrayInputStream;
import java.io.File;
@@ -703,7 +704,10 @@
        String cameraId = cmd.getCameraId();
        Integer chanNo = cmd.getChanNo();
        int userId = cmd.getLoginId().intValue();
        ArdCamera camera = getCamera(cameraId);
        if ("1".equals(camera.getType())) {
            return getPtzHigh(cmd);
        } else {
        NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
        Pointer point = m_ptzPosCurrent.getPointer();
        IntByReference ibrBytesReturned = new IntByReference(0);
@@ -724,13 +728,17 @@
        //如获取的水平参数P的值是0x1750,实际显示的P值为175度;
        //获取到的垂直参数T的值是0x0789,实际显示的T值为78.9度;
        //获取到的变倍参数Z的值是0x1100,实际显示的Z值为110倍。
        BigDecimal b = BigDecimal.valueOf((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPos)) / 10);
        BigDecimal c = BigDecimal.valueOf((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPos)) / 10);
        BigDecimal d = BigDecimal.valueOf((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPos)) / 10);
            BigDecimal b =
                    BigDecimal.valueOf((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPos)) / 10);
            BigDecimal c =
                    BigDecimal.valueOf((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPos)) / 10);
            BigDecimal d =
                    BigDecimal.valueOf((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPos)) / 10);
        float p = b.setScale(1, RoundingMode.HALF_UP).floatValue();
        float t = c.setScale(1, RoundingMode.HALF_UP).floatValue();
        float z = d.setScale(1, RoundingMode.HALF_UP).floatValue();
        return new PtzDto(p, t, z);
        }
    }
    /**
@@ -741,8 +749,7 @@
     * @author 刘苏义
     * @date 2024/9/5 17:00
     */
    @Override
    public PtzDto getPtzHigh(CameraCmd cmd) {
    private PtzDto getPtzHigh(CameraCmd cmd) {
        try {
            String cameraId = cmd.getCameraId();
            Integer chanNo = cmd.getChanNo();
@@ -796,6 +803,14 @@
        Integer channelNum = cmd.getChanNo();
        PtzDto ptzDto = cmd.getPtzDto();
        int userId = cmd.getLoginId().intValue();
        ArdCamera camera = getCamera(cameraId);
        if ("1".equals(camera.getType())) {
            DeviceCFG systemInfo = getSystemInfo(cmd);
            if (systemInfo != null && "5.5.112".equals(systemInfo.getDwSoftwareVersion())) {
                return setPtzHighT(cmd);
            }
            return setPtzHigh(cmd);
        } else {
        NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
        m_ptzPosCurrent.wAction = 1;
        try {
@@ -822,6 +837,7 @@
            return false;
        }
    }
    }
    /**
     * 设置高精度ptz信息(透传)
@@ -832,8 +848,7 @@
     * @author 刘苏义
     * @date 2024/9/5 17:04
     */
    @Override
    public Boolean setPtzHighT(CameraCmd cmd) {
    private Boolean setPtzHighT(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer chanNo = cmd.getChanNo();
        PtzDto ptzDto = cmd.getPtzDto();
@@ -893,8 +908,7 @@
    }
    //非透传 旧设备使用 新固件会导致2通道不自动聚焦
    @Override
    public Boolean setPtzHigh(CameraCmd cmd) {
    private Boolean setPtzHigh(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer chanNo = cmd.getChanNo();
        PtzDto ptzDto = cmd.getPtzDto();
@@ -1842,6 +1856,7 @@
            return false;
        }
    }
    @Override
    public String recordStop(CameraCmd cmd) {
        String url = "";
@@ -2434,4 +2449,15 @@
            return true;
        }
    }
    /**
     * 获取相机信息(会校验存在性)
     */
    private ArdCamera getCamera(String cameraId) {
        ArdCamera camera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cameraId);
        if (camera == null) {
            throw CameraSDKException.cameraNotExist(cameraId);
        }
        return camera;
    }
}