xiangpei
2024-09-06 3848c5677aefdb201c24d615a7c2ad03fd5154e6
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckIndexVideo.java
@@ -5,9 +5,16 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ycl.platform.base.CheckIndex;
import com.ycl.platform.domain.vo.CheckIndexCarVO;
import com.ycl.platform.domain.vo.CheckIndexVideoVO;
import constant.CheckConstants;
import lombok.Data;
import org.springframework.lang.NonNull;
import utils.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@@ -25,98 +32,84 @@
    /**
     * 平台在线率
     */
    @Excel(name = "平台在线率")
    @TableField("platform_online")
    private BigDecimal platformOnline;
    /**
     * 一机一档合格率
     */
    @Excel(name = "一机一档合格率")
    @TableField("monitor_qualification")
    private BigDecimal monitorQualification;
    /**
     * 档案考核比
     */
    @Excel(name = "一机一档注册率")
    @TableField("monitor_registration")
    private BigDecimal monitorRegistration;
    /**
     * 档案考核比
     */
    @Excel(name = "档案考核比")
    @TableField("archives_rate")
    private BigDecimal archivesRate;
    /**
     * 点位在线率
     */
    @Excel(name = "点位在线率")
    @TableField("site_online")
    private BigDecimal siteOnline;
    /**
     * 录象可用率
     */
    @Excel(name = "录象可用率")
    @TableField("video_available")
    private BigDecimal videoAvailable;
    /**
     * 标注正确率
     * 部级点位在线率
     */
    @Excel(name = "标注正确率")
    @TableField("annotation_accuracy")
    private BigDecimal annotationAccuracy;
    @TableField("ministry_site_online")
    private BigDecimal ministrySiteOnline;
    /**
     * 校时准确率
     * 部级巡检录像可用率
     */
    @Excel(name = "校时准确率")
    @TableField("timing_accuracy")
    private BigDecimal timingAccuracy;
    @TableField("ministry_video_available")
    private BigDecimal ministryVideoAvailable;
    /**
     * 重点点位在线率
     */
    @Excel(name = "重点点位在线率")
    @TableField("key_site_online")
    private BigDecimal keySiteOnline;
    /**
     * 重点点位录象可用率
     */
    @Excel(name = "重点点位录象可用率", width = 25)
    @TableField("key_video_available")
    private BigDecimal keyVideoAvailable;
    /**
     * 重点点位标注正确率
     */
    @Excel(name = "重点点位标注正确率", width = 25)
    @TableField("key_annotation_accuracy")
    private BigDecimal keyAnnotationAccuracy;
    /**
     * 重点点位按时正确率
     */
    @Excel(name = "重点点位按时正确率", width = 25)
    @TableField("key_timing_accuracy")
    private BigDecimal keyTimingAccuracy;
    /**
     *  重点指挥图像在线率
     * 重点指挥图像在线率
     */
    @Excel(name = "重点指挥图像在线率", width = 25)
    @TableField("key_command_image_online")
    private BigDecimal keyCommandImageOnline;
    /**
     * 视频图像资源安全管理
     */
    @Excel(name = "视频图像资源安全管理", width = 25)
    @TableField("image_resource_security")
    private BigDecimal imageResourceSecurity;
