From 70d2a5d0f9c6951b2d4cac954041ed73582ff7eb Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期一, 09 六月 2025 11:54:00 +0800 Subject: [PATCH] 6.9新增登录失败冻结逻辑 --- springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java | 93 +++++++++++++++++++++++++++++++++++++++------- 1 files changed, 78 insertions(+), 15 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 2d6e071..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,26 +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; + /** * 客户端连接会触发 */ @@ -34,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(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("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(); } @@ -65,7 +91,44 @@ @PostConstruct public void init() { - nettyServerHandler=this; - nettyServerHandler.comPropertyAlarmDao=this.comPropertyAlarmDao; + 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