邵洋 1 rok pred
rodič
commit
676eb980fc

+ 66 - 2
environment-data-service/src/main/java/com/zksy/environment/utils/MonitorDatasynch.java

@@ -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("==========数据长度格式不正确==========");