manailin
2021-09-28 c95ed4762edfbc8172016b27b7c8a200ea5bec5b
[更新]将一键报警的获取数据方式改为websocket获取
2个文件已修改
8个文件已删除
3个文件已添加
1028 ■■■■ 已修改文件
springcloud_k8s_panzhihuazhihuishequ/service_property/pom.xml 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/config/KafkaConfig.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/config/WebSocketClient.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/config/WebSocketConfig.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/CallForward.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/CallForwardDto.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/CustomBtn.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/DeviceDto.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/DeviceInfoDto.java 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/TaskDetail.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/TaskInfo.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/listener/OrderListener.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/resources/bootstrap.yml 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/pom.xml
@@ -111,22 +111,10 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--kafka依赖 -->
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>2.7.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
            <version>2.7.6</version>
        </dependency>
        <!--json转换工具包依赖 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
            <version>2.3.4.RELEASE</version>
        </dependency>
    </dependencies>
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/config/KafkaConfig.java
File was deleted
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/config/WebSocketClient.java
New file
@@ -0,0 +1,129 @@
package com.panzhihua.service_property.config;
import java.io.IOException;
import java.util.Date;
import javax.annotation.Resource;
import javax.websocket.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.service_property.dao.ComPropertyAlarmDao;
import com.panzhihua.service_property.dto.DeviceDto;
import com.panzhihua.service_property.entity.ComPropertyAlarm;
import cn.hutool.extra.spring.SpringUtil;
import lombok.extern.slf4j.Slf4j;
/**
 * 应用模块名称
 * <p>
 * 一键报警设备消息 代码描述
 * <p>
 * Copyright: Copyright (C) 2021 XXX, Inc. All rights reserved.
 * <p>
 * Company: 成都呐喊信息技术有限公司
 * <p>
 *
 * @author manailin
 * @since 2021/9/27 16:31
 */
