fuliqi
2025-01-20 9490c47566a0f253f35a1019fd1b1e1473630d67
ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
@@ -72,6 +72,7 @@
    @Autowired
    private WorkOrderWhiteMapper workOrderWhiteMapper;
    /**
     * 查询运维阈值
     *
@@ -149,7 +150,6 @@
     */
    @Override
    public void videoCheck(List list) {
    }
    @Override
@@ -198,34 +198,46 @@
            }
            WorkOrder workOrder = new WorkOrder();
            //检查时钟准确率
            if (result.getSnapClock() != null) {
            Float clockPercent = result.getSnapClock().getClockPercent();
            check(YwThreadConstants.Face_ClockPercent, clockPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.CLOCK_RIGHT.getValue());
            }
            //检查数据及时率
            if (result.getSnapTimely() != null) {
            Float timelyPercent = result.getSnapTimely().getTimelyPercent();
            check(YwThreadConstants.Face_TimelyPercent, timelyPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.DATA_TIMELY_ERROR.getValue());
            }
            //检查持续无数据天数
            if (result.getContinueNoDataCount() != null) {
            Integer continueNoDataCount = result.getContinueNoDataCount();
            check(YwThreadConstants.Face_ContinueNoDataCount, continueNoDataCount, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.LONG_DAY_NO_DATA.getValue());
            }
            //检查不唯一数据量
            if (result.getSnapUnique() != null) {
            Integer nouniqueCount = result.getSnapUnique().getNouniqueCount();
            check(YwThreadConstants.Face_NouniqueCount, nouniqueCount, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.NOT_UNIQUE_DATA_VOLUME.getValue());
            }
            //检查人脸低评分率
            if (result.getSnapValidity() != null) {
            Float lowScorePercent = result.getSnapValidity().getLowScorePercent();
            check(YwThreadConstants.Face_LowScorePercent, lowScorePercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.FACE_LOW.getValue());
            }
            //检查建模失败率
            if (result.getSnapValidity() != null) {
            Float failPercent = result.getSnapValidity().getFailPercent();
            check(YwThreadConstants.Face_FailPercent, failPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.MODELING_FAIL.getValue());
            }
            // 点位在线率
            if (2 == result.getSnapResult()) {
                workOrder.setSerialNumber(result.getExternalIndexCode());
                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
                if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) {
                    workOrder.setErrorTypeList(new ArrayList<>());
                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
                } else {
                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
                }
            }
//            if (2 == result.getSnapResult()) {
//                workOrder.setSerialNumber(result.getExternalIndexCode());
//                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
//                if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) {
//                    workOrder.setErrorTypeList(new ArrayList<>());
//                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
//                } else {
//                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
//                }
//            }
            if (WorkOrderStatusEnum.WAIT_DISTRIBUTE.equals(workOrder.getStatus())) {
                workOrderList.add(workOrder);
            } else if (WorkOrderStatusEnum.DISTRIBUTED.equals(workOrder.getStatus())) {
@@ -260,33 +272,43 @@
            Integer continueNoDataCount = result.getContinueNoDataCount();
            check(YwThreadConstants.Car_ContinueNoDataCount, continueNoDataCount, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.LONG_DAY_NO_DATA.getValue());
            //检查时钟准确率
            if (result.getSnapClock() != null) {
            Float clockPercent = result.getSnapClock().getClockPercent();
            check(YwThreadConstants.Car_ClockPercent, clockPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.CLOCK_RIGHT.getValue());
            }
            //检查数据及时率
            if (result.getSnapTimely() != null) {
            Float timelyPercentResult = result.getSnapTimely().getTimelyPercent();
            check(YwThreadConstants.Car_TimelyPercent, timelyPercentResult, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.DATA_TIMELY_ERROR.getValue());
            }
            //检查不唯一数据量
            if (result.getSnapUnique() != null) {
            Integer nouniqueCountResult = result.getSnapUnique().getNouniqueCount();
            check(YwThreadConstants.Car_NouniqueCount, nouniqueCountResult, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.NOT_UNIQUE_DATA_VOLUME.getValue());
            }
            //检查白天未识别量
            if (result.getSnapPlate() != null) {
            Integer dayNoNumberCountResult = result.getSnapPlate().getDayNoNumberCount();
            check(YwThreadConstants.Car_DayNoNumberCount, dayNoNumberCountResult, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.UNRECOGNIZED_DAY_VOLUME.getValue());
            }
            //车辆主要属性一致率
            if (result.getIntegrity() != null) {
            Integer noIntegrityCountResult = result.getIntegrity().getMainNoIntegrityCount();
            Integer dataCount = result.getDataCount();
            Double integrityRate = ((double)dataCount-noIntegrityCountResult)/dataCount;
            check(YwThreadConstants.Car_NoIntegrityCount, integrityRate, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.CAR_SIX.getValue());
            }
            // 点位在线率
            if (2 == result.getSnapResult()) {
                workOrder.setSerialNumber(result.getExternalIndexCode());
                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
                if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) {
                    workOrder.setErrorTypeList(new ArrayList<>());
                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
                } else {
                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
                }
            }
