parent
f33d1361a5
commit
feafd4d4f0
@ -0,0 +1,87 @@
|
||||
package cc.yunxi.controller;
|
||||
|
||||
|
||||
import cc.yunxi.common.domain.CommonResult;
|
||||
import cc.yunxi.common.utils.BeanUtils;
|
||||
import cc.yunxi.common.utils.CommonUtil;
|
||||
import cc.yunxi.domain.dto.LocationDTO;
|
||||
import cc.yunxi.domain.po.HousingEstate;
|
||||
import cc.yunxi.domain.vo.housingestate.HousingEstateRespVO;
|
||||
import cc.yunxi.domain.vo.recycleorder.RecycleOrderRespVO;
|
||||
import cc.yunxi.service.IHousingEstateService;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 小区信息表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author ccongli
|
||||
* @since 2024-03-18 02:31:50
|
||||
*/
|
||||
@Api(tags = "小区接口")
|
||||
@RestController
|
||||
@RequestMapping("/housing-estate")
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
@Validated
|
||||
public class HousingEstateController {
|
||||
|
||||
|
||||
@Resource
|
||||
private IHousingEstateService housingEstateService;
|
||||
|
||||
@ApiOperation("附近两个小区")
|
||||
@GetMapping("/nearby")
|
||||
public CommonResult<List<HousingEstateRespVO>> getNearbyHousingList(LocationDTO location) {
|
||||
List<HousingEstate> housingList = housingEstateService.getNearbyHousingList(location);
|
||||
List<HousingEstateRespVO> housingEstateRespVOList = BeanUtils.copyList(housingList, HousingEstateRespVO.class, (s,t) -> {
|
||||
t.setLocation(new LocationDTO(s.getLongitude(), s.getLatitude()));
|
||||
t.setDistance(String.valueOf(new Double(s.getDistance()) / 1000));
|
||||
});
|
||||
return CommonResult.success(housingEstateRespVOList);
|
||||
}
|
||||
|
||||
@ApiOperation("小区详情")
|
||||
@GetMapping("/info")
|
||||
public CommonResult<HousingEstateRespVO> getNearbyHousing(String housingEstateId, LocationDTO location) {
|
||||
HousingEstate housingEstate = housingEstateService.getHousingInfo(housingEstateId);
|
||||
HousingEstateRespVO housingEstateRespVO = BeanUtils.copyBean(housingEstate, HousingEstateRespVO.class, (s,t) -> {
|
||||
t.setLocation(new LocationDTO(s.getLongitude(), s.getLatitude()));
|
||||
});
|
||||
this.computeDistance(housingEstateRespVO, location);
|
||||
return CommonResult.success(housingEstateRespVO);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 计算散户 -> 小区距离(km)
|
||||
* @param housingEstateRespVO
|
||||
* @param locationDTO
|
||||
*/
|
||||
private void computeDistance(HousingEstateRespVO housingEstateRespVO, LocationDTO locationDTO) {
|
||||
if (ObjectUtil.isNotEmpty(locationDTO) && locationDTO.isValid()) {
|
||||
String longitude = locationDTO.getLongitude();
|
||||
String latitude = locationDTO.getLatitude();
|
||||
String orderLongitude = housingEstateRespVO.getLocation().getLongitude();
|
||||
String orderLatitude = housingEstateRespVO.getLocation().getLatitude();
|
||||
BigDecimal distance = CommonUtil.getDistance(longitude, latitude, orderLongitude, orderLatitude);
|
||||
housingEstateRespVO.setDistance(String.valueOf(distance));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package cc.yunxi.mapper;
|
||||
|
||||
import cc.yunxi.domain.dto.LocationDTO;
|
||||
import cc.yunxi.domain.po.HousingEstate;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 小区信息表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author ccongli
|
||||
* @since 2024-03-18 02:31:50
|
||||
*/
|
||||
@Mapper
|
||||
public interface HousingEstateMapper extends BaseMapper<HousingEstate> {
|
||||
|
||||
|
||||
/**
|
||||
* 附近的小区
|
||||
* @param location
|
||||
* @return HousingEstate
|
||||
*/
|
||||
List<HousingEstate> getNearbyHousingList(@Param("location") LocationDTO location);
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package cc.yunxi.service;
|
||||
|
||||
import cc.yunxi.domain.dto.LocationDTO;
|
||||
import cc.yunxi.domain.po.HousingEstate;
|
||||
import cc.yunxi.domain.vo.housingestate.HousingEstateRespVO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 小区信息表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author ccongli
|
||||
* @since 2024-03-18 02:31:50
|
||||
*/
|
||||
public interface IHousingEstateService extends IService<HousingEstate> {
|
||||
|
||||
/**
|
||||
* 附近的小区
|
||||
* @param location
|
||||
* @return HousingEstate
|
||||
*/
|
||||
List<HousingEstate> getNearbyHousingList(@Valid LocationDTO location);
|
||||
|
||||
|
||||
/**
|
||||
* 小区详情
|
||||
* @param housingEstateId
|
||||
* @return HousingEstate
|
||||
*/
|
||||
HousingEstate getHousingInfo(String housingEstateId);
|
||||
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package cc.yunxi.service.impl;
|
||||
|
||||
import cc.yunxi.common.exception.BizIllegalException;
|
||||
import cc.yunxi.domain.dto.LocationDTO;
|
||||
import cc.yunxi.domain.po.HousingEstate;
|
||||
import cc.yunxi.domain.po.RecycleOrder;
|
||||
import cc.yunxi.mapper.HousingEstateMapper;
|
||||
import cc.yunxi.service.IHousingEstateService;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 小区信息表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author ccongli
|
||||
* @since 2024-03-18 02:31:50
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class HousingEstateServiceImpl extends ServiceImpl<HousingEstateMapper, HousingEstate> implements IHousingEstateService {
|
||||
|
||||
|
||||
@Resource
|
||||
private HousingEstateMapper housingEstateMapper;
|
||||
|
||||
@Override
|
||||
public List<HousingEstate> getNearbyHousingList(LocationDTO location) {
|
||||
return housingEstateMapper.getNearbyHousingList(location);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HousingEstate getHousingInfo(String housingEstateId) {
|
||||
if (StrUtil.isEmpty(housingEstateId)) {
|
||||
throw new BizIllegalException("请求参数缺失");
|
||||
}
|
||||
HousingEstate housingEstate = this.getById(housingEstateId);
|
||||
if (housingEstate == null) {
|
||||
throw new BizIllegalException("小区信息不存在");
|
||||
}
|
||||
return housingEstate;
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cc.yunxi.mapper.HousingEstateMapper">
|
||||
|
||||
<!-- 查询附近的小区, 限制20km以内 -->
|
||||
<select id="getNearbyHousingList" resultType="HousingEstate">
|
||||
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_housing_estate a
|
||||
WHERE
|
||||
has_schedule = 1 AND station_id is not null
|
||||
HAVING
|
||||
distance <= 20000
|
||||
ORDER BY
|
||||
distance ASC
|
||||
LIMIT 2;
|
||||
</select>
|
||||
|
||||
</mapper>
|
Loading…
Reference in new issue