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