# Assethub

> 资产管理系统AI助手(openclaw技能)。用于资产查询、维修报修、盘点管理、折旧计算等资产全生命周期管理

- Skill: `leoyeai-openclaw-master-skills/assethub` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add leoyeai-openclaw-master-skills/assethub`
- Raw SKILL.md: https://api.skillmd.com/api/skills/leoyeai-openclaw-master-skills/assethub/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: LeoYeAI (https://skillmd.com/u/leoyeai-openclaw-master-skills)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/leoyeai-openclaw-master-skills/assethub

---


# AssetHub 资产管理系统 API 技能

> ⚠️ 安全提示：请勿在配置文件中存储明文密码，建议使用环境变量或运行时输入

**配置文件**: `~/.assethub/config.json`

资产管理系统 API 助手，支持资产查询、维修报修、盘点管理等。

**Base URL**: `http://160ttth72797.vicp.fun:59745/api`
**认证**: 动态 Token (每次调用自动获取)

---

## v4.0 新特性

- ✅ 每次调用自动获取 Token (安全)
- ✅ 支持配置文件多租户切换
- ✅ 数据缓存减少 API 调用
- ✅ 自动重试机制
- ✅ 交互式 REPL 模式

## v4.1 新增

- ✅ 支持获取全量数据（分页自动遍历）
- ✅ 默认 pageSize 改为 1000

## v4.2 新增

- ✅ 未配置密码时，交互式提示输入用户名/密码/租户ID

---

## 快速开始

### 方式一: 交互式模式 (推荐)

```bash
ASSETHUB_PASS=密码 python query.py -i
```

### 方式二: 命令行

```bash
ASSETHUB_PASS=密码 python query.py stats
```

### 方式三: 配置文件

创建 `~/.assethub/config.json`:

```json
{
    "base_url": "http://160ttth72797.vicp.fun:59745/api",
    "tenant_id": "2",
    "username": "su",
    "password": "你的密码",
    "token_cache_seconds": 300,
    "cache_ttl": 60,
    "max_retries": 3
}
```

### 环境变量 (优先级最高)

```bash
export ASSETHUB_URL=http://160ttth72797.vicp.fun:59745/api
export ASSETHUB_TENANT=2
export ASSETHUB_USER=su
export ASSETHUB_PASS=密码
```

---

## 常用查询

### 查询资产列表

```bash
# 查询所有资产 (前300条)
curl -s "http://160ttth72797.vicp.fun:59745/api/assets?page=1&pageSize=300" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

**筛选参数:**
- `keyword` - 关键词搜索
- `department` / `department_new` - 部门筛选
- `status` - 资产状态（在用/闲置/维修/报废）
- `category_id` - 资产分类ID
- `location` - 存放地点

```bash
# 查询手术室资产
curl -s "http://160ttth72797.vicp.fun:59745/api/assets?page=1&pageSize=300" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" | jq '.data.list[] | select(.department_new | contains("手术室"))'

# 查询在用资产
curl -s "http://160ttth72797.vicp.fun:59745/api/assets?page=1&pageSize=300&status=在用" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 查询单个资产详情

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/assets/{id}" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

---

## 维修管理

### 查询维修申请

```bash
# 所有维修申请
curl -s "http://160ttth72797.vicp.fun:59745/api/maintenance/requests?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"

# 按状态筛选
curl -s "http://160ttth72797.vicp.fun:59745/api/maintenance/requests?status=待审批" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 创建维修申请

```bash
curl -X POST http://160ttth72797.vicp.fun:59745/api/maintenance/requests \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" \
  -H "Content-Type: application/json" \
  -d '{
    "asset_code": "资产编码",
    "fault_description": "故障描述",
    "fault_level": "一般/紧急/严重",
    "request_person": "报修人",
    "department": "报修部门"
  }'
```

### 查询维修工单

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/maintenance/workorders?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 查询维修日志

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/maintenance/logs?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

---

## 部门与用户

### 查询部门列表

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/departments" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 查询用户列表

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/users?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

---

## 盘点管理

### 查询盘点任务

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/inventory?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

---

## 采购管理

### 查询采购申请

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/procurement/requests?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

---

## 折旧管理

### 查询折旧明细

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/asset-depreciation/depreciation?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

---

## 创建报修申请

### 创建维修申请

⚠️ **注意**: 创建维修申请是高风险操作，需要：
1. 添加 `Idempotency-Key` 请求头
2. 二次确认（系统返回 confirmToken 后再确认一次）

```bash
# 第一次请求 (获取确认token)
IDEMPOTENCY_KEY=$(openssl rand -hex 16)

