diff --git a/core/src/main/java/com/dite/znpt/constant/Message.java b/core/src/main/java/com/dite/znpt/constant/Message.java new file mode 100644 index 0000000..2e87a9f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/constant/Message.java @@ -0,0 +1,18 @@ +package com.dite.znpt.constant; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/4/26 23:19 + * @Description: + */ +public class Message implements Serializable { + @Serial + private static final long serialVersionUID = 4010434089386946123L; + + public static final String IMAGE_IS_EMPTY = "图像信息为空"; + public static final String IMAGE_PATH_IS_NOT_EXIST = "图像地址不存在"; + public static final String IMAGE_ID_IS_NOT_EXIST = "图像id不存在"; +} diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ImageCollectEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ImageCollectEntity.java index d6bb148..b87a04c 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/ImageCollectEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/ImageCollectEntity.java @@ -44,8 +44,8 @@ public class ImageCollectEntity extends AuditableEntity implements Serializable @TableField("shooting_time_end") private LocalDateTime shootingTimeEnd; - @ApiModelProperty("天气") - @TableField("weather,枚举:WeatherEnum") + @ApiModelProperty("天气,枚举:WeatherEnum") + @TableField("weather") private String weather; @ApiModelProperty("湿度(百分比)") diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ImageEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ImageEntity.java index 0a66e39..8a87c8c 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/ImageEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/ImageEntity.java @@ -12,6 +12,7 @@ import lombok.EqualsAndHashCode; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -40,14 +41,42 @@ public class ImageEntity extends AuditableEntity implements Serializable { @TableField("image_name") private String imageName; - @ApiModelProperty("图像尺寸") + @ApiModelProperty("图像大小") @TableField("image_size") private String imageSize; + @ApiModelProperty("图像宽") + @TableField("image_width") + private String imageWidth; + + @ApiModelProperty("图像高") + @TableField("image_height") + private String imageHeight; + + @ApiModelProperty("图像分辨率") + @TableField("image_resolution") + private String imageResolution; + + @ApiModelProperty("焦平面X轴分辨率") + @TableField("x_resolution") + private String xResolution; + + @ApiModelProperty("焦平面Y轴分辨率") + @TableField("y_resolution") + private String YResolution; + + @ApiModelProperty("焦平面分辨率单位") + @TableField("resolution_units") + private String ResolutionUnits; + @ApiModelProperty("焦距") @TableField("focal_distance") private String focalDistance; + @ApiModelProperty("35毫米焦距") + @TableField("focal_distance35") + private String focalDistance35; + @ApiModelProperty("拍摄时间") @TableField("shooting_time") private LocalDateTime shootingTime; @@ -72,8 +101,12 @@ public class ImageEntity extends AuditableEntity implements Serializable { @TableField("altitude") private String altitude; + @ApiModelProperty("GPS") + @TableField("GPS") + private String GPS; + @ApiModelProperty("影像类型") - @TableField("image_type,枚举ImageTypeEnum") + @TableField("image_type") private String imageType; @ApiModelProperty("图片路径") diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectInfo.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectInfo.java new file mode 100644 index 0000000..1c7811f --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectInfo.java @@ -0,0 +1,50 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/4/24 21:16 + * @Description: + */ +@Data +@ApiModel("图像拍摄信息") +public class ImageCollectInfo implements Serializable { + @Serial + private static final long serialVersionUID = 6594307991137605975L; + + @ApiModelProperty("图像采集信息id") + private String collectId; + + @ApiModelProperty("天气,枚举:WeatherEnum") + private String weather; + + @ApiModelProperty("天气描述") + private String weatherLabel; + + @ApiModelProperty("湿度(百分比)") + private Integer humidness; + + @ApiModelProperty("温度") + private String temperature; + + @ApiModelProperty("风力等级") + private Integer windLevel; + + @ApiModelProperty("拍摄方式,枚举ShootingMethodEnum") + private String shootingMethod; + + @ApiModelProperty("拍摄方式描述") + private String shootingMethodLabel; + + @ApiModelProperty("拍摄距离") + private Integer shootingDistance; + + @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 2f0dbf1..0c6eba2 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 @@ -1,6 +1,7 @@ package com.dite.znpt.domain.vo; import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -22,9 +23,11 @@ public class ImageCollectReq implements Serializable { @Serial private static final long serialVersionUID = 8937301872925896770L; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty("拍摄时间-起") private LocalDateTime shootingTimeBegin; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty("拍摄时间-讫") private LocalDateTime shootingTimeEnd; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectResp.java deleted file mode 100644 index 9a4a1e0..0000000 --- a/core/src/main/java/com/dite/znpt/domain/vo/ImageCollectResp.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.dite.znpt.domain.vo; - -import io.swagger.annotations.ApiModel; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * @Author: gaoxiong - * @Date: 2025/4/24 21:16 - * @Description: - */ -@Data -@ApiModel("图像采集信息响应实体") -public class ImageCollectResp implements Serializable { - @Serial - private static final long serialVersionUID = 6594307991137605975L; -} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageExifInfo.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageExifInfo.java new file mode 100644 index 0000000..1a0b8aa --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageExifInfo.java @@ -0,0 +1,67 @@ +package com.dite.znpt.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @Author: gaoxiong + * @Date: 2025/4/26 23:35 + * @Description: + */ +@Data +@ApiModel("图像Exif信息") +public class ImageExifInfo implements Serializable { + + @ApiModelProperty("图像宽") + private String imageWidth; + + @ApiModelProperty("图像高") + private String imageHeight; + + @ApiModelProperty("图像分辨率") + private String imageResolution; + + @ApiModelProperty("焦距") + private String focalDistance; + + @ApiModelProperty("35毫米焦距") + private String focalDistance35; + + @ApiModelProperty("焦平面X轴分辨率") + @TableField("x_resolution") + private String xResolution; + + @ApiModelProperty("焦平面Y轴分辨率") + @TableField("y_resolution") + private String yResolution; + + @ApiModelProperty("焦平面分辨率单位") + @TableField("resolution_units") + private String resolutionUnits; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间") + private LocalDateTime shootingTime; + + @ApiModelProperty("相机制造商") + private String cameraManufacturer; + + @ApiModelProperty("相机型号") + private String cameraModel; + + @ApiModelProperty("经度") + private String longitude; + + @ApiModelProperty("纬度") + private String latitude; + + @ApiModelProperty("海拔") + private String altitude; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageListReq.java index 070bb14..e51f90c 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ImageListReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageListReq.java @@ -1,6 +1,7 @@ package com.dite.znpt.domain.vo; import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serial; @@ -16,4 +17,11 @@ import java.io.Serializable; public class ImageListReq implements Serializable { @Serial private static final long serialVersionUID = 671014582625089979L; + + @ApiModelProperty("关键字") + private String keyword; + + @ApiModelProperty("图像类型") + private String[] imageTypes; + } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageListResp.java new file mode 100644 index 0000000..e632fda --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageListResp.java @@ -0,0 +1,86 @@ +package com.dite.znpt.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @Author: gaoxiong + * @Date: 2025/4/26 21:07 + * @Description: + */ +@Data +@ApiModel("图像列表信息响应实体") +public class ImageListResp implements Serializable { + + @Serial + private static final long serialVersionUID = 3168482118066685077L; + + @ApiModelProperty("图像id") + private String imageId; + + @ApiModelProperty("图像名称") + @TableField("image_name") + private String imageName; + + @ApiModelProperty("部件名称") + private String partName; + + @ApiModelProperty("图像分辨率") + private String imageResolution; + + @ApiModelProperty("焦距") + private String focalDistance; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("拍摄时间") + private LocalDateTime shootingTime; + + @ApiModelProperty("相机制造商") + private String cameraManufacturer; + + @ApiModelProperty("相机型号") + private String cameraModel; + + @ApiModelProperty("GPS") + private String GPS; + + @ApiModelProperty("天气,枚举:WeatherEnum") + private String weather; + + @ApiModelProperty("天气描述") + private String weatherLabel; + + @ApiModelProperty("湿度(百分比)") + private Integer humidness; + + @ApiModelProperty("温度") + private String temperature; + + @ApiModelProperty("风力等级") + private Integer windLevel; + + @ApiModelProperty("拍摄方式,枚举ShootingMethodEnum") + private String shootingMethod; + + @ApiModelProperty("拍摄方式描述") + private String shootingMethodLabel; + + @ApiModelProperty("拍摄距离") + private Integer shootingDistance; + + @ApiModelProperty("采集员姓名") + private String collectorName; + + @ApiModelProperty("影像类型,枚举ImageTypeEnum") + private String imageType; + + @ApiModelProperty("影像类型描述") + private String imageTypeLabel; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageReq.java index 4628b60..7a360d1 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ImageReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageReq.java @@ -17,7 +17,7 @@ import java.time.LocalDateTime; */ @Data @ApiModel("图像信息请求实体") -public class ImageReq implements Serializable { +public class ImageReq extends ImageExifInfo implements Serializable { @Serial private static final long serialVersionUID = -1726859254176864573L; @@ -29,31 +29,16 @@ public class ImageReq implements Serializable { @TableField("image_name") private String imageName; - @ApiModelProperty("图像尺寸") + @ApiModelProperty("图像大小") private String imageSize; - @ApiModelProperty("焦距") - private String focalDistance; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @ApiModelProperty("拍摄时间") - private LocalDateTime shootingTime; - - @ApiModelProperty("相机制造商") - private String cameraManufacturer; - - @ApiModelProperty("相机型号") - private String cameraModel; - - @ApiModelProperty("经度") - private String longitude; - - @ApiModelProperty("纬度") - private String latitude; - - @ApiModelProperty("海拔") - private String altitude; + @ApiModelProperty("图像分辨率") + private String imageResolution; @ApiModelProperty("图片路径") private String imagePath; + + @ApiModelProperty("GPS") + private String GPS; + } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ImageResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ImageResp.java index dd7e001..8784839 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ImageResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ImageResp.java @@ -17,10 +17,29 @@ import java.time.LocalDateTime; */ @Data @ApiModel("图像信息响应实体") -public class ImageResp extends ImageReq implements Serializable { +public class ImageResp implements Serializable { @Serial private static final long serialVersionUID = -5215414858454232077L; - @ApiModelProperty("影像类型,枚举ImageTypeEnum") - private String imageType; + @ApiModelProperty("图像id") + private String imageId; + + @ApiModelProperty("图像名称") + private String imageName; + + @ApiModelProperty("图像路径") + private String imagePath; + + @ApiModelProperty("图像大小") + private String imageSize; + + @ApiModelProperty("图像分辨率") + private String imageResolution; + + @ApiModelProperty("图像Exif信息") + private ImageExifInfo imageExifInfo; + + @ApiModelProperty("图像拍摄信息") + private ImageCollectInfo imageCollectInfo; + } diff --git a/core/src/main/java/com/dite/znpt/enums/ImageTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/ImageTypeEnum.java index a8c432c..9141afd 100644 --- a/core/src/main/java/com/dite/znpt/enums/ImageTypeEnum.java +++ b/core/src/main/java/com/dite/znpt/enums/ImageTypeEnum.java @@ -31,6 +31,11 @@ public enum ImageTypeEnum { return null; } + public static String getDescByCode(String code){ + ImageTypeEnum e = getByCode(code); + return null == e ? null : e.desc; + } + public static List listAll(){ List list = new ArrayList<>(ImageTypeEnum.values().length); for (ImageTypeEnum e : ImageTypeEnum.values() ) { diff --git a/core/src/main/java/com/dite/znpt/enums/ShootingMethodEnum.java b/core/src/main/java/com/dite/znpt/enums/ShootingMethodEnum.java index 5fb58d2..7c74c03 100644 --- a/core/src/main/java/com/dite/znpt/enums/ShootingMethodEnum.java +++ b/core/src/main/java/com/dite/znpt/enums/ShootingMethodEnum.java @@ -24,7 +24,7 @@ public enum ShootingMethodEnum { this.desc = desc; } - private ShootingMethodEnum getByCode(String code){ + public static ShootingMethodEnum getByCode(String code){ for (ShootingMethodEnum e : ShootingMethodEnum.values() ) { if(e.code.equals(code)){ return e; @@ -33,6 +33,11 @@ public enum ShootingMethodEnum { return null; } + public static String getDescByCode(String code){ + ShootingMethodEnum e = getByCode(code); + return null == e ? null : e.desc; + } + public static List listAll(){ List list = new ArrayList<>(ShootingMethodEnum.values().length); for (ShootingMethodEnum e : ShootingMethodEnum.values() ) { diff --git a/core/src/main/java/com/dite/znpt/enums/WeatherEnum.java b/core/src/main/java/com/dite/znpt/enums/WeatherEnum.java index d75d026..9c2be8c 100644 --- a/core/src/main/java/com/dite/znpt/enums/WeatherEnum.java +++ b/core/src/main/java/com/dite/znpt/enums/WeatherEnum.java @@ -53,6 +53,11 @@ public enum WeatherEnum { return null; } + public static String getDescByCode(String code){ + WeatherEnum e = getByCode(code); + return null == e ? null : e.desc; + } + public static List listAll(){ List list = new ArrayList<>(WeatherEnum.values().length); for (WeatherEnum e : WeatherEnum.values() ) { diff --git a/core/src/main/java/com/dite/znpt/mapper/ImageMapper.java b/core/src/main/java/com/dite/znpt/mapper/ImageMapper.java index 14ec3d4..133691f 100644 --- a/core/src/main/java/com/dite/znpt/mapper/ImageMapper.java +++ b/core/src/main/java/com/dite/znpt/mapper/ImageMapper.java @@ -2,10 +2,7 @@ package com.dite.znpt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dite.znpt.domain.entity.ImageEntity; -import com.dite.znpt.domain.vo.ImageListReq; -import com.dite.znpt.domain.vo.ImageResp; -import com.dite.znpt.domain.vo.PartListReq; -import com.dite.znpt.domain.vo.PartResp; +import com.dite.znpt.domain.vo.*; import java.util.List; @@ -15,5 +12,7 @@ import java.util.List; * @description */ public interface ImageMapper extends BaseMapper { - List queryBySelective(ImageListReq req); + List queryImageList(ImageListReq req); + + ImageResp detail(String imageId); } 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 284a3d8..cd24553 100644 --- a/core/src/main/java/com/dite/znpt/service/ImageService.java +++ b/core/src/main/java/com/dite/znpt/service/ImageService.java @@ -3,6 +3,8 @@ package com.dite.znpt.service; import com.baomidou.mybatisplus.extension.service.IService; import com.dite.znpt.domain.entity.ImageEntity; import com.dite.znpt.domain.vo.ImageListReq; +import com.dite.znpt.domain.vo.ImageListResp; +import com.dite.znpt.domain.vo.ImageReq; import com.dite.znpt.domain.vo.ImageResp; import org.springframework.web.multipart.MultipartFile; @@ -15,7 +17,13 @@ import java.util.List; */ public interface ImageService extends IService { - List selectList(ImageListReq req); + List list(ImageListReq req); - List batchUpload(String departId, MultipartFile[] files); + List page(ImageListReq req); + + ImageResp detail(String imageId); + + List batchUpload(String departId, MultipartFile[] files); + + void delete(String imageId); } diff --git a/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java index 4e9b308..8fbe3d3 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java @@ -1,12 +1,15 @@ package com.dite.znpt.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; import com.dite.znpt.converts.Converts; import com.dite.znpt.domain.entity.ImageCollectEntity; import com.dite.znpt.domain.entity.ImageEntity; import com.dite.znpt.domain.vo.ImageCollectReq; +import com.dite.znpt.exception.ServiceException; import com.dite.znpt.mapper.ImageCollectMapper; import com.dite.znpt.service.ImageCollectService; import com.dite.znpt.service.ImageService; @@ -35,6 +38,9 @@ public class ImageCollectServiceImpl extends ServiceImpl implements ImageService { + @Resource + private ImageCollectService imageCollectService; + @Value("${upload.temp-path}") private String tempPath; @Override - public List selectList(ImageListReq req) { - PageUtil.startPage(); - List imageList= this.baseMapper.queryBySelective(req); - imageList.forEach(resp -> { - + public List list(ImageListReq req) { + List partList= this.baseMapper.queryImageList(req); + partList.forEach(resp -> { + resp.setWeatherLabel(WeatherEnum.getDescByCode(resp.getWeather())); + resp.setShootingMethodLabel(ShootingMethodEnum.getDescByCode(resp.getShootingMethod())); + resp.setImageTypeLabel(ImageTypeEnum.getDescByCode(resp.getImageType())); }); - return imageList; + return partList; + } + + @Override + public List page(ImageListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public ImageResp detail(String imageId) { + ImageResp imageResp = this.baseMapper.detail(imageId); + imageResp.getImageCollectInfo().setWeatherLabel(WeatherEnum.getDescByCode(imageResp.getImageCollectInfo().getWeather())); + imageResp.getImageCollectInfo().setShootingMethodLabel(ShootingMethodEnum.getDescByCode(imageResp.getImageCollectInfo().getShootingMethodLabel())); + return imageResp; } @Transactional(rollbackFor = Exception.class) @Override - public List batchUpload(String departId, MultipartFile[] files) { - List list = new ArrayList<>(files.length); + public List batchUpload(String departId, MultipartFile[] files) { + if(null == files || files.length == 0){ + throw new ServiceException(Message.IMAGE_IS_EMPTY); + } + List list = new ArrayList<>(files.length); String path_prefix = tempPath.concat(StrUtil.BACKSLASH).concat(departId).concat(StrUtil.BACKSLASH); for (MultipartFile file : files) { if (!file.isEmpty()) { @@ -68,22 +98,52 @@ public class ImageServiceImpl extends ServiceImpl impl return list; } - private ImageResp imageRespBuilder(String path) throws Exception { - ImageResp resp = new ImageResp(); + @Transactional(rollbackFor = Exception.class) + @Override + public void delete(String imageId) { + ImageEntity image = this.getById(imageId); + if(null ==image){ + throw new ServiceException(Message.IMAGE_ID_IS_NOT_EXIST); + } + this.removeById(image); + List imageList = this.list(Wrappers.lambdaQuery().eq(ImageEntity::getCollectId, image.getCollectId())); + if(CollUtil.isEmpty(imageList)){ + imageCollectService.removeById(image.getCollectId()); + } + File file = new File(image.getImagePath()); + if (file.exists()) { + FileUtil.del(file); + } + } + + private ImageReq imageRespBuilder(String path) throws Exception { + ImageReq req = new ImageReq(); File file = new File(path); JSONObject obj = EXIFUtil.printImageTags(file); - resp.setCameraManufacturer(obj.getStr("Make")); - resp.setCameraModel(obj.getStr("Model")); - resp.setImageName(obj.getStr("File Name")); - resp.setImagePath(path); - resp.setImageSize(extractDigit(obj.getStr("Image Width")).concat("*").concat(extractDigit(obj.getStr("Image Height")))); + req.setCameraManufacturer(obj.getStr("Make")); + req.setCameraModel(obj.getStr("Model")); + req.setImageName(obj.getStr("File Name")); + req.setImagePath(path); + BigDecimal imageSize = new BigDecimal(extractDigit(obj.getStr("File Size"))).divide(new BigDecimal(1024*1024), 4, RoundingMode.HALF_UP); + req.setImageSize(imageSize.toString().concat("M")); + req.setImageWidth(extractDigit(obj.getStr("Image Width"))); + req.setImageHeight(extractDigit(obj.getStr("Image Height"))); + req.setImageResolution(req.getImageWidth().concat("x").concat(req.getImageHeight())); + req.setFocalDistance35(extractDigit(obj.getStr("Focal Length 35"))); + req.setXResolution(extractDigit(obj.getStr("X Resolution"))); + req.setYResolution(extractDigit(obj.getStr("Y Resolution"))); + req.setResolutionUnits(obj.getStr("Resolution Units")); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss"); - resp.setShootingTime(LocalDateTime.parse( obj.getStr("Date/Time Original"),formatter)); - resp.setFocalDistance(extractDigit(obj.getStr("Focal Length"))); - resp.setLatitude(obj.getStr("GPS Latitude").concat("°").concat(directionTranslator(obj.getStr("GPS Latitude Ref")))); - resp.setLongitude(obj.getStr("GPS Longitude").concat("°").concat(directionTranslator(obj.getStr("GPS Longitude Ref")))); - resp.setAltitude(extractDigit(obj.getStr("GPS Altitude")).concat("m")); - return resp; + req.setShootingTime(LocalDateTime.parse( obj.getStr("Date/Time Original"),formatter)); + req.setFocalDistance(extractDigit(obj.getStr("Focal Length"))); + req.setLatitude(obj.getStr("GPS Latitude")); + req.setLongitude(obj.getStr("GPS Longitude")); + req.setAltitude(extractDigit(obj.getStr("GPS Altitude"))); + String gps = req.getLatitude().concat("°").concat(directionTranslator(obj.getStr("GPS Latitude Ref"))).concat(StrUtil.COMMA) + .concat(req.getLongitude()).concat("°").concat(directionTranslator(obj.getStr("GPS Longitude Ref"))).concat(StrUtil.COMMA) + .concat("海拔").concat(req.getAltitude()).concat("m"); + req.setGPS(gps); + return req; } private String directionTranslator(String direction){ @@ -109,4 +169,5 @@ public class ImageServiceImpl extends ServiceImpl impl return null; } } + } diff --git a/core/src/main/resources/mapper/ImageCollectMapper.xml b/core/src/main/resources/mapper/ImageCollectMapper.xml index 64a0f9d..5d3e173 100644 --- a/core/src/main/resources/mapper/ImageCollectMapper.xml +++ b/core/src/main/resources/mapper/ImageCollectMapper.xml @@ -7,7 +7,7 @@ a.shooting_distance, a.collector_name, - select from image_collect_info a diff --git a/core/src/main/resources/mapper/ImageMapper.xml b/core/src/main/resources/mapper/ImageMapper.xml index 98ee794..022d42d 100644 --- a/core/src/main/resources/mapper/ImageMapper.xml +++ b/core/src/main/resources/mapper/ImageMapper.xml @@ -1,20 +1,65 @@ - - a.image, a.part_id, a.turbine_id, a.project_id, a.image_name, a.image_size, a.focal_distance, - a.shooting_time, a.camera_manufacture, a.camera_model, a.longitude, a.latitude, a.altitude, - a.image_type, a.image_path - - - + SELECT + i.image_id, i.image_name, ic.part_id, p.part_name, i.image_resolution, i.focal_distance, i.shooting_time, i.camera_manufacturer, + i.camera_model, i.GPS, ic.weather, ic.humidness, CONCAT(ic.temperature_min, '℃', '~',temperature_max, '℃') AS temperature, ic.wind_level, + ic.shooting_method, ic.shooting_distance,ic.collector_name, i.image_type + FROM image i + LEFT JOIN image_collect ic ON i.collect_id = ic.collect_id + LEFT JOIN part p ON ic.part_id = p.part_id - and a.image_name like concat('%', #{keyword,jdbcType=VARCHAR}, '%') + AND i.image_name LIKE concat('%', #{keyword}, '%') + + + AND i.image_type in #{imageType} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/main/java/com/dite/znpt/web/controller/ImageCollectController.java b/web/src/main/java/com/dite/znpt/web/controller/ImageCollectController.java deleted file mode 100644 index d798a88..0000000 --- a/web/src/main/java/com/dite/znpt/web/controller/ImageCollectController.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.dite.znpt.web.controller; - -import com.dite.znpt.domain.Result; -import com.dite.znpt.domain.vo.ImageCollectReq; -import com.dite.znpt.domain.vo.ImageResp; -import com.dite.znpt.service.ImageCollectService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import javax.annotation.Resource; -import java.util.List; - -/** - * @Author: gaoxiong - * @Date: 2025/4/26 1:34 - * @Description: - */ -@Api(tags = "图像采集信息") -@RestController -@RequestMapping("/image-collect") -public class ImageCollectController { - - @Resource - private ImageCollectService imageCollectService; - @ApiOperation(value = "保存图像采集信息", httpMethod = "POST") - @PostMapping("/{departId}") - public Result save(@PathVariable String departId, @RequestBody ImageCollectReq req) { - imageCollectService.save(departId, req); - return Result.ok(); - } -} 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 bde3bf2..773713f 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 @@ -3,19 +3,15 @@ package com.dite.znpt.web.controller; import com.dite.znpt.domain.PageResult; import com.dite.znpt.domain.Result; -import com.dite.znpt.domain.vo.ImageListReq; -import com.dite.znpt.domain.vo.ImageResp; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.service.ImageCollectService; import com.dite.znpt.service.ImageService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import javax.annotation.PostConstruct; import javax.annotation.Resource; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; import java.util.List; /** @@ -31,16 +27,44 @@ public class ImageController { @Resource private ImageService imageService; + @Resource + private ImageCollectService imageCollectService; + @ApiOperation(value = "分页查询图像列表", httpMethod = "GET") @GetMapping("/page") - public PageResult list(ImageListReq req) { - return PageResult.ok(imageService.selectList(req)); + public PageResult page(@RequestBody ImageListReq req) { + return PageResult.ok(imageService.page(req)); } + @ApiOperation(value = "查询图像列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(@RequestBody ImageListReq req){ + return Result.ok(imageService.list(req)); + } + + @ApiOperation(value = "查询图像详情", httpMethod = "GET") + @GetMapping("/detail/{imageId}") + public Result detail(@PathVariable String imageId){ + return Result.ok(imageService.detail(imageId)); + } @ApiOperation(value = "批量上传图像", httpMethod = "POST") @PostMapping("/upload-batch/{departId}") - public Result> uploadBatch(@PathVariable String departId, @RequestParam("files") MultipartFile[] files) { + public Result> uploadBatch(@PathVariable String departId, @RequestParam("files") MultipartFile[] files) { return Result.ok(imageService.batchUpload(departId, files)); } + + @ApiOperation(value = "设置信息", httpMethod = "POST") + @PostMapping("/setting-info/{departId}") + public Result save(@PathVariable String departId, @RequestBody ImageCollectReq req) { + imageCollectService.save(departId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除图像", httpMethod = "DELETE") + @DeleteMapping("/{imageId}") + public Result remove(@PathVariable String imageId){ + imageService.delete(imageId); + return Result.ok(); + } }