From 30e032ea7c7b06d30c17135a34b7a733d6115045 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 13 二月 2026 16:48:51 +0800
Subject: [PATCH] bug修改,计算费用工具类

---
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java |   32 ++++++++++++++++++++++++++++++--
 1 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java
index 7290c0c..81d3b46 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java
@@ -8,6 +8,7 @@
 import com.xiaopeng.api.model.operation.XpElectronicFence;
 import com.xiaopeng.api.model.operation.XpElectronicFenceArea;
 import com.xiaopeng.api.model.operation.XpPoint;
+import com.xiaopeng.api.model.operation.XpRegion;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.utils.DateUtils;
@@ -24,10 +25,14 @@
 import com.xiaopeng.operation.mapper.XpElectronicFenceMapper;
 import com.xiaopeng.operation.mapper.XpPointMapper;
 import com.xiaopeng.api.query.operation.ElectronicPageListQuery;
+import com.xiaopeng.operation.mapper.XpRegionMapper;
 import com.xiaopeng.operation.service.IXpElectronicFenceService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiaopeng.operation.service.IXpRegionService;
 import com.xiaopeng.operation.utils.PolygonOverlapService;
 import lombok.extern.slf4j.Slf4j;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.geo.Point;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -62,6 +67,8 @@
     private MongoTemplate mongoTemplate;
     @Autowired
     private XpPointMapper xpPointMapper;
+    @Autowired
+    private XpRegionMapper xpRegionMapper;
 
     @Override
     public PageInfo<XpElectronicFence> pageList(ElectronicPageListQuery query) {
@@ -90,7 +97,18 @@
         pageInfo.setRecords(list);
         return pageInfo;
     }
-
+    public static String getPinyinInitials(String chinese) {
+        StringBuilder pinyinInitials = new StringBuilder();
+        for (char c : chinese.toCharArray()) {
+            // 获取拼音数组(多音字会返回多个拼音)
+            String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c);
+            if (pinyinArray != null && pinyinArray.length > 0) {
+                // 取第一个拼音的首字母
+                pinyinInitials.append(pinyinArray[0].charAt(0));
+            }
+        }
+        return pinyinInitials.toString();
+    }
     @Override
     public R addElectronic(ElectronicFenceAddDto dto) {
         try {
@@ -142,7 +160,17 @@
                 }
             }
             xpElectronicFence.setCityCode(dto.getCityCode());
+            // 生成围栏id 规则:城市首字母-类型简写-4位自增流水号(如 SZ-OP-001),支持复制;数据停用或删除后,流水号不回收
+            XpRegion xpRegion = xpRegionMapper.selectOne(new LambdaQueryWrapper<XpRegion>()
+                    .eq(XpRegion::getCode, dto.getCityCode()));
+            String name = xpRegion.getName();
             this.save(xpElectronicFence);
+            // 根据城市中文名,截取前两位的首字母并且大写
+            // 截取前两个字符
+            String prefix = name.substring(0, 2);
+            // 获取拼音首字母并大写
+            String result = getPinyinInitials(prefix).toUpperCase();
+            xpElectronicFence.setElectronicNumber(result + "-OP-" + String.format("%04d", xpElectronicFence.getId()));
             if (dto.getStatus() == 0) {
                 xpElectronicFence.setStatus(0);
             } else if (dto.getStatus() == 1) {
@@ -216,7 +244,7 @@
                         xpGeoFencingPolygon.setFenceId(String.valueOf(xpElectronicFence.getId()));
                         xpGeoFencingPolygon.setName(xpElectronicFence.getElectronicName());
                         xpGeoFencingPolygon.setAreaId(String.valueOf(newElectronicFenceArea.getId()));
-                        xpGeoFencingPolygon.setCityCode("510100");
+                        xpGeoFencingPolygon.setCityCode(xpElectronicFence.getCityCode());
                         xpGeoFencingPolygon.setOperationStrategy(xpElectronicFence.getOperationStrategy());
                         // 将围栏点转换为GeoJSON多边形
                         GeoJsonPolygon geoJsonPolygon = convertToGeoJsonPolygon(newElectronicFenceArea.getFencePoints());

--
Gitblit v1.7.1