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 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 list) { for (Camera c : list) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .eq(VideoPoint::getPlatResourceId, c.getCameraIndexCode()); List 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); } } } }