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} + + + +