| | |
| | | areaStatsMap.forEach((deptId, stats) -> { |
| | | if (stats.totalSites > 0) { |
| | | CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, checkIndexCarList); |
| | | checkIndexCars.add(checkIndexCar); |
| | | if (checkIndexCar != null) { |
| | | checkIndexCars.add(checkIndexCar); |
| | | } |
| | | } |
| | | }); |
| | | |
| | |
| | | */ |
| | | private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { |
| | | CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); |
| | | if (checkIndexCar == null) { |
| | | return null; |
| | | } |
| | | //调用时钟准确性计算方法 |
| | | Map<String, Object> siteOnlineParam = new HashMap<>(); |
| | | siteOnlineParam.put("totalSites", stats.totalSites); |
| | |
| | | areaStatsMap.forEach((deptId, stats) -> { |
| | | if (stats.totalSites > 0) { |
| | | CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, checkIndexCarList); |
| | | checkIndexCars.add(checkIndexCar); |
| | | if (checkIndexCar != null) { |
| | | checkIndexCars.add(checkIndexCar); |
| | | } |
| | | } |
| | | }); |
| | | |
| | |
| | | */ |
| | | private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { |
| | | CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); |
| | | if (checkIndexCar == null) { |
| | | return null; |
| | | } |
| | | //调用计算方法 |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("totalSites", stats.totalSites); |
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; |
| | | } |
| | | |
| | |
| | | areaStatsMap.forEach((deptId, stats) -> { |
| | | if (stats.totalSites > 0) { |
| | | CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, checkIndexCarList); |
| | | checkIndexCars.add(checkIndexCar); |
| | | if (checkIndexCar != null) { |
| | | checkIndexCars.add(checkIndexCar); |
| | | } |
| | | } |
| | | }); |
| | | |
| | |
| | | */ |
| | | private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { |
| | | CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); |
| | | if (checkIndexCar == null) { |
| | | return null; |
| | | } |
| | | //调用计算方法 |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("totalSites", stats.totalSites); |
File was renamed from ycl-server/src/main/java/com/ycl/calculate/CarSiteOnlineCalculation.java |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 抓拍数据量监测结果接口数据 |
| | | * 计算车辆、人脸点位在线率、视图库对接稳定性 |
| | | * 获取分省厅、区域的map<k,v> k为deptId或者Province_deptId |
| | | * 循环map计算点位在线率 |
| | | * 更新或新增 |
| | | */ |
| | | @Component |
| | | public class CarSiteOnlineCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDataMonitorResult> { |
| | | public class CarSnapshopDataCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDataMonitorResult> { |
| | | @Autowired |
| | | private CheckIndexCarMapper checkIndexCarMapper; |
| | | @Autowired |
| | |
| | | areaStatsMap.forEach((deptId, stats) -> { |
| | | if (stats.totalSites > 0) { |
| | | CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, cityCountAvg, countyCountAvg, checkIndexCarList); |
| | | checkIndexCars.add(checkIndexCar); |
| | | if (checkIndexCar != null) { |
| | | checkIndexCars.add(checkIndexCar); |
| | | } |
| | | } |
| | | }); |
| | | |
| | |
| | | */ |
| | | private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, BigDecimal cityCountAvg, BigDecimal countyCountAvg, List<CheckIndexCar> checkIndexCarList) { |
| | | CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); |
| | | if (checkIndexCar == null) { |
| | | return null; |
| | | } |
| | | //调用点位在线计算方法 |
| | | Map<String, Object> siteOnlineParam = new HashMap<>(); |
| | | siteOnlineParam.put("totalSites", stats.totalSites); |
| | |
| | | areaStatsMap.forEach((deptId, stats) -> { |
| | | if (stats.totalCount > 0) { |
| | | CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, checkIndexCarList); |
| | | checkIndexCars.add(checkIndexCar); |
| | | if (checkIndexCar != null) { |
| | | checkIndexCars.add(checkIndexCar); |
| | | } |
| | | } |
| | | }); |
| | | |
| | |
| | | */ |
| | | private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { |
| | | CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); |
| | | if (checkIndexCar == null) { |
| | | return null; |
| | | } |
| | | //调用抓拍上传及时性计算方法 |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("totalCount", stats.totalCount); |
| | |
| | | areaStatsMap.forEach((deptId, stats) -> { |
| | | if (stats.totalSites > 0) { |
| | | CheckIndexFace checkIndexFace = createOrUpdateCheckIndexFace(deptId, stats, checkIndexFaceList); |
| | | checkIndexFaces.add(checkIndexFace); |
| | | if (checkIndexFace != null) { |
| | | checkIndexFaces.add(checkIndexFace); |
| | | } |
| | | } |
| | | }); |
| | | |
| | |
| | | */ |
| | | private CheckIndexFace createOrUpdateCheckIndexFace(String key, AreaStats stats, List<CheckIndexFace> checkIndexFaceList) { |
| | | CheckIndexFace checkIndexFace = getCheckIndex(key, checkIndexFaceList, CheckIndexFace.class); |
| | | if (checkIndexFace == null) { |
| | | return null; |
| | | } |
| | | //调用计算方法 |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("totalSites", stats.totalSites); |
File was renamed from ycl-server/src/main/java/com/ycl/calculate/FaceSiteOnlineCalculation.java |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 抓拍数据量监测结果接口数据 |
| | | * 计算人脸点位在线率、视图库对接稳定性 |
| | | * 获取分省厅、区域的map<k,v> k为deptId或者Province_deptId |
| | | * 循环map计算点位在线率 |
| | | * 更新或新增 |
| | | */ |
| | | @Component |
| | | public class FaceSiteOnlineCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDataMonitorResult> { |
| | | public class FaceSnapshotDataCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDataMonitorResult> { |
| | | @Autowired |
| | | private CheckIndexFaceMapper checkIndexFaceMapper; |
| | | @Autowired |
| | |
| | | areaStatsMap.forEach((deptId, stats) -> { |
| | | if (stats.totalSites > 0) { |
| | | CheckIndexFace checkIndexFace = createOrUpdateCheckIndexFace(deptId, stats, cityCountAvg, countyCountAvg, checkIndexFaceList); |
| | | checkIndexFaces.add(checkIndexFace); |
| | | if (checkIndexFace != null) { |
| | | checkIndexFaces.add(checkIndexFace); |
| | | } |
| | | } |
| | | }); |
| | | |
| | |
| | | //车辆点位在线率和视图库对接稳定性 |
| | | private CheckIndexFace createOrUpdateCheckIndexFace(String key, AreaStats stats, BigDecimal cityCountAvg, BigDecimal countyCountAvg, List<CheckIndexFace> checkIndexFaceList) { |
| | | CheckIndexFace checkIndexFace = getCheckIndex(key, checkIndexFaceList, CheckIndexFace.class); |
| | | if (checkIndexFace == null) { |
| | | return null; |
| | | } |
| | | //调用点位在线计算方法 |
| | | Map<String, Object> siteOnlineParam = new HashMap<>(); |
| | | siteOnlineParam.put("totalSites", stats.totalSites); |
| | |
| | | areaStatsMap.forEach((deptId, stats) -> { |
| | | if (stats.totalCount > 0) { |
| | | CheckIndexFace checkIndexFace = createOrUpdateCheckIndexFace(deptId, stats, checkIndexFaceList); |
| | | checkIndexFaces.add(checkIndexFace); |
| | | if (checkIndexFace != null) { |
| | | checkIndexFaces.add(checkIndexFace); |
| | | } |
| | | } |
| | | }); |
| | | |
| | |
| | | */ |
| | | private CheckIndexFace createOrUpdateCheckIndexFace(String key, AreaStats stats, List<CheckIndexFace> checkIndexFaceList) { |
| | | CheckIndexFace checkIndexFace = getCheckIndex(key, checkIndexFaceList, CheckIndexFace.class); |
| | | if (checkIndexFace == null) { |
| | | return null; |
| | | } |
| | | //调用抓拍上传及时性计算方法 |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("totalCount", stats.totalCount); |
| | |
| | | import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; |
| | | import com.ycl.platform.service.ITMonitorService; |
| | | import constant.CheckConstants; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | * 计算公式 |
| | | */ |
| | | @Component |
| | | @Slf4j |
| | | public class IndexCalculationServe { |
| | | |
| | | //点位在线率 |
| | |
| | | return accuracySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //url可用性 |
| | | public BigDecimal urlUsability(Map<String, Object> param) { |
| | | BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); |
| | | BigDecimal urlQualifySites = new BigDecimal((Integer) param.get("urlQualifySites")); |
| | | return urlQualifySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //大图可用性 |
| | | public BigDecimal picUsability(Map<String, Object> param) { |
| | | BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); |
| | | BigDecimal picUsabilitySites = new BigDecimal((Integer) param.get("picUsabilitySites")); |
| | | return picUsabilitySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | |
| | | //返回省厅国标码集合 |
| | | public List<String> getProvince() { |
| | | // TODO: 分省厅市局 需要补充集合数据 |
| | |
| | | checkIndex.setExamineTag(key.startsWith("Province_") ? CheckConstants.Examine_Tag_City : CheckConstants.Examine_Tag_County); |
| | | checkIndex.setCreateTime(new Date()); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException("无法创建 CheckIndexCar 实例", e); |
| | | checkIndex = null; |
| | | log.error("无法创建 checkIndex 实例", e); |
| | | } |
| | | } |
| | | return checkIndex; |
| | |
| | | |
| | | static { |
| | | //点位在线、视图库对接稳定性 |
| | | calculators.put(CalculationStrategyConstants.Car_SiteOnline_ViewStability, new CarSiteOnlineCalculation()); |
| | | calculators.put(CalculationStrategyConstants.Face_SiteOnline_ViewStability, new FaceSiteOnlineCalculation()); |
| | | calculators.put(CalculationStrategyConstants.Car_SiteOnline_ViewStability, new CarSnapshopDataCalculation()); |
| | | calculators.put(CalculationStrategyConstants.Face_SiteOnline_ViewStability, new FaceSnapshotDataCalculation()); |
| | | //信息准确率 |
| | | calculators.put(CalculationStrategyConstants.Car_InfoAccuracy, new CarInFoAccuracyCalculation()); |
| | | calculators.put(CalculationStrategyConstants.Face_InfoAccuracy, new FaceInFoAccuracyCalculation()); |
| | |
| | | //车辆数据抓拍完整性 |
| | | calculators.put(CalculationStrategyConstants.Car_DataIntegrity,new CarDataIntegrityCalculation()); |
| | | //车辆数据抓拍准确性 |
| | | calculators.put(CalculationStrategyConstants.Car_DataAccuracy,new CarAttrRecognitionCalculation()); |
| | | calculators.put(CalculationStrategyConstants.Car_DataAccuracy,new CarDeviceSampleCalculation()); |
| | | //车辆时钟准确性 |
| | | calculators.put(CalculationStrategyConstants.Car_ClockAccuracy,new CarClockAccuracyCalculation()); |
| | | } |
| | |
| | | |
| | | public void siteOnlineTask() { |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | //点位在线率和视图库对接稳定性 |
| | | //计算点位在线率和视图库对接稳定性 |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)) |
| | |
| | | CalculationStrategy<SnapshotDataMonitorResult> calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SiteOnline_ViewStability); |
| | | calculator.calculate(results); |
| | | } |
| | | public void infoAccuracyTask(){ |
| | | |
| | | public void deviceSampleTask() { |
| | | 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_DataIntegrity); |
| | | calculator.calculate(results); |
| | | } |
| | | |
| | | public void infoAccuracyTask() { |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | //计算车辆卡口信息采集准确率 |
| | | Query query = new Query(); |
| | |
| | | CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_InfoAccuracy); |
| | | calculator.calculate(results); |
| | | } |
| | | public void snapShopDelay(){ |
| | | |
| | | public void snapShopDelay() { |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | //计算车辆卡口信息采集准确率 |
| | | //计算车辆抓拍数据上传延迟 |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)) |
| | |
| | | CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SnapshotDelay); |
| | | calculator.calculate(results); |
| | | } |
| | | public void snapShopDataIntegrity(){ |
| | | |
| | | public void snapShopDataIntegrity() { |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | //计算车辆数据抓拍完整性 |
| | | Query query = new Query(); |
| | |
| | | calculator.calculate(results); |
| | | } |
| | | |
| | | public void test(){ |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | //联网卡口设备目录一致率 |
| | | } |
| | | |
| | | public void AttrRecognitionMonitorTask(){ |
| | | 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<VehicleDeviceSamplingResult> results = mongoTemplate.find(query, VehicleDeviceSamplingResult.class); |
| | | CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DataIntegrity); |
| | | calculator.calculate(results); |
| | | } |
| | | |
| | | public void CarClockAccuracyTask(){ |
| | | public void CarClockAccuracyTask() { |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | //计算车辆卡口设备时钟准确性 |
| | | Query query = new Query(); |
| | |
| | | CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_ClockAccuracy); |
| | | calculator.calculate(results); |
| | | } |
| | | |
| | | public void test() { |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | //TODO:一机一档 联网卡口设备目录一致率 取redis |
| | | } |
| | | } |