fuliqi
2024-08-01 a604e310ccd6257165526a3fc01c03e063687652
一机一档 TODO:解析区域
2个文件已修改
2个文件已添加
188 ■■■■ 已修改文件
ycl-common/src/main/java/constant/RedisConstant.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/MonitorTask.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/UYTask.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/constant/RedisConstant.java
New file
@@ -0,0 +1,6 @@
package constant;
public class RedisConstant {
    /** 一机一档目录一致率 多出来的设备 Set集合 */
    public static final String New_Monitor_Set="New_Monitor_Set";
}
ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java
@@ -27,6 +27,54 @@
    private String SBMC;
    /**
     * 摄像机采集区域(参考文档解析)
     */
    private String SXJCJQY;
    /**
     * 监控点位类型,1-一类视频监控点;2-二类视频监控点;3-三类视频监控点;4-公安内部视频监控点;9-其他点位。
     * 参照公安部《关于进一步加强公安机关视频图像信息应用工作的意见》(公通字﹝2015﹞4号)定义。
     */
    private String JKDWLX;
    /**
     * IPV4地址,摄像机IP地址。
     */
    private String IP;
    /**
     * IPV6地址,摄像机扩展IP地址。
     */
//    private String IPV6;
    /**
     * 经度。
     */
    private Double JD;
    /**
     * 纬度。
     */
    private Double WD;
    /**
     * 摄像机功能类型,取值范围(多选) : [1.视频监控;2.车辆识别;3.人员识别;] 数据格式[填入多个值并以/隔开。例如  1/2]
     */
    private String SXJGNLX;
    /**
     * MAC地址,摄像机MAC地址。
     */
    private String MACDZ;
    /**
     * 设备状态,1-在用;2-维修;3-拆除。
     */
    private String SBZT;
    //---------------------------------------------------------------------
    /**
     * 设备厂商,编码1-海康威视;2-大华;3-天地伟业;4-科达;5-安讯士;6-博世;7-亚安;8-英飞拓;9-宇视;10-海信;11-中星电子;12-明景;13-联想;14-中兴;99-其他。
     */
    private String SBCS;
@@ -35,12 +83,6 @@
     * 行政区域,行政区划、籍贯省市县代码。参照《GB/T 2260 中华人民共和国行政区划代码》。
     */
    private String XZQY;
    /**
     * 监控点位类型,1-一类视频监控点;2-二类视频监控点;3-三类视频监控点;4-公安内部视频监控点;9-其他点位。
     * 参照公安部《关于进一步加强公安机关视频图像信息应用工作的意见》(公通字﹝2015﹞4号)定义。
     */
    private String JKDWLX;
    /**
     * 设备型号,描述设备的具体型号。
@@ -53,29 +95,9 @@
    private String DWSC;
    /**
     * IPV4地址,摄像机IP地址。
     */
    private String IPV4;
    /**
     * IPV6地址,摄像机扩展IP地址。
     */
    private String IPV6;
    /**
     * MAC地址,摄像机MAC地址。
     */
    private String MACDZ;
    /**
     * 摄像机类型,1-球机;2-半球;3-固定枪机;4-遥控枪机;5-卡口枪机;99-未知。
     */
    private String SXJLX;
    /**
     * 摄像机功能类型,1-车辆卡口;2-人员卡口;3-微卡口;4-特征摄像机;5-普通监控;99-其他,多选各参数以“/”分隔。
     */
    private String SXJGNLX;
    /**
     * 补光属性,1-无补光、2-红外补光、3-白光补光、9-其他补光。
@@ -92,16 +114,6 @@
     * 参考范式:街道+门牌号码+单位名称。高速公路、国道等点位可参照“公路名称+公里数”范式。
     */
    private String AZDZ;
    /**
     * 经度。
     */
    private Double JD;
    /**
     * 纬度。
     */
    private Double WD;
    /**
     * 摄像机位置类型,1-省际检查站、2-党政机关、3-车站码头、4-中心广场、5-体育场馆、6-商业中心、7-宗教场所、8-校园周边、9-治安复杂区域、10-交通干线、11-医院周边、12-金融机构周边、13-危险物品场所周边、14-博物馆展览馆、15-重点水域、航道、96-市际公安检查站;97-涉外场所;98-边境沿线;99-旅游景区,多选各参数以“/”分隔。
@@ -147,11 +159,6 @@
     * 录像保存天数。
     */
    private Integer LXBCTS;
    /**
     * 设备状态,1-在用;2-维修;3-拆除。
     */
    private String SBZT;
    /**
     * 所属部门/行业,1-公安机关;2-环保部门;3-文博部门;4-医疗部门;5-旅游管理;6-新闻广电;7-食品医药监督管理部门;8-教育管理部门;9-检察院;10-法院;11-金融部门;12-交通部门;13-住房和城乡建设部门;14-水利部门;15-林业部门;16-安全生产监督部门;17-市政市容委;18-国土局,可扩展,多选各参数以“/”分隔。
ycl-server/src/main/java/com/ycl/task/MonitorTask.java
New file
@@ -0,0 +1,88 @@
package com.ycl.task;
import com.alibaba.druid.support.json.JSONUtils;
import com.alibaba.fastjson2.JSONArray;
import com.ycl.platform.domain.entity.TMonitor;
import com.ycl.platform.domain.result.UY.OneMachineFileResult;
import com.ycl.platform.domain.vo.TMonitorVO;
import com.ycl.platform.service.ITMonitorService;
import com.ycl.system.entity.SysDictData;
import com.ycl.system.service.ISysDictDataService;
import com.ycl.utils.DateUtils;
import constant.RedisConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * 当天晚上 同步mongodb一机一档到数据库
 */
