ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/task/OsdTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/task/UYTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/test/java/com/ycl/Test.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java
@@ -2,6 +2,7 @@ import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.ptr.IntByReference; import com.ycl.api.DH.lib.NetSDKLib; import com.ycl.api.DH.lib.NetSDKLib.LLong; @@ -17,12 +18,17 @@ import java.io.File; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import static com.ycl.api.DH.lib.NetSDKLib.CFG_CMD_VIDEOWIDGET; import static com.ycl.api.DH.lib.NetSDKLib.NET_DEV_VIDEO_OSD_CFG; import static com.ycl.api.DH.lib.NetSDKLib.NET_EM_OSD_BLEND_TYPE.NET_EM_OSD_BLEND_TYPE_MAIN; import static com.ycl.api.DH.lib.enumeration.NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_CUSTOMTITLE; import static com.ycl.api.DH.lib.enumeration.NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_GBMODE; @@ -153,14 +159,13 @@ return bRet; } public static OSDResult getOsd(String serialNumber,LLong loginId) { public static OSDResult getOsd(String serialNumber, LLong loginId) { OSDResult osdResult = new OSDResult(); NetSDKLib.NET_TIME deviceTime = new NetSDKLib.NET_TIME(); if (!netsdk.CLIENT_QueryDeviceTime(loginId, deviceTime, 3000)) { // log.error("CLIENT_QueryDeviceTime Failed!" + ToolKits.getErrorCodePrint()); return null; } log.info("OSD时间原始数据格式,{},toString格式{}",deviceTime,deviceTime.toStringTime()); Date checkTime = new Date(); osdResult.setCheckTime(checkTime); String date = deviceTime.toStringTime(); @@ -173,7 +178,6 @@ // log.error("时间解析失败"); } NET_CFG_GBMODE_INFO reserve = new NET_CFG_GBMODE_INFO(); NET_CFG_GBMODE_INFO osdInfo = new NET_CFG_GBMODE_INFO(); osdInfo.write(); boolean b = false; @@ -183,9 +187,9 @@ * 对于大华来说: 国标倒7: 0/全景/通道1 1/细节/通道2 * 宇视单通道不考虑 */ if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_All ) { if (serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_All) { b = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_GBMODE, 0, osdInfo.getPointer(), osdInfo.size(), 3000, reserve.getPointer()); }else if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_Detail){ } else if (serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_Detail) { b = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_GBMODE, 1, osdInfo.getPointer(), osdInfo.size(), 3000, reserve.getPointer()); } @@ -193,12 +197,20 @@ // log.error("CLIENT_GetConfig Failed!" + ToolKits.getErrorCodePrint()); return null; } else { osdInfo.read(); NET_GBMODE_CUSTOMTITLE_INFO[] stuCustomTitle = osdInfo.stuCustomTitle; for (NET_GBMODE_CUSTOMTITLE_INFO title : stuCustomTitle) { log.info("OSD原始数据格式{}",title); String position = new String(title.szPositon, StandardCharsets.UTF_8).trim(); if("LeftDown".equals(position)) { NET_TITLE_OSD_INFO[] stuOSD1 = title.stuOSD; for (NET_TITLE_OSD_INFO osd : stuOSD1) { String osdStr = null; osdStr = new String(osd.szText, StandardCharsets.UTF_8).trim(); if (!StringUtils.isEmpty(osdStr)) { osdResult.setOSD4(osdStr); } } if ("LeftDown".equals(position)) { NET_TITLE_OSD_INFO[] stuOSD = title.stuOSD; for (NET_TITLE_OSD_INFO osd : stuOSD) { String osdStr = null; @@ -208,7 +220,7 @@ osdResult.setOSD4(osdStr); } } }else if("RightDown".equals(position)){ } else if ("RightDown".equals(position)) { NET_TITLE_OSD_INFO[] stuOSD = title.stuOSD; int num = 0; for (NET_TITLE_OSD_INFO osd : stuOSD) { @@ -216,13 +228,13 @@ osdStr = new String(osd.szText, StandardCharsets.UTF_8).trim(); // log.info("TEXT:"+osdStr); if (!StringUtils.isEmpty(osdStr)) { if(num ==0){ if (num == 0) { osdResult.setOSD1(osdStr); }else if(num ==1){ } else if (num == 1) { osdResult.setOSD2(osdStr); }else if(num ==2){ } else if (num == 2) { osdResult.setOSD3(osdStr); }else if(num ==3){ } else if (num == 3) { osdResult.setName(osdStr); } } @@ -235,4 +247,81 @@ return osdResult; } /** * 针对利旧设备获取OSD的方法 * @param serialNumber * @param loginId * @return */ public static OSDResult getOsdOld(String serialNumber, LLong loginId) { OSDResult result = new OSDResult(); NetSDKLib.NET_OSD_CUSTOM_TITLE osdInfo4 = new NetSDKLib.NET_OSD_CUSTOM_TITLE(); osdInfo4.emOsdBlendType = NetSDKLib.NET_EM_OSD_BLEND_TYPE.NET_EM_OSD_BLEND_TYPE_MAIN; NetSDKLib.NET_OSD_CUSTOM_TITLE reserve4 = new NetSDKLib.NET_OSD_CUSTOM_TITLE(); osdInfo4.write(); boolean e = false; e = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_CUSTOMTITLE, 0, osdInfo4.getPointer(), osdInfo4.size(), 3000, reserve4.getPointer()); if (!e) { log.error("e为空,尝试另一个通道"); e = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_CUSTOMTITLE, 1, osdInfo4.getPointer(), osdInfo4.size(), 3000, reserve4.getPointer()); } if(e) { osdInfo4.read(); NetSDKLib.NET_CUSTOM_TITLE_INFO[] stuCustomTitle = osdInfo4.stuCustomTitle; for (NetSDKLib.NET_CUSTOM_TITLE_INFO net_custom_title_info : stuCustomTitle) { String name = new String(net_custom_title_info.szText, StandardCharsets.UTF_8).trim(); log.info("name:{}",name); if(StringUtils.isNotEmpty(name) && name.contains("|")){ String[] osdNames = name.split("\\|"); //剔除掉空串 List<String> nonEmptyList = new ArrayList<>(); for (String osd : osdNames) { if (StringUtils.isNotEmpty(osd)) { nonEmptyList.add(osd); } } result.setOSD1(nonEmptyList.get(0)); result.setOSD2(nonEmptyList.get(1)); result.setOSD3(nonEmptyList.get(2)); result.setName(nonEmptyList.get(3)); } } }else { log.error(serialNumber,"利旧osd为空"); } return result; } /** * 获取单个配置 * @param hLoginHandle 登陆句柄 * @param nChn 通道号,-1 表示全通道 * @param strCmd 配置名称 * @param cmdObject 配置对应的结构体对象 * @return 成功返回 true */ public static boolean GetDevConfig(LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) { boolean result = false; IntByReference error = new IntByReference(0); int nBufferLen = 2*1024*1024; byte[] strBuffer = new byte[nBufferLen]; if(netsdk.CLIENT_GetNewDevConfig( hLoginHandle, strCmd , nChn, strBuffer, nBufferLen,error,3000,null)) { cmdObject.write(); if (netsdk.CLIENT_ParseData(strCmd, strBuffer, cmdObject.getPointer(), cmdObject.size(), null)) { cmdObject.read(); result = true; } else { System.err.println("Parse " + strCmd + " Config Failed!" + ToolKits.getErrorCodePrint()); result = false; } } else { System.err.println("调用失败"); result = false; } return result; } } ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java
@@ -15,7 +15,23 @@ return null; } OSDResult osd = LoginModule.getOsd(serialNumber,loginId); if(osd!=null && osd.getOSD1() ==null &&osd.getOSD2()==null && osd.getOSD3()==null &&osd.getName()==null) { OSDResult osdOld = LoginModule.getOsdOld(serialNumber, loginId); osd.setOSD1(osdOld.getOSD1()); osd.setOSD2(osdOld.getOSD2()); osd.setOSD3(osdOld.getOSD3()); osd.setName(osdOld.getName()); } LoginModule.logout(loginId); return osd; } public static OSDResult getOsdOld(String serialNumber,String ip, String userName, String password){ NetSDKLib.LLong loginId = LoginModule.login(ip, 80, userName, password); if(loginId.longValue() ==0){ return null; } OSDResult osdOld = LoginModule.getOsdOld(serialNumber, loginId); LoginModule.logout(loginId); return osdOld; } } ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java
@@ -18,6 +18,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 计算视频设备点位在线率、重点点位在线率、重点指挥图像在线率、部级点位在线率 @@ -65,7 +66,16 @@ } } }); //重点指挥图像特殊处理,统一采用区县数据 Map<Long, BigDecimal> keyCommandMap = checkIndexVideos.stream().filter(checkIndexVideo -> !checkIndexVideo.getDeptTag() && !checkIndexVideo.getProvinceTag()) .collect(Collectors.toMap(checkIndexVideo -> checkIndexVideo.getDeptId(), checkIndexVideo -> checkIndexVideo.getKeyCommandImageOnline())); for (CheckIndexVideo checkIndexVideo : checkIndexVideos) { //替换省厅和部级 重点指挥图像 if(checkIndexVideo.getProvinceTag() || checkIndexVideo.getDeptTag()){ BigDecimal keyCommand = keyCommandMap.get(checkIndexVideo.getDeptId()); checkIndexVideo.setKeyCommandImageOnline(keyCommand); } } checkIndexVideoService.saveOrUpdateBatch(checkIndexVideos); } ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -116,9 +116,8 @@ } List<String> offLineTime = item.getOffLineTimeStr(); if(!CollectionUtils.isEmpty(offLineTime)) { //后续可以改成配置的离线次数(提取前n次,n为配置的离线次数) if (offLineTime.size() > 1) { offLineTime = offLineTime.subList(0, 2); offLineTime = offLineTime.subList(offLineTime.size() - 2, offLineTime.size()); } item.setOffLineTimeStr(offLineTime); } ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -536,7 +536,7 @@ ywPointService.updateRecovery(serialNumbers, 0); //筛选出离线工单ip并修改在线状态 if (!CollectionUtils.isEmpty(serialNumbers)) { Map<String, List<String>> errorTypes = workOrderErrorTypeMapper.getErrorListByNumbers(serialNumbers).stream().collect(Collectors.groupingBy( Map<String, List<String>> errorTypes = workOrderErrorTypeMapper.getErrorListByNumbers(workOrderNoList).stream().collect(Collectors.groupingBy( WorkOrderVO::getIp, Collectors.mapping( WorkOrderVO::getErrorType, ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -11,6 +11,7 @@ import com.ycl.api.HK.HKApi; import com.ycl.api.YS.YSApi; import com.ycl.platform.domain.entity.TMonitor; import com.ycl.platform.domain.result.BaseResult; import com.ycl.platform.domain.result.OSDResult; import com.ycl.platform.domain.result.UY.MonitorQualifyResult; import com.ycl.platform.domain.result.UY.OsdCheckResult; @@ -142,8 +143,19 @@ //如果今天存在之前的数据先删除 Query pyQuery = new Query(Criteria .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class); List<OsdCheckResult> osdCheckResults = mongoTemplate.find(pyQuery, OsdCheckResult.class); pointService.setDeviceTagByGB(checkResults, CheckConstants.Rule_Category_Video); //添加旧数据进去 List<String> resultNos = checkResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(osdCheckResults)) { for (OsdCheckResult mongoResult : osdCheckResults) { //如果新的结果中没有旧数据那么加进去 if (!resultNos.contains(mongoResult.getNo())) { checkResults.add(mongoResult); } } } DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class); //存放在mongo中 mongoTemplate.insertAll(checkResults); // 工单生成 @@ -231,7 +243,9 @@ public void test() throws ExecutionException, InterruptedException { log.info("测试获取OSD"); OSDResult osd3 = DHApi.getOsd("51030446001320141102","51.95.68.3", DHUserName, DHPassword); log.info("大华结果数据:{}",osd3); OSDResult osd3 = DHApi.getOsdOld("51030340001320207201", "51.95.34.20", DHUserName, DHPassword); log.info("osd3:{}", osd3); OSDResult osd4 = DHApi.getOsdOld("51030342001320173201", "51.95.33.174", DHUserName, DHPassword); log.info("osd4:{}", osd4); } } ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -75,7 +75,7 @@ private String passwd; private static final ExecutorService executorService = new ThreadPoolExecutor(16, 128, 64, 5000, TimeUnit.SECONDS, new ArrayBlockingQueue<>(1000), ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java
@@ -54,12 +54,14 @@ String prefix = "http://"; if ("127.0.0.1".equals(monitor.getIp())) { monitor.setPingOnline(Boolean.FALSE); log.error("ip有误"+monitor.getIp()); return monitor; } try { res = selfHttpUtil.get(prefix + monitor.getIp(), null, null); monitor.setPingOnline(Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode()); } catch (Exception e) { log.error("web检测离线"+monitor.getIp()); monitor.setPingOnline(Boolean.FALSE); } // 如果http得到的不在线,那么再ping一下 @@ -87,8 +89,9 @@ try { reachable = InetAddress.getByName(monitor.getIp()).isReachable(5000); } catch (IOException e) { e.printStackTrace(); log.error("Ping异常{}",e.getMessage()); } if(!reachable) log.error("ping检测离线"+monitor.getIp()); monitor.setPingOnline(reachable); } if (!monitor.getPingOnline()) { @@ -98,19 +101,17 @@ Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); offTimeList.add(dateFormat.format(now)); monitor.setOffLineTimeStr(offTimeList); //到达产生工单的阈值次数 if (continueOffTimes>=times) { //产生了工单才会存储离线时间,存储最近一次产生工单的这几个离线时间点 monitor.setOffLineTimeStr(offTimeList); monitor.setCreateWorkOrder(Boolean.TRUE); //产生了一次工单则清除 continueOffTimes = 0; offTimeList = new ArrayList<>(); } }else { //如果在线了,清空连续离线次数,清空离线时间 continueOffTimes = 0; offTimeList = new ArrayList<>(); } map.put("checkTimes", checkTimes); map.put("offLineTimes", offLineTimes); ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml
@@ -99,13 +99,23 @@ <select id="getErrorListByNumbers" resultType="com.ycl.platform.domain.vo.WorkOrderVO"> SELECT oer.serial_number,oer.ip,da.dict_value as errorType SELECT m.ip,da.dict_value as errorType FROM t_work_order_error_type oer INNER JOIN sys_dict_data da ON oer.error_name = da.dict_value left join t_work_order wo on oer.work_order_no = wo.work_order_no left join t_monitor m on m.serial_number = wo.serial_number WHERE oer.work_order_no in <foreach collection="workOrderNos" separator="," open="(" close=")" item="workOrderNo"> #{workOrderNo} </foreach> ORDER BY oer.create_time </select> <select id="getErrorList" resultType="com.ycl.system.entity.SysDictData"> SELECT da.dict_value, da.dict_label FROM t_work_order_error_type oer INNER JOIN sys_dict_data da ON oer.error_name = da.dict_value WHERE oer.work_order_no = #{workOrderNo} ORDER BY oer.create_time </select> </mapper> ycl-server/src/test/java/com/ycl/Test.java
File was deleted