From 52086dbea4fad95b53ae3490da878e9a0e71cbd4 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 18 Jul 2025 14:21:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=94=AF=E6=8C=81=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/controller/viid/ViidController.java | 43 +++++++++++-------- .../pc/device/entity/DeviceConfigEntity.java | 20 ++++++--- .../pc/device/entity/DeviceCropConfig.java | 2 +- 3 files changed, 39 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/ycwl/basic/controller/viid/ViidController.java b/src/main/java/com/ycwl/basic/controller/viid/ViidController.java index b21f9d2..aa0deed 100644 --- a/src/main/java/com/ycwl/basic/controller/viid/ViidController.java +++ b/src/main/java/com/ycwl/basic/controller/viid/ViidController.java @@ -69,7 +69,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import static com.ycwl.basic.constant.StorageConstant.PHOTO_PATH; import static com.ycwl.basic.constant.StorageConstant.VIID_FACE; @@ -298,9 +297,11 @@ public class ViidController { for (SubImageInfoObject subImage : subImageList.getSubImageInfoObject()) { // base64转换成MultipartFIle MultipartFile file = ImageUtils.base64ToMultipartFile(subImage.getData()); - String ext = subImage.getFileFormat(); - if (ext.equalsIgnoreCase("jpeg")) { + String ext; + if (subImage.getFileFormat().equalsIgnoreCase("jpeg")) { ext = "jpg"; + } else { + ext = subImage.getFileFormat(); } IStorageAdapter adapter = StorageFactory.use("faces"); // Type=11 人脸 @@ -337,7 +338,6 @@ public class ViidController { facePosition.setImgHeight(_subImage.getHeight()); facePosition.setImgWidth(_subImage.getWidth()); SourceEntity source = new SourceEntity(); - source.setId(SnowFlakeUtil.getLongId()); source.setDeviceId(device.getId()); source.setScenicId(device.getScenicId()); source.setFaceSampleId(newFaceSampleId); @@ -345,37 +345,42 @@ public class ViidController { source.setType(2); // 上传oss MultipartFile _file = ImageUtils.base64ToMultipartFile(_subImage.getData()); - String filename = StorageUtil.joinPath(PHOTO_PATH, UUID.randomUUID() + "." + ext); ThreadPoolExecutor executor = getExecutor(scenicId); executor.execute(() -> { - DeviceCropConfig cropConfig = deviceConfig.getCropConfig(); - MultipartFile _finalFile = _file; - if (cropConfig != null) { + List cropConfigs = deviceConfig._getCropConfig(); + for (DeviceCropConfig cropConfig : cropConfigs) { + source.setId(SnowFlakeUtil.getLongId()); + String filename = StorageUtil.joinPath(PHOTO_PATH, UUID.randomUUID() + "." + ext); + MultipartFile _finalFile = _file; if (cropConfig.getCropType() == 1) { // 按固定位置截图 try { _finalFile = ImageUtils.cropImage(_file, cropConfig.getTargetX(), cropConfig.getTargetY(), cropConfig.getTargetWidth(), cropConfig.getTargetHeight()); - } catch (IOException ignored) { - } catch (RasterFormatException ignored) { + } catch (IOException e) { + log.error("裁切图片失败!", e); + } catch (RasterFormatException e) { + log.error("裁切图片出错!", e); } } else if (cropConfig.getCropType() == 2) { // 按人脸位置 try { - int targetX = facePosition.getLtX() - (cropConfig.getTargetWidth() - facePosition.getWidth()); - int targetY = facePosition.getLtY() - (cropConfig.getTargetHeight() - facePosition.getHeight()); + int targetX = facePosition.getLtX() - (cropConfig.getTargetWidth() - facePosition.getWidth())/2; + int targetY = facePosition.getLtY() - (cropConfig.getTargetHeight() - facePosition.getHeight())/2; _finalFile = ImageUtils.cropImage(_file, targetX, targetY, cropConfig.getTargetWidth(), cropConfig.getTargetHeight()); - } catch (IOException ignored) { - } catch (RasterFormatException ignored) { + } catch (IOException e) { + log.error("裁切图片失败!", e); + } catch (RasterFormatException e) { + log.error("裁切图片出错!", e); } facePosition.setImgHeight(cropConfig.getTargetHeight()); facePosition.setImgWidth(cropConfig.getTargetWidth()); } + String _sourceUrl = scenicStorageAdapter.uploadFile(_finalFile, filename); + scenicStorageAdapter.setAcl(StorageAcl.PUBLIC_READ, filename); + source.setUrl(_sourceUrl); + source.setPosJson(JSON.toJSONString(facePosition)); + sourceMapper.add(source); } - String _sourceUrl = scenicStorageAdapter.uploadFile(_finalFile, filename); - scenicStorageAdapter.setAcl(StorageAcl.PUBLIC_READ, filename); - source.setUrl(_sourceUrl); - source.setPosJson(JSON.toJSONString(facePosition)); - sourceMapper.add(source); }); } log.info("人脸信息及原图{}张入库成功!设备ID:{}", type14ImageList.size(), deviceID); diff --git a/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceConfigEntity.java b/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceConfigEntity.java index c4d834b..bd6b623 100644 --- a/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceConfigEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceConfigEntity.java @@ -4,9 +4,12 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; +import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; +import java.util.Collections; import java.util.Date; +import java.util.List; @Data @TableName("device_config") @@ -65,11 +68,16 @@ public class DeviceConfigEntity { private String videoCrop; private String cropConfig; - public void setCropConfig(DeviceCropConfig cropConfig) { - this.cropConfig = JSON.toJSONString(cropConfig); - } - - public DeviceCropConfig getCropConfig() { - return JSON.parseObject(cropConfig, DeviceCropConfig.class); + public List _getCropConfig() { + if (cropConfig == null || cropConfig.isEmpty()) { + return Collections.singletonList(new DeviceCropConfig()); + } + if (StringUtils.startsWith(cropConfig, "{")) { + return Collections.singletonList(JSON.parseObject(cropConfig, DeviceCropConfig.class)); + } + if (StringUtils.startsWith(cropConfig, "[")) { + return JSON.parseArray(cropConfig, DeviceCropConfig.class); + } + return Collections.singletonList(new DeviceCropConfig()); } } diff --git a/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceCropConfig.java b/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceCropConfig.java index e7e4f77..6784908 100644 --- a/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceCropConfig.java +++ b/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceCropConfig.java @@ -5,7 +5,7 @@ import lombok.Data; @Data public class DeviceCropConfig { // 截图类型 0:无截图 1:固定截图 2:按人脸位置截图 - private Integer cropType; + private int cropType; private Integer targetWidth; private Integer targetHeight; private Integer targetX;