| | |
| | | package com.ycl.task; |
| | | |
| | | |
| | | import com.ycl.platform.mapper.TContractMapper; |
| | | import com.ycl.platform.mapper.TMonitorMapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.mongodb.client.result.DeleteResult; |
| | | import com.ycl.platform.domain.entity.ContractRuleRecord; |
| | | import com.ycl.platform.domain.entity.Report; |
| | | import com.ycl.platform.domain.entity.TMonitor; |
| | | import com.ycl.platform.domain.entity.YwPoint; |
| | | import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; |
| | | import com.ycl.platform.domain.result.UY.VideoOnlineResult; |
| | | import com.ycl.platform.domain.vo.CalculateRuleVO; |
| | | import com.ycl.platform.domain.vo.ContractVO; |
| | | import com.ycl.platform.domain.vo.ReportVO; |
| | | import com.ycl.platform.mapper.*; |
| | | import com.ycl.utils.DateUtils; |
| | | import constant.ApiConstants; |
| | | import constant.RedisConstant; |
| | | import enumeration.ContractRule; |
| | | 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.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import javax.management.monitor.Monitor; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 合同考核定时任务 |
| | |
| | | @Autowired |
| | | private MongoTemplate mongoTemplate; |
| | | @Autowired |
| | | private RedisTemplate redisTemplate; |
| | | @Autowired |
| | | private TMonitorMapper monitorMapper; |
| | | @Autowired |
| | | private TContractMapper contractMapper; |
| | | @Autowired |
| | | private YwPointMapper ywPointMapper; |
| | | @Autowired |
| | | private ReportMapper reportMapper; |
| | | @Autowired |
| | | private ContractRuleRecordMapper recordMapper; |
| | | |
| | | private static final Integer Online = 1; |
| | | private static final Integer Offline = -1; |
| | | private static final String AuditStatus_Pass = "1"; |
| | | |
| | | /** |
| | | * 合同考核 在线率每日任务检测 |
| | | * 查生效的合同关联的公司,获取unitId集合 |
| | | * 根据unitId查询对应点位获取各个公司管理的设备Ids |
| | | * 查询三种设备在线不在线情况,封装为一个map<国标码,在线状态> |
| | | * 计算每日每家公司的在线率存入redis |
| | | * 计算每日每家公司的在线率存入mysql |
| | | * 月底计算平均值,根据在线率和合同标准扣减分数 |
| | | */ |
| | | public void onlineCheck() { |
| | | // contractMapper.selectByRuleName(); |
| | | List<CalculateRuleVO> ruleVos = contractMapper.selectByRuleName(ContractRule.CONTRACT_RULE_Online.getName(), null, new Date()); |
| | | List<Integer> unitIds = ruleVos.stream().map(CalculateRuleVO::getUnitId).collect(Collectors.toList()); |
| | | List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unitId", unitIds)); |
| | | //key是unitId value是设备编码集合 |
| | | Map<Long, List<String>> unitMap = ywPoints.stream() |
| | | .collect(Collectors.groupingBy( |
| | | YwPoint::getUnitId, |
| | | Collectors.mapping( |
| | | YwPoint::getSerialNumber, |
| | | Collectors.toList() |
| | | ) |
| | | )); |
| | | Map<String, Integer> onlineStatusMap = new HashMap<>(); |
| | | //查mongo获取设备在线情况 |
| | | Date date = DateUtils.getDay(2024, 7, 13); |
| | | //车辆、人脸 |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))); |
| | | List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class); |
| | | for (SnapshotDataMonitorResult result : results) { |
| | | if (ApiConstants.HK_SnapCount_ResultType_Null != result.getResultType()) { |
| | | onlineStatusMap.put(result.getExternalIndexCode(), Online); |
| | | } else { |
| | | onlineStatusMap.put(result.getExternalIndexCode(), Offline); |
| | | } |
| | | } |
| | | //视频 |
| | | Query videoQuery = new Query(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))); |
| | | List<VideoOnlineResult> videoOnlineResults = mongoTemplate.find(videoQuery, VideoOnlineResult.class); |
| | | for (VideoOnlineResult videoOnlineResult : videoOnlineResults) { |
| | | onlineStatusMap.put(videoOnlineResult.getDeviceId(), videoOnlineResult.getStatus()); |
| | | } |
| | | //查询报备列表 |
| | | List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate()); |
| | | //计算每个公司的点位在线率 |
| | | List<ContractRuleRecord> ruleRecordList = new ArrayList<>(); |
| | | unitMap.forEach((unitId, serialNumberList) -> { |
| | | int totalSite = 0; |
| | | int onlineSite = 0; |
| | | for (String number : serialNumberList) { |
| | | //报备过不纳入计算 |
| | | if (!CollectionUtils.isEmpty(reportNumbers) && reportNumbers.contains(number)) continue; |
| | | Integer status = onlineStatusMap.get(number); |
| | | totalSite++; |
| | | if (Online.equals(status)) { |
| | | onlineSite++; |
| | | } |
| | | } |
| | | ContractRuleRecord contractRuleRecord = new ContractRuleRecord(); |
| | | contractRuleRecord.setSiteOnline( onlineSite / totalSite); |
| | | contractRuleRecord.setCreateTime(new Date()); |
| | | contractRuleRecord.setUnitId(unitId); |
| | | ruleRecordList.add(contractRuleRecord); |
| | | }); |
| | | //存储结果 |
| | | recordMapper.insertBatch(ruleRecordList); |
| | | } |
| | | |
| | | } |