卖家端模块实现 - xych5q/online-shop GitHub Wiki

卖家端模块实现

第 1 组 · 在线购物系统 | 完成人:王振涛 | 完成日期:2026-10-07 对应提交:f4d8821 | 代码位置:server/src/main/java/com/group1/onlineshop/

一、交付内容

文件 行数 职责
service/SellerService.java 267 登录鉴权、修改密码、工作台总览、历史列表与意向流水
service/ProductService.java 296 发布商品、冻结/解冻、交易流转、下架、失败意向处置、图片保存
controller/SellerController.java 167 12 个卖家端 REST 接口
repository/ProductRepository.java — 骨架缺失,按 IntentRepository 风格补建(未改动其他 repository)

合计 730 行。

二、12 个接口与验证结果(curl 逐条实测,全部通过)

# 接口 关键验证
1 POST /api/seller/login 正确返回 token;错误密码 401;重新登录后旧 token 失效
2 POST /api/seller/password 原密码错拒绝;新密码 <8 位拒绝;成功后 BCrypt 重编码,旧密码无法登录
3 GET /api/seller/overview 空态返回 canPublish:true;队列带 position 1..n;currentDeal/pendingFailed 不返回口令码
4 POST /api/seller/products 名称必填 ≤100 字、描述 ≤2000 字、价格 >0 两位小数;重复发布拒绝;base64 图片解码落盘
5 POST /api/seller/products/{id}/freeze 在售→冻结(frozenBy=manual);已下架拒绝;非在售拒绝
6 POST /api/seller/products/{id}/unfreeze 手动冻结可恢复在售;交易冻结拒绝手动解冻
7 POST /api/seller/products/{id}/deal 队首进入交易、商品自动冻结(frozenBy=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} 详情+意向流水;JSON 全文检查无口令码泄漏

三、关键业务规则

  • 商品四态:在售 on_sale →(手动冻结 / 交易冻结)→ 冻结 frozen → 回到在售或(下架)→ 已下架 off_shelf。
  • 进入交易即自动冻结:卖家不能挑人,只能与队首进入;商品自动置冻结且 frozenBy='auto',此时禁止手动解冻,必须先标记交易结果。
  • 标记成功:胜出意向置成功,队列剩余全部转失败并已处置,商品下架进历史,全部口令码随之失效。
  • 标记失败:当前转失败待处置;队列有人则下一位自动递补(商品保持冻结),无人则商品恢复在售。
  • 口令码脱敏:卖家端任何接口都不返回买家口令码,历史流水亦然。

四、验证方式与组长复核

  • 提交后由组长在本地执行 mvn -q package,编译通过并产出可执行 jar。
  • java -jar target/online-shop.jar 启动成功(日志出现 Started OnlineShopApplication)。
  • 接口行为抽样复核一致(未登录返回 401、空商品返回 {product:null})。

五、与其他模块的边界

  • 交易流转的正式实现位于林初俊交付的 TradeService(见 买家端模块实现);本模块通过注入调用。
  • GET /api/product 本模块曾临时实现,已按技术债 TD-3 移交 BuyerController,避免重复映射。

六、相关文档