From edfe615fe97ed2da4d3bf2c8f8b989afa403e136 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 26 二月 2026 11:46:12 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpPointClient.java                     |    8 +
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPointManagementController.java |    6 +
 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/exportExcel/XpPointExportExcel.java                     |   43 ++++++++++
 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java             |   52 ++++++++++++
 xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpPointMapper.xml                            |    9 ++
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/map/XpPointExportExcelQuery.java                         |   24 ++++++
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpPointClientFallbackFactory.java          |    7 +
 xp-robotaxi-map-boot/pom.xml                                                                                |   42 ++++++++++
 8 files changed, 188 insertions(+), 3 deletions(-)

diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/map/XpPointExportExcelQuery.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/map/XpPointExportExcelQuery.java
new file mode 100644
index 0000000..3947b9f
--- /dev/null
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/map/XpPointExportExcelQuery.java
@@ -0,0 +1,24 @@
+package com.xiaopeng.api.dto.map;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 白名单导出
+ * </p>
+ *
+ * @author mitao
+ * @since 2026-02-03
+ */
+@Data
+@ApiModel(value="点位导出查询参数")
+public class XpPointExportExcelQuery {
+    @ApiModelProperty(value = "点位IDs")
+    private List<Long> pointIds;
+
+
+}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpPointClientFallbackFactory.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpPointClientFallbackFactory.java
index 3a237f0..57d4703 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpPointClientFallbackFactory.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpPointClientFallbackFactory.java
@@ -1,5 +1,6 @@
 package com.xiaopeng.api.factory.operation;
 
+import com.xiaopeng.api.dto.map.XpPointExportExcelQuery;
 import com.xiaopeng.api.dto.operation.PointAddDto;
 import com.xiaopeng.api.dto.operation.PointMapQuery;
 import com.xiaopeng.api.dto.operation.PointUpdateDto;
@@ -60,6 +61,12 @@
             }
 
             @Override
