| | |
| | | import enumeration.general.WorkOrderStatusEnum; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.dao.DataAccessException; |
| | | import org.springframework.data.mongodb.core.MongoTemplate; |
| | | import org.springframework.data.mongodb.core.query.Criteria; |
| | | import org.springframework.data.mongodb.core.query.Query; |
| | |
| | | * 海康取人脸车辆 |
| | | */ |
| | | public void randomDeductPic() { |
| | | log.info("开始抽查图片完整状态"); |
| | | //这个月随机抽取一天 |
| | | Date date = getRandomDate(); |
| | | SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); |
| | | //准备批量打分的集合 |
| | | List<ContractScore> contractScoreList = new ArrayList<>(); |
| | | //查询报备列表 |
| | | List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate()); |
| | | //查图片完整性规则 获取key为合同id,value为规则的map |
| | | Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream() |
| | | .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_PicComplete.getName().equals(calculateRuleVO.getRuleName())) |
| | | .collect(Collectors.groupingBy(CalculateRuleVO::getContractId)); |
| | | try { |
| | | log.info("开始抽查图片完整状态"); |
| | | //这个月随机抽取一天 |
| | | // Date date = getRandomDate(); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.add(Calendar.MONTH, -1); // 上个月 |
| | | calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置为1号 |
| | | |
| | | //判断车辆、人脸图片是否可用 |
| | | Query query = new Query(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))); |
| | | List<PicAccessResult> picAccessResults = mongoTemplate.find(query, PicAccessResult.class); |
| | | List<String> serialNumbers = picAccessResults.stream().map(PicAccessResult::getExternalIndexCode).collect(Collectors.toList()); |
| | | QueryWrapper<YwPoint> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.in("serial_number", serialNumbers); |
| | | //获取公司所运维的设备集合,key为unitId value为设备国标码集合 |
| | | Map<Long, List<String>> unitMonitorMap = ywPointMapper.selectList(queryWrapper).stream() |
| | | .filter(ywPoint -> ywPoint.getUnitId() != null).collect(Collectors.groupingBy(YwPoint::getUnitId, |
| | | Collectors.mapping( |
| | | YwPoint::getSerialNumber, |
| | | Collectors.toList()))); |
| | | if (!CollectionUtils.isEmpty(contractMap)) { |
| | | contractMap.forEach((contractId, ruleList) -> { |
| | | boolean deduct = false; |
| | | String serialNumber = null; |
| | | //此规则对应的unitId均相等 |
| | | CalculateRuleVO ruleVO = ruleList.get(0); |
| | | Integer unitId = ruleVO.getUnitId(); |
| | | List<String> monitorList = unitMonitorMap.get(Long.parseLong(unitId + "")); |
| | | for (PicAccessResult picAccessResult : picAccessResults) { |
| | | //判断是否报备过 |
| | | if (!CollectionUtils.isEmpty(reportNumbers)) { |
| | | if (reportNumbers.contains(picAccessResult.getExternalIndexCode())) continue; |
| | | } |
| | | //判断是否是该公司运维 |
| | | if (monitorList.contains(picAccessResult.getExternalIndexCode())) { |
| | | //存在图片访问异常数据量,需要扣减 |
| | | if (picAccessResult.getExpCount() > 0) { |
| | | deduct = true; |
| | | serialNumber = picAccessResult.getExternalIndexCode(); |
| | | break; |
| | | int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); |
| | | Random random = new Random(); |
| | | int randomDay = random.nextInt(lastDay) + 1; |
| | | |
| | | calendar.set(Calendar.DAY_OF_MONTH, randomDay); |
| | | Date date = calendar.getTime(); |
| | | SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); |
| | | //准备批量打分的集合 |
| | | List<ContractScore> contractScoreList = new ArrayList<>(); |
| | | //查询报备列表 通过审核并且创建时间在当前日期的报备id列表 |
| | | List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate()); |
| | | //查图片完整性规则 获取key为合同id,value为规则的map |
| | | Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream() |
| | | .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_PicComplete.getName().equals(calculateRuleVO.getRuleName())) |
| | | .collect(Collectors.groupingBy(CalculateRuleVO::getContractId)); |
| | | |
| | | //判断车辆、人脸图片是否可用 |
| | | Query query = new Query(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))); |
| | | List<PicAccessResult> picAccessResults = mongoTemplate.find(query, PicAccessResult.class); |
| | | List<String> serialNumbers = picAccessResults.stream().map(PicAccessResult::getExternalIndexCode).collect(Collectors.toList()); |
| | | QueryWrapper<YwPoint> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.in("serial_number", serialNumbers); |
| | | //获取公司所运维的设备集合,key为unitId value为设备国标码集合 |
| | | Map<Long, List<String>> unitMonitorMap = ywPointMapper.selectList(queryWrapper).stream() |
| | | .filter(ywPoint -> ywPoint.getUnitId() != null).collect(Collectors.groupingBy(YwPoint::getUnitId, |
| | | Collectors.mapping( |
| | | YwPoint::getSerialNumber, |
| | | Collectors.toList()))); |
| | | if (!CollectionUtils.isEmpty(contractMap)) { |
| | | contractMap.forEach((contractId, ruleList) -> { |
| | | boolean deduct = false; |
| | | String serialNumber = null; |
| | | //此规则对应的unitId均相等 |
| | | CalculateRuleVO ruleVO = ruleList.get(0); |
| | | Integer unitId = ruleVO.getUnitId(); |
| | | List<String> monitorList = unitMonitorMap.get(Long.parseLong(unitId + "")); |
| | | for (PicAccessResult picAccessResult : picAccessResults) { |
| | | //判断是否报备过 |
| | | if (!CollectionUtils.isEmpty(reportNumbers)) { |
| | | if (reportNumbers.contains(picAccessResult.getExternalIndexCode())) continue; |
| | | } |
| | | //判断是否是该公司运维 |
| | | if (monitorList.contains(picAccessResult.getExternalIndexCode())) { |
| | | //存在图片访问异常数据量,需要扣减 |
| | | if (picAccessResult.getExpCount() > 0) { |
| | | deduct = true; |
| | | serialNumber = picAccessResult.getExternalIndexCode(); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (deduct) { |
| | | //需要扣除的分数,此规则只有一条不需要判断范围 |
| | | Double deductScore = ruleVO.getCalcFraction(); |
| | | ContractScore contractScore = getContractScore(ruleVO, deductScore, "1", Remark + "国标码为:" + serialNumber + "时间:" + format.format(date) + "存在大图不可用数据"); |
| | | contractScoreList.add(contractScore); |
| | | } |
| | | }); |
| | | if (deduct) { |
| | | //需要扣除的分数,此规则只有一条不需要判断范围 |
| | | Double deductScore = ruleVO.getCalcFraction(); |
| | | ContractScore contractScore = getContractScore(ruleVO, deductScore, "1", Remark + "国标码为:" + serialNumber + "时间:" + format.format(date) + "存在大图不可用数据"); |
| | | contractScoreList.add(contractScore); |
| | | } |
| | | }); |
| | | } |
| | | contractScoreService.saveBatch(contractScoreList); |
| | | log.info("结束抽查图片完整状态"); |
| | | }catch (NullPointerException e) { |
| | | log.error("空指针异常,抽查图片完整状态失败: {}", e.getMessage(), e); |
| | | } catch (DataAccessException e) { |
| | | log.error("数据库访问异常,抽查图片完整状态失败: {}", e.getMessage(), e); |
| | | } catch (IllegalArgumentException e) { |
| | | log.error("参数不合法异常,抽查图片完整状态失败: {}", e.getMessage(), e); |
| | | } catch (Exception e) { |
| | | log.error("未知异常,抽查图片完整状态失败: ", e); // 注意这里使用逗号而不是+,可以打印完整堆栈 |
| | | // 如果需要可以抛出运行时异常 |
| | | throw new RuntimeException("抽查图片完整状态失败", e); |
| | | } |
| | | contractScoreService.saveBatch(contractScoreList); |
| | | log.info("结束抽查图片完整状态"); |
| | | } |
| | | |
| | | |
| | |
| | | * 优云取录像 |
| | | */ |
| | | public void randomDeductVideo() { |
| | | try{ |
| | | log.info("开始抽查录像完整状态"); |
| | | //这个月随机抽取一天 |
| | | Date date = getRandomDate(); |
| | |
| | | }); |
| | | } |
| | | contractScoreService.saveBatch(contractScoreList); |
| | | }catch (NullPointerException e) { |
| | | log.error("空指针异常,抽查图片完整状态失败: {}", e.getMessage(), e); |
| | | } catch (DataAccessException e) { |
| | | log.error("数据库访问异常,抽查图片完整状态失败: {}", e.getMessage(), e); |
| | | } catch (IllegalArgumentException e) { |
| | | log.error("参数不合法异常,抽查图片完整状态失败: {}", e.getMessage(), e); |
| | | } catch (Exception e) { |
| | | log.error("未知异常,抽查图片完整状态失败: ", e); // 注意这里使用逗号而不是+,可以打印完整堆栈 |
| | | // 如果需要可以抛出运行时异常 |
| | | throw new RuntimeException("抽查图片完整状态失败", e); |
| | | } |
| | | } |
| | | |
| | | private Date getRandomDate() { |