视频考核:优云的数据筛选出视频设备、资产管理、取消海康在线工单
| | |
| | | DEVICE_OFFLINE("DEVICEOFFLINE", "设备离线","COMMON",false), |
| | | POINT_INFO_ERROR("POINTINFOERRO", "点位信息错误","COMMON",false), |
| | | //视频 |
| | | CLOCK_SKEW("CLOCKSKEW", "时钟偏差","VIDEO",true), |
| | | CLOCK_SKEW("CLOCKSKEW", "时钟偏差","VIDEO",false), |
| | | SIGNAL_LOSS("SIGNALMISS", "信号缺失","VIDEO",true), |
| | | SCREEN_COLOR_DEVIATION("SCREENCOLOR", "画面偏色","VIDEO",true), |
| | | SNOW_STORM("SCREENSNOW", "雪花干扰","VIDEO",true), |
| | |
| | | |
| | | /** 设备厂商: 0海康 1大华 2宇视*/ |
| | | private Integer deviceType; |
| | | |
| | | @TableField(exist = false) |
| | | private String username; |
| | | @TableField(exist = false) |
| | | private String password; |
| | | } |
| | |
| | | private Integer deviceType; |
| | | /** 下拉框 */ |
| | | private Integer option; |
| | | |
| | | /** 考核状态 */ |
| | | private Integer examineStatus; |
| | | public void setTime() { |
| | | if (Objects.nonNull(this.date)) { |
| | | this.startTime = DateUtils.getDayStart(this.date); |
| | |
| | | package com.ycl.platform.controller; |
| | | |
| | | import annotation.Log; |
| | | import com.ycl.platform.domain.query.DataCenterQuery; |
| | | import com.ycl.platform.service.DataCenterService; |
| | | import com.ycl.platform.service.ITMonitorService; |
| | | import com.ycl.platform.service.PlatformOnlineService; |
| | | import com.ycl.system.Result; |
| | | import enumeration.BusinessType; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import lombok.RequiredArgsConstructor; |
| | |
| | | query.setTime(); |
| | | return monitorService.assetManagement(query); |
| | | } |
| | | |
| | | /** |
| | | * 资产管理统计 |
| | | * |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @GetMapping("/assetManagement/count") |
| | | @ApiOperation(value = "资产管理统计", notes = "资产管理统计") |
| | | @PreAuthorize("@ss.hasPermi('assetManagement:page')") |
| | | public Result assetManagementCount(DataCenterQuery query) { |
| | | query.setTime(); |
| | | return monitorService.assetManagementCount(query); |
| | | } |
| | | @DeleteMapping("/assetManagement/clear") |
| | | @ApiOperation(value = "清理一机一档", notes = "清理一机一档") |
| | | @PreAuthorize("@ss.hasPermi('point:remove')") |
| | | @Log(title = "清理一机一档", businessType = BusinessType.DELETE) |
| | | public Result clear() { |
| | | return monitorService.clearMonitor(); |
| | | } |
| | | /** |
| | | * 平台在线率 |
| | | * |
| | |
| | | @DeleteMapping("/{id}") |
| | | @ApiOperation(value = "ID删除", notes = "ID删除") |
| | | @PreAuthorize("@ss.hasPermi('work:order:remove')") |
| | | @Log(title = "删除工单", businessType = BusinessType.DELETE) |
| | | public Result removeById(@PathVariable("id") String id) { |
| | | return workOrderService.removeById(id); |
| | | } |
| | |
| | | @DeleteMapping("/batchDelete") |
| | | @PreAuthorize("@ss.hasPermi('work:order:delete')") |
| | | @ApiOperation(value = "批量删除工单", notes = "批量删除工单") |
| | | @Log(title = "批量删除工单", businessType = BusinessType.DELETE) |
| | | public Result batchDeleteWorkOrder(@RequestBody List<String> workOrderNos) { |
| | | return workOrderService.batchDeleteWorkOrder(workOrderNos); |
| | | } |
| | |
| | | return ywPointService.importData(file, unitId, start, end, needUpdateUnit); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | List<TMonitorExp> exportTMonitorList(TMonitorVO tMonitor); |
| | | |
| | | List<TMonitorResult> getByIp(@Param("ipList")List<String> ips); |
| | | |
| | | void clearMonitor(); |
| | | |
| | | List<String> getVideoIds(); |
| | | |
| | | Map<String, String> assetManagementCount(); |
| | | |
| | | } |
| | |
| | | List<YwPointVO> selectToCount(Short examineCategory, Short examineTag); |
| | | |
| | | void myUpdateById(YwPoint entity); |
| | | |
| | | void clearMonitor(); |
| | | } |
| | |
| | | Map<String, Object> videoHome(HomeQuery monitorQuery) throws ParseException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException; |
| | | |
| | | void export(HttpServletResponse response, TMonitorVO tMonitor); |
| | | |
| | | Result clearMonitor(); |
| | | |
| | | Result assetManagementCount(DataCenterQuery query); |
| | | } |
| | |
| | | * @author |
| | | */ |
| | | YwPoint selectBySerialNumber(String serialNumber); |
| | | |
| | | } |
| | |
| | | import com.ycl.platform.mapper.DynamicColumnMapper; |
| | | import com.ycl.platform.mapper.TMonitorMapper; |
| | | import com.ycl.platform.mapper.WorkOrderMapper; |
| | | import com.ycl.platform.mapper.YwPointMapper; |
| | | import com.ycl.platform.service.ITMonitorService; |
| | | import com.ycl.system.Result; |
| | | import com.ycl.system.entity.SysDictData; |
| | |
| | | import org.springframework.data.mongodb.core.query.Query; |
| | | import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | import pojo.ExcelExp; |
| | | import utils.poi.ExcelUtilManySheet; |
| | |
| | | public class TMonitorServiceImpl extends ServiceImpl<TMonitorMapper, TMonitor> implements ITMonitorService { |
| | | @Autowired |
| | | private TMonitorMapper tMonitorMapper; |
| | | @Autowired |
| | | private YwPointMapper pointMapper; |
| | | @Autowired |
| | | private ISysConfigService configService; |
| | | @Autowired |
| | |
| | | util.exportExcel(response, monitors, sheetName); |
| | | } |
| | | |
| | | /** |
| | | * 清理一机一档 |
| | | * @return |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Result clearMonitor() { |
| | | tMonitorMapper.clearMonitor(); |
| | | pointMapper.clearMonitor(); |
| | | return Result.ok(); |
| | | } |
| | | |
| | | @Override |
| | | public Result assetManagementCount(DataCenterQuery query) { |
| | | Map<String, String> map =tMonitorMapper.assetManagementCount(); |
| | | return Result.ok().data(map); |
| | | } |
| | | |
| | | |
| | | //首页车辆报表 |
| | | @Override |
| | |
| | | check(YwThreadConstants.Face_FailPercent, failPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.MODELING_FAIL.getValue()); |
| | | } |
| | | // 点位在线率 |
| | | if (2 == result.getSnapResult()) { |
| | | workOrder.setSerialNumber(result.getExternalIndexCode()); |
| | | workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED); |
| | | if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) { |
| | | workOrder.setErrorTypeList(new ArrayList<>()); |
| | | workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue()); |
| | | } else { |
| | | workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue()); |
| | | } |
| | | } |
| | | // if (2 == result.getSnapResult()) { |
| | | // workOrder.setSerialNumber(result.getExternalIndexCode()); |
| | | // workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED); |
| | | // if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) { |
| | | // workOrder.setErrorTypeList(new ArrayList<>()); |
| | | // workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue()); |
| | | // } else { |
| | | // workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue()); |
| | | // } |
| | | // } |
| | | if (WorkOrderStatusEnum.WAIT_DISTRIBUTE.equals(workOrder.getStatus())) { |
| | | workOrderList.add(workOrder); |
| | | } else if (WorkOrderStatusEnum.DISTRIBUTED.equals(workOrder.getStatus())) { |
| | |
| | | check(YwThreadConstants.Car_NoIntegrityCount, integrityRate, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.CAR_SIX.getValue()); |
| | | } |
| | | // 点位在线率 |
| | | if (2 == result.getSnapResult()) { |
| | | workOrder.setSerialNumber(result.getExternalIndexCode()); |
| | | workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED); |
| | | if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) { |
| | | workOrder.setErrorTypeList(new ArrayList<>()); |
| | | workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue()); |
| | | } else { |
| | | workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue()); |
| | | } |
| | | } |
| | | // if (2 == result.getSnapResult()) { |
| | | // workOrder.setSerialNumber(result.getExternalIndexCode()); |
| | | // workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED); |
| | | // if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) { |
| | | // workOrder.setErrorTypeList(new ArrayList<>()); |
| | | // workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue()); |
| | | // } else { |
| | | // workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue()); |
| | | // } |
| | | // } |
| | | if (WorkOrderStatusEnum.WAIT_DISTRIBUTE.equals(workOrder.getStatus())) { |
| | | workOrderList.add(workOrder); |
| | | } else if (WorkOrderStatusEnum.DISTRIBUTED.equals(workOrder.getStatus())) { |
| | |
| | | LocalDateTime endTime = LocalDateTime.now(); |
| | | // 计算30天前的日期 |
| | | LocalDateTime startTime = endTime.minusDays(30); |
| | | //需要查审核通过那条记录的时间 |
| | | List<WorkOrderVO> workOrders = workOrderMapper.selectPassOrder(startTime, endTime, WorkOrderStatusEnum.AUDITING_SUCCESS.getValue(), "审核通过"); |
| | | for (WorkOrderVO workOrder : workOrders) { |
| | | //检测是否报备过 |
| | |
| | | public String YSPassword; |
| | | /** |
| | | * 通过查mongoDB每日一机一档数据获取设备ip |
| | | * 筛选视频设备 |
| | | * 通过设备ip、品牌调用不同api获取osd信息 |
| | | * 比对mongoDB一机一档信息,整理成result存入mongo |
| | | * 同步品牌到mysql |
| | |
| | | new ThreadPoolExecutor.CallerRunsPolicy() |
| | | ); |
| | | List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers); |
| | | //过滤ip |
| | | monitors = monitors.stream().filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) && !"127.0.0.1".equals(monitor.getIp())).collect(Collectors.toList()); |
| | | //过滤掉无效ip并筛选出视频设备 |
| | | monitors = monitors.stream() |
| | | .filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) && |
| | | !"127.0.0.1".equals(monitor.getIp()) && |
| | | monitor.getCameraFunType()!=null && |
| | | monitor.getCameraFunType().contains("1")) |
| | | .collect(Collectors.toList()); |
| | | List<Future<OSDResult>> futureList = new ArrayList<>(48); |
| | | List<OSDResult> osdResultList = new ArrayList<>(); |
| | | for (TMonitor monitor : monitors) { |
| | |
| | | item.setNo(item.getDeviceId()); |
| | | } |
| | | }); |
| | | //貌似这里可以忽略省厅标签因为项目展示的后面ping的时候存的数据 |
| | | pointService.setDeviceTagByGB(records,CheckConstants.Rule_Category_Video); |
| | | //存放在mongo中 |
| | | mongoTemplate.insertAll(records); |
| | |
| | | import constant.CheckConstants; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.mongodb.core.MongoTemplate; |
| | | import org.springframework.data.mongodb.core.query.Criteria; |
| | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 视频计算考核指标任务 |
| | |
| | | query.addCriteria(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); |
| | | List<VideoOnlineResult> results = mongoTemplate.find(query, VideoOnlineResult.class); |
| | | //优云上有车辆和人脸的设备数据,需要过滤出视频设备 |
| | | List<String> videoIds = monitorMapper.getVideoIds(); |
| | | if(!CollectionUtils.isEmpty(results)){ |
| | | results = results.stream().filter(result -> videoIds.contains(result.getNo())).collect(Collectors.toList()); |
| | | } |
| | | CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_SiteOnline); |
| | | calculator.calculate(results); |
| | | log.info("结束计算点位在线率"); |
| | |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); |
| | | |
| | | List<RecordMetaDSumResult> results = mongoTemplate.find(query, RecordMetaDSumResult.class); |
| | | //优云上有车辆和人脸的设备数据,需要过滤出视频设备 |
| | | List<String> videoIds = monitorMapper.getVideoIds(); |
| | | if(!CollectionUtils.isEmpty(results)){ |
| | | results = results.stream().filter(result -> videoIds.contains(result.getNo())).collect(Collectors.toList()); |
| | | } |
| | | CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_Usability); |
| | | calculator.calculate(results); |
| | | log.info("结束计算录像可用率和重点录像可用率"); |
| | |
| | | query.addCriteria(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); |
| | | List<OsdCheckResult> results = mongoTemplate.find(query, OsdCheckResult.class); |
| | | |
| | | //优云上有车辆和人脸的设备数据,需要过滤出视频设备 |
| | | List<String> videoIds = monitorMapper.getVideoIds(); |
| | | if(!CollectionUtils.isEmpty(results)){ |
| | | results = results.stream().filter(result -> videoIds.contains(result.getNo())).collect(Collectors.toList()); |
| | | } |
| | | CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_OsdTime); |
| | | calculator.calculate(results); |
| | | log.info("结束计算Osd标注、时间准确率"); |
| | |
| | | * |
| | | FROM |
| | | t_dynamic_column_value dcv |
| | | LEFT JOIN t_dynamic_column dc ON dc.id = dcv.dynamic_column_id AND dc.table_name = #{tableName} |
| | | INNER JOIN t_dynamic_column dc ON dc.id = dcv.dynamic_column_id AND dc.table_name = #{tableName} |
| | | WHERE |
| | | dcv.ref_id in |
| | | <foreach collection="ids" item="id" separator="," open="(" close=")"> |
| | |
| | | <select id="selectByNumbers" resultType="com.ycl.platform.domain.entity.TMonitor"> |
| | | select m.*,p.username,p.password |
| | | from t_monitor m left join t_yw_point p on m.serial_number = p.serial_number |
| | | where serial_number in |
| | | where m.serial_number in |
| | | <foreach collection="numbers" separator="," open="(" close=")" item="number"> |
| | | #{number} |
| | | </foreach> |
| | |
| | | ${params.dataScope} |
| | | </where> |
| | | </select> |
| | | |
| | | <select id="assetManagementCount" resultType="java.util.Map"> |
| | | SELECT count(*) AS total, |
| | | IFNULL(SUM(IF((m.camera_fun_type like '%1%'), 1, 0)), 0) AS video, |
| | | IFNULL(SUM(IF((m.camera_fun_type like '%2%'), 1, 0)), 0) AS face, |
| | | IFNULL(SUM(IF((m.camera_fun_type like '%3%'), 1, 0)), 0) AS car, |
| | | IFNULL(SUM(IF((p.examine_status = 1), 1, 0)), 0) as examine, |
| | | IFNULL(SUM(IF((p.examine_status = 0), 1, 0)), 0) as notExamine |
| | | FROM t_monitor m |
| | | left join t_yw_point p on m.serial_number = p.serial_number |
| | | </select> |
| | | <select id="recoveryException" resultType="java.util.Map"> |
| | | SELECT count(*) AS totalPosts, |
| | | IFNULL(SUM(IF((p.online = 1 and p.ping_online = 1), 1, 0)), 0) AS totalMembers, |
| | |
| | | tm.camera_fun_type, |
| | | tm.longitude, |
| | | tm.latitude, |
| | | tm.camera_capture_area, |
| | | tm.on_state, |
| | | d.dept_name as camera_capture_area, |
| | | yp.examine_status as on_state, |
| | | tm.civil_code, |
| | | tm.integrated_device, |
| | | tm.camera_brand, |
| | | tm.address, |
| | | tm.net_working, |
| | | tm.public_security, |
| | | tm.installed_time, |
| | | tm.management_unit, |
| | | yp.create_time as installed_time, |
| | | u.unit_name as management_unit, |
| | | tm.mu_contact_info, |
| | | tm.storage_days, |
| | | tm.monitor_azimuth, |
| | |
| | | tm.camera_type, |
| | | tm.camera_light_type, |
| | | tm.encoded_format, |
| | | tm.camera_dept, |
| | | tm.hybm, |
| | | tm.lxbm |
| | | tm.camera_dept |
| | | FROM |
| | | t_monitor tm |
| | | INNER JOIN t_yw_point yp ON yp.serial_number = tm.serial_number |
| | | left join sys_dept d on yp.dept_id = d.dept_id and d.del_flag = 0 |
| | | left join t_yw_unit u on yp.unit_id = u.id and u.deleted = 0 |
| | | <where> |
| | | <if test="query.keyword != null and query.keyword != ''"> |
| | | AND tm.name like concat('%', #{query.keyword}, '%') |
| | | </if> |
| | | <if test="query.examineStatus != null"> |
| | | AND yp.examine_status = #{query.examineStatus} |
| | | </if> |
| | | <if test="query.startTIme != null and query.endTime != null"> |
| | | AND yp.create_time between #{query.startTime} and #{query.endTime} |
| | |
| | | #{ip} |
| | | </foreach> |
| | | </select> |
| | | <!-- 清理一机一档 --> |
| | | <delete id="clearMonitor"> |
| | | delete m from t_monitor m left join t_yw_point p on m.serial_number = p.serial_number |
| | | where p.examine_status != 1 |
| | | </delete> |
| | | |
| | | <select id ="getVideoIds" resultType="java.lang.String"> |
| | | select serial_number from t_monitor |
| | | where camera_fun_type like '%1%' |
| | | </select> |
| | | </mapper> |
| | |
| | | </set> |
| | | where id =#{id} |
| | | </update> |
| | | |
| | | <!-- 清理一机一档 --> |
| | | <delete id="clearMonitor"> |
| | | delete from t_yw_point p |
| | | where p.examine_status != 1 |
| | | </delete> |
| | | </mapper> |