package com.panzhihua.service_property.config;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
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 lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import javax.websocket.*;
|
import java.io.IOException;
|
import java.util.Date;
|
|
/**
|
* 应用模块名称
|
* <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) {
|
// 提取数据
|
logger.info("收到的原始数据:{}", message);
|
dealNewData(message);
|
}
|
|
@Deprecated
|
@Async
|
void dealNewData(String message) {
|
comPropertyAlarmDao = SpringUtil.getBean(ComPropertyAlarmDao.class);
|
JSONObject deviceMess = JSONObject.parseObject(message);
|
boolean checkFlag =
|
("trace_call".equals(deviceMess.getString("cmd")) && (StringUtils.isNotEmpty(deviceMess.getString("userid"))));
|
if (checkFlag) {
|
log.info("已经接收到报警记录,记录信息:{}",deviceMess.toJSONString());
|
boolean panzhihuaDevice = deviceMess.getString("userid").startsWith("7") || deviceMess.getString("userid").startsWith("8");
|
if(panzhihuaDevice) {
|
log.info("报警记录是攀枝花设备7-8开头的设备");
|
logger.info("收到设备报警信息:{}", message);
|
for (int i = 1; i < 10; i++) {
|
if (org.apache.commons.lang.StringUtils.isNotEmpty(deviceMess.getString("num" + i))) {
|
ComPropertyAlarm comPropertyAlarm = new ComPropertyAlarm();
|
comPropertyAlarm.setSerialNo(deviceMess.getString("userid"));
|
comPropertyAlarm.setReceiveNo(deviceMess.getString("num" + i));
|
comPropertyAlarm.setStatus(0);
|
// 10位的秒级别的时间戳
|
Date createDate = new Date(deviceMess.getLong("ts" + i) * 1000);
|
//对应的就是时间戳对应的Date
|
comPropertyAlarm.setCreateTime(createDate);
|
comPropertyAlarm.setType(1);
|
comPropertyAlarmDao.insert(comPropertyAlarm);
|
} else {
|
break;
|
}
|
}
|
}
|
}
|
}
|
|
@Deprecated
|
@Async
|
void dealData(String message) {
|
comPropertyAlarmDao = SpringUtil.getBean(ComPropertyAlarmDao.class);
|
DeviceDto deviceInfo = JSONObject.parseObject(message, DeviceDto.class);
|
boolean checkFlag =
|
"RINGING".equals(deviceInfo.getCallstatus()) && StringUtils.isNotEmpty(deviceInfo.getOri_number());
|
if (checkFlag) {
|
logger.info("收到设备报警信息:{}", message);
|
ComPropertyAlarm comPropertyAlarm = new ComPropertyAlarm();
|
comPropertyAlarm.setSerialNo(deviceInfo.getOri_number());
|
comPropertyAlarm.setReceiveNo(deviceInfo.getUserid());
|
comPropertyAlarm.setStatus(0);
|
comPropertyAlarm.setCreateTime(new Date());
|
comPropertyAlarm.setType(1);
|
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();
|
}
|
}
|
}
|