Browse Source

首页地图可视范围内查询动物结果

master
review512jwy@163.com 1 month ago
parent
commit
b53c03f0e1
  1. 27
      src/main/java/com/youlai/boot/mini/controller/HomePageController.java
  2. 6
      src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalMapper.java
  3. 24
      src/main/java/com/youlai/boot/mini/model/dto/MapBoundsRequest.java
  4. 18
      src/main/java/com/youlai/boot/mini/model/dto/MapSearch.java
  5. 2
      src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalDetailsVO.java
  6. 28
      src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalNearbyVO.java
  7. 4
      src/main/java/com/youlai/boot/mini/service/StrayAnimalService.java
  8. 20
      src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalServiceImpl.java
  9. 1
      src/main/resources/application-dev.yml
  10. 1
      src/main/resources/application-prod.yml
  11. 32
      src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml

27
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));
}
}

6
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<MiniStrayAnimal> {
IPage<StrayAnimalShortVO> getAnimalPage(Page<StrayAnimalShortVO> page, @Param("queryParams") OwnStrayAnimalQuery queryParams);
StrayAnimalDetailsVO getStrayAnimalDetails(@Param("animalUuid") String animalUuid, @Param("miniUserId") Long miniUserId);
List<StrayAnimalNearbyVO> listByMapBounds(MapSearch mapSearch);
}

24
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;
}

18
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;
}

2
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")

28
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;
}

4
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<MiniStrayAnimal> {
StrayAnimalDetailsVO getDetails(String animalUuid, Long miniUserId);
IPage<StrayAnimalShortVO> getOthersCreatedPage(String authorUuid, OwnStrayAnimalQuery queryParams);
List<StrayAnimalNearbyVO> listByMapBounds(MapSearch mapSearch);
}

20
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<MiniStrayAnimalMapper, M
return getAnimalPage(queryParams);
}
@Override
public List<StrayAnimalNearbyVO> 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);
}
}

1
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:

1
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:

32
src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml

@ -260,4 +260,36 @@
WHERE a.uuid = #{animalUuid}
</select>
<select id="listByMapBounds" resultType="com.youlai.boot.mini.model.vo.StrayAnimalNearbyVO">
SELECT
uuid animalUuid,
animal_type,
color,
size,
ST_X(gd_location_point) AS lng,
ST_Y(gd_location_point) AS lat
FROM
mini_stray_animal
WHERE is_deleted = 0
AND MBRContains(
ST_GeomFromText(
CONCAT(
'Polygon((',
#{southWestLat}, ' ', #{southWestLng}, ',',
#{southWestLat}, ' ', #{northEastLng}, ',',
#{northEastLat}, ' ', #{northEastLng}, ',',
#{northEastLat}, ' ', #{southWestLng}, ',',
#{southWestLat}, ' ', #{southWestLng},
'))'
), 4326
),
wgs84_location_point
)
<if test="animalType != null and animalType !=''">
AND animal_type = #{animalType}
</if>
</select>
</mapper>

Loading…
Cancel
Save