forked from erp-dev/erp
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/ 目录中。
使用方法
对于开发者
-
查看skill说明:
cat .skills/flower-db-access/SKILL.md -
测试SSH连接:
# SSH key认证 ssh -p 18762 root@8.148.215.233 "echo '连接成功'" # 或交互式SSH ssh -p 18762 root@8.148.215.233 # -
测试数据库连接:
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时,它可以:
- 通过SSH连接到远程服务器
- 读取所有业务表(除了认证相关表)
- 执行SELECT查询进行数据分析
- 生成报告和统计信息
- 调试数据问题
禁止操作:
- 所有写操作(INSERT, UPDATE, DELETE等)
- 访问认证相关表(auth_user, auth_permission等)
快速查询工具
使用 query.sh
# 快速查询工具
./.skills/flower-db-access/query.sh 'SELECT * FROM business_salesorder LIMIT 10'
# 或通过管道
echo 'SELECT COUNT(*) FROM printing_plateorder' | ./.skills/flower-db-access/query.sh
运行示例脚本
# 远程示例(通过SSH)
./.skills/flower-db-access/examples-remote.sh
数据库架构
核心模块
- basic_info: 客户、供应商、产品、仓库等基础信息
- business: 采购、销售、退货、收付款等业务单据
- stock: 库存变动、冻结、汇总
- printing: 开版、印染订单和任务
- stateflow: 工作流引擎
多租户架构
⚠️ 重要: 所有业务表都有 merchant_id 字段用于多租户隔离。查询时应该包含这个条件。
示例查询
查询最近的销售订单
SELECT id, customer_id, sales_date, status, created_at
FROM business_salesorder
WHERE merchant_id = 1
ORDER BY created_at DESC
LIMIT 10;
查询库存状态
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;
\""
查询印染订单进度
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;
\""
安全注意事项
- 只读访问: 此skill严格限制为只读,任何写操作都会被拒绝
- 认证表保护: auth_* 表完全禁止访问
- 多租户隔离: 查询时必须考虑 merchant_id
- 性能考虑: 大表查询时使用 LIMIT 和适当的 WHERE 条件
故障排查
连接失败
# 检查PostgreSQL服务状态
sudo systemctl status postgresql
# 检查数据库进程
ps aux | grep postgres
权限错误
# 检查数据库用户权限
PGPASSWORD=postgres psql -h 127.0.0.1 -p 5432 -U postgres -d flower -c "\du"
更多信息
详细的查询示例和最佳实践请参考 SKILL.md。