| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- package com.zksy.environmentHJ212.utils;
- import com.zksy.environmentHJ212.domain.po.MinuteDataInfo;
- import com.zksy.environmentHJ212.domain.po.PsMonitorSz;
- import com.zksy.environmentHJ212.service.MinuteDataInfoService;
- import com.zksy.environmentHJ212.service.PsMonitorSzService;
- import io.netty.channel.ChannelHandlerContext;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Scope;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.net.InetSocketAddress;
- import java.time.LocalDateTime;
- import java.util.*;
- import java.util.regex.Pattern;
- import java.util.stream.Collectors;
- import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE;
- /**
- * @Description
- * @Date 2021- 06-01-下午 14:37
- * @auther Javen
- */
- @Service
- @Slf4j
- @Scope(SCOPE_PROTOTYPE)
- public class MonitorDatasynch {
- private final PsMonitorSzService psMonitorSzService;
- private final MinuteDataInfoService minuteDataInfoService;
- @Autowired
- public MonitorDatasynch(PsMonitorSzService psMonitorSzService, MinuteDataInfoService minuteDataInfoService) {
- this.psMonitorSzService = psMonitorSzService;
- this.minuteDataInfoService = minuteDataInfoService;
- }
- private static LinkedHashMap<String, String> fieldMap = new LinkedHashMap<>();
- static {
- fieldMap.put("a01001", "TEMP");// 温度
- fieldMap.put("a01002", "HUMIDITY");// 湿度
- fieldMap.put("DataTime", "SAMPLETIME");// 采样时间
- fieldMap.put("CN", "CN");// 命令编码
- fieldMap.put("ST", "ST");// 系统编码
- fieldMap.put("MN", "MN");// 设备唯一标志
- }
- /**
- * 获取水质同步数据,数据有效性校验,解析
- */
- public String pushMonitorData(ChannelHandlerContext channelHandlerContext, String oldDataStr){
- log.info("==========接收到数据:" + oldDataStr + "==========");
- MinuteDataInfo monitordata = null;
- String response = null;
- if (oldDataStr.length() > 6) {
- String lenstr = oldDataStr.substring(2, 6);
- // 获取数据长度
- int codeLen = Integer.parseInt(lenstr);
- log.info("数据主体长度:" + codeLen);
- // 获取数据正文
- String dataStr = oldDataStr.substring(6, oldDataStr.length()-6);
- log.info("数据主体正文:" + dataStr);
- // 获取数据CRC16检验码
- String code = oldDataStr.substring(oldDataStr.length()-6, oldDataStr.length()-2);
- log.info(code);
- // 通过数据生成CRC16校验码
- String nowCode = DataCheckUtil.crc16_Checkout(dataStr, codeLen);
- log.info("==========自带的验证码:" + code + "新生成的验证码:" + nowCode);
- // 前后crc16校验码比对(true-数据传输无问题,false-数据传输出现问题)
- if (code.equals(nowCode)) {
- try {
- String[] dataArr = dataStr.split(";");
- List<String> collect = Arrays.asList(dataArr).stream().filter(item -> item.contains("CN=")).collect(Collectors.toList());
- String cn = "";
- if (collect != null && collect.size() > 0) {
- cn = collect.get(0);
- }
- // 判断是实时数据(2011)
- if ("2011".equals(cn.substring(3))) {
- String host = ((InetSocketAddress)channelHandlerContext.channel().remoteAddress()).getAddress().getHostAddress();
- int port = ((InetSocketAddress)channelHandlerContext.channel().remoteAddress()).getPort();
- String ipPort = host+":"+port;
- List<PsMonitorSz> psMonitorSzList = psMonitorSzService.pushMonitorData(oldDataStr,dataArr,ipPort);
- psMonitorSzService.saveBatch(psMonitorSzList);
- } else if ("2051".equals(cn.substring(3)) || "2061".equals(cn.substring(3))){
- //分钟,小时数据
- minuteDataInfoService.saveMonitordata(oldDataStr,dataArr);
- }else{
- System.err.println("报警"+oldDataStr);
- }
- } catch (Exception e) {
- log.info("==========数据解析错误==========", oldDataStr);
- e.printStackTrace();
- }
- } else {
- log.info("==========数据传输错误,验证不匹配==========", oldDataStr);
- }
- } else {
- log.info("==========数据长度格式不正确==========");
- }
- return response;
- }
- public static List<MinuteDataInfo> minuteDataInfoData(String oldDataStr,String[] dataArr) {
- ArrayList<String> arrayList = new ArrayList<>();
- List<MinuteDataInfo> minuteDataInfolist = new ArrayList<>();
- for (String param : dataArr) {
- System.out.println("param = " + param);
- String String = "&&";
- boolean contains = param.contains(String);
- if (contains) {
- param = param.replace(String, ",");
- }
- if (param.contains(",")) {
- arrayList.add(param);
- }
- }
- ArrayList<String> objects = new ArrayList<>();
- for (String entity : arrayList) {
- String substring = null;
- if (entity.contains("-")) {
- substring = entity.substring(0, entity.indexOf("-"));
- }
- if (StringUtils.isBlank(substring)) {
- continue;
- }
- if (entity.startsWith(substring)) {
- objects.add(substring);
- String[] split = entity.split(",");
- MinuteDataInfo minuteDataInfo = new MinuteDataInfo();
- minuteDataInfo.setRemark(oldDataStr);
- for (String parameters : split) {
- String[] split1 = parameters.split("=");
- minuteDataInfo.setCode(substring);
- if (parameters.startsWith(substring + "-Cou=")) {
- minuteDataInfo.setDataCouValue(new BigDecimal(split1[1]));
- }
- if (parameters.startsWith(substring + "-Min=")) {
- minuteDataInfo.setDataMinValue(new BigDecimal(split1[1]));
- }
- if (parameters.startsWith(substring + "-Avg=")) {
- minuteDataInfo.setDataAvgValue(new BigDecimal(split1[1]));
- }
- if (parameters.startsWith(substring + "-Max=")) {
- minuteDataInfo.setDataMaxValue(new BigDecimal(split1[1]));
- }
- if (parameters.startsWith(substring + "-Flag=")) {
- minuteDataInfo.setDataFlag(split1[1]);
- }
- minuteDataInfo.setCreateTime(LocalDateTime.now());
- minuteDataInfo.setId(UUID.randomUUID().toString().replace("-", ""));
- for (String comParams : dataArr) {
- if (comParams.contains("&&") && !comParams.contains(",")) {
- String replace = comParams.replace("&&", ",");
- String[] split2 = replace.split(",");
- if (split2.length>1) {
- String dateString = split2[1];
- if (dateString.startsWith("DataTime=")) {
- minuteDataInfo.setDataTime(DateTimeUtil.parseDateTime(dateString.split("=")[1]));
- }
- }
- }
- String[] comsplit1 = comParams.split("=");
- String paraname = comsplit1[0];
- String value = comsplit1[1];
- if (paraname.equals("MN")) {
- minuteDataInfo.setMn(value);
- }
- if (paraname.equals("Flag")) {
- minuteDataInfo.setFlag(value);
- }
- }
- }
- minuteDataInfolist.add(minuteDataInfo);
- }
- }
- return minuteDataInfolist;
- }
- }
|