Java解析HJ212环保报文

发布时间 2023-09-28 16:45:12作者: LucasいYzx

Java解析HJ212环保报文

toMap方法对报文进行基础的解析

/**
     * HJ212报文转换为标准化的Map
     * @param str HJ212报文
     * @return
     */
    public static Map<String,Object> toMap(String str){
        //字符串截取(从QN开始...)
        String subStr = str.substring(str.indexOf("QN"));
        //替换全部的逗号为分号
        String s = subStr.replaceAll(",", ";");
        //根据&&对报文进行拆分,拆分之后包含三个元素:[基础参数,CP下的详细参数,CRC校验]
        String[] split = s.split("&&");
        //基本参数初始化
        Map<String,Object> map = new HashMap<>();
        //详细参数初始化
        Map<String,Object> childMap = new TreeMap<>();
        //split解析
        String[] split1 = split[0].split(";");
        String[] split2 = split[1].split(";");
        //插入详细参数的值
        for (String s2 : split2) {
            String[] sp = s2.split("=");
            childMap.put(sp[0], sp[1]);
        }
        //插入基本参数的值
        for (String s1 : split1) {
            String[] sp = s1.split("=");
            if (sp.length == 1) {
                map.put(sp[0], childMap);
            } else {
                map.put(sp[0], sp[1]);
            }
        }
        return map;
    }

个人参与实际开发的项目代码

根据公司业务需要还需要进行二次解析

package com.dzy.serverSocket;

import com.alibaba.nacos.common.http.param.MediaType;
import com.dzy.hgyq.domain.*;
import com.dzy.hgyq.mapper.YqhbglYzszMapper;
import com.dzy.hgyq.service.*;
import com.dzy.scyfjz.mapper.SysUserMapper;
import com.dzy.scyfjz.service.ISysUserService;
import com.dzy.sdk.Request;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleStateEvent;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;

