fuliqi
2024-12-09 2587568bec69f9b9956851da73d626c39bc720db
ycl-server/src/main/java/com/ycl/task/HKTask.java
@@ -1,10 +1,16 @@
package com.ycl.task;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mongodb.client.result.DeleteResult;
import com.ycl.feign.HkApiUtil;
import com.ycl.platform.domain.entity.TMonitor;
import com.ycl.platform.domain.param.HK.*;
import com.ycl.platform.domain.result.HK.*;
import com.ycl.platform.domain.result.UY.VideoOnlineResult;
import com.ycl.platform.domain.vo.UpdateOnlineVO;
import com.ycl.platform.mapper.TMonitorMapper;
import com.ycl.platform.mapper.WorkOrderMapper;
import com.ycl.platform.service.*;
import com.ycl.utils.DateUtils;
import constant.ApiConstants;
@@ -18,9 +24,9 @@
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
//海康对接数据任务
@Slf4j
@@ -39,7 +45,10 @@
    private IYwThresholdService ywThresholdService;
    @Autowired
    private YwPointService pointService;
    @Autowired
    private TMonitorMapper monitorMapper;
    @Autowired
    private UYErrorTypeCheckService uyErrorTypeCheckService;
    //车辆设备全检指标监测结果
    public void vehicleDeviceInspectionTask() {
        log.info("开始执行车辆设备全检指标监测结果数据同步");
@@ -124,8 +133,6 @@
            //存放在mongo中
            carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_CAR));
            mongoTemplate.insertAll(carList);
            //TODO:更新point表在线状态(有抓拍量视作在线)
            //工单
        }
        /** 人脸数据 */
@@ -151,10 +158,40 @@
            //存放在mongo中
            faceList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE));
            mongoTemplate.insertAll(faceList);
            //TODO:更新point表在线状态(有抓拍量视作在线)
            //工单
        }
        //修改online状态以及生成工单
        List<SnapshotDataMonitorResult> totalResult =new ArrayList<>();
        totalResult.addAll(carList);
        totalResult.addAll(faceList);
        if(!CollectionUtils.isEmpty(totalResult)) {
            List<String> numbers = totalResult.stream().map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList());
            Map<String, TMonitor> map = monitorMapper.selectList(new QueryWrapper<TMonitor>().in("serial_number", numbers))
                    .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
            Date now = new Date();
            //过滤
            totalResult = totalResult.stream().filter(item -> map.get(item.getExternalIndexCode()) != null).collect(Collectors.toList());
            totalResult.forEach(item->{
                TMonitor monitor = map.get(item.getExternalIndexCode());
                item.setIp(monitor.getIp());
            });
            List<UpdateOnlineVO> willUpdateList = totalResult.stream().map(item -> {
                UpdateOnlineVO vo = new UpdateOnlineVO();
                vo.setOnline(item.getDataCount()>0?1:-1);
                vo.setIp(map.get(item.getExternalIndexCode()).getIp());
                vo.setUpdateTime(now);
                return vo;
            }).collect(Collectors.toList());
            monitorMapper.updateOnlineFromUyOrHk(willUpdateList);
            //离线生成工单,一个ip只生成一个工单
            List<SnapshotDataMonitorResult> workOrders = new ArrayList<>(totalResult.stream()
                    .filter(item -> ApiConstants.UY_OnlineSite_Offline.equals(item.getDataCount()>0?1:-1))
                    .collect(Collectors.toMap(
                            SnapshotDataMonitorResult::getIp,
                            Function.identity(),
                            (existing, replacement) -> existing // 如果遇到相同的 IP,保留第一个(existing)
                    )).values());
            uyErrorTypeCheckService.hkOnlineCheck(workOrders);
        }
        log.info("结束抓拍数据量检测结果数据同步");
    }
@@ -430,6 +467,30 @@
        log.info("结束业务树数据");
    }
    //考核成绩
    public void HkScoreTask() {
        log.info("开始执行海康考核成绩数据");
        ScoreParam param = new ScoreParam();
        param.setStartDate("2024-12-06");
        param.setEndDate("2024-12-06");
        List<HKScoreResult> dataList = HkApiUtil.sendGetAPI(host,appKey,appSecret,"/api/third/score/get", param, HKScoreResult.class);
//        if (!CollectionUtils.isEmpty(faceList)) {
//            //如果今天存在之前的数据先删除
//            Query query = new Query(Criteria
//                    .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
//            DeleteResult result = mongoTemplate.remove(query, FaceDeviceSamplingResult.class);
//            faceList.stream().forEach(item -> {
//                if (Objects.nonNull(item.getExternalIndexCode())) {
//                    item.setNo(item.getExternalIndexCode());
//                }
//            });
//            pointService.setDeviceTagByGB(faceList,CheckConstants.Rule_Category_Face);
//            //存放在mongo中
//            mongoTemplate.insertAll(faceList);
//        }
        log.info("结束海康考核成绩数据");
    }
    //解析数据
    private <T> List<T> getDataList(JSONObject jsonObject, Class<T> resultClass, String message) {
        if (jsonObject != null && ApiConstants.HKSuccessCode.equals(jsonObject.getString("code"))) {