xiangpei
2024-09-06 5c978147b913754adbf913acdb6e4dcf995f0609
新的点位在线率查询方式
8个文件已修改
3个文件已添加
284 ■■■■■ 已修改文件
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/config/RestTemplateConfig.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/OsdTask.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/PlatformTask.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/UYTask.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/utils/http/SelfHttpUtil.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java
@@ -71,6 +71,10 @@
    @TableField("dept_tag")
    private Boolean deptTag;
    @ApiModelProperty("是否在线:true 在线")
    @TableField("online")
    private Boolean online;
    @TableField("serial_number")
    private String serialNumber;
@@ -83,6 +87,5 @@
    @TableField("recovery_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date recoveryTime;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java
New file
@@ -0,0 +1,21 @@
package com.ycl.platform.domain.vo;
import lombok.Data;
import java.util.Date;
/**
 * @author:xp
 * @date:2024/9/6 14:48
 */
@Data
public class UpdateOnlineVO {
    /** ip */
    private String ip;
    /** 是否在线 */
    private Boolean online;
    private Date updateTime;
}
ycl-server/src/main/java/com/ycl/config/RestTemplateConfig.java
New file
@@ -0,0 +1,19 @@
package com.ycl.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
 * @author xp
 * @date 2022/11/16
 */
@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
@@ -7,6 +7,7 @@
import com.ycl.platform.domain.query.DataCenterQuery;
import com.ycl.platform.domain.query.HomeQuery;
import com.ycl.platform.domain.vo.TMonitorVO;
import com.ycl.platform.domain.vo.UpdateOnlineVO;
import com.ycl.platform.domain.vo.screen.MonitorRateVO;
import com.ycl.platform.domain.vo.screen.MonitorTotalVO;
import org.apache.ibatis.annotations.Mapper;
@@ -148,4 +149,17 @@
     * @return
     */
    List<String> getGBbyGB(@Param("gbList") List<String> gbList);
    /**
     * 查出设备ip集合
     *
     * @return
     */
    List<String> getDistinctIP();
    /**
     * 根据ip修改点位表的是否在线字段
     * @param online
     */
    void updateOnline(@Param("online") UpdateOnlineVO online);
}
ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
@@ -57,13 +57,6 @@
    private final SysDeptMapper sysDeptMapper;
    private final TMonitorMapper monitorMapper;
    private static final ExecutorService executorService = new ThreadPoolExecutor(8,
            24,
            5000,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(10),
            new ThreadPoolExecutor.CallerRunsPolicy()
    );
    /**
     * 添加
ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -73,8 +73,8 @@
        //需要考核的数据
        List<String> serialNumbers = oneMachineFileResults.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList());
        if(!CollectionUtils.isEmpty(serialNumbers)) {
            ExecutorService executorService = new ThreadPoolExecutor(8,
                    24,
            ExecutorService executorService = new ThreadPoolExecutor(16,
                    128,
                    5000,
                    TimeUnit.SECONDS,
                    new ArrayBlockingQueue<>(1000),
ycl-server/src/main/java/com/ycl/task/PlatformTask.java
@@ -44,11 +44,11 @@
    private static final String DICT_TYPE = "platform_online";
    private static final ExecutorService executorService = new ThreadPoolExecutor(8,
            24,
    private static final ExecutorService executorService = new ThreadPoolExecutor(16,
            128,
            5000,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(10),
            new ArrayBlockingQueue<>(1000),
            new ThreadPoolExecutor.CallerRunsPolicy()
    );
@@ -81,7 +81,6 @@
                    log.error("检查平台连通性时发生错误", e);
                }
            });
            executorService.shutdown();
        }
    }
ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -3,12 +3,17 @@
import com.alibaba.fastjson2.JSONObject;
import com.mongodb.client.result.DeleteResult;
import com.ycl.feign.UYClient;
import com.ycl.platform.domain.entity.YwPoint;
import com.ycl.platform.domain.param.UY.*;
import com.ycl.platform.domain.result.UY.RecordMetaDSumResult;
import com.ycl.platform.domain.result.UY.*;
import com.ycl.platform.domain.vo.UpdateOnlineVO;
import com.ycl.platform.mapper.TMonitorMapper;
import com.ycl.platform.service.UYErrorTypeCheckService;
import com.ycl.platform.service.YwPointService;
import com.ycl.utils.DateUtils;
import com.ycl.utils.http.HttpUtils;
import com.ycl.utils.http.SelfHttpUtil;
import constant.ApiConstants;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -16,14 +21,23 @@
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
//优云对接数据任务
@Slf4j
@@ -35,6 +49,8 @@
    private final UYClient uyClient;
    private final UYErrorTypeCheckService uyErrorTypeCheckService;
    private final YwPointService pointService;
    private final TMonitorMapper monitorMapper;
    private final SelfHttpUtil selfHttpUtil;
    @Value("${youYun.tenantId}")
    private String tenantId;
@@ -46,6 +62,14 @@
    private String email;
    @Value("${youYun.passwd}")
    private String passwd;
    private static final ExecutorService executorService = new ThreadPoolExecutor(16,
            128,
            5000,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(1000),
            new ThreadPoolExecutor.CallerRunsPolicy()
    );
    // 图像检测
    public void imageDetection() {
@@ -143,6 +167,49 @@
        log.info("结束一机一档合格率数据同步");
    }
    /**
     * 点位在线检测
     */
    public void pointOnline() {
        log.info("开始检测点位在线");
        // 先查出设备IP集合
        List<String> ipList = monitorMapper.getDistinctIP();
        String prefix = "http://";
        Date now = new Date();
        for (String ip : ipList) {
            executorService.submit(() -> {
                // 先检测能否访问该ip的网页
                ResponseEntity<Object> res = null;
                UpdateOnlineVO online = new UpdateOnlineVO();
                online.setIp(ip);
                if ("127.0.0.1".equals(ip)) {
                    online.setOnline(Boolean.FALSE);
                    monitorMapper.updateOnline(online);
                    return;
                }
                try {
                    res = selfHttpUtil.get(prefix + ip, null, null);
                    online.setOnline(Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode());
                } catch (Exception e) {
                    online.setOnline(Boolean.FALSE);
                }
                online.setUpdateTime(now);
                // 如果http得到的不在线,那么再ping一下
                boolean reachable = false;
                if (! online.getOnline()) {
                    try {
                        reachable = InetAddress.getByName(ip).isReachable(3000);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    online.setOnline(reachable);
                }
                monitorMapper.updateOnline(online);
            });
        }
    }
    //点位在线率
    public void videoOnlineTask() {
        //视频图像质量
ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
@@ -40,7 +40,7 @@
    private final WorkOrderCheckImgMapper workOrderCheckImgMapper;
    private static final ExecutorService executorService = new ThreadPoolExecutor(16,
            32,
            128,
            5000,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(1000),
@@ -78,7 +78,6 @@
                }
            });
        }
        executorService.shutdown();
    }
}
ycl-server/src/main/java/com/ycl/utils/http/SelfHttpUtil.java
New file
@@ -0,0 +1,122 @@
package com.ycl.utils.http;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
/**
 * @author xp
 * @date 2022/11/16
 */
