# 实现计划:贩卖机配套移动端 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) - 实现全局异常处理中间件 - 实现 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 进行测试