From 8bf1d8f1cfcdbda64b2a80653a3ee10d31b69108 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期日, 12 四月 2026 18:55:26 +0800
Subject: [PATCH] 合并代码处理冲突
---
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCollectAddrServiceImpl.java | 138 ++++++++++++
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpAppUserCollectAddrService.java | 78 +++---
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/HttpTestController.java | 36 +++
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCollectAddrController.java | 142 ++++++------
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/MinistryOfTransport.java | 109 +++++++++
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/dto/CollectAddrDTO.java | 59 +++--
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/query/XpUserCollectAddrListQuery.java | 22 +-
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpPoint.java | 2
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpAppUserCollectAddrMapper.java | 47 ++-
9 files changed, 465 insertions(+), 168 deletions(-)
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCollectAddrController.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCollectAddrController.java
index 53173df..9868eae 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCollectAddrController.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCollectAddrController.java
@@ -1,71 +1,71 @@
-//package com.xiaopeng.account.controller;
-//
-//import com.xiaopeng.account.model.dto.CollectAddrDTO;
-//import com.xiaopeng.account.model.query.XpUserCollectAddrListQuery;
-//import com.xiaopeng.account.model.vo.XpAppUserCollectAddrVO;
-//import com.xiaopeng.account.service.IXpAppUserCollectAddrService;
-//import com.xiaopeng.common.core.domain.R;
-//import com.xiaopeng.common.core.web.page.PageInfo;
-//import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
-//import io.swagger.annotations.ApiOperation;
-//import org.springframework.validation.annotation.Validated;
-//import org.springframework.web.bind.annotation.PostMapping;
-//import org.springframework.web.bind.annotation.RequestBody;
-//import org.springframework.web.bind.annotation.RequestMapping;
-//import org.springframework.web.bind.annotation.RestController;
-//
-//import javax.servlet.http.HttpServletRequest;
-//
-///**
-// * <p>
-// * 用户收藏地址 前端控制器
-// * </p>
-// *
-// * @author ck
-// * @since 2026-04-10
-// */
-//@RestController
-//@RequestMapping("")
-//public class XpAppUserCollectAddrController {
-//
-// private final IXpAppUserCollectAddrService xpAppUserCollectAddrService;
-//
-// public XpAppUserCollectAddrController(IXpAppUserCollectAddrService xpAppUserCollectAddrService) {
-// this.xpAppUserCollectAddrService = xpAppUserCollectAddrService;
-// }
-//
-//
-// /**
-// * 收藏地址/取消收藏地址
-// */
-// @PostMapping("/api/v1/mini-program/collect/addr")
-// @ApiOperation(value = "收藏/取消收藏地址", tags = {"小程序-收藏/取消收藏地址"})
-// @XpClientCheck(checkToken = false, checkOtpToken = true)
-// public R<String> collectAddr(@Validated @RequestBody CollectAddrDTO dto, HttpServletRequest request) {
-// // uid已通过拦截器otp校验,可以直接使用
-// String uid = request.getHeader("XP-Uid");
-// boolean result = xpAppUserCollectAddrService.collectAddr(dto, uid);
-// if (result) {
-// return R.ok();
-// }
-// return R.fail();
-// }
-//
-//
-// /**
-// * 获取收藏夹收藏地址列表
-// */
-// @PostMapping("/api/v1/mini-program/collect/addrlist")
-// @ApiOperation(value = "收藏夹", tags = {"小程序-获取用户收藏夹收藏地址列表"})
-// @XpClientCheck(checkToken = false, checkOtpToken = true)
-// public R<PageInfo<XpAppUserCollectAddrVO>> collectAddrlist(@RequestBody XpUserCollectAddrListQuery query, HttpServletRequest request) {
-// // uid已通过拦截器otp校验,可以直接使用
-// String uid = request.getHeader("XP-Uid");
-// return R.ok(xpAppUserCollectAddrService.userCollectAddrList(query, uid));
-// }
-//
-//
-//
-//
-//
-//}
+package com.xiaopeng.account.controller;
+
+import com.xiaopeng.account.model.dto.CollectAddrDTO;
+import com.xiaopeng.account.model.query.XpUserCollectAddrListQuery;
+import com.xiaopeng.account.model.vo.XpAppUserCollectAddrVO;
+import com.xiaopeng.account.service.IXpAppUserCollectAddrService;
+import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.web.page.PageInfo;
+import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * <p>
+ * 用户收藏地址 前端控制器
+ * </p>
+ *
+ * @author ck
+ * @since 2026-04-10
+ */
+@RestController
+@RequestMapping("")
+public class XpAppUserCollectAddrController {
+
+ private final IXpAppUserCollectAddrService xpAppUserCollectAddrService;
+
+ public XpAppUserCollectAddrController(IXpAppUserCollectAddrService xpAppUserCollectAddrService) {
+ this.xpAppUserCollectAddrService = xpAppUserCollectAddrService;
+ }
+
+
+ /**
+ * 收藏地址/取消收藏地址
+ */
+ @PostMapping("/api/v1/mini-program/collect/addr")
+ @ApiOperation(value = "收藏/取消收藏地址", tags = {"小程序-收藏/取消收藏地址"})
+ @XpClientCheck(checkToken = false, checkOtpToken = true)
+ public R<String> collectAddr(@Validated @RequestBody CollectAddrDTO dto, HttpServletRequest request) {
+ // uid已通过拦截器otp校验,可以直接使用
+ String uid = request.getHeader("XP-Uid");
+ boolean result = xpAppUserCollectAddrService.collectAddr(dto, uid);
+ if (result) {
+ return R.ok();
+ }
+ return R.fail();
+ }
+
+
+ /**
+ * 获取收藏夹收藏地址列表
+ */
+ @PostMapping("/api/v1/mini-program/collect/addrlist")
+ @ApiOperation(value = "收藏夹", tags = {"小程序-获取用户收藏夹收藏地址列表"})
+ @XpClientCheck(checkToken = false, checkOtpToken = true)
+ public R<PageInfo<XpAppUserCollectAddrVO>> collectAddrlist(@RequestBody XpUserCollectAddrListQuery query, HttpServletRequest request) {
+ // uid已通过拦截器otp校验,可以直接使用
+ String uid = request.getHeader("XP-Uid");
+ return R.ok(xpAppUserCollectAddrService.userCollectAddrList(query, uid));
+ }
+
+
+
+
+
+}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpAppUserCollectAddrMapper.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpAppUserCollectAddrMapper.java
index 154f5bd..7b35c32 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpAppUserCollectAddrMapper.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpAppUserCollectAddrMapper.java
@@ -1,21 +1,26 @@
-//package com.xiaopeng.account.mapper;
-//
-//import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-//import com.xiaopeng.account.model.query.XpUserCollectAddrListQuery;
-//import com.xiaopeng.account.model.vo.XpAppUserCollectAddrVO;
-//import com.xiaopeng.api.model.account.XpAppUserCollectAddr;
-//import org.apache.ibatis.annotations.Param;
-//
-//
-///**
-// * <p>
-// * 用户收藏地址Mapper 接口
-// * </p>
-// *
-// * @author mitao
-// * @since 2026-02-03
-// */
-//public interface XpAppUserCollectAddrMapper extends BaseMapper<XpAppUserCollectAddr> {
-// Page<XpAppUserCollectAddrVO> userCollectAddrPageList(@Param("page") Page<XpAppUserCollectAddrVO> page, @Param("query") XpUserCollectAddrListQuery query, @Param("uid") Long uid);
-//}
+package com.xiaopeng.account.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xiaopeng.account.model.query.XpUserCollectAddrListQuery;
+import com.xiaopeng.account.model.vo.CollectAddrTargetVO;
+import com.xiaopeng.account.model.vo.XpAppUserCollectAddrVO;
+import com.xiaopeng.api.model.account.XpAppUserCollectAddr;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 用户收藏地址Mapper 接口
+ * </p>
+ *
+ * @author mitao
+ * @since 2026-02-03
+ */
+public interface XpAppUserCollectAddrMapper extends BaseMapper<XpAppUserCollectAddr> {
+ Page<XpAppUserCollectAddrVO> userCollectAddrPageList(@Param("page") Page<XpAppUserCollectAddrVO> page, @Param("query") XpUserCollectAddrListQuery query, @Param("uid") Long uid);
+
+ CollectAddrTargetVO selectPointCollectTarget(@Param("pointId") Long pointId);
+
+ CollectAddrTargetVO selectStationCollectTarget(@Param("stationId") Long stationId);
+}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/dto/CollectAddrDTO.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/dto/CollectAddrDTO.java
index 891d2a5..9ea4ec8 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/dto/CollectAddrDTO.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/dto/CollectAddrDTO.java
@@ -1,25 +1,34 @@
-//package com.xiaopeng.account.model.dto;
-//
-//
-//import io.swagger.annotations.ApiModel;
-//import io.swagger.annotations.ApiModelProperty;
-//import lombok.Data;
-//
-//import javax.validation.constraints.NotNull;
-//
-//@Data
-//@ApiModel("收藏地址/取消收藏参数")
-//public class CollectAddrDTO {
-//
-// @ApiModelProperty("1=收藏 2=取消收藏")
-// @NotNull(message = "类型不能为空")
-// private Integer type;
-//
-// @ApiModelProperty(value = "经度")
-// @NotNull(message = "经度不能为空")
-// private Double longitude;
-//
-// @ApiModelProperty(value = "纬度")
-// @NotNull(message = "纬度不能为空")
-// private Double latitude;
-//}
+package com.xiaopeng.account.model.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel("收藏地址/取消收藏参数")
+public class CollectAddrDTO {
+
+ @ApiModelProperty("1=收藏 2=取消收藏")
+ @NotNull(message = "类型不能为空")
+ private Integer type;
+ @ApiModelProperty("收藏对象类型 1=站点 2=场站,不传时默认按站点处理")
+ private Integer itemType;
+
+ @ApiModelProperty(value = "经度")
+ @NotNull(message = "经度不能为空")
+ private Double longitude;
+
+ @ApiModelProperty(value = "纬度")
+ @NotNull(message = "纬度不能为空")
+ private Double latitude;
+
+
+ @ApiModelProperty(value = "站点id")
+ private Long pointId;
+
+ @ApiModelProperty("场站id。收藏/取消收藏场站时传入")
+ private Long stationId;
+}
\ No newline at end of file
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/query/XpUserCollectAddrListQuery.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/query/XpUserCollectAddrListQuery.java
index 277d9fb..92ff110 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/query/XpUserCollectAddrListQuery.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/query/XpUserCollectAddrListQuery.java
@@ -1,11 +1,11 @@
-//package com.xiaopeng.account.model.query;
-//
-//import com.xiaopeng.common.core.web.page.BasePage;
-//import io.swagger.annotations.ApiModel;
-//import lombok.Data;
-//
-//@Data
-//@ApiModel(value = "用户收藏地址列表查询参数")
-//public class XpUserCollectAddrListQuery extends BasePage {
-//
-//}
+package com.xiaopeng.account.model.query;
+
+import com.xiaopeng.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "用户收藏地址列表查询参数")
+public class XpUserCollectAddrListQuery extends BasePage {
+
+}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpAppUserCollectAddrService.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpAppUserCollectAddrService.java
index d5d250c..1bc5d0f 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpAppUserCollectAddrService.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpAppUserCollectAddrService.java
@@ -1,39 +1,39 @@
-//package com.xiaopeng.account.service;
-//
-//import com.baomidou.mybatisplus.extension.service.IService;
-//import com.xiaopeng.account.model.dto.CollectAddrDTO;
-//import com.xiaopeng.account.model.query.XpUserCollectAddrListQuery;
-//import com.xiaopeng.account.model.vo.XpAppUserCollectAddrVO;
-//import com.xiaopeng.api.model.account.XpAppUserCollectAddr;
-//import com.xiaopeng.common.core.web.page.PageInfo;
-//
-///**
-// * <p>
-// * 用户收藏地址 服务类
-// * </p>
-// *
-// * @author ck
-// * @since 2026-04-10
-// */
-//public interface IXpAppUserCollectAddrService extends IService<XpAppUserCollectAddr> {
-//
-//
-// /**
-// * 收藏地址
-// *
-// * @param dto
-// * @param uid
-// * @return
-// */
-// Boolean collectAddr(CollectAddrDTO dto, String uid);
-//
-//
-// /**
-// * 收藏地址分页列表
-// *
-// * @param uid
-// * @return
-// */
-// PageInfo<XpAppUserCollectAddrVO> userCollectAddrList(XpUserCollectAddrListQuery query, String uid);
-//
-//}
+package com.xiaopeng.account.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xiaopeng.account.model.dto.CollectAddrDTO;
+import com.xiaopeng.account.model.query.XpUserCollectAddrListQuery;
+import com.xiaopeng.account.model.vo.XpAppUserCollectAddrVO;
+import com.xiaopeng.api.model.account.XpAppUserCollectAddr;
+import com.xiaopeng.common.core.web.page.PageInfo;
+
+/**
+ * <p>
+ * 用户收藏地址 服务类
+ * </p>
+ *
+ * @author ck
+ * @since 2026-04-10
+ */
+public interface IXpAppUserCollectAddrService extends IService<XpAppUserCollectAddr> {
+
+
+ /**
+ * 收藏地址
+ *
+ * @param dto
+ * @param uid
+ * @return
+ */
+ Boolean collectAddr(CollectAddrDTO dto, String uid);
+
+
+ /**
+ * 收藏地址分页列表
+ *
+ * @param uid
+ * @return
+ */
+ PageInfo<XpAppUserCollectAddrVO> userCollectAddrList(XpUserCollectAddrListQuery query, String uid);
+
+}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCollectAddrServiceImpl.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCollectAddrServiceImpl.java
new file mode 100644
index 0000000..fd9d342
--- /dev/null
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCollectAddrServiceImpl.java
@@ -0,0 +1,138 @@
+package com.xiaopeng.account.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiaopeng.account.mapper.XpAppUserCollectAddrMapper;
+import com.xiaopeng.account.model.dto.CollectAddrDTO;
+import com.xiaopeng.account.model.query.XpUserCollectAddrListQuery;
+import com.xiaopeng.account.model.vo.CollectAddrTargetVO;
+import com.xiaopeng.account.model.vo.XpAppUserCollectAddrVO;
+import com.xiaopeng.account.service.IXpAppUserCollectAddrService;
+import com.xiaopeng.api.model.account.XpAppUserCollectAddr;
+import com.xiaopeng.common.core.exception.ServiceException;
+import com.xiaopeng.common.core.web.page.PageInfo;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 用户收藏地址 服务实现类
+ * </p>
+ *
+ * @author ck
+ * @since 2026-04-10
+ */
+@Service
+public class XpAppUserCollectAddrServiceImpl extends ServiceImpl<XpAppUserCollectAddrMapper, XpAppUserCollectAddr> implements IXpAppUserCollectAddrService {
+
+ private static final int COLLECT_TYPE_ADD = 1;
+ private static final int COLLECT_TYPE_CANCEL = 2;
+ private static final int ITEM_TYPE_STATION = 2;
+ private static final int COLLECT_LIMIT = 50;
+
+ /**
+ * 收藏地址。
+ * 收藏表显式保存 item_type / station_id:
+ * 1. 站点收藏:item_type=1,point_id 保存站点自身。
+ * 2. 场站收藏:item_type=2,station_id 保存场站id,point_id 保存代表点位id。
+ * 这样取消收藏、列表回显和后续扩展都不需要再做隐式推断。
+ */
+ @Override
+ public Boolean collectAddr(CollectAddrDTO dto, String uid) {
+ Long userId = Long.parseLong(uid);
+ CollectAddrTargetVO target = resolveCollectTarget(dto);
+ if (target == null || target.getPointId() == null || target.getItemType() == null) {
+ throw new ServiceException("收藏目标不存在");
+ }
+
+ LambdaQueryWrapper<XpAppUserCollectAddr> sameTargetWrapper = buildSameTargetWrapper(userId, target);
+ if (COLLECT_TYPE_ADD == dto.getType()) {
+ Long count = this.count(new LambdaQueryWrapper<XpAppUserCollectAddr>()
+ .eq(XpAppUserCollectAddr::getAppUserId, userId)
+ .eq(XpAppUserCollectAddr::getDeleted, 0));
+ if (count >= COLLECT_LIMIT) {
+ throw new ServiceException("收藏夹已满,请先删除旧地址");
+ }
+ if (this.count(sameTargetWrapper) > 0) {
+ return true;
+ }
+
+ XpAppUserCollectAddr collectAddr = new XpAppUserCollectAddr();
+ collectAddr.setAppUserId(userId);
+ collectAddr.setItemType(target.getItemType());
+ collectAddr.setPointId(target.getPointId());
+ collectAddr.setStationId(target.getStationId());
+ collectAddr.setLongitude(target.getLongitude());
+ collectAddr.setLatitude(target.getLatitude());
+ return this.save(collectAddr);
+ }
+
+ if (COLLECT_TYPE_CANCEL == dto.getType()) {
+ XpAppUserCollectAddr collectAddr = this.getOne(sameTargetWrapper.last("limit 1"));
+ if (collectAddr == null) {
+ return true;
+ }
+ return this.removeById(collectAddr.getId());
+ }
+
+ throw new ServiceException("不支持的操作类型");
+ }
+
+ /**
+ * 收藏地址列表。
+ * 列表查询直接联表回显,场站/站点通过 item_type 直接区分。
+ */
+ @Override
+ public PageInfo<XpAppUserCollectAddrVO> userCollectAddrList(XpUserCollectAddrListQuery query, String uid) {
+ Page<XpAppUserCollectAddrVO> page = new Page<>(query.getPageNum(), query.getPageSize());
+ Page<XpAppUserCollectAddrVO> pageData = this.baseMapper.userCollectAddrPageList(page, query, Long.parseLong(uid));
+
+ PageInfo<XpAppUserCollectAddrVO> resultPage = new PageInfo<>(query.getPageNum(), query.getPageSize());
+ resultPage.setTotal(pageData.getTotal());
+ resultPage.setRecords(pageData.getRecords());
+ return resultPage;
+ }
+
+ /**
+ * 将前端传入的站点/场站目标解析成统一收藏目标。
+ * 优先按 itemType 判断,未传时兼容旧逻辑按 pointId 处理。
+ */
+ private CollectAddrTargetVO resolveCollectTarget(CollectAddrDTO dto) {
+ if (isStationItem(dto)) {
+ if (dto.getStationId() == null) {
+ throw new ServiceException("场站id不能为空");
+ }
+ return this.baseMapper.selectStationCollectTarget(dto.getStationId());
+ }
+ if (dto.getPointId() == null && dto.getStationId() != null) {
+ return this.baseMapper.selectStationCollectTarget(dto.getStationId());
+ }
+ if (dto.getPointId() == null) {
+ throw new ServiceException("站点id不能为空");
+ }
+ return this.baseMapper.selectPointCollectTarget(dto.getPointId());
+ }
+
+ /**
+ * 收藏唯一键规则:
+ * 1. 站点收藏按 user_id + item_type + point_id 去重。
+ * 2. 场站收藏按 user_id + item_type + station_id 去重。
+ * point_id 在场站收藏里仍保留,方便联动现有“已收藏点位”能力。
+ */
+ private LambdaQueryWrapper<XpAppUserCollectAddr> buildSameTargetWrapper(Long userId, CollectAddrTargetVO target) {
+ LambdaQueryWrapper<XpAppUserCollectAddr> wrapper = new LambdaQueryWrapper<XpAppUserCollectAddr>()
+ .eq(XpAppUserCollectAddr::getAppUserId, userId)
+ .eq(XpAppUserCollectAddr::getDeleted, 0)
+ .eq(XpAppUserCollectAddr::getItemType, target.getItemType());
+ if (target.getItemType() == ITEM_TYPE_STATION) {
+ wrapper.eq(XpAppUserCollectAddr::getStationId, target.getStationId());
+ } else {
+ wrapper.eq(XpAppUserCollectAddr::getPointId, target.getPointId());
+ }
+ return wrapper;
+ }
+
+ private boolean isStationItem(CollectAddrDTO dto) {
+ return dto.getItemType() != null && dto.getItemType() == ITEM_TYPE_STATION;
+ }
+}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpPoint.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpPoint.java
index b8dfd28..c469ab6 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpPoint.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpPoint.java
@@ -26,7 +26,7 @@
@Accessors(chain = true)
@TableName("xp_point")
@ApiModel(value="XpPoint对象", description="点位管理")
-public class XpPoint extends c {
+public class XpPoint extends BaseModel {
private static final long serialVersionUID = 1L;
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/HttpTestController.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/HttpTestController.java
new file mode 100644
index 0000000..7614c48
--- /dev/null
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/HttpTestController.java
@@ -0,0 +1,36 @@
+package com.xiaopeng.vehicleConvoy.controller;
+
+
+import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.vehicleConvoy.util.MinistryOfTransport;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/")
+public class HttpTestController {
+
+ @Resource
+ private MinistryOfTransport ministryOfTransport;
+
+
+ /**
+ * 测试上传数据接口
+ * 用于验证上传数据的准确性
+ * 模拟交通部接口
+ */
+ @ResponseBody
+ @RequestMapping("/base/v0.1/testPush")
+ public R<String> testPush(){
+ try {
+ String token = ministryOfTransport.getToken();
+ return R.ok(token);
+ }catch (Exception e){
+ e.printStackTrace();
+ return R.fail(e.getMessage());
+ }
+ }
+}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/MinistryOfTransport.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/MinistryOfTransport.java
new file mode 100644
index 0000000..24fc0b9
--- /dev/null
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/MinistryOfTransport.java
@@ -0,0 +1,109 @@
+package com.xiaopeng.vehicleConvoy.util;
+
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.crypto.digest.MD5;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+
+/**
+ * 交通部接口对接
+ */
+@Slf4j
+@Component
+public class MinistryOfTransport {
+
+ /**
+ * 公司名称:广州易点智慧出行科技有限公司
+ *
+ * 平台简称:“有鹏出行”
+ * 标识:XPQCB67N
+ * key:gEhROt7lg4DEBanR
+ *
+ * 对接ip:127.0.0.1,125.71.236.64,47.98.173.145,116.62.136.48,39.108.249.22,47.105.208.135,47.112.126.81,114.55.179.11,39.170.77.50,120.26.242.215
+ *
+ * 接口地址:https://wycapi.jtj.gz.gov.cn/api/app/common/binapi
+ */
+
+ private final String companyId = "4401XPQCB67N";//公司标识
+
+ private final String platform = "XPQC";
+
+ private final String key = "gEhROt7lg4DEBanR";
+
+ private final String url = "https://wycapi.jtj.gz.gov.cn/api/app/common/binapi";
+
+ private final String filePath = "src/main/resources/files/";
+
+
+ /**
+ * 获取token
+ * @return
+ */
+ public String getToken(){
+ //通过上传文件的方式获取token
+ String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
+ String fileName = platform + "_TOKEN_ACCESS_REQ_" + format + ".json";
+ File file = FileUtil.file(filePath + fileName);
+ if(!file.exists()){
+ file.getParentFile().mkdirs();
+ try {
+ file.createNewFile();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ JSONObject body = new JSONObject();
+ JSONArray items = new JSONArray();
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("platform", platform);
+ jsonObject.put("key", key);
+ items.add(jsonObject);
+ body.put("items", items);
+ file = FileUtil.writeUtf8String(body.toJSONString(), file);
+ String md5 = MD5.create().digestHex(file);
+ HttpRequest post = HttpUtil.createPost(url);
+ post.header("binfile-md5", md5);
+// post.header("binfile-auth", "5cd4be8cf03842a6b4c3246011e3482e");
+ post.header("binfile-gzip", "false");
+ post.header("binfile-reqlen", file.length() + "");
+ post.header("Transfer-Encoding", "chunked");
+ post.contentType("multipart/form-data;boundary=inputstream");
+ post.header("Connection", "Keep-Alive");
+ post.form("binFile", file);
+ post.form("filename", fileName);
+ log.info("获取token请求url {}", url);
+ log.info("获取token请求header {}", JSON.toJSONString(post.headers()));
+ log.info("获取token请求参数 {}", FileUtil.readUtf8String(file));
+ log.info("获取token请求body {}", JSON.toJSONString(post.form()));
+ HttpResponse execute = post.execute();
+ if(!execute.isOk()){
+ log.info("获取token失败:{} {}", execute.getStatus(), execute.body());
+ return execute.body();
+ }
+ InputStream inputStream = execute.bodyStream();
+ //读取inputStream流转成file文件
+ File resultFile = FileUtil.file(filePath + "token_response_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")) + ".json");
+ resultFile.getParentFile().mkdirs();
+ FileUtil.writeFromStream(inputStream, resultFile);
+ String responseContent = FileUtil.readUtf8String(resultFile);
+ log.info("获取token成功 {}", responseContent);
+ return responseContent;
+ }
+
+
+
+}
--
Gitblit v1.7.1