根据经纬度查询景区,并添加查询所有景区的功能

This commit is contained in:
2025-06-05 17:27:55 +08:00
parent 2ae0b3c4b3
commit f9fcb06355
5 changed files with 37 additions and 4 deletions

View File

@ -2,9 +2,11 @@ package com.ycwl.basic.controller.mobile;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.ycwl.basic.annotation.IgnoreToken; import com.ycwl.basic.annotation.IgnoreToken;
import com.ycwl.basic.constant.BaseContextHandler;
import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.jwt.JwtInfo;
import com.ycwl.basic.model.mobile.scenic.ScenicAppVO; import com.ycwl.basic.model.mobile.scenic.ScenicAppVO;
import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO; import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO;
import com.ycwl.basic.model.mobile.scenic.ScenicIndexVO;
import com.ycwl.basic.model.mobile.scenic.content.ContentPageVO; import com.ycwl.basic.model.mobile.scenic.content.ContentPageVO;
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
@ -22,6 +24,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -41,11 +44,21 @@ public class AppScenicController {
private AppScenicService appScenicService; private AppScenicService appScenicService;
@Autowired @Autowired
private ScenicRepository scenicRepository; private ScenicRepository scenicRepository;
private static final List<String> ENABLED_USER_IDs = new ArrayList<>(){{
add("3932535453961555968");
add("3936121342868459520");
add("3936940597855784960");
}};
@ApiOperation("分页查询景区列表") @ApiOperation("分页查询景区列表")
@PostMapping("/page") @PostMapping("/page")
public ApiResponse<PageInfo<ScenicAppVO>> pageQuery(@RequestBody ScenicReqQuery scenicReqQuery){ public ApiResponse<PageInfo<ScenicAppVO>> pageQuery(@RequestBody ScenicReqQuery scenicReqQuery){
return appScenicService.pageQuery(scenicReqQuery); String userId = BaseContextHandler.getUserId();
if (ENABLED_USER_IDs.contains(userId)) {
return appScenicService.pageQuery(scenicReqQuery);
} else {
return ApiResponse.success(new PageInfo<>(new ArrayList<>()));
}
} }
@ApiOperation("根据id查询景区详情") @ApiOperation("根据id查询景区详情")
@IgnoreToken @IgnoreToken
@ -96,4 +109,10 @@ public class AppScenicController {
List<ContentPageVO> contentPageVOS = faceService.faceContentList(faceId); List<ContentPageVO> contentPageVOS = faceService.faceContentList(faceId);
return ApiResponse.success(contentPageVOS); return ApiResponse.success(contentPageVOS);
} }
@PostMapping("/nearby")
public ApiResponse<List<ScenicAppVO>> nearby(@RequestBody ScenicIndexVO scenicIndexVO) {
List<ScenicAppVO> list = appScenicService.scenicListByLnLa(scenicIndexVO);
return ApiResponse.success(list);
}
} }

View File

@ -70,7 +70,7 @@ public class ScenicAppVO {
/** /**
* 距离 * 距离
*/ */
@ApiModelProperty("距离") @ApiModelProperty("距离")
private BigDecimal distance; private BigDecimal distance;
/** /**

View File

@ -3,6 +3,7 @@ package com.ycwl.basic.service.mobile;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.ycwl.basic.model.mobile.scenic.ScenicAppVO; import com.ycwl.basic.model.mobile.scenic.ScenicAppVO;
import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO; import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO;
import com.ycwl.basic.model.mobile.scenic.ScenicIndexVO;
import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginReq; import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginReq;
import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginRespVO; import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginRespVO;
import com.ycwl.basic.model.pc.device.resp.DeviceRespVO; import com.ycwl.basic.model.pc.device.resp.DeviceRespVO;
@ -28,4 +29,6 @@ public interface AppScenicService {
ApiResponse<ScenicRespVO> getMyScenic(); ApiResponse<ScenicRespVO> getMyScenic();
ApiResponse<List<DeviceRespVO>> getMyDevices(); ApiResponse<List<DeviceRespVO>> getMyDevices();
List<ScenicAppVO> scenicListByLnLa(ScenicIndexVO scenicIndexVO);
} }

View File

@ -8,6 +8,7 @@ import com.ycwl.basic.mapper.*;
import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.jwt.JwtInfo;
import com.ycwl.basic.model.mobile.scenic.ScenicAppVO; import com.ycwl.basic.model.mobile.scenic.ScenicAppVO;
import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO; import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO;
import com.ycwl.basic.model.mobile.scenic.ScenicIndexVO;
import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginReq; import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginReq;
import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginRespVO; import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginRespVO;
import com.ycwl.basic.model.pc.device.resp.DeviceRespVO; import com.ycwl.basic.model.pc.device.resp.DeviceRespVO;
@ -21,6 +22,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
@ -110,4 +112,10 @@ public class AppScenicServiceImpl implements AppScenicService {
List<DeviceRespVO> deviceRespVOList = deviceMapper.listByScenicIdWithWVP(account.getScenicId()); List<DeviceRespVO> deviceRespVOList = deviceMapper.listByScenicIdWithWVP(account.getScenicId());
return ApiResponse.success(deviceRespVOList); return ApiResponse.success(deviceRespVOList);
} }
@Override
public List<ScenicAppVO> scenicListByLnLa(ScenicIndexVO scenicIndexVO) {
List<ScenicAppVO> scenicAppVOS = scenicMapper.scenicListByLnLa(scenicIndexVO);
return scenicAppVOS.stream().filter(scenic -> scenic.getDistance().compareTo(scenic.getRadius().multiply(BigDecimal.valueOf(1_000L))) < 0).toList();
}
} }

View File

@ -173,7 +173,8 @@
where s.id = #{id} where s.id = #{id}
</select> </select>
<select id="appList" resultType="com.ycwl.basic.model.mobile.scenic.ScenicAppVO"> <select id="appList" resultType="com.ycwl.basic.model.mobile.scenic.ScenicAppVO">
select s.id, `name`, `phone`, introduction,cover_url, longitude, latitude, radius, province, city, area, address select s.id, `name`, `phone`, introduction, cover_url, longitude, latitude, radius, province, city, area, address,
(SELECT COUNT(1) FROM device WHERE scenic_id = s.id AND status = 1) as deviceNum
from scenic s from scenic s
where where
`status` = 1 `status` = 1
@ -218,13 +219,15 @@
ifnull( ifnull(
cast( cast(
ST_Distance_Sphere( ST_Distance_Sphere(
Point(longitude, latitude), Point(#{params.longitude}, #{params.latitude}) Point(longitude, latitude), Point(#{longitude}, #{latitude})
) AS ) AS
DECIMAL(10, 2) DECIMAL(10, 2)
), 0 ), 0
) AS distance ) AS distance
from scenic s from scenic s
where `status` = 1 where `status` = 1
and `latitude` is not null
and `longitude` is not null
ORDER BY distance ASC ORDER BY distance ASC
</select> </select>
<select id="getConfig" resultType="com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity"> <select id="getConfig" resultType="com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity">