|
|
@@ -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);
|