+            public R<List<XpPoint>> getByIds(XpPointExportExcelQuery query) {
+                log.error("根据点位ids获取点位列表失败:{}", cause.getMessage());
+                return R.fail(new ArrayList<>());
+            }
+
+            @Override
             public R add(PointAddDto pointAddDto) {
                 log.error("新增点位失败:{}", cause.getMessage());
                 return R.fail("新增点位失败");
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpPointClient.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpPointClient.java
index f58289f..8521f7e 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpPointClient.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpPointClient.java
@@ -1,5 +1,6 @@
 package com.xiaopeng.api.feignClient.operation;
 
+import com.xiaopeng.api.dto.map.XpPointExportExcelQuery;
 import com.xiaopeng.api.dto.operation.PointAddDto;
 import com.xiaopeng.api.dto.operation.PointMapQuery;
 import com.xiaopeng.api.dto.operation.PointUpdateDto;
@@ -36,8 +37,9 @@
     @PostMapping("/api/v1/point/listPoint")
     R<List<XpPoint>> list(@RequestBody PointListQuery query);
     @PostMapping("/api/v1/point/pageList")
-    R<PageInfo<XpPoint>> pageList(PointPageListListQuery query);
-
+    R<PageInfo<XpPoint>> pageList(@RequestBody PointPageListListQuery query);
+    @PostMapping("/api/v1/point/getByIds")
+    R<List<XpPoint>> getByIds(@RequestBody XpPointExportExcelQuery query);
 
     /**
      * 新增点位
@@ -72,4 +74,6 @@
     R<List<XpPoint>> pointMap(@RequestBody PointMapQuery query);
 
 
+
+
 }
diff --git a/xp-robotaxi-map-boot/pom.xml b/xp-robotaxi-map-boot/pom.xml
index d0cbd0b..e5d2a55 100644
--- a/xp-robotaxi-map-boot/pom.xml
+++ b/xp-robotaxi-map-boot/pom.xml
@@ -15,6 +15,48 @@
     </description>
 
     <dependencies>
+        <!-- easypoi -->
+        <!-- Apache POI 核心依赖 -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>5.2.3</version>
+        </dependency>
+
+        <!-- Apache POI OOXML 支持(用于 .xlsx 文件) -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>5.2.3</version>
+        </dependency>
+
+        <!-- Apache POI XMLBeans(可选,用于复杂 XML 处理) -->
+        <dependency>
+            <groupId>org.apache.xmlbeans</groupId>
+            <artifactId>xmlbeans</artifactId>
+            <version>5.1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-base</artifactId>
+            <version>4.4.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-web</artifactId>
+            <version>4.4.0</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-annotation</artifactId>
+            <version>4.4.0</version>
+        </dependency>
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java
index d817f9b..e0dfb4e 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java
@@ -1,6 +1,8 @@
 package com.xiaopeng.map.controller;
 
 
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
 import com.xiaopeng.api.dto.operation.PointAddDto;
 import com.xiaopeng.api.dto.operation.PointUpdateDto;
 import com.xiaopeng.api.dto.operation.XpPointEnableDisableDto;
@@ -10,18 +12,28 @@
 import com.xiaopeng.api.query.operation.PointListQuery;
 import com.xiaopeng.api.query.operation.PointPageListListQuery;
 import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.utils.WebUtils;
 import com.xiaopeng.common.core.web.controller.BaseController;
 import com.xiaopeng.common.core.web.page.PageInfo;
 import com.xiaopeng.common.security.service.TokenService;
+import com.xiaopeng.map.exportExcel.XpPointExportExcel;
+import com.xiaopeng.api.dto.map.XpPointExportExcelQuery;
 import io.seata.spring.annotation.GlobalTransactional;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.util.StringUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -48,9 +60,47 @@
     @ApiOperation(value = "点位管理分页列表", response = XpPoint.class)
     @PostMapping("/pageList")
     public R<PageInfo<XpPoint>> pageList(@RequestBody PointPageListListQuery query) {
-
         return xpPointClient.pageList(query);
     }
+    @ApiOperation(value = "点位导出")
+    @PostMapping(value = "/exportExcel")
+    public void exportExcel(@RequestBody XpPointExportExcelQuery query) {
+        List<XpPoint> exportList = xpPointClient.getByIds(query).getData();
+        List<XpPointExportExcel> xpPointExportExcels = new ArrayList<>();
+        for (XpPoint xpPoint : exportList) {
+            XpPointExportExcel xpPointExportExcel = new XpPointExportExcel();
+            xpPointExportExcel.setPointNumber(xpPoint.getPointNumber());
+            xpPointExportExcel.setPointName(xpPoint.getPointName());
+            xpPointExportExcel.setStatus(xpPoint.getOperationStatus());
+            xpPointExportExcel.setParkingTimeLimit(xpPoint.getParkingTimeLimit()+"分钟");
+            xpPointExportExcel.setPointLon(xpPoint.getPointLon());
+            xpPointExportExcel.setPointLat(xpPoint.getPointLat());
+            xpPointExportExcel.setCreateBy(xpPoint.getCreateBy());
+            xpPointExportExcel.setCreateTime(xpPoint.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            xpPointExportExcels.add(xpPointExportExcel);
+        }
+        //1.获取excel模板
+        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), XpPointExportExcel.class, xpPointExportExcels);
+        HttpServletResponse response = WebUtils.response();
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("utf-8");
+        ServletOutputStream outputStream = null;
+        try {
+            String fileName = URLEncoder.encode("点位列表.csv", "utf-8");
+            response.setHeader("Content-dispodition", "attachment;filename=" + fileName);
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                outputStream.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
     @ApiOperation(value = "点位管理列表", response = XpPoint.class)
     @PostMapping("/list")
     public R<List<XpPoint>> list(@RequestBody PointListQuery query) {
diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/exportExcel/XpPointExportExcel.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/exportExcel/XpPointExportExcel.java
new file mode 100644
index 0000000..8d86b7d
--- /dev/null
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/exportExcel/XpPointExportExcel.java
@@ -0,0 +1,43 @@
+package com.xiaopeng.map.exportExcel;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * <p>
+ * 白名单导出
+ * </p>
+ *
+ * @author mitao
+ * @since 2026-02-03
+ */
+@Data
+@ApiModel(value="点位导出")
+public class XpPointExportExcel {
+    @ApiModelProperty(value = "点位ID")
+    @cn.afterturn.easypoi.excel.annotation.Excel(name = "点位ID",width = 20)
+    private String pointNumber;
+    @ApiModelProperty(value = "点位名称")
+    @cn.afterturn.easypoi.excel.annotation.Excel(name = "点位名称",width = 20)
+    private String pointName;
+    @ApiModelProperty(value = "状态")
+    @cn.afterturn.easypoi.excel.annotation.Excel(name = "状态",width = 20,replace = {"待测试_1","测试中_2","测试不通过_3","可运营_4","待生效_5","启用中_6","已停用_7","失效_8",})
+    private Integer status;
+    @ApiModelProperty(value = "限停时长")
+    @cn.afterturn.easypoi.excel.annotation.Excel(name = "限停时长",width = 20)
+    private String parkingTimeLimit;
+    @ApiModelProperty(value = "经度")
+    @cn.afterturn.easypoi.excel.annotation.Excel(name = "经度",width = 20)
+    private Double pointLon;
+    @ApiModelProperty(value = "纬度")
+    @cn.afterturn.easypoi.excel.annotation.Excel(name = "纬度",width = 20)
+    private Double pointLat;
+    @ApiModelProperty(value = "创建人")
+    @cn.afterturn.easypoi.excel.annotation.Excel(name = "创建人",width = 30)
+    private String createBy;
+    @ApiModelProperty(value = "创建时间")
+    @cn.afterturn.easypoi.excel.annotation.Excel(name = "创建时间",width = 30)
+    private String createTime;
+
+}
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPointManagementController.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPointManagementController.java
index 944ed64..cbe4e4c 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPointManagementController.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPointManagementController.java
@@ -2,6 +2,7 @@
 
 
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.xiaopeng.api.dto.map.XpPointExportExcelQuery;
 import com.xiaopeng.api.dto.operation.PointAddDto;
 import com.xiaopeng.api.dto.operation.PointUpdateDto;
 import com.xiaopeng.api.dto.operation.XpPointEnableDisableDto;
@@ -69,6 +70,11 @@
         PageInfo<XpPoint> pageList = xpPointService.pageList(query);
         return R.ok(pageList);
     }
+    @PostMapping("/getByIds")
+    public R<List<XpPoint>> getByIds(@RequestBody XpPointExportExcelQuery query){
+        List<XpPoint> list = xpPointService.lambdaQuery().in(XpPoint::getId, query.getPointIds()).list();
+        return R.ok(list);
+    }
     /**
      * 新增点位
      */
diff --git a/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpPointMapper.xml b/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpPointMapper.xml
index d10de07..33708b6 100644
--- a/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpPointMapper.xml
+++ b/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpPointMapper.xml
@@ -147,6 +147,15 @@
             <if test="query.operationStatus ==5">
                 and xp.verification_status = 3 and xp.operation_status =1
             </if>
+            <if test="query.operationStatus ==6">
+                and xp.operation_status =2
+            </if>
+          <if test="query.operationStatus ==7">
+                and xp.operation_status =3
+            </if>
+          <if test="query.operationStatus ==8">
+                and xp.operation_status =4
+            </if>
         </if>
         order by xp.create_time desc
     </select>

--
Gitblit v1.7.1