zxl
2025-05-29 71f61d13531b3e2a0099ba5afe3f268c99c5bacf
ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java
@@ -1,43 +1,79 @@
package com.ycl.factory;
import com.ycl.calculate.*;
import com.ycl.platform.domain.result.UY.VideoQualityResult;
import constant.CalculationStrategyConstants;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
public class IndexCalculationFactory {
    private static final Map<String, CalculationStrategy> calculators = new HashMap<>();
@Component
public class IndexCalculationFactory implements BeanFactoryAware {
    private static BeanFactory beanFactory;
    private static final Map<String, Class<? extends CalculationStrategy>> calculatorClasses = new HashMap<>();
    static {
        //车辆点位在线、视图库对接稳定性
        calculators.put(CalculationStrategyConstants.Car_SiteOnline_ViewStability, new CarSnapshopDataCalculation());
        //车辆点位在线
        calculatorClasses.put(CalculationStrategyConstants.Car_SiteOnline, CarOnlineCalculation.class);
        //车辆视图库对接稳定性
        calculatorClasses.put(CalculationStrategyConstants.Car_ViewStability, CarSnapshopDataCalculation.class);
        //车辆信息准确率
        calculators.put(CalculationStrategyConstants.Car_InfoAccuracy, new CarInFoAccuracyCalculation());
        calculatorClasses.put(CalculationStrategyConstants.Car_InfoAccuracy, CarInFoAccuracyCalculation.class);
        //车辆抓拍数据上传延迟
        calculators.put(CalculationStrategyConstants.Car_SnapshotDelay, new CarSnapshotDelayCalculation());
        calculatorClasses.put(CalculationStrategyConstants.Car_SnapshotDelay, CarSnapshotDelayCalculation.class);
        //车辆数据抓拍完整性
        calculators.put(CalculationStrategyConstants.Car_DataIntegrity, new CarDataIntegrityCalculation());
        calculatorClasses.put(CalculationStrategyConstants.Car_DataIntegrity, CarDataIntegrityCalculation.class);
        //车辆数据抓拍准确性、url、大图可用
        calculators.put(CalculationStrategyConstants.Car_DataAccuracy_Url_PicUsability, new CarDeviceSampleCalculation());
        calculatorClasses.put(CalculationStrategyConstants.Car_DataAccuracy_PicUsability, CarDeviceSampleCalculation.class);
        //车辆url
        calculatorClasses.put(CalculationStrategyConstants.Car_Url, CarUrlCalculation.class);
        //车辆时钟准确性
        calculators.put(CalculationStrategyConstants.Car_ClockAccuracy, new CarClockAccuracyCalculation());
        //TODO:车辆目录一致
        calculatorClasses.put(CalculationStrategyConstants.Car_ClockAccuracy, CarClockAccuracyCalculation.class);
        //车辆目录一致
        calculatorClasses.put(CalculationStrategyConstants.Car_DirectConsistent, CarConsistentCalculation.class);
        //人脸点位在线、视图库对接稳定
        calculators.put(CalculationStrategyConstants.Face_SiteOnline_ViewStability, new FaceSnapshotDataCalculation());
        //人脸点位在线
        calculatorClasses.put(CalculationStrategyConstants.Face_SiteOnline, FaceOnlineCalculation.class);
        //人脸视图库对接稳定
        calculatorClasses.put(CalculationStrategyConstants.Face_ViewStability, FaceSnapshotDataCalculation.class);
        //人脸信息准确率
        calculators.put(CalculationStrategyConstants.Face_InfoAccuracy, new FaceInFoAccuracyCalculation());
        calculatorClasses.put(CalculationStrategyConstants.Face_InfoAccuracy, FaceInFoAccuracyCalculation.class);
        //人脸抓拍数据延迟
        calculators.put(CalculationStrategyConstants.Face_SnapshotDelay, new FaceSnapshotDelayCalculation());
        calculatorClasses.put(CalculationStrategyConstants.Face_SnapshotDelay, FaceSnapshotDelayCalculation.class);
        //人脸图片合格、大图可用
        calculators.put(CalculationStrategyConstants.Face_DataAccuracy_PicUsability, new FaceDeviceSampleCalculation());
        calculatorClasses.put(CalculationStrategyConstants.Face_DataAccuracy_PicUsability, FaceDeviceSampleCalculation.class);
        //人脸时钟准确性
        calculatorClasses.put(CalculationStrategyConstants.Face_ClockAccuracy, FaceClockAccuracyCalculation.class);
        //人脸目录一致
        calculatorClasses.put(CalculationStrategyConstants.Face_DirectConsistent, FaceConsistentCalculation.class);
        //TODO:人脸目录一致
        //注册率、档案考核比
        calculatorClasses.put(CalculationStrategyConstants.Video_MonitorRegis_ArchiveRate,MonitorRegistrationCalculation.class);
        //一机一档合格率
        calculatorClasses.put(CalculationStrategyConstants.Video_MonitorQualify, MonitorQualifyCalculation.class);
        //视频点位在线率
        calculatorClasses.put(CalculationStrategyConstants.Video_SiteOnline, VideoOnlineCalculation.class);
        //视频录像可用率
        calculatorClasses.put(CalculationStrategyConstants.Video_Usability, VideoUsabilityCalculation.class);
        //平台在线率
        calculatorClasses.put(CalculationStrategyConstants.Video_PlatformOnline,PlatformOnlineCalculation.class);
        //Osd准确率和时间标注准确率
        calculatorClasses.put(CalculationStrategyConstants.Video_OsdTime,VideoOsdCalculation.class);
    }
    public static CalculationStrategy getCalculator(String indexName) {
        return calculators.get(indexName);
        Class<? extends CalculationStrategy> clazz = calculatorClasses.get(indexName);
        if (clazz != null) {
            return beanFactory.getBean(clazz);
        }
        return null;
    }
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        IndexCalculationFactory.beanFactory = beanFactory;
    }
}