zhanghua
2024-09-24 1169887e810367b74ea612738cf0a354f8bd6470
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package com.ycl.task;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sun.jna.ptr.IntByReference;
import com.ycl.dto.video.Camera;
import com.ycl.dto.video.PageResult;
import com.ycl.entity.video.VideoPoint;
import com.ycl.service.video.impl.IVideoPointService;
import com.ycl.util.VideoUtil;
import com.ycl.util.dahua.alarm.AlarmDataCB;
import com.ycl.util.dahua.lib.LibraryLoad;
import com.ycl.util.dahua.lib.NetSDKLib;
import com.ycl.util.dahua.lib.module.LoginModule;
import com.ycl.util.dahua.login.DisConnectCallBack;
import com.ycl.util.dahua.login.HaveReConnectCallBack;
import com.ycl.util.dahua.module.AlarmListenModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
 
import java.io.File;
import java.util.ArrayList;
import java.util.List;
 
/**
 * 同步海康视频
 */
@Component
public class SynchronizeHKVideo {
 
    @Autowired
    private IVideoPointService videoPointService;
    @Autowired
    private VideoUtil videoUtil;
 
    //    @Scheduled(cron = "0 */5 * * * ?")   // 每5分钟执行
    @Scheduled(cron = "0 0 1 * * ?")
    @Transactional(rollbackFor = Exception.class)
    public void scheduledTask() {
//        System.out.println("海康:开始执行");
 
        findVideoList(1, 5);
 
    }
 
    public static final NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE;
    // 登陆句柄
    private NetSDKLib.LLong loginHandle = new NetSDKLib.LLong(0);
 
    // 预览预览句柄
    private static NetSDKLib.LLong lRealHandle = new NetSDKLib.LLong(0);
 
 
    // 设备信息扩展
    private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
 
    @Scheduled(cron = "0 */1 * * * ?")
    @Transactional(rollbackFor = Exception.class)
    public void scheduledTestTask() {
        try {
 
            System.out.println("大华:开始执行");
            LibraryLoad.setExtractPath("/home/sccg/libs/linux64");
//            LibraryLoad.setExtractPath("D:\\1.workcode\\ycyl\\sccg_server\\ycl-platform\\src\\main\\resources\\libs\\win64");
            AlarmDataCB cbMessage = new AlarmDataCB();
            String m_strIp = "172.28.194.186";
            int m_nPort = 37777;
            String m_strUser = "admin";
            String m_strPassword = "scdx@123";
            InitTest();
            // 登陆设备
            int nSpecCap = NetSDKLib.EM_LOGIN_SPAC_CAP_TYPE.EM_LOGIN_SPEC_CAP_TCP;    // TCP登入
            IntByReference nError = new IntByReference(0);
            loginHandle = netSdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser,
                    m_strPassword, nSpecCap, null, deviceInfo, nError);
            if (loginHandle.longValue() != 0) {
                System.out.printf("Login Device[%s] Success!\n", m_strIp);
            } else {
                System.err.printf("Login Device[%s] Fail.Error[0x%x]\n", m_strIp, netSdk.CLIENT_GetLastError());
//                LoginOut();
            }
 
            AlarmListenModule.startListen(cbMessage, loginHandle);
 
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }
 
    public void InitTest() {
        // 初始化SDK库
        netSdk.CLIENT_Init(DisConnectCallBack.getInstance(), null);
 
        // 设置断线重连成功回调函数
        netSdk.CLIENT_SetAutoReconnect(HaveReConnectCallBack.getInstance(), null);
 
        //打开日志,可选
        NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
        String logPath = new File(".").getAbsoluteFile().getParent() + File.separator + "sdk_log" + File.separator + "sdk.log";
        setLog.bSetFilePath = 1;
        System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
        setLog.bSetPrintStrategy = 1;
        setLog.nPrintStrategy = 0;
        if (!netSdk.CLIENT_LogOpen(setLog)) {
            System.err.println("Open SDK Log Failed!!!");
        }
 
    }
 
    private void findVideoList(Integer pageNo, Integer pageSize) {
        try {
            PageResult<Camera> pageResult = videoUtil.callPostCameras(pageNo, pageSize, "0");
            if (pageResult.getTotal() > 0) {
                if (pageResult.getList().size() > 0) {
                    saveVideoFromCamera(pageResult.getList());
 
                    if (pageResult.getList().size() >= pageSize) {
                        findVideoList(pageNo + 1, pageSize);
                    }
                }
            }
        } catch (Exception ex) {
            System.out.println("海康:" + ex.getMessage());
        }
    }
 
    private void saveVideoFromCamera(List<Camera> list) {
 
        for (Camera c : list) {
            LambdaQueryWrapper<VideoPoint> queryWrapper = new LambdaQueryWrapper<VideoPoint>()
                    .eq(VideoPoint::getPlatResourceId, c.getCameraIndexCode());
            List<VideoPoint> pointList = videoPointService.list(queryWrapper);
 
            if (pointList.size() == 0) {
                VideoPoint videoPoint = new VideoPoint();
                videoPoint.setType(1);
                videoPoint.setName(c.getName());
                videoPoint.setLatitude(Double.valueOf(c.getLatitude()));
                videoPoint.setLongitude(Double.valueOf(c.getLatitude()));
                videoPoint.setPlatResourceId(c.getCameraIndexCode());
                videoPoint.setCode(c.getDeviceIndexCode());
                videoPoint.setAddress(c.getInstallPlace());
                videoPoint.setEquipmentBrand("海康");
                videoPoint.setEquipmentModel(c.getCameraTypeName());
 
                videoPointService.save(videoPoint);
            }
        }
    }
}