assethub

GitHub 作者 LeoYeAI/openclaw-master-skills v2.0.3

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

安装 / 下载方式

TotalClaw CLI推荐
totalclaw skills install shop:github:LeoYeAI~openclaw-master-skills~assethub
cURL直接下载,无需登录
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