# EEEEEEEEE **Repository Path**: chen-wenfa/eeeeeeeee ## Basic Information - **Project Name**: EEEEEEEEE - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-01 - **Last Updated**: 2026-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 轻量级外卖服务平台(仿饿了么)· 阶段1 软件工程综合实践课程项目(26271 学期)。实现用户、商家、店铺、商品、购物车、订单六大模块的完整 RESTful 后端 + Vue3 前端 + 数据库脚本 + TDD 测试文档,测试通过率 100%。 ## 技术栈 | 层 | 技术 | |---|---| | 后端 | Spring Boot 2.7.18 · MyBatis-Plus 3.5.3.1 · JWT 鉴权 · JUnit5 + MockMvc(TDD) | | 前端 | Vue3 · Vite 5 · Element Plus · Pinia · Vue Router · Axios | | 数据库 | MySQL 8(生产)/ H2 内存库(测试与演示,本机无 MySQL 也可运行) | | 覆盖率 | JaCoCo(行 97.4%、分支 90%、方法 100%) | ## 目录结构 ``` main/ ├── backend/ # Spring Boot 后端(四层架构:Entity/Mapper/Service/Controller) │ ├── src/main/ # 业务代码 + application.yml(MySQL)/ application-h2.yml(H2演示) │ ├── src/test/ # 12 个测试类(135 用例)+ H2 测试库脚本 │ └── pom.xml ├── frontend/ # Vue3 前端(8 个页面,vite 代理 /api → 8080) ├── sql/takeout.sql # MySQL 8 建库建表 + 种子数据 ├── docs/ # 数据库设计文档 / 项目说明文档 / TDD 测试报告 └── README.md # 本文件 ``` ## 环境要求 - **JDK 8**(推荐 8u504+,本仓库使用 `takeout/jdk8/jdk8u504-b01`,含新证书库) - **Maven 3.8+**(`takeout/apache-maven-3.8.8`) - **Node.js 18+**(推荐 v22,`takeout/nodejs/node-v22.23.2-win-x64`) - MySQL 8(可选,仅生产 profile 需要;无 MySQL 可用 H2 演示) ## 快速启动 ### 1. 启动后端(H2 内存库演示,无需 MySQL) ```powershell cd main\backend mvn spring-boot:run "-Dspring-boot.run.profiles=h2" ``` > 说明:`-Dspring-boot.run.profiles=h2` 必须加引号,否则 PowerShell 会把参数拆开报 `Unknown lifecycle phase`。也可以改用环境变量:`$env:SPRING_PROFILES_ACTIVE = "h2"; mvn spring-boot:run` 启动成功标志:日志出现 `Started TakeoutApplication`,后端监听 **8080**。 ### 2. 启动前端 ```powershell cd main\frontend npm install # 首次或依赖有变化时 npm run dev ``` 浏览器打开 **http://localhost:5173**,已配置 `/api` 代理到 8080。 ### 3. 使用 MySQL(生产 profile) ```sql -- 先执行 sql/takeout.sql 建库建表并导入种子数据 mysql -uroot -p < sql/takeout.sql ``` ```powershell cd main\backend mvn spring-boot:run # 默认 dev 配置连本机 MySQL(root/root,库 takeout) ``` ## 演示账号 | 角色 | 用户名 | 密码 | 说明 | |---|---|---|---| | 商家 | `m001` | `123456` | 拥有店铺"老王快餐(学院路店)",可开店/管分类/管商品 | | 用户 | 自行注册 | - | 游客可浏览店铺与商品,登录后可加购、下单、取消订单 | ## 测试(TDD 证据) ```powershell cd main\backend mvn clean test ``` - **135 个用例全部通过(0 失败 / 0 错误 / 0 跳过)**,通过率 100% - 覆盖:服务层 75 用例(正常/异常/边界/越权/角色/库存/状态机/参数)+ 接口层 60 用例(HTTP 状态码/统一响应体/鉴权白名单/角色隔离) - 覆盖率报告:`backend/target/site/jacoco/index.html` - TDD 流程:**先提交测试(红)→ 开发实现(绿)→ 修复跑绿**,Git 历史可查证: ``` 1743461 test: 阶段1 TDD红阶段 - 先提交全部核心测试用例 7dc49fd feat: 阶段1 TDD绿阶段 - 业务实现使测试通过 7b26167 fix: 阶段1测试修复(H2编码/事务隔离/越权语义/可选鉴权,全量跑绿) 22c0154 docs: TDD测试报告校准为实测135用例与覆盖率 5534df4 fix: H2驱动改为runtime scope,h2 profile可正常启动演示 ``` ## 接口规范(部分) 统一响应体 `Result{code, msg, data}`,成功 `code=0`;接口前缀 `/api/v1`;RESTful 方法(GET 查询 / POST 创建 / PATCH 局部更新 / DELETE 删除)。 | 模块 | 示例接口 | |---|---| | 用户 | `POST /api/v1/users/register` · `POST /api/v1/users/login` · `GET/PATCH /api/v1/users/me` | | 商家 | `POST /api/v1/merchants/register` · `POST /api/v1/merchants/login` · `GET /api/v1/merchants/me` | | 店铺 | `GET /api/v1/shops` · `POST /api/v1/shops` · `PATCH /api/v1/shops/{id}/status` | | 商品 | `GET /api/v1/shops/{shopId}/products`(商家加 `?includeOffShelf=true`)· `POST/PATCH/DELETE /api/v1/shops/{shopId}/products[/{productId}]` | | 购物车 | `GET/POST/PATCH/DELETE /api/v1/cart`(用户) | | 订单 | `POST /api/v1/orders` · `GET /api/v1/orders[/{id}]` · `POST /api/v1/orders/{id}/cancel` | 完整接口表见 `docs/项目说明文档.md`。 ## 常见问题(FAQ) **1. `mvn` 不是内部或外部命令** Maven 未加入 PATH。本项目自带 Maven(`takeout/apache-maven-3.8.8`),可用完整路径调用,或把该目录 `bin` 加入环境变量。 **2. `mvn spring-boot:run -Dspring-boot.run.profiles=h2` 报 Unknown lifecycle phase** PowerShell 解析问题。给参数加引号:`mvn spring-boot:run "-Dspring-boot.run.profiles=h2"`。 **3. 启动报 `Cannot load driver class: org.h2.Driver`** H2 驱动必须是 `runtime` scope(本项目已修复)。若本地 pom 被改回 `test` scope 会复现。 **4. `npm` 不是内部或外部命令** 系统未安装 Node.js。本项目自带 Node(`takeout/nodejs/node-v22.23.2-win-x64`),把该目录加入 PATH;或安装 Node 18+。 **5. `npm : 无法加载文件 ... npm.ps1,因为在此系统上禁止运行脚本`** PowerShell 执行策略限制。执行 `Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned` 后重试;或改用 `npm.cmd run dev`。 **6. 8080 端口被占用** 后端启动失败常见原因。`netstat -ano | findstr 8080` 查看占用进程并结束,或改用其他端口。 **7. 页面接口报 401/403** 登录态过期或角色不匹配。重新登录;用户 token 不能操作商家接口,反之亦然。 ## 文档索引 - `docs/数据库设计文档.md` — 8 张表 ER 图、字段说明、设计要点 - `docs/项目说明文档.md` — 架构设计、完整接口表、运行方式、AI 辅助记录、阶段2 扩展预留 - `docs/TDD测试报告.md` — TDD 流程记录、用例矩阵、边界覆盖清单、执行结果