|
@@ -121,25 +121,32 @@ public class WeighbridgeRecordManage {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 处理地磅过磅数据上报V2(使用MultipartFile图片)
|
|
|
|
|
+ */
|
|
|
public LicensePlateValidateResponse handleWeighbridgePushV2(WeighbridgePushRequest request) {
|
|
public LicensePlateValidateResponse handleWeighbridgePushV2(WeighbridgePushRequest request) {
|
|
|
- log.info("处理地磅数据上报 - 车牌:{}, 地磅编号:{}, 重量:{}, 时间戳:{},图片:{}",
|
|
|
|
|
|
|
+ log.info("处理地磅数据上报V2 - 车牌:{}, 地磅编号:{}, 重量:{}, 时间戳:{},图片数量:{}",
|
|
|
request.getLicensePlate(),
|
|
request.getLicensePlate(),
|
|
|
request.getWeighbridgeCode(),
|
|
request.getWeighbridgeCode(),
|
|
|
request.getGrossWeight(),
|
|
request.getGrossWeight(),
|
|
|
request.getTimestamp(),
|
|
request.getTimestamp(),
|
|
|
- JSON.toJSONString(request.getImages()));
|
|
|
|
|
|
|
+ request.getImages() != null ? request.getImages().length : 0);
|
|
|
|
|
+
|
|
|
LicensePlateValidateResponse licensePlateValidateResponse = new LicensePlateValidateResponse();
|
|
LicensePlateValidateResponse licensePlateValidateResponse = new LicensePlateValidateResponse();
|
|
|
- if (StringUtils.isAnyBlank(request.getLicensePlate(), request.getWeighbridgeCode()) || Objects.isNull(request.getGrossWeight()) || Objects.isNull(request.getTimestamp())) {
|
|
|
|
|
|
|
+ if (StringUtils.isAnyBlank(request.getLicensePlate(), request.getWeighbridgeCode())
|
|
|
|
|
+ || Objects.isNull(request.getGrossWeight()) || Objects.isNull(request.getTimestamp())) {
|
|
|
return getLicensePlateValidateResponse(request, licensePlateValidateResponse);
|
|
return getLicensePlateValidateResponse(request, licensePlateValidateResponse);
|
|
|
}
|
|
}
|
|
|
- //查询车牌是否在验证列表中
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 查询车牌是否在验证列表中
|
|
|
ValidateLicensePlate validateLicensePlate = validateLicensePlateService.queryByLicensePlate(request.getLicensePlate());
|
|
ValidateLicensePlate validateLicensePlate = validateLicensePlateService.queryByLicensePlate(request.getLicensePlate());
|
|
|
try {
|
|
try {
|
|
|
// 构建实体对象
|
|
// 构建实体对象
|
|
|
WeighbridgeRecord record = buildYsWeighbridgeRecord(request);
|
|
WeighbridgeRecord record = buildYsWeighbridgeRecord(request);
|
|
|
- if(Objects.isNull(validateLicensePlate)){
|
|
|
|
|
|
|
+ if (Objects.isNull(validateLicensePlate)) {
|
|
|
record.setCheckStatus(1);
|
|
record.setCheckStatus(1);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
// 保存到数据库
|
|
// 保存到数据库
|
|
|
boolean saved = weighbridgeRecordService.save(record);
|
|
boolean saved = weighbridgeRecordService.save(record);
|
|
|
LambdaQueryWrapper<KwsWeighbridge> wrapper = Wrappers.<KwsWeighbridge>lambdaQuery()
|
|
LambdaQueryWrapper<KwsWeighbridge> wrapper = Wrappers.<KwsWeighbridge>lambdaQuery()
|
|
@@ -150,19 +157,19 @@ public class WeighbridgeRecordManage {
|
|
|
Long entId = Optional.ofNullable(kwsWeighbridge)
|
|
Long entId = Optional.ofNullable(kwsWeighbridge)
|
|
|
.map(KwsWeighbridge::getEntId)
|
|
.map(KwsWeighbridge::getEntId)
|
|
|
.orElse(null);
|
|
.orElse(null);
|
|
|
|
|
+
|
|
|
if (saved) {
|
|
if (saved) {
|
|
|
- // 异步处理图片上传
|
|
|
|
|
- updateBase64ImageUrls(request, record);
|
|
|
|
|
|
|
+ // 异步处理图片上传(改为处理MultipartFile)
|
|
|
|
|
+ updateImageUrlsV2(request, record);
|
|
|
|
|
+
|
|
|
licensePlateValidateResponse.setStatus(true);
|
|
licensePlateValidateResponse.setStatus(true);
|
|
|
licensePlateValidateResponse.setCode(200);
|
|
licensePlateValidateResponse.setCode(200);
|
|
|
licensePlateValidateResponse.setMessage("数据上报成功");
|
|
licensePlateValidateResponse.setMessage("数据上报成功");
|
|
|
LicensePlateValidateResponse.Data data = new LicensePlateValidateResponse.Data();
|
|
LicensePlateValidateResponse.Data data = new LicensePlateValidateResponse.Data();
|
|
|
String timestampStr = request.getTimestamp().toString();
|
|
String timestampStr = request.getTimestamp().toString();
|
|
|
if (timestampStr.length() == 10) {
|
|
if (timestampStr.length() == 10) {
|
|
|
- // 秒级时间戳
|
|
|
|
|
data.setTimestamp(request.getTimestamp());
|
|
data.setTimestamp(request.getTimestamp());
|
|
|
} else if (timestampStr.length() == 13) {
|
|
} else if (timestampStr.length() == 13) {
|
|
|
- // 毫秒级时间戳
|
|
|
|
|
long l = request.getTimestamp() / 1000;
|
|
long l = request.getTimestamp() / 1000;
|
|
|
data.setTimestamp(l);
|
|
data.setTimestamp(l);
|
|
|
}
|
|
}
|
|
@@ -170,6 +177,7 @@ public class WeighbridgeRecordManage {
|
|
|
data.setVoice_message("数据上报成功");
|
|
data.setVoice_message("数据上报成功");
|
|
|
licensePlateValidateResponse.setData(data);
|
|
licensePlateValidateResponse.setData(data);
|
|
|
log.info("地磅数据保存成功 - ID: {}, 车牌: {}", record.getId(), record.getLicensePlate());
|
|
log.info("地磅数据保存成功 - ID: {}, 车牌: {}", record.getId(), record.getLicensePlate());
|
|
|
|
|
+
|
|
|
record.setEntId(entId);
|
|
record.setEntId(entId);
|
|
|
externalWeighbridgePushService.pushWeighbridgeRecord(record);
|
|
externalWeighbridgePushService.pushWeighbridgeRecord(record);
|
|
|
WeighbridgeRecord weighbridgeRecord = new WeighbridgeRecord();
|
|
WeighbridgeRecord weighbridgeRecord = new WeighbridgeRecord();
|
|
@@ -181,18 +189,22 @@ public class WeighbridgeRecordManage {
|
|
|
log.error("地磅数据保存失败 - 车牌: {}", request.getLicensePlate());
|
|
log.error("地磅数据保存失败 - 车牌: {}", request.getLicensePlate());
|
|
|
return getLicensePlateValidateResponse(request, licensePlateValidateResponse);
|
|
return getLicensePlateValidateResponse(request, licensePlateValidateResponse);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("地磅数据上报处理异常", e);
|
|
log.error("地磅数据上报处理异常", e);
|
|
|
return getLicensePlateValidateResponse(request, licensePlateValidateResponse);
|
|
return getLicensePlateValidateResponse(request, licensePlateValidateResponse);
|
|
|
- //throw new IotException(ErrorCodeEnum.SYSTEM_ERROR, "地磅数据上报异常: " + e.getMessage());
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 异步处理MultipartFile图片上传(V2版本)
|
|
|
|
|
+ */
|
|
|
|
|
+ private void updateImageUrlsV2(WeighbridgePushRequest request, WeighbridgeRecord record) {
|
|
|
|
|
+ log.info("[地磅图片保存V2]开始保存地磅图片,图片数量: {}",
|
|
|
|
|
+ request.getImages() != null ? request.getImages().length : 0);
|
|
|
|
|
|
|
|
- private void updateImageUrls(WeighbridgePushRequest request, WeighbridgeRecord record) {
|
|
|
|
|
if (request.getImages() != null && request.getImages().length > 0) {
|
|
if (request.getImages() != null && request.getImages().length > 0) {
|
|
|
log.info("开始处理 {} 张图片上传,车牌号: {}", request.getImages().length, request.getLicensePlate());
|
|
log.info("开始处理 {} 张图片上传,车牌号: {}", request.getImages().length, request.getLicensePlate());
|
|
|
|
|
+
|
|
|
// 将MultipartFile数组转换为字节数组,防止异步处理时临时文件被清理
|
|
// 将MultipartFile数组转换为字节数组,防止异步处理时临时文件被清理
|
|
|
List<byte[]> imageBytesList = new ArrayList<>();
|
|
List<byte[]> imageBytesList = new ArrayList<>();
|
|
|
for (MultipartFile image : request.getImages()) {
|
|
for (MultipartFile image : request.getImages()) {
|
|
@@ -202,13 +214,14 @@ public class WeighbridgeRecordManage {
|
|
|
log.error("读取图片文件失败,车牌号: {}", request.getLicensePlate(), e);
|
|
log.error("读取图片文件失败,车牌号: {}", request.getLicensePlate(), e);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 调用现有的异步上传方法
|
|
|
uploadService.processImageFilesAsync(imageBytesList, request.getLicensePlate())
|
|
uploadService.processImageFilesAsync(imageBytesList, request.getLicensePlate())
|
|
|
.thenAccept(photoUrls -> {
|
|
.thenAccept(photoUrls -> {
|
|
|
log.info("图片上传完成,车牌号: {},照片数量: {}", request.getLicensePlate(),
|
|
log.info("图片上传完成,车牌号: {},照片数量: {}", request.getLicensePlate(),
|
|
|
photoUrls != null ? photoUrls.split(",").length : 0);
|
|
photoUrls != null ? photoUrls.split(",").length : 0);
|
|
|
record.setPhotoUrls(photoUrls);
|
|
record.setPhotoUrls(photoUrls);
|
|
|
- // 更新数据库中的图片URL
|
|
|
|
|
- updatePhotoUrls(record.getId(), photoUrls,record.getLicensePlate());
|
|
|
|
|
|
|
+ updatePhotoUrls(record.getId(), photoUrls, record.getLicensePlate());
|
|
|
})
|
|
})
|
|
|
.exceptionally(throwable -> {
|
|
.exceptionally(throwable -> {
|
|
|
log.error("异步上传图片失败,车牌号: {}", request.getLicensePlate(), throwable);
|
|
log.error("异步上传图片失败,车牌号: {}", request.getLicensePlate(), throwable);
|
|
@@ -217,24 +230,52 @@ public class WeighbridgeRecordManage {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private void updateBase64ImageUrls(WeighbridgePushRequest request, WeighbridgeRecord record) {
|
|
|
|
|
- log.info("[地磅图片保存]开始保存地磅图片,request:{}, record:{}", JSON.toJSONString(request), JSON.toJSONString(record));
|
|
|
|
|
- if (request.getBase64Images() != null && !request.getBase64Images().isEmpty()) {
|
|
|
|
|
- log.info("开始处理 {} 张Base64图片保存,车牌号: {}", request.getBase64Images().size(), request.getLicensePlate());
|
|
|
|
|
- uploadService.processBase64ImagesToLocalAsync(request.getBase64Images(), request.getLicensePlate())
|
|
|
|
|
|
|
+
|
|
|
|
|
+ private void updateImageUrls(WeighbridgePushRequest request, WeighbridgeRecord record) {
|
|
|
|
|
+ if (request.getImages() != null && request.getImages().length > 0) {
|
|
|
|
|
+ log.info("开始处理 {} 张图片上传,车牌号: {}", request.getImages().length, request.getLicensePlate());
|
|
|
|
|
+ // 将MultipartFile数组转换为字节数组,防止异步处理时临时文件被清理
|
|
|
|
|
+ List<byte[]> imageBytesList = new ArrayList<>();
|
|
|
|
|
+ for (MultipartFile image : request.getImages()) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ imageBytesList.add(image.getBytes());
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ log.error("读取图片文件失败,车牌号: {}", request.getLicensePlate(), e);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ uploadService.processImageFilesAsync(imageBytesList, request.getLicensePlate())
|
|
|
.thenAccept(photoUrls -> {
|
|
.thenAccept(photoUrls -> {
|
|
|
- log.info("Base64图片保存完成,车牌号: {},照片数量: {}", request.getLicensePlate(),
|
|
|
|
|
|
|
+ log.info("图片上传完成,车牌号: {},照片数量: {}", request.getLicensePlate(),
|
|
|
photoUrls != null ? photoUrls.split(",").length : 0);
|
|
photoUrls != null ? photoUrls.split(",").length : 0);
|
|
|
record.setPhotoUrls(photoUrls);
|
|
record.setPhotoUrls(photoUrls);
|
|
|
- updatePhotoUrls(record.getId(), photoUrls, request.getLicensePlate());
|
|
|
|
|
|
|
+ // 更新数据库中的图片URL
|
|
|
|
|
+ updatePhotoUrls(record.getId(), photoUrls,record.getLicensePlate());
|
|
|
})
|
|
})
|
|
|
.exceptionally(throwable -> {
|
|
.exceptionally(throwable -> {
|
|
|
- log.error("异步保存Base64图片失败,车牌号: {}", request.getLicensePlate(), throwable);
|
|
|
|
|
|
|
+ log.error("异步上传图片失败,车牌号: {}", request.getLicensePlate(), throwable);
|
|
|
return null;
|
|
return null;
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// private void updateBase64ImageUrls(WeighbridgePushRequest request, WeighbridgeRecord record) {
|
|
|
|
|
+// log.info("[地磅图片保存]开始保存地磅图片,request:{}, record:{}", JSON.toJSONString(request), JSON.toJSONString(record));
|
|
|
|
|
+// if (request.getBase64Images() != null && !request.getBase64Images().isEmpty()) {
|
|
|
|
|
+// log.info("开始处理 {} 张Base64图片保存,车牌号: {}", request.getBase64Images().size(), request.getLicensePlate());
|
|
|
|
|
+// uploadService.processBase64ImagesToLocalAsync(request.getBase64Images(), request.getLicensePlate())
|
|
|
|
|
+// .thenAccept(photoUrls -> {
|
|
|
|
|
+// log.info("Base64图片保存完成,车牌号: {},照片数量: {}", request.getLicensePlate(),
|
|
|
|
|
+// photoUrls != null ? photoUrls.split(",").length : 0);
|
|
|
|
|
+// record.setPhotoUrls(photoUrls);
|
|
|
|
|
+// updatePhotoUrls(record.getId(), photoUrls, request.getLicensePlate());
|
|
|
|
|
+// })
|
|
|
|
|
+// .exceptionally(throwable -> {
|
|
|
|
|
+// log.error("异步保存Base64图片失败,车牌号: {}", request.getLicensePlate(), throwable);
|
|
|
|
|
+// return null;
|
|
|
|
|
+// });
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+
|
|
|
private static LicensePlateValidateResponse getLicensePlateValidateResponse(WeighbridgePushRequest request, LicensePlateValidateResponse licensePlateValidateResponse) {
|
|
private static LicensePlateValidateResponse getLicensePlateValidateResponse(WeighbridgePushRequest request, LicensePlateValidateResponse licensePlateValidateResponse) {
|
|
|
|
|
|
|
|
licensePlateValidateResponse.setStatus(false);
|
|
licensePlateValidateResponse.setStatus(false);
|