Files
zcglxt/backend/TRANSFER_RECOVERY_API.md

566 lines
12 KiB
Markdown
Raw Permalink 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.
# 资产调拨和回收API文档
## 目录
- [资产调拨管理](#资产调拨管理)
- [资产回收管理](#资产回收管理)
---
## 资产调拨管理
### 1. 获取调拨单列表
**GET** `/api/v1/transfers`
**查询参数:**
- `skip` (int): 跳过条数默认0
- `limit` (int): 返回条数默认20最大100
- `transfer_type` (string): 调拨类型internal=内部调拨/external=跨机构调拨)
- `approval_status` (string): 审批状态pending/approved/rejected/cancelled
- `execute_status` (string): 执行状态pending/executing/completed/cancelled
- `source_org_id` (int): 调出网点ID
- `target_org_id` (int): 调入网点ID
- `keyword` (string): 搜索关键词(单号/标题)
**响应示例:**
```json
[
{
"id": 1,
"order_code": "TO-20250124-00001",
"source_org_id": 1,
"target_org_id": 2,
"transfer_type": "external",
"title": "从总部向分公司调拨资产",
"asset_count": 5,
"apply_user_id": 1,
"apply_time": "2025-01-24T10:00:00",
"approval_status": "pending",
"execute_status": "pending",
"created_at": "2025-01-24T10:00:00"
}
]
```
---
### 2. 获取调拨单统计
**GET** `/api/v1/transfers/statistics`
**查询参数:**
- `source_org_id` (int): 调出网点ID可选
- `target_org_id` (int): 调入网点ID可选
**响应示例:**
```json
{
"total": 100,
"pending": 10,
"approved": 50,
"rejected": 5,
"executing": 15,
"completed": 20
}
```
---
### 3. 获取调拨单详情
**GET** `/api/v1/transfers/{order_id}`
**路径参数:**
- `order_id` (int): 调拨单ID
**响应示例:**
```json
{
"id": 1,
"order_code": "TO-20250124-00001",
"source_org_id": 1,
"target_org_id": 2,
"transfer_type": "external",
"title": "从总部向分公司调拨资产",
"asset_count": 5,
"apply_user_id": 1,
"apply_time": "2025-01-24T10:00:00",
"approval_status": "approved",
"approval_user_id": 2,
"approval_time": "2025-01-24T11:00:00",
"execute_status": "completed",
"execute_user_id": 3,
"execute_time": "2025-01-24T12:00:00",
"remark": "调拨备注",
"created_at": "2025-01-24T10:00:00",
"updated_at": "2025-01-24T12:00:00",
"source_organization": {
"id": 1,
"org_name": "总部",
"org_type": "headquarters"
},
"target_organization": {
"id": 2,
"org_name": "北京分公司",
"org_type": "branch"
},
"apply_user": {
"id": 1,
"real_name": "张三",
"username": "zhangsan"
},
"items": [
{
"id": 1,
"asset_id": 10,
"asset_code": "ASSET001",
"source_organization_id": 1,
"target_organization_id": 2,
"transfer_status": "completed"
}
]
}
```
---
### 4. 获取调拨单明细
**GET** `/api/v1/transfers/{order_id}/items`
**路径参数:**
- `order_id` (int): 调拨单ID
**响应示例:**
```json
[
{
"id": 1,
"order_id": 1,
"asset_id": 10,
"asset_code": "ASSET001",
"source_organization_id": 1,
"target_organization_id": 2,
"transfer_status": "completed",
"created_at": "2025-01-24T10:00:00"
}
]
```
---
### 5. 创建调拨单
**POST** `/api/v1/transfers`
**请求体:**
```json
{
"source_org_id": 1,
"target_org_id": 2,
"transfer_type": "external",
"title": "从总部向分公司调拨资产",
"asset_ids": [10, 11, 12, 13, 14],
"remark": "调拨备注"
}
```
**字段说明:**
- `source_org_id` (int, 必填): 调出网点ID
- `target_org_id` (int, 必填): 调入网点ID
- `transfer_type` (string, 必填): 调拨类型
- `internal`: 内部调拨
- `external`: 跨机构调拨
- `title` (string, 必填): 标题
- `asset_ids` (array, 必填): 资产ID列表
- `remark` (string, 可选): 备注
**响应:** 返回创建的调拨单详情
---
### 6. 更新调拨单
**PUT** `/api/v1/transfers/{order_id}`
**路径参数:**
- `order_id` (int): 调拨单ID
**请求体:**
```json
{
"title": "更新后的标题",
"remark": "更新后的备注"
}
```
**字段说明:**
- `title` (string, 可选): 标题
- `remark` (string, 可选): 备注
**响应:** 返回更新后的调拨单详情
**限制:** 只有待审批状态的调拨单可以更新
---
### 7. 审批调拨单
**POST** `/api/v1/transfers/{order_id}/approve`
**路径参数:**
- `order_id` (int): 调拨单ID
**查询参数:**
- `approval_status` (string, 必填): 审批状态approved/rejected
- `approval_remark` (string, 可选): 审批备注
**响应:** 返回审批后的调拨单详情
**限制:**
- 只有待审批状态的调拨单可以审批
- 审批通过后可以开始执行调拨
---
### 8. 开始调拨
**POST** `/api/v1/transfers/{order_id}/start`
**路径参数:**
- `order_id` (int): 调拨单ID
**响应:** 返回开始执行后的调拨单详情
**限制:**
- 必须已审批通过
- 不能重复开始
---
### 9. 完成调拨
**POST** `/api/v1/transfers/{order_id}/complete`
**路径参数:**
- `order_id` (int): 调拨单ID
**响应:** 返回完成后的调拨单详情
**功能:**
- 自动更新资产所属机构
- 自动更新资产状态
- 更新明细状态为完成
**限制:** 只有pending或executing状态的调拨单可以完成
---
### 10. 取消调拨单
**POST** `/api/v1/transfers/{order_id}/cancel`
**路径参数:**
- `order_id` (int): 调拨单ID
**响应:** 204 No Content
**限制:** 已完成的调拨单无法取消
---
### 11. 删除调拨单
**DELETE** `/api/v1/transfers/{order_id}`
**路径参数:**
- `order_id` (int): 调拨单ID
**响应:** 204 No Content
**限制:** 只能删除已拒绝或已取消的调拨单
---
## 资产回收管理
### 1. 获取回收单列表
**GET** `/api/v1/recoveries`
**查询参数:**
- `skip` (int): 跳过条数默认0
- `limit` (int): 返回条数默认20最大100
- `recovery_type` (string): 回收类型user=使用人回收/org=机构回收/scrap=报废回收)
- `approval_status` (string): 审批状态pending/approved/rejected/cancelled
- `execute_status` (string): 执行状态pending/executing/completed/cancelled
- `keyword` (string): 搜索关键词(单号/标题)
**响应示例:**
```json
[
{
"id": 1,
"order_code": "RO-20250124-00001",
"recovery_type": "user",
"title": "回收离职员工资产",
"asset_count": 3,
"apply_user_id": 1,
"apply_time": "2025-01-24T10:00:00",
"approval_status": "pending",
"execute_status": "pending",
"created_at": "2025-01-24T10:00:00"
}
]
```
---
### 2. 获取回收单统计
**GET** `/api/v1/recoveries/statistics`
**响应示例:**
```json
{
"total": 80,
"pending": 8,
"approved": 40,
"rejected": 4,
"executing": 12,
"completed": 16
}
```
---
### 3. 获取回收单详情
**GET** `/api/v1/recoveries/{order_id}`
**路径参数:**
- `order_id` (int): 回收单ID
**响应示例:**
```json
{
"id": 1,
"order_code": "RO-20250124-00001",
"recovery_type": "user",
"title": "回收离职员工资产",
"asset_count": 3,
"apply_user_id": 1,
"apply_time": "2025-01-24T10:00:00",
"approval_status": "approved",
"approval_user_id": 2,
"approval_time": "2025-01-24T11:00:00",
"execute_status": "completed",
"execute_user_id": 3,
"execute_time": "2025-01-24T12:00:00",
"remark": "回收备注",
"created_at": "2025-01-24T10:00:00",
"updated_at": "2025-01-24T12:00:00",
"apply_user": {
"id": 1,
"real_name": "张三",
"username": "zhangsan"
},
"items": [
{
"id": 1,
"asset_id": 10,
"asset_code": "ASSET001",
"recovery_status": "completed"
}
]
}
```
---
### 4. 获取回收单明细
**GET** `/api/v1/recoveries/{order_id}/items`
**路径参数:**
- `order_id` (int): 回收单ID
**响应示例:**
```json
[
{
"id": 1,
"order_id": 1,
"asset_id": 10,
"asset_code": "ASSET001",
"recovery_status": "completed",
"created_at": "2025-01-24T10:00:00"
}
]
```
---
### 5. 创建回收单
**POST** `/api/v1/recoveries`
**请求体:**
```json
{
"recovery_type": "user",
"title": "回收离职员工资产",
"asset_ids": [10, 11, 12],
"remark": "回收备注"
}
```
**字段说明:**
- `recovery_type` (string, 必填): 回收类型
- `user`: 使用人回收(从使用人处回收)
- `org`: 机构回收(从机构回收)
- `scrap`: 报废回收(报废资产回收)
- `title` (string, 必填): 标题
- `asset_ids` (array, 必填): 资产ID列表
- `remark` (string, 可选): 备注
**响应:** 返回创建的回收单详情
---
### 6. 更新回收单
**PUT** `/api/v1/recoveries/{order_id}`
**路径参数:**
- `order_id` (int): 回收单ID
**请求体:**
```json
{
"title": "更新后的标题",
"remark": "更新后的备注"
}
```
**字段说明:**
- `title` (string, 可选): 标题
- `remark` (string, 可选): 备注
**响应:** 返回更新后的回收单详情
**限制:** 只有待审批状态的回收单可以更新
---
### 7. 审批回收单
**POST** `/api/v1/recoveries/{order_id}/approve`
**路径参数:**
- `order_id` (int): 回收单ID
**查询参数:**
- `approval_status` (string, 必填): 审批状态approved/rejected
- `approval_remark` (string, 可选): 审批备注
**响应:** 返回审批后的回收单详情
**限制:**
- 只有待审批状态的回收单可以审批
- 审批通过后可以开始执行回收
---
### 8. 开始回收
**POST** `/api/v1/recoveries/{order_id}/start`
**路径参数:**
- `order_id` (int): 回收单ID
**响应:** 返回开始执行后的回收单详情
**限制:**
- 必须已审批通过
- 不能重复开始
---
### 9. 完成回收
**POST** `/api/v1/recoveries/{order_id}/complete`
**路径参数:**
- `order_id` (int): 回收单ID
**响应:** 返回完成后的回收单详情
**功能:**
- 自动更新资产状态为in_stock普通回收或scrapped报废回收
- 自动记录资产状态历史
- 更新明细状态为完成
**限制:** 只有pending或executing状态的回收单可以完成
---
### 10. 取消回收单
**POST** `/api/v1/recoveries/{order_id}/cancel`
**路径参数:**
- `order_id` (int): 回收单ID
**响应:** 204 No Content
**限制:** 已完成的回收单无法取消
---
### 11. 删除回收单
**DELETE** `/api/v1/recoveries/{order_id}`
**路径参数:**
- `order_id` (int): 回收单ID
**响应:** 204 No Content
**限制:** 只能删除已拒绝或已取消的回收单
---
## 业务流程说明
### 调拨流程
1. **创建调拨单**:选择调出/调入机构和资产
2. **审批调拨单**:管理员审批(通过/拒绝)
3. **开始调拨**:开始执行调拨操作
4. **完成调拨**
- 自动更新资产所属机构
- 自动更新资产状态
- 记录状态历史
### 回收流程
1. **创建回收单**:选择回收类型和资产
2. **审批回收单**:管理员审批(通过/拒绝)
3. **开始回收**:开始执行回收操作
4. **完成回收**
- 普通回收资产状态变为in_stock
- 报废回收资产状态变为scrapped
- 记录状态历史
### 状态说明
#### 调拨类型
- `internal`: 内部调拨(同一组织内调拨)
- `external`: 跨机构调拨(不同组织间调拨)
#### 回收类型
- `user`: 使用人回收(从使用人处回收资产)
- `org`: 机构回收(从机构回收资产)
- `scrap`: 报废回收(报废并回收资产)
#### 审批状态
- `pending`: 待审批
- `approved`: 已审批通过
- `rejected`: 已拒绝
- `cancelled`: 已取消
#### 执行状态
- `pending`: 待执行
- `executing`: 执行中
- `completed`: 已完成
- `cancelled`: 已取消
#### 调拨明细状态
- `pending`: 待调拨
- `transferring`: 调拨中
- `completed`: 已完成
- `failed`: 失败
#### 回收明细状态
- `pending`: 待回收
- `recovering`: 回收中
- `completed`: 已完成
- `failed`: 失败