From 7368bb37f78ef361105c795190c502299d3bdfc4 Mon Sep 17 00:00:00 2001
From: yyy <1083599556@qq.com>
Date: 星期四, 07 五月 2026 10:37:58 +0800
Subject: [PATCH] 合并代码

---
 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/BootCommonService.java |   93 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 87 insertions(+), 6 deletions(-)

diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/BootCommonService.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/BootCommonService.java
index 6a0c625..f6f1c2a 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/BootCommonService.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/BootCommonService.java
@@ -1,6 +1,7 @@
 package com.xiaopeng.map.service.serviceimpl;
 
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.xiaopeng.api.model.operation.XpPoint;
@@ -82,6 +83,83 @@
     /**
      * 判断场站运营策略
      * ["06:00-12:00", "13:00-21:00"]
+     * @param effectivePeriod 生效周期 1=每日 2=仅工作日 3=仅非工作日 4=仅节假日
+     * @param effectiveTimePeriod 场站生效时间段 json
+     * @param effectiveTimePeriod 围栏运营json
+     *
+     * [{"name": "策略组1", "time": ["09:00-18:00"], "type": 0, "typeStr": []},
+     * {"name": "策略组2", "time": ["08:00-21:00"], "type": 2, "typeStr": []},
+     * {"name": "策略组3", "time": ["07:00-22:00"], "type": 1, "typeStr": []},
+     * {"name": "策略组4", "time": ["12:00-19:00"], "type": 3, "typeStr": [1, 3, 5, 7]}]
+     * [{"name": "策略组1", "time": ["08:00-22:00"], "type": 3, "typeStr": [0]}]
+     * @return
+     */
+    public boolean getStationTime_fenceOperationStrategy(Integer effectivePeriod, String effectiveTimePeriod,String fenceOperationStrategy){
+        if(StrUtil.isNotBlank(effectiveTimePeriod) && StrUtil.isNotBlank(fenceOperationStrategy) ){
+            // 直接解析为JSONArray
+            JSONArray effectiveTimePeriodS = JSON.parseArray(effectiveTimePeriod);
+
+            JSONArray jsonArray = JSONArray.parseArray(fenceOperationStrategy);
+            for (Object et : effectiveTimePeriodS) {
+                String timeRange = et.toString();
+
+                String[] parts = timeRange.split("-");
+
+                LocalTime start = LocalTime.parse(parts[0].trim(), TimeRangeChecker.TIME_FORMATTER);
+                LocalTime end = LocalTime.parse(parts[1].trim(), TimeRangeChecker.TIME_FORMATTER);
+
+//                type = 0工作日 1法定节假日 2非工作日  3自定义时间  typeStr 代表周 = [1,2,3,4,5,6,7]   typeStr= 0的时候代表每天
+                for (Object o : jsonArray) {
+                    JSONObject jsonObject =JSONObject.parseObject(o.toString());
+                    String type = jsonObject.getString("type");
+                    String timeStr = null;
+                    if(effectivePeriod == 1){ //生效周期 1=每日 2=仅工作日 3=仅非工作日 4=仅节假日
+                        // 判断是什么类型 0每天  1-7 想起
+                        String typeStr = jsonObject.getString("typeStr");
+                        if("3".equals(type) && typeStr.contains("0") ){
+                            timeStr = jsonObject.getString("time");
+                        }
+                    }else if(effectivePeriod == 2){
+                        if("0".equals(type) ){
+                            timeStr = jsonObject.getString("time");
+                        }
+                    }else if(effectivePeriod == 3){
+                        if("2".equals(type) ){
+                            timeStr = jsonObject.getString("time");
+                        }
+                    }else if(effectivePeriod == 4){
+                        if("1".equals(type) ){
+                            timeStr = jsonObject.getString("time");
+                        }
+                    }
+                    if(StrUtil.isNotBlank(timeStr)){
+                        JSONArray time = jsonObject.getJSONArray("time");
+                        // 判断当前时间 是否在time时间段中
+                        for (Object object : time) {
+                            String[] timeArray = object.toString().split("-");
+                            String startTime = timeArray[0];
+                            String endTime = timeArray[1];
+                            System.err.println("start="+start+";startTime="+startTime+";endTime="+endTime);
+                            boolean currentTimeInRange = DateUtils.isCurrentTimeInRangeEq(start,startTime, endTime);
+                            if(!currentTimeInRange){
+                                return false;
+                            }
+                            System.err.println("end="+end+";startTime="+startTime+";endTime="+endTime);
+                            currentTimeInRange = DateUtils.isCurrentTimeInRangeEq(end,startTime, endTime);
+                            if(!currentTimeInRange){
+                                return false;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 判断场站运营策略
+     * ["06:00-12:00", "13:00-21:00"]
      * @param localTime
      * @param operationType 运营类型 1=与运营区同步 2=自定义时间段
      * @param effectivePeriod 生效周期 1=每日 2=仅工作日 3=仅非工作日 4=仅节假日
@@ -136,15 +214,18 @@
      * @return
      */
     public boolean getPointOperation(LocalTime localTime, XpPoint xpPoint){
-        if(xpPoint.getOperationType()==2){//运营类型 1=与运营区同步 2=自定义时间段
-            return getPointOperation(localTime,xpPoint.getEffectivePeriod(),xpPoint.getEffectiveTimePeriod());
-        }else {
-            if(xpPoint.getStationId()==null){//调用围栏运营策略
-                return getFenceOperation(localTime,xpPoint.getFenceOperationStrategy());
+        if(xpPoint.getOperationStatus() == 2 && xpPoint.getVerificationStatus() == 5){
+            if(xpPoint.getOperationType()==2){//运营类型 1=与运营区同步 2=自定义时间段
+                return getPointOperation(localTime,xpPoint.getEffectivePeriod(),xpPoint.getEffectiveTimePeriod());
             }else {
-                return this.getStationOperation(localTime,xpPoint.getStationOperationType(),xpPoint.getStationEffectivePeriod(),xpPoint.getStationEffectiveTimePeriod(),xpPoint.getFenceOperationStrategy());
+                if (xpPoint.getStationId() == null) {//调用围栏运营策略
+                    return getFenceOperation(localTime, xpPoint.getFenceOperationStrategy());
+                } else {
+                    return this.getStationOperation(localTime, xpPoint.getStationOperationType(), xpPoint.getStationEffectivePeriod(), xpPoint.getStationEffectiveTimePeriod(), xpPoint.getFenceOperationStrategy());
+                }
             }
         }
+        return false;
     }
     public boolean getPointOperation_vo(LocalTime localTime, XpPointsListVo xpPoint){
         if(xpPoint.getOperationType()==2){//运营类型 1=与运营区同步 2=自定义时间段

--
Gitblit v1.7.1