@@ -124,4 +117,98 @@
    @ExcelIgnore
    @TableField(exist = false)
    private List<String> quarter;
    //转换成字符串用于excel导出
    public static CheckIndexVideoVO getExcelVo(@NonNull CheckIndexVideo checkIndexVideo) {
        CheckIndexVideoVO checkIndexVideoVO = new CheckIndexVideoVO();
        checkIndexVideoVO.setScore(checkIndexVideo.getScore());
        checkIndexVideoVO.setDeptName(checkIndexVideo.getDeptName());
        //避免合计行报错(合计数据 缺少createTimeStr字段 直接将createTimeStr设置为"合计")
        if (StringUtils.isEmpty(checkIndexVideo.getCreateTimeStr())) {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            checkIndexVideoVO.setCreateTimeStr(format.format(checkIndexVideo.getCreateTime()));
        }else {
            checkIndexVideoVO.setCreateTimeStr(checkIndexVideo.getCreateTimeStr());
        }
        checkIndexVideoVO.setExamineTagStr(CheckConstants.Examine_Tag_Province.equals(checkIndexVideo.getExamineTag()) ? "省厅考核" : "区县考核");
        checkIndexVideoVO.setSiteOnlineText(checkIndexVideo.getSiteOnline().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setImageResourceSecurityText(checkIndexVideo.getImageResourceSecurity().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setArchivesRateText(checkIndexVideo.getArchivesRate().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setKeyAnnotationAccuracyText(checkIndexVideo.getKeyAnnotationAccuracy().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setKeyCommandImageOnlineText(checkIndexVideo.getKeyCommandImageOnline().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setKeyVideoAvailableText(checkIndexVideo.getKeyVideoAvailable().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setKeySiteOnlineText(checkIndexVideo.getKeySiteOnline().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setKeyTimingAccuracyText(checkIndexVideo.getKeyTimingAccuracy().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setMinistryVideoAvailableText(checkIndexVideo.getMinistryVideoAvailable().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setVideoAvailableText(checkIndexVideo.getVideoAvailable().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setMinistrySiteOnlineText(checkIndexVideo.getMinistrySiteOnline().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setPlatformOnlineText(checkIndexVideo.getPlatformOnline().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setMonitorQualificationText(checkIndexVideo.getMonitorQualification().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        checkIndexVideoVO.setMonitorRegistrationText(checkIndexVideo.getMonitorRegistration().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
        return checkIndexVideoVO;
    }
    /**
     * 用于导出计算平均值
     */
    public static CheckIndexVideo calculateAverage(List<CheckIndexVideo> videos) {
        BigDecimal scoreSum = BigDecimal.ZERO;
        BigDecimal totalPlatformOnline = BigDecimal.ZERO;
        BigDecimal totalMonitorQualification = BigDecimal.ZERO;
        BigDecimal totalMonitorRegistration = BigDecimal.ZERO;
        BigDecimal totalArchivesRate = BigDecimal.ZERO;
        BigDecimal totalSiteOnline = BigDecimal.ZERO;
        BigDecimal totalVideoAvailable = BigDecimal.ZERO;
        BigDecimal totalMinistrySiteOnline = BigDecimal.ZERO;
        BigDecimal totalMinistryVideoAvailable = BigDecimal.ZERO;
        BigDecimal totalKeySiteOnline = BigDecimal.ZERO;
        BigDecimal totalKeyVideoAvailable = BigDecimal.ZERO;
        BigDecimal totalKeyAnnotationAccuracy = BigDecimal.ZERO;
        BigDecimal totalKeyTimingAccuracy = BigDecimal.ZERO;
        BigDecimal totalKeyCommandImageOnline = BigDecimal.ZERO;
        BigDecimal totalImageResourceSecurity = BigDecimal.ZERO;
        int count = videos.size();
        for (CheckIndexVideo video : videos) {
            scoreSum = scoreSum.add(video.getScore() == null ? BigDecimal.ZERO : video.getScore());
            totalPlatformOnline = totalPlatformOnline.add(video.getPlatformOnline());
            totalMonitorQualification = totalMonitorQualification.add(video.getMonitorQualification());
            totalMonitorRegistration = totalMonitorRegistration.add(video.getMonitorRegistration());
            totalArchivesRate = totalArchivesRate.add(video.getArchivesRate());
            totalSiteOnline = totalSiteOnline.add(video.getSiteOnline());
            totalVideoAvailable = totalVideoAvailable.add(video.getVideoAvailable());
            totalMinistrySiteOnline = totalMinistrySiteOnline.add(video.getMinistrySiteOnline());
            totalMinistryVideoAvailable = totalMinistryVideoAvailable.add(video.getMinistryVideoAvailable());
            totalKeySiteOnline = totalKeySiteOnline.add(video.getKeySiteOnline());
            totalKeyVideoAvailable = totalKeyVideoAvailable.add(video.getKeyVideoAvailable());
            totalKeyAnnotationAccuracy = totalKeyAnnotationAccuracy.add(video.getKeyAnnotationAccuracy());
            totalKeyTimingAccuracy = totalKeyTimingAccuracy.add(video.getKeyTimingAccuracy());
            totalKeyCommandImageOnline = totalKeyCommandImageOnline.add(video.getKeyCommandImageOnline());
            totalImageResourceSecurity = totalImageResourceSecurity.add(video.getImageResourceSecurity());
        }
        // 创建一个新的CheckIndexVideo对象并设置平均值
        CheckIndexVideo averageVideo = new CheckIndexVideo();
        averageVideo.setCreateTimeStr("合计");
        averageVideo.setDeptName(videos.get(0).getDeptName());
        averageVideo.setExamineTag(videos.get(0).getExamineTag());
        averageVideo.setScore(scoreSum);
        averageVideo.setPlatformOnline(totalPlatformOnline.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setMonitorQualification(totalMonitorQualification.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setMonitorRegistration(totalMonitorRegistration.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setArchivesRate(totalArchivesRate.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setSiteOnline(totalSiteOnline.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setVideoAvailable(totalVideoAvailable.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setMinistrySiteOnline(totalMinistrySiteOnline.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setMinistryVideoAvailable(totalMinistryVideoAvailable.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setKeySiteOnline(totalKeySiteOnline.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setKeyVideoAvailable(totalKeyVideoAvailable.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setKeyAnnotationAccuracy(totalKeyAnnotationAccuracy.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setKeyTimingAccuracy(totalKeyTimingAccuracy.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setKeyCommandImageOnline(totalKeyCommandImageOnline.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        averageVideo.setImageResourceSecurity(totalImageResourceSecurity.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP));
        return averageVideo;
    }
}