101captain
2021-09-09 d1efd96235d1d43866d2aea8c5ebdd14039365cb
修改报警相关功能
3个文件已修改
95 ■■■■ 已修改文件
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/entity/ComPropertyAlarm.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/message/AlarmMessage.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/entity/ComPropertyAlarm.java
@@ -92,10 +92,20 @@
     */
    @ApiModelProperty(value = "社区id")
    private Long communityId;
    /**
     * 报警类型 1一键报警 2长时间无应答报警
     */
    public interface  type{
        int one=1;
        int time=2;
    }
    /**
     * 报警处理状态 0待处理 1已办结
     */
    public interface  status{
        int dcl=0;
        int ybj=1;
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/message/AlarmMessage.java
@@ -1,4 +1,39 @@
package com.panzhihua.service_property.message;
import cn.hutool.core.date.DateUtil;
import com.panzhihua.service_property.dao.ComPropertyAlarmDao;
import com.panzhihua.service_property.entity.ComPropertyAlarm;
import com.panzhihua.service_property.entity.ComPropertyEquipment;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
@Slf4j
public class AlarmMessage {
    private final static String DELAY_QUEUE="delayed.queue";
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    @Resource
    private ComPropertyAlarmDao comPropertyAlarmDao;
    @RabbitListener(queues=DELAY_QUEUE)
    public void delayAlarm(ComPropertyEquipment comPropertyEquipment){
        log.info("消息队列开始消费");
        if(!stringRedisTemplate.hasKey(comPropertyEquipment.getSerialNo())){
            ComPropertyAlarm comPropertyAlarm=new ComPropertyAlarm();
            comPropertyAlarm.setCreateTime(DateUtil.date());
            comPropertyAlarm.setSerialNo(comPropertyEquipment.getSerialNo());
            comPropertyAlarm.setType(ComPropertyAlarm.type.one);
            comPropertyAlarm.setCommunityId(comPropertyEquipment.getCommunityId());
            comPropertyAlarm.setName(comPropertyEquipment.getUsername());
            comPropertyAlarm.setStatus(ComPropertyAlarm.status.dcl);
            comPropertyAlarmDao.insert(comPropertyAlarm);
        }
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_property/src/main/java/com/panzhihua/service_property/netty/NettyServerHandler.java
@@ -23,6 +23,7 @@
import javax.annotation.Resource;
import java.time.Duration;
import java.util.Date;
import java.util.Objects;
@Slf4j
@Component
@@ -63,11 +64,15 @@
        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);
//            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();
    }
@@ -88,30 +93,39 @@
        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 comPropertyEquipment= JSONObject.parseObject(nettyServerHandler.stringRedisTemplate.boundValueOps(serial).get(),ComPropertyEquipment.class);
                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());
                }
                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 comPropertyEquipment=nettyServerHandler.comPropertyEquipmentDao.selectOne(new QueryWrapper<ComPropertyEquipment>().eq("serial_no",serial));
                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.queue","delayed.key", message -> {
                message.getMessageProperties().setDelay(finalDuration);
            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;
    }
}