xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/map/XpPointExportExcelQuery.java
New file @@ -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; } 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("新增点位失败"); 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); } 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> 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) { xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/exportExcel/XpPointExportExcel.java
New file @@ -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; } 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); } /** * 新增点位 */ 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>