Selaa lähdekoodia

修改浊度图片问题

邵洋 1 vuosi sitten
vanhempi
commit
84276071a9

+ 32 - 23
environment-data-service/src/main/java/com/zksy/environment/service/impl/PictureMessageServiceImpl.java

@@ -39,12 +39,27 @@ public class PictureMessageServiceImpl extends ServiceImpl<PictureMessageMapper,
         boolean flag = false;
         try {
             PictureMessage pictureMessage = new PictureMessage();
+            if (dataStr.length() < 8) { // 确保有足够的长度来提取 packageNumberHex
+                log.warn("Data string too short to extract package number: " + dataStr);
+                return false;
+            }
             // 解析数据包
             String SYN = dataStr.substring(0, 2);
             String totalHex = dataStr.substring(2, 5);
             String total = DataCheckUtil.hexToDecimalExample(totalHex);
             String packageNumberHex = dataStr.substring(5, 8);
-            String packageNumber = DataCheckUtil.hexToDecimalExample(packageNumberHex);
+            if (!packageNumberHex.matches("[0-9A-Fa-f]{3}")) {
+                log.warn("Invalid package number hex: " + packageNumberHex);
+                return false;
+            }
+            // 将 packageNumberHex 转换为无符号整数
+            int packageNumber;
+            try {
+                packageNumber = Integer.parseUnsignedInt(packageNumberHex, 16);
+            } catch (NumberFormatException e) {
+                log.error("Failed to parse package number hex: " + packageNumberHex, e);
+                return false;
+            }
 
             // 处理数据包
             String segment;
@@ -99,32 +114,26 @@ public class PictureMessageServiceImpl extends ServiceImpl<PictureMessageMapper,
 
             // 保存数据段
             synchronized (lock) {
-                int index = Integer.parseInt(packageNumber) - 1;
-                // 检查是否所有数据包都已经收到
-                if (Integer.parseInt(packageNumber) == Integer.parseInt(total)) {
-                    // 如果这是最后一个包,则直接处理完整数据
-                } else {
-                    // 初始化 allDataSegments 到正确大小,如果还没有的话
-                    if (allDataSegments.size() < Integer.parseInt(total)) {
-                        synchronized (lock) {
-                            while (allDataSegments.size() < Integer.parseInt(total)) {
-                                allDataSegments.add(null);
-                            }
-                        }
+                int index = packageNumber - 1;
+                // 初始化 allDataSegments 到正确大小,如果还没有的话
+                int totalPackets = Integer.parseInt(total);
+                if (allDataSegments.size() < totalPackets) {
+                    while (allDataSegments.size() < totalPackets) {
+                        allDataSegments.add(null);
                     }
+                }
 
-                    // 确保 index 不会越界
-                    if (index >= 0 && index < allDataSegments.size()) {
-                        allDataSegments.set(index, segment);
-                    } else {
-                        log.warn("Invalid package number: " + packageNumber + ". Index out of bounds: " + index);
-                        return false;
-                    }
+                // 确保 index 不会越界
+                if (index >= 0 && index < allDataSegments.size()) {
+                    allDataSegments.set(index, segment);
+                } else {
+                    log.warn("Invalid package number: " + packageNumber + ". Index out of bounds: " + index);
+                    return false;
                 }
 
-                System.out.println("packageNumber====="+packageNumber+"total====="+total);
+                System.out.println("packageNumber====="+packageNumber+"total====="+totalPackets);
                 // 检查是否所有数据包都已经收到
-                if (Integer.parseInt(packageNumber) == Integer.parseInt(total)) {
+                if (packageNumber == totalPackets) {
                     // 重新组合所有的数据包
                     StringBuilder completeImageDataBuilder = new StringBuilder();
                     for (String segment1 : allDataSegments) {
@@ -137,7 +146,7 @@ public class PictureMessageServiceImpl extends ServiceImpl<PictureMessageMapper,
                     System.out.println("图片集合:" + completeImageData);
                     File image = HexToImageConverter.hexStringToImage(completeImageData, "output.png");
 
-                    if(ObjectUtils.isNotEmpty(image)){
+                    if (image != null) {
                         String filePath = minioFileStorageService.uploadFileByFile(image, "environment-image");
                         // 设置完整的消息
                         pictureMessage.setMessage(filePath);