# Flower Database Access Skill

这个skill允许可信的AI agent以只读方式访问Flower ERP数据库。

## ⚠️ 重要：远程访问

**数据库托管在远程服务器上，必须先通过SSH连接才能访问数据库。**

### SSH连接信息
- 远程服务器: `8.148.215.233`
- SSH用户: `root`
- SSH密码: `Zu0We!1216*`

## 安装

这个skill已经位于项目的 `.skills/flower-db-access/` 目录中。

## 使用方法

### 对于开发者

1. **查看skill说明**：
   ```bash
   cat .skills/flower-db-access/SKILL.md
   ```

2. **测试SSH连接**：
   ```bash
   # SSH key认证
   ssh -p 18762 root@8.148.215.233 "echo '连接成功'"
   
   # 或交互式SSH
   ssh -p 18762 root@8.148.215.233
   # 
   ```

3. **测试数据库连接**：
   ```bash
   ssh -p 18762 root@8.148.215.233 \
     "PGPASSWORD=postgres psql -h 127.0.0.1 -p 5432 -U postgres -d flower -c '\dt'"
   ```

### 对于AI Agent

当AI agent被授予权限使用这个skill时，它可以：

1. **通过SSH连接到远程服务器**
2. **读取所有业务表**（除了认证相关表）
3. **执行SELECT查询**进行数据分析
4. **生成报告和统计信息**
5. **调试数据问题**

**禁止操作**：
- 所有写操作（INSERT, UPDATE, DELETE等）
- 访问认证相关表（auth_user, auth_permission等）

## 快速查询工具

### 使用 query.sh
```bash
# 快速查询工具
./.skills/flower-db-access/query.sh 'SELECT * FROM business_salesorder LIMIT 10'

# 或通过管道
echo 'SELECT COUNT(*) FROM printing_plateorder' | ./.skills/flower-db-access/query.sh
```

### 运行示例脚本
```bash
# 远程示例（通过SSH）
./.skills/flower-db-access/examples-remote.sh
```

## 数据库架构

### 核心模块

- **basic_info**: 客户、供应商、产品、仓库等基础信息
- **business**: 采购、销售、退货、收付款等业务单据
- **stock**: 库存变动、冻结、汇总
- **printing**: 开版、印染订单和任务
- **stateflow**: 工作流引擎

### 多租户架构

⚠️ **重要**: 所有业务表都有 `merchant_id` 字段用于多租户隔离。查询时应该包含这个条件。

## 示例查询

### 查询最近的销售订单
```sql
SELECT id, customer_id, sales_date, status, created_at 
FROM business_salesorder 
WHERE merchant_id = 1
ORDER BY created_at DESC 
LIMIT 10;
```

### 查询库存状态
```bash
ssh -p 18762 root@8.148.215.233 \
  "PGPASSWORD=postgres psql -h 127.0.0.1 -p 5432 -U postgres -d flower -c \"
SELECT 
    p.name as product_name,
    w.name as warehouse,
    si.quantity,
    p.unit
FROM stock_inventory si
JOIN basic_info_product p ON si.product_id = p.id
JOIN basic_info_warehouse w ON si.warehouse_id = w.id
WHERE si.merchant_id = 1
  AND si.quantity > 0
ORDER BY si.quantity DESC;
\""
```

### 查询印染订单进度
```bash
ssh -p 18762 root@8.148.215.233 \
  "PGPASSWORD=postgres psql -h 127.0.0.1 -p 5432 -U postgres -d flower -c \"
SELECT 
    po.human_id,
    po.fabric,
    COUNT(pj.id) as job_count
FROM printing_printingorder po
LEFT JOIN printing_printingjob pj ON pj.printing_order_id = po.id
WHERE po.merchant_id = 1
  AND po.is_invalid = false
GROUP BY po.id, po.human_id, po.fabric
ORDER BY po.created_at DESC
LIMIT 20;
\""
```

## 安全注意事项

1. **只读访问**: 此skill严格限制为只读，任何写操作都会被拒绝
2. **认证表保护**: auth_* 表完全禁止访问
3. **多租户隔离**: 查询时必须考虑 merchant_id
4. **性能考虑**: 大表查询时使用 LIMIT 和适当的 WHERE 条件

## 故障排查

### 连接失败
```bash
# 检查PostgreSQL服务状态
sudo systemctl status postgresql

# 检查数据库进程
ps aux | grep postgres
```

### 权限错误
```bash
# 检查数据库用户权限
PGPASSWORD=postgres psql -h 127.0.0.1 -p 5432 -U postgres -d flower -c "\du"
```

## 更多信息

详细的查询示例和最佳实践请参考 [SKILL.md](./SKILL.md)。
