From c40f8e3d2e08e108780091776437242528bf61d6 Mon Sep 17 00:00:00 2001
From: 101captain <237651143@qq.com>
Date: 星期三, 20 七月 2022 17:44:56 +0800
Subject: [PATCH] bug修改
---
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java | 98 ++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 85 insertions(+), 13 deletions(-)
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java b/springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java
index 7e62442..d9f7b8f 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java
@@ -1,23 +1,46 @@
package com.panzhihua.service_property.netty;
import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.panzhihua.common.utlis.DateUtils;
+import com.panzhihua.common.utlis.StringUtils;
import com.panzhihua.service_property.dao.ComPropertyAlarmDao;
+import com.panzhihua.service_property.dao.ComPropertyAlarmSettingDao;
+import com.panzhihua.service_property.dao.ComPropertyEquipmentDao;
import com.panzhihua.service_property.entity.ComPropertyAlarm;
+import com.panzhihua.service_property.entity.ComPropertyAlarmSetting;
+import com.panzhihua.service_property.entity.ComPropertyEquipment;
import com.panzhihua.service_property.util.MyTools;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
+import javax.annotation.PostConstruct;
import javax.annotation.Resource;
+import java.time.Duration;
import java.util.Date;
+import java.util.Objects;
@Slf4j
@Component
public class NettyServerHandler extends ChannelInboundHandlerAdapter {
@Resource
private ComPropertyAlarmDao comPropertyAlarmDao;
+ @Resource
+ private ComPropertyAlarmSettingDao comPropertyAlarmSettingDao;
+ @Resource
+ private ComPropertyEquipmentDao comPropertyEquipmentDao;
+ @Resource
+ private StringRedisTemplate stringRedisTemplate;
+ @Resource
+ private RabbitTemplate rabbitTemplate;
+
+ private static NettyServerHandler nettyServerHandler;
+
/**
* 客户端连接会触发
*/
@@ -31,22 +54,28 @@
*/
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- MyTools myTools=new MyTools();
+ MyTools myTools = new MyTools();
log.info("服务器收到消息: {}", msg.toString());
- if(msg.toString().startsWith("4A1802")){
- myTools.writeToClient("404A021823",ctx,"状态包");
+ if (msg.toString().startsWith("4A1802")) {
+ myTools.writeToClient("404A021823", ctx, "状态包");
}
- if(msg.toString().startsWith("4A0C0134")){
- myTools.writeToClient("404A01"+ DateUtils.getDateFormatString(new Date(),"HHmmss")+"23",ctx,"心跳包");
+ if (msg.toString().startsWith("4A0C01")) {
+ myTools.writeToClient("404A01" + DateUtils.getDateFormatString(new Date(), "HHmmss") + "23", ctx, "心跳包");
}
- if(msg.toString().startsWith("4A1803")){
- String serial=msg.toString().substring(12,22);
- myTools.writeToClient("404A03"+msg.toString().substring(msg.toString().length()-2)+"23",ctx,"事件包");
- ComPropertyAlarm comPropertyAlarm=new ComPropertyAlarm();
- comPropertyAlarm.setCreateTime(DateUtil.date());
- comPropertyAlarm.setSerialNo(serial);
- comPropertyAlarm.setType(ComPropertyAlarm.type.one);
- comPropertyAlarmDao.insert(comPropertyAlarm);
+ if (msg.toString().startsWith("4A1803")) {
+ String serial = msg.toString().substring(14, 24);
+ myTools.writeToClient("404A03" + msg.toString().substring(msg.toString().length() - 2) + "23", ctx, "事件包");
+ if (msg.toString().startsWith("4A18031")) {
+ //正式处理
+ delayAlarm(serial);
+ //展会处理
+// ComPropertyAlarm comPropertyAlarm = new ComPropertyAlarm();
+// comPropertyAlarm.setCreateTime(DateUtil.date());
+// comPropertyAlarm.setSerialNo(serial);
+// comPropertyAlarm.setType(ComPropertyAlarm.type.one);
+// nettyServerHandler.comPropertyAlarmDao.insert(comPropertyAlarm);
+ }
+
}
ctx.flush();
}
@@ -59,4 +88,47 @@
cause.printStackTrace();
ctx.close();
}
+
+ @PostConstruct
+ public void init() {
+ nettyServerHandler = this;
+ nettyServerHandler.comPropertyAlarmDao = this.comPropertyAlarmDao;
+ nettyServerHandler.stringRedisTemplate = this.stringRedisTemplate;
+ nettyServerHandler.rabbitTemplate = this.rabbitTemplate;
+ }
+
+ //报警事件包延迟处理方法
+ private void delayAlarm(String serial) {
+ int duration = 0;
+ if (StringUtils.isNotEmpty(serial)) {
+
+ ComPropertyEquipment comPropertyEquipment = new ComPropertyEquipment();
+ if (nettyServerHandler.stringRedisTemplate.hasKey(serial)) {
+ comPropertyEquipment = JSONObject.parseObject(nettyServerHandler.stringRedisTemplate.boundValueOps(serial).get(), ComPropertyEquipment.class);
+ duration = getDuration(Objects.requireNonNull(comPropertyEquipment));
+ nettyServerHandler.stringRedisTemplate.boundValueOps(serial).set(JSONObject.toJSONString(comPropertyEquipment), Duration.ofHours(duration));
+ } else {
+ comPropertyEquipment = nettyServerHandler.comPropertyEquipmentDao.selectOne(new QueryWrapper<ComPropertyEquipment>().eq("serial_no", serial));
+ duration = getDuration(comPropertyEquipment);
+ nettyServerHandler.stringRedisTemplate.boundValueOps(serial).set(JSONObject.toJSONString(comPropertyEquipment));
+ }
+ int finalDuration = duration;
+ nettyServerHandler.rabbitTemplate.convertAndSend("huacheng.delayed.exchange", "huacheng.delayed.key", comPropertyEquipment, message -> {
+ message.getMessageProperties().setHeader("x-delay", finalDuration * 1000 * 3601);
+ return message;
+ });
+ }
+ }
+
+ private int getDuration(ComPropertyEquipment comPropertyEquipment) {
+ int duration;
+ if (nettyServerHandler.stringRedisTemplate.hasKey(comPropertyEquipment.getCommunityId().toString())) {
+ duration = Integer.parseInt(nettyServerHandler.stringRedisTemplate.boundValueOps(comPropertyEquipment.getCommunityId().toString()).get());
+ } else {
+ ComPropertyAlarmSetting comPropertyAlarmSetting = nettyServerHandler.comPropertyAlarmSettingDao.getByCommunityId(comPropertyEquipment.getCommunityId());
+ duration = comPropertyAlarmSetting.getTriggerTime();
+ nettyServerHandler.stringRedisTemplate.boundValueOps(comPropertyEquipment.getCommunityId().toString()).set(comPropertyAlarmSetting.getTriggerTime().toString());
+ }
+ return duration;
+ }
}
--
Gitblit v1.7.1