From d0d5b3d82bf8b2a416a92dd817f22f4ec3fc2d64 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期六, 14 二月 2026 20:24:22 +0800
Subject: [PATCH] feat(app):个人中心、消息通知接口
---
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java | 30 ++
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpAgreementVo.java | 2
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/SysGroupMenuClient.java | 29 ++
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java | 2
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java | 14 +
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpAppVersionService.java | 20 +
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/SysMenuServiceImpl.java | 78 +++++++
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpAppVersionMapper.java | 14 +
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java | 8
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/query/XpOperationsUserNotificationPageQuery.java | 19 +
xp-robotaxi-api/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java | 8
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/SysGroupMenuClientFallbackFactory.java | 31 ++
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpOperationsUserNotificationMapper.java | 13 +
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/dto/XpOperationsUserDTO.java | 47 ++++
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAgreementController.java | 19 -
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpSystemSettingController.java | 19 +
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpAppVersionServiceImpl.java | 43 +++
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserNotificationController.java | 50 ++++
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/vo/SysGroupDetailVO.java | 3
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAppVersionController.java | 41 +++
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserNotificationService.java | 10
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpAppVersionVO.java | 28 ++
xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpAppVersionMapper.xml | 5
xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserNotificationMapper.xml | 11 +
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpAppVersion.java | 41 +++
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysGroupMenuController.java | 35 +++
27 files changed, 595 insertions(+), 28 deletions(-)
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysGroupMenuController.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysGroupMenuController.java
new file mode 100644
index 0000000..019500a
--- /dev/null
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysGroupMenuController.java
@@ -0,0 +1,35 @@
+package com.xiaopeng.account.controller;
+
+import com.xiaopeng.account.service.ISysGroupMenuService;
+import com.xiaopeng.common.core.domain.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 权限组菜单关联 Controller
+ */
+@Slf4j
+@RestController
+@RequestMapping("")
+@Api(tags = "权限组菜单管理")
+public class SysGroupMenuController {
+
+ @Autowired
+ private ISysGroupMenuService sysGroupMenuService;
+
+ /**
+ * 根据权限组ID查询菜单ID列表(内部接口)
+ */
+ @PostMapping("/groupMenu/selectMenuIdsByGroupId")
+ @ApiOperation(value = "根据权限组ID查询菜单ID列表", tags = {"内部接口"})
+ public R<List<Long>> selectMenuIdsByGroupId(@RequestParam("groupId") Long groupId) {
+ log.info("查询权限组菜单ID列表, groupId={}", groupId);
+ List<Long> menuIds = sysGroupMenuService.selectMenuIdsByGroupId(groupId);
+ return R.ok(menuIds);
+ }
+}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java
index d10d855..52085d1 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java
@@ -2,6 +2,7 @@
import com.xiaopeng.account.mapper.XpOperationsRoleMapper;
+import com.xiaopeng.account.model.dto.XpOperationsUserDTO;
import com.xiaopeng.account.model.query.XpOperationsUserPageQuery;
import com.xiaopeng.account.service.IXpOperationsUserService;
import com.xiaopeng.api.dto.account.XpOperationsUserQueryDTO;
@@ -16,6 +17,7 @@
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
+import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
@@ -130,4 +132,16 @@
return R.ok(profile);
}
+
+ /**
+ * 运维APP-个人中心-证件上传
+ * @param dto
+ * @return
+ */
+ @ApiOperation(value = "个人中心-证件上传", tags = {"运维APP-个人中心"})
+ @PostMapping("/api/v1/saveCertificate")
+ public R<?> saveCertificate(@Valid @RequestBody XpOperationsUserDTO dto){
+ xpOperationsUserService.saveCertificate(dto);
+ return R.ok();
+ }
}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserNotificationController.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserNotificationController.java
index 5806f8e..2efc1fa 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserNotificationController.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserNotificationController.java
@@ -1,9 +1,17 @@
package com.xiaopeng.account.controller;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.stereotype.Controller;
+import com.xiaopeng.account.model.query.XpOperationsUserNotificationPageQuery;
+import com.xiaopeng.account.service.IXpOperationsUserNotificationService;
+import com.xiaopeng.api.model.account.XpOperationsUserNotification;
+import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.web.page.PageInfo;
+import com.xiaopeng.common.security.service.TokenService;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
/**
* <p>
@@ -13,8 +21,38 @@
* @author mitao
* @since 2026-02-03
*/
-@Controller
-@RequestMapping("/xp-operations-user-notification")
+@Slf4j
+@RestController
public class XpOperationsUserNotificationController {
+ @Autowired
+ private IXpOperationsUserNotificationService notificationService;
+
+ @Autowired
+ private TokenService tokenService;
+
+ /**
+ * 根据当前登录用户获取通知分页列表(运维APP接口)
+ */
+ @PostMapping("/api/v1/notification/list")
+ @ApiOperation(value = "获取通知分页列表", tags = {"运维APP-消息通知"})
+ public R<PageInfo<XpOperationsUserNotification>> getNotificationList(
+ @RequestBody XpOperationsUserNotificationPageQuery query) {
+
+ log.info("查询通知分页列表, pageNum={}, pageSize={}",
+ query.getPageNum(), query.getPageSize());
+
+ // 从Token中获取当前登录用户ID
+ Long currentUserId = tokenService.getLoginOperationUser().getId();
+ query.setOperationsUserId(currentUserId);
+
+ // 查询分页列表
+ PageInfo<XpOperationsUserNotification> pageInfo =
+ notificationService.selectNotificationPageByUserId(query);
+
+ log.info("查询通知分页列表成功, userId={}, total={}",
+ currentUserId, pageInfo.getTotal());
+
+ return R.ok(pageInfo);
+ }
}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpOperationsUserNotificationMapper.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpOperationsUserNotificationMapper.java
index d6a2d08..d66ce45 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpOperationsUserNotificationMapper.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpOperationsUserNotificationMapper.java
@@ -1,7 +1,10 @@
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.XpOperationsUserNotificationPageQuery;
import com.xiaopeng.api.model.account.XpOperationsUserNotification;
+import org.apache.ibatis.annotations.Param;
/**
* <p>
@@ -13,4 +16,14 @@
*/
public interface XpOperationsUserNotificationMapper extends BaseMapper<XpOperationsUserNotification> {
+ /**
+ * 分页查询用户通知列表
+ * @param page 分页对象
+ * @param query 查询条件
+ * @return 通知分页列表
+ */
+ Page<XpOperationsUserNotification> selectNotificationPageByUserId(
+ Page<XpOperationsUserNotification> page,
+ @Param("query") XpOperationsUserNotificationPageQuery query
+ );
}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/dto/XpOperationsUserDTO.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/dto/XpOperationsUserDTO.java
new file mode 100644
index 0000000..154eba0
--- /dev/null
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/dto/XpOperationsUserDTO.java
@@ -0,0 +1,47 @@
+package com.xiaopeng.account.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author MiTao
+ * @date 2026-02-14 19:27
+ *
+ */
+@Data
+@ApiModel(value = "运维人员数据传输对象")
+public class XpOperationsUserDTO {
+
+ @ApiModelProperty(value = "ID")
+ @NotNull(message = "id不能为空")
+ private Long id;
+
+ @NotBlank(message = "身份证正面不能为空")
+ @ApiModelProperty(value = "身份证正面", notes = "格式:{\"id\":\"1\",\"name\":\"头像.jpg\",\"url\":\"\n" +
+ "https://pss.bdstatic.com/static/superman/img/topnav/newfanyi-da0cea8f7e.png\"}")
+ private String idCardFront;
+
+ @NotBlank(message = "身份证背面不能为空")
+ @ApiModelProperty(value = "身份证背面", notes = "格式:{\\\"id\\\":\\\"1\\\",\\\"name\\\":\\\"头像.jpg\\\",\\\"url\\\":\\\"\\n\" +\n" +
+ " \"https://pss.bdstatic.com/static/superman/img/topnav/newfanyi-da0cea8f7e.png\\\"}")
+ private String idCardBack;
+
+ @NotBlank(message = "驾驶证正面不能为空")
+ @ApiModelProperty(value = "驾驶证正面",notes = "格式:{\\\"id\\\":\\\"1\\\",\\\"name\\\":\\\"头像.jpg\\\",\\\"url\\\":\\\"\\n\" +\n" +
+ " \"https://pss.bdstatic.com/static/superman/img/topnav/newfanyi-da0cea8f7e.png\\\"}")
+ private String driverLicense;
+
+ @NotBlank(message = "无犯罪记录证明不能为空")
+ @ApiModelProperty(value = "无犯罪记录",notes = "格式:{\\\"id\\\":\\\"1\\\",\\\"name\\\":\\\"头像.jpg\\\",\\\"url\\\":\\\"\\n\" +\n" +
+ " \"https://pss.bdstatic.com/static/superman/img/topnav/newfanyi-da0cea8f7e.png\\\"}")
+ private String certificateOfNoCriminalRecord;
+
+ @NotBlank(message = "培训结业证不能为空")
+ @ApiModelProperty(value = "培训结业证", notes = "格式:{\\\"id\\\":\\\"1\\\",\\\"name\\\":\\\"头像.jpg\\\",\\\"url\\\":\\\"\\n\" +\n" +
+ " \"https://pss.bdstatic.com/static/superman/img/topnav/newfanyi-da0cea8f7e.png\\\"}")
+ private String trainingGraduationCertificate;
+}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/query/XpOperationsUserNotificationPageQuery.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/query/XpOperationsUserNotificationPageQuery.java
new file mode 100644
index 0000000..89a2c91
--- /dev/null
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/query/XpOperationsUserNotificationPageQuery.java
@@ -0,0 +1,19 @@
+package com.xiaopeng.account.model.query;
+
+import com.xiaopeng.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 运维人员通知分页查询条件
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("运维人员通知分页查询条件")
+public class XpOperationsUserNotificationPageQuery extends BasePage {
+
+ @ApiModelProperty(value = "运维人员ID(由后端自动填充,前端无需传递)")
+ private Long operationsUserId;
+}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/vo/SysGroupDetailVO.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/vo/SysGroupDetailVO.java
index ff4a959..e4b312f 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/vo/SysGroupDetailVO.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/model/vo/SysGroupDetailVO.java
@@ -29,4 +29,7 @@
@ApiModelProperty(value = "菜单列表")
private List<SysMenuVO> menus;
+
+ @ApiModelProperty(value = "菜单列表")
+ private List<Long> menuIds;
}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserNotificationService.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserNotificationService.java
index d58e7e3..cb51075 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserNotificationService.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserNotificationService.java
@@ -1,7 +1,9 @@
package com.xiaopeng.account.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.xiaopeng.account.model.query.XpOperationsUserNotificationPageQuery;
import com.xiaopeng.api.model.account.XpOperationsUserNotification;
+import com.xiaopeng.common.core.web.page.PageInfo;
/**
* <p>
@@ -13,4 +15,12 @@
*/
public interface IXpOperationsUserNotificationService extends IService<XpOperationsUserNotification> {
+ /**
+ * 分页查询用户通知列表
+ * @param query 查询条件
+ * @return 通知分页列表
+ */
+ PageInfo<XpOperationsUserNotification> selectNotificationPageByUserId(
+ XpOperationsUserNotificationPageQuery query
+ );
}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java
index 44c9ad7..97f2620 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java
@@ -1,12 +1,14 @@
package com.xiaopeng.account.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.xiaopeng.account.model.dto.XpOperationsUserDTO;
import com.xiaopeng.account.model.query.XpOperationsUserPageQuery;
import com.xiaopeng.api.model.account.XpOperationsUser;
import com.xiaopeng.api.vo.account.XpOperationsUserProfileVO;
import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO;
import com.xiaopeng.common.core.web.page.PageInfo;
+import javax.validation.Valid;
import java.util.List;
/**
@@ -39,4 +41,10 @@
* @return 个人中心首页信息
*/
XpOperationsUserProfileVO getUserProfile(Long userId);
+
+ /**
+ *
+ * @param dto
+ */
+ void saveCertificate(@Valid XpOperationsUserDTO dto);
}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java
index e4923c2..fa1e142 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java
@@ -137,8 +137,10 @@
List<SysMenu> menus = result.getData();
// 构建菜单树
vo.setMenus(buildMenuTree(menus));
+ vo.setMenuIds(menus.stream().map(SysMenu::getId).collect(Collectors.toList()));
} else {
vo.setMenus(new ArrayList<>());
+ vo.setMenuIds(new ArrayList<>());
}
} catch (Exception e) {
log.error("获取菜单列表失败: {}", e.getMessage());
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java
index 3714240..2e7e722 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java
@@ -1,9 +1,12 @@
package com.xiaopeng.account.service.impl;
-import com.xiaopeng.account.mapper.XpOperationsUserNotificationMapper;
-import com.xiaopeng.account.service.IXpOperationsUserNotificationService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiaopeng.account.mapper.XpOperationsUserNotificationMapper;
+import com.xiaopeng.account.model.query.XpOperationsUserNotificationPageQuery;
+import com.xiaopeng.account.service.IXpOperationsUserNotificationService;
import com.xiaopeng.api.model.account.XpOperationsUserNotification;
+import com.xiaopeng.common.core.web.page.PageInfo;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +20,27 @@
@Service
public class XpOperationsUserNotificationServiceImpl extends ServiceImpl<XpOperationsUserNotificationMapper, XpOperationsUserNotification> implements IXpOperationsUserNotificationService {
+ @Override
+ public PageInfo<XpOperationsUserNotification> selectNotificationPageByUserId(
+ XpOperationsUserNotificationPageQuery query) {
+
+ // 创建分页对象
+ Page<XpOperationsUserNotification> page = new Page<>(
+ query.getPageNum(),
+ query.getPageSize()
+ );
+
+ // 执行分页查询
+ Page<XpOperationsUserNotification> resultPage = baseMapper.selectNotificationPageByUserId(
+ page,
+ query
+ );
+
+ // 封装分页结果
+ PageInfo<XpOperationsUserNotification> pageInfo = new PageInfo<>();
+ pageInfo.setRecords(resultPage.getRecords());
+ pageInfo.setTotal(resultPage.getTotal());
+
+ return pageInfo;
+ }
}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java
index ca1a4da..ce67257 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java
@@ -1,8 +1,10 @@
package com.xiaopeng.account.service.impl;
+import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xiaopeng.account.mapper.XpOperationsRoleMapper;
import com.xiaopeng.account.mapper.XpOperationsUserMapper;
+import com.xiaopeng.account.model.dto.XpOperationsUserDTO;
import com.xiaopeng.account.model.query.XpOperationsUserPageQuery;
import com.xiaopeng.account.service.IXpOperationsUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -149,4 +151,10 @@
return vo;
}
+
+ @Override
+ public void saveCertificate(XpOperationsUserDTO dto) {
+ XpOperationsUser xpOperationsUser = BeanUtil.copyProperties(dto, XpOperationsUser.class);
+ updateById(xpOperationsUser);
+ }
}
diff --git a/xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserNotificationMapper.xml b/xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserNotificationMapper.xml
index 7468b13..0987c57 100644
--- a/xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserNotificationMapper.xml
+++ b/xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserNotificationMapper.xml
@@ -7,4 +7,15 @@
id, notification_type, notification_content, operations_user_id, data_id, is_deleted, create_time, update_time, create_by, update_by
</sql>
+ <!-- 分页查询用户通知列表 -->
+ <select id="selectNotificationPageByUserId"
+ resultType="com.xiaopeng.api.model.account.XpOperationsUserNotification">
+ SELECT
+ <include refid="Base_Column_List"/>
+ FROM xp_operations_user_notification
+ WHERE operations_user_id = #{query.operationsUserId}
+ AND is_deleted = 0
+ ORDER BY create_time DESC
+ </select>
+
</mapper>
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/SysGroupMenuClientFallbackFactory.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/SysGroupMenuClientFallbackFactory.java
new file mode 100644
index 0000000..cccd5d7
--- /dev/null
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/SysGroupMenuClientFallbackFactory.java
@@ -0,0 +1,31 @@
+package com.xiaopeng.api.factory.account;
+
+import com.xiaopeng.api.feignClient.account.SysGroupMenuClient;
+import com.xiaopeng.common.core.domain.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 权限组菜单关联服务降级工厂
+ */
+@Slf4j
+@Component
+public class SysGroupMenuClientFallbackFactory implements FallbackFactory<SysGroupMenuClient> {
+
+ @Override
+ public SysGroupMenuClient create(Throwable cause) {
+ return new SysGroupMenuClient() {
+ @Override
+ public R<List<Long>> selectMenuIdsByGroupId(Long groupId) {
+ log.error("调用权限组菜单服务失败, groupId={}, 异常: {}",
+ groupId, cause.getMessage(), cause);
+ // 降级策略: 返回空列表
+ return R.ok(Collections.emptyList());
+ }
+ };
+ }
+}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/SysGroupMenuClient.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/SysGroupMenuClient.java
new file mode 100644
index 0000000..b2ed6d9
--- /dev/null
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/SysGroupMenuClient.java
@@ -0,0 +1,29 @@
+package com.xiaopeng.api.feignClient.account;
+
+import com.xiaopeng.api.factory.account.SysGroupMenuClientFallbackFactory;
+import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 权限组菜单关联 Feign 客户端
+ */
+@FeignClient(
+ contextId = "SysGroupMenuClient",
+ value = ServiceNameConstantsEnum.XP_ACCOUNT_SERVICE,
+ fallbackFactory = SysGroupMenuClientFallbackFactory.class
+)
+public interface SysGroupMenuClient {
+
+ /**
+ * 根据权限组ID查询菜单ID列表
+ * @param groupId 权限组ID
+ * @return 菜单ID列表
+ */
+ @PostMapping("/groupMenu/selectMenuIdsByGroupId")
+ R<List<Long>> selectMenuIdsByGroupId(@RequestParam("groupId") Long groupId);
+}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpAppVersion.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpAppVersion.java
new file mode 100644
index 0000000..383dc0d
--- /dev/null
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpAppVersion.java
@@ -0,0 +1,41 @@
+package com.xiaopeng.api.model.operation;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.xiaopeng.common.core.web.domain.BaseModel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * App版本管理实体类
+ *
+ * @author mitao
+ * @since 2026-02-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("xp_app_version")
+@ApiModel(value = "XpAppVersion对象", description = "app版本管理")
+public class XpAppVersion extends BaseModel {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "自增id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty(value = "安卓软件包")
+ private String androidFile;
+
+ @ApiModelProperty(value = "ios软件包")
+ private String iosFile;
+
+ @ApiModelProperty(value = "软件版本号")
+ private String version;
+
+ @ApiModelProperty(value = "更新说明")
+ private String updateDescription;
+}
diff --git a/xp-robotaxi-api/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/xp-robotaxi-api/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index f342d11..dd01b80 100644
--- a/xp-robotaxi-api/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/xp-robotaxi-api/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -28,4 +28,5 @@
com.xiaopeng.api.factory.automaticPilot.OrderMissionClientFallbackFactory
com.xiaopeng.api.factory.maintenance.XpCheckLocationClientFallbackFactory
com.xiaopeng.api.factory.automaticPilot.OrderMissionClientFallbackFactory
-com.xiaopeng.api.factory.maintenance.XpClockInClientFallbackFactory
\ No newline at end of file
+com.xiaopeng.api.factory.maintenance.XpClockInClientFallbackFactory
+com.xiaopeng.api.factory.account.SysGroupMenuClientFallbackFactory
\ No newline at end of file
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAgreementController.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAgreementController.java
index a0573eb..8c995c5 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAgreementController.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAgreementController.java
@@ -2,24 +2,19 @@
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.controller.BaseController;
-import com.xiaopeng.common.core.web.domain.AjaxResult;
import com.xiaopeng.operation.service.XpAgreementService;
import com.xiaopeng.operation.vo.XpAgreementVo;
-import com.xiaopeng.operation.vo.XpBannerListVo;
-import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Slf4j
@RestController
-@RequestMapping("/base/v1/mini-program")
-@Api(tags = "协议模块")
public class XpAgreementController extends BaseController {
private final XpAgreementService xpAgreementService;
@@ -29,21 +24,23 @@
}
@ApiOperation(value = "获取协议",tags = {"小程序-首页"},response = XpAgreementVo.class)
- @GetMapping("/privacy/content/{type}")
+ @GetMapping("/base/v1/mini-program/privacy/content/{type}")
public R<XpAgreementVo> getContent(@PathVariable Integer type) {
return R.ok(xpAgreementService.getContentByType(type));
}
@ApiOperation(value = "获取协议所有",tags = {"小程序-首页所有"},response = XpAgreementVo.class)
- @GetMapping("/privacy/contentAll")
+ @GetMapping("/base/v1/mini-program/privacy/contentAll")
public R<List<XpAgreementVo>> contentAll() {
return R.ok(xpAgreementService.getContentByTypeAll());
}
-
-
-
+ @ApiOperation(value = "获取协议/隐私政策",tags = {"运维APP-个人中心"},response = XpAgreementVo.class)
+ @GetMapping("/base/v1/privacy/content/{type}")
+ public R<XpAgreementVo> getAppContent(@ApiParam(name = "type", value = "类型 1=用户服务协议 2=平台隐私政策 ") @PathVariable Integer type) {
+ return R.ok(xpAgreementService.getContentByType(type));
+ }
}
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAppVersionController.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAppVersionController.java
new file mode 100644
index 0000000..416285a
--- /dev/null
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAppVersionController.java
@@ -0,0 +1,41 @@
+package com.xiaopeng.operation.controller;
+
+import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.operation.service.IXpAppVersionService;
+import com.xiaopeng.operation.vo.XpAppVersionVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * App版本管理 Controller
+ *
+ * @author mitao
+ * @since 2026-02-14
+ */
+@Slf4j
+@RestController
+@RequestMapping("")
+@Api(tags = "App版本管理")
+public class XpAppVersionController {
+
+ private final IXpAppVersionService appVersionService;
+
+ public XpAppVersionController(IXpAppVersionService appVersionService) {
+ this.appVersionService = appVersionService;
+ }
+
+ /**
+ * 获取App最新版本(运维APP接口)
+ */
+ @GetMapping("/api/v1/app/version/latest")
+ @ApiOperation(value = "获取App最新版本", tags = {"运维APP-版本管理"})
+ public R<XpAppVersionVO> getLatestVersion() {
+ log.info("查询App最新版本");
+ XpAppVersionVO vo = appVersionService.getLatestVersion();
+ return R.ok(vo);
+ }
+}
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpSystemSettingController.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpSystemSettingController.java
index a668feb..636fe02 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpSystemSettingController.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpSystemSettingController.java
@@ -1,6 +1,5 @@
package com.xiaopeng.operation.controller;
-import com.xiaopeng.api.model.operation.SysOperLog;
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.controller.BaseController;
@@ -8,14 +7,12 @@
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.operation.service.XpSystemSettingService;
import com.xiaopeng.operation.vo.CustomerServicePhoneVo;
-import com.xiaopeng.operation.vo.XpBannerListVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@@ -64,4 +61,14 @@
return R.ok(xpSystemSettingService.getOrderFinishTime());
}
+ @GetMapping("/base/v1/support/phone")
+ @ApiOperation(value = "获取客服电话", tags = {"运维APP-个人中心"}, response = String.class)
+ public R<CustomerServicePhoneVo> getCustomerPhone() {
+ Object customerServicePhone = redisService.getCacheObject(CacheConstants.CUSTOMER_SERVICE_PHONE);
+ if (customerServicePhone != null) {
+ return R.ok(new CustomerServicePhoneVo(customerServicePhone.toString()));
+ } else {
+ return R.ok(new CustomerServicePhoneVo(xpSystemSettingService.getCustomerServicePhone()));
+ }
+ }
}
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpAppVersionMapper.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpAppVersionMapper.java
new file mode 100644
index 0000000..13d0dcf
--- /dev/null
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpAppVersionMapper.java
@@ -0,0 +1,14 @@
+package com.xiaopeng.operation.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xiaopeng.api.model.operation.XpAppVersion;
+
+/**
+ * App版本管理 Mapper 接口
+ *
+ * @author mitao
+ * @since 2026-02-14
+ */
+public interface XpAppVersionMapper extends BaseMapper<XpAppVersion> {
+
+}
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpAppVersionService.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpAppVersionService.java
new file mode 100644
index 0000000..31ac1f5
--- /dev/null
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpAppVersionService.java
@@ -0,0 +1,20 @@
+package com.xiaopeng.operation.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xiaopeng.api.model.operation.XpAppVersion;
+import com.xiaopeng.operation.vo.XpAppVersionVO;
+
+/**
+ * App版本管理 服务接口
+ *
+ * @author mitao
+ * @since 2026-02-14
+ */
+public interface IXpAppVersionService extends IService<XpAppVersion> {
+
+ /**
+ * 获取最新版本信息
+ * @return 最新版本信息
+ */
+ XpAppVersionVO getLatestVersion();
+}
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/SysMenuServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/SysMenuServiceImpl.java
index 4501a89..38b26a9 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/SysMenuServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/SysMenuServiceImpl.java
@@ -1,9 +1,18 @@
package com.xiaopeng.operation.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiaopeng.api.feignClient.account.SysGroupMenuClient;
+import com.xiaopeng.api.feignClient.account.SysRoleClient;
+import com.xiaopeng.api.feignClient.account.SysUserRoleClient;
+import com.xiaopeng.api.model.account.SysRole;
+import com.xiaopeng.api.model.account.SysUserRole;
import com.xiaopeng.api.model.operation.SysMenu;
+import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.security.service.TokenService;
import com.xiaopeng.operation.mapper.SysMenuMapper;
import com.xiaopeng.operation.service.ISysMenuService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
@@ -17,8 +26,21 @@
* @author mitao
* @since 2026-02-03
*/
+@Slf4j
@Service
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements ISysMenuService {
+
+ @Autowired
+ private TokenService tokenService;
+
+ @Autowired
+ private SysUserRoleClient sysUserRoleClient;
+
+ @Autowired
+ private SysRoleClient sysRoleClient;
+
+ @Autowired
+ private SysGroupMenuClient sysGroupMenuClient;
/**
* 根据菜单ID列表查询菜单列表
@@ -105,7 +127,61 @@
@Override
public List<SysMenu> getPermission() {
+ try {
+ // 1. 获取当前登录用户ID
+ Long userId = tokenService.getLoginUser().getUserid();
+ if (userId == null) {
+ log.warn("获取当前登录用户ID失败");
+ return Collections.emptyList();
+ }
- return Collections.emptyList();
+ // 2. 查询用户角色关联
+ R<SysUserRole> userRoleResult = sysUserRoleClient.selectSysUserRoleByUserId(userId);
+ if (userRoleResult == null || userRoleResult.getCode() != 200 || userRoleResult.getData() == null) {
+ log.warn("查询用户角色关联失败, userId={}", userId);
+ return Collections.emptyList();
+ }
+
+ Long roleId = userRoleResult.getData().getRoleId();
+ if (roleId == null) {
+ log.warn("用户未关联角色, userId={}", userId);
+ return Collections.emptyList();
+ }
+
+ // 3. 查询角色信息
+ R<SysRole> roleResult = sysRoleClient.getRoleById(roleId);
+ if (roleResult == null || roleResult.getCode() != 200 || roleResult.getData() == null) {
+ log.warn("查询角色信息失败, roleId={}", roleId);
+ return Collections.emptyList();
+ }
+
+ Long groupId = roleResult.getData().getGroupId();
+ if (groupId == null) {
+ log.warn("角色未关联权限组, roleId={}", roleId);
+ return Collections.emptyList();
+ }
+
+ // 4. 查询权限组关联的菜单ID列表
+ R<List<Long>> menuIdsResult = sysGroupMenuClient.selectMenuIdsByGroupId(groupId);
+ if (menuIdsResult == null || menuIdsResult.getCode() != 200 || menuIdsResult.getData() == null) {
+ log.warn("查询权限组菜单ID列表失败, groupId={}", groupId);
+ return Collections.emptyList();
+ }
+
+ List<Long> menuIds = menuIdsResult.getData();
+ if (menuIds.isEmpty()) {
+ log.info("权限组未关联菜单, groupId={}", groupId);
+ return Collections.emptyList();
+ }
+
+ // 5. 查询菜单详情
+ List<SysMenu> menus = this.listByIds(menuIds);
+ log.info("查询用户权限菜单成功, userId={}, menuCount={}", userId, menus.size());
+ return menus;
+
+ } catch (Exception e) {
+ log.error("查询用户权限菜单异常", e);
+ return Collections.emptyList();
+ }
}
}
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpAppVersionServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpAppVersionServiceImpl.java
new file mode 100644
index 0000000..6daacfb
--- /dev/null
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpAppVersionServiceImpl.java
@@ -0,0 +1,43 @@
+package com.xiaopeng.operation.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiaopeng.api.model.operation.XpAppVersion;
+import com.xiaopeng.common.core.exception.ServiceException;
+import com.xiaopeng.operation.mapper.XpAppVersionMapper;
+import com.xiaopeng.operation.service.IXpAppVersionService;
+import com.xiaopeng.operation.vo.XpAppVersionVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+
+/**
+ * App版本管理 服务实现类
+ *
+ * @author mitao
+ * @since 2026-02-14
+ */
+@Slf4j
+@Service
+public class XpAppVersionServiceImpl extends ServiceImpl<XpAppVersionMapper, XpAppVersion> implements IXpAppVersionService {
+
+ @Override
+ public XpAppVersionVO getLatestVersion() {
+ // 查询最新版本(按ID倒序,取第一条)
+ XpAppVersion latestVersion = this.lambdaQuery()
+ .orderByDesc(XpAppVersion::getId)
+ .last("LIMIT 1")
+ .one();
+
+ if (Objects.isNull(latestVersion)) {
+ log.warn("未找到App版本信息");
+ throw new ServiceException("App版本信息不存在");
+ }
+
+ // 转换为 VO
+ XpAppVersionVO vo = BeanUtil.copyProperties(latestVersion, XpAppVersionVO.class);
+ log.info("获取最新App版本成功, version={}", vo.getVersion());
+ return vo;
+ }
+}
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpAgreementVo.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpAgreementVo.java
index 0c1fbc1..5bd3272 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpAgreementVo.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpAgreementVo.java
@@ -10,7 +10,7 @@
@ApiModelProperty(value = "id")
private Long id;
- @ApiModelProperty(value = "类型")
+ @ApiModelProperty(value = "类型 1=用户服务协议 2=平台隐私政策 3=敏感个人信息处理情况说明 4=向第三方提供个人信息情况的说明 5=乘车须知 6=计费规则说明")
private Integer type;
@ApiModelProperty(value = "内容")
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpAppVersionVO.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpAppVersionVO.java
new file mode 100644
index 0000000..d5911ab
--- /dev/null
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpAppVersionVO.java
@@ -0,0 +1,28 @@
+package com.xiaopeng.operation.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * App版本信息 VO
+ *
+ * @author mitao
+ * @since 2026-02-14
+ */
+@Data
+@ApiModel("App版本信息")
+public class XpAppVersionVO {
+
+ @ApiModelProperty(value = "软件版本号")
+ private String version;
+
+ @ApiModelProperty(value = "安卓软件包")
+ private String androidFile;
+
+ @ApiModelProperty(value = "ios软件包")
+ private String iosFile;
+
+ @ApiModelProperty(value = "更新说明")
+ private String updateDescription;
+}
diff --git a/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpAppVersionMapper.xml b/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpAppVersionMapper.xml
new file mode 100644
index 0000000..03cf406
--- /dev/null
+++ b/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpAppVersionMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xiaopeng.operation.mapper.XpAppVersionMapper">
+
+</mapper>
--
Gitblit v1.7.1