forked from erp-dev/erp
feat: big version, added tasks for backup_database and stock change, added health check api, approve sse (support channel via merchant)
This commit is contained in:
76
docs/business_purchase.md
Normal file
76
docs/business_purchase.md
Normal file
@@ -0,0 +1,76 @@
|
||||
# Business 模块采购单 API
|
||||
|
||||
## 创建采购单并触发入库
|
||||
|
||||
- **URL**: `POST /api/v1/purchase-orders/`
|
||||
- **权限**: 需要登录且具备员工身份
|
||||
- **描述**: 创建业务模块的 `PurchaseOrder`,并异步触发库存入库任务(通过 `stock.services.StockFlowService.stock_in` 实现)。
|
||||
|
||||
### 请求体
|
||||
|
||||
```json
|
||||
{
|
||||
"supplier": 1,
|
||||
"warehouse": 2,
|
||||
"order_date": "2025-11-26",
|
||||
"total_amount": "1200.50",
|
||||
"remarks": "测试采购单",
|
||||
"items": [
|
||||
{
|
||||
"product_id": 10,
|
||||
"quantities": ["10.5", "6.0"]
|
||||
},
|
||||
{
|
||||
"product_id": 18,
|
||||
"quantities": ["3.25"]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| supplier | integer | ✅ | 供应商 ID,必须隶属于当前商户 |
|
||||
| warehouse | integer | ✅ | 入库仓库 ID |
|
||||
| order_date | string (date) | ✅ | 订单日期(`YYYY-MM-DD`) |
|
||||
| total_amount | string/number | ✅ | 采购总金额 |
|
||||
| remarks | string | 否 | 备注 |
|
||||
| items | array | ✅ | 入库明细,结构需满足 `StockFlowService` 的要求(目前仅支持严谨模式:product_id + quantities) |
|
||||
|
||||
> `items` 内部字段会被直接传给 `StockFlowService`,因此:
|
||||
> - 严谨/严进模式:`{'product_id': 1, 'quantities': ['10', '5']}`
|
||||
> - 宽松模式/严进严出出库暂未开放,后续按需扩展。
|
||||
|
||||
### 响应
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 35,
|
||||
"message": "采购单创建成功,入库任务已排队"
|
||||
}
|
||||
```
|
||||
|
||||
创建成功即刻返回,实际入库明细由后台 Celery 任务生成,可在日志或 `stock_change` 记录中查看。
|
||||
|
||||
### 错误示例
|
||||
|
||||
| 状态码 | 示例 | 说明 |
|
||||
|--------|------|------|
|
||||
| 400 | `{"error": "缺少供应商 ID"}` | 请求缺失关键字段 |
|
||||
| 400 | `{"error": "供应商 99 不存在"}` | 提供的供应商不属于当前商户 |
|
||||
| 403 | `{"error": "无权限访问"}` | 当前用户无员工信息 |
|
||||
|
||||
### 关联任务(business/tasks.py)
|
||||
|
||||
`create_purchase_order_stock_entries` 任务会接收 `purchase_order_id`、`warehouse_id`、`items` 等信息,并通过 `StockFlowService.stock_in` 创建入库记录。
|
||||
|
||||
- 任务日志示例:`采购单 35 入库任务完成`
|
||||
- 返回 payload 包含 `stock_change_record_id`、`created_details_count`
|
||||
|
||||
### 测试
|
||||
|
||||
`api_v1/tests.py` 中新增 `PurchaseOrderAPITestCase`,通过 eager Celery 设置验证:
|
||||
|
||||
1. API 请求返回 201
|
||||
2. Celery 任务被成功调用(patch `create_purchase_order_stock_entries.delay` 断言参数)
|
||||
|
||||
Reference in New Issue
Block a user