fuliqi
2024-09-30 628b80d0452602c5c02cec9ddbbee266f89d60c8
Merge remote-tracking branch 'origin/master'
3个文件已修改
3个文件已添加
211 ■■■■■ 已修改文件
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckResult.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckUtil.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/CheckUtilController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/utils/http/HttpUtils.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckResult.java
New file
@@ -0,0 +1,26 @@
package com.ycl.platform.domain.vo;
import lombok.Data;
/**
 * 监测工具响应结果
 *
 * @author:xp
 * @date:2024/9/30 14:09
 */
@Data
public class CheckResult {
    /**
     * 在线状态
     *
     */
    private String status;
    /**
     * 拉流取图片
     *
     */
    private String img;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckUtil.java
New file
@@ -0,0 +1,22 @@
package com.ycl.platform.domain.vo;
import lombok.Data;
/**
 * @author:xp
 * @date:2024/9/30 14:03
 */
@Data
public class CheckUtil {
    private String ip;
    private String serialNumber;
    /**
     * 1: 在线监测  2: ping
     *
     */
    private String type;
}
ycl-server/src/main/java/com/ycl/platform/controller/CheckUtilController.java
New file
@@ -0,0 +1,41 @@
package com.ycl.platform.controller;
import com.ycl.platform.domain.query.CheckTemplateQuery;
import com.ycl.platform.domain.vo.CheckUtil;
import com.ycl.platform.service.ICheckTemplateService;
import com.ycl.system.Result;
import com.ycl.system.page.TableDataInfo;
import com.ycl.utils.CheckPointUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * 检测工具
 *
 * @author:xp
 * @date:2024/9/30 13:55
 */
@RestController
@RequestMapping("/system/util")
public class CheckUtilController {
    @Autowired
    private CheckPointUtil checkPointUtil;
    @GetMapping("/online")
    public Result online(CheckUtil query) {
        if ("1".equals(query.getType())) {
            return Result.ok().data(checkPointUtil.webCheck(query));
        } else if ("2".equals(query.getType())) {
            return Result.ok().data(checkPointUtil.ping(query));
        }
        return Result.ok();
    }
}
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -819,7 +819,7 @@
        String imgUrl = null;
        if (wvpResult.getCode() == 0) {
            JSONObject data = (JSONObject) wvpResult.getData();
            String rtspUrl = data.getString("fmp4"); // 取mp4地址
            String rtspUrl = data.getString("rtsp"); // 取mp4地址
            if (StringUtils.hasText(rtspUrl)) {
                System.out.println("目标地址:" + rtspUrl);
                FFmpegFrameGrabber grabber = null;
ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java
@@ -1,7 +1,16 @@
package com.ycl.utils;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.ycl.platform.domain.entity.DeviceInfo;
import com.ycl.platform.domain.entity.TMonitor;
import com.ycl.platform.domain.result.SYS.TMonitorResult;
import com.ycl.platform.domain.vo.CheckResult;
import com.ycl.platform.domain.vo.CheckUtil;
import com.ycl.platform.mapper.DeviceInfoMapper;
import com.ycl.platform.mapper.TMonitorMapper;
import com.ycl.platform.service.WorkOrderService;
import com.ycl.utils.http.SelfHttpUtil;
import com.ycl.utils.uuid.IdUtils;
import constant.RedisConstant;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -15,9 +24,8 @@
import java.io.IOException;
import java.net.InetAddress;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.net.UnknownHostException;
import java.util.*;
/**
 * @author xp
@@ -29,8 +37,10 @@
public class CheckPointUtil {
    private final RedisTemplate redisTemplate;
    private final SelfHttpUtil selfHttpUtil;
    private final DeviceInfoMapper deviceInfoMapper;
    private final WorkOrderService workOrderService;
    private final TMonitorMapper monitorMapper;
    /**
     * 监测点位在线工具类
@@ -80,4 +90,105 @@
        monitor.setOffLineCount(offLineTimes);
        return monitor;
    }
    /**
     * 监测点位在线
     * @return
     */
    public CheckResult webCheck(CheckUtil checkUtil) {
        CheckResult result = new CheckResult();
        List<TMonitor> ips = new LambdaQueryChainWrapper<>(monitorMapper)
                .eq(TMonitor::getSerialNumber, checkUtil.getSerialNumber())
                .list();
        if (ips.size() < 1) {
            result.setStatus("国标码未查找到IP");
            return result;
        }
        checkUtil.setIp(ips.get(0).getIp());
        log.info("监测IP:" + checkUtil.getIp());
        String prefix = "http://";
        if ("127.0.0.1".equals(checkUtil.getIp())) {
            result.setStatus("ip异常");
            return result;
        }
        boolean webReachable = false;
        try {
            ResponseEntity<Object> res = selfHttpUtil.get(prefix + checkUtil.getIp(), null, null);
            webReachable = Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode();
        } catch (Exception e) {
            webReachable = Boolean.FALSE;
        }
        // ping
        boolean pingReachable = false;
        try {
            InetAddress inet = InetAddress.getByName(checkUtil.getIp());
            pingReachable = inet.isReachable(5000); // 5000毫秒超时时间
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String imgUrl = "";
        // 查出国标设备,就一条数据
        List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
                .orderByDesc(DeviceInfo::getUpdateTime)
                .last("limit 1")
                .list();
        if (! CollectionUtils.isEmpty(gbDevices)) {
            try {
                imgUrl = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), checkUtil.getSerialNumber(), IdUtils.workOrderNO(new Date(), "99999"));
                result.setImg(imgUrl);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        String status = "";
        if (! webReachable) {
            status += "设备web访问失败;";
        }
        if (! pingReachable) {
            status += "设备ip未ping通;";
        }
        if (StringUtils.isEmpty(imgUrl)) {
            status += "未获取到图片";
        }
        result.setStatus(status);
        return result;
    }
    /**
     * ping
     *
     * @return
     */
    public CheckResult ping(CheckUtil checkUtil) {
        CheckResult result = new CheckResult();
        log.info("监测IP:" + checkUtil.getIp());
        String prefix = "http://";
        if ("127.0.0.1".equals(checkUtil.getIp())) {
            result.setStatus("ip异常");
            return result;
        }
        // ping
        boolean pingReachable = false;
        try {
            InetAddress inet = InetAddress.getByName(checkUtil.getIp());
            pingReachable = inet.isReachable(5000); // 5000毫秒超时时间
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String status = "";
        if (! pingReachable) {
            status += "ip未ping通;";
        }
        result.setStatus(status);
        return result;
    }
}
ycl-server/src/main/java/com/ycl/utils/http/HttpUtils.java
@@ -64,6 +64,7 @@
            log.info("sendGet - {}", urlNameString);
            URL realUrl = new URL(urlNameString);
            URLConnection connection = realUrl.openConnection();
            connection.setConnectTimeout(10000);
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");