| | |
| | | @ExcelProperty({"自贡市公共视频监控系统续维合同", "规则名称"}) |
| | | @ColumnWidth(130) |
| | | private String ruleName; |
| | | /** |
| | | * 细则 |
| | | */ |
| | | @ExcelProperty({"自贡市公共视频监控系统续维合同", "细则"}) |
| | | @ColumnWidth(130) |
| | | private String detailName; |
| | | |
| | | /** |
| | | * 数量 |
| | |
| | | |
| | | private Date updateTime; |
| | | |
| | | private String serialNumber; |
| | | } |
| | |
| | | // 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(); |
| | |
| | | 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[] stuOSD = title.stuOSD; |
| | |
| | | BigDecimal siteOnline = siteOnline(param); |
| | | checkIndexVideo.setSiteOnline(siteOnline); |
| | | //区县不少于100路 |
| | | if(stats.totalSites < CheckThreadConstants.Check_Video_SiteOnline){ |
| | | if(!key.startsWith(ApiConstants.Dept) && stats.totalSites < CheckThreadConstants.Check_Video_SiteOnline){ |
| | | checkIndexVideo.setSiteOnline(BigDecimal.ZERO); |
| | | } |
| | | //调用点位在线率计算方法 计算重点点位在线率 |
| | |
| | | } |
| | | |
| | | //区县视频重点点位数不少于10路 |
| | | if(stats.importantSites<CheckThreadConstants.Check_Video_ImportantSite){ |
| | | if(!key.startsWith(ApiConstants.Dept) && stats.importantSites < CheckThreadConstants.Check_Video_ImportantSite){ |
| | | checkIndexVideo.setKeySiteOnline(BigDecimal.ZERO); |
| | | } |
| | | |
| | |
| | | @PostMapping("/export") |
| | | @ApiOperation(value = "导出", notes = "导出") |
| | | @PreAuthorize("@ss.hasPermi('system:calculate:report:export')") |
| | | public void export(Integer calculateId,Integer contractId, HttpServletResponse response) { |
| | | calculateReportService.export(calculateId,contractId, response); |
| | | public void export(Integer whichYear,Integer whichMonth,Integer contractId, HttpServletResponse response) { |
| | | calculateReportService.export(whichYear,whichMonth,contractId, response); |
| | | } |
| | | |
| | | } |
| | |
| | | * 导出数据 |
| | | * @return 数据 |
| | | */ |
| | | List<CalculateExport> exportData(Integer calculateId); |
| | | List<CalculateExport> exportData(Integer whichYear,Integer whichMonth,Integer contractId); |
| | | } |
| | |
| | | */ |
| | | void updateOnlineFromUyOrHk(@Param("onlineList") List<UpdateOnlineVO> onlineList); |
| | | |
| | | /** |
| | | * 根据国标修改 |
| | | * @param onlineList |
| | | */ |
| | | void updateOnlineFromHk(@Param("onlineList") List<UpdateOnlineVO> onlineList); |
| | | |
| | | |
| | | /** |
| | | * 点位在线率 |
| | |
| | | */ |
| | | List<DeviceInfoVO> hasErrorWorkOrderList(@Param("start") Date start, @Param("end") Date end); |
| | | |
| | | List<WorkOrderVO> selectPassOrder(@Param("startTime") LocalDateTime now, @Param("endTime")LocalDateTime thirtyDaysAgo, @Param("status") String status, @Param("errorList") List<String> errorList); |
| | | List<WorkOrderVO> selectPassOrder(@Param("startTime") LocalDateTime now, @Param("endTime")LocalDateTime thirtyDaysAgo, @Param("status") String status, @Param("errorList") List<String> errorList,@Param("auditStatus") String auditStatus); |
| | | |
| | | int addMany(@Param("workOrderList") List<WorkOrder> workOrderList); |
| | | |
| | |
| | | * 导出 |
| | | * @param response 响应 |
| | | */ |
| | | void export(Integer calculateId,Integer contractId, HttpServletResponse response); |
| | | void export(Integer whichYear,Integer whichMonth,Integer contractId, HttpServletResponse response); |
| | | } |
| | |
| | | |
| | | @Override |
| | | @SneakyThrows |
| | | public void export(Integer calculateId,Integer contractId, HttpServletResponse response) { |
| | | public void export(Integer whichYear,Integer whichMonth,Integer contractId, HttpServletResponse response) { |
| | | // 获取数据 |
| | | List<CalculateExport> list = baseMapper.exportData(calculateId); |
| | | List<CalculateExport> list = baseMapper.exportData(whichYear,whichMonth,contractId); |
| | | CalculateExport calculateExport = new CalculateExport(); |
| | | calculateExport.setRuleName("合计"); |
| | | calculateExport.setNum(list.stream().mapToInt(CalculateExport::getNum).sum()); |
| | |
| | | deductErrorType.add(ErrorType.ABNORMAL_PIC.getValue()); |
| | | deductErrorType.add(ErrorType.POINT_INFO_ERROR.getValue()); |
| | | deductErrorType.add(ErrorType.CLOCK_SKEW.getValue()); |
| | | List<WorkOrderVO> workOrders = workOrderMapper.selectPassOrder(startTime, endTime, WorkOrderStatusEnum.AUDITING_SUCCESS.getValue(),deductErrorType); |
| | | List<WorkOrderVO> workOrders = workOrderMapper.selectPassOrder(startTime, endTime, WorkOrderStatusEnum.AUDITING_SUCCESS.getValue(),deductErrorType,"审核通过"); |
| | | //存在有两种扣分的故障 只扣减第一个故障 |
| | | Map<String, WorkOrderVO> map = workOrders.stream() |
| | | .collect(Collectors.toMap( |
| | |
| | | faceParam.setDataType(ApiConstants.HK_DataType_FACE); |
| | | List<SnapshotDataMonitorResult> faceList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v1/data/snapCountDetail/query", faceParam, SnapshotDataMonitorResult.class); |
| | | if (!CollectionUtils.isEmpty(faceList)) { |
| | | log.info("结果数据大小:{}", faceList.size()); |
| | | //如果今天存在之前的数据先删除 |
| | | Query query = new Query(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())) |
| | |
| | | faceList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE)); |
| | | mongoTemplate.insertAll(faceList); |
| | | } |
| | | //修改online状态以及生成工单 |
| | | //修改online状态 |
| | | List<SnapshotDataMonitorResult> totalResult = new ArrayList<>(); |
| | | totalResult.addAll(carList); |
| | | totalResult.addAll(faceList); |
| | | if (!CollectionUtils.isEmpty(totalResult)) { |
| | | List<String> numbers = totalResult.stream().map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList()); |
| | | Map<String, TMonitor> map = monitorMapper.selectList(new QueryWrapper<TMonitor>().in("serial_number", numbers)) |
| | | .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); |
| | | Date now = new Date(); |
| | | //过滤 |
| | | totalResult = totalResult.stream().filter(item -> map.get(item.getExternalIndexCode()) != null).collect(Collectors.toList()); |
| | | totalResult.forEach(item -> { |
| | | TMonitor monitor = map.get(item.getExternalIndexCode()); |
| | | item.setIp(monitor.getIp()); |
| | | }); |
| | | //海康不做在线监测 |
| | | //先拿优云的在线,过滤掉优云已有的国标码 |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); |
| | | List<VideoOnlineResult> results = mongoTemplate.find(query, VideoOnlineResult.class); |
| | | if (!CollectionUtils.isEmpty(results)) { |
| | | Date now = new Date(); |
| | | List<String> uyNoList = results.stream().map(VideoOnlineResult::getNo).collect(Collectors.toList()); |
| | | List<String> numbers = totalResult.stream().filter(result->!uyNoList.contains(result.getExternalIndexCode())) |
| | | .map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList()); |
| | | //排除掉优云且不包含视频设备的国标 |
| | | Map<String, TMonitor> map = monitorMapper.selectList(new QueryWrapper<TMonitor>() |
| | | .in("serial_number", numbers)) |
| | | .stream().filter(monitor -> monitor.getCameraFunType()!=null && !monitor.getCameraFunType().contains("1")) |
| | | .collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); |
| | | List<UpdateOnlineVO> willUpdateList = new ArrayList<>(); |
| | | totalResult.forEach(item -> { |
| | | TMonitor monitor = map.get(item.getExternalIndexCode()); |
| | | if(monitor!=null) { |
| | | UpdateOnlineVO vo = new UpdateOnlineVO(); |
| | | vo.setOnline(item.getDataCount() > 0 ? 1 : -1); |
| | | vo.setSerialNumber(monitor.getSerialNumber()); |
| | | vo.setUpdateTime(now); |
| | | willUpdateList.add(vo); |
| | | } |
| | | }); |
| | | if(!CollectionUtils.isEmpty(willUpdateList)) monitorMapper.updateOnlineFromHk(willUpdateList); |
| | | // List<UpdateOnlineVO> willUpdateList = totalResult.stream().map(item -> { |
| | | // UpdateOnlineVO vo = new UpdateOnlineVO(); |
| | | // vo.setOnline(item.getDataCount() > 0 ? 1 : -1); |
| | |
| | | // (existing, replacement) -> existing // 如果遇到相同的 IP,保留第一个(existing) |
| | | // )).values()); |
| | | // uyErrorTypeCheckService.hkOnlineCheck(workOrders); |
| | | } |
| | | } |
| | | log.info("结束抓拍数据量检测结果数据同步"); |
| | | } |
| | |
| | | |
| | | |
| | | import com.mongodb.client.result.DeleteResult; |
| | | import com.ycl.api.DH.lib.NetSDKLib; |
| | | import com.ycl.api.DH.lib.structure.NET_CFG_GBMODE_INFO; |
| | | import com.ycl.api.DH.lib.structure.NET_GBMODE_CUSTOMTITLE_INFO; |
| | | import com.ycl.api.DH.lib.structure.NET_TITLE_OSD_INFO; |
| | | 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 org.springframework.stereotype.Component; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | |
| | | import java.util.concurrent.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static com.ycl.api.DH.lib.enumeration.NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_GBMODE; |
| | | |
| | | @Slf4j |
| | | @Component("OsdTask") |
| | |
| | | public String YSUserName; |
| | | @Value("${YS.password}") |
| | | public String YSPassword; |
| | | |
| | | /** |
| | | * 通过查mongoDB每日一机一档数据获取设备ip |
| | | * 筛选视频设备 |
| | |
| | | List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class); |
| | | //需要考核的数据 |
| | | List<String> serialNumbers = oneMachineFileResults.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(serialNumbers)) { |
| | | if (!CollectionUtils.isEmpty(serialNumbers)) { |
| | | ExecutorService executorService = new ThreadPoolExecutor(16, |
| | | 128, |
| | | 5000, |
| | |
| | | List<OsdCheckResult> checkResults = new ArrayList<>(); |
| | | Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); |
| | | for (OSDResult osdResult : osdResultList) { |
| | | if(osdResult!=null) { |
| | | if (osdResult != null) { |
| | | TMonitor monitor = monitorMap.get(osdResult.getSerialNumber()); |
| | | //封装OsdCheckResult |
| | | OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor); |
| | |
| | | Query pyQuery = new Query(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); |
| | | DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class); |
| | | pointService.setDeviceTagByGB(checkResults,CheckConstants.Rule_Category_Video); |
| | | pointService.setDeviceTagByGB(checkResults, CheckConstants.Rule_Category_Video); |
| | | //存放在mongo中 |
| | | mongoTemplate.insertAll(checkResults); |
| | | // 工单生成 |
| | |
| | | } else { |
| | | osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Error); |
| | | } |
| | | }else { |
| | | } else { |
| | | osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Unknown); |
| | | } |
| | | //检查通道名是否正确 |
| | |
| | | } else { |
| | | osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Error); |
| | | } |
| | | }else { |
| | | } else { |
| | | osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Unknown); |
| | | } |
| | | //检查省是否正确 |
| | |
| | | } else { |
| | | osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Error); |
| | | } |
| | | }else { |
| | | } else { |
| | | osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Unknown); |
| | | } |
| | | //检查市是否正确 |
| | |
| | | } else { |
| | | osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Error); |
| | | } |
| | | }else { |
| | | } else { |
| | | osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Unknown); |
| | | } |
| | | //检查区县是否正确 |
| | |
| | | } else { |
| | | osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Error); |
| | | } |
| | | }else { |
| | | } else { |
| | | osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Unknown); |
| | | } |
| | | } |
| | | |
| | | |
| | | public void test() throws ExecutionException, InterruptedException { |
| | | log.info("测试获取OSD"); |
| | | OSDResult osd3 = DHApi.getOsd("51030446001320141102","51.95.68.3", DHUserName, DHPassword); |
| | | log.info("大华结果数据:{}",osd3); |
| | | } |
| | | } |
| | |
| | | AND tcr.status=#{status} |
| | | </if> |
| | | </where> |
| | | group by tcr.id |
| | | ORDER BY |
| | | tcr.create_time |
| | | </select> |
| | |
| | | </select> |
| | | |
| | | <select id="exportData" resultType="com.ycl.platform.domain.excel.CalculateExport"> |
| | | SELECT a.rule_name, |
| | | COUNT(b.id) AS num, |
| | | IFNULL(-SUM(b.score), 0) AS score |
| | | SELECT |
| | | a.rule_name as ruleName, |
| | | a.rule_condition as detailName, |
| | | COUNT(b.id) AS num, |
| | | IFNULL(-SUM(b.score), 0) AS score |
| | | FROM t_calculate_rule a |
| | | LEFT JOIN t_calculate_record tcr ON a.contract_id = tcr.contract_id And tcr.id = #{calculateId} |
| | | LEFT JOIN t_contract_score b ON b.rule_id = a.id AND auditing_status = 'PASS' AND b.deleted = 0 AND YEAR (b.create_time) = tcr.which_year |
| | | WHERE a.deleted = 0 |
| | | GROUP BY a.rule_name |
| | | LEFT JOIN t_calculate_record tcr ON a.contract_id = tcr.contract_id |
| | | LEFT JOIN t_contract_score b ON b.rule_id = a.id AND auditing_status = 'PASS' AND b.deleted = 0 |
| | | AND MONTH(b.create_time) = tcr.which_month |
| | | AND YEAR(b.create_time) = tcr.which_year |
| | | <where> |
| | | a.deleted = 0 and a.contract_id = #{contractId} |
| | | <if test="whichMonth!=null"> |
| | | and tcr.which_month = #{whichMonth} |
| | | </if> |
| | | <if test="whichYear!=null"> |
| | | and tcr.which_year = #{whichYear} |
| | | </if> |
| | | </where> |
| | | GROUP BY a.id |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | AND t_monitor.serial_number = t_yw_point.serial_number ) |
| | | </foreach> |
| | | </update> |
| | | |
| | | <update id="updateOnlineFromHk"> |
| | | <foreach collection="onlineList" item="online" separator=";"> |
| | | UPDATE |
| | | t_yw_point |
| | | SET |
| | | online = #{online.online}, |
| | | update_time = #{online.updateTime} |
| | | WHERE |
| | | serial_number = #{online.serialNumber} |
| | | </foreach> |
| | | </update> |
| | | <update id="batchUpdateOnline"> |
| | | UPDATE |
| | | t_yw_point p |
| | |
| | | SELECT wo.id,wo.work_order_no,wo.unit_id,woet.error_name as errorType,woet.create_time as distributeTime |
| | | FROM t_work_order wo |
| | | LEFT JOIN t_work_order_error_type woet ON woet.work_order_no = wo.work_order_no |
| | | LEFT JOIN t_work_order_auditing_record woar ON woar.work_order_no = wo.work_order_no |
| | | LEFT JOIN t_work_order_auditing_record woar ON woar.work_order_no = wo.work_order_no and woar.result = #{auditStatus} |
| | | WHERE wo.deleted = 0 AND wo.deduct = 0 AND wo.status = #{status} |
| | | AND woet.error_name in |
| | | <foreach collection="errorList" item="error" separator="," open="(" close=")"> |
| | | #{error} |
| | | </foreach> |
| | | AND woar.create_time between #{startTime} and #{endTime} and woar.result = #{auditStatus} |
| | | AND woar.create_time between #{startTime} and #{endTime} |
| | | </select> |
| | | |
| | | <update id="updateMany"> |