assethub
资产管理系统AI助手(openclaw技能)。用于资产查询、维修报修、盘点管理、折旧计算等资产全生命周期管理
安装 / 下载方式
TotalClaw CLI推荐
totalclaw skills install shop:github:LeoYeAI~openclaw-master-skills~assethubcURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/github%3ALeoYeAI~openclaw-master-skills~assethub/file -o assethub.md# 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 "htt