From 8585fcb9ac0ddc43ccee564e383500bd964d8d2e Mon Sep 17 00:00:00 2001
From: 101captain <237651143@qq.com>
Date: 星期一, 13 九月 2021 09:38:34 +0800
Subject: [PATCH] Merge branch 'property' into test
---
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java | 131 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 131 insertions(+), 0 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
new file mode 100644
index 0000000..2dcc215
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java
@@ -0,0 +1,131 @@
+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;
+ /**
+ * 客户端连接会触发
+ */
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ log.info("Channel active......");
+ }
+
+ /**
+ * 客户端发消息会触发
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ MyTools myTools=new MyTools();
+ log.info("服务器收到消息: {}", msg.toString());
+ 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("4A1803")){
+ String serial=msg.toString().substring(14,24);
+ 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);
+// nettyServerHandler.comPropertyAlarmDao.insert(comPropertyAlarm);
+ if(msg.toString().startsWith("4A18031")){
+ delayAlarm(serial);
+ }
+
+ }
+ ctx.flush();
+ }
+
+ /**
+ * 发生异常触发
+ */
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ 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("delayed.exchange","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