@Component
@RequiredArgsConstructor
public class SelfHttpUtil {
    private final RestTemplate httpClient;
    /**
     * post
     *
     * @param url    请求连接(ps: post请求如果要传url参数,请先拼接好再传入url)
     * @param data   请求体数据
     * @param header 请求头(有token就放里面)
     * @return
     */
    public Object post(String url, @Nullable Object data, @Nullable MultiValueMap header) {
        ResponseEntity<Object> response = httpClient.exchange(
                url,
                HttpMethod.POST,
                getHttpEntity(data, header),
                Object.class
        );
        return response.getBody();
    }
    /**
     * @param url   请求连接 (ps: post请求如果要传url参数,请先拼接好再传入url)
     * @param data  请求体数据
     * @param token
     * @return
     */
    public Object post(String url, String token, @Nullable Object data) {
        ResponseEntity<Object> response = httpClient.exchange(
                url,
                HttpMethod.POST,
                getHttpEntity(data, token),
                Object.class
        );
        return response.getBody();
    }
    /**
     * get
     *
     * @param url  RestTemplate 如果有url参数,必须要在url中使用占位符,如:https://www.easyblog.vip?name={name} 传参:String name = xp,才能拼上这个参数
     * @param token
     * @param params
     * @return
     */
//    public Object get(String url, String token, @Nullable Object... params) {
//        ResponseEntity<Object> response = httpClient.exchange(
//                url,
//                HttpMethod.GET,
//                getHttpEntity(null, token),
//                Object.class,
//                params
//        );
//        return response.getBody();
//    }
    /**
     * get
     *
     * @param url    请求连接  RestTemplate 如果有url参数,必须要在url中使用占位符,如:https://www.easyblog.vip?name={name} 传参:String name = xp,才能拼上这个参数
     * @param header 请求头(有token就放里面)
     * @param params
     * @return
     */
    public ResponseEntity<Object> get(String url, @Nullable MultiValueMap header, @Nullable Object... params) {
        ResponseEntity<Object> response = httpClient.exchange(
                url,
                HttpMethod.GET,
                getHttpEntity(null, header),
                Object.class,
                params
        );
        return response;
    }
    /**
     * 构建带请求头和请求体的httpEntity
     *
     * @param data
     * @param token
     * @return
     */
    protected HttpEntity getHttpEntity(Object data, String token) {
        MultiValueMap<String, String> header = new HttpHeaders();
        header.add("Authorization", token);
        HttpEntity httpEntity = new HttpEntity(data, header);
        return httpEntity;
    }
    /**
     * 直接传入header
     *
     * @param data
     * @param header
     * @return
     */
    protected HttpEntity getHttpEntity(Object data, MultiValueMap header) {
        HttpEntity httpEntity = new HttpEntity(data, header);
        return httpEntity;
    }
}
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -580,6 +580,19 @@
        FROM
             t_monitor
        WHERE
              deleted = 0 AND serial_number in <foreach collection="gbList" open="(" separator="," close=")" item="no">#{no}</foreach>
              serial_number in <foreach collection="gbList" open="(" separator="," close=")" item="no">#{no}</foreach>
    </select>
    <select id="getDistinctIP" resultType="string">
        SELECT
            DISTINCT ip
        FROM
            t_monitor
    </select>
    <update id="updateOnline">
        update t_yw_ponit set online = #{online.online}, update_time = #{online.updateTime} WHERE EXISTS (
                                                                                                          SELECT 1 FROM t_monitor WHERE ip = #{online.ip} AND t_monitor.serial_number = t_yw_point.serial_number
                                                                                                      );
    </update>
</mapper>