HaniBlindBox/.kiro/specs/order-system-migration/requirements.md
2026-01-02 20:38:29 +08:00

209 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Requirements Document
## Introduction
本文档定义了将PHP订单系统迁移到.NET 8的需求规范。订单系统是抽奖盲盒平台的核心业务模块包括订单金额计算、订单创建支付、订单查询管理、仓库/盒柜管理等功能。
## Glossary
- **Order_System**: 订单系统,负责处理用户下单、支付、订单管理等业务
- **Order_Service**: 订单服务,提供订单相关的业务逻辑处理
- **Warehouse_Service**: 仓库服务,提供奖品回收、发货等功能
- **Order_Controller**: 订单控制器处理订单相关的HTTP请求
- **Warehouse_Controller**: 仓库控制器处理仓库相关的HTTP请求
- **一番赏**: 一种抽奖商品类型,有固定奖池
- **无限赏**: 一种抽奖商品类型,奖池无限
- **商城订单**: 直接购买商品的订单类型
- **盒柜**: 用户的奖品仓库,存放中奖的奖品
## Requirements
### Requirement 1: 一番赏订单金额计算
**User Story:** As a user, I want to calculate the order amount before placing an order, so that I can know the final payment amount after applying discounts.
#### Acceptance Criteria
1. WHEN a user requests order calculation with goods_id, num, prize_num, THE Order_Service SHALL return the calculated order amount
2. WHEN use_money_is is 1, THE Order_Service SHALL deduct available balance from the order total
3. WHEN use_integral_is is 1, THE Order_Service SHALL deduct available integral from the order total
4. WHEN use_money2_is is 1, THE Order_Service SHALL deduct available money2 (哈尼券) from the order total
5. WHEN a valid coupon_id is provided, THE Order_Service SHALL apply the coupon discount to the order
6. THE Order_Service SHALL return goods_info, calculation details, user_assets, and available_coupons in the response
### Requirement 2: 一番赏订单创建
**User Story:** As a user, I want to create an order and pay for it, so that I can participate in the lottery.
#### Acceptance Criteria
1. WHEN a user submits an order with valid parameters, THE Order_Service SHALL create an order record
2. WHEN the order is created successfully, THE Order_Service SHALL return order_num and payment info
3. WHEN using WeChat payment, THE Order_Service SHALL return WeChat pay parameters (appId, timeStamp, nonceStr, package, signType, paySign)
4. WHEN the order total is 0 (fully paid by balance/integral), THE Order_Service SHALL mark the order as paid immediately
5. IF the goods stock is insufficient, THEN THE Order_Service SHALL return an error message
6. IF the user exceeds purchase limits, THEN THE Order_Service SHALL return an error message
### Requirement 3: 无限赏订单金额计算
**User Story:** As a user, I want to calculate the infinite lottery order amount, so that I can know the payment details.
#### Acceptance Criteria
1. WHEN a user requests infinite order calculation, THE Order_Service SHALL return the calculated amount
2. THE Order_Service SHALL support the same discount options as regular orders (balance, integral, money2, coupon)
3. THE Order_Service SHALL validate the goods type is infinite lottery (type=2)
### Requirement 4: 无限赏订单创建
**User Story:** As a user, I want to create an infinite lottery order, so that I can participate in the infinite lottery.
#### Acceptance Criteria
1. WHEN a user submits an infinite order, THE Order_Service SHALL create the order with order_type=2
2. THE Order_Service SHALL handle the infinite lottery specific logic
3. THE Order_Service SHALL return order_num and payment info
### Requirement 5: 商城订单金额计算
**User Story:** As a user, I want to calculate the mall order amount, so that I can purchase products directly.
#### Acceptance Criteria
1. WHEN a user requests mall order calculation, THE Order_Service SHALL return the calculated amount
2. THE Order_Service SHALL support goods_num parameter for quantity
3. THE Order_Service SHALL validate the goods is available for direct purchase
### Requirement 6: 订单列表查询
**User Story:** As a user, I want to view my order list, so that I can track my purchase history.
#### Acceptance Criteria
1. WHEN a user requests order list, THE Order_Service SHALL return paginated order records
2. THE Order_Service SHALL return order details including order_num, goods_title, goods_imgurl, order_total, status, prize_num
3. THE Order_Service SHALL support pagination with page and page_size parameters
4. THE Order_Service SHALL return last_page for pagination
### Requirement 7: 订单详情查询
**User Story:** As a user, I want to view order details, so that I can see the complete order information.
#### Acceptance Criteria
1. WHEN a user requests order detail with order_num, THE Order_Service SHALL return complete order information
2. THE Order_Service SHALL return order_info, prize_list, and payment_records
3. IF the order does not exist or belong to another user, THEN THE Order_Service SHALL return an error
### Requirement 8: 抽奖结果查询(一番赏)
**User Story:** As a user, I want to view my lottery results, so that I can see what prizes I won.
#### Acceptance Criteria
1. WHEN a user requests prize order log with order_num, THE Order_Service SHALL return the prize list
2. THE Order_Service SHALL return prize details including goodslist_title, goodslist_imgurl, goodslist_price, goodslist_money, status
3. THE Order_Service SHALL return luck_no for each prize
### Requirement 9: 抽奖结果查询(无限赏)
**User Story:** As a user, I want to view my infinite lottery results, so that I can see what prizes I won.
#### Acceptance Criteria
1. WHEN a user requests infinite prize order log, THE Order_Service SHALL return the prize list
2. THE Order_Service SHALL handle infinite lottery specific prize display
### Requirement 10: 仓库首页查询
**User Story:** As a user, I want to view my warehouse (盒柜), so that I can manage my prizes.
#### Acceptance Criteria
1. WHEN a user requests warehouse index, THE Warehouse_Service SHALL return paginated prize list
2. THE Warehouse_Service SHALL support status filter (0=待选择, 1=回收, 2=发货, 3=集市)
3. THE Warehouse_Service SHALL return prize details including goodslist_title, goodslist_imgurl, goodslist_price, goodslist_money, status
### Requirement 11: 奖品回收
**User Story:** As a user, I want to recycle my prizes for balance, so that I can get money back.
#### Acceptance Criteria
1. WHEN a user requests prize recovery with order_list_ids, THE Warehouse_Service SHALL process the recovery
2. THE Warehouse_Service SHALL add the recovery amount to user's balance
3. THE Warehouse_Service SHALL update the prize status to recovered
4. THE Warehouse_Service SHALL return the total recovery amount
5. IF any prize is not eligible for recovery, THEN THE Warehouse_Service SHALL return an error
### Requirement 12: 奖品发货申请
**User Story:** As a user, I want to request delivery for my prizes, so that I can receive the physical items.
#### Acceptance Criteria
1. WHEN a user requests prize delivery with order_list_ids and address info, THE Warehouse_Service SHALL create a delivery record
2. THE Warehouse_Service SHALL validate the address information (name, mobile, address)
3. THE Warehouse_Service SHALL update the prize status to pending delivery
4. THE Warehouse_Service SHALL return the delivery_id
5. IF any prize is not eligible for delivery, THEN THE Warehouse_Service SHALL return an error
### Requirement 13: 确认发货
**User Story:** As a user, I want to confirm the delivery, so that the delivery process can proceed.
#### Acceptance Criteria
1. WHEN a user confirms delivery with id, THE Warehouse_Service SHALL update the delivery status
2. IF the delivery does not exist or belong to another user, THEN THE Warehouse_Service SHALL return an error
### Requirement 14: 发货记录查询
**User Story:** As a user, I want to view my delivery records, so that I can track my shipments.
#### Acceptance Criteria
1. WHEN a user requests delivery records, THE Warehouse_Service SHALL return paginated delivery list
2. THE Warehouse_Service SHALL return delivery details including name, mobile (masked), address, status
3. THE Warehouse_Service SHALL support pagination
### Requirement 15: 发货记录详情
**User Story:** As a user, I want to view delivery details, so that I can see the complete shipment information.
#### Acceptance Criteria
1. WHEN a user requests delivery detail with id, THE Warehouse_Service SHALL return complete delivery information
2. THE Warehouse_Service SHALL return items list and logistics information
3. IF the delivery does not exist or belong to another user, THEN THE Warehouse_Service SHALL return an error
### Requirement 16: 回收记录查询
**User Story:** As a user, I want to view my recovery records, so that I can track my recycled prizes.
#### Acceptance Criteria
1. WHEN a user requests recovery records, THE Warehouse_Service SHALL return paginated recovery list
2. THE Warehouse_Service SHALL support pagination
### Requirement 17: 物流信息查询
**User Story:** As a user, I want to view logistics information, so that I can track my package.
#### Acceptance Criteria
1. WHEN a user requests logistics info with id, THE Warehouse_Service SHALL return logistics details
2. THE Warehouse_Service SHALL return company, tracking_no, status, and traces
3. IF the delivery does not exist or belong to another user, THEN THE Warehouse_Service SHALL return an error
### Requirement 18: API响应格式兼容性
**User Story:** As a developer, I want the new API to be compatible with the existing frontend, so that the migration is seamless.
#### Acceptance Criteria
1. THE Order_Controller SHALL return responses in the same format as PHP API (status, msg, data)
2. THE Order_Controller SHALL use snake_case for JSON field names
3. THE Warehouse_Controller SHALL return responses in the same format as PHP API
4. THE Warehouse_Controller SHALL use snake_case for JSON field names