视频考核:优云的数据筛选出视频设备、资产管理、取消海康在线工单
19个文件已修改
188 ■■■■ 已修改文件
ycl-common/src/main/java/enumeration/ErrorType.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/YwPointController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/YwPointMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/ContractTask.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/OsdTask.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/UYTask.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/VideoTask.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/enumeration/ErrorType.java
@@ -20,7 +20,7 @@
    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),
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java
@@ -147,7 +147,8 @@
    /** 设备厂商: 0海康  1大华  2宇视*/
    private Integer deviceType;
    @TableField(exist = false)
    private String username;
    @TableField(exist = false)
    private String password;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java
@@ -44,7 +44,8 @@
    private Integer deviceType;
    /** 下拉框 */
    private Integer option;
    /** 考核状态 */
    private Integer examineStatus;
    public void setTime() {
        if (Objects.nonNull(this.date)) {
            this.startTime = DateUtils.getDayStart(this.date);
ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java
@@ -1,10 +1,12 @@
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;
@@ -39,7 +41,26 @@
        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();
    }
    /**
     * 平台在线率
     *
ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
@@ -101,6 +101,7 @@
    @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);
    }
@@ -205,6 +206,7 @@
    @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);
    }
ycl-server/src/main/java/com/ycl/platform/controller/YwPointController.java
@@ -143,4 +143,5 @@
        return ywPointService.importData(file, unitId, start, end, needUpdateUnit);
    }
}
ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
@@ -185,4 +185,11 @@
    List<TMonitorExp> exportTMonitorList(TMonitorVO tMonitor);
    List<TMonitorResult> getByIp(@Param("ipList")List<String> ips);
    void clearMonitor();
    List<String> getVideoIds();
    Map<String, String> assetManagementCount();
}
ycl-server/src/main/java/com/ycl/platform/mapper/YwPointMapper.java
@@ -119,4 +119,6 @@
    List<YwPointVO> selectToCount(Short examineCategory, Short examineTag);
    void myUpdateById(YwPoint entity);
    void clearMonitor();
}
ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java
@@ -130,4 +130,8 @@
    Map<String, Object> videoHome(HomeQuery monitorQuery) throws ParseException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException;
    void export(HttpServletResponse response, TMonitorVO tMonitor);
    Result clearMonitor();
    Result assetManagementCount(DataCenterQuery query);
}
ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java
@@ -164,4 +164,5 @@
     * @author
     */
    YwPoint selectBySerialNumber(String serialNumber);
}
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java
@@ -33,6 +33,7 @@
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;
@@ -57,6 +58,7 @@
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;
@@ -89,6 +91,8 @@
public class TMonitorServiceImpl extends ServiceImpl<TMonitorMapper, TMonitor> implements ITMonitorService {
    @Autowired
    private TMonitorMapper tMonitorMapper;
    @Autowired
    private YwPointMapper pointMapper;
    @Autowired
    private ISysConfigService configService;
    @Autowired
@@ -1084,6 +1088,24 @@
        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
ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
@@ -228,16 +228,16 @@
                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())) {
@@ -299,16 +299,16 @@
                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())) {
ycl-server/src/main/java/com/ycl/task/ContractTask.java
@@ -194,7 +194,6 @@
        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) {
            //检测是否报备过
ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -62,6 +62,7 @@
    public String YSPassword;
    /**
     * 通过查mongoDB每日一机一档数据获取设备ip
     * 筛选视频设备
     * 通过设备ip、品牌调用不同api获取osd信息
     * 比对mongoDB一机一档信息,整理成result存入mongo
     * 同步品牌到mysql
@@ -94,8 +95,13 @@
                    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) {
ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -339,7 +339,6 @@
                                item.setNo(item.getDeviceId());
                            }
                        });
                        //貌似这里可以忽略省厅标签因为项目展示的后面ping的时候存的数据
                        pointService.setDeviceTagByGB(records,CheckConstants.Rule_Category_Video);
                        //存放在mongo中
                        mongoTemplate.insertAll(records);
ycl-server/src/main/java/com/ycl/task/VideoTask.java
@@ -20,6 +20,7 @@
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;
@@ -33,6 +34,7 @@
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * 视频计算考核指标任务
@@ -64,6 +66,11 @@
        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("结束计算点位在线率");
@@ -78,6 +85,11 @@
                .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("结束计算录像可用率和重点录像可用率");
@@ -126,6 +138,12 @@
        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标注、时间准确率");
ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml
@@ -84,7 +84,7 @@
        *
        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=")">
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -92,7 +92,7 @@
    <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>
@@ -417,7 +417,16 @@
            ${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,
@@ -609,16 +618,16 @@
               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,
@@ -628,15 +637,18 @@
               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}
@@ -708,4 +720,14 @@
            #{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>
ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml
@@ -303,4 +303,10 @@
        </set>
        where id =#{id}
    </update>
    <!-- 清理一机一档 -->
    <delete id="clearMonitor">
        delete from t_yw_point p
        where p.examine_status != 1
    </delete>
</mapper>