Merge remote-tracking branch 'origin/master'
| | |
| | | private BigDecimal videoAvailable; |
| | | |
| | | /** |
| | | * 标注正确率 |
| | | * 部级点位在线率 |
| | | */ |
| | | @Excel(name = "标注正确率") |
| | | @TableField("annotation_accuracy") |
| | | private BigDecimal annotationAccuracy; |
| | | @Excel(name = "部级点位在线率") |
| | | @TableField("ministry_site_online") |
| | | private BigDecimal ministrySiteOnline; |
| | | |
| | | /** |
| | | * 校时准确率 |
| | | * 部级巡检录像可用率 |
| | | */ |
| | | @Excel(name = "校时准确率") |
| | | @TableField("timing_accuracy") |
| | | private BigDecimal timingAccuracy; |
| | | @Excel(name = "部级巡检录像可用率") |
| | | @TableField("ministry_video_available") |
| | | private BigDecimal ministryVideoAvailable; |
| | | |
| | | /** |
| | | * 重点点位在线率 |
| | |
| | | /** |
| | | * 人脸合格性相关数据 |
| | | */ |
| | | //TODO:参数名修改看接口是否有参数 |
| | | private FaceEligibility faceEligibility; |
| | | |
| | | // 内嵌对象定义 |
| | |
| | | package com.ycl.calculate; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.ycl.platform.base.CheckIndex; |
| | | import com.ycl.platform.domain.entity.CheckIndexCar; |
| | | import com.ycl.platform.domain.entity.TMonitor; |
| | | import com.ycl.platform.domain.result.HK.CrossDetailResult; |
| | | import com.ycl.platform.domain.result.HK.DataIntegrityMonitoringResult; |
| | | import com.ycl.platform.domain.vo.TMonitorVO; |
| | | import com.ycl.platform.mapper.CheckIndexCarMapper; |
| | | import com.ycl.platform.mapper.TMonitorMapper; |
| | | import com.ycl.platform.service.ICheckIndexCarService; |
| | | import com.ycl.platform.service.ITMonitorService; |
| | | import com.ycl.system.mapper.SysConfigMapper; |
| | | import constant.ApiConstants; |
| | | import constant.CheckConstants; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | |
| | | import utils.DateUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 车辆信息采集正确率 |
| | | * 车辆数据完整 |
| | | */ |
| | | private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { |
| | | CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 计算车辆属性识别准确率、url可用性、大图可用性 |
| | | * 计算车辆抓拍数据准确性、url可用性、大图可用性 |
| | | * 车辆数据抽检接口 |
| | | * 获取分省厅、区域的map<k,v> k为deptId或者Province_deptId |
| | | * 更新或新增 |
| | |
| | | } |
| | | |
| | | /** |
| | | * 车辆信息采集正确率、url可用性、大图可用性 |
| | | * 车辆抓拍数据准确性、url可用性、大图可用性 |
| | | */ |
| | | private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { |
| | | CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); |
| | | if (checkIndexCar == null) { |
| | | return null; |
| | | } |
| | | //调用信息采集正确率计算方法 |
| | | log.info("key:{},车辆抓拍数据准确性:totalSites:{},importantTotalSites:{},accuracySites:{},importantAccuracySites:{}",key,stats.totalSites,stats.importantTotalSites,stats.accuracySites,stats.importantAccuracySites); |
| | | //调用车辆抓拍数据准确性计算方法 |
| | | Map<String, Object> accuracyParam = new HashMap<>(); |
| | | accuracyParam.put("totalSites", stats.totalSites); |
| | | accuracyParam.put("importantTotalSites", stats.importantTotalSites); |
| | |
| | | accuracyParam.put("importantAccuracySites", stats.importantAccuracySites); |
| | | BigDecimal dataAccuracy = dataAccuracy(accuracyParam); |
| | | checkIndexCar.setVehicleCaptureAccuracy(dataAccuracy); |
| | | log.info("url可用性: totalSites:{},urlQualifySites:{}",stats.totalSites,stats.urlUsabilitySites); |
| | | //调用url可用性计算方法 |
| | | Map<String, Object> urlParam = new HashMap<>(); |
| | | urlParam.put("totalSites", stats.totalSites); |
| | | urlParam.put("urlQualifySites", stats.urlUsabilitySites); |
| | | BigDecimal urlUsability = urlUsability(urlParam); |
| | | checkIndexCar.setVehicleUrlAvailability(urlUsability); |
| | | log.info("大图可用性: totalSites:{},picUsabilitySites:{}",stats.totalSites,stats.picUsabilitySites); |
| | | //调用大图可用性计算方法 |
| | | Map<String, Object> usabilityParam = new HashMap<>(); |
| | | usabilityParam.put("totalSites", stats.totalSites); |
| | |
| | | */ |
| | | @Component |
| | | @Slf4j |
| | | //TODD:系统配置里的区分人脸和车辆、累加次数的概念、区县不少于40路,不达标市州的当月该项成绩不能得分。 |
| | | public class FaceSnapshotDataCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDataMonitorResult> { |
| | | @Autowired |
| | | private CheckIndexFaceMapper checkIndexFaceMapper; |
| | |
| | | public BigDecimal monitorQualify(Map<String, Object> param) { |
| | | BigDecimal totalMonitors = new BigDecimal((Integer) param.get("totalMonitors")); |
| | | BigDecimal qualifyMonitor = new BigDecimal((Integer) param.get("qualifyMonitor")); |
| | | return qualifyMonitor.divide(totalMonitors, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(totalMonitors) == 0 ? BigDecimal.ZERO : qualifyMonitor.divide(totalMonitors, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //一机一档注册率率 |
| | |
| | | BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); |
| | | //正在用的档案数 |
| | | BigDecimal useSites = new BigDecimal((Integer) param.get("totalSites") - (Integer) param.get("newSites")); |
| | | return useSites.divide(totalSites, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : useSites.divide(totalSites, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //档案考核比 |
| | | public BigDecimal archivesRate(Map<String, Object> param) { |
| | | BigDecimal allFiles = new BigDecimal((Integer) param.get("allFiles")); |
| | | BigDecimal todayFiles = new BigDecimal((Integer) param.get("todayFiles")); |
| | | return todayFiles.divide(allFiles, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(todayFiles) == 0 ? BigDecimal.ZERO : todayFiles.divide(allFiles, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //点位在线率 |
| | | public BigDecimal siteOnline(Map<String, Object> param) { |
| | | BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); |
| | | BigDecimal onlineSites = new BigDecimal((Integer) param.get("onlineSites")); |
| | | return onlineSites.divide(totalSites, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : onlineSites.divide(totalSites, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //视频Osd准确率 |
| | | public BigDecimal osdAccuracy(Map<String, Object> param) { |
| | | BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); |
| | | BigDecimal osdAccuracySites = new BigDecimal((Integer) param.get("osdAccuracySites")); |
| | | return osdAccuracySites.divide(totalSites, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : osdAccuracySites.divide(totalSites, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //视频时间合格率 |
| | | public BigDecimal osdTimeAccuracy(Map<String, Object> param) { |
| | | BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); |
| | | BigDecimal timeAccuracySites = new BigDecimal((Integer) param.get("timeAccuracySites")); |
| | | return timeAccuracySites.divide(totalSites, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : timeAccuracySites.divide(totalSites, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //目录一致率,每超过百分之1扣10% |
| | |
| | | // 计算newSites占totalSites的百分比倍数 |
| | | BigDecimal percentage = newSites.divide(totalSites, 2, RoundingMode.DOWN).multiply(BigDecimal.valueOf(100)); |
| | | BigDecimal result = BigDecimal.ONE; |
| | | //超过百分之1没,超过了才扣分 |
| | | if (BigDecimal.ONE.compareTo(percentage) <= 0) { |
| | | result = result.subtract(percentage.multiply(new BigDecimal("0.1"))); |
| | | } |
| | |
| | | public BigDecimal viewConnectStability(Map<String, Object> param) { |
| | | BigDecimal totalDataSum = new BigDecimal((Integer) param.get("totalDataSum")); |
| | | BigDecimal avgCount = (BigDecimal) param.get("avgCount"); |
| | | return avgCount.divide(totalDataSum, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(totalDataSum) == 0 ? BigDecimal.ZERO : avgCount.divide(totalDataSum, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //标注正确率 |
| | | public BigDecimal infoAccuracy(Map<String, Object> param) { |
| | | BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); |
| | | BigDecimal qualifySiteCount = new BigDecimal((Integer) param.get("qualifySite")); |
| | | return qualifySiteCount.divide(totalSitesCount, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : qualifySiteCount.divide(totalSitesCount, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //数据上传及时性 |
| | |
| | | BigDecimal delayCount1 = new BigDecimal((Integer) param.get("delayCount1")); |
| | | BigDecimal delayCount2 = new BigDecimal((Integer) param.get("delayCount2")); |
| | | BigDecimal delayCount3 = new BigDecimal((Integer) param.get("delayCount3")); |
| | | |
| | | BigDecimal result = BigDecimal.ONE.subtract(delayCount1.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(BigDecimal.ONE) |
| | | BigDecimal result = BigDecimal.ZERO.compareTo(totalCount) == 0 ? BigDecimal.ZERO : delayCount1.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(BigDecimal.ONE) |
| | | .add(delayCount2.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.8"))) |
| | | .add(delayCount3.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.6")))); |
| | | .add(delayCount3.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.6"))); |
| | | return result.setScale(4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | |
| | | BigDecimal importantTotalSites = new BigDecimal((Integer) param.get("importantTotalSites")); |
| | | BigDecimal integritySites = new BigDecimal((Integer) param.get("integritySites")); |
| | | BigDecimal importantIntegritySites = new BigDecimal((Integer) param.get("importantIntegritySites")); |
| | | BigDecimal result = integritySites.divide(totalSites, 10, RoundingMode.HALF_UP) |
| | | .multiply(importantIntegritySites.divide(importantTotalSites, 10, RoundingMode.HALF_UP)); |
| | | return result.setScale(4, RoundingMode.HALF_UP); |
| | | BigDecimal total = BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : integritySites.divide(totalSites, 10, RoundingMode.HALF_UP); |
| | | BigDecimal important = BigDecimal.ZERO.compareTo(importantTotalSites) == 0 ? BigDecimal.ZERO : importantIntegritySites.divide(importantTotalSites, 10, RoundingMode.HALF_UP); |
| | | return total.multiply(important).setScale(4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //车辆数据完整性 |
| | |
| | | BigDecimal importantTotalSites = new BigDecimal((Integer) param.get("importantTotalSites")); |
| | | BigDecimal accuracySites = new BigDecimal((Integer) param.get("accuracySites")); |
| | | BigDecimal importantAccuracySites = new BigDecimal((Integer) param.get("importantAccuracySites")); |
| | | BigDecimal result = accuracySites.divide(totalSites, 10, RoundingMode.HALF_UP) |
| | | .add(importantAccuracySites.divide(importantTotalSites, 10, RoundingMode.HALF_UP)); |
| | | return result.setScale(4, RoundingMode.HALF_UP); |
| | | BigDecimal total = BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : accuracySites.divide(totalSites, 10, RoundingMode.HALF_UP); |
| | | BigDecimal important = BigDecimal.ZERO.compareTo(importantTotalSites) == 0 ? BigDecimal.ZERO : importantAccuracySites.divide(importantTotalSites, 10, RoundingMode.HALF_UP); |
| | | return total.multiply(important).setScale(4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //时钟准确性 |
| | | public BigDecimal clockAccuracy(Map<String, Object> param) { |
| | | BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); |
| | | BigDecimal accuracySites = new BigDecimal((Integer) param.get("accuracySites")); |
| | | return accuracySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : 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); |
| | | return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : 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); |
| | | return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : picUsabilitySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //图片合格率 |
| | | public BigDecimal dataQualify(Map<String, Object> param) { |
| | | BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); |
| | | BigDecimal picQualifySites = new BigDecimal((Integer) param.get("picQualifySites")); |
| | | return picQualifySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : picQualifySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //录像可用率 |
| | | public BigDecimal videoUsability(Map<String, Object> param) { |
| | | BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); |
| | | BigDecimal usabilitySites = new BigDecimal((Integer) param.get("usabilitySites")); |
| | | return usabilitySites.divide(totalSites, 4, RoundingMode.HALF_UP); |
| | | return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : usabilitySites.divide(totalSites, 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | //返回省厅国标码集合 |
| | |
| | | return CollectionUtils.isEmpty(commandImages) ? new ArrayList<>() : commandImages.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList()); |
| | | } |
| | | |
| | | //返回重点指挥图像集合 |
| | | //返回部级点位集合 |
| | | public List<String> getDeptTag() { |
| | | List<YwPoint> commandImages = pointMapper.selectByTag(null, null, null, Boolean.TRUE); |
| | | return CollectionUtils.isEmpty(commandImages) ? new ArrayList<>() : commandImages.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList()); |
| | |
| | | |
| | | //返回monitor |
| | | public List<String> getMonitorFromMongo() { |
| | | Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); |
| | | List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class); |
| | | |
| | | return CollectionUtils.isEmpty(oneMachineFileResults) ? new ArrayList<>() : oneMachineFileResults.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList()); |
| | |
| | | int newSites = 0; |
| | | //全年留存数 |
| | | int allFiles = 0; |
| | | //当日档案数 |
| | | //当日档案数(凌晨计算的,实际取得是昨日的一机一档数量) |
| | | int todayFiles = 0; |
| | | } |
| | | |
| | |
| | | /** |
| | | * 累计总点位数、在线点位数、重点点位数、重点点位在线数、指挥图像数、指挥图像在线数 |
| | | */ |
| | | private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, TMonitorVO result, Map<String, TMonitor> newMonitors, List<String> todayMonitor) { |
| | | private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, TMonitorVO result, Map<String, TMonitor> newMonitors, List<String> yesterdayMonitor) { |
| | | //返回对象的引用,如果不存在会放入新的key,value |
| | | AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); |
| | | stats.totalSites++; |
| | |
| | | if (newMonitors.containsKey(result.getSerialNumber())) { |
| | | stats.newSites++; |
| | | } |
| | | if (todayMonitor.contains(result.getSerialNumber())) { |
| | | if (yesterdayMonitor.contains(result.getSerialNumber())) { |
| | | stats.todayFiles++; |
| | | } |
| | | } |
| | |
| | | import com.ycl.system.mapper.SysDeptMapper; |
| | | import constant.ApiConstants; |
| | | import constant.CheckConstants; |
| | | import enumeration.general.AreaDeptEnum; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | |
| | | |
| | | @Override |
| | | public void calculate(List<PlatformOnlineVO> list) { |
| | | Map<String,Double> map = new HashMap<>(); |
| | | if (!CollectionUtils.isEmpty(list)) { |
| | | //总离线时长 |
| | | int time = list.stream().map(PlatformOnlineVO::getTodayOutlineSed).reduce(0, Integer::sum); |
| | | //离线时长转换位分钟然后取模 |
| | | int num = (time / 60) % 30; |
| | | double score = Math.max(1 - num * 0.1, 0); |
| | | for (PlatformOnlineVO platformOnlineVO : list) { |
| | | String[] areas = platformOnlineVO.getArea().split(","); |
| | | for (String area : areas) { |
| | | Integer deptId = AreaDeptEnum.fromCode(area).getDeptId(); |
| | | //离线时长 |
| | | Integer time = platformOnlineVO.getTodayOutlineSed(); |
| | | //离线时长转换位分钟 |
| | | int num = (time / 60) / 30; |
| | | double score = Math.max(1 - num * 0.1, 0); |
| | | map.put(deptId+"",score); |
| | | map.put(ApiConstants.Province + deptId,score); |
| | | } |
| | | } |
| | | |
| | | //是否已经存在当日数据 |
| | | List<CheckIndexVideo> checkIndexVideos = videoMapper.selectToday(DateUtils.getDate()); |
| | | //所有区域部门 |
| | | List<Long> deptIds = deptMapper.selectByParentId(207L); |
| | | List<String> keys = new ArrayList<>(); |
| | | //准备区分省厅、区域的deptId list |
| | | for (Long deptId : deptIds) { |
| | | keys.add(deptId + ""); |
| | | keys.add(ApiConstants.Province + deptId); |
| | | } |
| | | |
| | | List<CheckIndexVideo> videos = new ArrayList<>(); |
| | | keys.forEach(key -> { |
| | | map.forEach((key,score) -> { |
| | | //如果不存在就新增如果存在则复用 |
| | | CheckIndexVideo checkIndex = getCheckIndex(key, checkIndexVideos, CheckIndexVideo.class); |
| | | if (checkIndex != null) { |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 计算视频设备点位在线率、重点点位在线率、重点指挥图像在线率 |
| | | * 计算视频设备点位在线率、重点点位在线率、重点指挥图像在线率、部级点位在线率 |
| | | * 图像监测诊断结果 |
| | | * 获取分省厅、区域的map<k,v> k为deptId或者Province_deptId |
| | | * 循环map计算数据上传及时性 |
| | |
| | | int importantOnlineSites = 0; |
| | | int commandSites = 0; |
| | | int commandOnlineSites =0; |
| | | int deptSites = 0; |
| | | int deptOnlineSites = 0; |
| | | } |
| | | |
| | | @Override |
| | |
| | | List<String> important = getImportant(); |
| | | //重点指挥图像集合 |
| | | List<String> commandImage = getCommandImage(); |
| | | //获取部级点位集合 |
| | | List<String> deptTag = getDeptTag(); |
| | | |
| | | Map<String, AreaStats> areaStatsMap = new HashMap<>(); |
| | | for (VideoOnlineResult result : list) { |
| | |
| | | if (monitor == null) continue; |
| | | |
| | | String deptId = monitor.getDeptId().toString(); |
| | | updateAreaStats(areaStatsMap, deptId, result, important,commandImage); |
| | | updateAreaStats(areaStatsMap, deptId, result, important,commandImage,deptTag); |
| | | |
| | | // 处理省厅数据 |
| | | if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { |
| | | String provinceKey = ApiConstants.Province + deptId; |
| | | updateAreaStats(areaStatsMap, provinceKey, result, important,commandImage); |
| | | updateAreaStats(areaStatsMap, provinceKey, result, important,commandImage,deptTag); |
| | | } |
| | | } |
| | | |
| | |
| | | /** |
| | | * 累计总点位数、在线点位数、重点点位数、重点点位在线数、指挥图像数、指挥图像在线数 |
| | | */ |
| | | private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, VideoOnlineResult result, List<String> important, List<String> commandImage) { |
| | | private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, VideoOnlineResult result, List<String> important, List<String> commandImage,List<String> deptTag) { |
| | | //返回对象的引用,如果不存在会放入新的key,value |
| | | AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); |
| | | stats.totalSites++; |
| | |
| | | if(commandImage.contains(result.getDeviceId())){ |
| | | stats.commandSites++; |
| | | } |
| | | if(deptTag.contains(result.getDeviceId())){ |
| | | stats.deptSites++; |
| | | } |
| | | if (ApiConstants.UY_OnlineSite_Online.equals(result.getStatus())){ |
| | | stats.onlineSites++; |
| | | if(important.contains(result.getDeviceId())){ |
| | |
| | | } |
| | | if(commandImage.contains(result.getDeviceId())){ |
| | | stats.commandOnlineSites++; |
| | | } |
| | | if(deptTag.contains(result.getDeviceId())){ |
| | | stats.deptOnlineSites++; |
| | | } |
| | | } |
| | | } |
| | |
| | | }else { |
| | | log.info("指挥图像点位数为0"); |
| | | } |
| | | //调用点位在线率计算方法 计算部级点位在线率 |
| | | if(stats.deptSites!=0) { |
| | | Map<String, Object> deptParam = new HashMap<>(); |
| | | deptParam.put("totalSites", stats.deptSites); |
| | | deptParam.put("onlineSites", stats.deptOnlineSites); |
| | | BigDecimal deptOnline = siteOnline(deptParam); |
| | | checkIndexVideo.setMinistrySiteOnline(deptOnline); |
| | | }else { |
| | | log.info("部级点位数为0"); |
| | | } |
| | | return checkIndexVideo; |
| | | } |
| | | } |
| | |
| | | //区域视频在线率的内部类 |
| | | private static class AreaStats { |
| | | int totalSites = 0; |
| | | int osdAccuracySites = 0; |
| | | int timeAccuracySites = 0; |
| | | |
| | | int importantTotalSites = 0; |
| | | int importantOsdAccuracySites = 0; |
| | |
| | | //返回对象的引用,如果不存在会放入新的key,value |
| | | AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); |
| | | stats.totalSites++; |
| | | //校验osd |
| | | if (checkOsd(result)) { |
| | | stats.osdAccuracySites++; |
| | | } |
| | | //校验时间偏差 |
| | | if (checkTime(result)) { |
| | | stats.timeAccuracySites++; |
| | | } |
| | | |
| | | //重点点位 |
| | | if (important.contains(result.getDeviceNo())) { |
| | | stats.importantTotalSites++; |
| | |
| | | if (checkIndexVideo == null) { |
| | | return null; |
| | | } |
| | | //调用osd标注计算方法 |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("totalSites", stats.totalSites); |
| | | param.put("osdAccuracySites", stats.osdAccuracySites); |
| | | BigDecimal osdAccuracy = osdAccuracy(param); |
| | | checkIndexVideo.setAnnotationAccuracy(osdAccuracy); |
| | | |
| | | //调用osd标注计算方法 计算重点osd标注 |
| | | Map<String, Object> importantParam = new HashMap<>(); |
| | | importantParam.put("totalSites", stats.importantTotalSites); |
| | |
| | | BigDecimal imOsdAccuracy = osdAccuracy(importantParam); |
| | | checkIndexVideo.setKeyAnnotationAccuracy(imOsdAccuracy); |
| | | |
| | | //调用osd时间准确率 |
| | | Map<String, Object> timeParam = new HashMap<>(); |
| | | timeParam.put("totalSites", stats.totalSites); |
| | | timeParam.put("timeAccuracySites", stats.timeAccuracySites); |
| | | BigDecimal osdTimeAccuracy = osdTimeAccuracy(timeParam); |
| | | checkIndexVideo.setTimingAccuracy(osdTimeAccuracy); |
| | | //调用osd时间准确率,计算重点 |
| | | Map<String, Object> importantTimeParam = new HashMap<>(); |
| | | importantTimeParam.put("totalSites", stats.importantTotalSites); |
| | |
| | | int usabilitySites = 0; |
| | | int importantSites = 0; |
| | | int importantUsabilitySites = 0; |
| | | int deptSite =0; |
| | | int depteUsabilitySites = 0; |
| | | } |
| | | |
| | | @Override |
| | |
| | | List<String> provinceIds = getProvince(); |
| | | //重点点位集合 |
| | | List<String> important = getImportant(); |
| | | |
| | | List<String> deptTag = getDeptTag(); |
| | | Map<String, AreaStats> areaStatsMap = new HashMap<>(); |
| | | for (RecordMetaDSumResult result : list) { |
| | | TMonitorVO monitor = monitorMap.get(result.getDeviceId()); |
| | | if (monitor == null) continue; |
| | | |
| | | String deptId = monitor.getDeptId().toString(); |
| | | updateAreaStats(areaStatsMap, deptId, result, important); |
| | | updateAreaStats(areaStatsMap, deptId, result, important,deptTag); |
| | | |
| | | // 处理省厅数据 |
| | | if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { |
| | | String provinceKey = ApiConstants.Province + deptId; |
| | | updateAreaStats(areaStatsMap, provinceKey, result, important); |
| | | updateAreaStats(areaStatsMap, provinceKey, result, important,deptTag); |
| | | } |
| | | } |
| | | |
| | |
| | | /** |
| | | * 累计总点位数、在线点位数、重点点位数、重点点位在线数 |
| | | */ |
| | | private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, RecordMetaDSumResult result, List<String> important) { |
| | | private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, RecordMetaDSumResult result, List<String> important,List<String> deptTag) { |
| | | //返回对象的引用,如果不存在会放入新的key,value |
| | | AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); |
| | | stats.totalSites++; |
| | | boolean flag = important.contains(result.getDeviceId()); |
| | | if(flag){ |
| | | if(important.contains(result.getDeviceId())){ |
| | | stats.importantSites++; |
| | | } |
| | | if(deptTag.contains(result.getDeviceId())){ |
| | | stats.deptSite++; |
| | | } |
| | | if (ApiConstants.UY_RecordStatus_Integrity.equals(result.getRecordStatus())){ |
| | | stats.usabilitySites++; |
| | | if(flag){ |
| | | if(important.contains(result.getDeviceId())){ |
| | | stats.importantUsabilitySites++; |
| | | } |
| | | if(deptTag.contains(result.getDeviceId())){ |
| | | stats.depteUsabilitySites++; |
| | | } |
| | | } |
| | | } |
| | |
| | | importantParam.put("usabilitySites", stats.importantUsabilitySites); |
| | | BigDecimal importantVideoUsability = videoUsability(importantParam); |
| | | checkIndexVideo.setKeyVideoAvailable(importantVideoUsability); |
| | | //调用录像可用率计算方法 计算部级录像可用率 |
| | | Map<String, Object> deptParam = new HashMap<>(); |
| | | deptParam.put("totalSites", stats.deptSite); |
| | | deptParam.put("usabilitySites", stats.depteUsabilitySites); |
| | | BigDecimal deptUseability = videoUsability(deptParam); |
| | | checkIndexVideo.setMinistryVideoAvailable(deptUseability); |
| | | return checkIndexVideo; |
| | | } |
| | | } |
| | |
| | | |
| | | // STEP5:组装请求参数 |
| | | String body = JSON.toJSONString(params); |
| | | log.info("请求参数:{}",body); |
| | | // STEP6:调用接口 |
| | | String result = null;// post请求application/json类型参数 |
| | | List<T> dataList = new ArrayList<>(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 视频:点位在线率 |
| | | * |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @GetMapping("/videoPointOnlineRate") |
| | | public Result videoPointOnlineRate(DataCenterQuery query) { |
| | | return dataCenterService.videoPointOnlineRate(query); |
| | | } |
| | | |
| | | /** |
| | | * 视频:一机一档注册率 |
| | | * |
| | | * @param query |
| | |
| | | } |
| | | |
| | | /** |
| | | * 视频:录像可用率 |
| | | * 视频:点位在线率 |
| | | * |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @GetMapping("/videoAvailabilityRate") |
| | | public Result videoAvailabilityRate(DataCenterQuery query) { |
| | | @GetMapping("/videoPointOnlineRate") |
| | | public Result videoPointOnlineRate(DataCenterQuery query) { |
| | | return dataCenterService.videoPointOnlineRate(query); |
| | | } |
| | | |
| | | /** |
| | | * 视频:部级点位在线率 |
| | | * |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @GetMapping("/videoMinistrySiteOnline") |
| | | public Result videoMinistrySiteOnline(DataCenterQuery query) { |
| | | return dataCenterService.videoAvailabilityRate(query); |
| | | } |
| | | |
| | | /** |
| | | * 视频:部级巡检录像可用率 |
| | | * |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @GetMapping("/videoMinistryVideoAvailable") |
| | | public Result videoMinistryVideoAvailable(DataCenterQuery query) { |
| | | return dataCenterService.videoLabelingAccuracy(query); |
| | | } |
| | | |
| | | /** |
| | |
| | | @GetMapping("/videoImportantPointAvailabilityRate") |
| | | public Result videoImportantPointAvailabilityRate(DataCenterQuery query) { |
| | | return dataCenterService.videoImportantPointAvailabilityRate(query); |
| | | } |
| | | |
| | | /** |
| | | * 视频:标注正确率 |
| | | * |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @GetMapping("/videoLabelingAccuracy") |
| | | public Result videoLabelingAccuracy(DataCenterQuery query) { |
| | | return dataCenterService.videoLabelingAccuracy(query); |
| | | } |
| | | |
| | | /** |
| | |
| | | job.setConcurrent("1"); |
| | | job.setStatus(checkTemplateDTO.getStatus()); |
| | | job.setJobGroup("CHECK"); |
| | | job.setCronExpression("0 0 12 * * ?"); |
| | | job.setCronExpression("0 0 6 * * ?"); |
| | | job.setJobName(checkTemplateDTO.getTemplateName()); |
| | | int i = jobService.insertJob(job); |
| | | return job; |
| | |
| | | for (CalculateRuleVO calculateRuleVO : ruleList) { |
| | | Double max = calculateRuleVO.getMax(); |
| | | Double min = calculateRuleVO.getMin(); |
| | | //判断范围在哪个区间 //TODO:判断单位 |
| | | if (checkRange(min, max, BigDecimal.valueOf(result.getMissDuration()))) { |
| | | //判断范围在哪个区间 单位是小时转换为分钟 |
| | | if (checkRange(min, max, BigDecimal.valueOf(result.getMissDuration()*60))) { |
| | | if (calculateRuleVO.getNum() == null) { |
| | | calculateRuleVO.setNum(1); |
| | | } else { |
| | |
| | | faceParam.setDataType(ApiConstants.HK_DataType_FACE); |
| | | List<SnapshotDataMonitorResult> faceList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v1/data/snapCountDetail/query", faceParam, SnapshotDataMonitorResult.class); |
| | | if (!CollectionUtils.isEmpty(faceList)) { |
| | | log.info("结果数据大小:{}",faceList.size()); |
| | | //如果今天存在之前的数据先删除 |
| | | Query query = new Query(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())) |
| | | .and("dataType").is(ApiConstants.HK_DataType_FACE)); |
| | | DeleteResult result = mongoTemplate.remove(query, SnapshotDataMonitorResult.class); |
| | | //存放在mongo中 |
| | | carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE)); |
| | | faceList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE)); |
| | | mongoTemplate.insertAll(faceList); |
| | | } |
| | | log.info("结束抓拍数据量检测结果数据同步"); |
| | |
| | | package com.ycl.task; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.mongodb.client.result.DeleteResult; |
| | | import com.ycl.api.DH.module.LoginModule; |
| | | import com.ycl.api.DH.utils.DHApi; |
| | | import com.ycl.api.HK.HKApi; |
| | | import com.ycl.api.YS.YSApi; |
| | | import com.ycl.api.YS.YSInit; |
| | | import com.ycl.platform.domain.entity.TMonitor; |
| | | import com.ycl.platform.domain.result.OSDResult; |
| | | import com.ycl.platform.domain.result.UY.MonitorQualifyResult; |
| | |
| | | */ |
| | | public void getOSD() { |
| | | log.info("开始获取OSD"); |
| | | // YSApi.getOsd("51.95.66.42",YSUserName,YSPassword); |
| | | |
| | | // DHApi.getOsd("51.95.67.189",DHUserName,DHPassword); |
| | | // YSApi.getOsd("51.95.66.42",YSUserName,YSPassword); |
| | | //批量修改海康品牌集合 |
| | | List<String> hkList = new ArrayList<>(); |
| | | //批量修改大华品牌集合 |
| | |
| | | log.info("结束执行录像可用数据同步"); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | import com.ycl.calculate.CalculationStrategy; |
| | | import com.ycl.factory.IndexCalculationFactory; |
| | | import com.ycl.platform.domain.entity.CheckIndexVideo; |
| | | import com.ycl.platform.domain.entity.ImageResourceSecurity; |
| | | import com.ycl.platform.domain.entity.ImageResourceSecurityDetail; |
| | | import com.ycl.platform.domain.result.UY.*; |
| | | import com.ycl.platform.domain.vo.PlatformOnlineVO; |
| | | import com.ycl.platform.domain.vo.TMonitorVO; |
| | | import com.ycl.platform.mapper.CheckIndexVideoMapper; |
| | | import com.ycl.platform.mapper.ImageResourceSecurityDetailMapper; |
| | | import com.ycl.platform.mapper.PlatformOnlineMapper; |
| | | import com.ycl.platform.mapper.TMonitorMapper; |
| | | import com.ycl.platform.service.IImageResourceSecurityService; |
| | | import com.ycl.utils.DateUtils; |
| | | import com.ycl.utils.DictUtils; |
| | | import constant.CalculationStrategyConstants; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.mongodb.core.MongoTemplate; |
| | | import org.springframework.data.mongodb.core.query.Criteria; |
| | | import org.springframework.data.mongodb.core.query.Query; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * 视频计算考核指标任务 |
| | |
| | | */ |
| | | @Slf4j |
| | | @Component("videoTask") |
| | | @RequiredArgsConstructor |
| | | public class VideoTask { |
| | | @Autowired |
| | | private MongoTemplate mongoTemplate; |
| | |
| | | private PlatformOnlineMapper platformOnlineMapper; |
| | | @Autowired |
| | | private TMonitorMapper monitorMapper; |
| | | |
| | | private final IImageResourceSecurityService imageResourceSecurityService; |
| | | private final CheckIndexVideoMapper checkIndexVideoMapper; |
| | | private final ImageResourceSecurityDetailMapper imageResourceSecurityDetailMapper; |
| | | private static final BigDecimal NUM = new BigDecimal("0.15"); |
| | | |
| | | public void siteOnlineTask() { |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | |
| | | public void oneMonitorQualifyTask(){ |
| | | //计算一机一档合格率 |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); |
| | |
| | | calculator.calculate(results); |
| | | } |
| | | |
| | | /** |
| | | * 视频图像资源安全,需要排在平台在线率后面。 |
| | | */ |
| | | @Transactional |
| | | public void videoSecurity() { |
| | | ArrayList<ImageResourceSecurity> imageResourceSecurities = new ArrayList<>(); |
| | | List<CheckIndexVideo> list = checkIndexVideoMapper.selectAndDeptName(); |
| | | List<ImageResourceSecurityDetail> detail = imageResourceSecurityDetailMapper.getList(); |
| | | |
| | | // 每个部门循环一次计算数据 |
| | | for (CheckIndexVideo checkIndexVideo : list) { |
| | | ImageResourceSecurity imageResourceSecurity = new ImageResourceSecurity(); |
| | | imageResourceSecurity.setDeptId(checkIndexVideo.getDeptId()); |
| | | // 直接取指标 |
| | | imageResourceSecurity.setPlatformOnline(checkIndexVideo.getPlatformOnline()); |
| | | imageResourceSecurity.setPropertyAccuracy(checkIndexVideo.getMonitorQualification()); |
| | | // 获取当前部门的detail进行计算 |
| | | List<ImageResourceSecurityDetail> detailList = detail.stream().filter(imageResourceSecurityDetail -> Objects.equals(imageResourceSecurityDetail.getDeptId(), checkIndexVideo.getDeptId())).toList(); |
| | | int score = 100; |
| | | int count = 0; |
| | | // 循环detail计算 |
| | | for (ImageResourceSecurityDetail imageResourceSecurityDetail : detailList) { |
| | | // 扣除分数 |
| | | score -= imageResourceSecurityDetail.getAlarmCategory().getScore(); |
| | | // 统计数量 |
| | | if (Integer.parseInt(imageResourceSecurityDetail.getAlarmLevel().getValue()) > 1) { |
| | | count++; |
| | | } |
| | | } |
| | | imageResourceSecurity.setWeakPassword(BigDecimal.valueOf(score)); |
| | | // 获取字典值-总数 |
| | | int onlineAssetsTotal = Integer.parseInt(DictUtils.getDictValue("online_assets_total", checkIndexVideo.getDeptName())); |
| | | imageResourceSecurity.setRiskProperty(BigDecimal.valueOf(count / onlineAssetsTotal)); |
| | | imageResourceSecurity.setCreateTime(DateUtils.getNowDate()); |
| | | imageResourceSecurities.add(imageResourceSecurity); |
| | | // 更新指标数据 |
| | | checkIndexVideo.setImageResourceSecurity(imageResourceSecurity.getPlatformOnline().add(imageResourceSecurity.getPropertyAccuracy().add(imageResourceSecurity.getWeakPassword().add(imageResourceSecurity.getRiskProperty()))).multiply(NUM)); |
| | | checkIndexVideoMapper.updateById(checkIndexVideo); |
| | | } |
| | | imageResourceSecurityService.saveBatch(imageResourceSecurities); |
| | | |
| | | } |
| | | } |
| | |
| | | spring: |
| | | # 数据源配置 |
| | | datasource: |
| | | url: jdbc:mysql://127.0.0.1/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true |
| | | url: jdbc:mysql://101.35.247.188/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true |
| | | username: root |
| | | password: 123456 |
| | | password: ycl@202466 |
| | | type: com.alibaba.druid.pool.DruidDataSource |
| | | driver-class-name: com.mysql.cj.jdbc.Driver |
| | | |
| | |
| | | spring.data: |
| | | redis: |
| | | # 地址 |
| | | # host: 42.193.1.25 |
| | | host: 127.0.0.1 |
| | | host: 42.193.1.25 |
| | | # host: 127.0.0.1 |
| | | # 端口,默认为6379 |
| | | port: 6379 |
| | | # password: ycl2018 |
| | | password: ycl2018 |
| | | # password: |
| | | # 数据库索引 |
| | | database: 0 |
| | |
| | | <result property="archivesRate" column="archives_rate" /> |
| | | <result property="siteOnline" column="site_online" /> |
| | | <result property="videoAvailable" column="video_available" /> |
| | | <result property="annotationAccuracy" column="annotation_accuracy" /> |
| | | <result property="timingAccuracy" column="timing_accuracy" /> |
| | | <result property="ministrySiteOnline" column="ministry_site_online" /> |
| | | <result property="ministryVideoAvailable" column="ministry_video_available" /> |
| | | <result property="keySiteOnline" column="key_site_online" /> |
| | | <result property="keyVideoAvailable" column="key_video_available" /> |
| | | <result property="keyAnnotationAccuracy" column="key_annotation_accuracy" /> |
| | |
| | | </resultMap> |
| | | |
| | | <sql id="selectCheckIndexVideoVo"> |
| | | select id, dept_id, create_time, examine_tag, platform_online, monitor_qualification, monitor_registration, archives_rate, site_online, video_available, annotation_accuracy, timing_accuracy, key_site_online, key_video_available, key_annotation_accuracy, key_timing_accuracy, key_command_image_online,image_resource_security from t_check_index_video |
| | | select id, dept_id, create_time, examine_tag, platform_online, monitor_qualification, monitor_registration, archives_rate, site_online, video_available, ministry_site_online, ministry_video_available, key_site_online, key_video_available, key_annotation_accuracy, key_timing_accuracy, key_command_image_online,image_resource_security from t_check_index_video |
| | | </sql> |
| | | |
| | | <select id="selectCheckIndexVideoList" parameterType="CheckIndexVideo" resultMap="CheckIndexVideoResult"> |
| | |
| | | <if test="archivesRate != null "> and archives_rate = #{archivesRate}</if> |
| | | <if test="siteOnline != null "> and site_online = #{siteOnline}</if> |
| | | <if test="videoAvailable != null "> and video_available = #{videoAvailable}</if> |
| | | <if test="annotationAccuracy != null "> and annotation_accuracy = #{annotationAccuracy}</if> |
| | | <if test="timingAccuracy != null "> and timing_accuracy = #{timingAccuracy}</if> |
| | | <if test="ministrySiteOnline != null "> and ministry_site_online = #{ministrySiteOnline}</if> |
| | | <if test="ministryVideoAvailable != null "> and ministry_video_available = #{ministryVideoAvailable}</if> |
| | | <if test="keySiteOnline != null "> and key_site_online = #{keySiteOnline}</if> |
| | | <if test="keyVideoAvailable != null "> and key_video_available = #{keyVideoAvailable}</if> |
| | | <if test="keyAnnotationAccuracy != null "> and key_annotation_accuracy = #{keyAnnotationAccuracy}</if> |
| | |
| | | <if test="archivesRate != null">archives_rate,</if> |
| | | <if test="siteOnline != null">site_online,</if> |
| | | <if test="videoAvailable != null">video_available,</if> |
| | | <if test="annotationAccuracy != null">annotation_accuracy,</if> |
| | | <if test="timingAccuracy != null">timing_accuracy,</if> |
| | | <if test="ministrySiteOnline != null">ministry_site_online,</if> |
| | | <if test="ministryVideoAvailable != null">ministry_video_available,</if> |
| | | <if test="keySiteOnline != null">key_site_online,</if> |
| | | <if test="keyVideoAvailable != null">key_video_available,</if> |
| | | <if test="keyAnnotationAccuracy != null">key_annotation_accuracy,</if> |
| | |
| | | <if test="archivesRate != null">#{archivesRate},</if> |
| | | <if test="siteOnline != null">#{siteOnline},</if> |
| | | <if test="videoAvailable != null">#{videoAvailable},</if> |
| | | <if test="annotationAccuracy != null">#{annotationAccuracy},</if> |
| | | <if test="timingAccuracy != null">#{timingAccuracy},</if> |
| | | <if test="ministrySiteOnline != null">#{ministrySiteOnline},</if> |
| | | <if test="ministryVideoAvailable != null">#{ministryVideoAvailable},</if> |
| | | <if test="keySiteOnline != null">#{keySiteOnline},</if> |
| | | <if test="keyVideoAvailable != null">#{keyVideoAvailable},</if> |
| | | <if test="keyAnnotationAccuracy != null">#{keyAnnotationAccuracy},</if> |
| | |
| | | <if test="archivesRate != null">archives_rate = #{archivesRate},</if> |
| | | <if test="siteOnline != null">site_online = #{siteOnline},</if> |
| | | <if test="videoAvailable != null">video_available = #{videoAvailable},</if> |
| | | <if test="annotationAccuracy != null">annotation_accuracy = #{annotationAccuracy},</if> |
| | | <if test="timingAccuracy != null">timing_accuracy = #{timingAccuracy},</if> |
| | | <if test="ministrySiteOnline != null">ministry_site_online = #{ministrySiteOnline},</if> |
| | | <if test="ministryVideoAvailable != null">ministry_video_available = #{ministryVideoAvailable},</if> |
| | | <if test="keySiteOnline != null">key_site_online = #{keySiteOnline},</if> |
| | | <if test="keyVideoAvailable != null">key_video_available = #{keyVideoAvailable},</if> |
| | | <if test="keyAnnotationAccuracy != null">key_annotation_accuracy = #{keyAnnotationAccuracy},</if> |
| | |
| | | IFNULL(ROUND(AVG(archives_rate * 100), 0), 0) AS archives_rate, |
| | | IFNULL(ROUND(AVG(site_online * 100), 0), 0) AS site_online, |
| | | IFNULL(ROUND(AVG(video_available * 100), 0), 0) AS video_available, |
| | | IFNULL(ROUND(AVG(annotation_accuracy * 100), 0), 0) AS annotation_accuracy, |
| | | IFNULL(ROUND(AVG(timing_accuracy * 100), 0), 0) AS timing_accuracy, |
| | | IFNULL(ROUND(AVG(ministry_site_online * 100), 0), 0) AS ministry_site_online, |
| | | IFNULL(ROUND(AVG(ministry_video_available * 100), 0), 0) AS ministry_video_available, |
| | | IFNULL(ROUND(AVG(key_site_online * 100), 0), 0) AS key_site_online, |
| | | IFNULL(ROUND(AVG(key_video_available * 100), 0), 0) AS key_video_available, |
| | | IFNULL(ROUND(AVG(key_annotation_accuracy * 100), 0), 0) AS key_annotation_accuracy, |
| | |
| | | PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
| | | "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.ycl.platform.mapper.CheckScoreMapper"> |
| | | |
| | | |
| | | <resultMap type="com.ycl.platform.domain.entity.CheckScore" id="CheckScoreResult"> |
| | | <result property="id" column="id" /> |
| | | <result property="score" column="score" /> |
| | |
| | | <if test="deptId != null "> and tcs.dept_id = #{deptId}</if> |
| | | ${params.dataScope} |
| | | </where> |
| | | order by createTime desc; |
| | | </select> |
| | | |
| | | |
| | | <select id="selectCheckScoreById" parameterType="Long" resultMap="CheckScoreResult"> |
| | | <include refid="selectCheckScoreVo"/> |
| | | where id = #{id} |
| | | </select> |
| | | |
| | | |
| | | <insert id="insertCheckScore" useGeneratedKeys="true" keyProperty="id"> |
| | | insert into t_check_score |
| | | <trim prefix="(" suffix=")" suffixOverrides=","> |
| | |
| | | </delete> |
| | | |
| | | <delete id="deleteCheckScoreByIds" parameterType="String"> |
| | | delete from t_check_score where id in |
| | | delete from t_check_score where id in |
| | | <foreach item="id" collection="array" open="(" separator="," close=")"> |
| | | #{id} |
| | | </foreach> |
| | |
| | | ORDER BY score DESC, tcs.dept_id |
| | | </select> |
| | | |
| | | </mapper> |
| | | </mapper> |
| | |
| | | <result column="today_outline_sed" property="todayOutlineSed" /> |
| | | <result column="update_time" property="updateTime" /> |
| | | <result column="create_time" property="createTime" /> |
| | | <result column="area" property="area" /> |
| | | </resultMap> |
| | | |
| | | <select id="getById" resultMap="BaseResultMap"> |
| | |
| | | |
| | | |
| | | <select id="yesterdayData" resultMap="BaseResultMap"> |
| | | select * from t_platform_online |
| | | where create_date between #{startDate} and #{endDate} |
| | | select po.*,p.area from t_platform_online po inner join t_platform p on po.platform_id = p.id |
| | | where po.create_date between #{startDate} and #{endDate} |
| | | </select> |
| | | </mapper> |