| | |
| | | |
| | | 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.platform.domain.entity.*; |
| | | import com.ycl.platform.domain.entity.ContractRuleRecord; |
| | | import com.ycl.platform.domain.entity.ContractScore; |
| | | import com.ycl.platform.domain.entity.WorkOrder; |
| | | import com.ycl.platform.domain.entity.YwPoint; |
| | | import com.ycl.platform.domain.result.HK.PicAccessResult; |
| | | import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; |
| | | import com.ycl.platform.domain.result.SYS.TMonitorResult; |
| | | import com.ycl.platform.domain.result.UY.RecordMetaDSumResult; |
| | | 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.domain.vo.WorkOrderVO; |
| | | import com.ycl.platform.mapper.*; |
| | | import com.ycl.platform.service.IContractScoreService; |
| | | import com.ycl.system.mapper.SysConfigMapper; |
| | | import com.ycl.utils.DateUtils; |
| | | import com.ycl.utils.StringUtils; |
| | | import constant.ApiConstants; |
| | | import constant.RedisConstant; |
| | | import enumeration.ContractRule; |
| | | import enumeration.ErrorType; |
| | | import enumeration.general.AuditingStatus; |
| | | import enumeration.general.ErrorTypeEnum; |
| | | import enumeration.general.RuleDeductCategoryEnum; |
| | | import enumeration.general.WorkOrderStatusEnum; |
| | | 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.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | |
| | | private IContractScoreService contractScoreService; |
| | | @Autowired |
| | | private WorkOrderMapper workOrderMapper; |
| | | |
| | | @Autowired |
| | | private SysConfigMapper sysConfigMapper; |
| | | private static final Integer Online = 1; |
| | | private static final Integer Offline = -1; |
| | | private static final String AuditStatus_Pass = "1"; |
| | | private static final String Remark = "系统生成"; |
| | | private static final Integer randomSize = 50; |
| | | private static final Integer randomSize = 30; |
| | | |
| | | /** |
| | | * 合同考核 在线率每日任务检测 |
| | |
| | | ) |
| | | )); |
| | | Map<String, Integer> onlineStatusMap = new HashMap<>(); |
| | | //查mongo获取设备在线情况 |
| | | Date date = DateUtils.getDay(2024, 7, 13); |
| | | Date date = new Date(); |
| | | //车辆、人脸 |
| | | 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); |
| | | List<TMonitorResult> tMonitorResults = mongoTemplate.find(query, TMonitorResult.class); |
| | | for (TMonitorResult result : tMonitorResults) { |
| | | if(result.getOnline()){ |
| | | onlineStatusMap.put(result.getNo(), Online); |
| | | }else { |
| | | onlineStatusMap.put(result.getNo(), 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()); |
| | | //计算每个公司的点位在线率 |
| | |
| | | |
| | | //月底计算在线率分数 |
| | | public void calculateOnlineScore() { |
| | | //TODO:检查表 |
| | | log.info("开始计算合同点位在线率分数"); |
| | | //如果是月底,需要统计平均在线率然后进行积分扣除 |
| | | // String now = DateUtils.getDate(); |
| | |
| | | for (WorkOrderVO workOrder : workOrders) { |
| | | //检测是否报备过 |
| | | if (!CollectionUtils.isEmpty(reportNumbers)) { |
| | | if(reportNumbers.contains(workOrder.getSerialNumber())) continue; |
| | | if (reportNumbers.contains(workOrder.getSerialNumber())) continue; |
| | | } |
| | | String errorType = workOrder.getErrorType(); |
| | | //存储故障 录像或图片访问异常 |
| | |
| | | */ |
| | | public void randomDeductPic() { |
| | | Random random = new Random(); |
| | | Integer num = randomSize; |
| | | //给定随机范围 |
| | | int number = random.nextInt(randomSize); |
| | | String count = sysConfigMapper.checkConfigKeyUnique("check.contract.sample").getConfigValue(); |
| | | if (!StringUtils.isEmpty(count)) { |
| | | Integer temp = Integer.valueOf(count); |
| | | if (temp > 0) { |
| | | num = temp; |
| | | } |
| | | } |
| | | int number = random.nextInt(num); |
| | | if (number == 0) { |
| | | log.info("开始抽查图片完整状态"); |
| | | //准备批量打分的集合 |
| | |
| | | queryWrapper.in("serial_number", serialNumbers); |
| | | //获取公司所运维的设备集合,key为unitId value为设备国标码集合 |
| | | Map<Long, List<String>> unitMonitorMap = ywPointMapper.selectList(queryWrapper).stream() |
| | | .collect(Collectors.groupingBy(YwPoint::getUnitId, |
| | | .filter(ywPoint -> ywPoint.getUnitId() != null).collect(Collectors.groupingBy(YwPoint::getUnitId, |
| | | Collectors.mapping( |
| | | YwPoint::getSerialNumber, |
| | | Collectors.toList()))); |
| | |
| | | for (PicAccessResult picAccessResult : picAccessResults) { |
| | | //判断是否报备过 |
| | | if (!CollectionUtils.isEmpty(reportNumbers)) { |
| | | if(reportNumbers.contains(picAccessResult.getExternalIndexCode())) continue; |
| | | if (reportNumbers.contains(picAccessResult.getExternalIndexCode())) continue; |
| | | } |
| | | //判断是否是该公司运维 |
| | | if (monitorList.contains(picAccessResult.getExternalIndexCode())) { |
| | |
| | | public void randomDeductVideo() { |
| | | Random random = new Random(); |
| | | //给定随机范围 |
| | | int number = random.nextInt(randomSize); |
| | | Integer num = randomSize; |
| | | //给定随机范围 |
| | | String count = sysConfigMapper.checkConfigKeyUnique("check.contract.sample").getConfigValue(); |
| | | if (!StringUtils.isEmpty(count)) { |
| | | Integer temp = Integer.valueOf(count); |
| | | if (temp > 0) { |
| | | num = temp; |
| | | } |
| | | } |
| | | int number = random.nextInt(num); |
| | | if (number == 0) { |
| | | log.info("开始抽查录像完整状态"); |
| | | //准备批量打分的集合 |
| | |
| | | queryWrapper.in("serial_number", serialNumbers); |
| | | //获取公司所运维的设备集合,key为unitId value为设备国标码集合 |
| | | Map<Long, List<String>> unitMonitorMap = ywPointMapper.selectList(queryWrapper).stream() |
| | | .collect(Collectors.groupingBy(YwPoint::getUnitId, |
| | | .filter(ywPoint -> ywPoint.getUnitId() != null).collect(Collectors.groupingBy(YwPoint::getUnitId, |
| | | Collectors.mapping( |
| | | YwPoint::getSerialNumber, |
| | | Collectors.toList()))); |
| | |
| | | for (RecordMetaDSumResult result : recordMetaDSumResults) { |
| | | //判断是否报备过 |
| | | if (!CollectionUtils.isEmpty(reportNumbers)) { |
| | | if(reportNumbers.contains(result.getDeviceId())) continue; |
| | | if (reportNumbers.contains(result.getDeviceId())) continue; |
| | | } |
| | | //判断是否是该公司运维 |
| | | if (monitorList.contains(result.getDeviceId())) { |
| | |
| | | for (CalculateRuleVO calculateRuleVO : ruleList) { |
| | | Double max = calculateRuleVO.getMax(); |
| | | Double min = calculateRuleVO.getMin(); |
| | | //判断范围在哪个区间 |
| | | 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 { |
| | |
| | | } |
| | | } |
| | | for (CalculateRuleVO calculateRuleVO : ruleList) { |
| | | if (calculateRuleVO.getNum() > 0) { |
| | | if (calculateRuleVO.getNum() != null && calculateRuleVO.getNum() > 0) { |
| | | //需要扣除的分数,此规则只有一条不需要判断范围 |
| | | double deductScore = calculateRuleVO.getCalcFraction() * calculateRuleVO.getNum(); |
| | | ContractScore contractScore = getContractScore(calculateRuleVO, deductScore, calculateRuleVO.getNum() + "", Remark + calculateRuleVO.getNum() + "路设备违反规则"); |