RESP=$(curl -s -X POST http://160ttth72797.vicp.fun:59745/api/maintenance/requests \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -d '{
    "asset_code": "资产编码",
    "asset_name": "资产名称",
    "fault_description": "故障描述",
    "fault_level": "一般",
    "request_person": "报修人",
    "department": "部门"
  }')

# 如果返回 requiresConfirmation=true，则需要二次确认
CONFIRM_TOKEN=$(echo $RESP | jq -r '.confirmToken')

curl -X POST http://160ttth72797.vicp.fun:59745/api/maintenance/requests \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -H "X-Risk-Confirm-Token: $CONFIRM_TOKEN" \
  -d '{
    "asset_code": "资产编码",
    "asset_name": "资产名称",
    "fault_description": "故障描述",
    "fault_level": "一般",
    "request_person": "报修人",
    "department": "部门"
  }'
```

**fault_level 可选值:** 一般、紧急、严重

---

## 资产盘点

### 查询盘点任务

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/inventory?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 创建盘点任务

```bash
curl -X POST http://160ttth72797.vicp.fun:59745/api/inventory \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" \
  -H "Content-Type: application/json" \
  -d '{
    "plan_name": "2026年3月手术室盘点",
    "planned_date": "2026-03-25",
    "department": "手术室（崇山）"
  }'
```

---

## 采购申请

### 创建采购申请

```bash
curl -X POST http://160ttth72797.vicp.fun:59745/api/procurement/requests \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" \
  -H "Content-Type: application/json" \
  -d '{
    "asset_name": "新资产名称",
    "specification": "规格型号",
    "quantity": 1,
    "estimated_price": 50000,
    "purpose": "采购用途",
    "department": "申请部门",
    "applicant": "申请人"
  }'
```

---

## 资产调拨

### 查询调拨申请

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/transfer?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 创建调拨申请

```bash
curl -X POST http://160ttth72797.vicp.fun:59745/api/transfer \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" \
  -H "Content-Type: application/json" \
  -d '{
    "asset_code": "资产编码",
    "from_department": "调出部门",
    "to_department": "调入部门",
    "transfer_reason": "调拨原因"
  }'
```

---

## 资产报废

### 查询报废申请

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/scrapping?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 创建报废申请

```bash
curl -X POST http://160ttth72797.vicp.fun:59745/api/scrapping \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" \
  -H "Content-Type: application/json" \
  -d '{
    "asset_code": "资产编码",
    "asset_name": "资产名称",
    "scrapping_reason": "报废原因",
    "estimated_value": 0,
    "applicant": "申请人"
  }'
```

---

## 资产定位

### 查询资产位置

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/asset-location/assets/{assetCode}/location" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 更新资产位置

```bash
curl -X POST http://160ttth72797.vicp.fun:59745/api/asset-location/assets/{assetCode}/location \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" \
  -H "Content-Type: application/json" \
  -d '{
    "building_name": "5号楼",
    "room_number": "401",
    "floor": "4"
  }'
```

---

## 常用查询示例

### 按部门统计资产

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/assets?page=1&pageSize=300" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" | jq '
  [.data.list[].department_new] | group_by(.) | map({department: .[0], count: length}) | sort_by(.count) | reverse
'
```

### 资产价值汇总

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/assets?page=1&pageSize=300" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" | jq '
  [.data.list[] | select(.purchase_price != null) | .purchase_price | tonumber] | add
'
```

### 查询高价值资产 (TOP 10)

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/assets?page=1&pageSize=300" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" | jq '
  .data.list | sort_by(.purchase_price | tonumber) | reverse | .[0:10] | .[] | {name: .asset_name, price: .purchase_price, dept: .department_new}
'
```

---

## 常见问题

### Q: 登录失败提示"登录尝试过于频繁"
A: API 有频率限制，等待5分钟后重试。

### Q: 如何查看资产分类?
A: 查询资产时返回的 `category_name` 字段即为分类名称。

### Q: 资产状态有哪些?
A: 在用、闲置、维修、报废、调配中

---

---

## 预防性维护

### 查询维护计划

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/maintenance/plans?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 查询维护模板

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/maintenance/templates?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 查询维修费用

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/maintenance/costs?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

### 查询维修统计

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/maintenance/analytics" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

---

## 资产分类

### 查询资产分类

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/asset-categories" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

---

## 资产标签

### 打印资产标签