@Slf4j
@Component("monitorTask")
public class MonitorTask {
    @Autowired
    private MongoTemplate mongoTemplate;
    @Autowired
    private ITMonitorService monitorService;
    @Autowired
    private ISysDictDataService dictDataService;
    @Autowired
    private RedisTemplate redisTemplate;
    //同步mongodb一机一档到数据库
    public void synchronize() {
        Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
        List<OneMachineFileResult> oneMachineFileResults = mongoTemplate.find(query, OneMachineFileResult.class);
        List<String> serialNumberInBase = monitorService.selectTMonitorList(null).stream().map(TMonitorVO::getSerialNumber).collect(Collectors.toList());
        //准备插入数据库的数据
        List<TMonitor> monitorList = new ArrayList<>();
        //新的数据,原数据库中不存在的数据
        Set<TMonitor> newMonitorList = new HashSet<>();
        for (OneMachineFileResult result : oneMachineFileResults) {
            TMonitor monitor = setMonitor(result);
            monitorList.add(monitor);
            //比对筛选出新的数据
            if(!CollectionUtils.isEmpty(serialNumberInBase) && !serialNumberInBase.contains(result.getSBBM())){
                newMonitorList.add(monitor);
            }
        }
        //新的数据放入Redis中等待考核指标任务使用
        redisTemplate.opsForValue().set(RedisConstant.New_Monitor_Set, JSONArray.toJSONString(newMonitorList));
        //TODO:解析区域
        //TODO:解析重点点位
        //重点点位集合字典
        SysDictData sysDictData = new SysDictData();
        sysDictData.setDictType("platform_important_site");
        List<SysDictData> DictDataList = dictDataService.selectDictDataList(sysDictData);
        List<String> importantSite = DictDataList.stream().map(SysDictData::getDictValue).collect(Collectors.toList());
    }
    private TMonitor setMonitor(OneMachineFileResult result) {
        TMonitor monitor = new TMonitor();
        monitor.setSerialNumber(result.getSBBM());
        monitor.setName(result.getSBMC());
        monitor.setSiteType(Long.valueOf(result.getJKDWLX()));
        monitor.setMacAddr(result.getMACDZ());
        monitor.setIp(result.getIP());
        monitor.setCameraFunType(result.getSXJGNLX());
        monitor.setLongitude(result.getJD() + "");
        monitor.setLatitude(result.getWD() + "");
        monitor.setCameraCaptureArea(result.getSXJCJQY());
        monitor.setOnState(Long.valueOf(result.getSBZT()));
        //国标码前八位为行政编码
        monitor.setCivilCode(result.getSBBM().substring(0, 8));
        return monitor;
    }
}
ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -9,6 +9,7 @@
import com.ycl.platform.domain.result.UY.OneMachineFileResult;
import com.ycl.platform.domain.result.UY.QueryVqdResult;
import com.ycl.platform.domain.result.UY.RecordMetaDSumResult;
import com.ycl.platform.service.ITMonitorService;
import com.ycl.platform.service.IYwThresholdService;
import com.ycl.utils.DateUtils;
import constant.ApiConstants;
@@ -23,6 +24,7 @@
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
//优云对接数据任务
@Slf4j
@@ -35,7 +37,8 @@
    private UYClient uyClient;
    @Autowired
    private IYwThresholdService ywThresholdService;
    @Autowired
    private ITMonitorService monitorService;
    @Value("${youYun.tenantId}")
    private String tenantId;