From 939aeaaabfa9dc692d6bbe98116b9057c70d2829 Mon Sep 17 00:00:00 2001 From: pve-win10 Date: Fri, 6 Jun 2025 10:29:35 +0800 Subject: [PATCH] =?UTF-8?q?feature:1.=E6=96=B0=E5=A2=9E=E5=85=B3=E8=81=94A?= =?UTF-8?q?PP=E4=B8=8A=E4=BC=A0=E5=9B=BE=E7=89=87=E5=88=B0=E6=9C=BA?= =?UTF-8?q?=E7=BB=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dite/znpt/domain/vo/AppImageResp.java | 3 + .../znpt/domain/vo/AppImageToPartReq.java | 53 ++++++++++++++++ .../dite/znpt/domain/vo/ImageCollectReq.java | 2 +- .../com/dite/znpt/service/ImageService.java | 8 +++ .../znpt/service/impl/ImageServiceImpl.java | 61 ++++++++++++++++++- .../java/com/dite/znpt/util/EXIFUtil.java | 1 - .../znpt/web/controller/CommonController.java | 6 -- .../znpt/web/controller/ImageController.java | 14 +++++ 8 files changed, 139 insertions(+), 9 deletions(-) create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/AppImageToPartReq.java diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AppImageResp.java b/core/src/main/java/com/dite/znpt/domain/vo/AppImageResp.java index 83303cf..ad8c028 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/AppImageResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/AppImageResp.java @@ -26,4 +26,7 @@ public class AppImageResp extends ImageEntity { @ApiModelProperty("上传用户") private String uploadUser; + + @ApiModelProperty(name = "图像来源,枚举:ImageSourceEnum") + private String imageSource; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AppImageToPartReq.java b/core/src/main/java/com/dite/znpt/domain/vo/AppImageToPartReq.java new file mode 100644 index 0000000..13d4502 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/AppImageToPartReq.java @@ -0,0 +1,53 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class AppImageToPartReq { + + @ApiModelProperty(value = "图片路径列表", required = true) + private List imagePaths; + + @ApiModelProperty(value = "部件id", required = true) + private String partId; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间-起") + private LocalDateTime shootingTimeBegin; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间-止") + private LocalDateTime shootingTimeEnd; + + @ApiModelProperty("天气,枚举:WeatherEnum") + private String weather; + + @ApiModelProperty("湿度(百分比)") + private Integer humidness; + + @ApiModelProperty("温度-低") + private Double temperatureMin; + + @ApiModelProperty("温度-高") + private Double temperatureMax; + + @ApiModelProperty("风力等级") + private Integer windLevel; + + @ApiModelProperty("拍摄方式,枚举ShootingMethodEnum") + private String shootingMethod; + + @ApiModelProperty("拍摄距离") + private Integer shootingDistance; + + @ApiModelProperty("采集员id") + private String collectorId; + + @ApiModelProperty("采集员姓名") + private String collectorName; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectReq.java index 0c6eba2..e225d93 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectReq.java @@ -28,7 +28,7 @@ public class ImageCollectReq implements Serializable { private LocalDateTime shootingTimeBegin; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @ApiModelProperty("拍摄时间-讫") + @ApiModelProperty("拍摄时间-止") private LocalDateTime shootingTimeEnd; @ApiModelProperty("天气,枚举:WeatherEnum") diff --git a/core/src/main/java/com/dite/znpt/service/ImageService.java b/core/src/main/java/com/dite/znpt/service/ImageService.java index 49e594b..1b6dfaa 100644 --- a/core/src/main/java/com/dite/znpt/service/ImageService.java +++ b/core/src/main/java/com/dite/znpt/service/ImageService.java @@ -34,4 +34,12 @@ public interface ImageService extends IService { * @return {@link List }<{@link AppImageResp }> */ List listAppUploadImages(); + + /** + * 功能描述:链接APP上传的图像到部件 + * + * @author cuizhibin + * @date 2025/06/06 09:44 + **/ + void linkAppImagesToPart(AppImageToPartReq partReq); } diff --git a/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java index 1052508..7516700 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java @@ -4,12 +4,14 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.file.PathUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dite.znpt.constant.Message; import com.dite.znpt.domain.bo.PartFullInfoBo; +import com.dite.znpt.domain.entity.ImageCollectEntity; import com.dite.znpt.domain.entity.ImageEntity; import com.dite.znpt.domain.entity.PartEntity; import com.dite.znpt.domain.page.PageDomain; @@ -25,6 +27,7 @@ import com.dite.znpt.service.ImageService; import com.dite.znpt.service.PartService; import com.dite.znpt.util.EXIFUtil; import com.dite.znpt.util.PageUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -55,6 +58,7 @@ import java.util.stream.Collectors; * @date 2025/4/24/周四 13:23 * @description */ +@Slf4j @Service public class ImageServiceImpl extends ServiceImpl implements ImageService { @@ -345,10 +349,65 @@ public class ImageServiceImpl extends ServiceImpl impl resp.setAltitude(gps.get(2)); } resp.setUploadUser(split.get(4)); - resp.setImageType(split.get(2)); + resp.setImageSource(split.get(2)); respList.add(resp); } return respList; } + + /** + * 功能描述:链接APP上传的图像到部件 + * + * @author cuizhibin + * @date 2025/06/06 09:44 + **/ + @Transactional(rollbackFor = Exception.class) + public void linkAppImagesToPart(AppImageToPartReq partReq) { + PartEntity part = partService.getById(partReq.getPartId()); + if (Objects.isNull(part)) { + throw new ServiceException(Message.PART_ID_IS_NOT_EXIST); + } +// 查询图片关联记录 + List imageList = new ArrayList<>(); + CollUtil.split(partReq.getImagePaths(), 1000).forEach(paths -> { + imageList.addAll(lambdaQuery().in(ImageEntity::getImagePath, paths).list()); + }); + partReq.getImagePaths().removeAll(imageList.stream().map(ImageEntity::getImagePath).toList()); + + String collectId = IdUtil.simpleUUID(); + imageList.forEach(imageEntity -> { + imageEntity.setPartId(partReq.getPartId()); + imageEntity.setCollectId(collectId); + }); + baseMapper.updateById(imageList); +// 新增 + List newImageList = new ArrayList<>(); + partReq.getImagePaths().forEach(path -> { + ImageEntity imageEntity = new ImageEntity(); + String absolutePath = permPath + StrUtil.removePrefix(path, "/static/image/"); + try { + ImageReq imageReq = imageRespBuilder(absolutePath); + BeanUtil.copyProperties(imageReq, imageEntity); + } catch (Exception e) { + log.debug("读取文件信息失败:{}", path); + imageEntity.setImageName(FileUtil.getName(absolutePath)); + BigDecimal imageSize = new BigDecimal(FileUtil.size(FileUtil.file(absolutePath))).divide(new BigDecimal(1024*1024), 4, RoundingMode.HALF_UP); + imageEntity.setImageSize(imageSize.toString().concat("M")); + } + if (StrUtil.isEmpty(imageEntity.getLongitude()) || imageEntity.getLongitude().equals("0.0")) { + List split = StrUtil.split(path, StrUtil.SLASH, true, true); + List gps = StrUtil.split(split.get(5), " "); + imageEntity.setLongitude(gps.get(0)); + imageEntity.setLatitude(gps.get(1)); + imageEntity.setAltitude(gps.get(2)); + } + imageEntity.setImagePath(path); + imageEntity.setPartId(partReq.getPartId()); + imageEntity.setCollectId(collectId); + newImageList.add(imageEntity); + }); + imageCollectService.save(BeanUtil.copyProperties(partReq, ImageCollectEntity.class)); + baseMapper.insert(newImageList); + } } diff --git a/core/src/main/java/com/dite/znpt/util/EXIFUtil.java b/core/src/main/java/com/dite/znpt/util/EXIFUtil.java index 136a5a7..5dff2c2 100644 --- a/core/src/main/java/com/dite/znpt/util/EXIFUtil.java +++ b/core/src/main/java/com/dite/znpt/util/EXIFUtil.java @@ -51,7 +51,6 @@ public class EXIFUtil { } } } - System.out.println("**********" + jsonObject.toString()); return jsonObject; } diff --git a/web/src/main/java/com/dite/znpt/web/controller/CommonController.java b/web/src/main/java/com/dite/znpt/web/controller/CommonController.java index b206679..04d75dd 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/CommonController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/CommonController.java @@ -143,12 +143,6 @@ public class CommonController { return Result.ok(imageService.batchUploadCommonImage(imageSource, workReq, files)); } - @ApiOperation(value = "获取APP上传的图片列表", httpMethod = "POST") - @GetMapping("/list/app-upload-images") - public Result> listAppUploadImages() throws IOException { - return Result.ok(imageService.listAppUploadImages()); - } - @ApiOperation(value = "查询菜单类型", httpMethod = "GET") @GetMapping("/list/menu-type") public Result listMenuType(){ diff --git a/web/src/main/java/com/dite/znpt/web/controller/ImageController.java b/web/src/main/java/com/dite/znpt/web/controller/ImageController.java index e6eda67..8c53542 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/ImageController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/ImageController.java @@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.io.IOException; import java.util.Arrays; import java.util.List; @@ -76,4 +77,17 @@ public class ImageController { imageService.delete(imageId); return Result.ok(); } + + @ApiOperation(value = "获取APP上传的图片列表", httpMethod = "POST") + @GetMapping("/list/app-upload-images") + public Result> listAppUploadImages() throws IOException { + return Result.ok(imageService.listAppUploadImages()); + } + + @ApiOperation(value = "关联APP上传图片到机组", httpMethod = "POST") + @PostMapping("/linkAppImagesToPart") + public Result linkAppImagesToPart(@RequestBody AppImageToPartReq partReq) { + imageService.linkAppImagesToPart(partReq); + return Result.ok(); + } }