File was renamed from ycl-server/src/main/java/com/ycl/calculate/CarAttrRecognitionCalculation.java |
| | |
| | | import utils.DateUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 计算车辆属性识别准确率 |
| | | * 采用车辆抽检指标接口数据 |
| | | * 车辆数据抽检接口 |
| | | * 计算车辆属性识别准确率、url可用性、大图可用性 |
| | | * 获取分省厅、区域的map<k,v> k为deptId或者Province_deptId |
| | | * 更新或新增 |
| | | */ |
| | | @Component |
| | | public class CarAttrRecognitionCalculation extends IndexCalculationServe implements CalculationStrategy<VehicleDeviceSamplingResult> { |
| | | public class CarDeviceSampleCalculation extends IndexCalculationServe implements CalculationStrategy<VehicleDeviceSamplingResult> { |
| | | @Autowired |
| | | private CheckIndexCarMapper checkIndexCarMapper; |
| | | @Autowired |
| | |
| | | @Autowired |
| | | private ICheckIndexCarService checkIndexCarService; |
| | | |
| | | //区域车辆属性识别准确率 |
| | | //区域车辆抽检指标 |
| | | private static class AreaStats { |
| | | int totalSites = 0; |
| | | int importantTotalSites = 0; |
| | | //属性识别准确的点位数 |
| | | int accuracySites = 0; |
| | | int importantAccuracySitesSites = 0; |
| | | //属性识别准确的重点点位数 |
| | | int importantAccuracySites = 0; |
| | | //url可访问的点位数 |
| | | int urlUsabilitySites = 0; |
| | | //图片可用的点位数 |
| | | int picUsabilitySites = 0; |
| | | } |
| | | |
| | | @Override |
| | |
| | | areaStatsMap.forEach((deptId, stats) -> { |
| | | if (stats.totalSites > 0) { |
| | | CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, checkIndexCarList); |
| | | checkIndexCars.add(checkIndexCar); |
| | | if (checkIndexCar != null) { |
| | | checkIndexCars.add(checkIndexCar); |
| | | } |
| | | } |
| | | }); |
| | | |
| | |
| | | //返回对象的引用,如果不存在会放入新的key,value |
| | | AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); |
| | | VehicleDeviceSamplingResult.VehicleDifference vehDiff = result.getVehDiff(); |
| | | VehicleDeviceSamplingResult.BigUsefulness bigUseful = result.getBigUseful(); |
| | | stats.totalSites++; |
| | | //90%及以上数据合格则此车辆卡口设备被视为抓拍数据准确 |
| | | if(vehDiff.getMajorConPercent() >= 0.9){ |
| | | if (vehDiff.getMajorConPercent() >= 0.9) { |
| | | stats.accuracySites++; |
| | | } |
| | | //重点点位为六项属性 |
| | | if(importantIds.contains(key)){ |
| | | if (importantIds.contains(key)) { |
| | | stats.importantTotalSites++; |
| | | if(vehDiff.getImportantConPercent() >= 0.9){ |
| | | stats.importantAccuracySitesSites++; |
| | | if (vehDiff.getImportantConPercent() >= 0.9) { |
| | | stats.importantAccuracySites++; |
| | | } |
| | | } |
| | | //大图可用率大于90%视为合格 |
| | | if (bigUseful.getBigUsefulPercent() >= 0.9) { |
| | | stats.picUsabilitySites++; |
| | | } |
| | | //图片访问正常量 = 抽检量-异常量 |
| | | BigDecimal picNormalCount = new BigDecimal(bigUseful.getSampleCount() - bigUseful.getBigPicExpCount()); |
| | | //图片抽检量 |
| | | BigDecimal sampleCount = new BigDecimal(bigUseful.getSampleCount()); |
| | | //图片访问率>=90% 视为合格 |
| | | if (picNormalCount.divide(sampleCount, 4, RoundingMode.HALF_UP).compareTo(new BigDecimal("0.9")) >= 0) { |
| | | stats.urlUsabilitySites++; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 车辆信息采集正确率 |
| | | * 车辆信息采集正确率、url可用性、大图可用性 |
| | | */ |
| | | private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { |
| | | CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); |
| | | //调用计算方法 |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("totalSites", stats.totalSites); |
| | | param.put("importantTotalSites", stats.importantTotalSites); |
| | | param.put("accuracySites", stats.accuracySites); |
| | | param.put("importantAccuracySites", stats.importantAccuracySitesSites); |
| | | BigDecimal dataAccuracy = dataAccuracy(param); |
| | | if (checkIndexCar == null) { |
| | | return null; |
| | | } |
| | | //调用信息采集正确率计算方法 |
| | | Map<String, Object> accuracyParam = new HashMap<>(); |
| | | accuracyParam.put("totalSites", stats.totalSites); |
| | | accuracyParam.put("importantTotalSites", stats.importantTotalSites); |
| | | accuracyParam.put("accuracySites", stats.accuracySites); |
| | | accuracyParam.put("importantAccuracySites", stats.importantAccuracySites); |
| | | BigDecimal dataAccuracy = dataAccuracy(accuracyParam); |
| | | checkIndexCar.setVehicleCaptureAccuracy(dataAccuracy); |
| | | //调用url可用性计算方法 |
| | | Map<String, Object> urlParam = new HashMap<>(); |
| | | urlParam.put("totalSites", stats.totalSites); |
| | | urlParam.put("urlQualifySites", stats.urlUsabilitySites); |
| | | BigDecimal urlUsability = urlUsability(urlParam); |
| | | checkIndexCar.setVehicleUrlAvailability(urlUsability); |
| | | //调用大图可用性计算方法 |
| | | Map<String, Object> usabilityParam = new HashMap<>(); |
| | | urlParam.put("totalSites", stats.totalSites); |
| | | urlParam.put("picUsabilitySites", stats.picUsabilitySites); |
| | | BigDecimal picUsability = picUsability(usabilityParam); |
| | | checkIndexCar.setVehiclePictureAvailability(picUsability); |
| | | return checkIndexCar; |
| | | } |
| | | |