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() + "设备断开链接。");
} }

Java解析HJ212环保报文的更多相关文章

  1. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  2. atitit.java解析sql语言解析器解释器的实现

    atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...

  3. java 解析XML文档

    Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...

  4. Java 解析 XML

    Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...

  5. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  6. JSON 之JAVA 解析

    一.   JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. Json建构于两种结构:     1.“名称/值”对的集合(A collection ...

  7. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  8. Java 解析epub格式电子书,helloWorld程序,附带源程序和相关jar包

    秀才坤坤出品 一.epub格式电子书 相关材料和源码均在链接中可以下载:http://pan.baidu.com/s/1bnm8YXT 包括 1.JAVA项目工程test_epub,里面包括了jar包 ...

  9. Java解析XML文档(简单实例)——dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

  10. 【Java】详解Java解析XML的四种方法

    XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法. AD: XML现在已经成为一种通用的数据交换格式,它的平台无关性,语 ...

随机推荐

  1. windows11系统NVIDIA显卡驱动自动升级导致2070 Super显卡失效 —— 552.22版本自动升级到560.70版本后2070 Super型号显卡停止工作

    操作系统 Windows11,旧版本显卡驱动是552.22,由于安装的是NVIDIA Geforce Experience后显卡驱动自动升级到560.77版本,然后显卡不再工作. 重新安装显卡驱动56 ...

  2. 解决Python使用matplotlib绘图时出现的中文乱码问题

    原文地址: https://blog.csdn.net/qq_33254766/article/details/120304721 全文略,详细见原文. 解决方法: # 设置字体的属性 # plt.r ...

  3. Tensorflow1.14中placeholder.shape和tf.shape(placeholder)的区别

    最近在看TensorFlow的代码,还是1.14版本的TensorFlow的,代码难度确实比pytorch的难上不是多少倍,pytorch的代码看一遍基本能看懂个差不多,TensorFlow的代码看一 ...

  4. 最新版gym-0.26.2下Atari环境的安装以及环境版本v0,v4,v5的说明

    强化学习的游戏仿真环境可以分为连续控制和非连续控制两类,其中连续控制的以mujoco为主,而非连续控制的以Atari游戏为主,本文对gym下的Atari环境的游戏环境版本进行一定的介绍. 参考:[转载 ...

  5. 记录一次实验室linux系统的GPU服务器死机故障的排查——Linux系统的Power States

    实验室的ubuntu服务器不知怎么的突然又崩溃了,死机重启,然后查看日志,发现了下面的情况: 由于从其他的日志中知道是显卡的问题引起的死机,而这个显卡的地址正好是D9:00,这部分的日志就不给出了.结 ...

  6. 【牛客刷题】HJ4 字符串分隔

    题目链接 这个题目本身基本上是对语言熟悉程度的考察,没有什么别的逻辑可言: package main import ( "fmt" "strings" ) fu ...

  7. 在程序里面执行system(“cd /某个目录“),为什么路径切换不成功?

    粉丝提问: 彭老师,问下,在程序里面执行system("cd /某个目录"),这样会切换不成功,为啥呢 实例代码: 粉丝的疑惑是明明第10行执行了cd /media操作, 为什么1 ...

  8. Cookie,Session Filter,Listener详解

    HTTP请求的无状态性 HTTP的无状态性是其一个重要的特征,指的是HTTP协议本身并不保留客户端与服务器交互的历史信息,换而言之,即每次的HTTP请求都是独立的,服务器在处理每一个请求时都不会记住前 ...

  9. Cloud Studio:颠覆传统的云端开发与学习解决方案

    Cloud Studio Cloud Studio(云端 IDE)是一款基于浏览器的集成开发环境,它为开发者提供了一个高效.稳定的云端工作站.用户在使用 Cloud Studio 时,无需进行任何本地 ...

  10. DOM & BOM – Input File, Drag & Drop File, File Reader, Blob, ArrayBuffer, File, UTF-8 Encode/Decode, Download File

    前言 之前写过 2 篇关于读写文件和二进制相关的文章 Bit, Byte, ASCII, Unicode, UTF, Base64 和 ASP.NET Core – Byte, Stream, Dir ...