```bash
curl -X POST http://160ttth72797.vicp.fun:59745/api/asset-labels/print \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2" \
  -H "Content-Type: application/json" \
  -d '{
    "asset_codes": ["资产编码1", "资产编码2"],
    "printer": "打印机名称"
  }'
```

---

## 资产验收

### 查询验收记录

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/acceptance?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

---

## 计量检定

### 查询计量记录

```bash
curl -s "http://160ttth72797.vicp.fun:59745/api/quality-control/metrology?page=1&pageSize=50" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Tenant-ID: 2"
```

---

## 完整 API 模块列表

| 模块 | 路径 | 接口数 |
|------|------|--------|
| 资产 | `/assets` | 16 |
| 维修维护 | `/maintenance` | 92 |
| 采购管理 | `/procurement` | 11 |
| 部门 | `/departments` | 6 |
| 用户 | `/users` | 15 |
| 盘点 | `/inventory` | 18 |
| 资产定位 | `/asset-location` | 13 |
| 物联网 | `/iot` | 48 |
| 技术资料 | `/technical-documents` | 59 |
| 质量控制 | `/quality-control` | 30 |
| 折旧 | `/asset-depreciation` | 10 |
| 权限 | `/roles-permissions` | 18 |
| 验收 | `/acceptance` | 12 |
| 调拨 | `/transfer` | 7 |
| 报废 | `/scrapping` | 11 |
| 资产分类 | `/asset-categories` | 6 |
| 资产标签 | `/asset-labels` | 5 |

---

**完整 API 文档**: `memory/assethub_api.md` (688个接口)
**快速索引**: `memory/assethub_api_index.md`

---

## 快速查询命令 (v2.0)

使用 `scripts/query.py` 快速查询:

```bash
# 仪表盘
python3 scripts/assethub/query.py dashboard

# 资产查询
python3 scripts/assethub/query.py assets 手术室
python3 scripts/assethub/query.py asset <资产ID>

# 维修管理
python3 scripts/assethub/query.py repair
python3 scripts/assethub/query.py workorder
python3 scripts/assethub/query.py plans
python3 scripts/assethub/query.py costs

# 统计报表
python3 scripts/assethub/query.py stats
python3 scripts/assethub/query.py stats-by-dept
python3 scripts/assethub/query.py stats-by-category
python3 scripts/assethub/query.py stats-by-status
python3 scripts/assethub/query.py stats-value
python3 scripts/assethub/query.py stats-age

# 专项查询
python3 scripts/assethub/query.py top 20
python3 scripts/assethub/query.py idle-assets
python3 scripts/assethub/query.py expiring-warranty 30
python3 scripts/assethub/query.py repair-trend
python3 scripts/assethub/query.py repair-by-dept

# 部门资产
python3 scripts/assethub/query.py dept-assets 手术室
```

---

## 完整命令列表

| 命令 | 说明 |
|------|------|
| dashboard | 仪表盘视图 |
| assets [关键词] | 资产列表 |
| asset \<id\> | 资产详情 |
| repair | 维修申请 |
| workorder | 维修工单 |
| plans | 维护计划 |
| costs | 维修费用 |
| department / dept | 部门列表 |
| dept-assets \<部门\> | 某部门资产 |
| categories | 资产分类统计 |
| inventory | 盘点任务 |
| procurement | 采购申请 |
| transfer | 调拨申请 |
| scrapping | 报废申请 |
| location \<编码\> | 资产位置 |
| acceptance | 验收记录 |
| metrology | 计量记录 |
| stats | 综合统计 |
| stats-by-dept | 按部门统计 |
| stats-by-category | 按分类统计 |
| stats-by-status | 按状态统计 |
| stats-value | 价值分布 |
| stats-age | 年限分布 |
| top [n] | 高价值资产 |
| idle-assets | 闲置资产 |
| expiring-warranty [天] | 即将过保 |
| repair-trend | 维修趋势 |
| repair-by-dept | 部门维修统计 |
| help | 帮助 |

---

**技能版本**: 2.0
**最后更新**: 2026-03-21

---

## 高级分析命令 (v3.0)

```bash
# 全面分析
python3 scripts/assethub/query.py analysis-full
python3 scripts/assethub/query.py analysis-dept 手术室
python3 scripts/assethub/query.py analysis-repair
python3 scripts/assethub/query.py analysis-warranty
python3 scripts/assethub/query.py analysis-depreciation

# 导出功能
python3 scripts/assethub/query.py export-csv
python3 scripts/assethub/query.py export-summary

# 工具
python3 scripts/assethub/query.py validate
python3 scripts/assethub/query.py dashboard
```

