From b53c03f0e1b0a584f4228603640c9199e78ff15e Mon Sep 17 00:00:00 2001 From: "review512jwy@163.com" <“review512jwy@163.com”> Date: Wed, 22 Apr 2026 10:47:50 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E5=9C=B0=E5=9B=BE=E5=8F=AF?= =?UTF-8?q?=E8=A7=86=E8=8C=83=E5=9B=B4=E5=86=85=E6=9F=A5=E8=AF=A2=E5=8A=A8?= =?UTF-8?q?=E7=89=A9=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mini/controller/HomePageController.java | 27 ++++++++++++++++ .../mini/mapper/MiniStrayAnimalMapper.java | 6 ++++ .../boot/mini/model/dto/MapBoundsRequest.java | 24 ++++++++++++++ .../youlai/boot/mini/model/dto/MapSearch.java | 18 +++++++++++ .../mini/model/vo/StrayAnimalDetailsVO.java | 2 +- .../mini/model/vo/StrayAnimalNearbyVO.java | 28 ++++++++++++++++ .../boot/mini/service/StrayAnimalService.java | 4 +++ .../service/impl/StrayAnimalServiceImpl.java | 20 ++++++++++++ src/main/resources/application-dev.yml | 1 + src/main/resources/application-prod.yml | 1 + .../mapper/mini/MiniStrayAnimalMapper.xml | 32 +++++++++++++++++++ 11 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/youlai/boot/mini/controller/HomePageController.java create mode 100644 src/main/java/com/youlai/boot/mini/model/dto/MapBoundsRequest.java create mode 100644 src/main/java/com/youlai/boot/mini/model/dto/MapSearch.java create mode 100644 src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalNearbyVO.java diff --git a/src/main/java/com/youlai/boot/mini/controller/HomePageController.java b/src/main/java/com/youlai/boot/mini/controller/HomePageController.java new file mode 100644 index 0000000..7070ee7 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/controller/HomePageController.java @@ -0,0 +1,27 @@ +package com.youlai.boot.mini.controller; + + +import com.youlai.boot.common.result.Result; +import com.youlai.boot.mini.model.dto.MapSearch; +import com.youlai.boot.mini.service.StrayAnimalService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@Tag(name = "首页的相关接口") +@RestController +@RequestMapping("/api/v1/mini/homePage") +@RequiredArgsConstructor +public class HomePageController { + + private final StrayAnimalService strayAnimalService; + + @Operation(summary = "根据地图边界获取流浪动物信息(不需要登录)") + @RequestMapping(value = "/listByBounds", method = RequestMethod.GET) + public Result listByMapBounds(MapSearch mapSearch) { + return Result.success(strayAnimalService.listByMapBounds(mapSearch)); + } + +} + diff --git a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalMapper.java b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalMapper.java index 6f4b784..dcb5bd1 100644 --- a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalMapper.java +++ b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalMapper.java @@ -2,13 +2,17 @@ package com.youlai.boot.mini.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.youlai.boot.mini.model.dto.MapSearch; import com.youlai.boot.mini.model.entity.MiniStrayAnimal; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; import com.youlai.boot.mini.model.vo.StrayAnimalDetailsVO; +import com.youlai.boot.mini.model.vo.StrayAnimalNearbyVO; import com.youlai.boot.mini.model.vo.StrayAnimalShortVO; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 流浪动物基础信息表 Mapper 接口 * @@ -24,4 +28,6 @@ public interface MiniStrayAnimalMapper extends BaseMapper { IPage getAnimalPage(Page page, @Param("queryParams") OwnStrayAnimalQuery queryParams); StrayAnimalDetailsVO getStrayAnimalDetails(@Param("animalUuid") String animalUuid, @Param("miniUserId") Long miniUserId); + + List listByMapBounds(MapSearch mapSearch); } diff --git a/src/main/java/com/youlai/boot/mini/model/dto/MapBoundsRequest.java b/src/main/java/com/youlai/boot/mini/model/dto/MapBoundsRequest.java new file mode 100644 index 0000000..4916f23 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/dto/MapBoundsRequest.java @@ -0,0 +1,24 @@ +package com.youlai.boot.mini.model.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 地图视口边界请求参数 DTO + */ +@Data +public class MapBoundsRequest { + + @Schema(description = "地图窗口左下角经度") + private Double southWestLng; + + @Schema(description = "地图窗口左下角纬度") + private Double southWestLat; + + @Schema(description = "地图窗口右上角经度") + private Double northEastLng; + + @Schema(description = "地图窗口右上角纬度") + private Double northEastLat; +} + diff --git a/src/main/java/com/youlai/boot/mini/model/dto/MapSearch.java b/src/main/java/com/youlai/boot/mini/model/dto/MapSearch.java new file mode 100644 index 0000000..e386e22 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/dto/MapSearch.java @@ -0,0 +1,18 @@ +package com.youlai.boot.mini.model.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 地图视口边界请求参数 DTO + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class MapSearch extends MapBoundsRequest{ + + @Schema(description = "动物类型,cat-猫,dog-狗,other-其他", example = "cat") + private String animalType; + +} + diff --git a/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalDetailsVO.java b/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalDetailsVO.java index 90b0891..34b9d9c 100644 --- a/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalDetailsVO.java +++ b/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalDetailsVO.java @@ -15,7 +15,7 @@ public class StrayAnimalDetailsVO extends StrayAnimalShortVO { @Schema(description = "体型,small-小,medium-中等,large-大", example = "medium") private String size; - @Schema(description = "状态,found-发现,adopted-已被领养,missing-失踪", example = "missing", required = true) + @Schema(description = "状态,found-发现,adopted-已被领养,missing-失踪", example = "missing", requiredMode = Schema.RequiredMode.REQUIRED) private String status="found"; @Schema(description = "经度", example = "118.08125") diff --git a/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalNearbyVO.java b/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalNearbyVO.java new file mode 100644 index 0000000..04055d9 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalNearbyVO.java @@ -0,0 +1,28 @@ +package com.youlai.boot.mini.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + +@Data +public class StrayAnimalNearbyVO { + + @Schema(type = "string", description = "动物信息UUID", example = "0677d62d63ec693bf1bd6dab8a877dc1", requiredMode = Schema.RequiredMode.REQUIRED) + private String animalUuid; + + @Schema(description = "动物类型,cat-猫,dog-狗,other-其他") + private String animalType; + + @Schema(description = "颜色") + private String color; + + @Schema(description = "体型大小,small-小,medium-中等,large-大") + private String size; + + @Schema(description = "经度") + private Double lng; + + @Schema(description = "纬度") + private Double lat; + +} diff --git a/src/main/java/com/youlai/boot/mini/service/StrayAnimalService.java b/src/main/java/com/youlai/boot/mini/service/StrayAnimalService.java index 6c34846..d97ea4e 100644 --- a/src/main/java/com/youlai/boot/mini/service/StrayAnimalService.java +++ b/src/main/java/com/youlai/boot/mini/service/StrayAnimalService.java @@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.youlai.boot.mini.model.dto.DeleteStrayAnimalDTO; import com.youlai.boot.mini.model.dto.DeleteStrayAnimalNoteMediaDTO; import com.youlai.boot.mini.model.dto.EditVisibilityDTO; +import com.youlai.boot.mini.model.dto.MapSearch; import com.youlai.boot.mini.model.entity.MiniStrayAnimal; import com.youlai.boot.mini.model.form.StrayAnimalForm; import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; import com.youlai.boot.mini.model.vo.StrayAnimalDetailsVO; +import com.youlai.boot.mini.model.vo.StrayAnimalNearbyVO; import com.youlai.boot.mini.model.vo.StrayAnimalShortVO; import jakarta.validation.Valid; import org.springframework.web.multipart.MultipartFile; @@ -34,5 +36,7 @@ public interface StrayAnimalService extends IService { StrayAnimalDetailsVO getDetails(String animalUuid, Long miniUserId); IPage getOthersCreatedPage(String authorUuid, OwnStrayAnimalQuery queryParams); + + List listByMapBounds(MapSearch mapSearch); } diff --git a/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalServiceImpl.java b/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalServiceImpl.java index 6c4d60c..fa81f14 100644 --- a/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalServiceImpl.java +++ b/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalServiceImpl.java @@ -24,6 +24,7 @@ import com.youlai.boot.mini.mapper.MiniStrayAnimalNoteMediaMapper; import com.youlai.boot.mini.model.dto.DeleteStrayAnimalDTO; import com.youlai.boot.mini.model.dto.DeleteStrayAnimalNoteMediaDTO; import com.youlai.boot.mini.model.dto.EditVisibilityDTO; +import com.youlai.boot.mini.model.dto.MapSearch; import com.youlai.boot.mini.model.enums.AnimalNoteMediaTypeEnum; import com.youlai.boot.mini.model.entity.MiniStrayAnimal; import com.youlai.boot.mini.model.entity.MiniStrayAnimalNote; @@ -32,6 +33,7 @@ import com.youlai.boot.mini.model.form.StrayAnimalForm; import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; import com.youlai.boot.mini.model.vo.MiniStrayAnimalNoteMediaVO; import com.youlai.boot.mini.model.vo.StrayAnimalDetailsVO; +import com.youlai.boot.mini.model.vo.StrayAnimalNearbyVO; import com.youlai.boot.mini.model.vo.StrayAnimalShortVO; import com.youlai.boot.mini.service.StrayAnimalService; import com.youlai.boot.system.mapper.UserMapper; @@ -527,4 +529,22 @@ public class StrayAnimalServiceImpl extends ServiceImpl listByMapBounds(MapSearch mapSearch) { + if (mapSearch.getNorthEastLng() == null || mapSearch.getNorthEastLat() == null + || mapSearch.getSouthWestLng() == null || mapSearch.getSouthWestLat() == null) { + throw new MsgException("地图边界参数未完整填写"); + } + + double[] wgs84 = CoordinateTransformUtils.gcj02ToWgs84(mapSearch.getNorthEastLng(), mapSearch.getNorthEastLat()); + mapSearch.setNorthEastLat(wgs84[1]); + mapSearch.setNorthEastLng(wgs84[0]); + + double[] wgs842 = CoordinateTransformUtils.gcj02ToWgs84(mapSearch.getSouthWestLng(), mapSearch.getSouthWestLat()); + mapSearch.setSouthWestLat(wgs842[1]); + mapSearch.setSouthWestLng(wgs842[0]); + + return miniStrayAnimalMapper.listByMapBounds(mapSearch); + } + } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 2453cc5..16a2d8b 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -89,6 +89,7 @@ security: - /api/v1/wxma/auth/** # 微信小程序认证接口(静默登录/手机号快捷登录/绑定手机号) - /api/v1/logs/** # 日志接口(访问日志列表) - /api/v1/mini/public/** + - /api/v1/mini/homePage/listByBounds - /healthcheck # 非安全端点路径,完全绕过 Spring Security 的过滤器 unsecured-urls: diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index fcb3327..0ad1f6e 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -89,6 +89,7 @@ security: - /api/v1/wxma/auth/** # 微信小程序认证接口(静默登录/手机号快捷登录/绑定手机号) - /api/v1/logs/** # 日志接口(访问日志列表) - /api/v1/mini/public/** + - /api/v1/mini/homePage/listByBounds - /healthcheck # 非安全端点路径,完全绕过 Spring Security 的过滤器 unsecured-urls: diff --git a/src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml b/src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml index 4f64f79..712a2c4 100644 --- a/src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml +++ b/src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml @@ -260,4 +260,36 @@ WHERE a.uuid = #{animalUuid} + + + +