fuliqi
2024-09-10 7d5ea3631d163343b652bd6bd40b94b34c4194eb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package com.ycl.task;
 
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ycl.calculate.CalculationStrategy;
import com.ycl.factory.IndexCalculationFactory;
import com.ycl.platform.domain.entity.YwPoint;
import com.ycl.platform.domain.result.HK.*;
import com.ycl.platform.domain.result.SYS.TMonitorResult;
import com.ycl.platform.domain.result.UY.MonitorQualifyResult;
import com.ycl.platform.domain.vo.TMonitorVO;
import com.ycl.platform.mapper.TMonitorMapper;
import com.ycl.platform.mapper.YwPointMapper;
import com.ycl.utils.DateUtils;
import com.ycl.utils.StringUtils;
import constant.ApiConstants;
import constant.CalculationStrategyConstants;
import constant.CheckConstants;
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.stereotype.Component;
 
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
 
/**
 * 车辆计算考核指标任务
 * 凌晨执行计算昨天数据
 */
@Slf4j
@Component("carTask")
public class CarTask {
    @Autowired
    private MongoTemplate mongoTemplate;
    @Autowired
    private TMonitorMapper monitorMapper;
    @Autowired
    private YwPointMapper pointMapper;
    //TODO:加任务
    public void siteOnlineTask() {
        log.info("开始计算点位在线率");
        List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Car);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SiteOnline);
        calculator.calculate(tMonitorResults);
        log.info("结束计算视图库对接稳定性");
    }
 
    //TODO:改任务名
    public void viewConnectTask() {
        log.info("开始计算视图库对接稳定性");
        Date yesterday = DateUtils.addDays(new Date(), -1);
        //计算点位在线率和视图库对接稳定性
        Query query = new Query();
        query.addCriteria(Criteria
                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))
                .and("dataType").is(ApiConstants.HK_DataType_CAR));
        List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
        CalculationStrategy<SnapshotDataMonitorResult> calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_ViewStability);
        calculator.calculate(results);
        log.info("结束计算视图库对接稳定性");
    }
 
    public void deviceSampleTask() {
        log.info("开始计算车辆卡口设备数据识别准确性、url可用性、大图可用性");
        Date yesterday = DateUtils.addDays(new Date(), -1);
        //计算车辆卡口设备数据识别准确性、url可用性、大图可用性
        Query query = new Query();
        query.addCriteria(Criteria
                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
        List<VehicleDeviceSamplingResult> results = mongoTemplate.find(query, VehicleDeviceSamplingResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DataAccuracy_Url_PicUsability);
        calculator.calculate(results);
        log.info("结束计算车辆卡口设备数据识别准确性、url可用性、大图可用性");
    }
 
    public void infoAccuracyTask() {
        log.info("开始计算车辆卡口信息采集准确率");
        Date yesterday = DateUtils.addDays(new Date(), -1);
        //计算车辆卡口信息采集准确率
        Query query = new Query();
        query.addCriteria(Criteria
                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
        List<CrossDetailResult> results = mongoTemplate.find(query, CrossDetailResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_InfoAccuracy);
        calculator.calculate(results);
        log.info("结束计算车辆卡口信息采集准确率");
    }
 
    public void snapShopDelayTask() {
        log.info("开始计算车辆抓拍数据上传及时性");
        Date yesterday = DateUtils.addDays(new Date(), -1);
        //计算车辆抓拍数据上传及时性
        Query query = new Query();
        query.addCriteria(Criteria
                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))
                .and("dataType").is(ApiConstants.HK_DataType_CAR));
        List<SnapshotDelayMonitorResult> results = mongoTemplate.find(query, SnapshotDelayMonitorResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SnapshotDelay);
        calculator.calculate(results);
        log.info("结束计算车辆抓拍数据上传及时性");
    }
 
    public void snapShopDataIntegrity() {
        log.info("开始计算车辆数据抓拍完整性");
        Date yesterday = DateUtils.addDays(new Date(), -1);
        //计算车辆数据抓拍完整性
        Query query = new Query();
        query.addCriteria(Criteria
                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
        List<DataIntegrityMonitoringResult> results = mongoTemplate.find(query, DataIntegrityMonitoringResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DataIntegrity);
        calculator.calculate(results);
        log.info("结束计算车辆数据抓拍完整性");
    }
 
    public void clockAccuracyTask() {
        log.info("开始计算车辆卡口设备时钟准确性");
        Date yesterday = DateUtils.addDays(new Date(), -1);
        //计算车辆卡口设备时钟准确性
        Query query = new Query();
        query.addCriteria(Criteria
                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
        List<VehicleDeviceInspectionResult> results = mongoTemplate.find(query, VehicleDeviceInspectionResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_ClockAccuracy);
        calculator.calculate(results);
        log.info("结束计算车辆卡口设备时钟准确性");
    }
 
    public void directConsistentTask() {
        log.info("开始计算车辆目录一致率");
        //车辆目录一致率
        Date yesterday = DateUtils.addDays(new Date(), -1);
        Query query = new Query();
        query.addCriteria(Criteria
                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
        // 1/2/3 视频/车辆/人脸
        Pattern pattern = Pattern.compile(".*2.*");
        query.addCriteria(Criteria.where("sxjgnlx.value").regex(pattern));
        List<MonitorQualifyResult> results = mongoTemplate.find(query, MonitorQualifyResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DirectConsistent);
        calculator.calculate(results);
        log.info("结束计算车辆目录一致率");
    }
 
}