@Component
public class EPServerHandler extends ChannelInboundHandlerAdapter{
    @Autowired
    private IYqhbgljcsjHistoryService yqhbgljcsjHistoryService;
    @Autowired
    private IYqhbgljcsjService yqhbgljcsjService;
    @Autowired
    private IYqhbglYzszService iYqhbglYzszService;
    @Autowired
    private IYqhbglBjlsService yqhbglBjlsService;
    @Autowired
    private IAppXxtzService appXxtzService;
    @Autowired
    private IDictJcyzbmbService dictJcyzbmbService;
    @Autowired
    private ISysUserService sysUserService;
    @Autowired
    private IYqhbglJczSbService yqhbglJczSbService;
    @Autowired
    private IYqhbglJczxxbService yqhbglJczxxbService;
    private static IYqhbgljcsjHistoryService yqhbgljcsjHistoryService1;
    private static IYqhbgljcsjService yqhbgljcsjService1;
    private static IYqhbglYzszService iYqhbglYzszService1;
    private static IYqhbglBjlsService yqhbglBjlsService1;
    private static IAppXxtzService appXxtzService1;
    private static IDictJcyzbmbService dictJcyzbmbService1;
    private static ISysUserService sysUserService1;
    private static IYqhbglJczSbService yqhbglJczSbService1;
    private static IYqhbglJczxxbService yqhbglJczxxbService1;
    /**
     * 定义一个HashMap,用于保存所有的channel和设备ID的对应关系。
     */
    private static Map deviceInfo = new HashMap(64);
    /**
     * 消息读取
     */
    @PostConstruct
    public void init(){
        yqhbgljcsjHistoryService1 = yqhbgljcsjHistoryService;
        yqhbgljcsjService1 = yqhbgljcsjService;
        iYqhbglYzszService1 = iYqhbglYzszService;
        yqhbglBjlsService1 = yqhbglBjlsService;
        appXxtzService1 = appXxtzService;
        dictJcyzbmbService1 = dictJcyzbmbService;
        sysUserService1 = sysUserService;
        yqhbglJczSbService1 = yqhbglJczSbService;
    }
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        /*获取所有监管用户id*/
        List<String> strings = sysUserService1.selectAllUserid();
        /*获取环保数据的阈值*/
        YqhbglYzsz yqhbglYzsz = new YqhbglYzsz();
        List<YqhbglYzsz> yqhbglYzszs = iYqhbglYzszService1.selectYqhbglYzszList(yqhbglYzsz);
        /*解析环保数据包*/
        if (msg.toString().substring(0, 1).equals("#")){
            String[] split = msg.toString().split("&&");
            String[] split3 = split[1].split(";");
            String substring6 = split3[0].substring(split3[0].indexOf("=") + 1);
            String strDate = substring6.substring(0, 4)+"-"+substring6.substring(4, 6)+"-"+substring6.substring(6, 8)+" "+substring6.substring(8, 10)+":"+substring6.substring(10, 12)+":"+substring6.substring(12, 14); // 日期时间字符串
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = null;
            try {
                date = dateFormat.parse(strDate);
            } catch (Exception e) {
                e.printStackTrace();
            }
            int i = msg.toString().indexOf("MN");
            String substring = msg.toString().substring(i);
            String substring3 = substring.substring(0, substring.indexOf(";")+1);
            String substring4 = substring3.substring(substring3.indexOf("=")+1);
            String substring5 = substring4.replaceAll(";", "");
            Map<String, Object> map = toMap(msg.toString());
            Object value = map.get("CP");
            String s = value.toString().replaceAll("\\{|\\}", "");
            if (s.indexOf("DataTime")==0){
                /*创建园区环保历史监测事件*/
                YqhbgljcsjHistory yqhbgljcsjHistory = new YqhbgljcsjHistory();
                Yqhbgljcsj yqhbgljcsj = new Yqhbgljcsj();
                Yqhbgljcsj yqhbgljcsj2 = new Yqhbgljcsj();
                String substring1 = s.substring(25);
                String[] split1 = substring1.split(",");
                for (String s1 : split1) {
                    System.out.println(s1);
                    String[] sp = s1.split("=");
                    yqhbgljcsjHistory.setValue(sp[1]);
                    yqhbgljcsjHistory.setId(UUID.randomUUID().toString());
                    yqhbgljcsjHistory.setSbid(ctx.channel().id().toString());
                    yqhbgljcsjHistory.setSbwybs(substring5);
                    yqhbgljcsjHistory.setCreateTime(date);
                    String[] sps = sp[0].split("-");
                    yqhbgljcsjHistory.setJcyzbm(sps[0]);
                    yqhbgljcsjHistory.setZdbm(sps[1]);
                    yqhbgljcsjHistoryService1.insertYqhbgljcsjHistory(yqhbgljcsjHistory);
                    /*设定监测站与设备之间的对应关系*/
                    if (sps[0].contains("a")){
                        YqhbglJczSb yqhbglJczSb1 = new YqhbglJczSb();
                        List<YqhbglJczSb> yqhbglJczSbs = yqhbglJczSbService1.selectYqhbglJczSbList(yqhbglJczSb1);
                        List<Boolean> booleans = new ArrayList<>();
                        for (YqhbglJczSb y:yqhbglJczSbs) {
                            String sbId = y.getSbId();
                            if (!ctx.channel().id().toString().equals(sbId)){
                                booleans.add(true);
                            }
                        }
                        if (booleans.size()==yqhbglJczSbs.size()){
                            YqhbglJczSb yqhbglJczSb = new YqhbglJczSb();
                            yqhbglJczSb.setId(UUID.randomUUID().toString());
                            yqhbglJczSb.setJczId("hxyqjcz");
                            yqhbglJczSb.setJczLx("1");
                            yqhbglJczSb.setSbId(ctx.channel().id().toString());
                            yqhbglJczSb.setSbLx("a");
                            yqhbglJczSbService1.insertYqhbglJczSb(yqhbglJczSb);
                        }
                    }
                    if (sps[0].contains("w")){
                        YqhbglJczSb yqhbglJczSb1 = new YqhbglJczSb();
                        List<YqhbglJczSb> yqhbglJczSbs = yqhbglJczSbService1.selectYqhbglJczSbList(yqhbglJczSb1);
                        List<Boolean> booleans = new ArrayList<>();
                        for (YqhbglJczSb y:yqhbglJczSbs) {
                            String sbId = y.getSbId();
                            if (!ctx.channel().id().toString().equals(sbId)){
                                booleans.add(true);
                            }
                        }
                        if (booleans.size()==yqhbglJczSbs.size()){
                            YqhbglJczSb yqhbglJczSb = new YqhbglJczSb();
                            yqhbglJczSb.setId(UUID.randomUUID().toString());
                            yqhbglJczSb.setJczId("hxwsjcz");
                            yqhbglJczSb.setJczLx("2");
                            yqhbglJczSb.setSbId(ctx.channel().id().toString());
                            yqhbglJczSb.setSbLx("w");
                            yqhbglJczSbService1.insertYqhbglJczSb(yqhbglJczSb);
                        }
                    }
                    /*判断环保指数是否超过设定的阈值,如果超过则将数据插入报警表*/
                    for (YqhbglYzsz yqhbglYzsz1:yqhbglYzszs) {
                        YqhbglBjls yqhbglBjls = new YqhbglBjls();
                        /*烟气报警*/
                        if (sps[0].contains(yqhbglYzsz1.getJcx())&&sps[0].contains("a")&&sps[1].equals("Rtd")&&Integer.parseInt(sp[1])>Integer.parseInt(yqhbglYzsz1.getYz())){
                            yqhbglBjls.setId(UUID.randomUUID().toString());
                            YqhbglJczSb yqhbglJczSb = new YqhbglJczSb();
                            List<YqhbglJczSb> yqhbglJczSbs = yqhbglJczSbService1.selectYqhbglJczSbList(yqhbglJczSb);
                            String jczname = "";
                            String jczid = "";
                            for (YqhbglJczSb y:yqhbglJczSbs) {
                                if (y.getSbId().equals(ctx.channel().id().toString())){
                                    yqhbglBjls.setJczId(y.getJczId());
                                    YqhbglJczxxb yqhbglJczxxb = new YqhbglJczxxb();
                                    yqhbglJczxxb.setJczid(y.getJczId());
                                    jczid = y.getJczId();
                                    List<YqhbglJczxxb> yqhbglJczxxbs = yqhbglJczxxbService1.selectYqhbglJczxxbList(yqhbglJczxxb);
                                    jczname = yqhbglJczxxbs.get(0).getJcz();
                                }
                            }
                            yqhbglBjls.setSbid(ctx.channel().id().toString());
                            yqhbglBjls.setSj(new Date());
                            yqhbglBjls.setJcx(sps[0]);
                            yqhbglBjls.setJclx("1");
                            yqhbglBjls.setYz(yqhbglYzsz1.getYz());
                            yqhbglBjls.setCfz(sp[1]);
                            yqhbglBjls.setCreateTime(new Date());
                            yqhbglBjlsService1.insertYqhbglBjls(yqhbglBjls);
                            /*将烟气报警推送到APP消息通知中心*/
                            String hbglYqMessage ="";
                            AppXxtz appXxtz = new AppXxtz();
                            String s2 = dictJcyzbmbService1.selectDictLabelByDictValue(sps[0].replaceAll(" ", ""));
                            hbglYqMessage = "烟气异常报警: "+jczname+"于"+dateFormat.format(new Date())+"发生"+s2+"异常报警,请及时进行处置。";
                            for (String userId:strings) {
                                appXxtz.setId(UUID.randomUUID().toString());
                                appXxtz.setJczid(jczid);
                                appXxtz.setUserId(userId);
                                appXxtz.setXxtzsj(new Date());
                                appXxtz.setXxtznr(hbglYqMessage);
                                appXxtz.setSfyd("2");
                                appXxtz.setXxlb("hbycbj");
                                appXxtzService1.insertAppXxtz(appXxtz);
                            }
                        }
                        /*污水报警*/
                        if (sps[0].contains(yqhbglYzsz1.getJcx())&&sps[0].contains("w")&&sps[1].equals("Rtd")&&Integer.parseInt(sp[1])>Integer.parseInt(yqhbglYzsz1.getYz())){
                            yqhbglBjls.setId(UUID.randomUUID().toString());
                            YqhbglJczSb yqhbglJczSb = new YqhbglJczSb();
                            List<YqhbglJczSb> yqhbglJczSbs = yqhbglJczSbService1.selectYqhbglJczSbList(yqhbglJczSb);
                            String jczname = "";
                            String jczid = "";
                            for (YqhbglJczSb y:yqhbglJczSbs) {
                                if (y.getSbId().equals(ctx.channel().id().toString())){
                                    yqhbglBjls.setJczId(y.getJczId());
                                    YqhbglJczxxb yqhbglJczxxb = new YqhbglJczxxb();
                                    yqhbglJczxxb.setJczid(y.getJczId());
                                    jczid = y.getJczId();
                                    List<YqhbglJczxxb> yqhbglJczxxbs = yqhbglJczxxbService1.selectYqhbglJczxxbList(yqhbglJczxxb);
                                    jczname = yqhbglJczxxbs.get(0).getJcz();
                                }
                            }
                            yqhbglBjls.setSbid(ctx.channel().id().toString());
                            yqhbglBjls.setSj(new Date());
                            yqhbglBjls.setJcx(sps[0]);
                            yqhbglBjls.setJclx("2");
                            yqhbglBjls.setYz(yqhbglYzsz1.getYz());
                            yqhbglBjls.setCfz(sp[1]);
                            yqhbglBjls.setCreateTime(new Date());
                            yqhbglBjlsService1.insertYqhbglBjls(yqhbglBjls);
                            /*将污水报警推送到APP消息通知中心*/
                            String hbglWsMessage ="";
                            AppXxtz appWsXxtz = new AppXxtz();
                            String s2 = dictJcyzbmbService1.selectDictLabelByDictValue(sps[0].replaceAll(" ", ""));
                            hbglWsMessage = "污水异常报警: "+jczname+"于"+dateFormat.format(new Date())+"发生"+s2+"异常报警,请及时进行处置。";
                            for (String userId:strings) {
                                appWsXxtz.setId(UUID.randomUUID().toString());
                                appWsXxtz.setJczid(jczid);
                                appWsXxtz.setUserId(userId);
                                appWsXxtz.setXxtzsj(new Date());
                                appWsXxtz.setXxtznr(hbglWsMessage);
                                appWsXxtz.setSfyd("2");
                                appWsXxtz.setXxlb("hbycbj");
                                appXxtzService1.insertAppXxtz(appWsXxtz);
                            }
                        }
                    }
                    List<Yqhbgljcsj> yqhbgljcsjs = yqhbgljcsjService1.selectYqhbgljcsjList(yqhbgljcsj2);
                    System.out.println(yqhbgljcsjs.size());
                    if (yqhbgljcsjs.size()==0){
                        /*System.out.println("第一次插入操作1");*/
                        yqhbgljcsj.setValue(sp[1]);
                        yqhbgljcsj.setId(UUID.randomUUID().toString());
                        yqhbgljcsj.setSbid(ctx.channel().id().toString());
                        yqhbgljcsj.setSbwybs(substring5);
                        yqhbgljcsj.setCreateTime(date);
                        yqhbgljcsj.setJcyzbm(sps[0]);
                        yqhbgljcsj.setZdbm(sps[1]);
                        yqhbgljcsjService1.insertYqhbgljcsj(yqhbgljcsj);
                    }
                    else {
                        List<Boolean> booleanList = new ArrayList<>();
                        for (Yqhbgljcsj y : yqhbgljcsjs) {
                            boolean equals = y.getSbid().equals(ctx.channel().id().toString())&&y.getJcyzbm().equals(sps[0])&&y.getZdbm().equals(sps[1]);
                            if (equals){
                                /*System.out.println("执行更新操作1");*/
                                y.setValue(sp[1]);
                                y.setUpdateTime(date);
                                y.getId();
                                yqhbgljcsjService1.updateYqhbgljcsj(y);
                            }else {
                                booleanList.add(equals);
                            }
                        }
                        if (booleanList.size()==yqhbgljcsjs.size()){
                            /*System.out.println("执行插入操作1");*/
                            yqhbgljcsj.setValue(sp[1]);
                            yqhbgljcsj.setId(UUID.randomUUID().toString());
                            yqhbgljcsj.setSbid(ctx.channel().id().toString());
                            yqhbgljcsj.setSbwybs(substring5);
                            yqhbgljcsj.setCreateTime(date);
                            yqhbgljcsj.setJcyzbm(sps[0]);
                            yqhbgljcsj.setZdbm(sps[1]);
                            yqhbgljcsjService1.insertYqhbgljcsj(yqhbgljcsj);
                            booleanList.clear();
                        }
                    }
                }
            }else {
                /*创建园区环保历史监测事件*/
                YqhbgljcsjHistory yqhbgljcsjHistory2 = new YqhbgljcsjHistory();
                Yqhbgljcsj yqhbgljcsj21 = new Yqhbgljcsj();
                Yqhbgljcsj yqhbgljcsj22 = new Yqhbgljcsj();
                String substring2 = s.substring(25 + s.indexOf("DataTime"));
                String[] split2 = substring2.split(",");
                for (String s2 : split2) {
                    System.out.println(s2);
                    String[] sp = s2.split("=");
                    yqhbgljcsjHistory2.setValue(sp[1]);
                    yqhbgljcsjHistory2.setId(UUID.randomUUID().toString());
                    yqhbgljcsjHistory2.setSbid(ctx.channel().id().toString());
                    yqhbgljcsjHistory2.setSbwybs(substring5);
                    yqhbgljcsjHistory2.setCreateTime(date);
                    String[] sps2 = sp[0].split("-");
                    yqhbgljcsjHistory2.setJcyzbm(sps2[0]);
                    yqhbgljcsjHistory2.setZdbm(sps2[1]);
                    yqhbgljcsjHistoryService1.insertYqhbgljcsjHistory(yqhbgljcsjHistory2);
                    /*设定监测站与设备之间的对应关系*/
                    if (sps2[0].contains("a")){
                        YqhbglJczSb yqhbglJczSb1 = new YqhbglJczSb();
                        List<YqhbglJczSb> yqhbglJczSbs = yqhbglJczSbService1.selectYqhbglJczSbList(yqhbglJczSb1);
                        List<Boolean> booleans = new ArrayList<>();
                        for (YqhbglJczSb y:yqhbglJczSbs) {
                            String sbId = y.getSbId();
                            if (!ctx.channel().id().toString().equals(sbId)){
                                booleans.add(true);
                            }
                        }
                        if (booleans.size()==yqhbglJczSbs.size()){
                            YqhbglJczSb yqhbglJczSb = new YqhbglJczSb();
                            yqhbglJczSb.setId(UUID.randomUUID().toString());
                            yqhbglJczSb.setJczId("hxyqjcz");
                            yqhbglJczSb.setJczLx("1");
                            yqhbglJczSb.setSbId(ctx.channel().id().toString());
                            yqhbglJczSb.setSbLx("a");
                            yqhbglJczSbService1.insertYqhbglJczSb(yqhbglJczSb);
                        }
                    }
                    if (sps2[0].contains("w")){
                        YqhbglJczSb yqhbglJczSb1 = new YqhbglJczSb();
                        List<YqhbglJczSb> yqhbglJczSbs = yqhbglJczSbService1.selectYqhbglJczSbList(yqhbglJczSb1);
                        List<Boolean> booleans = new ArrayList<>();
                        for (YqhbglJczSb y:yqhbglJczSbs) {
                            String sbId = y.getSbId();
                            if (!ctx.channel().id().toString().equals(sbId)){
                                booleans.add(true);
                            }
                        }
                        if (booleans.size()==yqhbglJczSbs.size()){
                            YqhbglJczSb yqhbglJczSb = new YqhbglJczSb();
                            yqhbglJczSb.setId(UUID.randomUUID().toString());
                            yqhbglJczSb.setJczId("hxwsjcz");
                            yqhbglJczSb.setJczLx("2");
                            yqhbglJczSb.setSbId(ctx.channel().id().toString());
                            yqhbglJczSb.setSbLx("w");
                            yqhbglJczSbService1.insertYqhbglJczSb(yqhbglJczSb);
                        }
                    }
                    /*判断环保指数是否超过设定的阈值,如果超过则将数据插入报警表*/
                    for (YqhbglYzsz yqhbglYzsz1:yqhbglYzszs) {
                        YqhbglBjls yqhbglBjls = new YqhbglBjls();
                        /*烟气报警*/
                        if (sps2[0].contains(yqhbglYzsz1.getJcx())&&sps2[0].contains("a")&&sps2[1].equals("Rtd")&&Integer.parseInt(sp[1])>Integer.parseInt(yqhbglYzsz1.getYz())){
                            yqhbglBjls.setId(UUID.randomUUID().toString());
                            YqhbglJczSb yqhbglJczSb = new YqhbglJczSb();
                            List<YqhbglJczSb> yqhbglJczSbs = yqhbglJczSbService1.selectYqhbglJczSbList(yqhbglJczSb);
                            String jczname = "";
                            String jczid = "";
                            for (YqhbglJczSb y:yqhbglJczSbs) {
                                if (y.getSbId().equals(ctx.channel().id().toString())){
                                    yqhbglBjls.setJczId(y.getJczId());
                                    YqhbglJczxxb yqhbglJczxxb = new YqhbglJczxxb();
                                    yqhbglJczxxb.setJczid(y.getJczId());
                                    jczid = y.getJczId();
                                    List<YqhbglJczxxb> yqhbglJczxxbs = yqhbglJczxxbService1.selectYqhbglJczxxbList(yqhbglJczxxb);
                                    jczname = yqhbglJczxxbs.get(0).getJcz();
                                }
                            }
                            yqhbglBjls.setSbid(ctx.channel().id().toString());
                            yqhbglBjls.setSj(new Date());
                            yqhbglBjls.setJcx(sps2[0]);
                            yqhbglBjls.setJclx("1");
                            yqhbglBjls.setYz(yqhbglYzsz1.getYz());
                            yqhbglBjls.setCfz(sp[1]);
                            yqhbglBjls.setCreateTime(new Date());
                            yqhbglBjlsService1.insertYqhbglBjls(yqhbglBjls);
                            /*将烟气报警推送到APP消息通知中心*/
                            String hbglYqMessage ="";
                            AppXxtz appXxtz = new AppXxtz();
                            String s1 = dictJcyzbmbService1.selectDictLabelByDictValue(sps2[0].replaceAll(" ", ""));
                            hbglYqMessage = "烟气异常报警: "+jczname+"于"+dateFormat.format(new Date())+"发生"+s1+"异常报警,请及时进行处置。";
                            for (String userId:strings) {
                                appXxtz.setId(UUID.randomUUID().toString());
                                appXxtz.setJczid(jczid);
                                appXxtz.setUserId(userId);
                                appXxtz.setXxtzsj(new Date());
                                appXxtz.setXxtznr(hbglYqMessage);
                                appXxtz.setSfyd("2");
                                appXxtz.setXxlb("hbycbj");
                                appXxtzService1.insertAppXxtz(appXxtz);
                            }
                        }
                        /*污水报警*/
                        if (sps2[0].contains(yqhbglYzsz1.getJcx())&&sps2[0].contains("w")&&sps2[1].equals("Rtd")&&Integer.parseInt(sp[1])>Integer.parseInt(yqhbglYzsz1.getYz())){
                            yqhbglBjls.setId(UUID.randomUUID().toString());
                            YqhbglJczSb yqhbglJczSb = new YqhbglJczSb();
                            List<YqhbglJczSb> yqhbglJczSbs = yqhbglJczSbService1.selectYqhbglJczSbList(yqhbglJczSb);
                            String jczname = "";
                            String jczid = "";
                            for (YqhbglJczSb y:yqhbglJczSbs) {
                                if (y.getSbId().equals(ctx.channel().id().toString())){
                                    yqhbglBjls.setJczId(y.getJczId());
                                    YqhbglJczxxb yqhbglJczxxb = new YqhbglJczxxb();
                                    yqhbglJczxxb.setJczid(y.getJczId());
                                    jczid = y.getJczId();
                                    List<YqhbglJczxxb> yqhbglJczxxbs = yqhbglJczxxbService1.selectYqhbglJczxxbList(yqhbglJczxxb);
                                    jczname = yqhbglJczxxbs.get(0).getJcz();
                                }
                            }
                            yqhbglBjls.setSbid(ctx.channel().id().toString());
                            yqhbglBjls.setSj(new Date());
                            yqhbglBjls.setJcx(sps2[0]);
                            yqhbglBjls.setJclx("2");
                            yqhbglBjls.setYz(yqhbglYzsz1.getYz());
                            yqhbglBjls.setCfz(sp[1]);
                            yqhbglBjls.setCreateTime(new Date());
                            yqhbglBjlsService1.insertYqhbglBjls(yqhbglBjls);
                            /*将污水报警推送到APP消息通知中心*/
                            String hbglWsMessage ="";
                            AppXxtz appWsXxtz = new AppXxtz();
                            String s1 = dictJcyzbmbService1.selectDictLabelByDictValue(sps2[0].replaceAll(" ", ""));
                            hbglWsMessage = "污水异常报警: "+jczname+"于"+dateFormat.format(new Date())+"发生"+s1+"异常报警,请及时进行处置。";
                            for (String userId:strings) {
                                appWsXxtz.setId(UUID.randomUUID().toString());
                                appWsXxtz.setJczid(jczid);
                                appWsXxtz.setUserId(userId);
                                appWsXxtz.setXxtzsj(new Date());
                                appWsXxtz.setXxtznr(hbglWsMessage);
                                appWsXxtz.setSfyd("2");
                                appWsXxtz.setXxlb("hbycbj");
                                appXxtzService1.insertAppXxtz(appWsXxtz);
                            }
                        }
                    }
                    List<Yqhbgljcsj> yqhbgljcsjs2 = yqhbgljcsjService1.selectYqhbgljcsjList(yqhbgljcsj22);
                    System.out.println(yqhbgljcsjs2.size());
                    if (yqhbgljcsjs2.size()==0){
                        /*System.out.println("第一次插入操作2");*/
                        yqhbgljcsj21.setValue(sp[1]);
                        yqhbgljcsj21.setId(UUID.randomUUID().toString());
                        yqhbgljcsj21.setSbid(ctx.channel().id().toString());
                        yqhbgljcsj21.setSbwybs(substring5);
                        yqhbgljcsj21.setCreateTime(date);
                        yqhbgljcsj21.setJcyzbm(sps2[0]);
                        yqhbgljcsj21.setZdbm(sps2[1]);
                        yqhbgljcsjService1.insertYqhbgljcsj(yqhbgljcsj21);
                    }
                    else{
                        List<Boolean> booleanList = new ArrayList<>();
                        for (Yqhbgljcsj y : yqhbgljcsjs2) {
                            boolean b = y.getSbid().equals(ctx.channel().id().toString()) && y.getJcyzbm().equals(sps2[0]) && y.getZdbm().equals(sps2[1]);
                            if (b){
                                /*System.out.println("执行更新操作2");*/
                                y.setValue(sp[1]);
                                y.setUpdateTime(date);
                                y.getId();
                                yqhbgljcsjService1.updateYqhbgljcsj(y);
                            }else {
                                booleanList.add(b);
                            }
                        }
                        if (booleanList.size()==yqhbgljcsjs2.size()){
                           /* System.out.println("执行插入操作2");*/
                            yqhbgljcsj21.setValue(sp[1]);
                            yqhbgljcsj21.setId(UUID.randomUUID().toString());
                            yqhbgljcsj21.setSbid(ctx.channel().id().toString());
                            yqhbgljcsj21.setSbwybs(substring5);
                            yqhbgljcsj21.setCreateTime(date);
                            yqhbgljcsj21.setJcyzbm(sps2[0]);
                            yqhbgljcsj21.setZdbm(sps2[1]);
                            yqhbgljcsjService1.insertYqhbgljcsj(yqhbgljcsj21);
                            booleanList.clear();
                        }
                    }
                }
            }
        }
    }

    /**
     * HJ212报文转换为标准化的Map
     * @param str HJ212报文
     * @return
     */
    public static Map<String,Object> toMap(String str){
        //字符串截取(从QN开始...)
        String subStr = str.substring(str.indexOf("QN"));
        //替换全部的逗号为分号
        String s = subStr.replaceAll(",", ";");
        //根据&&对报文进行拆分,拆分之后包含三个元素:[基础参数,CP下的详细参数,CRC校验]
        String[] split = s.split("&&");
        //基本参数初始化
        Map<String,Object> map = new HashMap<>();
        //详细参数初始化
        Map<String,Object> childMap = new TreeMap<>();
        //split解析
        String[] split1 = split[0].split(";");
        String[] split2 = split[1].split(";");
        //插入详细参数的值
        for (String s2 : split2) {
            String[] sp = s2.split("=");
            childMap.put(sp[0], sp[1]);
        }
        //插入基本参数的值
        for (String s1 : split1) {
            String[] sp = s1.split("=");
            if (sp.length == 1) {
                map.put(sp[0], childMap);
            } else {
                map.put(sp[0], sp[1]);
            }
        }
        return map;
    }

    /***
     * 超时关闭socket 连接
     */
    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
        if (evt instanceof IdleStateEvent) {
            IdleStateEvent event = (IdleStateEvent) evt;

            String eventType = null;
            switch (event.state()) {
                case READER_IDLE:
                    eventType = "读超时";
                    break;
                case WRITER_IDLE:
                    eventType = "写超时";
                    break;
                case ALL_IDLE:
                    eventType = "读写超时";
                    break;
                default:
                    eventType = "设备超时";
            }
            System.out.println(ctx.channel().id() + " : " + eventType + "---> 关闭该设备");
            ctx.channel().close();
        }
    }

    /**
     * 异常处理, 出现异常关闭channel
     */
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        System.out.println("========= 链接出现异常!exceptionCaught.");
        ctx.fireExceptionCaught(cause);
        // 将通道从deviceInfo中删除
        deviceInfo.remove(ctx.channel().id());
        // 关闭通道链接,节省资源
        ctx.channel().close();
    }

    /**
     * 每加入一个新的链接,保存该通道并写入上线日志。该方法在channelRead方法之前执行
     */
    @Override
    public void handlerAdded(ChannelHandlerContext ctx) {
        // 获取设备ID
        String deviceId = "abc";
        // 将该链接保存到deviceInfo
        deviceInfo.put(ctx.channel().id(), deviceId);
        System.out.println("========= " + ctx.channel().id() + "设备加入链接。");
    }

    /**
     * 每去除一个新的链接,去除该通道并写入下线日志
     */
    @Override
    public void handlerRemoved(ChannelHandlerContext ctx) {
        // 将通道从deviceInfo中删除
        deviceInfo.remove(ctx.channel().id());
        System.out.println("========= " + ctx.channel().id() + "设备断开链接。");
    }

}