From 6dfb96563145a2ff2ebd85db3ca7f635f215e1ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=9B=84?= Date: Thu, 24 Apr 2025 17:58:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E5=83=8F=E7=AE=A1=E7=90=86=20=20todo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/pom.xml | 6 ++ .../dite/znpt/domain/entity/ImageEntity.java | 52 +++++------- .../com/dite/znpt/domain/vo/ImageListReq.java | 54 ++---------- .../com/dite/znpt/domain/vo/ImageResp.java | 18 ++-- .../com/dite/znpt/mapper/ImageMapper.java | 12 +-- .../com/dite/znpt/service/ImageService.java | 54 +----------- .../znpt/service/impl/ImageServiceImpl.java | 85 ++----------------- .../java/com/dite/znpt/util/EXIFUtil.java | 69 +++++++++++++++ .../src/main/resources/mapper/ImageMapper.xml | 42 +-------- .../znpt/web/controller/ImageController.java | 29 +++++++ web/src/main/resources/application-dev.yml | 23 +++-- 11 files changed, 180 insertions(+), 264 deletions(-) create mode 100644 core/src/main/java/com/dite/znpt/util/EXIFUtil.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ImageController.java diff --git a/core/pom.xml b/core/pom.xml index 93340d9..cba752e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -134,6 +134,12 @@ fastjson 1.2.83 + + + com.drewnoakes + metadata-extractor + 2.15.0 + 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 267a7ea..7d966f7 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 @@ -1,77 +1,71 @@ package com.dite.znpt.domain.entity; -import java.time.LocalDateTime; -import java.io.Serializable; - -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.dite.znpt.domain.AuditableEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import com.alibaba.excel.annotation.ExcelProperty; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; /** - * @author huise23 - * @date 2025/04/24 13:44 - * @Description: 图像信息表实体类 + * @author Bear.G + * @date 2025/4/24/周四 13:15 + * @description */ @Data @EqualsAndHashCode(callSuper = false) @TableName("image") @ApiModel(value="ImageEntity对象", description="图像信息表") -public class ImageEntity extends AuditableEntity implements Serializable { +public class ImageEntity extends AuditableEntity implements Serializable { - private static final long serialVersionUID = -60463872766900490L; + @Serial + private static final long serialVersionUID = -7702927820673158420L; - @ExcelProperty("图像id") @ApiModelProperty("图像id") - @TableId(value = "image_id", type = IdType.ASSIGN_UUID) - private Long imageId; + @TableId(value = "part_id", type = IdType.ASSIGN_UUID) + private String imageId; - @ExcelProperty("部件id") @ApiModelProperty("部件id") @TableField("part_id") - private Long partId; + private String partId; + + @ApiModelProperty("项目id") + @TableField("project_id") + private String projectId; - @ExcelProperty("机组id") @ApiModelProperty("机组id") @TableField("turbine_id") - private Long turbineId; + private String turbineId; - @ExcelProperty("项目id") - @ApiModelProperty("项目id") - @TableField("project") - private Long project; - - @ExcelProperty("图像名称") @ApiModelProperty("图像名称") @TableField("image_name") private String imageName; - @ExcelProperty("图像尺寸") @ApiModelProperty("图像尺寸") @TableField("image_size") private String imageSize; - @ExcelProperty("焦距") @ApiModelProperty("焦距") @TableField("focal_distance") private String focalDistance; - @ExcelProperty("拍摄时间") @ApiModelProperty("拍摄时间") @TableField("shooting_time") private LocalDateTime shootingTime; - @ExcelProperty("相机制造商") @ApiModelProperty("相机制造商") @TableField("camera_manufacturer") private String cameraManufacturer; - @ExcelProperty("相机型号") @ApiModelProperty("相机型号") @TableField("camera_model") private String cameraModel; -} +} 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 5153dfc..c0b8473 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,55 +1,19 @@ package com.dite.znpt.domain.vo; -import java.time.LocalDateTime; -import java.io.Serializable; - import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.io.Serial; +import java.io.Serializable; + /** - * @author huise23 - * @date 2025/04/24 13:44 - * @Description: 图像信息请求实体 + * @author Bear.G + * @date 2025/4/24/周四 14:18 + * @description */ @Data -@ApiModel("图像信息列表请求实体") +@ApiModel("图像信息列表查询实体") public class ImageListReq implements Serializable { - - private static final long serialVersionUID = 734848078850759056L; - - @ApiModelProperty("查询关键字") - private String keyword; - - @ApiModelProperty("图像信息Id") - private Long imageId; - - @ApiModelProperty("部件id") - private Long partId; - - @ApiModelProperty("机组id") - private Long turbineId; - - @ApiModelProperty("项目id") - private Long project; - - @ApiModelProperty("图像名称") - private String imageName; - - @ApiModelProperty("图像尺寸") - private String imageSize; - - @ApiModelProperty("焦距") - private String focalDistance; - - @ApiModelProperty("拍摄时间") - private LocalDateTime shootingTime; - - @ApiModelProperty("相机制造商") - private String cameraManufacturer; - - @ApiModelProperty("相机型号") - private String cameraModel; - + @Serial + private static final long serialVersionUID = 671014582625089979L; } - 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 1421a4e..cce541b 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 @@ -1,19 +1,19 @@ package com.dite.znpt.domain.vo; -import java.time.LocalDateTime; import io.swagger.annotations.ApiModel; import lombok.Data; -import lombok.EqualsAndHashCode; -import com.dite.znpt.domain.entity.ImageEntity; + +import java.io.Serial; +import java.io.Serializable; /** - * @author huise23 - * @date 2025/04/24 13:44 - * @Description: 图像信息响应实体 + * @author Bear.G + * @date 2025/4/24/周四 14:16 + * @description */ @Data -@EqualsAndHashCode(callSuper = true) @ApiModel("图像信息响应实体") -public class ImageResp extends ImageEntity { +public class ImageResp implements Serializable { + @Serial + private static final long serialVersionUID = -5215414858454232077L; } - 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 d689388..14ec3d4 100644 --- a/core/src/main/java/com/dite/znpt/mapper/ImageMapper.java +++ b/core/src/main/java/com/dite/znpt/mapper/ImageMapper.java @@ -4,16 +4,16 @@ 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 org.apache.ibatis.annotations.Param; +import com.dite.znpt.domain.vo.PartListReq; +import com.dite.znpt.domain.vo.PartResp; import java.util.List; /** - * @author huise23 - * @date 2025/04/24 13:44 - * @Description: 图像信息表数据库访问层 + * @author Bear.G + * @date 2025/4/24/周四 13:17 + * @description */ public interface ImageMapper extends BaseMapper { - List queryBySelective(ImageListReq imageReq); + List queryBySelective(ImageListReq req); } - 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 598be9a..b956e32 100644 --- a/core/src/main/java/com/dite/znpt/service/ImageService.java +++ b/core/src/main/java/com/dite/znpt/service/ImageService.java @@ -8,57 +8,11 @@ import com.dite.znpt.domain.vo.ImageResp; import java.util.List; /** - * @author huise23 - * @date 2025/04/24 13:44 - * @Description: 图像信息表服务接口 + * @author Bear.G + * @date 2025/4/24/周四 13:14 + * @description */ public interface ImageService extends IService { - /** - * 功能描述:查询图像信息列表 - * - * @param imageReq 图像信息 - * @return {@link List }<{@link ImageEntity }> - * @author huise23 - * @date 2025/04/24 13:44 - **/ - List selectList(ImageListReq imageReq); - - /** - * 功能描述:查询单条图像信息 - * - * @param imageId 图像信息Id - * @return {@link ImageResp } - * @author huise23 - * @date 2025/04/24 13:44 - **/ - ImageResp selectById(Long imageId); - - /** - * 功能描述:新增图像信息 - * - * @param image 图像信息 - * @author huise23 - * @date 2025/04/24 13:44 - **/ - void saveData(ImageEntity image); - - /** - * 功能描述:更新图像信息 - * - * @param image 图像信息 - * @author huise23 - * @date 2025/04/24 13:44 - **/ - void updateData(ImageEntity image); - - /** - * 功能描述:删除图像信息 - * - * @param imageId 图像信息Id - * @author huise23 - * @date 2025/04/24 13:44 - **/ - void deleteById(Long imageId); + List selectList(ImageListReq req); } - 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 c409253..0e06c94 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,96 +4,25 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.service.ImageService; import com.dite.znpt.mapper.ImageMapper; -import org.springframework.stereotype.Service; -import cn.hutool.core.collection.CollUtil; -import lombok.RequiredArgsConstructor; +import com.dite.znpt.service.ImageService; import com.dite.znpt.util.PageUtil; import java.util.List; /** - * @author huise23 - * @date 2025/04/24 13:44 - * @Description: 图像信息表服务实现类 + * @author Bear.G + * @date 2025/4/24/周四 13:23 + * @description */ -@Service -@RequiredArgsConstructor public class ImageServiceImpl extends ServiceImpl implements ImageService { - - /** - * 功能描述:查询图像信息列表 - * - * @param imageReq 图像信息信息 - * @return {@link List }<{@link ImageResp }> - * @author huise23 - * @date 2025/04/24 13:44 - **/ @Override - public List selectList(ImageListReq imageReq) { + public List selectList(ImageListReq req) { PageUtil.startPage(); - List imageList= this.baseMapper.queryBySelective(imageReq); + List imageList= this.baseMapper.queryBySelective(req); imageList.forEach(resp -> { - + }); return imageList; } - - /** - * 功能描述:查询单条图像信息 - * - * @param imageId 图像信息Id - * @return {@link ImageResp } - * @author huise23 - * @date 2025/04/24 13:44 - **/ - @Override - public ImageResp selectById(Long imageId) { - ImageListReq imageReq = new ImageListReq(); - imageReq.setImageId(imageId); - - List list = selectList(imageReq); - return list.isEmpty() ? CollUtil.getFirst(list) : new ImageResp(); - } - - /** - * 功能描述:新增图像信息 - * - * @param image 图像信息 - * @author huise23 - * @date 2025/04/24 13:44 - **/ - @Override - public void saveData(ImageEntity image) { -// todo 校验 - save(image); - } - - /** - * 功能描述:更新图像信息 - * - * @param image 图像信息 - * @author huise23 - * @date 2025/04/24 13:44 - **/ - @Override - public void updateData(ImageEntity image) { -// todo 校验 - updateById(image); - } - - /** - * 功能描述:删除图像信息 - * - * @param imageId 图像信息Id - * @author huise23 - * @date 2025/04/24 13:44 - **/ - @Override - public void deleteById(Long imageId) { -// todo 校验 - removeById(imageId); - } - } diff --git a/core/src/main/java/com/dite/znpt/util/EXIFUtil.java b/core/src/main/java/com/dite/znpt/util/EXIFUtil.java new file mode 100644 index 0000000..136a5a7 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/util/EXIFUtil.java @@ -0,0 +1,69 @@ +package com.dite.znpt.util; + +import cn.hutool.json.JSONObject; +import com.drew.imaging.ImageMetadataReader; +import com.drew.metadata.Directory; +import com.drew.metadata.Metadata; +import com.drew.metadata.Tag; + +import java.io.File; + +/** + * @author Bear.G + * @date 2025/4/24/周四 14:10 + * @description + */ +public class EXIFUtil { + + public static void main(String[] args) throws Exception { + File file = new File("C:\\Users\\Administrator\\Desktop\\水杯.jpg"); + printImageTags(file); + } + /** + * 读取照片里面的信息 + */ + public static JSONObject printImageTags(File file) throws Exception { + Metadata metadata = ImageMetadataReader.readMetadata(file); + JSONObject jsonObject = new JSONObject(); + String lat = ""; + String log = ""; + for (Directory directory : metadata.getDirectories()) { + for (Tag tag : directory.getTags()) { + // 标签名 + String tagName = tag.getTagName(); + // 标签信息 + String desc = tag.getDescription(); + System.out.println(tagName + "=" + desc); + switch (tagName) { + // 经度 + case "GPS Longitude": + lat = pointToLatlong(desc); + jsonObject.put(tagName, lat); + break; + // 纬度 + case "GPS Latitude": + log = pointToLatlong(desc); + jsonObject.put(tagName, log); + break; + default: + jsonObject.put(tagName, desc); + break; + } + } + } + System.out.println("**********" + jsonObject.toString()); + return jsonObject; + } + + /*** + * 经纬度坐标格式转换(* °转十进制格式) + * @param point + */ + public static String pointToLatlong(String point) { + Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim()); + Double fen = Double.parseDouble(point.substring(point.indexOf("°") + 1, point.indexOf("'")).trim()); + Double miao = Double.parseDouble(point.substring(point.indexOf("'") + 1, point.indexOf("\"")).trim()); + Double duStr = du + fen / 60 + miao / 60 / 60; + return duStr.toString(); + } +} diff --git a/core/src/main/resources/mapper/ImageMapper.xml b/core/src/main/resources/mapper/ImageMapper.xml index 6f39975..9fba7da 100644 --- a/core/src/main/resources/mapper/ImageMapper.xml +++ b/core/src/main/resources/mapper/ImageMapper.xml @@ -1,52 +1,18 @@ - - a.image_id, a.part_id, a.turbine_id, a.project, - a.image_name, a.image_size, a.focal_distance, a.shooting_time, - a.camera_manufacturer, a.camera_model + 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 - - + \ No newline at end of file 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 new file mode 100644 index 0000000..f0f1cf8 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ImageController.java @@ -0,0 +1,29 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.vo.ImageListReq; +import com.dite.znpt.domain.vo.ImageResp; +import com.dite.znpt.service.ImageService; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; + +import javax.annotation.Resource; + +/** + * @author Bear.G + * @date 2025/4/24/周四 12:46 + * @description + */ +public class ImageController { + + @Resource + private ImageService imageService; + + @ApiOperation(value = "分页查询图像列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult list(ImageListReq req) { + return PageResult.ok(imageService.selectList(req)); + } + +} diff --git a/web/src/main/resources/application-dev.yml b/web/src/main/resources/application-dev.yml index adf1b31..5362495 100644 --- a/web/src/main/resources/application-dev.yml +++ b/web/src/main/resources/application-dev.yml @@ -1,7 +1,7 @@ # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 - port: 8080 + port: 8888 # 数据源配置 spring: @@ -10,7 +10,7 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://39.99.201.243:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root - password: h67&E98HS8^6 + password: BUw8YW6%@^8q druid: # 初始连接数 initialSize: 5 @@ -59,11 +59,16 @@ spring: max-wait: 3000 host: 39.99.201.243 port: 6379 - password: yfeng@123 + password: diTeZn@123 timeout: 3000 # 0 gaea系统,3 gaea-dev/gaea-test系统,4 znpt开发,5 znpt测试 6 znpt生产 database: 4 - + # mq 配置 + rabbitmq: + host: 39.99.201.243 + port: 3389 + username: dite + password: diTezN@123 ## MINIO配置 #minio: # url: http://10.20.32.11:9000 @@ -80,7 +85,7 @@ spring: sip-config: name: 信令服务 - ip: 10.17.12.203 + ip: 192.168.0.207 port: 1074 charset: gb2312 domain: 3402000000 @@ -96,17 +101,17 @@ zlm-config: # 公网ip publicHost: # 接口ip - apiHost: 10.17.12.203 + apiHost: 192.168.0.207 # 接口端口 - apiPort: 30186 + apiPort: 8080 # 密钥 - secretKey: JvVotkdN01y4qZHlrJsdq4gD7n9rK6wV + secretKey: 6Q76ivvVOQDsnnfOSKbtVzcYpbgy4n1G # 流id前缀 streamPrefix: # rtp ip rtpHost: 10.17.12.203 # rtp 端口 - rtpPort: 30186 + rtpPort: 8080 # 动态端口起始值 dynamicPortStart: 30150 # 动态端口结束值