21个文件已修改
2个文件已添加
378 ■■■■■ 已修改文件
ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/HKScoreResult.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/MonitorQualifyResult.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/ContractTask.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/HKTask.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/OsdTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/UYTask.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/VideoTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/logback.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/ImageResourceSecurityMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java
New file
@@ -0,0 +1,16 @@
package com.ycl.platform.domain.param.HK;
import lombok.Data;
@Data
public class ScoreParam extends BaseParam{
    //yyyy-MM-dd
    private String startDate;
    private String endDate;
    //重点点位标注 非必填 1重点 0全量 默认全量
    private Integer focusFlag;
    //人脸业务树编码
    private String faceTree;
    //车辆业务树编码
    private String carTree;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java
@@ -35,4 +35,9 @@
     * 考核标签1/2 省厅/公安部
     */
    private Integer examineTag;
    /**
     * 数据类型1/2 累计数据/每日数据
     */
    private Integer category;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/HKScoreResult.java
New file
@@ -0,0 +1,32 @@
package com.ycl.platform.domain.result.HK;
import com.ycl.platform.domain.result.BaseResult;
import lombok.Data;
import java.util.Date;
import java.util.List;
//考核成绩
@Data
public class HKScoreResult extends BaseResult {
   private List<HkScore> list;
    /**
     * 考核成绩
     */
    @Data
    public static class HkScore {
        //区域名
        private String areaName;
        //区域编码
        private String areaCode;
        //排名
        private Integer ranking;
        //总分
        private String totalScore;
        //focusFlag为0涉及到的全量指标
        private String downCarDataUploadScoreString;
        private Date dCreateTime;
    }
}
ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/MonitorQualifyResult.java
@@ -108,31 +108,31 @@
    public static MonitorQualifyResultVO getVO(MonitorQualifyResult result) {
        MonitorQualifyResultVO vo = new MonitorQualifyResultVO();
        vo.setCivilCode(result.getCivilCode().getShowValue());
        vo.setCivilCodeError(result.getCivilCode().getError());
        vo.setIp(result.getIp().getShowValue());
        vo.setIpError(result.getIp().getError());
        vo.setIntegratedDevice(result.getIntegrated_device().getShowValue());
        vo.setIntegratedDeviceError(result.getIntegrated_device().getError());
        vo.setJkdwlx(result.getJkdwlx().getShowValue());
        vo.setJkdwlxError(result.getJkdwlx().getError());
        vo.setLatitude(result.getLatitude().getShowValue());
        vo.setLatitudeError(result.getLatitude().getError());
        vo.setLongitude(result.getLongitude().getShowValue());
        vo.setLongitudeError(result.getLongitude().getError());
        vo.setMacdz(result.getMacdz().getShowValue());
        vo.setMacdzError(result.getMacdz().getError());
        vo.setName(result.getName().getShowValue());
        vo.setNameError(result.getName().getError());
        vo.setSbzt(result.getSbzt().getShowValue());
        vo.setSbztError(result.getSbzt().getError());
        vo.setSerialNumber(result.getSerialNumber().getShowValue());
        vo.setSerialNumberError(result.getSerialNumber().getError());
        vo.setSxjcjqy(result.getSxjcjqy().getShowValue());
        vo.setSxjcjqyError(result.getSxjcjqy().getError());
        vo.setSxjgnlx(result.getSxjgnlx().getShowValue());
        vo.setSxjgnlxError(result.getSxjgnlx().getError());
        if (result.getNewDevice()) {
        vo.setCivilCode(result.getCivilCode()!=null?result.getCivilCode().getShowValue():"");
        vo.setCivilCodeError(result.getCivilCode()!=null?result.getCivilCode().getError():Boolean.FALSE);
        vo.setIp(result.getIp()!=null?result.getIp().getShowValue():"");
        vo.setIpError(result.getIp()!=null?result.getIp().getError():Boolean.FALSE);
        vo.setIntegratedDevice(result.getIntegrated_device()!=null?result.getIntegrated_device().getShowValue():"");
        vo.setIntegratedDeviceError(result.getIntegrated_device()!=null?result.getIntegrated_device().getError():Boolean.FALSE);
        vo.setJkdwlx(result.getJkdwlx()!=null?result.getJkdwlx().getShowValue():"");
        vo.setJkdwlxError(result.getJkdwlx()!=null?result.getJkdwlx().getError():Boolean.FALSE);
        vo.setLatitude(result.getLatitude()!=null?result.getLatitude().getShowValue():"");
        vo.setLatitudeError(result.getLatitude()!=null?result.getLatitude().getError():Boolean.FALSE);
        vo.setLongitude(result.getLongitude()!=null?result.getLongitude().getShowValue():"");
        vo.setLongitudeError(result.getLongitude()!=null?result.getLongitude().getError():Boolean.FALSE);
        vo.setMacdz(result.getMacdz()!=null?result.getMacdz().getShowValue():"");
        vo.setMacdzError(result.getMacdz()!=null?result.getMacdz().getError():Boolean.FALSE);
        vo.setName(result.getName()!=null?result.getName().getShowValue():"");
        vo.setNameError(result.getName()!=null?result.getName().getError():Boolean.FALSE);
        vo.setSbzt(result.getSbzt()!=null?result.getSbzt().getShowValue():"");
        vo.setSbztError(result.getSbzt()!=null?result.getSbzt().getError():Boolean.FALSE);
        vo.setSerialNumber(result.getSerialNumber()!=null?result.getSerialNumber().getShowValue():"");
        vo.setSerialNumberError(result.getSerialNumber()!=null?result.getSerialNumber().getError():Boolean.FALSE);
        vo.setSxjcjqy(result.getSxjcjqy()!=null?result.getSxjcjqy().getShowValue():"");
        vo.setSxjcjqyError(result.getSxjcjqy()!=null?result.getSxjcjqy().getError():Boolean.FALSE);
        vo.setSxjgnlx(result.getSxjgnlx()!=null?result.getSxjgnlx().getShowValue():"");
        vo.setSxjgnlxError(result.getSxjgnlx()!=null?result.getSxjgnlx().getError():Boolean.FALSE);
        if (result.getNewDevice()!=null && result.getNewDevice()) {
            vo.setNewDevice("是");
        } else {
            vo.setNewDevice("否");
ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java
@@ -58,6 +58,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date setTime;
    /**
     * osd通道名
     */
@@ -91,7 +92,7 @@
    /**
     * osdTimeCorrect时间是否正确
     */
    private String osdTimeCorrectText;
    private Boolean osdTimeError;
    /**
     * osd通道名是否正确   1正确  0未知  -1错
@@ -99,9 +100,9 @@
    private Integer osdNameCorrect;
    /**
     * osd通道名是否正确   1正确  0未知  -1错
     * osd通道名是否正确
     */
    private String osdNameCorrectText;
    private Boolean osdNameError;
    /**
     * osd省是否正确
@@ -111,7 +112,7 @@
    /**
     * osd省是否正确
     */
    private String osdProvinceCorrectText;
    private Boolean osdProvinceError;
    /**
     * osd市是否正确
@@ -121,7 +122,7 @@
    /**
     * osd市是否正确
     */
    private String osdCityCorrectText;
    private Boolean osdCityError;
    /**
     * osd区是否正确
@@ -131,7 +132,7 @@
    /**
     * osd区是否正确
     */
    private String osdPartCorrectText;
    private Boolean osdPartError;
    /**
     * osd左下角是否正确
     */
@@ -150,26 +151,21 @@
        return ApiConstants.OSD_Correct.equals(result.getOsdTimeCorrect());
    }
    public static void getText(OsdCheckResult result) {
        if(ApiConstants.OSD_Correct.equals(result.getOsdTimeCorrect())) result.setOsdTimeCorrectText("正确");
        else if(ApiConstants.OSD_Error.equals(result.getOsdTimeCorrect())) result.setOsdTimeCorrectText("错误");
        else { result.setOsdTimeCorrectText("未知"); }
    public static void getError(OsdCheckResult result) {
        if(ApiConstants.OSD_Correct.equals(result.getOsdTimeCorrect())) result.setOsdTimeError(Boolean.FALSE);
        else {result.setOsdTimeError(Boolean.TRUE); }
        if(ApiConstants.OSD_Correct.equals(result.getOsdNameCorrect())) result.setOsdNameCorrectText("正确");
        else if(ApiConstants.OSD_Error.equals(result.getOsdNameCorrect())) result.setOsdNameCorrectText("错误");
        else { result.setOsdNameCorrectText("未知"); }
        if(ApiConstants.OSD_Correct.equals(result.getOsdNameCorrect())) result.setOsdNameError(Boolean.FALSE);
        else { result.setOsdNameError(Boolean.TRUE); }
        if(ApiConstants.OSD_Correct.equals(result.getOsdProvinceCorrect())) result.setOsdProvinceCorrectText("正确");
        else if(ApiConstants.OSD_Error.equals(result.getOsdProvinceCorrect())) result.setOsdProvinceCorrectText("错误");
        else { result.setOsdProvinceCorrectText("未知"); }
        if(ApiConstants.OSD_Correct.equals(result.getOsdProvinceCorrect())) result.setOsdProvinceError(Boolean.FALSE);
        else { result.setOsdProvinceError(Boolean.TRUE); }
        if(ApiConstants.OSD_Correct.equals(result.getOsdCityCorrect())) result.setOsdCityCorrectText("正确");
        else if(ApiConstants.OSD_Error.equals(result.getOsdCityCorrect())) result.setOsdCityCorrectText("错误");
        else { result.setOsdCityCorrectText("未知"); }
        if(ApiConstants.OSD_Correct.equals(result.getOsdCityCorrect())) result.setOsdCityError(Boolean.FALSE);
        else { result.setOsdCityError(Boolean.TRUE); }
        if(ApiConstants.OSD_Correct.equals(result.getOsdPartCorrect())) result.setOsdPartCorrectText("正确");
        else if(ApiConstants.OSD_Error.equals(result.getOsdPartCorrect())) result.setOsdPartCorrectText("错误");
        else { result.setOsdPartCorrectText("未知"); }
        if(ApiConstants.OSD_Correct.equals(result.getOsdPartCorrect())) result.setOsdPartError(Boolean.FALSE);
        else { result.setOsdPartError(Boolean.TRUE); }
        if(DeviceType.DH.getType().equals(result.getDeviceBrand())) result.setDeviceBrandStr(DeviceType.DH.getDesc());
        else if(DeviceType.HK.getType().equals(result.getDeviceBrand())) result.setDeviceBrandStr(DeviceType.HK.getDesc());
ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java
@@ -73,7 +73,7 @@
        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
        stats.totalSites++;
        //时钟准确率大于90%为合格设备
        if (result.getSnapClock().getClockPercent() >= 0.9) {
        if (result.getSnapClock()!=null &&  result.getSnapClock().getClockPercent()!=null && result.getSnapClock().getClockPercent() >= 0.9) {
            stats.accuracySites++;
        }
    }
ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java
@@ -48,7 +48,7 @@
    @Override
    public void calculate(List<DataIntegrityMonitoringResult> list) {
        //获取分区域的指标数量
        Map<String, CarDataIntegrityCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list,Boolean.FALSE);
        Map<String, CarDataIntegrityCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list, Boolean.FALSE);
        if (areaStatsMap == null) return;
        // 查询是否index表已经存在今日数据
@@ -75,13 +75,13 @@
        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
        stats.totalSites++;
        //90%及以上数据合格则此车辆卡口设备被视为抓拍数据完整
        if (result.getMainNoIntegrityPercent() <= 0.1) {
        if (result.getMainNoIntegrityPercent() != null && result.getMainNoIntegrityPercent() <= 0.1) {
            stats.integritySites++;
        }
        //重点点位为六项属性完整
        if (result.getImportantTag()!=null && result.getImportantTag()) {
        if (result.getImportantTag() != null && result.getImportantTag()) {
            stats.importantTotalSites++;
            if (result.getNoIntegrityPercent() <= 0.1) {
            if (result.getNoIntegrityPercent()!=null && result.getNoIntegrityPercent() <= 0.1) {
                stats.importantIntegritySites++;
            }
        }
ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java
@@ -77,7 +77,7 @@
        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
        stats.totalSites++;
        //时钟准确率大于90%为合格设备
        if (result.getSnapClock().getClockPercent() >= 0.9) {
        if (result.getSnapClock()!=null && result.getSnapClock().getClockPercent()!=null && result.getSnapClock().getClockPercent() >= 0.9) {
            stats.accuracySites++;
        }
    }
ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java
@@ -162,7 +162,7 @@
    }
    /**
     * 视频:校时正确率
     * 视频:校时正确率 (新规则已经弃用)
     *
     * @param query
     * @return
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
@@ -553,7 +553,7 @@
        }
        //填充各个区县数据
        for (CheckScore checkScore : dashboard) {
            Map<String, Object> map = new HashMap<>();
            Map<String, Object> map = resultMap.get(checkScore.getDeptName());
            if (CheckConstants.Rule_Category_Video.equals(checkScore.getExamineCategory())) {
                map.put("video", checkScore.getScore().setScale(1, RoundingMode.HALF_UP));
            } else if (CheckConstants.Rule_Category_Car.equals(checkScore.getExamineCategory())) {
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -227,6 +227,7 @@
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
        criteriaList.add(Criteria.where("deptTag").is(Boolean.TRUE));
        // 根据dataType动态添加条件
        if (params.getDataType() == 1) {
            criteriaList.add(Criteria.where("provinceTag").is(Boolean.TRUE));
@@ -1060,7 +1061,7 @@
        MongoUtil.setPage(query, params, "checkTime");
        List<OsdCheckResult> resultList = mongoTemplate.find(query, OsdCheckResult.class);
        for (OsdCheckResult osdCheckResult : resultList) {
            OsdCheckResult.getText(osdCheckResult);
            OsdCheckResult.getError(osdCheckResult);
        }
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
@@ -1182,7 +1183,7 @@
    @Override
    public Result videoImportantPointCheckTimeAccuracy(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("deviceNo", "osdName");
        Query query = MongoUtil.getQuery(params, "checkTime", likeFileds, 3);
        Query query = MongoUtil.getQuery(params, "checkTime", likeFileds, null);
        //下拉框标注正确查询条件
        if (params.getOption() != null) {
            if(params.getOption()==1) {
@@ -1199,7 +1200,7 @@
        List<OsdCheckResult> resultList = mongoTemplate.find(query, OsdCheckResult.class);
        for (OsdCheckResult osdCheckResult : resultList) {
            OsdCheckResult.getText(osdCheckResult);
            OsdCheckResult.getError(osdCheckResult);
        }
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java
@@ -780,7 +780,7 @@
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum");
        Integer examineTag = monitorQuery.getExamineTag();
        Document matchConditions = new Document("mongoCreateTime", new Document("$gte", startDate).append("$lte", endDate));
        Document matchConditions = new Document("statTime", new Document("$gte", startDate).append("$lte", endDate));
        // 根据examineTag的值动态添加额外的条件
        if (examineTag != null && examineTag.equals(1)) {
            matchConditions.append("provinceTag", true);
@@ -790,7 +790,7 @@
        // 构建聚合管道
        List<Document> pipeline = Arrays.asList(
                new Document("$match", matchConditions),
                new Document("$group", new Document("_id", "$mongoCreateTime")
                new Document("$group", new Document("_id", "$statTime")
                        .append("normalCount", new Document("$sum",
                                new Document("$cond", Arrays.asList(
                                        new Document("$eq", Arrays.asList("$recordStatus", 1)),
@@ -976,7 +976,6 @@
            results.add(homecarVO);
        }
        //TODO:在线修改,需要把检测海康优云检测的结果存入mongo,mongo查点位在线
        MongoCollection<Document> onlineCollection = database.getCollection("t_monitor_online");
        // 构建基本的$match条件
        List<Document> onlineMatch = new ArrayList<>();
@@ -1007,30 +1006,33 @@
        Map<String, Object> resultMap = new HashMap<>();
        //按时间排序
        results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList());
        int snapCount = 0;
        for (HomeCarVO vo : results) {
            if (vo.getSnapCount() != null) {
                snapCount += vo.getSnapCount();
        //如果是默认或累和则进行累和以及获取基准线
        if(monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) {
            int snapCount = 0;
            for (HomeCarVO vo : results) {
                if (vo.getSnapCount() != null) {
                    snapCount += vo.getSnapCount();
                }
                vo.setSnapCount(snapCount);
            }
            vo.setSnapCount(snapCount);
            //从字典获取基准线
            List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine");
            String condition;
            if (examineTag != null && examineTag == 1) {
                condition = "car_province_baseLine";
            } else if (examineTag != null && examineTag == 2) {
                condition = "car_dept_baseLine";
            } else {
                condition = "car_all_baseLine";
            }
            Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst();
            if (first.isPresent()) {
                SysDictData sysDictData = first.get();
                resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue()));
            }
        }
        resultMap.put("list", results);
        //从字典获取基准线
        List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine");
        String condition;
        if (examineTag != null && examineTag == 1) {
            condition = "car_province_baseLine";
        } else if (examineTag != null && examineTag == 2) {
            condition = "car_dept_baseLine";
        } else {
            condition = "car_all_baseLine";
        }
        Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst();
        if (first.isPresent()) {
            SysDictData sysDictData = first.get();
            resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue()));
        }
        return resultMap;
    }
@@ -1115,32 +1117,35 @@
            HomeFaceVO vo = findOrCreateVO(doc, results, HomeFaceVO.class);
            vo.setOnline(doc.getInteger("onlineCount"));
        }
        Map<String, Object> resultMap = new HashMap<>();
        //按时间排序
        results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList());
        int snapCount = 0;
        for (HomeFaceVO vo : results) {
            if (vo.getSnapCount() != null) {
                snapCount += vo.getSnapCount();
        //如果是默认或累和则进行累和以及获取基准线
        if(monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) {
            int snapCount = 0;
            for (HomeFaceVO vo : results) {
                if (vo.getSnapCount() != null) {
                    snapCount += vo.getSnapCount();
                }
                vo.setSnapCount(snapCount);
            }
            vo.setSnapCount(snapCount);
            //从字典获取基准线
            List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine");
            String condition;
            if (examineTag != null && examineTag == 1) {
                condition = "face_province_baseLine";
            } else if (examineTag != null && examineTag == 2) {
                condition = "face_dept_baseLine";
            } else {
                condition = "face_all_baseLine";
            }
            Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst();
            if (first.isPresent()) {
                SysDictData sysDictData = first.get();
                resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue()));
            }
        }
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("list", results);
        //从字典获取基准线
        List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine");
        String condition;
        if (examineTag != null && examineTag == 1) {
            condition = "face_province_baseLine";
        } else if (examineTag != null && examineTag == 2) {
            condition = "face_dept_baseLine";
        } else {
            condition = "face_all_baseLine";
        }
        Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst();
        if (first.isPresent()) {
            SysDictData sysDictData = first.get();
            resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue()));
        }
        return resultMap;
    }
ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java
@@ -183,7 +183,7 @@
//            }
            long checkTime = item.getCheckTime().getTime();
            long osdTime = item.getSetTime().getTime();
            Long timeDiff = (checkTime - osdTime) / 1000;
            Long timeDiff = Math.abs((checkTime - osdTime) / 1000);
            ywThresholdService.check(YwThreadConstants.Video_DiffTime, timeDiff, item.getDeviceNo(), ywThresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.CLOCK_SKEW.getValue());
            return workOrder;
        }).collect(Collectors.toList());
ycl-server/src/main/java/com/ycl/task/ContractTask.java
@@ -201,6 +201,7 @@
            if (!CollectionUtils.isEmpty(reportNumbers)) {
                if (reportNumbers.contains(workOrder.getSerialNumber())) continue;
            }
            if(!WorkOrderStatusEnum.AUDITING_SUCCESS.equals(workOrder.getStatus())) continue;
            String errorType = workOrder.getErrorType();
            //存储故障 录像或图片访问异常 (改成手动打分了)
//            if (ErrorType.VIDEO_NONE.getValue().equals(errorType) || ErrorType.PIC_URLABNORMAL.getValue().equals(errorType)) {
ycl-server/src/main/java/com/ycl/task/HKTask.java
@@ -168,6 +168,8 @@
            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());
@@ -465,6 +467,30 @@
        log.info("结束业务树数据");
    }
    //考核成绩
    public void HkScoreTask() {
        log.info("开始执行海康考核成绩数据");
        ScoreParam param = new ScoreParam();
        param.setStartDate("2024-12-06");
        param.setEndDate("2024-12-06");
        List<HKScoreResult> dataList = HkApiUtil.sendGetAPI(host,appKey,appSecret,"/api/third/score/get", param, HKScoreResult.class);
//        if (!CollectionUtils.isEmpty(faceList)) {
//            //如果今天存在之前的数据先删除
//            Query query = new Query(Criteria
//                    .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
//            DeleteResult result = mongoTemplate.remove(query, FaceDeviceSamplingResult.class);
//            faceList.stream().forEach(item -> {
//                if (Objects.nonNull(item.getExternalIndexCode())) {
//                    item.setNo(item.getExternalIndexCode());
//                }
//            });
//            pointService.setDeviceTagByGB(faceList,CheckConstants.Rule_Category_Face);
//            //存放在mongo中
//            mongoTemplate.insertAll(faceList);
//        }
        log.info("结束海康考核成绩数据");
    }
    //解析数据
    private <T> List<T> getDataList(JSONObject jsonObject, Class<T> resultClass, String message) {
        if (jsonObject != null && ApiConstants.HKSuccessCode.equals(jsonObject.getString("code"))) {
ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -160,7 +160,7 @@
        if (osdResult.getCheckTime() != null && osdResult.getOsdTime() != null) {
            long checkTime = osdResult.getCheckTime().getTime();
            long osdTime = osdResult.getOsdTime().getTime();
            long timeDiff = (checkTime - osdTime) / 1000;
            long timeDiff = Math.abs((checkTime - osdTime) / 1000);
            if (timeDiff <= 60) {
                osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Correct);
            } else {
ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -247,10 +247,9 @@
        List<String> offLineList = new ArrayList<>();
        List<String> onLineList = new ArrayList<>();
        //查出数据库纯车辆或纯人脸设备
        List<String> serialNumbers = monitorMapper.selectCarOrFace().stream().map(TMonitor::getSerialNumber).collect(Collectors.toList());
//        List<String> serialNumbers = monitorMapper.selectCarOrFace().stream().map(TMonitor::getSerialNumber).collect(Collectors.toList());
        dataList.forEach(item->{
            //更新纯车辆或纯人脸的设备的在线状态(这部分设备不会拉流检测)
            if(item.getPingOnline() && !CollectionUtils.isEmpty(serialNumbers) && serialNumbers.contains(item.getNo())) {
            if(item.getPingOnline()) {
                onLineList.add(item.getIp());
            } else if(!item.getPingOnline()) {
                //筛选出ping离线的设备,更改数据库为离线
ycl-server/src/main/java/com/ycl/task/VideoTask.java
@@ -168,7 +168,7 @@
            imageResourceSecurities.add(imageResourceSecurity);
            //获取最近一次数据手动打分
            ImageResourceSecurity latest = imageResourceSecurityMapper.getLatest(checkIndexVideo.getDeptId(),new Date());
            imageResourceSecurity.setBoundaryIntegrity(latest.getBoundaryIntegrity());
            imageResourceSecurity.setBoundaryIntegrity(latest ==null?BigDecimal.ONE:latest.getBoundaryIntegrity());
            // 更新指标数据
            checkIndexVideo.setImageResourceSecurity(
                    imageResourceSecurity.getPlatformOnline()
ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
@@ -48,13 +48,13 @@
    private final DeviceInfoMapper deviceInfoMapper;
    private final WorkOrderCheckImgMapper workOrderCheckImgMapper;
//    private static final ExecutorService executorService = new ThreadPoolExecutor(8,
//            10,
//            5000,
//            TimeUnit.SECONDS,
//            new ArrayBlockingQueue<>(1024),
//            new ThreadPoolExecutor.CallerRunsPolicy()
//    );
    private static final ExecutorService executorService = new ThreadPoolExecutor(16,
            128,
            5000,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(1000),
            new ThreadPoolExecutor.CallerRunsPolicy()
    );
    public void run() throws FFmpegFrameGrabber.Exception {
        // 查出最近一周的故障的设备
@@ -76,22 +76,24 @@
            return;
        }
        for (DeviceInfoVO deviceInfo : deviceList) {
            // 国标设备的编码就是取视频流的设备编码,国标设备就一个。国标设备的每一个通道代表一个摄像头,也就是设备id是取流的通道id
            String frameImg = null;
            try {
                frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo());
            } catch (Exception e) {
                e.printStackTrace();
                continue;
            }
            if (StringUtils.hasText(frameImg)) {
                WorkOrderCheckImg img = new WorkOrderCheckImg();
                img.setWorkOrderNo(deviceInfo.getWorkOrderNo());
                img.setImgUrl(frameImg);
                img.setCreateTime(new Date());
                workOrderCheckImgMapper.insert(img);
            }
            executorService.submit(() -> {
                // 国标设备的编码就是取视频流的设备编码,国标设备就一个。国标设备的每一个通道代表一个摄像头,也就是设备id是取流的通道id
                String frameImg = null;
                try {
                    frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (StringUtils.hasText(frameImg)) {
                    WorkOrderCheckImg img = new WorkOrderCheckImg();
                    img.setWorkOrderNo(deviceInfo.getWorkOrderNo());
                    img.setImgUrl(frameImg);
                    img.setCreateTime(new Date());
                    workOrderCheckImgMapper.insert(img);
                }
            });
        }
        log.info("工单检测图片结束");
    }
}
ycl-server/src/main/resources/logback.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 日志存放路径 -->
    <property name="log.path" value="/home/java/logs" />
    <property name="log.path" value="/opt/zgyw/logs" />
    <!-- 日志输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
ycl-server/src/main/resources/mapper/zgyw/ImageResourceSecurityMapper.xml
@@ -102,8 +102,9 @@
        </foreach>
    </delete>
    <select id="getLatest" resultType="com.ycl.platform.domain.entity.ImageResourceSecurity">
        select * from t_image_resource_security where dept_id = #{deptId}
        where date_format(create_time,'%Y-%m')  = date_format(#{date}, '%Y-%m')
        select * from t_image_resource_security
        where dept_id = #{deptId}
        and date_format(create_time,'%Y-%m')  = date_format(#{date}, '%Y-%m')
        order by create_time desc
        limit 1
    </select>
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -111,7 +111,7 @@
        left join (
        WITH cte AS (
        SELECT *,row_number() OVER(PARTITION BY serial_number ORDER BY create_time DESC) rn FROM t_work_order
        WHERE deleted = 0 AND status = 'AUDITING_SUCCESS'
        WHERE deleted = 0 AND status != 'AUDITING_SUCCESS'
        ) SELECT * FROM cte WHERE rn=1
        ) w on m.serial_number = w.serial_number and w.deleted = 0
        left join t_yw_unit u on p.unit_id = u.id and u.deleted = 0
@@ -141,9 +141,9 @@
                #{cameraCaptureArea}
            </if>
            <if test="time !=null and time !=''">and TIMESTAMPDIFF(DAY, p.recovery_time, NOW()) <![CDATA[<=]]> #{time}</if>
            <if test="onState != null and onState = 1">and (p.online = #{onState} and p.ping_online = #{onState})</if>
            <if test="onState != null and onState = -1">and (p.online = #{onState} or p.ping_online = #{onState})</if>
            <if test="onState != null and onState = 0">and (p.online = #{onState} and p.ping_online = #{onState})</if>
            <if test="onState != null and onState == 1">and (p.online = #{onState} and p.ping_online = #{onState})</if>
            <if test="onState != null and onState == -1">and (p.online = #{onState} or p.ping_online = #{onState})</if>
            <if test="onState != null and onState == 0">and (p.online = #{onState} and p.ping_online = #{onState})</if>
            <if test="civilCode != null  and civilCode != ''">and civil_code = #{civilCode}</if>
            <if test="integratedDevice != null ">and integrated_device = #{integratedDevice}</if>
            <if test="cameraBrand != null ">and camera_brand = #{cameraBrand}</if>
@@ -197,9 +197,9 @@
            <if test="cameraFunType != null  and cameraFunType != ''">and camera_fun_type like concat('%',
                #{cameraFunType}, '%')
            </if>
            <if test="onState != null and onState = 1">and (p.online = #{onState} and p.ping_online = #{onState})</if>
            <if test="onState != null and onState = -1">and (p.online = #{onState} or p.ping_online = #{onState})</if>
            <if test="onState != null and onState = 0">and (p.online = #{onState} and p.ping_online = #{onState})</if>
            <if test="onState != null and onState == 1">and (p.online = #{onState} and p.ping_online = #{onState})</if>
            <if test="onState != null and onState == -1">and (p.online = #{onState} or p.ping_online = #{onState})</if>
            <if test="onState != null and onState == 0">and (p.online = #{onState} and p.ping_online = #{onState})</if>
            <if test="civilCode != null  and civilCode != ''">and civil_code = #{civilCode}</if>
        </where>
    </select>
@@ -210,7 +210,7 @@
        , monitor_azimuth, scene_photo_addr, model, site_vulgo, camera_type, camera_light_type, encoded_format,
        camera_dept, hybm, lxbm,d.dept_id, d.dept_name,
        CASE
            WHEN p.provnce_tag_video = 1 OR p.provnce_tag_car = 1 OR p.provnce_tag_face = 1 THEN 1
            WHEN p.province_tag_video = 1 OR p.province_tag_car = 1 OR p.province_tag_face = 1 THEN 1
            ELSE 0
        END AS province_tag,p.dept_tag
        from t_monitor m
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -211,10 +211,10 @@
    </select>
    <select id="getOfflineWorkOrder" resultType="java.lang.String">
        select tm.ip
        FROM
            t_work_order wo
        INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number
        where (EXISTS (
        FROM t_work_order wo
                 INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number
        where wo.status != 'AUDITING_SUCCESS' and wo.deleted = 0
          AND (EXISTS(
                SELECT 1
                FROM t_work_order_error_type twoet
                WHERE twoet.work_order_no = wo.work_order_no
@@ -331,7 +331,7 @@
        FROM
             t_work_order wo
        WHERE
            wo.status = 'YW_HANDLE'
            (wo.status = 'YW_HANDLE' or wo.status ='DISTRIBUTED' )
            AND wo.deleted = 0
    </select>