parent
3f32910bef
commit
1d942ccbe6
@ -0,0 +1,75 @@
|
||||
package cc.yunxi.controller;
|
||||
|
||||
|
||||
import cc.yunxi.common.domain.CommonResult;
|
||||
import cc.yunxi.common.domain.PageDTO;
|
||||
import cc.yunxi.common.exception.BizIllegalException;
|
||||
import cc.yunxi.common.utils.BeanUtils;
|
||||
import cc.yunxi.domain.dto.LocationDTO;
|
||||
import cc.yunxi.domain.po.RecycleOrder;
|
||||
import cc.yunxi.domain.po.RecycleStation;
|
||||
import cc.yunxi.domain.po.Recycler;
|
||||
import cc.yunxi.domain.query.RecycleStationQuery;
|
||||
import cc.yunxi.domain.query.RecyclerQuery;
|
||||
import cc.yunxi.domain.vo.RecyclerVO;
|
||||
import cc.yunxi.domain.vo.recycleorder.RecycleOrderRespVO;
|
||||
import cc.yunxi.domain.vo.recyclestation.RecycleStationRespVO;
|
||||
import cc.yunxi.service.IRecycleStationService;
|
||||
import cc.yunxi.service.IRecyclerService;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 回收站信息
|
||||
* </p>
|
||||
*
|
||||
* @author ccongli
|
||||
* @since 2024-03-04 11:28:47
|
||||
*/
|
||||
@Api(tags = "回收站点接口")
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/recycle-station")
|
||||
@Slf4j
|
||||
public class RecycleStationController {
|
||||
|
||||
private final IRecycleStationService recycleStationService;
|
||||
|
||||
@ApiOperation("分页查询回收站")
|
||||
@PostMapping("/page")
|
||||
public CommonResult<PageDTO<RecycleStationRespVO>> queryStationByPage(@RequestBody RecycleStationQuery recycleStationQuery) {
|
||||
LocationDTO locationDTO = recycleStationQuery.getLocation();
|
||||
log.info("client locationDTO: {}", locationDTO);
|
||||
if (ObjectUtil.isEmpty(locationDTO) && !locationDTO.isValid()) {
|
||||
throw new BizIllegalException("授权定位信息未授权 或 定位信息错误");
|
||||
}
|
||||
Page<RecycleStation> result = recycleStationService.queryStationByPage(recycleStationQuery);
|
||||
PageDTO<RecycleStationRespVO> recycleStationPageVO = PageDTO.of(result, RecycleStationRespVO.class);
|
||||
return CommonResult.success(recycleStationPageVO);
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("回收站详情")
|
||||
@GetMapping("/info")
|
||||
public CommonResult<RecycleStationRespVO> findOrder(@RequestBody RecycleStationQuery recycleStationQuery) {
|
||||
RecycleStation station = recycleStationService.getStationById(recycleStationQuery.getStationId());
|
||||
RecycleStationRespVO recycleStationRespVO = BeanUtils.copyBean(station, RecycleStationRespVO.class);
|
||||
// 站点距离计算
|
||||
LocationDTO locationDTO = recycleStationQuery.getLocation();
|
||||
log.info("client locationDTO: {}", locationDTO);
|
||||
if (ObjectUtil.isEmpty(locationDTO) && !locationDTO.isValid()) {
|
||||
throw new BizIllegalException("授权定位信息未授权 或 定位信息错误");
|
||||
}
|
||||
return CommonResult.success(recycleStationRespVO);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package cc.yunxi.domain.query;
|
||||
|
||||
import cc.yunxi.common.domain.PageQuery;
|
||||
import cc.yunxi.domain.dto.LocationDTO;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel(value = "RecycleStationQuery", description = "回收站查询条件")
|
||||
public class RecycleStationQuery extends PageQuery {
|
||||
|
||||
@ApiModelProperty(value = "回收站id", required = false, example = "519071906947663877")
|
||||
private String stationId;
|
||||
|
||||
@ApiModelProperty(value = "回收站名称", required = false, example = "回收站1")
|
||||
private String stationName;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "散户当前位置", required = true)
|
||||
private LocationDTO location;
|
||||
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package cc.yunxi.mapper;
|
||||
|
||||
import cc.yunxi.domain.dto.LocationDTO;
|
||||
import cc.yunxi.domain.po.RecycleStation;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 企业-回收站信息 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author ccongli
|
||||
* @since 2024-03-04 11:28:47
|
||||
*/
|
||||
@Mapper
|
||||
public interface RecycleStationMapper extends BaseMapper<RecycleStation> {
|
||||
|
||||
/**
|
||||
* 复杂sql xml分页查询回收站
|
||||
* @param page
|
||||
* @param queryWrapper
|
||||
* @return
|
||||
*/
|
||||
Page<RecycleStation> queryStationByPage(
|
||||
@Param("location") LocationDTO locationDTO, Page<RecycleStation> page,
|
||||
@Param(Constants.WRAPPER) LambdaQueryWrapper<RecycleStation> queryWrapper);
|
||||
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package cc.yunxi.service;
|
||||
|
||||
import cc.yunxi.domain.po.RecycleOrder;
|
||||
import cc.yunxi.domain.po.RecycleStation;
|
||||
import cc.yunxi.domain.query.RecycleStationQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 企业-回收站信息 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author ccongli
|
||||
* @since 2024-03-04 11:28:47
|
||||
*/
|
||||
public interface IRecycleStationService extends IService<RecycleStation> {
|
||||
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
* @param recycleStationQuery
|
||||
* @return Page<RecycleStation>
|
||||
*/
|
||||
Page<RecycleStation> queryStationByPage(RecycleStationQuery recycleStationQuery);
|
||||
|
||||
|
||||
/**
|
||||
* 订单详情
|
||||
* @param id
|
||||
* @return RecycleOrder
|
||||
*/
|
||||
RecycleStation getStationById(String id);
|
||||
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package cc.yunxi.service.impl;
|
||||
|
||||
import cc.yunxi.common.exception.BizIllegalException;
|
||||
import cc.yunxi.domain.po.RecycleOrder;
|
||||
import cc.yunxi.domain.po.RecycleStation;
|
||||
import cc.yunxi.domain.query.RecycleOrderQuery;
|
||||
import cc.yunxi.domain.query.RecycleStationQuery;
|
||||
import cc.yunxi.mapper.RecycleStationMapper;
|
||||
import cc.yunxi.service.IRecycleStationService;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 企业-回收站信息 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author ccongli
|
||||
* @since 2024-03-04 11:28:47
|
||||
*/
|
||||
@Service
|
||||
public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper, RecycleStation> implements IRecycleStationService {
|
||||
|
||||
@Resource
|
||||
private RecycleStationMapper recycleStationMapper;
|
||||
|
||||
|
||||
public Page<RecycleStation> queryStationByPage(RecycleStationQuery recycleStationQuery) {
|
||||
LambdaQueryWrapper<RecycleStation> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(StrUtil.isNotEmpty(recycleStationQuery.getStationName()),
|
||||
RecycleStation::getStationName, recycleStationQuery.getStationName());
|
||||
// Page<RecycleStation> page = recycleStationQuery.buildPage(RecycleStation.class);
|
||||
Page<RecycleStation> page = recycleStationQuery.buildPageByDefaultOrder(RecycleStation::getCreatorTime, false);
|
||||
Page<RecycleStation> recycleStationPage = recycleStationMapper.queryStationByPage(recycleStationQuery.getLocation(), page, wrapper);
|
||||
return recycleStationPage;
|
||||
}
|
||||
|
||||
|
||||
public RecycleStation getStationById(String id) {
|
||||
if (StrUtil.isEmpty(id)) {
|
||||
throw new BizIllegalException("请求参数缺失");
|
||||
}
|
||||
return recycleStationMapper.selectById(id);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
<?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.RecycleStationMapper">
|
||||
|
||||
<!-- 分页查询回收站点 -->
|
||||
<select id="queryStationByPage" 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
|
||||
${ew.customSqlSegment}
|
||||
HAVING
|
||||
distance <= a.accept_range
|
||||
ORDER BY
|
||||
distance ASC;
|
||||
</select>
|
||||
|
||||
</mapper>
|
Loading…
Reference in new issue