| | |
| | | // 登陆句柄 |
| | | LLong m_hLoginHandle = new LLong(0); |
| | | m_hLoginHandle = netsdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam); |
| | | log.info("大华登录"+m_hLoginHandle); |
| | | if (m_hLoginHandle.longValue() == 0) { |
| | | // System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIp, m_nPort, ToolKits.getErrorCodePrint()); |
| | | } else { |
| | |
| | | import org.apache.http.auth.UsernamePasswordCredentials; |
| | | import org.apache.http.client.CredentialsProvider; |
| | | import org.apache.http.client.config.RequestConfig; |
| | | import org.apache.http.client.methods.CloseableHttpResponse; |
| | | import org.apache.http.client.methods.HttpGet; |
| | | import org.apache.http.impl.client.BasicCredentialsProvider; |
| | | import org.apache.http.impl.client.CloseableHttpClient; |
| | | import org.apache.http.impl.client.HttpClientBuilder; |
| | | import org.apache.http.impl.client.HttpClients; |
| | | import org.apache.http.util.EntityUtils; |
| | | import org.w3c.dom.Document; |
| | | import org.w3c.dom.Element; |
| | | import org.w3c.dom.Node; |
| | | import org.w3c.dom.NodeList; |
| | | import org.w3c.dom.*; |
| | | import org.xml.sax.InputSource; |
| | | import org.xml.sax.SAXException; |
| | | |
| | |
| | | public class HKApi { |
| | | public static OSDResult getOsdByIP(String ip, String userName, String password) { |
| | | OSDResult osdResult = new OSDResult(); |
| | | CloseableHttpClient httpClient = HttpClients.createDefault(); |
| | | String hostUrl = "http://" + ip; |
| | | try { |
| | | //获取OSD |
| | | HttpResponse OSDResponse = getHttpResponse(httpClient, hostUrl + ApiConstants.HK_OSD_PATH, userName, password); |
| | | String OSDString = EntityUtils.toString(OSDResponse.getEntity(), "utf-8"); |
| | | String OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH, userName, password); |
| | | if (OSDString == null) return null; |
| | | |
| | | //解析xml |
| | | parseXMl(OSDString, "TextOverlay", "displayText", osdResult, null); |
| | | parseXMl(OSDString, "TextOverlay", "displayText", osdResult, null,ip); |
| | | //获取Time |
| | | HttpResponse TimeResponse = getHttpResponse(httpClient, hostUrl + ApiConstants.HK_OSD_TIME, userName, password); |
| | | String timeString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_TIME, userName, password); |
| | | if (timeString == null) return null; |
| | | |
| | | Date date = new Date(); |
| | | String timeString = EntityUtils.toString(TimeResponse.getEntity(), "utf-8"); |
| | | //解析xml |
| | | parseXMl(timeString, "Time", "localTime", osdResult, date); |
| | | parseXMl(timeString, "Time", "localTime", osdResult, date,ip); |
| | | } catch (Exception e) { |
| | | return null; |
| | | } |
| | | return osdResult; |
| | | } |
| | | |
| | | private static void parseXMl(String OSDString, String tagName1, String tagName2, OSDResult osdResult, Date date) throws ParserConfigurationException, SAXException, IOException { |
| | | DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |
| | | DocumentBuilder builder = factory.newDocumentBuilder(); |
| | | Document document = builder.parse(new InputSource(new StringReader(OSDString))); |
| | | document.getDocumentElement().normalize(); |
| | | NodeList nodeList = document.getElementsByTagName(tagName1); |
| | | for (int i = 0; i < nodeList.getLength(); i++) { |
| | | Node node = nodeList.item(i); |
| | | if (node.getNodeType() == Node.ELEMENT_NODE && "TextOverlay".equals(tagName1)) { |
| | | Element element = (Element) node; |
| | | String textContent = element.getElementsByTagName(tagName2).item(0).getTextContent(); |
| | | // log.info("TEXT : " + textContent); |
| | | if (i == 0) { |
| | | osdResult.setOSD1(textContent); |
| | | } else if (i == 1) { |
| | | osdResult.setOSD2(textContent); |
| | | } else if (i == 2) { |
| | | osdResult.setOSD3(textContent); |
| | | } else if (i == 3) { |
| | | osdResult.setName(textContent); |
| | | } else if (i == 4) { |
| | | osdResult.setOSD4(textContent); |
| | | private static void parseXMl(String OSDString, String tagName1, String tagName2, OSDResult osdResult, Date date,String ip) throws ParserConfigurationException, SAXException, IOException { |
| | | |
| | | try { |
| | | DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |
| | | DocumentBuilder builder = factory.newDocumentBuilder(); |
| | | Document document = builder.parse(new InputSource(new StringReader(OSDString))); |
| | | document.getDocumentElement().normalize(); |
| | | NodeList nodeList = document.getElementsByTagName(tagName1); |
| | | for (int i = 0; i < nodeList.getLength(); i++) { |
| | | Node node = nodeList.item(i); |
| | | if (node.getNodeType() == Node.ELEMENT_NODE && "TextOverlay".equals(tagName1)) { |
| | | Element element = (Element) node; |
| | | String textContent = element.getElementsByTagName(tagName2).item(0).getTextContent(); |
| | | // log.info("TEXT : " + textContent); |
| | | if (i == 0) { |
| | | osdResult.setOSD1(textContent); |
| | | } else if (i == 1) { |
| | | osdResult.setOSD2(textContent); |
| | | } else if (i == 2) { |
| | | osdResult.setOSD3(textContent); |
| | | } else if (i == 3) { |
| | | osdResult.setName(textContent); |
| | | } else if (i == 4) { |
| | | osdResult.setOSD4(textContent); |
| | | } |
| | | } else if (node.getNodeType() == Node.ELEMENT_NODE && "Time".equals(tagName1)) { |
| | | Element element = (Element) node; |
| | | String textContent = element.getElementsByTagName(tagName2).item(0).getTextContent(); |
| | | // log.info("TEXT : " + textContent); |
| | | osdResult.setCheckTime(date); |
| | | OffsetDateTime dateTime = OffsetDateTime.parse(textContent); |
| | | // 将OffsetDateTime转换为Date对象 |
| | | osdResult.setOsdTime(Date.from(dateTime.toInstant())); |
| | | } |
| | | } else if (node.getNodeType() == Node.ELEMENT_NODE && "Time".equals(tagName1)) { |
| | | Element element = (Element) node; |
| | | String textContent = element.getElementsByTagName(tagName2).item(0).getTextContent(); |
| | | // log.info("TEXT : " + textContent); |
| | | osdResult.setCheckTime(date); |
| | | OffsetDateTime dateTime = OffsetDateTime.parse(textContent); |
| | | // 将OffsetDateTime转换为Date对象 |
| | | osdResult.setOsdTime(Date.from(dateTime.toInstant())); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("ip:{}出现异常,{}",ip,e.getMessage()); |
| | | throw new RuntimeException(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | private static HttpResponse getHttpResponse(CloseableHttpClient httpClient, String url, String userName, String password) throws URISyntaxException, IOException { |
| | | private static String getHttpResponse(String url, String userName, String password) throws URISyntaxException, IOException { |
| | | CredentialsProvider credsProvider = new BasicCredentialsProvider(); |
| | | credsProvider.setCredentials( |
| | | new AuthScope(new URI(url).getHost(), new URI(url).getPort()), |
| | | new UsernamePasswordCredentials(userName, password)); |
| | | // 绑定凭证提供者到HttpClient |
| | | CloseableHttpClient httpClient = HttpClientBuilder.create() |
| | | .setDefaultCredentialsProvider(credsProvider) |
| | | .build(); |
| | | |
| | | HttpGet httpGet = new HttpGet(url); |
| | | |
| | |
| | | .setSocketTimeout(1000) |
| | | .build(); |
| | | httpGet.setConfig(requestConfig); |
| | | |
| | | // 绑定凭证提供者到HttpClient |
| | | httpClient = HttpClientBuilder.create() |
| | | .setDefaultCredentialsProvider(credsProvider) |
| | | .build(); |
| | | try { |
| | | return httpClient.execute(httpGet); |
| | | } catch (Exception e){ |
| | | throw new RuntimeException("海康OSD执行失败"); |
| | | try (CloseableHttpResponse response = httpClient.execute(httpGet)) { |
| | | int statusCode = response.getStatusLine().getStatusCode(); |
| | | if (statusCode == 200) { |
| | | return EntityUtils.toString(response.getEntity(), "utf-8"); |
| | | } else { |
| | | return null; |
| | | } |
| | | } catch (Exception e) { |
| | | throw new RuntimeException("海康OSD执行失败", e); |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | /** |
| | | * Launch the application. |
| | | */ |
| | | public static void main(String[] args) { |
| | | EventQueue.invokeLater(new Runnable() { |
| | | public void run() { |
| | | try { |
| | | NetDemo window = new NetDemo(); |
| | | window.frame.setResizable(false); |
| | | window.frame.setVisible(true); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | // public static void main(String[] args) { |
| | | // EventQueue.invokeLater(new Runnable() { |
| | | // public void run() { |
| | | // try { |
| | | // NetDemo window = new NetDemo(); |
| | | // window.frame.setResizable(false); |
| | | // window.frame.setVisible(true); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | // }); |
| | | // } |
| | | |
| | | /** |
| | | * Create the application. |
| | | */ |
| | | public NetDemo() { |
| | | initialize(); |
| | | init(); |
| | | } |
| | | // public NetDemo() { |
| | | // initialize(); |
| | | // init(); |
| | | // } |
| | | |
| | | public void init() { |
| | | String strLogPath = "./sdklog/"; |
New file |
| | |
| | | package com.ycl.api.YS; |
| | | |
| | | |
| | | import com.sun.jna.Pointer; |
| | | import com.sun.jna.ptr.IntByReference; |
| | | import com.ycl.api.DH.utils.DHApi; |
| | | import com.ycl.api.YS.lib.NetDEVSDKLib; |
| | | import com.ycl.api.YS.login.Login; |
| | | import com.ycl.platform.domain.result.OSDResult; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.nio.charset.StandardCharsets; |
| | | |
| | | import static com.ycl.api.YS.lib.NetDEVSDKLib.NETDEV_LOGIN_PROTO_E.NETDEV_LOGIN_PROTO_ONVIF; |
| | | |
| | | @Slf4j |
| | | public class YSApi { |
| | | |
| | | public static OSDResult getOsd(String ip, String userName, String password){ |
| | | log.info("ip:{},用户:{},密码:{}",ip,userName,password); |
| | | //登录 |
| | | NetDEVSDKLib.NETDEV_DEVICE_LOGIN_INFO_S stDevLoginInfo = new NetDEVSDKLib.NETDEV_DEVICE_LOGIN_INFO_S(); |
| | | NetDEVSDKLib.NETDEV_SELOG_INFO_S stSELogInfo = new NetDEVSDKLib.NETDEV_SELOG_INFO_S(); |
| | | // System.arraycopy(userName.getBytes(), 0, stDevLoginInfo.szUserName, 0, userName.getBytes().length); |
| | | // System.arraycopy(password.getBytes(), 0, stDevLoginInfo.szPassword, 0, password.getBytes().length); |
| | | // System.arraycopy(ip.getBytes(), 0, stDevLoginInfo.szIPAddr, 0, ip.getBytes().length); |
| | | stDevLoginInfo.szUserName = userName.getBytes(); |
| | | stDevLoginInfo.szPassword = password.getBytes(); |
| | | stDevLoginInfo.szIPAddr = ip.getBytes(); |
| | | stDevLoginInfo.dwPort = 80; |
| | | //登录协议 |
| | | stDevLoginInfo.dwLoginProto = NETDEV_LOGIN_PROTO_ONVIF; |
| | | log.info("SDK传参ip:{},用户:{},密码:{}",stDevLoginInfo.szIPAddr,stDevLoginInfo.szUserName,stDevLoginInfo.szPassword); |
| | | Pointer lpUserID = YSInit.netdevsdk.NETDEV_Login_V30(stDevLoginInfo, stSELogInfo); |
| | | |
| | | log.info("登录返回id:{}",lpUserID); |
| | | if(lpUserID !=null) { |
| | | log.info("登录成功"); |
| | | //获取osd |
| | | NetDEVSDKLib.NETDEV_VIDEO_OSD_CFG_S stOSDInfo = new NetDEVSDKLib.NETDEV_VIDEO_OSD_CFG_S(); |
| | | stOSDInfo.write(); |
| | | IntByReference dwBytesReturned = new IntByReference(); |
| | | |
| | | boolean bRet = YSInit.netdevsdk.NETDEV_GetDevConfig(lpUserID, 0, NetDEVSDKLib.NETDEV_CONFIG_COMMAND_E.NETDEV_GET_OSDCFG, stOSDInfo.getPointer(), 616, dwBytesReturned); |
| | | if (!bRet) { |
| | | log.error("error code"+YSInit.netdevsdk.NETDEV_GetLastError()); |
| | | return null; |
| | | } |
| | | stOSDInfo.read(); |
| | | for (NetDEVSDKLib.NETDEV_OSD_TEXT_OVERLAY_S osd : stOSDInfo.astTextOverlay) { |
| | | String text = new String(osd.szOSDText, StandardCharsets.UTF_8); |
| | | log.info("text:" + text); |
| | | } |
| | | //登出 |
| | | YSInit.netdevsdk.NETDEV_Logout(lpUserID); |
| | | }else { |
| | | log.error("error code"+YSInit.netdevsdk.NETDEV_GetLastError()); |
| | | } |
| | | return null; |
| | | } |
| | | public static void demo(){ |
| | | Login.loginIn(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ycl.api.YS; |
| | | |
| | | import com.sun.jna.Pointer; |
| | | import com.sun.jna.Structure; |
| | | import com.ycl.api.YS.lib.NetDEVSDKLib; |
| | | import com.ycl.api.YS.util.Common; |
| | | import jakarta.annotation.PostConstruct; |
| | | import jakarta.annotation.PreDestroy; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.io.File; |
| | | |
| | | @Component |
| | | @Slf4j |
| | | public class YSInit { |
| | | @Value("${spring.profiles.active}") |
| | | private String activeEnv; |
| | | |
| | | public static NetDEVSDKLib netdevsdk = NetDEVSDKLib.NETDEVSDK_INSTANCE; |
| | | public static String strPicturePath = "."+File.separator+"Picture"+File.separator; |
| | | @PostConstruct |
| | | void init() { |
| | | if("prod".equals(activeEnv)) { |
| | | String strLogPath = "./sdklog/"; |
| | | boolean bRet = netdevsdk.NETDEV_SetLogPath(strLogPath); |
| | | if(false == bRet){ |
| | | System.out.printf("NETDEV_SetLogPath failed:%d", netdevsdk.NETDEV_GetLastError()); |
| | | } |
| | | |
| | | bRet = netdevsdk.NETDEV_Init(); |
| | | if(false == bRet){ |
| | | System.out.printf("Initialize failed:%d", netdevsdk.NETDEV_GetLastError()); |
| | | return; |
| | | } |
| | | try { |
| | | Common.updateStructureByReferenceMethod = Structure.class.getDeclaredMethod("updateStructureByReference", Class.class, Structure.class, Pointer.class); |
| | | Common.updateStructureByReferenceMethod.setAccessible(true); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | |
| | | File file=new File(strPicturePath); |
| | | if(!file.exists()){ |
| | | file.mkdir(); |
| | | } |
| | | |
| | | } |
| | | } |
| | | @PreDestroy |
| | | void clean(){ |
| | | if("prod".equals(activeEnv)) { |
| | | netdevsdk.NETDEV_Cleanup(); |
| | | } |
| | | } |
| | | } |
| | |
| | | package com.ycl.api.YS.lib; |
| | | |
| | | |
| | | import com.sun.jna.Library; |
| | | import com.sun.jna.Native; |
| | | import com.sun.jna.Pointer; |
| | | |
| | | import com.sun.jna.Structure; |
| | | import com.sun.jna.ptr.IntByReference; |
| | | import com.sun.jna.ptr.LongByReference; |
| | |
| | | * @brief 设备登录信息 |
| | | * @attention |
| | | */ |
| | | @Structure.FieldOrder({"byRes", "dwDeviceType" ,"dwLoginProto","dwPort","szIPAddr","szPassword","szUserName"}) |
| | | public class NETDEV_DEVICE_LOGIN_INFO_S extends Structure |
| | | { |
| | | public byte[] szIPAddr = new byte[NETDEV_LEN_260]; /* IP地址/域名 */ |
| | |
| | | * @brief 安全登录信息 |
| | | * @attention |
| | | */ |
| | | @Structure.FieldOrder({"byRes", "dwSELogCount","dwSELogTime"}) |
| | | public class NETDEV_SELOG_INFO_S extends Structure { |
| | | public int dwSELogCount; /* 安全登录次数 */ |
| | | public int dwSELogTime; /* 安全登录时间 */ |
| | |
| | | * @brief 区域 Area |
| | | * @attention 无 None |
| | | */ |
| | | @Structure.FieldOrder({"dwLocateX", "dwLocateY"}) |
| | | public class NETDEV_AREA_SCOPE_S extends Structure { |
| | | public int dwLocateX; /** 顶点x坐标值[0,10000] * Coordinates of top point x [0,10000] */ |
| | | public int dwLocateY; /** 顶点y坐标值[0,10000] * Coordinates of top point y [0,10000] */ |
| | |
| | | * @brief OSD时间配置信息 OSD time configuration information |
| | | * @attention 无 None |
| | | */ |
| | | @Structure.FieldOrder({"bEnableFlag", "bWeekEnableFlag","stAreaScope","udwDateFormat","udwTimeFormat"}) |
| | | public class NETDEV_OSD_TIME_S extends Structure { |
| | | public int bEnableFlag; /** 时间OSD使能, BOOL_TRUE为使能,BOOL_FALSE为非使能 * Enable time OSD, BOOL_TRUE means enable and BOOL_FALSE means disable */ |
| | | public int bWeekEnableFlag; /** 是否显示星期(预留) * Display week or not (reserved) */ |
| | | public NETDEV_AREA_SCOPE_S stAreaScope; /** 区域坐标 * Area coordinates */ |
| | | public int udwTimeFormat; /** 时间OSD时间格式,详见 NETDEV_OSD_TIME_FORMAT_CAP_E * Time OSD format, see NETDEV_OSD_TIME_FORMAT_E */ |
| | | public int udwDateFormat; /** 日期OSD时间格式,详见 NETDEV_OSD_DATE_FORMAT_CAP_E * Date OSD format, see NETDEV_OSD_TIME_FORMAT_E */ |
| | | public NETDEV_OSD_TIME_S() { |
| | | // 初始化代码 |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * @brief OSD字符叠加信息 OSD text overlay information |
| | | * @attention |
| | | */ |
| | | @Structure.FieldOrder({"bEnableFlag", "byRes","stAreaScope","szOSDText"}) |
| | | public class NETDEV_OSD_TEXT_OVERLAY_S extends Structure { |
| | | public int bEnableFlag; /** OSD字符叠加使能, BOOL_TRUE为使能,BOOL_FALSE为非使能 * Enable OSD text overlay, BOOL_TRUE means enable and BOOL_FALSE means disable */ |
| | | public NETDEV_AREA_SCOPE_S stAreaScope; /** OSD字符叠加区域坐标 * OSD text overlay area coordinates */ |
| | | public byte[] szOSDText=new byte[NETDEV_OSD_TEXT_MAX_LEN]; /** OSD字符叠加名称字符串 * OSD text overlay name strings */ |
| | | public byte[] byRes=new byte[4]; /* 保留字段 Reserved */ |
| | | public NETDEV_OSD_TEXT_OVERLAY_S() { |
| | | // 初始化代码 |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @brief 通道OSD的基本属性信息 Basic channel OSD information |
| | | * @attention |
| | | */ |
| | | @Structure.FieldOrder({"astTextOverlay", "stNameOSD","stTimeOSD","wTextNum"}) |
| | | public class NETDEV_VIDEO_OSD_CFG_S extends Structure { |
| | | public NETDEV_OSD_TIME_S stTimeOSD; /* 通道的时间OSD信息 Information of channel time OSD */ |
| | | public NETDEV_OSD_TEXT_OVERLAY_S stNameOSD; /* 通道的名称OSD信息 Information of channel name OSD */ |
| | |
| | | import com.ycl.api.DH.module.LoginModule; |
| | | import com.ycl.api.DH.utils.DHApi; |
| | | import com.ycl.api.HK.HKApi; |
| | | import com.ycl.api.YS.YSApi; |
| | | import com.ycl.api.YS.YSInit; |
| | | import com.ycl.platform.domain.entity.TMonitor; |
| | | import com.ycl.platform.domain.result.OSDResult; |
| | | import com.ycl.platform.domain.result.UY.MonitorQualifyResult; |
| | |
| | | public String DHUserName; |
| | | @Value("${DH.password}") |
| | | public String DHPassword; |
| | | @Value("${YS.userName}") |
| | | public String YSUserName; |
| | | @Value("${YS.password}") |
| | | public String YSPassword; |
| | | @Autowired |
| | | private MongoTemplate mongoTemplate; |
| | | @Autowired |
| | |
| | | */ |
| | | public void getOSD() { |
| | | log.info("开始获取OSD"); |
| | | // YSApi.getOsd("51.95.66.42",YSUserName,YSPassword); |
| | | |
| | | DHApi.getOsd("51.95.67.189",DHUserName,DHPassword); |
| | | //批量修改海康品牌集合 |
| | | List<String> hkList = new ArrayList<>(); |
| | | //批量修改大华品牌集合 |
| | |
| | | List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class); |
| | | //需要考核的数据 |
| | | List<String> serialNumbers = oneMachineFileResults.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList()); |
| | | |
| | | List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers); |
| | | monitors = monitors.stream().filter(monitor -> monitor.getId()<7000).collect(Collectors.toList()); |
| | | log.info("处理数据大小{}",monitors.size()); |
| | | for (TMonitor monitor : monitors) { |
| | | executorService.submit(() -> { |
| | | if (DeviceType.HK.getType().equals(monitor.getDeviceType())) { |
| | | //海康品牌 |
| | | OSDResult osd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword); |
| | | if (checkSuccess(osdResultList, monitor, osd)){ |
| | | log.info("海康调用成功"+osd); |
| | | return; |
| | | if(!CollectionUtils.isEmpty(serialNumbers)) { |
| | | List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers); |
| | | monitors = monitors.stream().filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) && !"127.0.0.1".equals(monitor.getIp())).collect(Collectors.toList()); |
| | | // monitors = monitors.stream().filter(monitor -> monitor.getId() < 7000).collect(Collectors.toList()); |
| | | log.info("处理数据大小{}", monitors.size()); |
| | | for (TMonitor monitor : monitors) { |
| | | executorService.submit(() -> { |
| | | if (DeviceType.HK.getType().equals(monitor.getDeviceType())) { |
| | | //海康品牌 |
| | | OSDResult osd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword); |
| | | if (checkSuccess(osdResultList, monitor, osd)) { |
| | | log.info("海康调用成功" + osd); |
| | | return; |
| | | } |
| | | } else if (DeviceType.DH.getType().equals(monitor.getDeviceType())) { |
| | | //大华品牌 |
| | | OSDResult osd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword); |
| | | if (checkSuccess(osdResultList, monitor, osd)) { |
| | | log.info("大华调用成功" + osd); |
| | | return; |
| | | } |
| | | } else if (DeviceType.YS.getType().equals(monitor.getDeviceType())) { |
| | | //TODO:宇视api |
| | | } |
| | | } else if (DeviceType.DH.getType().equals(monitor.getDeviceType())) { |
| | | //大华品牌 |
| | | OSDResult osd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword); |
| | | if (checkSuccess(osdResultList, monitor, osd)) { |
| | | log.info("大华调用成功"+osd); |
| | | return; |
| | | //未知品牌或者api调用失败,挨个执行所有api |
| | | OSDResult osd = tryAllApi(monitor, hkList, dhList, ysList); |
| | | if (osd != null) { |
| | | synchronized (osdResultList) { |
| | | osdResultList.add(osd); |
| | | } |
| | | } |
| | | } else if (DeviceType.YS.getType().equals(monitor.getDeviceType())) { |
| | | //TODO:宇视api |
| | | }); |
| | | } |
| | | executorService.shutdown(); |
| | | try { |
| | | // 等待所有任务完成,最多等待10秒(可以根据需要调整) |
| | | if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) { |
| | | // 如果超时,尝试停止当前正在执行的任务 |
| | | executorService.shutdownNow(); |
| | | } |
| | | //未知品牌或者api调用失败,挨个执行所有api |
| | | OSDResult osd = tryAllApi(monitor, hkList, dhList, ysList); |
| | | if (osd != null) { |
| | | synchronized (osdResultList) { |
| | | osdResultList.add(osd); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | executorService.shutdown(); |
| | | try { |
| | | // 等待所有任务完成,最多等待10秒(可以根据需要调整) |
| | | if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) { |
| | | // 如果超时,尝试停止当前正在执行的任务 |
| | | } catch (InterruptedException e) { |
| | | // 当前线程在等待过程中被中断 |
| | | executorService.shutdownNow(); |
| | | } |
| | | } catch (InterruptedException e) { |
| | | // 当前线程在等待过程中被中断 |
| | | executorService.shutdownNow(); |
| | | // 处理中断,例如重新抛出异常或记录日志 |
| | | Thread.currentThread().interrupt(); // 保持中断状态 |
| | | //结束api执行,开始校验 |
| | | List<OsdCheckResult> checkResults = new ArrayList<>(); |
| | | Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); |
| | | for (OSDResult osdResult : osdResultList) { |
| | | TMonitor monitor = monitorMap.get(osdResult.getSerialNumber()); |
| | | //封装OsdCheckResult |
| | | OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor); |
| | | checkCorrect(osdResult, monitor, osdCheckResult); |
| | | checkResults.add(osdCheckResult); |
| | | } |
| | | log.info("结果数据大小:{}", checkResults.size()); |
| | | //结果存入mongo |
| | | if (!CollectionUtils.isEmpty(checkResults)) { |
| | | log.info("存入mongo"); |
| | | //如果今天存在之前的数据先删除 |
| | | Query pyQuery = new Query(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); |
| | | DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class); |
| | | //存放在mongo中 |
| | | mongoTemplate.insertAll(checkResults); |
| | | // 工单生成 |
| | | uyErrorTypeCheckService.osdCheck(checkResults); |
| | | } |
| | | //修改数据库品牌 |
| | | if (!CollectionUtils.isEmpty(hkList)) { |
| | | log.info("修改品牌"); |
| | | monitorMapper.batchUpdateDeviceType(hkList, DeviceType.HK.getType()); |
| | | } |
| | | if (!CollectionUtils.isEmpty(dhList)) { |
| | | log.info("修改品牌"); |
| | | monitorMapper.batchUpdateDeviceType(dhList, DeviceType.DH.getType()); |
| | | } |
| | | //TODO:宇视 |
| | | } |
| | | //结束api执行,开始校验 |
| | | List<OsdCheckResult> checkResults = new ArrayList<>(); |
| | | Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); |
| | | for (OSDResult osdResult : osdResultList) { |
| | | TMonitor monitor = monitorMap.get(osdResult.getSerialNumber()); |
| | | //封装OsdCheckResult |
| | | OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor); |
| | | checkCorrect(osdResult, monitor, osdCheckResult); |
| | | checkResults.add(osdCheckResult); |
| | | } |
| | | log.info("结果数据大小:{}",checkResults.size()); |
| | | //结果存入mongo |
| | | if(!CollectionUtils.isEmpty(checkResults)){ |
| | | log.info("存入mongo"); |
| | | //如果今天存在之前的数据先删除 |
| | | Query pyQuery = new Query(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); |
| | | DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class); |
| | | //存放在mongo中 |
| | | mongoTemplate.insertAll(checkResults); |
| | | // 工单生成 |
| | | uyErrorTypeCheckService.osdCheck(checkResults); |
| | | } |
| | | //修改数据库品牌 |
| | | if(!CollectionUtils.isEmpty(hkList)){ |
| | | log.info("修改品牌"); |
| | | monitorMapper.batchUpdateDeviceType(hkList,DeviceType.HK.getType()); |
| | | } |
| | | if(!CollectionUtils.isEmpty(dhList)){ |
| | | log.info("修改品牌"); |
| | | monitorMapper.batchUpdateDeviceType(dhList,DeviceType.DH.getType()); |
| | | } |
| | | //TODO:宇视 |
| | | log.info("结束获取OSD"); |
| | | } |
| | | |
| | |
| | | OSDResult hkosd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword); |
| | | if (hkosd != null) { |
| | | hkosd.setSerialNumber(monitor.getSerialNumber()); |
| | | log.info("海康调用成功"+hkosd); |
| | | synchronized (hkList) { |
| | | hkList.add(monitor.getSerialNumber()); |
| | | } |
| | |
| | | OSDResult dhosd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword); |
| | | if (dhosd != null) { |
| | | dhosd.setSerialNumber(monitor.getSerialNumber()); |
| | | log.info("大华调用成功"+dhosd); |
| | | synchronized (dhList) { |
| | | dhList.add(monitor.getSerialNumber()); |
| | | } |