package com.xiaopeng.operation.service.impl;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.xiaopeng.api.model.operation.XpPoint;
|
import com.xiaopeng.api.model.operation.XpSystemSetting;
|
import com.xiaopeng.operation.dto.NearestDto;
|
import com.xiaopeng.common.core.web.page.PageInfo;
|
import com.xiaopeng.operation.mapper.XpPointMapper;
|
import com.xiaopeng.operation.mapper.XpSystemSettingMapper;
|
import com.xiaopeng.operation.query.PointMapQuery;
|
import com.xiaopeng.operation.service.XpPointService;
|
import com.xiaopeng.operation.utils.map.FastDistanceCalculator;
|
import com.xiaopeng.operation.vo.NearestNextVo;
|
import com.xiaopeng.operation.vo.NearestVo;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.Comparator;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 点位管理 服务实现类
|
* </p>
|
*
|
* @author liu
|
* @author WuGuanFengYue
|
* @since 2026-02-03
|
*/
|
@Service
|
public class XpPointServiceImpl extends ServiceImpl<XpPointMapper, XpPoint> implements XpPointService {
|
|
@Resource
|
private XpSystemSettingMapper xpSystemSettingMapper;
|
|
|
|
@Override
|
public NearestVo nearest(NearestDto dto) {
|
// 获取所有的站点信息
|
List<XpPoint> list = list(new LambdaQueryWrapper<XpPoint>().eq(XpPoint::getOperationStatus, 1));
|
NearestVo nearestVo = new NearestVo();
|
List<NearestNextVo> nearestNextVos = new ArrayList<>();
|
|
XpSystemSetting xpSystemSetting = xpSystemSettingMapper.selectOne(null);
|
Integer orderDistance = xpSystemSetting.getOrderDistance();
|
for (XpPoint xpPoint : list) {
|
// 计算距离 小于的站点
|
double v = FastDistanceCalculator.distanceFast(dto.getLatitude(), dto.getLongitude(), xpPoint.getPointLat(), xpPoint.getPointLon());
|
if (v < orderDistance) {
|
NearestNextVo nearestNextVo = new NearestNextVo();
|
nearestNextVo.setId(xpPoint.getId());
|
nearestNextVo.setName(xpPoint.getPointName());
|
nearestNextVo.setLatitude(xpPoint.getPointLat());
|
nearestNextVo.setLongitude(xpPoint.getPointLon());
|
nearestNextVo.setDistance(v);
|
nearestNextVo.setAddress(xpPoint.getPointAddress());
|
nearestNextVo.setTime(xpPoint.getParkingTimeLimit());
|
nearestNextVos.add(nearestNextVo);
|
}
|
}
|
if (!nearestNextVos.isEmpty()) {
|
nearestNextVos = nearestNextVos.stream().sorted(Comparator.comparing(NearestNextVo::getDistance)).collect(Collectors.toList());
|
}
|
nearestVo.setPoints(nearestNextVos);
|
nearestVo.setTotal(nearestNextVos.size());
|
return nearestVo;
|
|
}
|
|
@Override
|
public PageInfo<XpPoint> pointMap(PointMapQuery query) {
|
PageInfo<XpPoint> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize());
|
List<XpPoint> list = this.baseMapper.pointMap(pageInfo,query);
|
pageInfo.setRecords( list);
|
return pageInfo;
|
}
|
|
}
|