fuliqi
2025-01-15 36a00aa8bee92f62470fc1031c8c07f3de35910d
ycl-server/src/main/java/com/ycl/task/ContractTask.java
@@ -80,7 +80,7 @@
                .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_Online.getName().equals(calculateRuleVO.getRuleName()))
                .collect(Collectors.toList());
        List<Integer> unitIds = ruleVos.stream().map(CalculateRuleVO::getUnitId).collect(Collectors.toList());
        List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unit_id", unitIds));
        List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unit_id", unitIds).eq("examine_status",1));
        //key是unitId value是设备编码集合
        Map<Long, List<YwPoint>> unitMap = ywPoints.stream().filter(point -> point.getUnitId() != null)
                .collect(Collectors.groupingBy(
@@ -99,7 +99,7 @@
                if (!CollectionUtils.isEmpty(reportNumbers) && reportNumbers.contains(point.getSerialNumber()))
                    continue;
                totalSite++;
                if (ApiConstants.UY_OnlineSite_Online.equals(point.getOnline())) {
                if (ApiConstants.UY_OnlineSite_Online.equals(point.getOnline()) && ApiConstants.UY_OnlineSite_Online.equals(point.getPingOnline())) {
                    onlineSite++;
                }
            }
@@ -120,7 +120,6 @@
    //月底计算在线率分数
    public void calculateOnlineScore() {
        //TODO:检查表
        log.info("开始计算合同点位在线率分数");
        //月底需要统计平均在线率然后进行积分扣除
        String mouthStart = DateUtils.getMouthStart(new Date());
@@ -179,7 +178,7 @@
                .collect(Collectors.groupingBy(
                        CalculateRuleVO::getRuleName,  // 按规则名称分组
                        Collectors.groupingBy(
                                CalculateRuleVO::getContractId // 每个规则名称内部再按合同ID分组,value为规则集合
                                CalculateRuleVO::getContractId // 每个规则名称内部再按合同ID分组,value为规则集合(多个合同情况)
                        )
                ));
        //前端感知源治理工作(时钟同步规则、OSD规则、一机一档规则) 获取key为合同id,value为规则的map
@@ -201,6 +200,7 @@
            if (!CollectionUtils.isEmpty(reportNumbers)) {
                if (reportNumbers.contains(workOrder.getSerialNumber())) continue;
            }
//            if(!WorkOrderStatusEnum.AUDITING_SUCCESS.equals(workOrder.getStatus())) continue;
            String errorType = workOrder.getErrorType();
            //存储故障 录像或图片访问异常 (改成手动打分了)
//            if (ErrorType.VIDEO_NONE.getValue().equals(errorType) || ErrorType.PIC_URLABNORMAL.getValue().equals(errorType)) {
@@ -227,7 +227,7 @@
//                }
//            }
            //前端感知源治理工作(时钟同步规则、OSD规则、一机一档规则)
            if (ErrorType.OSD_ERROR.getValue().equals(errorType) || ErrorType.CLOCK_SKEW.getValue().equals(errorType) || ErrorType.CLOCK_RIGHT.getValue().equals(errorType)) {
            if (ErrorType.OSD_ERROR.getValue().equals(errorType) || ErrorType.CLOCK_SKEW.getValue().equals(errorType) || ErrorType.CLOCK_RIGHT.getValue().equals(errorType) || ErrorType.POINT_INFO_ERROR.getValue().equals(errorType)) {
                if (!CollectionUtils.isEmpty(monitorRuleMap)) {
                    monitorRuleMap.forEach((contractId, rules) -> {
                        Integer unitId = rules.get(0).getUnitId();
@@ -237,8 +237,16 @@
                            Date createTime = workOrder.getDistributeTime();
                            Date auditTime = workOrder.getAuditTime();
                            double diffTime = (double) (auditTime.getTime() - createTime.getTime()) / (1000 * 60 * 60);
                            //选择时间范围内的规则
                            //找到对应规则、选择时间范围内的规则
                            for (CalculateRuleVO rule : rules) {
                                if(ErrorType.OSD_ERROR.getValue().equals(errorType)){
                                    if(!rule.getRuleCondition().equals("OSD标识")) continue;
                                }else if(ErrorType.CLOCK_SKEW.getValue().equals(errorType)){
                                    if(!rule.getRuleCondition().equals("时钟同步")) continue;
                                }else if( ErrorType.POINT_INFO_ERROR.getValue().equals(errorType)){
                                    if(!rule.getRuleCondition().equals("一机一档")) continue;
                                }
                                if (checkRange(rule.getMin(), rule.getMax(), new BigDecimal(diffTime))) {
                                    double deductScore = rule.getCalcFraction();
                                    ContractScore contractScore = getContractScore(rule, deductScore, Math.round(diffTime * 100) / 100 + "", Remark + "工单编号为:" + workOrder.getWorkOrderNo() + "处理超时,扣除" + deductScore + "分");
@@ -251,7 +259,7 @@
                }
            }
            //点位异常情况处理(镜头异常、摄像头遮挡等)
            if (ErrorType.SCREEN_OCCLUSION.getValue().equals(errorType)) {
            if (ErrorType.ABNORMAL_PIC.getValue().equals(errorType)) {
                if (!CollectionUtils.isEmpty(monitorRuleMap)) {
                    siteRuleMap.forEach((contractId, rules) -> {
                        Integer unitId = rules.get(0).getUnitId();
@@ -318,7 +326,7 @@
            List<ContractScore> contractScoreList = new ArrayList<>();
            //查询报备列表
            List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate());
            Date date = DateUtils.getDay(2024, 7, 13);
            Date date = new Date();
            //查图片完整性规则 获取key为合同id,value为规则的map
            Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream()
                    .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_PicComplete.getName().equals(calculateRuleVO.getRuleName()))
@@ -398,8 +406,7 @@
            List<ContractScore> contractScoreList = new ArrayList<>();
            //查询报备列表
            List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate());
            //TODO:测试日期
            Date date = DateUtils.getDay(2024, 7, 13);
            Date date = new Date();
            //查图片完整性规则 获取key为合同id,value为规则的map
            Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream()
                    .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_VideoRecord.getName().equals(calculateRuleVO.getRuleName()))