
Lark Workflow Erp Inventory
- 7 installs
- 60 repo stars
- Updated April 13, 2026
- liangdabiao/lark-workflow-feishu-cli
Helps with automation & workflows tasks.
About
lark-workflow-erp-inventory is a Claude Code skill in the Automation & Workflows category.
- lark-workflow-erp-inventory
- Automation & Workflows
- AI-coding skill
Lark Workflow Erp Inventory by the numbers
- 7 all-time installs (skills.sh)
- Ranked #1,587 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/liangdabiao/lark-workflow-feishu-cli --skill lark-workflow-erp-inventoryAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 7 |
|---|---|
| repo stars | ★ 60 |
| Last updated | April 13, 2026 |
| Repository | liangdabiao/lark-workflow-feishu-cli ↗ |
What it does
Helps with automation & workflows tasks.
Files
进销存 ERP 系统工作流
CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理
适用场景
- "帮我创建一个进销存系统" / "搭建库存管理" / "新建进销存"
- "新增货品:米色T恤,规格S/M/L" / "添加SKU"
- "入库:米色T恤 10件,单价50" / "进货登记"
- "出库:米色T恤 3件,用途领用" / "发货出库"
- "查一下米色T恤的库存" / "库存清单" / "哪些货品库存不足"
- "低库存预警" / "库存报警" / "缺货提醒"
- "本月入库汇总" / "出库统计" / "库存报表" / "滞销分析"
- "新增供应商" / "供应商列表"
- "创建库存看板" / "库存仪表盘"
前置条件
仅支持 user 身份。执行前确保已授权:
lark-cli auth login --domain base,im,docs系统架构
进销存 ERP (lark-workflow-erp-inventory)
│
├── 数据层:飞书多维表格 (Bitable)
│ ├── 货品库存台账 (products) — SKU 主数据
│ ├── 入库记录表 (stock_in) — 入库流水
│ ├── 出库记录表 (stock_out) — 出库流水
│ └── 供应商表 (suppliers) — 供应商信息(扩展)
│
├── 计算层
│ ├── 累计入库 (lookup) — 从入库表按物品名称汇总入库数量
│ ├── 累计出库 (lookup) — 从出库表按物品名称汇总出库数量
│ ├── 剩余库存 (formula) — 累计入库 - 累计出库
│ ├── 库存状态 (formula) — IF(剩余库存 ≤ 最低库存, "低库存", "正常")
│ └── 入库金额 (formula) — 入库数量 × 入库单价
│
├── 关联关系
│ ├── 入库表.关联物品 ↔ 台账(双向)
│ ├── 出库表.关联物品 ↔ 台账(双向)
│ └── 台账.供应商 ↔ 供应商表(双向)
│
├── 交互层:用户自然语言指令
│ ├── 系统初始化 → 创建 Base + 表 + 字段 + 关联
│ ├── 日常操作 → 入库/出库/查询
│ └── 数据分析 → 聚合统计 + 报表
│
└── 通知层:飞书消息
├── 低库存预警通知
└── 出库确认通知---
Agent 核心规则
1. 出库前必须校验库存 — 先查询台账表的剩余库存,不足则拦截并提示用户 2. 只使用 `lark-cli base +...` 原子命令 — 不走 lark-cli api 直接调用 3. 建表必须先建空表再逐个加字段 — +table-create 带 --fields 多字段时容易触发限流(错误码 800004135),改为先建空表,再用 +field-create 逐个加字段,每次间隔 1.5 秒 4. 关联字段必须使用双向关联 — bidirectional: true,否则无法在公式中做跨表聚合 5. 库存计算使用 lookup + formula 组合 — 不要用公式字段直接跨表查询(会变成全表 SUM),改用 lookup 字段做跨表聚合,再用公式字段做差值计算 6. `+data-query` 的 table-id 放在 DSL 中 — 不支持 --table-id 参数,需放在 --dsl 的 datasource.table.tableId 中 7. `+data-query` 只支持存储字段 — 不支持公式字段、lookup 字段、关联字段做聚合 8. 写记录前先拿字段结构 — +field-list 确认字段名和类型 9. 公式字段创建前先读 guide — 读取 `../lark-base/references/formula-field-guide.md` 10. `+xxx-list` 禁止并发 — 所有 list 命令串行执行 11. 写入串行 + 间隔 — +record-upsert 串行,间隔 0.5-1 秒 12. 分页拉取 — +record-list --limit 200,用 offset 分页 13. 表名/字段名精确匹配 — 禁止凭自然语言猜测,必须来自 +table-list / +field-list 返回值
---
Phase 1:系统初始化
Step 1.1: 创建 Base
lark-cli base +base-create --name "进销存管理系统" --as user记录返回的 base_token(后续所有命令需要)。
Step 1.2: 创建数据表(先建空表,间隔 2 秒)
IMPORTANT:不要使用--fields参数一次性创建多字段,容易触发限流。先创建空表,再用+field-create逐个添加字段。
# 表 1:货品库存台账
lark-cli base +table-create --base-token "<base_token>" --name "货品库存台账" --as user
sleep 2
# 表 2:供应商
lark-cli base +table-create --base-token "<base_token>" --name "供应商" --as user
sleep 2
# 表 3:入库记录
lark-cli base +table-create --base-token "<base_token>" --name "入库记录" --as user
sleep 2
# 表 4:出库记录
lark-cli base +table-create --base-token "<base_token>" --name "出库记录" --as userStep 1.3: 获取各表 table_id
lark-cli base +table-list --base-token "<base_token>" --as user记录各表的 table_id。
Step 1.4: 逐个添加存储字段(每创建一个间隔 1.5 秒)
台账表字段
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" --json '{"type":"auto_number","name":"物品编号","style":{"rules":[{"type":"text","text":"SKU-"},{"type":"incremental_number","length":4}]}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" --json '{"type":"text","name":"物品名称"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" --json '{"type":"text","name":"规格型号"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" --json '{"type":"select","name":"类别","options":[{"name":"服装"},{"name":"电子产品"},{"name":"食品"},{"name":"办公用品"},{"name":"其他"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" --json '{"type":"select","name":"单位","options":[{"name":"件"},{"name":"个"},{"name":"箱"},{"name":"套"},{"name":"kg"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" --json '{"type":"number","name":"最低库存","style":{"type":"plain","precision":0}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" --json '{"type":"number","name":"单价","style":{"type":"currency","precision":2,"currency_code":"CNY"}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" --json '{"type":"text","name":"备注"}' --as user
sleep 2供应商表字段
lark-cli base +field-create --base-token "<base_token>" --table-id "<suppliers_table_id>" --json '{"type":"text","name":"供应商名称"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<suppliers_table_id>" --json '{"type":"text","name":"联系人"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<suppliers_table_id>" --json '{"type":"text","name":"联系电话","style":{"type":"phone"}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<suppliers_table_id>" --json '{"type":"text","name":"地址"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<suppliers_table_id>" --json '{"type":"select","name":"供应类别","options":[{"name":"服装"},{"name":"电子产品"},{"name":"食品"},{"name":"办公用品"},{"name":"其他"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<suppliers_table_id>" --json '{"type":"select","name":"合作状态","options":[{"name":"合作中"},{"name":"暂停"},{"name":"终止"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<suppliers_table_id>" --json '{"type":"text","name":"备注"}' --as user
sleep 2入库记录表字段
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_in_table_id>" --json '{"type":"auto_number","name":"入库单号","style":{"rules":[{"type":"text","text":"IN-"},{"type":"incremental_number","length":4}]}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_in_table_id>" --json '{"type":"text","name":"供应商"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_in_table_id>" --json '{"type":"number","name":"入库数量","style":{"type":"plain","precision":0}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_in_table_id>" --json '{"type":"number","name":"入库单价","style":{"type":"currency","precision":2,"currency_code":"CNY"}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_in_table_id>" --json '{"type":"select","name":"用途","options":[{"name":"采购"},{"name":"退货"},{"name":"调拨"},{"name":"盘盈"},{"name":"其他"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_in_table_id>" --json '{"type":"user","name":"入库人","multiple":false}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_in_table_id>" --json '{"type":"datetime","name":"入库日期","style":{"format":"yyyy-MM-dd"}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_in_table_id>" --json '{"type":"text","name":"备注"}' --as user
sleep 2出库记录表字段
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_out_table_id>" --json '{"type":"auto_number","name":"出库单号","style":{"rules":[{"type":"text","text":"OUT-"},{"type":"incremental_number","length":4}]}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_out_table_id>" --json '{"type":"number","name":"出库数量","style":{"type":"plain","precision":0}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_out_table_id>" --json '{"type":"user","name":"领用人","multiple":false}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_out_table_id>" --json '{"type":"datetime","name":"出库日期","style":{"format":"yyyy-MM-dd"}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_out_table_id>" --json '{"type":"select","name":"用途","options":[{"name":"销售"},{"name":"领用"},{"name":"调拨"},{"name":"盘亏"},{"name":"其他"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_out_table_id>" --json '{"type":"text","name":"备注"}' --as user
sleep 2Step 1.5: 创建双向关联字段(每创建一个间隔 2 秒)
CRITICAL:关联字段必须使用 bidirectional: true,否则无法在公式/lookup 中做跨表聚合。台账 → 供应商 关联
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" \
--json '{"type":"link","name":"供应商","link_table":"供应商","bidirectional":true,"bidirectional_link_field_name":"供应货品"}' \
--as user
sleep 2入库表 → 台账 关联(双向)
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_in_table_id>" \
--json '{"type":"link","name":"关联物品","link_table":"货品库存台账","bidirectional":true,"bidirectional_link_field_name":"入库记录"}' \
--as user
sleep 2出库表 → 台账 关联(双向)
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_out_table_id>" \
--json '{"type":"link","name":"关联物品","link_table":"货品库存台账","bidirectional":true,"bidirectional_link_field_name":"出库记录"}' \
--as user
sleep 2Step 1.6: 创建 lookup + formula 计算字段
IMPORTANT:
- 创建公式字段前 MUST 先读取 `../lark-base/references/formula-field-guide.md`
- 创建 lookup 字段前 MUST 先读取 `../lark-base/references/lookup-field-guide.md`
- 所有计算字段创建命令都需追加 --i-have-read-guide库存计算架构:lookup 字段做跨表聚合 → formula 字段做差值计算
1. 累计入库(lookup 字段):从入库表汇总当前物品名称对应的入库数量 2. 累计出库(lookup 字段):从出库表汇总当前物品名称对应的出库数量 3. 剩余库存(formula 字段):累计入库 - 累计出库 4. 库存状态(formula 字段):IF(剩余库存 ≤ 最低库存, "低库存", "正常") 5. 入库金额(formula 字段):入库数量 × 入库单价
台账表:累计入库(lookup)
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" \
--json '{"type":"lookup","name":"累计入库","from":"入库记录","select":"入库数量","where":{"logic":"and","conditions":[["关联物品","==",{"type":"field_ref","field":"物品名称"}]]},"aggregate":"SUM"}' \
--i-have-read-guide \
--as user
sleep 2lookup 说明:from指定源表名,select指定要聚合的字段,where中通过field_ref引用当前表的物品名称字段与源表关联字段匹配,aggregate: "SUM"求和。
台账表:累计出库(lookup)
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" \
--json '{"type":"lookup","name":"累计出库","from":"出库记录","select":"出库数量","where":{"logic":"and","conditions":[["关联物品","==",{"type":"field_ref","field":"物品名称"}]]},"aggregate":"SUM"}' \
--i-have-read-guide \
--as user
sleep 2台账表:剩余库存(formula)
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" \
--json '{"type":"formula","name":"剩余库存","expression":"IFBLANK([累计入库], 0) - IFBLANK([累计出库], 0)"}' \
--i-have-read-guide \
--as user
sleep 2台账表:库存状态(formula)
lark-cli base +field-create --base-token "<base_token>" --table-id "<products_table_id>" \
--json '{"type":"formula","name":"库存状态","expression":"IF([剩余库存] <= [最低库存], \"低库存\", \"正常\")"}' \
--i-have-read-guide \
--as user
sleep 2入库表:入库金额(formula)
lark-cli base +field-create --base-token "<base_token>" --table-id "<stock_in_table_id>" \
--json '{"type":"formula","name":"入库金额","expression":"[入库数量] * [入库单价]"}' \
--i-have-read-guide \
--as user---
Phase 2:日常操作
2.1 新增货品
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<products_table_id>" \
--json '{"物品名称":"米色T恤","规格型号":"S/M/L/XL","类别":"服装","单位":"件","最低库存":5,"单价":50,"备注":"夏季新款"}' \
--as userAgent 处理逻辑: 1. 解析用户输入:提取物品名称、规格、类别、单位、最低库存、单价、备注 2. 未提供的字段留空或使用默认值 3. 类别/单位需匹配已有选项,不在选项中的需提醒用户
2.2 修改货品信息
# 先查询获取 record_id
lark-cli base +record-list --base-token "<base_token>" --table-id "<products_table_id>" --as user
# 更新货品信息
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<products_table_id>" \
--record-id "<record_id>" \
--json '{"最低库存":10,"备注":"更新备注"}' \
--as userAgent 处理逻辑: 1. 根据用户提供的物品名称/编号查询 record_id 2. 只更新用户指定的字段(Delta 更新)
2.3 入库操作
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<stock_in_table_id>" \
--json '{"关联物品":["<record_id>"],"入库数量":10,"入库单价":50,"用途":"采购","入库日期":<timestamp_ms>,"备注":"正常采购"}' \
--as user关联字段值格式:关联字段的值为 record_id 数组,如 ["recXXXX"]。日期格式:日期字段使用 Unix 毫秒时间戳(数字),不是字符串。
Agent 处理逻辑: 1. 解析用户输入:提取物品名称、入库数量、单价、用途/来源 2. 在台账表中查询物品对应的 record_id 3. 日期默认当天(Date.now() 毫秒时间戳) 4. 写入入库记录 5. 回复用户:入库成功,并显示更新后的剩余库存
入库成功回复格式:
入库成功!
物品:米色T恤
入库数量:10 件
入库单价:50.00 元
入库金额:500.00 元
用途:采购
日期:2024-01-15
当前剩余库存:10 件2.4 出库操作(含库存校验)
出库前必须执行库存校验:
# Step 1: 查询物品当前库存
lark-cli base +record-list --base-token "<base_token>" --table-id "<products_table_id>" --as user
# 从返回结果中找到目标物品的 record_id 和剩余库存值
# Step 2: 校验库存
# 如果 剩余库存 < 出库数量 → 拦截并提示
# 如果 剩余库存 >= 出库数量 → 执行出库# Step 3: 执行出库
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<stock_out_table_id>" \
--json '{"关联物品":["<record_id>"],"出库数量":3,"用途":"领用","出库日期":<timestamp_ms>,"备注":""}' \
--as userAgent 处理逻辑: 1. 解析用户输入:提取物品名称、出库数量、用途、领用人 2. 查询台账表获取物品 record_id 和剩余库存 3. 校验:剩余库存 >= 出库数量?
- 不足 → 提示
"库存不足!米色T恤 当前剩余库存仅 X 件,无法出库 Y 件。"并中止 - 充足 → 继续出库
4. 写入出库记录 5. 回复用户
库存不足拦截格式:
出库失败 - 库存不足!
物品:米色T恤
当前剩余库存:2 件
请求出库数量:3 件
缺少:1 件出库成功回复格式:
出库成功!
物品:米色T恤
出库数量:3 件
用途:领用
日期:2024-01-15
出库前库存:10 件
出库后库存:7 件2.5 查询库存
查询单个物品库存
lark-cli base +record-list --base-token "<base_token>" --table-id "<products_table_id>" --as user
# AI 从返回结果中筛选目标物品回复格式:
物品库存查询
物品名称:米色T恤
规格型号:S/M/L/XL
类别:服装
累计入库:10 件
累计出库:3 件
剩余库存:7 件
最低库存:5 件
库存状态:正常
单价:50.00 元查询全部库存清单
lark-cli base +record-list --base-token "<base_token>" --table-id "<products_table_id>" \
--limit 200 --as user
# 如超过 200 条,用 offset 分页回复格式:
库存清单(共 N 种货品)
| 物品名称 | 规格 | 剩余库存 | 最低库存 | 状态 | 单价 |
|---------|------|---------|---------|------|------|
| 米色T恤 | S/M/L | 7 件 | 5 件 | 正常 | 50.00 |
| 黑色外套 | M/L | 2 件 | 10 件 | ⚠️低库存 | 200.00 |
⚠️ 低库存预警:1 种货品低于最低库存2.6 查询入库/出库记录
# 入库记录
lark-cli base +record-list --base-token "<base_token>" --table-id "<stock_in_table_id>" \
--limit 200 --as user
# 出库记录
lark-cli base +record-list --base-token "<base_token>" --table-id "<stock_out_table_id>" \
--limit 200 --as userAgent 处理:
- 如果用户指定了物品名称,从返回结果中筛选对应记录
- 如果用户指定了时间范围,按日期筛选
- 整理成易读的表格格式回复
2.7 删除货品/记录
lark-cli base +record-delete --base-token "<base_token>" --table-id "<products_table_id>" \
--record-id "<record_id>" --yes --as user注意:删除货品前应提醒用户,该货品相关的入库/出库记录中的关联会受影响。
---
Phase 3:库存预警与通知
3.1 低库存检测
lark-cli base +record-list --base-token "<base_token>" --table-id "<products_table_id>" \
--limit 200 --as user
# AI 筛选 库存状态 = "低库存" 的记录回复格式:
低库存预警报告
以下 N 种货品库存低于最低库存:
| 物品名称 | 当前库存 | 最低库存 | 缺少 | 单价 | 库存金额 |
|---------|---------|---------|------|------|---------|
| 黑色外套 | 2 件 | 10 件 | 8 件 | 200.00 | 400.00 |
| 蓝色牛仔裤 | 0 件 | 10 件 | 10 件 | 150.00 | 0.00 |
建议及时补货。3.2 发送预警通知到飞书群
lark-cli im +messages-send --chat-id "<chat_id>" \
--msg-type "interactive" \
--content '{
"config": {"wide_screen_mode": true},
"header": {"title": {"tag": "plain_text", "content": "低库存预警"}, "template": "red"},
"elements": [
{"tag": "div", "text": {"tag": "lark_md", "content": "以下货品库存低于最低库存,请及时补货:"}},
{"tag": "div", "text": {"tag": "lark_md", "content": "**黑色外套** 当前 2 件 / 最低 10 件\n**蓝色牛仔裤** 当前 0 件 / 最低 10 件"}}
]
}' \
--as user重要:发送消息前需先读取 `../lark-im/SKILL.md` 了解消息发送规则。
3.3 出库确认通知
出库完成后,如果用户要求发送通知:
lark-cli im +messages-send --chat-id "<chat_id>" \
--msg-type "interactive" \
--content '{
"config": {"wide_screen_mode": true},
"header": {"title": {"tag": "plain_text", "content": "出库确认通知"}, "template": "blue"},
"elements": [
{"tag": "div", "text": {"tag": "lark_md", "content": "已成功出库:"}},
{"tag": "div", "text": {"tag": "lark_md", "content": "**物品**:米色T恤\n**数量**:3 件\n**用途**:领用\n**领用人**:@用户"}}
]
}' \
--as user---
Phase 4:数据分析
4.1 入库汇总
IMPORTANT:+data-query不支持--table-id参数,table-id 必须放在--dsl的datasource中。且只支持存储字段(不支持公式字段、lookup 字段、关联字段)。
lark-cli base +data-query --base-token "<base_token>" \
--dsl '{
"datasource": {"type": "table", "table": {"tableId": "<stock_in_table_id>"}},
"dimensions": [{"field_name":"用途","alias":"usage_type"}],
"measures": [
{"field_name":"入库数量","aggregation":"sum","alias":"total_qty"},
{"field_name":"入库单价","aggregation":"avg","alias":"avg_price"}
]
}' \
--as user注意:不要对公式字段(如"入库金额")做聚合,会报错。改为对"入库数量"做 SUM,对"入库单价"做 AVG。
回复格式:
入库汇总
| 用途 | 入库数量 | 平均单价 |
|------|---------|---------|
| 采购 | 33 件 | 133.33 元 |
| **合计** | **33 件** | |4.2 出库汇总
lark-cli base +data-query --base-token "<base_token>" \
--dsl '{
"datasource": {"type": "table", "table": {"tableId": "<stock_out_table_id>"}},
"dimensions": [{"field_name":"用途","alias":"usage_type"}],
"measures": [{"field_name":"出库数量","aggregation":"sum","alias":"total_qty"}]
}' \
--as user4.3 滞销分析
lark-cli base +record-list --base-token "<base_token>" --table-id "<products_table_id>" \
--limit 200 --as userAgent 处理逻辑: 1. 拉取台账数据,获取各物品的累计入库和剩余库存(lookup 字段值) 2. 计算出库量 = 累计入库 - 剩余库存 3. 筛选出库量为 0 或低于阈值的货品 4. 按库存金额排序
4.4 生成库存报表文档
lark-cli docs +create --title "库存报表 - 2024年1月" --markdown "<报表内容>" --as user4.5 创建库存看板(仪表盘)
lark-cli base +dashboard-create --base-token "<base_token>" --name "库存看板" --as user注意:仪表盘配置需先读取 `../lark-base/references/dashboard-block-data-config.md` 了解 data_config 结构。
---
Phase 5:供应商管理
5.1 新增供应商
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<suppliers_table_id>" \
--json '{"供应商名称":"深圳XX纺织厂","联系人":"张经理","联系电话":"13800138000","地址":"深圳市南山区XX路XX号","供应类别":"服装","合作状态":"合作中","备注":"主力供应商"}' \
--as user5.2 查询供应商列表
lark-cli base +record-list --base-token "<base_token>" --table-id "<suppliers_table_id>" \
--limit 200 --as user5.3 关联供应商到货品
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<products_table_id>" \
--record-id "<products_record_id>" \
--json '{"供应商":["<suppliers_record_id>"]}' \
--as user关联字段值格式:值为关联记录的 record_id 数组 ["recXXXX"]。---
意图 → 命令索引
| 意图 | 推荐命令 | 备注 |
|---|---|---|
| 创建进销存系统 | +base-create → 4 × +table-create → 逐个 +field-create → 双向关联 → lookup + formula | 按 Step 1 顺序执行 |
| 新增货品 | +record-upsert → products 表 | |
| 修改货品 | +record-list → +record-upsert → products 表 | 先查 record_id |
| 删除货品 | +record-delete → products 表 | 带 --yes |
| 入库 | +record-upsert → stock_in 表 | 关联字段用 record_id 数组 |
| 出库 | 先校验库存 → +record-upsert → stock_out 表 | 必须校验 |
| 查库存 | +record-list → products 表 | AI 过滤/聚合 |
| 查入库记录 | +record-list → stock_in 表 | |
| 查出库记录 | +record-list → stock_out 表 | |
| 低库存预警 | +record-list → products 表 → AI 过滤 | |
| 发预警通知 | im +messages-send | 需 chat_id |
| 入库/出库汇总 | +data-query | 只聚合存储字段,table-id 放 DSL 中 |
| 滞销分析 | +record-list → products 表 → AI 计算 | 用 lookup 字段值 |
| 生成报表 | docs +create | Markdown 模板 |
| 创建看板 | +dashboard-create → +dashboard-block-create | |
| 新增供应商 | +record-upsert → suppliers 表 | |
| 查供应商 | +record-list → suppliers 表 | |
| 关联供应商 | +record-upsert → products 表 | 关联字段用 record_id 数组 |
---
常见错误速查
| 错误场景 | 原因 | 解决方案 |
|---|---|---|
+table-create --fields 限流 800004135 | 一次性创建多字段触发限流 | 先建空表,再用 +field-create 逐个加字段,间隔 1.5 秒 |
| 公式字段跨表查询返回全表 SUM | 单向关联无法反向查询;或公式用表名引用而非关联字段 | 关联字段必须 bidirectional: true;库存计算改用 lookup + formula 组合 |
| 单向关联不能改为双向 | API 限制 unsafe_operation_blocked | 删除旧关联字段,重新创建双向关联 |
+data-query unknown flag --table-id | 该命令不支持 --table-id | 把 table-id 放在 --dsl 的 datasource.table.tableId 中 |
+data-query 不支持某字段聚合 | 公式/lookup/关联字段不在白名单 | 只对存储字段做聚合 |
+data-query alias 中文乱码 | CLI 编码问题 | 用英文 alias 或 agent 自行映射 |
| 关联字段值写入失败 | 格式错误 | 关联字段值必须是 record_id 数组 ["recXXX"] |
| 日期字段写入失败 | 格式错误 | 使用 Unix 毫秒时间戳(数字),不是字符串 |
| 出库后库存未更新 | lookup 公式计算延迟 | 等待 3-5 秒后重新查询 |
+record-list 数据不全 | 分页未拉完 | 用 offset 分页,每页 200 |
| 权限不足 | scope 未开通 | 参考 lark-shared 处理权限问题 |
| 并发报错 1254291 | list 命令并发 | 所有 +xxx-list 串行执行 |
| 消息发送失败 | chat_id 无效 | 用 im +chat-list 确认 chat_id |
---
权限表
| 命令 | 所需 scope |
|---|---|
base +base-create | bitable:app |
base +table-create | bitable:app |
base +field-create | bitable:app |
base +field-list | bitable:app:readonly |
base +record-list | bitable:app:readonly |
base +record-upsert | bitable:app |
base +record-delete | bitable:app |
base +data-query | bitable:app:readonly |
base +dashboard-create | bitable:app |
im +messages-send | im:message:send_as_bot |
docs +create | docx:document:create |
---
参考
- `../lark-shared/SKILL.md` — 认证、权限(必读)
- `../lark-base/SKILL.md` — 多维表格原子操作
- `../lark-base/references/formula-field-guide.md` — 公式字段写法(创建公式字段前必读)
- `../lark-base/references/lookup-field-guide.md` — lookup 字段配置规则(创建 lookup 字段前必读)
- `../lark-base/references/lark-base-shortcut-field-properties.md` — 字段属性 JSON 规范
- `../lark-base/references/lark-base-shortcut-record-value.md` — 记录值格式规范
- `../lark-base/references/lark-base-data-query.md` — 聚合分析 DSL
- `../lark-base/references/dashboard-block-data-config.md` — 仪表盘 Block 配置
- `../lark-im/SKILL.md` — 飞书消息发送
- `../lark-doc/SKILL.md` — 飞书文档创建
进销存 ERP 系统
基于飞书多维表格 + lark-cli 构建的轻量进销存管理系统。适合小团队管理货品台账、入库出库流水、库存预警和供应商信息。
快速开始
1. 确保已授权
lark-cli auth login --domain base,im,docs2. 一句话初始化
直接用自然语言告诉 AI:
帮我创建一个进销存系统AI 会自动完成以下步骤:
- 创建多维表格 Base
- 创建 4 张数据表(货品台账、入库记录、出库记录、供应商)
- 添加所有字段(物品名称、规格、类别、单位、最低库存等)
- 配置双向关联(台账↔入库、台账↔出库、台账↔供应商)
- 创建 Lookup 和 Formula 计算字段(累计入库、累计出库、剩余库存、库存状态)
初始化大约需要 2-3 分钟(因限流保护,每个字段间隔 1.5 秒)。
3. 开始使用
新增货品:米色T恤,规格 S/M/L,最低库存 20---
使用场景与示例
场景一:货品管理
新增货品
你:新增货品:米色T恤,规格S/M/L,类别服装,单位件,最低库存20,单价50
AI:货品创建成功!
物品名称:米色T恤
规格型号:S/M/L
类别:服装
单位:件
最低库存:20
单价:¥50.00也可以只提供部分信息,其余字段留空:
你:新增一个货品叫蓝牙耳机
AI:货品创建成功!
物品名称:蓝牙耳机
类别:(未设置)
单位:(未设置)
提示:建议补充类别、单位、最低库存和单价信息。批量新增货品
你:帮我批量添加以下货品:
1. 黑色外套,规格 M/L/XL,服装,最低库存10,单价200
2. 蓝色牛仔裤,规格 28/30/32,服装,最低库存15,单价150
3. USB-C数据线,规格 1m/2m,电子产品,最低库存50,单价15
AI:正在逐个创建货品...
✓ 货品 1/3:黑色外套 — 创建成功
✓ 货品 2/3:蓝色牛仔裤 — 创建成功
✓ 货品 3/3:USB-C数据线 — 创建成功
全部完成!已添加 3 种货品。修改货品信息
你:把黑色外套的最低库存改成 15,备注加一句"冬季热销款"
AI:✓ 已更新黑色外套:
- 最低库存:10 → 15
- 备注:冬季热销款查看货品列表
你:查看所有货品
AI:货品列表(共 5 种)
| 物品名称 | 规格 | 类别 | 单位 | 最低库存 | 单价 |
|---------|------|------|------|---------|------|
| 米色T恤 | S/M/L | 服装 | 件 | 20 | ¥50.00 |
| 黑色外套 | M/L/XL | 服装 | 件 | 15 | ¥200.00 |
| 蓝色牛仔裤 | 28/30/32 | 服装 | 件 | 15 | ¥150.00 |
| USB-C数据线 | 1m/2m | 电子产品 | 条 | 50 | ¥15.00 |
| 蓝牙耳机 | - | 电子产品 | 个 | 10 | ¥299.00 |---
场景二:入库操作
单笔入库
你:入库:米色T恤 10件,单价50,采购入库
AI:入库成功!
物品:米色T恤
入库数量:10 件
入库单价:¥50.00
入库金额:¥500.00
用途:采购
日期:2026-04-13
当前累计入库:10 件
剩余库存:10 件批量入库
你:今天到了一批货:
米色T恤 50件,单价48
黑色外套 20件,单价180
USB-C数据线 200条,单价12
AI:正在逐笔登记入库...
✓ 入库 1/3:米色T恤 50件 ¥48.00 — 成功(累计入库:60件,剩余库存:60件)
✓ 入库 2/3:黑色外套 20件 ¥180.00 — 成功(累计入库:20件,剩余库存:20件)
✓ 入库 3/3:USB-C数据线 200条 ¥12.00 — 成功(累计入库:200条,剩余库存:200条)
本次入库汇总:3 笔,270 件/条,总金额 ¥6,480.00退货入库
你:客户退回了 3 件黑色外套,登记退货入库
AI:入库成功!
物品:黑色外套
入库数量:3 件
入库单价:¥200.00
入库金额:¥600.00
用途:退货
日期:2026-04-13
当前累计入库:23 件
剩余库存:23 件---
场景三:出库操作
正常出库
你:出库:米色T恤 5件,领用
AI:出库成功!
物品:米色T恤
出库数量:5 件
用途:领用
日期:2026-04-13
出库前库存:60 件
出库后库存:55 件库存不足拦截
你:出库:蓝牙耳机 15件,销售出库
AI:出库失败 — 库存不足!
物品:蓝牙耳机
当前剩余库存:10 件
请求出库数量:15 件
缺少:5 件
请确认出库数量,或先安排补货入库。发货出库
你:销售出库:米色T恤 30件发往北京,黑色外套 5件发往上海
AI:正在逐笔出库...
✓ 出库 1/2:米色T恤 30件(发货)— 成功(剩余库存:25件)
✓ 出库 2/2:黑色外套 5件(发货)— 成功(剩余库存:18件)---
场景四:库存查询
查询单个货品库存
你:查一下米色T恤的库存
AI:物品库存查询
物品名称:米色T恤
规格型号:S/M/L
类别:服装
单位:件
累计入库:60 件
累计出库:35 件
剩余库存:25 件
最低库存:20 件
库存状态:正常 ✓
单价:¥50.00查询全部库存清单
你:看看库存清单
AI:库存清单(共 5 种货品)
| 物品名称 | 规格 | 累计入库 | 累计出库 | 剩余库存 | 最低库存 | 状态 |
|---------|------|---------|---------|---------|---------|------|
| 米色T恤 | S/M/L | 60 | 35 | 25 | 20 | ✓ 正常 |
| 黑色外套 | M/L/XL | 23 | 5 | 18 | 15 | ✓ 正常 |
| 蓝色牛仔裤 | 28/30/32 | 0 | 0 | 0 | 15 | ⚠️ 低库存 |
| USB-C数据线 | 1m/2m | 200 | 100 | 100 | 50 | ✓ 正常 |
| 蓝牙耳机 | - | 10 | 0 | 10 | 10 | ⚠️ 低库存 |
⚠️ 低库存预警:2 种货品低于最低库存,建议及时补货按类别查询库存
你:服装类货品各有多少库存?
AI:服装类库存汇总
| 物品名称 | 剩余库存 | 最低库存 | 库存金额 |
|---------|---------|---------|---------|
| 米色T恤 | 25 件 | 20 件 | ¥1,250.00 |
| 黑色外套 | 18 件 | 15 件 | ¥3,600.00 |
| 蓝色牛仔裤 | 0 件 | 15 件 | ¥0.00 |
合计:43 件,库存金额 ¥4,850.00---
场景五:库存预警
手动触发低库存检测
你:检查一下哪些货品库存不足
AI:低库存预警报告
以下 2 种货品库存低于最低库存:
| 物品名称 | 当前库存 | 最低库存 | 缺少 | 单价 | 补货建议金额 |
|---------|---------|---------|------|------|------------|
| 蓝色牛仔裤 | 0 件 | 15 件 | 15 件 | ¥150.00 | ¥2,250.00 |
| 蓝牙耳机 | 10 件 | 10 件 | 0 件 | ¥299.00 | —(刚好到警戒线) |
建议及时补货。发送预警通知到飞书群
你:把低库存预警发送到仓库管理群
AI:✓ 已发送低库存预警到「仓库管理群」---
场景六:数据分析
本月入库汇总
你:本月入库情况怎么样?
AI:本月入库汇总
| 用途 | 入库次数 | 总数量 | 平均单价 | 总金额 |
|------|---------|--------|---------|--------|
| 采购 | 8 | 353 | ¥70.76 | ¥24,978.00 |
| 退货 | 2 | 5 | ¥180.00 | ¥900.00 |
| **合计** | **10** | **358** | | **¥25,878.00** |本月出库汇总
你:本月出库统计
AI:本月出库汇总
| 用途 | 出库次数 | 总数量 |
|------|---------|--------|
| 销售 | 12 | 280 |
| 领用 | 5 | 25 |
| **合计** | **17** | **305** |滞销分析
你:有哪些货品卖不动?
AI:滞销分析报告
以下货品的出库率为 0 或低于 20%:
| 物品名称 | 累计入库 | 累计出库 | 出库率 | 库存金额 | 建议 |
|---------|---------|---------|--------|---------|------|
| 蓝色牛仔裤 | 30 | 0 | 0% | ¥4,500 | 🔴 无出库记录,考虑促销清仓 |
| 蓝牙耳机 | 10 | 1 | 10% | ¥2,691 | ⚠️ 出库缓慢,建议加大推广 |
库存积压金额合计:¥7,191.00生成库存报表
你:帮我生成一份 4 月份的库存报表,保存为飞书文档
AI:正在汇总数据...
✓ 已生成飞书文档:库存报表 - 2026年4月
包含:货品清单、入库汇总、出库汇总、低库存预警---
场景七:供应商管理
新增供应商
你:新增供应商:深圳华创纺织,联系人张经理,电话13800138000,供应类别服装
AI:供应商创建成功!
供应商名称:深圳华创纺织
联系人:张经理
联系电话:13800138000
供应类别:服装
合作状态:合作中查看供应商列表
你:有哪些供应商?
AI:供应商列表(共 3 家)
| 供应商名称 | 联系人 | 联系电话 | 供应类别 | 合作状态 |
|-----------|--------|---------|---------|---------|
| 深圳华创纺织 | 张经理 | 138****8000 | 服装 | 合作中 |
| 东莞电子厂 | 李总 | 139****9000 | 电子产品 | 合作中 |
| 广州包装厂 | 王姐 | 137****7000 | 办公用品 | 暂停 |关联供应商到货品
你:把深圳华创纺织设为米色T恤和黑色外套的供应商
AI:✓ 已关联:
- 米色T恤 → 深圳华创纺织
- 黑色外套 → 深圳华创纺织---
场景八:创建库存看板
你:帮我创建一个库存看板
AI:正在创建仪表盘...
✓ 已创建仪表盘「库存看板」
包含以下组件:
- 库存总金额
- 本月入库金额
- 本月出库数量
- 低库存货品数量---
定时自动化
可以在 Claude Code 中配置定时任务自动执行库存相关操作:
每日低库存预警(工作日 9:00)
CronCreate: cron="0 9 * * 1-5", prompt="检查所有货品的库存状态,将低库存货品发送预警通知到仓库管理群", recurring=true每周库存报表(每周五 17:00)
CronCreate: cron="0 17 * * 5", prompt="生成本周的入库出库汇总报表,保存为飞书文档", recurring=true---
常用自然语言指令速查
| 你可以说 | AI 会做什么 |
|---|---|
| 创建进销存系统 | 初始化 Base + 4张表 + 字段 + 关联 + 公式 |
| 新增货品:XXX | 在台账表创建货品记录 |
| 修改XXX的最低库存为20 | 更新货品信息 |
| 入库:XXX 10件,单价50 | 创建入库记录,显示更新后库存 |
| 出库:XXX 3件,领用 | 校验库存 → 创建出库记录 |
| 查一下XXX的库存 | 查询单个货品库存详情 |
| 看看库存清单 | 显示全部货品库存表格 |
| 哪些货品库存不足 | 检测低库存货品 |
| 把预警发到XXX群 | 发送低库存通知到飞书群 |
| 本月入库汇总 | 按用途聚合统计入库数据 |
| 哪些货品卖不动 | 滞销分析 |
| 新增供应商:XXX | 创建供应商记录 |
| 创建库存看板 | 创建仪表盘和组件 |
---
与其他 Skill 的关系
- 数据层:依赖
lark-base(多维表格操作) - 通知层:依赖
lark-im(飞书消息发送) - 报表层:依赖
lark-doc(飞书文档生成) - 独立使用:不依赖其他工作流 Skill,可单独使用
进销存 ERP Skill 工作计划
一、项目概述
基于飞书多维表格(Bitable)构建一套轻量化进销存 ERP 系统,以 lark-cli workflow skill 的形式封装,用户通过自然语言即可完成货品管理、入库、出库、库存预警、数据分析等全流程操作。
核心原则:三张表跑通全流程(货品库存台账 + 入库表 + 出库表),通过关联字段、公式字段实现库存自动计算,零代码、多协同。
---
二、整体架构
lark-workflow-erp-inventory (Skill)
│
├── 数据层:飞书多维表格 (Bitable)
│ ├── 货品库存台账 (products) — SKU 主数据
│ ├── 入库记录表 (stock_in) — 入库流水
│ ├── 出库记录表 (stock_out) — 出库流水
│ └── 供应商表 (suppliers) — 供应商信息(扩展)
│
├── 计算层:公式字段 / Lookup 字段
│ ├── 剩余库存 = 累计入库 - 累计出库
│ ├── 库存预警 = IF(剩余库存 ≤ 最低库存, "低库存", "正常")
│ └── 货品关联(入库/出库 → 台账)
│
├── 交互层:用户自然语言指令
│ ├── "新建一个进销存系统" → 初始化 Base + 创建表结构
│ ├── "入库:米色T恤 10件" → 写入库记录
│ ├── "出库:米色T恤 3件" → 写出库记录(校验库存)
│ └── "查库存 / 库存报表" → 查询 + 聚合分析
│
└── 通知层:飞书消息 / 自动化
├── 低库存预警通知
├── 出库确认通知
└── 定期库存报表推送---
三、数据表设计
表 1:货品库存台账 (products)
| 字段名 | 类型 | 说明 |
|---|---|---|
| 物品编号 | 自动编号 | 唯一 ID(如 SKU-001) |
| 物品名称 | 文本 | 如 米色T恤 |
| 规格型号 | 文本 | 如 S/M/L/XL |
| 类别 | 单选 | 如 服装/电子产品/食品/其他 |
| 单位 | 单选 | 件/个/箱/套/kg |
| 最低库存 | 数字 | 低于此值触发预警 |
| 剩余库存 | 公式 | 累计入库数 - 累计出库数 |
| 库存状态 | 公式 | IF(剩余库存 ≤ 最低库存, "低库存", "正常") |
| 货品照片 | 附件 | 可选 |
| 供应商 | 关联 | 关联供应商表 |
| 单价 | 数字 | 采购单价 |
| 备注 | 文本 | 补充说明 |
| 创建时间 | 日期 | 系统自动生成 |
| 最后更新 | 日期 | 系统自动生成 |
表 2:入库记录表 (stock_in)
| 字段名 | 类型 | 说明 |
|---|---|---|
| 入库单号 | 自动编号 | 如 IN-20240101-001 |
| 关联物品 | 关联 | 单向关联 → 货品库存台账 |
| 物品名称 | Lookup | 通过关联自动带出台账中的物品名称 |
| 入库数量 | 数字 | 本次入库数量 |
| 入库单价 | 数字 | 本次采购单价 |
| 入库金额 | 公式 | 入库数量 × 入库单价 |
| 供应商 | 文本 | 供应商名称 |
| 入库人 | 人员 | 操作人 |
| 入库日期 | 日期 | 默认当天 |
| 用途/来源 | 单选 | 采购/退货/调拨/盘盈/其他 |
| 备注 | 文本 | 补充说明 |
表 3:出库记录表 (stock_out)
| 字段名 | 类型 | 说明 |
|---|---|---|
| 出库单号 | 自动编号 | 如 OUT-20240101-001 |
| 关联物品 | 关联 | 单向关联 → 货品库存台账 |
| 物品名称 | Lookup | 通过关联自动带出台账中的物品名称 |
| 出库数量 | 数字 | 本次出库数量 |
| 领用人 | 人员 | 领取人 |
| 出库日期 | 日期 | 默认当天 |
| 用途 | 单选 | 销售/领用/调拨/盘亏/其他 |
| 备注 | 文本 | 补充说明 |
表 4:供应商表 (suppliers)(扩展)
| 字段名 | 类型 | 说明 |
|---|---|---|
| 供应商名称 | 文本 | 如 深圳XX纺织厂 |
| 联系人 | 文本 | 对接人姓名 |
| 联系电话 | 文本 | 联系方式 |
| 地址 | 文本 | 供应商地址 |
| 供应类别 | 单选 | 供应的货品类别 |
| 合作状态 | 单选 | 合作中/暂停/终止 |
| 备注 | 文本 | 补充说明 |
---
四、核心功能清单
Phase 1:系统初始化(搭建基础)
| # | 功能 | 用户指令示例 | 实现方式 |
|---|---|---|---|
| 1.1 | 创建进销存 Base | "帮我创建一个进销存系统" | base +base-create 创建新的多维表格 |
| 1.2 | 创建货品台账表 | (初始化自动执行) | base +table-create + 定义字段 |
| 1.3 | 创建入库记录表 | (初始化自动执行) | base +table-create + 定义字段 |
| 1.4 | 创建出库记录表 | (初始化自动执行) | base +table-create + 定义字段 |
| 1.5 | 创建供应商表 | (初始化自动执行) | base +table-create + 定义字段 |
| 1.6 | 创建关联字段 | (初始化自动执行) | 入库/出库表的"关联物品"字段 |
| 1.7 | 创建 Lookup 字段 | (初始化自动执行) | 自动带出物品名称 |
| 1.8 | 创建公式字段 | (初始化自动执行) | 剩余库存、库存状态、入库金额 |
| 1.9 | 配置仪表盘 | "生成库存看板" | base +dashboard-create + blocks |
Phase 2:日常操作(核心流程)
| # | 功能 | 用户指令示例 | 实现方式 |
|---|---|---|---|
| 2.1 | 新增货品 | "新增货品:米色T恤,规格S/M/L,最低库存5" | base +record-upsert → products 表 |
| 2.2 | 货品入库 | "入库:米色T恤 10件,单价50" | base +record-upsert → stock_in 表 |
| 2.3 | 货品出库 | "出库:米色T恤 3件,用途领用" | 先校验库存 → base +record-upsert → stock_out 表 |
| 2.4 | 出库校验 | (出库时自动触发) | 检查剩余库存 ≥ 出库数量,不足则拦截 |
| 2.5 | 查询库存 | "查一下米色T恤的库存" | base +record-list / +record-get → products 表 |
| 2.6 | 全量库存清单 | "看一下所有货品库存" | base +record-list → products 表 |
| 2.7 | 入库记录查询 | "查一下最近的入库记录" | base +record-list → stock_in 表 |
| 2.8 | 出库记录查询 | "查一下最近的出库记录" | base +record-list → stock_out 表 |
Phase 3:库存预警与通知
| # | 功能 | 用户指令示例 | 实现方式 |
|---|---|---|---|
| 3.1 | 低库存检测 | "检查有没有低库存的货品" | 查询 products 表,过滤库存状态="低库存" |
| 3.2 | 预警消息推送 | "发送库存预警通知" | im +messages-send 发送到指定群 |
| 3.3 | 出库确认通知 | "出库后通知领用人" | 出库完成后自动发送飞书消息 |
| 3.4 | 定期库存报表 | "生成本月库存报表" | +data-query 聚合 → 生成文档/消息 |
Phase 4:数据分析
| # | 功能 | 用户指令示例 | 实现方式 |
|---|---|---|---|
| 4.1 | 入库汇总 | "本月入库总计多少件/多少钱" | base +data-query SUM 聚合 |
| 4.2 | 出库汇总 | "本月出库最多的货品是哪些" | base +data-query GROUP BY + SUM |
| 4.3 | 库存周转分析 | "哪些货品滞销了" | 出库量排序 / 零出库筛选 |
| 4.4 | 库存报表生成 | "生成库存报表" | 聚合数据 → docs +create 飞书文档 |
| 4.5 | 仪表盘看板 | "创建库存看板" | base +dashboard-create + 多个 block |
Phase 5:供应商管理(扩展)
| # | 功能 | 用户指令示例 | 实现方式 |
|---|---|---|---|
| 5.1 | 新增供应商 | "新增供应商:深圳XX纺织厂" | base +record-upsert → suppliers 表 |
| 5.2 | 查询供应商 | "查一下所有供应商" | base +record-list → suppliers 表 |
| 5.3 | 关联供应商 | "把米色T恤关联到XX纺织厂" | 更新 products 表的供应商关联字段 |
---
五、实施步骤
Step 1:Skill 框架搭建
文件路径:.claude/skills/lark-workflow-erp-inventory/SKILL.md
1. 编写 SKILL.md 前置条件(依赖 lark-shared、lark-base) 2. 定义 skill 的 description(触发关键词) 3. 编写适用场景列表 4. 定义整体工作流架构图
Step 2:初始化流程实现
1. 编写 创建进销存系统 的完整命令序列 2. 4 张表的 +table-create 命令(含字段定义 JSON) 3. 关联字段、Lookup 字段、公式字段的创建步骤 4. 限流处理策略(字段创建间隔 1-2 秒) 5. 错误处理与降级策略
Step 3:日常操作流程实现
1. 新增货品流程 2. 入库流程(含单价、金额计算) 3. 出库流程(含库存校验逻辑) 4. 查询流程(库存/入库记录/出库记录) 5. 货品信息修改流程
Step 4:预警与通知流程
1. 低库存检测逻辑 2. 预警消息格式定义 3. 飞书消息推送命令 4. 出库确认通知 5. 定期报表生成
Step 5:数据分析流程
1. 入库/出库汇总的 +data-query DSL 2. 库存周转分析逻辑 3. 报表文档生成模板 4. 仪表盘配置命令
Step 6:供应商管理(扩展)
1. 供应商 CRUD 操作 2. 供应商-货品关联 3. 供应商供货统计
Step 7:测试与优化
1. 完整流程端到端测试 2. 错误场景覆盖 3. 用户体验优化(指令匹配、错误提示) 4. 性能优化(批量操作、分页处理)
---
六、关键技术点
1. 库存计算(公式字段)
剩余库存 = 入库汇总数 - 出库汇总数
实现方式:
- 入库表:关联字段(→台账) + 数量字段
- 出库表:关联字段(→台账) + 数量字段
- 台账表:公式字段 = SUMIF(入库表.关联物品=当前记录, 入库数量) - SUMIF(出库表.关联物品=当前记录, 出库数量)2. 关联字段配置
入库表.关联物品 → type="link", foreign_table="products"
出库表.关联物品 → type="link", foreign_table="products"3. Lookup 字段配置
入库表.物品名称 → lookup from stock_in.关联物品, select products.物品名称
出库表.物品名称 → lookup from stock_out.关联物品, select products.物品名称4. 出库校验逻辑
出库前校验:
1. 获取物品当前剩余库存(从台账表读取)
2. 比较:剩余库存 >= 出库数量 ?
3. 不足 → 提示用户并中止
4. 充足 → 执行出库记录写入5. 限流与分页
- +table-create 后等待 1 秒再创建下一张表
- +field-create 每次间隔 1-2 秒
- +record-list 每页最多 200 条,用 offset 分页
- +record-upsert 串行写入,间隔 0.5-1 秒
- +xxx-list 类命令禁止并发---
七、依赖关系
lark-workflow-erp-inventory
├── lark-shared — 认证、权限、基础配置
├── lark-base — 多维表格原子操作(表/字段/记录/公式/Lookup/仪表盘)
├── lark-im — 飞书消息推送(预警通知)
└── lark-doc — 飞书文档创建(报表生成)所需权限 (scope)
| scope | 用途 |
|---|---|
bitable:app | 创建/管理多维表格 |
bitable:app:readonly | 读取表数据 |
im:message:send_as_bot | 发送预警消息 |
docx:document:create | 创建报表文档 |
---
八、Skill 触发关键词设计
description: >
进销存ERP系统:基于飞书多维表格实现货品管理、入库、出库、库存预警、数据分析。
当用户需要以下操作时触发:
- 系统搭建:"创建进销存系统"、"搭建库存管理"、"新建进销存"
- 货品管理:"新增货品"、"添加SKU"、"货品列表"、"修改货品"
- 入库操作:"入库"、"进货"、"采购入库"、"登记入库"
- 出库操作:"出库"、"领用"、"发货出库"、"登记出库"
- 库存查询:"查库存"、"库存清单"、"剩余多少"、"库存不足"
- 库存预警:"低库存预警"、"库存报警"、"缺货提醒"
- 数据分析:"入库汇总"、"出库统计"、"库存报表"、"滞销分析"、"库存周转"
- 供应商管理:"新增供应商"、"供应商列表"、"供货商"
- 仪表盘:"库存看板"、"创建仪表盘"---
九、预期交付物
| # | 交付物 | 文件路径 |
|---|---|---|
| 1 | Skill 主文件 | .claude/skills/lark-workflow-erp-inventory/SKILL.md |
| 2 | 状态存储配置 | Skill 内置(使用 Bitable 作为状态存储) |
注:本 Skill 完全基于已有的 lark-cli base 原子命令封装,无需新增 CLI 命令。状态存储复用多维表格本身,无需额外的持久化机制。
---
十、风险与应对
| 风险 | 影响 | 应对策略 |
|---|---|---|
| 公式字段创建依赖字段 ID | 初始化流程复杂 | 先建存储字段,获取字段 ID 后再创建公式字段 |
| 字段创建限流 | 初始化可能部分失败 | 串行创建 + 间隔 1-2 秒 + 失败重试补字段 |
| 关联字段类型约束 | Lookup 依赖关联先建好 | 严格按顺序:存储字段 → 关联字段 → Lookup → 公式 |
| 大批量数据操作 | 请求超时/限流 | 分批处理,每批 ≤ 50 条,间隔 1 秒 |
| 并发操作冲突 | 数据不一致 | 所有写操作串行执行 |