# TakeOutMS **Repository Path**: ye-puxu/TakeOutMS ## Basic Information - **Project Name**: TakeOutMS - **Description**: 使用RM2PT构建外卖项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-11 - **Last Updated**: 2025-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实验一:软件需求分析与确认 ​ 姓名:叶普旭 学号:ZF2421119 ## 1. 实验目标 ​ 掌握需求分析与建模方法,完成基于UML的需求建模,使用RM2PT生成需求原型并验证。 ## 2. 实验系统 ​ 选取的是外卖系统(TakeOutMS)做需求分析与建模。选择外卖系统的原因是日常应用比较多,对里面的流程较为熟悉,并且功能点也很多,足够支撑本次实验。 ​ 共有四种角色,分别是**顾客**、**商家**、**配送员**和**管理员**,用户需求和系统需求如2.1所示。 ### 2.1 用户需求 1. **顾客** - 浏览附近餐厅并筛选菜品 - 提交订单并选择支付方式 - 实时追踪配送进度 - 对订单进行评价 2. **商家** - 管理菜单(上架/下架菜品) - 接收并处理订单 - 更新备餐状态 3. **配送员** - 接收系统派单 - 上报配送位置 - 标记订单完成 4. **管理员** - 处理用户投诉 - 生成销售统计报表 - 配置促销活动 ### 2.2 系统需求 - **功能需求** - 自动计算订单总价(含优惠券抵扣) - 实时推送订单状态(商家接单、骑手派送、订单完成) - 根据位置分配最近骑手 - 同步库存数量与菜单状态 - **非功能需求** - 高并发支持(同时处理1000+订单) - 支付接口响应时间≤1秒 - 系统故障后30秒内恢复缓存数据 1. **顾客** - 浏览附近餐厅并筛选菜品 - 提交订单并选择支付方式 - 实时追踪配送进度 - 对订单进行评价 2. **商家** - 管理菜单(上架/下架菜品) - 接收并处理订单 - 更新备餐状态 3. **配送员** - 接收系统派单 - 上报配送位置 - 标记订单完成 4. **管理员** - 处理用户投诉 - 生成销售统计报表 - 配置促销活动 ## 3. 需求建模 ### 3.1 结构化自然语言需求 根据需求定义为需求文档re文件,内容如下所示,[完整内容点此查看](./TakeOutMS/RequirementsDescription/TakeoutMS.re ),详细需求总结在附录中。 ``` As a Customer, I want to browse restaurants, so that select desired meals { Basic Flow { (User) 1. the Customer shall open TakeOut app. (System) 2. the System shall display nearby restaurants within two seconds. // (功能需求) (User) 3. the Customer shall filter by cuisine type. (System) 4. the System shall show filtered results with availability tags.//(功能需求) } Alternative Flow { A. At any time, Network latency : 1. System displays loading animation.// (非功能需求: 用户体验) 2. System retries data fetch silently.// (非功能需求: 可靠性) } } ... ``` ### 3.2 UML需求模型 #### 3.2.1 用例图 ![image-20250510175538180](readme.assets/image-20250510175538180.png) - 参与者:4个(Customer, RestaurantOwner, DeliveryRider, SystemAdmin) - 用例数:14个 #### 3.2.2 系统顺序图 ##### BrowseRestaurants(浏览饭店) image-20250513170649776 ##### PlaceOrders(下单) image-20250513170746275 ##### TrackDelivery(查看订单状态) image-20250513170854194 ##### RateOrders(评价订单) image-20250513170945743 ##### ManageMenu(管理界面) image-20250513171002541 ##### ProcessOrders(处理订单) image-20250513171027597 ##### AcceptOrders(接单) image-20250513171049845 ##### UpdateLocation(更新位置信息) image-20250513171110065 ##### HandleComplaints(处理投诉) image-20250513171125954 ##### GenerateReports(生成报表) image-20250513171152970 ##### CustomerLogin(顾客登录) image-20250513171211621 ##### DeliveryRiderLogin(骑手登录) image-20250513171235843 ##### RestaurantOwnerLogin(商家登录) image-20250513171247423 ##### SystemAdminLogin(管理员登录) image-20250513171340450 - 顺序图总数:14 - 系统操作总数:23 - 合约数量:23 #### 3.2.3 概念类图 ![image-20250513171823965](readme.assets/image-20250513171823965.png) image-20250513171848947 - 类数量:11 ## 4. 原型验证 使用RM2PT生成的可交互原型运行结果如下所示: ![image-20250513172721997](readme.assets/image-20250513172721997.png) ![image-20250513172924964](readme.assets/image-20250513172924964.png) ## 5. 模型规模说明 | 模型类型 | 数量 | | :--------: | :--: | | 用户需求 | 14 | | 系统需求 | 25 | | 参与者 | 4 | | 用例 | 14 | | 系统顺序图 | 14 | | 系统操作 | 23 | | OCL合约 | 23 | | 概念类 | 11 | ## 附录 ### 需求分析总结 #### 用户需求与系统需求对应关系 ##### 用户需求表(共14条) | 编号 | 用户角色 | 需求描述 | 在`.re`文件中的位置 | 对应代码段 | | :--: | :--------------------------: | :--------------------------: | :--------------------: | :----------------------------------------------------------: | | 1 | Customer | 浏览附近餐厅以选择菜品 | 第1个`As a Customer`块 | `As a Customer, I want to browse restaurants, so that select desired meals` | | 2 | Customer | 下单并接收餐品 | 第2个`As a Customer`块 | `As a Customer, I want to place orders, so that receive meals` | | 3 | Customer | 实时追踪配送状态 | 第3个`As a Customer`块 | `As a Customer, I want to track delivery, so that know meal arrival time` | | 4 | Customer | 对订单进行评分 | 第4个`As a Customer`块 | `As a Customer, I want to rate orders, so that improve service quality` | | 5 | Restaurant Owner | 管理菜单更新菜品 | 第1个`As a Restaurant Owner`块 | `As a Restaurant Owner, I want to manage menu, so that update offerings` | | 6 | Restaurant Owner | 处理客户订单 | 第2个`As a Restaurant Owner`块 | `As a Restaurant Owner, I want to process orders, so that fulfill customer requests` | | 7 | Delivery Rider | 接受配送订单 | 第1个`As a Delivery Rider`块 | `As a Delivery Rider, I want to accept orders, so that complete deliveries` | | 8 | Delivery Rider | 优化配送路线 | 第2个`As a Delivery Rider`块 | `As a Delivery Rider, I want to update location, so that optimize routes` | | 9 | System Admin | 处理用户投诉 | 第1个`As a System Admin`块 | `As a System Admin, I want to handle complaints, so that improve service` | | 10 | System Admin | 生成业务分析报告 | 第2个`As a System Admin`块 | `As a System Admin, I want to generate reports, so that analyze business` | | 11 | Customer | 用户登录系统 | 独立登录用例块 | `As a Customer, I want to login, so that access personal features` | | 12 | Restaurant Owner | 商家登录系统 | 独立登录用例块 | `As a Restaurant Owner, I want to login, so that manage business` | | 13 | Delivery Rider | 骑手登录系统 | 独立登录用例块 | `As a Delivery Rider, I want to login, so that start working` | | 14 | System Admin | 管理员登录系统 | 独立登录用例块 | `As a System Admin, I want to login, so that perform management` | --- ##### 系统需求表(共25条) | 编号 | 需求描述 | 类型(功能/非功能) | 对应代码/模型元素 | | :--: | :--------------------------: | :-----------------: | :----------------------------------------------------------: | | 1 | 2秒内显示附近餐厅列表 | 功能需求 | `(System) 2. the System shall display nearby restaurants within two seconds` | | 2 | 支持按菜系类型过滤餐厅 | 功能需求 | `(User) 3. the Customer shall filter by cuisine type` | | 3 | 订单支付成功后立即扣减库存 | 功能需求 | `(System) 5. When payment confirmed, the System shall deduct inventory immediately` | | 4 | 支付失败后500ms内回滚库存 | 非功能需求(事务一致性) | `1. System rolls back inventory changes within five hundreds ms` | | 5 | 实时显示骑手位置和ETA预估 | 功能需求 | `(System) 3. the System shall display rider real time location` | | 6 | 使用交通数据动态更新ETA | 非功能需求(准确性) | `(System) 4. the System shall estimate arrival time with traffic data` | | 7 | 评分提交后1秒内更新餐厅评分 | 非功能需求(性能) | `(System) 5. the System shall update restaurant score within one second` | | 8 | 多渠道菜单状态同步 | 非功能需求(数据一致性) | `(System) 5. the System shall sync menu status across all channels` | | 9 | 新订单200ms内通知骑手 | 非功能需求(实时性) | `(System) 6. the System shall notify rider within two hundreds ms` | | 10 | 订单分配锁定机制 | 功能需求 | `(System) 5. the System shall lock order assignment` | | 11 | 骑手离线10秒内自动重新分配订单 | 非功能需求(容错性) | `1. System reallocates order within ten seconds` | | 12 | 每30秒记录骑手GPS坐标 | 非功能需求(数据采集) | `(System) 3. the System shall record coordinates every thirty seconds` | | 13 | 紧急投诉红色标签标注 | 功能需求 | `(System) 3. the System shall highlight urgent cases with red tags` | | 14 | 分片数据库销售数据汇总 | 非功能需求(大数据处理) | `(System) 3. the System shall compile sales data from sharded databases` | | 15 | 三重登录失败锁定账户 | 非功能需求(安全性) | `1. System blocks after three attempts` | | 16 | 生物特征身份验证 | 非功能需求(安全性) | `(System) 2. the System shall validate identity via facial recognition` | | 17 | 双因素认证登录 | 非功能需求(安全性) | `(System) 2. the System shall require SMS verification code` | | 18 | 网络延迟显示加载动画 | 非功能需求(用户体验) | `1. System displays loading animation` | | 19 | 路径偏离自动重新规划 | 非功能需求(实时性) | `1. System triggers rerouting algorithm` | | 20 | 数据分页与关键指标优先 | 非功能需求(性能优化) | `1. System activates pagination mode` | | 21 | 订单准备倒计时锁定 | 功能需求 | `(System) 4. the System shall lock preparation time countdown` | | 22 | 加密渠道支付重试 | 非功能需求(安全性) | `2. System prompts retry payment with encrypted channel` | | 23 | 原料短缺自动取消订单 | 功能需求 | `1. System autocancels related orders` | | 24 | 骑手可靠性评分机制 | 非功能需求(服务质量) | `2. System deducts rider reliability score` | | 25 | 可视化数据图表生成 | 功能需求 | `(System) 5. the System shall generate visualization charts` | --- ##### 关键需求分布 ```mermaid pie title 系统需求类型分布 "功能需求" : 12 "非功能需求" : 13 "用户需求" : 14 ``` # 实验二 RM2PT自动化架构设计和详细设计 ## 任务一 选中Generate Inital MicroService Model,生成最初的划分模型: image-20250525174930729 用例图: image-20250525175336332 metric视图: image-20250525174703661 选中Generate MicroService Model,生成最后的微服务模型,目录结构如下所示: ![image-20250525175531528](readme.assets/image-20250525175531528.png) image-20250525175544364 MicroServiceModel如下图所示: ![MicroServiceModel](readme.assets/MicroServiceModel.jpg) ## 任务二 Generate Design Model后,目录结构如下图所示: image-20250525181651125 生成的类图: ![takeoutms Class Diagram](readme.assets/takeoutms Class Diagram.jpg) 生成的序列图: image-20250526164732132 ## 任务三 ### 一、设计模型(基于需求模型的分层架构设计) #### 1. 角色模块划分 | 角色 / 模块 | 核心功能点 | 非功能需求映射 | | -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | | **用户模块** | - 登录认证(密码验证、Token 生成) - 餐厅浏览与筛选 - 订单管理(下单、支付、追踪、评价) | - 登录性能:1 秒内完成验证 - 浏览性能:2 秒内加载附近餐厅 - 支付安全性:加密通道传输数据 | | **商家模块** | - 菜单管理(上下架、库存同步) - 订单处理(接单、备餐通知) | - 数据一致性:菜单状态实时同步到各渠道 - 实时性:新订单 200ms 内通知骑手 | | **骑手模块** | - 订单接单与分配锁定 - 实时位置更新与路线优化 | - 数据采集:每 30 秒记录一次坐标 - 容错性:骑手离线 10 秒内重新分配订单 | | **管理员模块** | - 投诉处理(案件分配、加密通知) - 数据报表生成(分库数据聚合) | - 安全性:投诉通知加密邮件 - 大数据处理:支持分库销售数据快速聚合 | #### 2. 核心交互流程(以 “用户浏览餐厅” 为例) ```mermaid graph LR A[用户打开App] --> B[调用地理位置接口获取坐标] B --> C[餐厅服务查询附近商家(带库存状态)] C --> D{2秒内返回结果?} D -->|是| E[展示餐厅列表+筛选栏] D -->|否| F[显示加载动画+后台重试拉取数据] E --> G[用户选择菜系筛选] G --> H[餐厅服务过滤结果并标记可预订状态] H --> I[更新页面展示] ``` #### 3. 分层架构设计 - **表现层**: - 移动端App(用户/商家/骑手界面)、管理端Web后台 - 职责:处理用户输入输出,调用业务层接口 - **业务逻辑层**: - 领域服务:用户服务、订单服务、配送服务、报表服务 - 职责:实现核心业务规则(如库存扣减、路线优化算法),校验非功能需求(如支付事务一致性) - **数据层**: - 主数据库:用户订单、商家菜单(使用分库分表应对高并发) - 缓存层:Redis存储附近餐厅列表(减少数据库压力,满足2秒响应需求) - 实时数据存储:Kafka流处理骑手位置数据 - **基础设施层**: - 认证服务:JWT令牌管理、生物识别接口(如骑手面部识别) - 消息队列:RabbitMQ异步通知库存变更、骑手接单事件 - 监控服务:APM工具追踪接口性能(如登录响应时间) ### 二、微服务架构设计(基于业务领域拆分) #### 1. 服务单元划分与职责 | 微服务名称 | 核心功能描述 | 通信方式 | 非功能需求实现 | | ------------ | ------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------ | | **用户服务** | - 处理用户注册 / 登录(支持多因子认证) - 管理用户个人信息 | RESTful API | - 登录性能:缓存 Token 减少数据库查询 - 安全性:三次错误登录锁定账号 | | **餐厅服务** | - 管理餐厅菜单、库存状态 - 提供附近餐厅查询接口(含地理位置搜索) | RESTful API | - 数据一致性:通过消息队列同步菜单状态到各渠道 - 缓存:Redis 存储热门餐厅列表 | | **订单服务** | - 订单创建、支付状态管理 - 协调库存、配送服务完成订单流程 | 消息队列(Kafka) | - 事务一致性:支付失败时通过分布式事务回滚库存 - 实时性:新订单 200ms 内推送给商家 | | **配送服务** | - 骑手接单分配、实时位置追踪 - 动态路线优化算法 | 事件总线(EventBridge) | - 数据采集:定时接收骑手坐标并存储到时序数据库 - 容错性:骑手离线自动重新分配订单 | | **库存服务** | - 管理商家菜品库存 - 处理库存扣减与回滚(如支付失败场景) | 消息队列(RabbitMQ) | - 性能:库存变更请求异步处理 - 降级方案:网络故障时使用本地缓存暂存变更 | | **报表服务** | - 聚合分库销售数据生成报表 - 提供可视化图表接口 | gRPC | - 大数据处理:使用 Spark 并行计算分库数据 - 性能优化:数据过载时启用分页和指标优先级 | | **认证服务** | - 统一身份认证中心(JWT 签发、生物识别验证) - 权限管理 | RESTful API | - 安全性:管理员二次认证(SMS + 令牌) - 高可用:多节点部署避免单点故障 | #### 2. 核心场景通信流程(以 “用户下单→库存扣减→骑手接单” 为例) ```mermaid sequenceDiagram participant User participant 订单服务 participant 库存服务 participant 配送服务 User->>订单服务: 提交订单(含菜品ID、数量) 订单服务->>库存服务: 通过RabbitMQ发送扣库存请求 库存服务->>订单服务: 返回库存扣减结果(成功/失败) 订单服务->>配送服务: 通过Kafka发送新订单事件(含商家地址、用户地址) 配送服务->>配送服务: 触发骑手分配算法(根据热力图推荐骑手) 配送服务->>User: App推送订单已接单通知 ``` #### 3. 非功能需求技术方案 | 需求类型 | 实现方式 | 对应服务 / 场景 | | -------------- | ------------------------------------------------------------ | ---------------------------- | | **性能优化** | - 餐厅列表缓存(Redis) - 报表服务分页查询 - 订单服务异步处理支付回调 | 餐厅服务、报表服务、订单服务 | | **数据一致性** | - 库存扣减使用 “最终一致性” 方案(消息队列 + 重试机制) - 菜单状态变更发布到事件总线 | 库存服务、餐厅服务 | | **实时性** | - 骑手位置数据通过 Kafka 实时流处理 - 新订单通知使用 WebSocket 长连接 | 配送服务、订单服务 | | **安全性** | - 支付接口 HTTPS 加密 - 管理员操作审计日志 - 骑手面部识别 token 加密存储 | 认证服务、订单服务、骑手模块 | | **容错性** | - 骑手离线自动触发订单重新分配(10 秒内) - 库存服务熔断机制(应对高并发) | 配送服务、库存服务 |