# 资产分配管理API使用说明

> **版本**: v1.0.0
> **作者**: 后端API扩展组
> **创建时间**: 2025-01-24

---

## 📋 目录

1. [概述](#概述)
2. [单据类型说明](#单据类型说明)
3. [API端点](#api端点)
4. [业务流程](#业务流程)
5. [状态说明](#状态说明)
6. [错误码](#错误码)

---

## 概述

资产分配管理API提供资产分配、调拨、回收、维修分配和报废分配等功能。支持完整的审批流程和执行流程。

---

## 单据类型说明

| 类型 | 代码 | 说明 |
|------|------|------|
| 资产分配 | allocation | 从仓库分配资产给网点 |
| 资产调拨 | transfer | 网点间资产调拨 |
| 资产回收 | recovery | 从使用中回收资产 |
| 维修分配 | maintenance | 分配资产进行维修 |
| 报废分配 | scrap | 分配资产进行报废 |

---

## API端点

### 1. 获取分配单列表

**接口**: `GET /api/v1/allocation-orders`

**查询参数**:
```
skip: 跳过条数（默认0）
limit: 返回条数（默认20，最大100）
order_type: 单据类型
approval_status: 审批状态
execute_status: 执行状态
applicant_id: 申请人ID
target_organization_id: 目标网点ID
keyword: 搜索关键词
```

**响应示例**:
```json
[
  {
    "id": 1,
    "order_code": "AL202501240001",
    "order_type": "allocation",
    "title": "天河网点资产分配",
    "approval_status": "pending",
    "execute_status": "pending",
    "target_organization": {
      "id": 3,
      "org_name": "天河网点"
    },
    "applicant": {
      "id": 1,
      "real_name": "张三"
    },
    "items": [
      {
        "asset_code": "ASSET-20250124-0001",
        "asset_name": "联想台式机",
        "execute_status": "pending"
      }
    ],
    "created_at": "2025-01-24T10:00:00Z"
  }
]
```

---

### 2. 创建分配单

**接口**: `POST /api/v1/allocation-orders`

**请求体**:
```json
{
  "order_type": "allocation",
  "title": "天河网点资产分配",
  "target_organization_id": 3,
  "asset_ids": [1, 2, 3, 4, 5],
  "expect_execute_date": "2025-01-25",
  "remark": "业务需要"
}
```

**字段说明**:
- `order_type`: 单据类型（必填）
- `title`: 标题（必填）
- `source_organization_id`: 调出网点ID（调拨时必填）
- `target_organization_id`: 调入网点ID（必填）
- `asset_ids`: 资产ID列表（必填，至少1个）
- `expect_execute_date`: 预计执行日期（可选）
- `remark`: 备注（可选）

**响应**: 返回创建的分配单详情

---

### 3. 审批分配单

**接口**: `POST /api/v1/allocation-orders/{order_id}/approve`

**请求体**:
```json
{
  "approval_status": "approved",
  "approval_remark": "同意"
}
```

**字段说明**:
- `approval_status`: 审批状态（approved/rejected）
- `approval_remark`: 审批备注（可选）

**业务逻辑**:
- 审批通过后自动执行资产分配逻辑
- 更新资产状态
- 记录状态变更历史

---

### 4. 执行分配单

**接口**: `POST /api/v1/allocation-orders/{order_id}/execute`

**说明**: 手动执行已审批通过的分配单

---

### 5. 取消分配单

**接口**: `POST /api/v1/allocation-orders/{order_id}/cancel`

**说明**: 取消分配单（已完成的无法取消）

---

### 6. 获取分配单统计

**接口**: `GET /api/v1/allocation-orders/statistics`

**响应示例**:
```json
{
  "total": 100,
  "pending": 10,
  "approved": 50,
  "rejected": 20,
  "executing": 15,
  "completed": 5
}
```

---

## 业务流程

### 资产分配流程

```
1. 创建分配单（pending）
   ↓
2. 审批分配单（approved/rejected）
   ↓ (审批通过)
3. 执行分配逻辑（executing）
   ↓
4. 更新资产状态（completed）
```

### 资产调拨流程

```
1. 创建调拨单（指定调出和调入网点）
   ↓
2. 审批调拨单
   ↓
3. 执行调拨（更新资产所属网点）
   ↓
4. 完成调拨
```

---

## 状态说明

### 审批状态 (approval_status)

| 状态 | 说明 |
|------|------|
| pending | 待审批 |
| approved | 已审批 |
| rejected | 已拒绝 |
| cancelled | 已取消 |

### 执行状态 (execute_status)

| 状态 | 说明 |
|------|------|
| pending | 待执行 |
| executing | 执行中 |
| completed | 已完成 |
| cancelled | 已取消 |

### 明细执行状态 (execute_status)

| 状态 | 说明 |
|------|------|
| pending | 待执行 |
| executing | 执行中 |
| completed | 已完成 |
| failed | 执行失败 |

---

## 错误码

| 错误码 | 说明 |
|--------|------|
| 404 | 分配单不存在 |
| 400 | 资产状态不允许分配 |
| 400 | 重复审批 |
| 400 | 已完成无法取消 |
| 403 | 权限不足 |

---

## 使用示例

### Python示例

```python
import requests

BASE_URL = "http://localhost:8000/api/v1"
TOKEN = "your_access_token"

headers = {
    "Authorization": f"Bearer {TOKEN}",
    "Content-Type": "application/json"
}

# 1. 创建分配单
response = requests.post(
    f"{BASE_URL}/allocation-orders",
    json={
        "order_type": "allocation",
        "title": "天河网点资产分配",
        "target_organization_id": 3,
        "asset_ids": [1, 2, 3]
    },
    headers=headers
)
order = response.json()

# 2. 审批分配单
response = requests.post(
    f"{BASE_URL}/allocation-orders/{order['id']}/approve",
    json={
        "approval_status": "approved",
        "approval_remark": "同意"
    },
    headers=headers
)

# 3. 获取分配单列表
response = requests.get(
    f"{BASE_URL}/allocation-orders",
    params={"approval_status": "pending"},
    headers=headers
)
orders = response.json()
```

---

## 注意事项

1. **资产状态验证**: 只有"库存中"或"使用中"的资产可以分配
2. **单据状态**: 只有"待审批"状态的分配单可以更新
3. **删除限制**: 只能删除草稿、已拒绝或已取消的分配单
4. **自动执行**: 审批通过后会自动执行资产分配逻辑
5. **状态历史**: 所有状态变更都会记录在资产状态历史表中

---

**开发完成日期**: 2025-01-24
