附近的站点业务功能开发

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

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

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

@ -29,10 +29,18 @@ public interface RecycleStationMapper extends BaseMapper<RecycleStation> {
* sql xml
* @param page
* @param queryWrapper
* @return
* @return Page<RecycleStation>
*/
Page<RecycleStation> queryStationByPage(
@Param("location") LocationDTO locationDTO, Page<RecycleStation> page,
@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 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;
import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.po.RecycleStation;
import cc.yunxi.domain.query.RecycleStationQuery;
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.service.IService;
@ -26,6 +28,13 @@ public interface IRecycleStationService extends IService<RecycleStation> {
*/
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.exception.BizIllegalException;
import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.po.*;
import cc.yunxi.domain.query.RecycleStationQuery;
import cc.yunxi.domain.vo.priceproduct.ProductRespVO;
import cc.yunxi.domain.vo.recyclestation.RecycleStationRespVO;
import cc.yunxi.enums.GlobalStatusEnum;
import cc.yunxi.mapper.*;
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
public RecycleStation getStationById(String id) {
if (StrUtil.isEmpty(id)) {

@ -20,4 +20,23 @@
distance ASC
</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>

Loading…
Cancel
Save