|
|
@@ -84,10 +84,74 @@ public class MonitorDatasynch {
|
|
|
log.info("新增失败", oldDataStr);
|
|
|
}
|
|
|
} else {
|
|
|
- log.info("收到数据========", oldDataStr);
|
|
|
+ log.info("收到2f数据========", oldDataStr);
|
|
|
}
|
|
|
}else {
|
|
|
- log.info("==========数据解包校验不正确==========");
|
|
|
+ /**
|
|
|
+ * 图片数据第一条分段接收的问题进行合并
|
|
|
+ */
|
|
|
+ //开始符
|
|
|
+ String startCharacter = oldDataStr.substring(0, 4);
|
|
|
+ //结束符
|
|
|
+ // 获取字符串的长度
|
|
|
+ int length = oldDataStr.length();
|
|
|
+
|
|
|
+ // 计算倒数第5位和第6位的位置
|
|
|
+ int pos5 = length - 5;
|
|
|
+ int pos6 = length - 6;
|
|
|
+
|
|
|
+ // 截取倒数第5位到倒数第6位的子字符串
|
|
|
+ String subStr = oldDataStr.substring(pos6, pos5 + 1);
|
|
|
+ if(!"7E7E".equals(startCharacter) || !"17".equals(subStr)) {
|
|
|
+ // 将不完整数据存入data1List
|
|
|
+ synchronized (lock) {
|
|
|
+ data1List.add(oldDataStr);
|
|
|
+ }
|
|
|
+ StringBuilder dataBuilder = new StringBuilder();
|
|
|
+ if (data1List.size() >= 2) {
|
|
|
+ for (String data : data1List) {
|
|
|
+ dataBuilder.append(data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (dataBuilder != null && dataBuilder.length() > 6) {
|
|
|
+ //开始符
|
|
|
+ String dataBuilderStartCharacter = dataBuilder.substring(0, 4);
|
|
|
+ // 获取字符串的长度
|
|
|
+ int dataLength = dataBuilder.length();
|
|
|
+ // 计算倒数第5位和第6位的位置
|
|
|
+ int dataPos5 = dataLength - 5;
|
|
|
+ int dataPos6 = dataLength - 6;
|
|
|
+ // 截取倒数第5位到倒数第6位的子字符串
|
|
|
+ String dataSubStr = dataBuilder.substring(dataPos6, dataPos5 + 1);
|
|
|
+ if (!"7E7E".equals(dataBuilderStartCharacter) && !"17".equals(dataSubStr)) {
|
|
|
+ return response;
|
|
|
+ } else {
|
|
|
+ oldDataStr = dataBuilder.toString();
|
|
|
+ System.out.println("组合不完整数据dataBuilder======" + dataBuilder);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 获取报文特征
|
|
|
+ String dataType = oldDataStr.substring(20, 22);
|
|
|
+
|
|
|
+ // 获取检验码数据
|
|
|
+ String codeStrBuilder = oldDataStr.substring(0, oldDataStr.length() - 4);
|
|
|
+ // 获取数据CRC16检验码
|
|
|
+ String codeBuilder = oldDataStr.substring(oldDataStr.length() - 4);
|
|
|
+
|
|
|
+ // 通过数据生成CRC16校验码
|
|
|
+ String nowCodeBuilder = DataCheckUtil.getCRC16Result(codeStrBuilder);
|
|
|
+ if(codeBuilder.equalsIgnoreCase(nowCodeBuilder)) {
|
|
|
+ if ("36".equals(dataType)) {
|
|
|
+ // 获取数据正文
|
|
|
+ String dataStr = oldDataStr.substring(26, oldDataStr.length() - 6);
|
|
|
+ log.info("数据主体正文:" + dataStr);
|
|
|
+ pictureMessageService.savePictureMessage(oldDataStr, dataStr);
|
|
|
+ data1List.clear();
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ log.info("==========数据解包校验不正确==========");
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
log.info("==========数据长度格式不正确==========");
|