From 244228feba355b4df8e160fd4c7c353f674044f1 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期六, 14 二月 2026 17:08:05 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointServiceImpl.java | 73 +++++++++++++++++++++++++++++++++---
1 files changed, 66 insertions(+), 7 deletions(-)
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointServiceImpl.java
index 9c83592..eb9d86d 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointServiceImpl.java
@@ -3,10 +3,12 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiaopeng.api.dto.operation.PointMapQuery;
import com.xiaopeng.api.dto.order.HistoryEndPointsDto;
import com.xiaopeng.api.dto.order.HistoryStartPointsDto;
import com.xiaopeng.api.model.operation.XpPoint;
import com.xiaopeng.api.model.operation.XpSystemSetting;
+import com.xiaopeng.api.query.operation.PointPageListQuery;
import com.xiaopeng.api.vo.order.XpHistoryEndPointsVo;
import com.xiaopeng.api.vo.order.XpHistoryStartPointsVo;
import com.xiaopeng.api.vo.order.XpPointsListVo;
@@ -17,17 +19,17 @@
import com.xiaopeng.operation.mapper.XpPointMapper;
import com.xiaopeng.operation.mapper.XpSystemSettingMapper;
import com.xiaopeng.operation.query.PointByNameQuery;
-import com.xiaopeng.api.dto.operation.PointMapQuery;
-import com.xiaopeng.api.query.operation.PointPageListQuery;
import com.xiaopeng.operation.service.XpPointService;
+import com.xiaopeng.operation.utils.TimeRangeChecker;
+import com.xiaopeng.operation.utils.holiday.HolidayUtil;
import com.xiaopeng.operation.utils.map.FastDistanceCalculator;
import com.xiaopeng.operation.vo.NearestNextVo;
import com.xiaopeng.operation.vo.NearestVo;
import com.xiaopeng.operation.vo.OrderDistanceVo;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@@ -51,14 +53,17 @@
@Resource
private RedisService redisService;
+ @Resource
+ private HolidayUtil holidayUtil;
+
@Override
public NearestVo nearest(NearestDto dto) {
// 获取所有的站点信息
- List<XpPoint> list = list(new LambdaQueryWrapper<XpPoint>().eq(XpPoint::getOperationStatus, 2).isNotNull(XpPoint::getElectronicAreaId));
+ List<XpPoint> list = list(new LambdaQueryWrapper<XpPoint>().eq(XpPoint::getOperationStatus, 2).eq(XpPoint::getPointType,1).isNotNull(XpPoint::getElectronicAreaId));
NearestVo nearestVo = new NearestVo();
List<NearestNextVo> nearestNextVos = new ArrayList<>();
-
+ LocalTime now = LocalTime.now();
// 走缓存
Object orderDistanceObj = redisService.getCacheObject(CacheConstants.NEAR_POINT_DISTANCE);
Integer orderDistance;
@@ -70,6 +75,11 @@
}
for (XpPoint xpPoint : list) {
+ // 判断是否在时间段内
+ boolean intime = getInTime(now, xpPoint.getEffectivePeriod(), xpPoint.getEffectiveTimePeriod());
+ if (!intime) {
+ continue;
+ }
// 计算距离 小于的站点
double v = FastDistanceCalculator.distanceFast(dto.getLatitude(), dto.getLongitude(), xpPoint.getPointLat(), xpPoint.getPointLon());
if (v < orderDistance) {
@@ -82,6 +92,8 @@
nearestNextVo.setAddress(xpPoint.getPointAddress());
nearestNextVo.setTime(xpPoint.getParkingTimeLimit());
nearestNextVo.setElectronicAreaId(xpPoint.getElectronicAreaId());
+
+
nearestNextVos.add(nearestNextVo);
}
}
@@ -92,6 +104,44 @@
nearestVo.setTotal(nearestNextVos.size());
return nearestVo;
+ }
+
+
+
+ public boolean getInTime(LocalTime now, Integer effectivePeriod, String effectiveTimePeriod){
+ // 2非工作日 0工作日 1节假日 3调休日
+ Integer holidayToday = holidayUtil.isHolidayToday();
+ if(effectivePeriod==1){
+ boolean inTime = TimeRangeChecker.isCurrentTimeInRanges(now,effectiveTimePeriod);
+ if (!inTime) {
+ return false;
+ }
+ }else if(effectivePeriod==2){
+ if(holidayToday!=0){
+ return false;
+ }
+ boolean inTime = TimeRangeChecker.isCurrentTimeInRanges(now,effectiveTimePeriod);
+ if (!inTime) {
+ return false;
+ }
+ }else if(effectivePeriod==3){
+ if(holidayToday!=2){
+ return false;
+ }
+ boolean inTime = TimeRangeChecker.isCurrentTimeInRanges(now,effectiveTimePeriod);
+ if (!inTime) {
+ return false;
+ }
+ }else if(effectivePeriod==4){
+ if(holidayToday!=1){
+ return false;
+ }
+ boolean inTime = TimeRangeChecker.isCurrentTimeInRanges(now,effectiveTimePeriod);
+ if (!inTime) {
+ return false;
+ }
+ }
+ return true;
}
@Override
@@ -153,9 +203,18 @@
return searchVo;
}
+ LocalTime now = LocalTime.now();
+ for (XpPointsListVo xpPointsListVo : list) {
+ boolean inTime = getInTime(now, xpPointsListVo.getEffectivePeriod(), xpPointsListVo.getEffectiveTimePeriod());
+ if (!inTime) {
+ // 不在运营段
+ xpPointsListVo.setState(0);
+ }
- // 组装数据 并排序
- List<XpPointsListVo> resultList = list.stream().peek(vo -> vo.setDistance(FastDistanceCalculator.distanceFast(query.getLat(), query.getLon(), vo.getLatitude(), vo.getLongitude()))).collect(Collectors.toList());
+ }
+
+ // 组装数据 并排序 剔除不在运营段的 数据
+ List<XpPointsListVo> resultList = list.stream().peek(vo -> vo.setDistance(FastDistanceCalculator.distanceFast(query.getLat(), query.getLon(), vo.getLatitude(), vo.getLongitude()))).filter(vo -> vo.getState() == 1).collect(Collectors.toList());
// 可用点位
List<XpPointsListVo> availablePoints = resultList.stream().filter(e -> query.getElectronicAreaId() != null && e.getElectronicAreaId().equals(query.getElectronicAreaId())).sorted(Comparator.comparing(XpPointsListVo::getDistance)).collect(Collectors.toList());//
--
Gitblit v1.7.1