285 lines
11 KiB
Markdown
285 lines
11 KiB
Markdown
# 实现计划:贩卖机配套移动端 App
|
||
|
||
## 概述
|
||
|
||
本实现计划将设计文档拆分为可执行的编码任务。项目包含三个子系统:.NET 10 后端 API、UniApp 移动端、EleAdmin + Vue 3 管理后台。任务按模块递进,每个模块完成后进行检查点验证。
|
||
|
||
## 任务
|
||
|
||
- [x] 1. 后端项目初始化与基础架构
|
||
- [x] 1.1 创建 .NET 10 ASP.NET Core Web API 项目结构
|
||
- 创建解决方案和项目(API、Domain、Infrastructure、Application 分层)
|
||
- 配置 SQL Server 连接字符串和 Entity Framework Core
|
||
- 配置 Redis 连接
|
||
- 添加 Swagger/OpenAPI 文档
|
||
- _需求: 全局_
|
||
|
||
- [x] 1.2 创建数据库实体和 DbContext
|
||
- 根据设计文档数据模型创建所有 Entity 类(User、MembershipProduct、PointRecord、CouponTemplate、UserCoupon、Banner、HomeEntry、ContentConfig、VendingPaymentRecord、PointsConfig)
|
||
- 创建 AppDbContext 并配置实体映射关系
|
||
- 创建初始数据库迁移
|
||
- _需求: 全局_
|
||
|
||
- [x] 1.3 实现通用基础设施
|
||
- 实现统一 API 响应格式(ApiResponse<T>)
|
||
- 实现全局异常处理中间件
|
||
- 实现 JWT 认证中间件
|
||
- 实现多语言请求头解析(Accept-Language)
|
||
- _需求: 全局_
|
||
|
||
- [x] 2. 用户认证模块
|
||
- [x] 2.1 实现用户服务和控制器
|
||
- 实现 UserService(发送验证码、登录、获取用户信息、登出、注销)
|
||
- 实现 UserController 的所有端点
|
||
- 实现手机号区号验证逻辑
|
||
- 实现默认昵称生成("用户" + 6位随机数字)
|
||
- _需求: 1.1, 1.2, 1.3, 1.5, 1.6, 1.7, 1.8_
|
||
|
||
- [x] 2.2 编写用户认证属性测试
|
||
- **Property 1: 默认昵称格式**
|
||
- **Property 2: 协议未勾选阻止登录**
|
||
- **验证: 需求 1.4, 1.6**
|
||
|
||
- [x] 2.3 编写用户认证单元测试
|
||
- 测试登录成功/失败流程
|
||
- 测试注销账号流程
|
||
- 测试验证码发送逻辑
|
||
- _需求: 1.1, 1.3, 1.7_
|
||
|
||
- [x] 3. 检查点 - 用户认证模块
|
||
- 确保所有测试通过,如有问题请向用户确认。
|
||
|
||
- [x] 4. 会员与支付模块
|
||
- [x] 4.1 实现会员服务和控制器
|
||
- 实现 MembershipService(获取会员信息、获取商品列表、购买会员、购买订阅、验证订阅状态)
|
||
- 实现 MembershipController 的所有端点
|
||
- 实现会员到期后积分保留/清空逻辑(3个月规则)
|
||
- 实现 Google Pay / Apple Pay 支付凭证验证逻辑
|
||
- _需求: 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 8.1, 8.2, 8.3, 8.5, 8.6_
|
||
|
||
- [x] 4.2 编写会员与支付属性测试
|
||
- **Property 7: 会员页按钮状态取决于会员类型**
|
||
- **Property 8: 平台与支付方式映射**
|
||
- **Property 9: 积分保留与清空规则**
|
||
- **Property 17: 支付错误处理**
|
||
- **验证: 需求 4.2, 4.3, 4.4, 4.5, 4.7, 4.8, 8.4**
|
||
|
||
- [x] 5. 积分模块
|
||
- [x] 5.1 实现积分服务和控制器
|
||
- 实现 PointsService(获取余额、获取记录、赠送积分、消费积分转换)
|
||
- 实现 PointsController 的所有端点
|
||
- 实现积分转换计算逻辑(金额 * 转换比)
|
||
- 实现赠送积分事务逻辑(扣减发送方、增加接收方,保证原子性)
|
||
- _需求: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7_
|
||
|
||
- [x] 5.2 编写积分模块属性测试
|
||
- **Property 10: 积分转换计算**
|
||
- **Property 11: 积分记录渲染完整性**
|
||
- **Property 12: 赠送积分守恒**
|
||
- **验证: 需求 5.1, 5.4, 5.5, 5.6, 5.7**
|
||
|
||
- [x] 6. 优惠券模块
|
||
- [x] 6.1 实现优惠券服务和控制器
|
||
- 实现 CouponService(获取可兑换列表、兑换优惠券、获取用户优惠券、获取印花列表、兑换印花)
|
||
- 实现 CouponController 的所有端点
|
||
- 实现兑换逻辑(积分检查、库存检查、下架检查)
|
||
- 实现印花兑换逻辑(会员检查、每人限兑1次)
|
||
- 实现优惠券状态自动更新(过期检测)
|
||
- _需求: 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6_
|
||
|
||
- [x] 6.2 编写优惠券模块属性测试
|
||
- **Property 13: 优惠券兑换正确性**
|
||
- **Property 14: 优惠券状态分类与标识**
|
||
- **Property 15: 印花兑换权限取决于会员状态**
|
||
- **Property 16: 印花兑换幂等性**
|
||
- **验证: 需求 6.2, 6.3, 6.6, 6.7, 7.3, 7.4, 7.5, 7.6**
|
||
|
||
- [x] 7. 检查点 - 核心业务模块
|
||
- 确保所有测试通过,如有问题请向用户确认。
|
||
|
||
- [x] 8. 贩卖机对接模块
|
||
- [x] 8.1 实现贩卖机对接服务和控制器
|
||
- 实现 VendingMachineService(二维码生成与验证、用户信息查询、用户锁定/解锁、支付回调处理)
|
||
- 实现 VendingMachineController 的所有端点
|
||
- 实现动态二维码生成(包含会员 ID、token、过期时间),使用 Redis 存储
|
||
- 实现用户锁定机制(Redis 分布式锁)
|
||
- 实现支付回调处理(积分发放、优惠券核销、解除锁定)
|
||
- 实现优惠券排序逻辑(按到期时间升序、抵扣金额降序)
|
||
- _需求: 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7_
|
||
|
||
- [x] 8.2 编写贩卖机对接属性测试
|
||
- **Property 18: 会员二维码时效性**
|
||
- **Property 19: 用户锁定机制**
|
||
- **Property 20: 优惠券排序优先级**
|
||
- **Property 21: 支付结束解除锁定**
|
||
- **验证: 需求 9.1, 9.2, 9.3, 9.4, 9.6, 9.7**
|
||
|
||
- [x] 9. 内容配置模块
|
||
- [x] 9.1 实现内容配置服务和控制器
|
||
- 实现 ContentService(获取 Banner、入口图片、使用说明、协议内容等)
|
||
- 实现 ContentController 的所有端点
|
||
- 根据请求语言返回对应语言版本的内容
|
||
- _需求: 3.1, 3.2, 3.7, 3.8, 10.2, 10.4_
|
||
|
||
- [x] 10. 检查点 - 后端 API 完成
|
||
- 确保所有测试通过,如有问题请向用户确认。
|
||
|
||
- [x] 11. 管理后台 - 项目初始化
|
||
- [x] 11.1 创建 EleAdmin + Vue 3 管理后台项目
|
||
- 基于 EleAdmin 模板初始化项目
|
||
- 配置路由、权限管理、API 基础封装
|
||
- 配置与后端 Admin API 的对接
|
||
- _需求: 11(全局)_
|
||
|
||
- [x] 12. 管理后台 - 内容管理页面
|
||
- [x] 12.1 实现 Banner 管理页面
|
||
- Banner 列表展示、新增、编辑、删除
|
||
- 支持拖拽排序
|
||
- 支持多语言图片上传
|
||
- _需求: 11.1_
|
||
|
||
- [x] 12.2 实现入口图片管理页面
|
||
- 首页各功能入口图片的配置和多语言图片上传
|
||
- _需求: 11.8_
|
||
|
||
- [x] 12.3 实现内容编辑页面
|
||
- 用户协议、隐私政策、优惠券使用说明的多语言富文本编辑
|
||
- _需求: 11.7_
|
||
|
||
- [x] 13. 管理后台 - 业务管理页面
|
||
- [x] 13.1 实现优惠券管理页面
|
||
- 优惠券列表、创建、编辑表单(名称、类型、门槛、折扣、积分、到期时间)
|
||
- 上下架操作
|
||
- 多语言名称配置
|
||
- _需求: 11.2_
|
||
|
||
- [x] 13.2 实现节日印花管理页面
|
||
- 印花优惠券列表、创建、编辑
|
||
- Banner 图配置
|
||
- _需求: 11.3_
|
||
|
||
- [x] 13.3 实现会员商品管理页面
|
||
- 会员商品列表、价格编辑、时长配置
|
||
- 宣传图上传
|
||
- Google/Apple 商品 ID 配置
|
||
- _需求: 11.5_
|
||
|
||
- [x] 13.4 实现积分配置页面
|
||
- 金额与积分转换比配置表单
|
||
- _需求: 11.4_
|
||
|
||
- [x] 13.5 实现用户管理页面
|
||
- 用户列表(搜索、分页)
|
||
- 用户详情(会员状态、积分、优惠券)
|
||
- _需求: 11.6_
|
||
|
||
- [x] 14. 检查点 - 管理后台完成
|
||
- 确保所有测试通过,如有问题请向用户确认。
|
||
|
||
- [x] 15. UniApp 移动端 - 项目初始化
|
||
- [x] 15.1 创建 UniApp + Vue 3 + TypeScript 项目
|
||
- 初始化 UniApp 项目,配置 TypeScript
|
||
- 配置 Pinia 状态管理
|
||
- 配置 vue-i18n 多语言(zh-CN、zh-TW、en)
|
||
- 封装 API 请求层(统一请求拦截、Token 管理、错误处理)
|
||
- 配置页面路由(pages.json)
|
||
- _需求: 2.1, 全局_
|
||
|
||
- [x] 15.2 编写多语言属性测试
|
||
- **Property 3: i18n 翻译完整性**
|
||
- **验证: 需求 2.1, 2.3**
|
||
|
||
- [x] 16. UniApp 移动端 - 登录与用户模块
|
||
- [x] 16.1 实现登录页
|
||
- 手机号输入、区号选择器、验证码输入
|
||
- 协议勾选检查
|
||
- 调用后端登录接口,Token 存储
|
||
- _需求: 1.1, 1.2, 1.3, 1.4_
|
||
|
||
- [x] 16.2 实现我的页
|
||
- 未登录/已登录状态展示
|
||
- 积分展示、功能入口(我的积分、我的优惠券、切换语言、用户协议、隐私政策、关于)
|
||
- 赠送积分弹窗
|
||
- 退出登录弹窗
|
||
- _需求: 1.5, 1.6, 1.8, 5.3, 5.6, 5.7, 6.5, 10.1_
|
||
|
||
- [x] 16.3 实现关于页
|
||
- LOGO、版本号展示
|
||
- 注销账号弹窗和流程
|
||
- _需求: 1.7, 10.3_
|
||
|
||
- [x] 16.4 实现语言切换功能
|
||
- 多语言选择列表弹窗
|
||
- 切换后刷新所有界面文字
|
||
- _需求: 2.2, 2.3_
|
||
|
||
- [x] 17. UniApp 移动端 - 首页模块
|
||
- [x] 17.1 实现首页
|
||
- Banner 轮播组件(支持内部/外部跳转)
|
||
- 功能入口图片(成为会员、节日印花、会员二维码)
|
||
- 会员二维码弹窗(动态二维码生成与展示)
|
||
- 优惠券使用说明弹窗
|
||
- 可兑换优惠券列表和兑换弹窗
|
||
- _需求: 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 6.1, 6.2, 6.3, 6.4_
|
||
|
||
- [x] 17.2 编写首页相关属性测试
|
||
- **Property 4: Banner 跳转路由正确性**
|
||
- **Property 5: 二维码入口行为取决于会员状态**
|
||
- **Property 6: 优惠券列表渲染完整性**
|
||
- **验证: 需求 3.2, 3.5, 3.6, 3.8**
|
||
|
||
- [x] 18. UniApp 移动端 - 会员与支付模块
|
||
- [x] 18.1 实现会员页
|
||
- 会员宣传长图展示
|
||
- 单月会员/订阅会员购买按钮(根据会员状态动态显示)
|
||
- Google Pay / Apple Pay 支付调用封装
|
||
- 支付成功后页面刷新
|
||
- _需求: 4.1, 4.2, 4.3, 4.6, 4.7, 4.8, 8.1, 8.2, 8.3, 8.4, 8.6_
|
||
|
||
- [x] 19. UniApp 移动端 - 积分与优惠券模块
|
||
- [x] 19.1 实现我的积分页
|
||
- 获取记录/使用记录标签切换
|
||
- 积分记录列表展示(来源、时间、数量)
|
||
- _需求: 5.3, 5.4, 5.5_
|
||
|
||
- [x] 19.2 实现我的优惠券页
|
||
- 可使用/已使用/已过期标签切换
|
||
- 优惠券卡片组件(状态标识图标)
|
||
- _需求: 6.5, 6.6, 6.7_
|
||
|
||
- [x] 19.3 实现节日印花页
|
||
- Banner 图展示
|
||
- 印花优惠券列表
|
||
- 兑换逻辑(会员检查、已兑换状态)
|
||
- _需求: 7.1, 7.2, 7.3, 7.4, 7.5, 7.6_
|
||
|
||
- [x] 20. UniApp 移动端 - 协议与内容页面
|
||
- [x] 20.1 实现用户协议页和隐私政策页
|
||
- 从后端获取多语言内容并展示
|
||
- _需求: 10.2_
|
||
|
||
- [x] 21. 检查点 - UniApp 移动端完成
|
||
- 确保所有测试通过,如有问题请向用户确认。
|
||
|
||
- [x] 22. 集成与联调
|
||
- [x] 22.1 前后端接口联调
|
||
- UniApp 移动端与后端 API 全流程联调
|
||
- 管理后台与后端 Admin API 联调
|
||
- _需求: 全局_
|
||
|
||
- [x] 22.2 编写集成测试
|
||
- 测试完整的用户注册-登录-购买会员-获取积分-兑换优惠券流程
|
||
- 测试贩卖机扫码-锁定-支付回调-解锁完整流程
|
||
- _需求: 全局_
|
||
|
||
- [x] 23. 最终检查点
|
||
- 确保所有测试通过,如有问题请向用户确认。
|
||
|
||
## 备注
|
||
|
||
- 所有测试任务均为必选,确保代码质量
|
||
- 每个任务引用了具体的需求编号以确保可追溯性
|
||
- 检查点用于阶段性验证,确保增量开发的正确性
|
||
- 属性测试验证通用正确性属性,单元测试验证具体示例和边界情况
|
||
- 后端使用 xUnit + FsCheck 进行测试,前端使用 Vitest + fast-check 进行测试
|