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