From 746517aca9d0b7ae334c70b3041a9b1de795addb Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 22 四月 2026 11:08:37 +0800
Subject: [PATCH] Merge branch '1.0' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0

---
 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpStationServiceImpl.java |  120 ++++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 81 insertions(+), 39 deletions(-)

diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpStationServiceImpl.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpStationServiceImpl.java
index 204e04e..30c0483 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpStationServiceImpl.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpStationServiceImpl.java
@@ -7,10 +7,12 @@
 import com.xiaopeng.api.model.map.XpGeoFencingPolygon;
 import com.xiaopeng.api.model.operation.*;
 import com.xiaopeng.api.query.operation.XpStationQuery;
+import com.xiaopeng.api.vo.account.LoginUser;
 import com.xiaopeng.api.vo.operation.XpStationVo;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.web.page.PageInfo;
+import com.xiaopeng.common.security.service.TokenService;
 import com.xiaopeng.map.constant.I18nKeyConstant;
 import com.xiaopeng.map.mapper.XpRegionMapper;
 import com.xiaopeng.map.mapper.XpStationMapper;
@@ -24,6 +26,7 @@
 import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
 import org.apache.shardingsphere.transaction.core.TransactionType;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.geo.GeoJsonPolygon;
 import org.springframework.data.mongodb.core.query.Criteria;
@@ -34,7 +37,6 @@
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -49,6 +51,8 @@
 public class XpStationServiceImpl extends ServiceImpl<XpStationMapper, XpStation> implements XpStationService {
 
 
+    @Resource
+    private TokenService tokenService;
 
     @Autowired
     private MongoTemplate mongoTemplate;
@@ -62,6 +66,7 @@
     private GDMapGeocodingUtil gdMapGeocodingUtil;
     @Autowired
     private XpRegionMapper xpRegionMapper;
+    @Lazy
     @Resource
     private XpPointService xpPointService;
 
@@ -164,6 +169,7 @@
      * @param outerFencePoints 外部围栏点位字符串(参考围栏),格式为 "lng1_lat1,lng2_lat2,..."
      * @return 是否在内 true在内 false不在
      */
+    @Override
     public boolean isPolygonInPolygon(String innerFencePoints, String outerFencePoints) {
         if (innerFencePoints == null || innerFencePoints.trim().isEmpty()
                 || outerFencePoints == null || outerFencePoints.trim().isEmpty()) {
@@ -314,7 +320,10 @@
                 );
             }
         }
+
     }
+
+
 
     public static String getPinyinInitials(String chinese) {
         StringBuilder pinyinInitials = new StringBuilder();
@@ -354,9 +363,11 @@
 
             this.updateById(dto);
 
-            save_operatingArea(dto);
-
             savePoint(dto);
+
+            saveMongo_operatingArea(dto);
+
+
             return R.ok();
         } catch (Exception e) {
             log.error("新增场站失败", e);
@@ -373,11 +384,11 @@
         try {
 //            dto.setStatus(0); //status = 场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效
             this.updateById(dto);
-            // 删除旧的区域数据,然后保存新的区域数据
-            remove_operatingArea(dto);
-            save_operatingArea(dto);
             xpPointService.clearStationInfoByStationId(dto.getId());
             savePoint(dto);
+            // 删除旧的区域数据,然后保存新的区域数据
+            removeMongo_operatingArea(dto);
+            saveMongo_operatingArea(dto);
             return R.ok();
         } catch (Exception e) {
             log.error("新增场站失败", e);
@@ -412,45 +423,78 @@
         }
     }
 
