附近的站点业务功能开发

wxpay
LI-CCONG\李聪聪 7 months ago
parent 03bdeca486
commit 2853583521

@ -174,12 +174,12 @@ public class RecycleOrderController {
detailResponseVOList.stream().collect(Collectors.groupingBy(RecycleOrderDetailResponseVO::getRecycleOrderId)); detailResponseVOList.stream().collect(Collectors.groupingBy(RecycleOrderDetailResponseVO::getRecycleOrderId));
// 地址关联信息 // 地址关联信息
Map<String, String> orderAddressMap = orderRespVOList.stream().collect(Collectors.toMap( Map<String, String> orderAddressMap = orderRespVOList.stream().collect(Collectors.toMap(
RecycleOrderRespVO::getId, RecycleOrderRespVO::getClientAddressId)); RecycleOrderRespVO::getId, v -> Optional.ofNullable(v.getClientAddressId()).orElse(""), (k1, k2) -> k1));
Set<String> addressIds = new HashSet<>(orderAddressMap.values()); Set<String> addressIds = new HashSet<>(orderAddressMap.values());
List<ClientAddress> clientAddresses = clientAddressService.queryAddressList(addressIds); List<ClientAddress> clientAddresses = clientAddressService.queryAddressList(addressIds);
List<ClientAddressSimpleVO> addressSimpleVOList = BeanUtils.copyList(clientAddresses, ClientAddressSimpleVO.class); List<ClientAddressSimpleVO> addressSimpleVOList = BeanUtils.copyList(clientAddresses, ClientAddressSimpleVO.class);
Map<String, ClientAddressSimpleVO> clientAddressMap = addressSimpleVOList.stream().collect(Collectors.toMap( Map<String, ClientAddressSimpleVO> clientAddressMap = addressSimpleVOList.stream().collect(Collectors.toMap(
ClientAddressSimpleVO::getId, cas -> cas)); ClientAddressSimpleVO::getId, v -> v, (k1, k2) -> k1));
for (RecycleOrderRespVO orderRespVO : orderRespVOList) { for (RecycleOrderRespVO orderRespVO : orderRespVOList) {
this.computeOrderDistance(orderRespVO, locationDTO); this.computeOrderDistance(orderRespVO, locationDTO);
List<RecycleOrderDetailResponseVO> orderDetails = orderProductsMap.get(orderRespVO.getId()); List<RecycleOrderDetailResponseVO> orderDetails = orderProductsMap.get(orderRespVO.getId());

@ -69,4 +69,18 @@ public class RecycleStationController {
return CommonResult.success(stationProduct); return CommonResult.success(stationProduct);
} }
@ApiOperation("附近的回收站")
@GetMapping("/nearby")
public CommonResult<RecycleStationRespVO> stationNearby(LocationDTO locationDTO) {
RecycleStation nearbyStation = recycleStationService.getNearbyStation(locationDTO);
RecycleStationRespVO stationRespVO = null;
if (ObjectUtil.isNotEmpty(nearbyStation)) {
stationRespVO = BeanUtils.copyBean(nearbyStation, RecycleStationRespVO.class);
List<ProductRespVO> produceList = recycleStationService.getStationProduct(nearbyStation.getId());
stationRespVO.setStationProducts(produceList);
}
return CommonResult.success(stationRespVO);
}
} }

@ -1,10 +1,12 @@
package cc.yunxi.domain.vo.recyclestation; package cc.yunxi.domain.vo.recyclestation;
import cc.yunxi.domain.vo.priceproduct.ProductRespVO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* <p> * <p>
@ -89,12 +91,15 @@ public class RecycleStationRespVO {
@ApiModelProperty("范围限制(单位m)") @ApiModelProperty("范围限制(单位m)")
private Integer acceptRange; private Integer acceptRange;
@ApiModelProperty("服务范围内小区") // @ApiModelProperty("服务范围内小区")
private String acceptHousingEstate; // private String acceptHousingEstate;
@ApiModelProperty("创建时间") @ApiModelProperty("创建时间")
private LocalDateTime creatorTime; private LocalDateTime creatorTime;
@ApiModelProperty("站点距离(m)") @ApiModelProperty("站点距离(m)")
private String distance; private String distance;
@ApiModelProperty("站点类目信息")
private List<ProductRespVO> stationProducts;
} }

