package com.ycl.platform.domain.entity; import annotation.Excel; import com.alibaba.excel.annotation.ExcelIgnore; 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.CheckIndexFaceVO; 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; /** * 人脸指标概率数据对象 t_check_index_face * * @author ruoyi * @date 2024-04-29 */ @Data @TableName("t_check_index_face") public class CheckIndexFace extends CheckIndex { private static final long serialVersionUID = 1L; /** * 视图库对接稳定性 */ @TableField("view_connect_stability") private BigDecimal viewConnectStability; /** * 点位在线率 */ @TableField("site_online") private BigDecimal siteOnline; /** * 设备目录一致率 */ @TableField("device_directory_consistent") private BigDecimal deviceDirectoryConsistent; /** * 人脸卡口信息采集准确率 */ @TableField("face_information_collection_accuracy") private BigDecimal faceInformationCollectionAccuracy; /** * 设备抓拍图片合格性 */ @TableField("face_picture_qualification") private BigDecimal facePictureQualification; /** * 设备抓拍图片时钟准确性 */ @TableField("face_timing_accuracy") private BigDecimal faceTimingAccuracy; /** * 抓拍人脸数据上传及时性 */ @TableField("face_upload_timeliness") private BigDecimal faceUploadTimeliness; /** * 人脸卡口设备抓拍数据大图可用性 */ @TableField("face_picture_availability") private BigDecimal facePictureAvailability; @ExcelIgnore @TableField(exist = false) private List quarter; //转换成字符串用于excel导出 public static CheckIndexFaceVO getExcelVo(@NonNull CheckIndexFace checkIndexFace) { CheckIndexFaceVO checkIndexFaceVo = new CheckIndexFaceVO(); checkIndexFaceVo.setScore(checkIndexFace.getScore().setScale(2,RoundingMode.HALF_UP)); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //避免合计行报错(合计数据 缺少createTimeStr字段 直接将createTimeStr设置为"合计") if (StringUtils.isEmpty(checkIndexFace.getCreateTimeStr())) { checkIndexFaceVo.setCreateTimeStr(format.format(checkIndexFace.getCreateTime())); }else { checkIndexFaceVo.setCreateTimeStr(checkIndexFace.getCreateTimeStr()); } checkIndexFaceVo.setDeptName(checkIndexFace.getDeptName()); checkIndexFaceVo.setExamineTagStr(CheckConstants.Examine_Tag_Province.equals(checkIndexFace.getExamineTag()) ? "省厅考核" : "区县考核"); checkIndexFaceVo.setSiteOnlineText(checkIndexFace.getSiteOnline().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%"); checkIndexFaceVo.setFaceInformationCollectionAccuracyText(checkIndexFace.getFaceInformationCollectionAccuracy().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%"); checkIndexFaceVo.setFacePictureAvailabilityText(checkIndexFace.getFacePictureAvailability().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%"); checkIndexFaceVo.setDeviceDirectoryConsistentTextText(checkIndexFace.getDeviceDirectoryConsistent().multiply(new BigDecimal(100)) .setScale(2, RoundingMode.HALF_UP)+ "%"); checkIndexFaceVo.setFaceTimingAccuracyText(checkIndexFace.getFaceTimingAccuracy().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%"); checkIndexFaceVo.setFacePictureQualificationText(checkIndexFace.getFacePictureQualification().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%"); checkIndexFaceVo.setViewConnectStabilityText(checkIndexFace.getViewConnectStability().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%"); checkIndexFaceVo.setFaceUploadTimelinessText(checkIndexFace.getFaceUploadTimeliness().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%"); return checkIndexFaceVo; } /** 用于导出计算平均值 */ public static CheckIndexFace calculateAverage(List checkIndexFaces) { BigDecimal scoreSum = BigDecimal.ZERO; BigDecimal totalViewConnectStability = BigDecimal.ZERO; BigDecimal totalSiteOnline = BigDecimal.ZERO; BigDecimal totalDeviceDirectoryConsistent = BigDecimal.ZERO; BigDecimal totalFaceInformationCollectionAccuracy = BigDecimal.ZERO; BigDecimal totalFacePictureQualification = BigDecimal.ZERO; BigDecimal totalFaceTimingAccuracy = BigDecimal.ZERO; BigDecimal totalFaceUploadTimeliness = BigDecimal.ZERO; BigDecimal totalFacePictureAvailability = BigDecimal.ZERO; int count = checkIndexFaces.size(); for (CheckIndexFace indexFace : checkIndexFaces) { scoreSum = scoreSum.add(indexFace.getScore() == null ? BigDecimal.ZERO : indexFace.getScore()); totalViewConnectStability = totalViewConnectStability.add(indexFace.getViewConnectStability()); totalSiteOnline = totalSiteOnline.add(indexFace.getSiteOnline()); totalDeviceDirectoryConsistent = totalDeviceDirectoryConsistent.add(indexFace.getDeviceDirectoryConsistent()); totalFaceInformationCollectionAccuracy = totalFaceInformationCollectionAccuracy.add(indexFace.getFaceInformationCollectionAccuracy()); totalFacePictureQualification = totalFacePictureQualification.add(indexFace.getFacePictureQualification()); totalFaceTimingAccuracy = totalFaceTimingAccuracy.add(indexFace.getFaceTimingAccuracy()); totalFaceUploadTimeliness = totalFaceUploadTimeliness.add(indexFace.getFaceUploadTimeliness()); totalFacePictureAvailability = totalFacePictureAvailability.add(indexFace.getFacePictureAvailability()); } CheckIndexFace result = new CheckIndexFace(); result.setCreateTimeStr("合计"); result.setDeptName(checkIndexFaces.get(0).getDeptName()); result.setExamineTag(checkIndexFaces.get(0).getExamineTag()); result.setScore(scoreSum.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)); result.setViewConnectStability(totalViewConnectStability.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)); result.setSiteOnline(totalSiteOnline.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)); result.setDeviceDirectoryConsistent(totalDeviceDirectoryConsistent.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)); result.setFaceInformationCollectionAccuracy(totalFaceInformationCollectionAccuracy.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)); result.setFacePictureQualification(totalFacePictureQualification.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)); result.setFaceTimingAccuracy(totalFaceTimingAccuracy.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)); result.setFaceUploadTimeliness(totalFaceUploadTimeliness.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)); result.setFacePictureAvailability(totalFacePictureAvailability.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)); return result; } }