小区信息业务功能开发

door
LI-CCONG\李聪聪 7 months ago
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));
}
}
}

@ -202,7 +202,7 @@ public class RecycleOrderController {
* @param locationDTO
*/
private void computeOrderDistance(RecycleOrderRespVO orderRespVO, LocationDTO locationDTO) {
if (ObjectUtil.isAllNotEmpty(locationDTO) && locationDTO.isValid()) {
if (ObjectUtil.isNotEmpty(locationDTO) && locationDTO.isValid()) {
String longitude = locationDTO.getLongitude();
String latitude = locationDTO.getLatitude();
String orderLongitude = orderRespVO.getLocation().getLongitude();

@ -0,0 +1,85 @@
package cc.yunxi.domain.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDateTime;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-18 02:31:50
*/
@Data
@TableName("nx_housing_estate")
@ApiModel(value = "HousingEstate", description = "小区信息表")
public class HousingEstate {
@ApiModelProperty("主键id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty("小区名")
@TableField("name")
private String name;
@ApiModelProperty("小区详细地址")
@TableField("address")
private String address;
@ApiModelProperty("经度")
@TableField("longitude")
private String longitude;
@ApiModelProperty("纬度")
@TableField("latitude")
private String latitude;
@ApiModelProperty("是否支持定时定点回收 0 否 1 是")
@TableField("has_schedule")
private Integer hasSchedule;
@ApiModelProperty("定点回收地址")
@TableField("recycle_address")
private String recycleAddress;
@ApiModelProperty("定点回收时间起")
@TableField("appointment_time_start")
private String appointmentTimeStart;
@ApiModelProperty("定点回收时间止")
@TableField("appointment_time_end")
private String appointmentTimeEnd;
@ApiModelProperty("所属回收站id")
@TableField("station_id")
private String stationId;
// @ApiModelProperty("有效标志(0-禁用1-启用)")
// @TableField("enabled_mark")
// private Integer enabledMark;
@ApiModelProperty("创建时间")
@TableField("f_creator_time")
private LocalDateTime creatorTime;
@ApiModelProperty("备注")
@TableField("remark")
private String remark;
@ApiModelProperty("小区距离(m)")
@TableField(exist = false)
private String distance;
}

@ -0,0 +1,62 @@
package cc.yunxi.domain.vo.housingestate;
import cc.yunxi.domain.dto.LocationDTO;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-18 02:31:50
*/
@Data
@ApiModel(value = "HousingEstate", description = "小区信息 Response VO")
public class HousingEstateRespVO {
@ApiModelProperty("主键id")
private String id;
@ApiModelProperty("小区名")
private String name;
@ApiModelProperty("小区详细地址")
private String address;
@ApiModelProperty("位置信息")
private LocationDTO location;
@ApiModelProperty("定点回收地址")
private String recycleAddress;
@ApiModelProperty("定点回收时间起")
private String appointmentTimeStart;
@ApiModelProperty("定点回收时间止")
private String appointmentTimeEnd;
@ApiModelProperty("所属回收站id")
private String stationId;
// @ApiModelProperty("有效标志(0-禁用1-启用)")
// @TableField("enabled_mark")
// private Integer enabledMark;
@ApiModelProperty("创建时间")
private LocalDateTime creatorTime;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("小区距离(km)")
private String 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 &lt;= 20000
ORDER BY
distance ASC
LIMIT 2;
</select>
</mapper>
Loading…
Cancel
Save