package com.ruoyi.service.impl;

import com.ruoyi.domain.Standard;
import com.ruoyi.domain.vo.*;
import com.ruoyi.mapper.StandardMapper;
import com.ruoyi.mapper.StatisticsHomeMapper;
import com.ruoyi.service.StatisticsHomeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
@Transactional
public class StatisticsHomeServiceImpl implements StatisticsHomeService {
    @Autowired
    private StatisticsHomeMapper statisticsHomeMapper;

    @Autowired
    private StandardMapper standardMapper;

    @Override
    public QuantityStatisticsVO selectQuantityStatistics(QuantityStatisticsVO quantityStatisticsHome){

        QuantityStatisticsVO quantityStatisticsVO =  statisticsHomeMapper.selectQuantityStatistics(quantityStatisticsHome);
        quantityStatisticsVO.setExecuteTaskProportion(percentageCalculation(quantityStatisticsVO.getExecuteTasksNumber(),quantityStatisticsVO.getCompletedTaskNumber()));
        quantityStatisticsVO.setCompletedTaskProportion(percentageCalculation(quantityStatisticsVO.getCompletedTaskNumber(),quantityStatisticsVO.getExecuteTasksNumber()));
        return quantityStatisticsVO;
    }

    @Override
    public List<StandardCategoryStatisticsVO> selectStandardCategoryStatistics(){
        return statisticsHomeMapper.selectStandardCategoryStatistics();
    }

    @Override
    public List<ConfidentialityLevelProportionVO> selectConfidentialityLevelStatistics(){
        return statisticsHomeMapper.selectConfidentialityLevelStatistics();
    }

    @Override
    public List<AverageInspectionRateVO> selectAverageInspectionRate(){
        List<Standard> standards =  standardMapper.selectListAll();
        String standardNo = null;
        if(!standards.isEmpty()){
            standardNo = standards.get(0).getStandardNo();
        }
       InspectionItemPassedNumVO inspectionItemPassedNumVO =  statisticsHomeMapper.selectInspectionItemPassedNum();
       List<AverageInspectionRateVO> list = new ArrayList<>();
       AverageInspectionRateVO averageInspectionRateOne = new AverageInspectionRateVO();
       averageInspectionRateOne.setInspectionItems("汽车信息安全管理体系要求");
       averageInspectionRateOne.setPassingRate(proportionCalculation(inspectionItemPassedNumVO.getSysReviewPassedNum(), inspectionItemPassedNumVO.getSysReviewcompletedNum()));
        list.add(averageInspectionRateOne);
       AverageInspectionRateVO averageInspectionRateTwo = new AverageInspectionRateVO();
       averageInspectionRateTwo.setInspectionItems("信息安全一般要求");
       averageInspectionRateTwo.setPassingRate(proportionCalculation(inspectionItemPassedNumVO.getCarReviewPassedNum(),inspectionItemPassedNumVO.getCarReviewcompletedNum()));
        list.add(averageInspectionRateTwo);
       AverageInspectionRateVO averageInspectionRateThree = new AverageInspectionRateVO();
       averageInspectionRateThree.setInspectionItems("信息安全技术要求");
       averageInspectionRateThree.setPassingRate(proportionCalculation(inspectionItemPassedNumVO.getModelTestPassedNum(),inspectionItemPassedNumVO.getModelTestCompletedNum()));
        list.add(averageInspectionRateThree);
        for(AverageInspectionRateVO averageInspectionRate:list){
            averageInspectionRate.setStandardNumber(standardNo);
        }
        return list;
    }

    @Override
    public List<TaskParticipationStatisticsVO> selectTaskParticipationStatistics(){
        return statisticsHomeMapper.selectTaskParticipationStatistics();
    }

    // 计算两个数各占比
    public int percentageCalculation(Integer a, Integer b){
        int total = a+b;
        if(total == 0){
            return 0;
        }else {
            float c = (float)a/total;
            return Math.round(c*100);
        }
    }

    // 计算百分比
    public int proportionCalculation(Integer a, Integer b){
        if(b == 0){
            return 0;
        }else {
            float c = (float)a/b;
            return Math.round(c*100);
        }
    }
}