---

## 完整命令列表 (v3.0)

| 分类 | 命令 | 说明 |
|------|------|------|
| **查询** | assets [关键词] | 资产列表 |
| | asset \<id\> | 资产详情 |
| | repair | 维修申请 |
| | workorder | 维修工单 |
| | plans | 维护计划 |
| | costs | 维修费用 |
| | department / dept | 部门列表 |
| | dept-assets \<部门\> | 部门资产 |
| | inventory | 盘点任务 |
| | procurement | 采购申请 |
| | transfer | 调拨申请 |
| | scrapping | 报废申请 |
| | location \<编码\> | 资产位置 |
| | acceptance | 验收记录 |
| | metrology | 计量记录 |
| **统计** | stats | 综合统计 |
| | stats-by-dept | 按部门统计 |
| | stats-by-category | 按分类统计 |
| | stats-by-status | 按状态统计 |
| | stats-value | 价值分布 |
| | stats-age | 年限分布 |
| | top [n] | 高价值资产 |
| | idle-assets | 闲置资产 |
| | expiring-warranty [天] | 即将过保 |
| | repair-trend | 维修趋势 |
| | repair-by-dept | 部门维修 |
| **分析** | analysis-full | 全面分析报告 |
| | analysis-dept \<部门\> | 部门资产分析 |
| | analysis-repair | 维修深度分析 |
| | analysis-warranty | 保修分析 |
| | analysis-depreciation | 折旧分析 |
| **导出** | export-csv | 导出CSV |
| | export-summary | 导出汇总报表 |
| **工具** | dashboard | 仪表盘 |
| | validate | 验证API |
| | help | 帮助 |

---

**技能版本**: 3.0
**代码行数**: 454
**最后更新**: 2026-03-21

---

## 提醒与报表功能 (v3.1)

```bash
# 提醒功能
python3 scripts/assethub/query.py warranty-reminder    # 保修到期提醒
python3 scripts/assethub/query.py idle-reminder       # 闲置资产提醒
python3 scripts/assethub/query.py pending-reminder   # 待审批维修提醒
python3 scripts/assethub/query.py daily-summary       # 每日汇总报告

# 详细报表
python3 scripts/assethub/query.py report-dept        # 部门详细报表
python3 scripts/assethub/query.py report-category     # 分类详细报表
```

---

## 完整命令列表 (v3.1)

| 分类 | 命令 | 说明 |
|------|------|------|
| **查询** | assets [关键词] | 资产列表 |
| | asset \<id\> | 资产详情 |
| | repair | 维修申请 |
| | workorder | 维修工单 |
| | plans | 维护计划 |
| | costs | 维修费用 |
| | department / dept | 部门列表 |
| | dept-assets \<部门\> | 部门资产 |
| | inventory | 盘点任务 |
| | procurement | 采购申请 |
| | transfer | 调拨申请 |
| | scrapping | 报废申请 |
| | location \<编码\> | 资产位置 |
| | acceptance | 验收记录 |
| | metrology | 计量记录 |
| **统计** | stats | 综合统计 |
| | stats-by-dept | 按部门统计 |
| | stats-by-category | 按分类统计 |
| | stats-by-status | 按状态统计 |
| | stats-value | 价值分布 |
| | stats-age | 年限分布 |
| | top [n] | 高价值资产 |
| | idle-assets | 闲置资产 |
| | expiring-warranty [天] | 即将过保 |
| | repair-trend | 维修趋势 |
| | repair-by-dept | 部门维修 |
| **分析** | analysis-full | 全面分析报告 |
| | analysis-dept \<部门\> | 部门资产分析 |
| | analysis-repair | 维修深度分析 |
| | analysis-warranty | 保修分析 |
| | analysis-depreciation | 折旧分析 |
| **导出** | export-csv | 导出CSV |
| | export-summary | 导出汇总报表 |
| **提醒** | warranty-reminder | 保修到期提醒 |
| | idle-reminder | 闲置资产提醒 |
| | pending-reminder | 待审批提醒 |
| | daily-summary | 每日汇总报告 |
| **报表** | report-dept | 部门详细报表 |
| | report-category | 分类详细报表 |
| **工具** | dashboard | 仪表盘 |
| | validate | 验证API |
| | help | 帮助 |

---

**技能版本**: 3.1
**代码行数**: 565
**最后更新**: 2026-03-21

