From 5dc04f3291c00d66f8733a49896612ea1e3b31c5 Mon Sep 17 00:00:00 2001
From: 罗元桥 <2376770955@qq.com>
Date: 星期四, 16 九月 2021 13:19:14 +0800
Subject: [PATCH] Merge branch 'test' into 'zzj'

---
 springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java |  139 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 139 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..4030931
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java
@@ -0,0 +1,139 @@
+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);
+                //展会处理
+                ComPropertyAlarm comPropertyAlarm = new ComPropertyAlarm();
+                comPropertyAlarm.setCreateTime(DateUtil.date());
+                comPropertyAlarm.setSerialNo(serial);
+                comPropertyAlarm.setType(ComPropertyAlarm.type.one);
+                nettyServerHandler.comPropertyAlarmDao.insert(comPropertyAlarm);
+            }
+
+        }
+        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