//            if (2 == result.getSnapResult()) {
//                workOrder.setSerialNumber(result.getExternalIndexCode());
//                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
//                if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) {
//                    workOrder.setErrorTypeList(new ArrayList<>());
//                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
//                } else {
//                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
//                }
//            }
            if (WorkOrderStatusEnum.WAIT_DISTRIBUTE.equals(workOrder.getStatus())) {
                workOrderList.add(workOrder);
            } else if (WorkOrderStatusEnum.DISTRIBUTED.equals(workOrder.getStatus())) {
@@ -305,7 +327,8 @@
     * @param name
     * @return
     */
    private Map<String, YwThreshold> getYwThresholdMap(String name) {
    @Override
    public Map<String, YwThreshold> getYwThresholdMap(String name) {
        return ywThresholdMapper.selectList(
                new QueryWrapper<YwThreshold>().eq("monitor_type", name)
        ).stream().collect(Collectors.toMap(
@@ -316,6 +339,7 @@
    /**
     * 白名单详情
     *
     * @param id
     * @return
     */
@@ -326,6 +350,7 @@
        workOrderWhite.setErrorTypeList(errorTypeList);
        return Result.ok().data(workOrderWhite);
    }
    /**
     * 工单白名单列表
     *
@@ -371,6 +396,7 @@
            return Result.ok();
        }
    }
    /**
     * 修改工单白名单
     *
@@ -399,8 +425,10 @@
        workOrderWhiteMapper.batchDelete(ids);
        return Result.ok();
    }
    /**
     * 白名单导出
     *
     * @param response
     * @throws IOException
     */
@@ -451,6 +479,7 @@
    /**
     * 导入工单白名单
     *
     * @param file
     * @return
     */
@@ -477,8 +506,10 @@
                // 将读取到的每一行存入reportDetails集合中
                dataList.add(excel);
            }
            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
            }
        }).sheet().doRead();
        if (CollectionUtils.isEmpty(dataList)) {
@@ -486,8 +517,6 @@
        }
        boolean duplic = checkDuplic(dataList);
        if(duplic) throw new RuntimeException("存在重复国标设备");
        //已存在的白名单
        Map<String, WorkOrderWhite> whiteMap = workOrderWhiteMapper.selectList().stream().collect(Collectors.toMap(WorkOrderWhite::getSerialNumber, Function.identity()));
        List<WorkOrderWhite> addList = new ArrayList<>();
        dataList.stream().forEach(item -> {
            WorkOrderWhite white = new WorkOrderWhite();
@@ -506,13 +535,11 @@
                    //把中文转换为数据库存储格式
                    String errorText = ErrorType.getValueByDescription(desc);
                    //找不到抛出异常
                    if(errorText == null) throw new RuntimeException("国标码为"+item.getSerialNumber()+"的设备故障类型有误");
                    if (errorText == null)
                        throw new RuntimeException("国标码为" + item.getSerialNumber() + "的设备故障类型有误");
                    errorDataList.add(errorText);
                });
                white.setErrorType(String.join(",", errorDataList));
                //如果已存在补充id
                WorkOrderWhite whiteExsit = whiteMap.get(white.getSerialNumber());
                if(whiteExsit!=null) white.setId(whiteExsit.getId());
                addList.add(white);
            } catch (Exception e) {
                throw new RuntimeException("国标码为"+item.getSerialNumber()+"的设备故障类型有误");
@@ -524,6 +551,7 @@
        }
        return Result.ok();
    }
    /**
     * 修改白名单
     *
@@ -555,7 +583,8 @@
                    //把中文转换为数据库存储格式
                    String errorText = ErrorType.getValueByDescription(desc);
                    //找不到抛出异常
                    if(errorText == null) throw new RuntimeException("国标码为"+item.getSerialNumber()+"的设备故障类型有误");
                    if (errorText == null)
                        throw new RuntimeException("国标码为" + item.getSerialNumber() + "的设备故障类型有误");
                    errorDataList.add(errorText);
                });
                white.setErrorType(String.join(",", errorDataList));
@@ -583,7 +612,10 @@
     * @param errorType 故障类型
     * @param <T>
     */
    private <T extends Comparable<T>> void check(String key, T value, String serialNumber, Map<String, YwThreshold> thresholds, WorkOrder workOrder, CompareType compareType,String errorType) {
    @Override
    public <T extends Comparable<T>> void check(String key, T value, String
            serialNumber, Map<String, YwThreshold> thresholds, WorkOrder workOrder, CompareType compareType, String
                                                        errorType) {
        Optional.ofNullable(value).ifPresentOrElse(
                v -> {
                    YwThreshold ywThreshold = thresholds.get(key);
@@ -627,6 +659,34 @@
        );
    }
    /**
     * 所有白名单添加故障类型
     *
     * @param workOrderWhite
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result addBatch(WorkOrderWhite workOrderWhite) {
        List<String> errorTypeListAdd = workOrderWhite.getErrorTypeList();
        List<WorkOrderWhite> whites = workOrderWhiteMapper.selectList();
        for (WorkOrderWhite white : whites) {
            List<String> errorTypeList = new ArrayList<>(Arrays.asList(white.getErrorType().split(",")));
            for (String newError : errorTypeListAdd) {
                if (errorTypeList.contains(newError)) {
                    continue;
                } else {
                    errorTypeList.add(newError);
                }
            }
            white.setErrorType(String.join(",", errorTypeList));
        }
        if (!CollectionUtils.isEmpty(whites)) {
            workOrderWhiteMapper.deleteAll();
            workOrderWhiteMapper.insertBatch(whites);
        }
        return Result.ok();
    }
    private <T extends Comparable<T>> T parseThreshold(String thresholdStr, Class<?> type) {
        if (Integer.class.equals(type)) {
            return (T) Integer.valueOf(thresholdStr);