@Slf4j
@Component
@ClientEndpoint
public class WebSocketClient {
    private static final Logger logger = LoggerFactory.getLogger(WebSocketClient.class);
    /** 保存报警记录服务 */
    @Resource
    private ComPropertyAlarmDao comPropertyAlarmDao;
    /**
     * session
     */
    private Session session;
    /**
     * <beforeInit>
     *
     * @throws
     */
    public static void beforeInit() {
        // 在socket配置类中调用此方法可以完成一些需要初始化注入的操作
    }
    @OnOpen
    public void onOpen(Session session) {
        logger.info("连接开启...");
        this.session = session;
    }
    @OnMessage
    public void onMessage(String message, Session session) {
        // 提取数据
        dealData(message);
    }
    @Async
    void dealData(String message) {
        comPropertyAlarmDao = SpringUtil.getBean(ComPropertyAlarmDao.class);
        DeviceDto deviceInfo = JSONObject.parseObject(message, DeviceDto.class);
        if (deviceInfo.getCallstatus().equals("RINGING")) {
            logger.info("收到设备报警信息:{}", message);
            ComPropertyAlarm comPropertyAlarm = new ComPropertyAlarm();
            comPropertyAlarm.setSerialNo(deviceInfo.getCallid());
            comPropertyAlarm.setStatus(1);
            comPropertyAlarm.setCreateTime(new Date());
            comPropertyAlarmDao.insert(comPropertyAlarm);
        }
    }
    @OnClose
    public void onClose() {
        logger.info("长连接关闭...");
    }
    @OnError
    public void onError(Session session, Throwable t) {
        logger.error("error, cause: ", t);
    }
    /**
     * <异步发送message>
     *
     * @param message
     *            message @throws
     */
    public void send(String message) {
        this.session.getAsyncRemote().sendText(message);
    }
    /**
     * <发送message>
     *
     * @param message
     *            message @throws
     */
    public void sendMessage(String message) {
        try {
            session.getBasicRemote().sendText(message);
        } catch (IOException ex) {
            logger.error("error, cause: ", ex);
        }
    }
    /**
     * <关闭连接>
     *
     * @throws
     */
    public void close() throws IOException {
        if (this.session.isOpen()) {
            this.session.close();
        }
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/config/WebSocketConfig.java
New file
@@ -0,0 +1,136 @@
package com.panzhihua.service_property.config;
import java.net.URI;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.websocket.ContainerProvider;
import javax.websocket.WebSocketContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
/**
 * 应用模块名称
 * <p>
 * 一键报警websocket 配置 代码描述
 * <p>
 * Copyright: Copyright (C) 2021 XXX, Inc. All rights reserved.
 * <p>
 * Company: 成都呐喊信息技术有限公司
 * <p>
 *
 * @author manailin
 * @since 2021/9/27 16:31
 */
@Configuration
@Order(1)
public class WebSocketConfig implements ApplicationRunner {
    private static final Logger logger = LoggerFactory.getLogger(WebSocketConfig.class);
    private static Boolean isOk;
    private static WebSocketContainer container = ContainerProvider.getWebSocketContainer();
    private WebSocketClient client;
    /**
     * 定义定时任务线程
     */
    private ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
    @Value("${websocket.uri}")
    private String uri;
    @Value("${websocket.ip}")
    private String ip;
    /**
     * <run>
     *
     * @param args
     *            args @throws
     */
    @Override
    public void run(ApplicationArguments args) throws Exception {
        logger.info("[WebSocketConfig] web socket init start.");
        // websocket客户端初始化
        wsClientInit();
    }
    /**
     * <websocket客户端初始化>
     *
     * @throws
     */
    public void wsClientInit() {
        logger.info("[WebSocketConfig] start to wsClientInit");
        try {
            client = new WebSocketClient();
            WebSocketClient.beforeInit();
            container.connectToServer(client, new URI(uri));
            isOk = true;
        } catch (Exception e) {
            isOk = false;
            logger.error("error, cause: ", e);
        }
        /**
         * 参数:1、任务体 2、首次执行的延时时间 3、任务执行间隔 4、间隔时间单位
         **/
        scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                // 心跳检测 断线重连
                heartbeatCheck();
            }
        }, 1, 30, TimeUnit.SECONDS);
        logger.info("[WebSocketConfig] end to wsClientInit");
    }
    /**
     * <心跳检测 断线重连>
     *
     *
     */
    private void heartbeatCheck() {
        logger.info("[WebSocketConfig] start to heartbeatCheck");
        if (isOk != null && isOk) {
            try {
                client.send("ping " + ip);
            } catch (Exception e) {
                isOk = false;
            }
        } else {
            // 系统连接失败进行重试
            logger.warn("系统连接失败,正在重连...");
            try {
                client.send("ping " + ip);
                logger.warn("系统重连成功!");
                isOk = true;
            } catch (Exception e) {
                try {
                    client = new WebSocketClient();
                    container.connectToServer(client, new URI(uri));
                    isOk = true;
                } catch (Exception e1) {
                    isOk = false;
                }
                if (isOk != null && isOk) {
                    logger.warn("系统重连成功!");
                }
            }
        }
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/CallForward.java
File was deleted
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/CallForwardDto.java
File was deleted
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/CustomBtn.java
File was deleted
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/DeviceDto.java
New file
@@ -0,0 +1,33 @@
package com.panzhihua.service_property.dto;
import lombok.Data;
/**
 * 应用模块名称
 * <p>
 * 一键报警设备消息 代码描述
 * <p>
 * Copyright: Copyright (C) 2021 XXX, Inc. All rights reserved.
 * <p>
 * Company: 成都呐喊信息技术有限公司
 * <p>
 *
 * @author manailin
 * @since 2021/9/27 16:31
 */
@Data
public class DeviceDto {
    /** 呼叫状态 */
    private String callstatus;
    /** 指令 */
    private String cmd;
    /** 状态 */
    private String status;
    /** 呼叫人员ID */
    private String userid;
    /** 呼叫iD */
    private String callid;
    /** 呼叫时间 */
    private String _ts;
}
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/DeviceInfoDto.java
File was deleted
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/TaskDetail.java
File was deleted
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/dto/TaskInfo.java
File was deleted
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/listener/OrderListener.java
File was deleted
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/resources/bootstrap.yml
@@ -1,25 +1,6 @@
spring:
  application:
    name: property
  kafka:
    bootstrap-servers: 182.151.37.143:9092 #kafka地址
    consumer:
      group-id: order-consumer
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer #kafkaTemplate.send()方法参数类型
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      auto-offset-reset: earliest
      security:
        protocol: PLAINTEXT
    producer:
      batch-size: 16384
      buffer-memory: 33554432
      retries: 0
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      properties:
        linger.ms: 1
      security:
        protocol: PLAINTEXT
  cloud:
    config:
      discovery:
@@ -39,7 +20,6 @@
  client:
    service-url:
      defaultZone: http://${EUREKA_URL:localhost}:8192/eureka
#实体加密、解密、字段脱敏拦截设置
domain:
@@ -62,9 +42,7 @@
    tags:
      application: property
# kafka自定义消息发送配置
kafka:
  topic:
    kafka-demo-topic: Task_Info
    kafka-demo-key: order-key
    autoCreate: false
#从一键报警设备websocket订阅时间消息配置
websocket:
  uri: ws://182.151.37.143:8086/status
  ip:  182.151.37.143