@ -29,10 +29,18 @@ public interface RecycleStationMapper extends BaseMapper<RecycleStation> {
* sql xml * sql xml
* @param page * @param page
* @param queryWrapper * @param queryWrapper
* @return * @return Page<RecycleStation>
*/ */
Page<RecycleStation> queryStationByPage( Page<RecycleStation> queryStationByPage(
@Param("location") LocationDTO locationDTO, Page<RecycleStation> page, @Param("location") LocationDTO locationDTO, Page<RecycleStation> page,
@Param(Constants.WRAPPER) LambdaQueryWrapper<RecycleStation> queryWrapper); @Param(Constants.WRAPPER) LambdaQueryWrapper<RecycleStation> queryWrapper);
/**
*
* @param locationDTO
* @return RecycleStation
*/
RecycleStation getNearbyStation(@Param("location") LocationDTO locationDTO);
} }

@ -77,7 +77,7 @@ public interface IClientService extends IService<Client> {
* @param amount * @param amount
* @param orderNo * @param orderNo
*/ */
void addBalance(String clientId, BigDecimal amount, String orderNo); void addBalance(String clientId, BigDecimal amount, String orderNo, String stationId);
/** /**

@ -1,8 +1,10 @@
package cc.yunxi.service; package cc.yunxi.service;
import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.po.RecycleStation; import cc.yunxi.domain.po.RecycleStation;
import cc.yunxi.domain.query.RecycleStationQuery; import cc.yunxi.domain.query.RecycleStationQuery;
import cc.yunxi.domain.vo.priceproduct.ProductRespVO; import cc.yunxi.domain.vo.priceproduct.ProductRespVO;
import cc.yunxi.domain.vo.recyclestation.RecycleStationRespVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
@ -26,6 +28,13 @@ public interface IRecycleStationService extends IService<RecycleStation> {
*/ */
Page<RecycleStation> queryStationByPage(RecycleStationQuery recycleStationQuery); Page<RecycleStation> queryStationByPage(RecycleStationQuery recycleStationQuery);
/**
*
*
* @param locationDTO
* @return
*/
RecycleStation getNearbyStation(LocationDTO locationDTO);
/** /**
* *

@ -3,9 +3,11 @@ package cc.yunxi.service.impl;
import cc.yunxi.common.domain.LambdaQueryWrapperX; import cc.yunxi.common.domain.LambdaQueryWrapperX;
import cc.yunxi.common.exception.BizIllegalException; import cc.yunxi.common.exception.BizIllegalException;
import cc.yunxi.common.utils.BeanUtils; import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.po.*; import cc.yunxi.domain.po.*;
import cc.yunxi.domain.query.RecycleStationQuery; import cc.yunxi.domain.query.RecycleStationQuery;
import cc.yunxi.domain.vo.priceproduct.ProductRespVO; import cc.yunxi.domain.vo.priceproduct.ProductRespVO;
import cc.yunxi.domain.vo.recyclestation.RecycleStationRespVO;
import cc.yunxi.enums.GlobalStatusEnum; import cc.yunxi.enums.GlobalStatusEnum;
import cc.yunxi.mapper.*; import cc.yunxi.mapper.*;
import cc.yunxi.service.IRecycleStationService; import cc.yunxi.service.IRecycleStationService;
@ -73,6 +75,12 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
} }
@Override
public RecycleStation getNearbyStation(LocationDTO locationDTO) {
return recycleStationMapper.getNearbyStation(locationDTO);
}
@Override @Override
public RecycleStation getStationById(String id) { public RecycleStation getStationById(String id) {
if (StrUtil.isEmpty(id)) { if (StrUtil.isEmpty(id)) {

@ -20,4 +20,23 @@
distance ASC distance ASC
</select> </select>
<!-- 分页查询回收站点 -->
<select id="getNearbyStation" resultType="RecycleStation">
SELECT
a.*,
ROUND(
6378.138 * 2 * ASIN(
SQRT(
POW( SIN(( #{location.latitude} - latitude ) * PI()/ 360 ), 2 ) + COS( #{location.latitude} * PI() / 180 ) * COS( latitude * PI() / 180 ) * POW( SIN(( #{location.longitude} - longitude ) * PI() / 360 ), 2 ))) * 1000
) AS distance
FROM
nx_enterprise_recycle_station a
HAVING
distance &lt;= a.accept_range
ORDER BY
distance ASC
LIMIT 1;
</select>
</mapper> </mapper>

Loading…
Cancel
Save