Java实现进度 - xych5q/online-shop GitHub Wiki
Java 正式实现进度
第 1 组 · 迭代 1 | 仓库目录:
server/(Spring Boot 3.3.4 + JDK 21 + Maven + H2) 实现依据:需求规格说明书 v1.4 的 FR-S1S10 / FR-B1B5 与第 4 节状态机;这里记录 Java 侧的实现情况。
一、分层与责任人
| 层 | 内容 | 责任人 | 状态 |
|---|---|---|---|
| 骨架 | pom.xml、application.yml、entity/、repository/、exception/、config/ |
陈星宇 | 已完成(ce56672) |
| 卖家端 | SellerService、ProductService、SellerController(12 接口,730 行) |
王振涛 | 已完成(f4d8821) |
| 买家端 | IntentService、TradeService、BuyerController(5 接口,492 行) |
林初俊 | 已完成(a42a102) |
| 单元测试 | JUnit 5 + MockMvc,18 组用例(492 行) | 林初俊 | 已完成(a42a102) |
| 前端 | static/(5 个页面文件) |
嵇宇锋 | 已完成(a4c7081) |
| 构建部署 | Maven 已通;Docker 镜像云端构建成功,容器内冒烟 44/44 通过 | 陈星宇 | 已完成 |
代码规模合计:主代码 1237 行 + 测试 492 行 = 1729 行(不含骨架)。
二、卖家端已完成内容(王振涛,2026-10-07)
代码:SellerService.java(267 行)、ProductService.java(296 行)、SellerController.java(167 行),另补建 ProductRepository.java(骨架原缺失)。
12 个接口实测结果(curl 逐条执行,全部通过):
| # | 接口 | 关键验证 |
|---|---|---|
| 1 | POST /api/seller/login |
正确返回 token;错密码 401;重新登录后旧 token 失效 |
| 2 | POST /api/seller/password |
原密码错拒绝;新密码 <8 位拒绝;成功后 BCrypt 重编码 |
| 3 | GET /api/seller/overview |
空态、队列带 position、currentDeal/pendingFailed 不返回口令码 |
| 4 | POST /api/seller/products |
名称必填 ≤100、描述 ≤2000、价格 >0;重复发布拒绝;base64 图片落盘 |
| 5 | POST /api/seller/products/{id}/freeze |
在售→手动冻结;已下架拒绝;非在售拒绝 |
| 6 | POST /api/seller/products/{id}/unfreeze |
手动冻结可恢复;交易冻结拒绝手动解冻 |
| 7 | POST /api/seller/products/{id}/deal |
队首进入交易、商品自动冻结(auto);空队列拒绝 |
| 8 | POST /api/seller/products/{id}/deal/result |
success→胜出+队列转失败+下架;fail→转失败待处置+下位递补 |
| 9 | POST /api/seller/products/{id}/offshelf |
队列剩余置失败;交易中拒绝下架 |
| 10 | POST /api/seller/intents/{id}/dispose |
requeue 沿用原码排到队尾;void 作废;重复处置拒绝 |
| 11 | GET /api/seller/history |
只查已下架、closedAt 倒序、每页 10 条 |
| 12 | GET /api/seller/history/{id} |
详情+意向流水;全文检查无口令码泄漏 |
三、买家端与交易流转已完成内容(林初俊,2026-10-07)
代码:IntentService.java(216 行)、TradeService.java(184 行)、BuyerController.java(92 行)。
5 个接口:
| # | 接口 | 关键规则 |
|---|---|---|
| 1 | GET /api/product |
买家浏览当前在售商品 |
| 2 | POST /api/intents |
生成 8 位口令码(字符集剔除 I/O/0/1),查库保证全库唯一,仅在提交响应中返回一次 |
| 3 | GET /api/intents/lookup/{code} |
返回位次与状态;进入交易时 position=null、inTransaction=true;无效或终态码 404 |
| 4 | PUT /api/intents/lookup/{code} |
只改姓名电话,submittedAt 不动 → 排队位次不变 |
| 5 | POST /api/intents/lookup/{code}/cancel |
交易中拒绝撤销;其余置 cancelled(终态留痕) |
交易流转规则(依据 需求规格说明书 第 4.1~4.3 节,未作改动):队首不可挑人、进入交易自动冻结、标记成功清队进历史、标记失败自动递补或恢复在售、重排沿用原码排到队尾。
四、单元测试(JUnit 5,组长本地复跑验证)
[INFO] Tests run: 11, Failures: 0, Errors: 0, Skipped: 0 -- in BuyerApiTest
[INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0 -- in TradeFlowTest
[INFO] Tests run: 18, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESS
18 组用例覆盖:登录鉴权与 token 失效、参数边界(价格 -1、空姓名电话)、重复发布拦截、三人入队位次 1/2/3、无效口令码 404、改电话位次不变、撤销后口令码失效、冻结态拒绝新意向、交易中禁止手动解冻、失败后自动递补、交易中撤销且自动递补、交易中撤销且队列空恢复在售、重排沿用原码且排到队尾、成功后队列转失败、历史流水不含口令码。
采用 @SpringBootTest + @AutoConfigureMockMvc 走真实 Spring MVC 流程(含统一异常处理),每个用例前清空数据保证独立。