aijinhui
2023-10-24 8a87e4226aa802d6a0e3566c66824fedf68e77da
ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
@@ -10,6 +10,8 @@
import com.ruoyi.device.channel.service.IArdChannelService;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.media.domain.Vtdu;
import com.ruoyi.media.service.IVtduService;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
@@ -35,32 +37,50 @@
    @Override
    public int invoke(int lUserID, int dwResult, HCNetSDK.NET_DVR_DEVICEINFO_V30 lpDeviceinfo, Pointer pUser) {
        IVtduService vtduService = SpringUtils.getBean(IVtduService.class);
        IArdChannelService ardChannelService = SpringUtils.getBean(IArdChannelService.class);
        IHikClientService hikClientService = SpringUtils.getBean(IHikClientService.class);
        IArdCamerasService ardCamerasService = SpringUtils.getBean(IArdCamerasService.class);
        if (GlobalVariable.loginMap.containsKey(camera.getId())) {
            GlobalVariable.loginMap.remove(camera.getId());
        }
        //删除管理通道
        ardChannelService.deleteArdChannelByDeviceId(camera.getId());
        if (dwResult == 1) {
            GlobalVariable.loginMap.put(camera.getId(), lUserID);
            log.debug(camera.getIp() + ":" + camera.getPort() + "登录成功");
            camera.setLoginId(lUserID);
            camera.setState("1");
            camera.setChanNum((int) lpDeviceinfo.byChanNum);
            camera.setStartDChan((int)lpDeviceinfo.byStartDChan);
            camera.setStartDChan((int) lpDeviceinfo.byStartDChan);
            //获取最新通道
            List<ArdChannel> cameraChannelList = hikClientService.getCameraChannelList(camera);
            if(cameraChannelList.size()>0) {
                //删除管理通道
                ardChannelService.deleteArdChannelByDeviceId(camera.getId());
            if (cameraChannelList.size() > 0) {
                //添加通道
                for (ArdChannel channel : cameraChannelList) {
                    channel.setId(IdUtils.simpleUUID());
                    ardChannelService.insertArdChannel(channel);
                }
                //配置到流媒体
                for (ArdChannel channel : cameraChannelList) {
                    String name = camera.getId() + "_" + channel.getChanNo();
                    String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
                    Vtdu vtdu = vtduService.selectVtduByName(name);
                    if (vtdu != null) {
                        vtduService.deleteVtduByName(name);
                    }
                    //添加到流媒体
                    vtdu = new Vtdu();
                    vtdu.setRtspSource(rtspSource);
                    vtdu.setName(camera.getId() + "_" + channel.getChanNo());
                    vtdu.setIsCode("0");//默认不转码
                    vtdu.setMode("1");//默认CPU软解码
                    vtdu.setCameraId(camera.getId());
                    vtduService.insertVtdu(vtdu);
                }
            }
            //创建引导队列
            if(!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId()))
            {
            if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
                Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
                PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
                GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
@@ -70,8 +90,9 @@
            log.debug(camera.getIp() + ":" + camera.getPort() + "登录失败");
            camera.setChanNum(0);
            camera.setLoginId(-1);
            camera.setState("0");
        }
        ardCamerasService.updateArdCameras(camera);
        return 1;
    }
}
}