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