+    /**
+     * 场站 失效-围栏失效 场站失效
+     * @param electronicId
+     */
+    @Override
+    public void setStatusFailure(Long electronicId){
+        LambdaQueryWrapper<XpStation> query = new LambdaQueryWrapper<>();
+        query.eq(XpStation::getElectronicId, electronicId);
+        query.eq(XpStation::getDeleted, 0);
+
+        List<XpStation> list = this.list(query);
+        if(!list.isEmpty()){
+            for (XpStation xpStation : list) {
+                this.setStatus(xpStation,4);
+            }
+        }
+    }
+
     @Override
     public boolean setStatus(XpStation bean, Integer status){
 
-        bean.setStatus(status);
+        LoginUser loginUser = tokenService.getLoginUser();
+        bean.setUpdateBy(loginUser.getUsername());
+        bean.setUpdateTime(LocalDateTime.now());
+        bean.setStatus(status);//场站状态 0=草稿 1=待启用 2=启用中 3=已停用 4=失效
         boolean b = updateById(bean);
         if(b){
-            //场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效
-            List<Integer> statusList = Arrays.asList(4, 5, 6, 7) ;
-            if(statusList.contains(status) ){
-                save_operatingArea(bean);
-            }
-            if(status == 7 ){
-                remove_operatingArea(bean);
+            if(status == 2){
+                saveMongo_operatingArea(bean);
+            }else if(status == 3 || status == 4){
+                removeMongo_operatingArea(bean);
             }
         }
         return b;
     }
 
-    private void remove_operatingArea(XpStation bean) {
+    private void removeMongo_operatingArea(XpStation bean) {
         // 同步删除Mongo电子围栏多边形
         Query delMongoQuery = new Query();
         delMongoQuery.addCriteria(Criteria.where("stationId").is(String.valueOf(bean.getId())));
         mongoTemplate.remove(delMongoQuery, XpGeoFencingPolygon.class);
     }
 
-    private void save_operatingArea (XpStation bean) {
-        XpGeoFencingPolygon xpGeoFencingPolygon = new XpGeoFencingPolygon();
-        xpGeoFencingPolygon.setFenceId(String.valueOf(bean.getElectronicId()));
-        xpGeoFencingPolygon.setName(bean.getStationName());
-        xpGeoFencingPolygon.setAreaId(String.valueOf(bean.getElectronicAreaId()));
-        xpGeoFencingPolygon.setCityCode(bean.getCityCode());
-        xpGeoFencingPolygon.setStationId(String.valueOf(bean.getId()));
-        xpGeoFencingPolygon.setOperationStrategy(null);//运营策略
-        // 将围栏点转换为GeoJSON多边形
-        GeoJsonPolygon geoJsonPolygon = xpElectronicFenceService.convertToGeoJsonPolygon(bean.getFencePoints());
-        xpGeoFencingPolygon.setPoints(geoJsonPolygon);
-        mongoTemplate.insert(xpGeoFencingPolygon);
+    private void saveMongo_operatingArea (XpStation bean) {
+
+        //场站状态 0=草稿 1=待启用 2=启用中 3=已停用 4=失效
+        if(bean.getStatus() == 2){
+            XpGeoFencingPolygon xpGeoFencingPolygon = new XpGeoFencingPolygon();
+            xpGeoFencingPolygon.setFenceId(String.valueOf(bean.getElectronicId()));
+            xpGeoFencingPolygon.setName(bean.getStationName());
+            xpGeoFencingPolygon.setAreaId(String.valueOf(bean.getElectronicAreaId()));
+            xpGeoFencingPolygon.setCityCode(bean.getCityCode());
+            xpGeoFencingPolygon.setStationId(String.valueOf(bean.getId()));
+            xpGeoFencingPolygon.setOperationStrategy(null);//运营策略
+            // 将围栏点转换为GeoJSON多边形
+            GeoJsonPolygon geoJsonPolygon = xpElectronicFenceService.convertToGeoJsonPolygon(bean.getFencePoints());
+            xpGeoFencingPolygon.setPoints(geoJsonPolygon);
+            mongoTemplate.insert(xpGeoFencingPolygon);
+        }
     }
 
+    /**
+     * 启用操作
+     * @param bean
+     * @return
+     */
+    @Override
+    public boolean updateStatusEnable(XpStation bean){
+
+        xpPointService.statusEnableByStationId(bean.getId());
+        return setStatus(bean, 2);
+    }
 
     /**
      * 停用
@@ -462,7 +506,7 @@
     public boolean updateStatusStop(XpStation bean, Boolean pointStop){
 
         xpPointService.statusStopByStationId(bean.getId(),pointStop);
-        return setStatus(bean, 7);
+        return setStatus(bean, 3);
     }
 
     /**
@@ -478,18 +522,16 @@
     @Override
     public boolean removeById(XpStation bean, Boolean pointDelete){
         boolean b = true;
-        //场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效
-        if(bean.getStatus() == 1 || bean.getStatus() == 2 || bean.getStatus() == 3 || bean.getStatus() == 7 || bean.getStatus() == 8){
+        //场站状态  0=草稿 1=待启用 2=启用中 3=已停用 4=失效
+        if(bean.getStatus() != 2){
             b = super.removeById(bean.getId());
-        }
-        if(bean.getStatus() == 7 || bean.getStatus() == 8){
-             xpPointService.pointDeleteByStationId(bean.getId(),pointDelete);
-        }
-        if(b){
-            // 同步删除Mongo电子围栏多边形
-            Query delMongoQuery = new Query();
-            delMongoQuery.addCriteria(Criteria.where("stationId").is(String.valueOf(bean.getId())));
-            mongoTemplate.remove(delMongoQuery, XpGeoFencingPolygon.class);
+            xpPointService.pointDeleteByStationId(bean.getId(),pointDelete);
+            if(b){
+                // 同步删除Mongo电子围栏多边形
+                Query delMongoQuery = new Query();
+                delMongoQuery.addCriteria(Criteria.where("stationId").is(String.valueOf(bean.getId())));
+                mongoTemplate.remove(delMongoQuery, XpGeoFencingPolygon.class);
+            }
         }
         return b;
 

--
Gitblit v1.7.1