1
0
forked from erp-dev/erp
Files
erpnew/docs/business_purchase.md

2.4 KiB
Raw Blame History

Business 模块采购单 API

创建采购单并触发入库

  • URL: POST /api/v1/purchase-orders/
  • 权限: 需要登录且具备员工身份
  • 描述: 创建业务模块的 PurchaseOrder,并异步触发库存入库任务(通过 stock.services.StockFlowService.stock_in 实现)。

请求体

{
  "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']}
  • 宽松模式/严进严出出库暂未开放,后续按需扩展。

响应

{
  "id": 35,
  "message": "采购单创建成功,入库任务已排队"
}

创建成功即刻返回,实际入库明细由后台 Celery 任务生成,可在日志或 stock_change 记录中查看。

错误示例

状态码 示例 说明
400 {"error": "缺少供应商 ID"} 请求缺失关键字段
400 {"error": "供应商 99 不存在"} 提供的供应商不属于当前商户
403 {"error": "无权限访问"} 当前用户无员工信息

关联任务business/tasks.py

create_purchase_order_stock_entries 任务会接收 purchase_order_idwarehouse_iditems 等信息,并通过 StockFlowService.stock_in 创建入库记录。

  • 任务日志示例:采购单 35 入库任务完成
  • 返回 payload 包含 stock_change_record_idcreated_details_count

测试

api_v1/tests.py 中新增 PurchaseOrderAPITestCase,通过 eager Celery 设置验证:

  1. API 请求返回 201
  2. Celery 任务被成功调用patch create_purchase_order_stock_entries.delay 断言参数)