Files
ctbjrj/ai助手/zcode预置/skills/dqb-daoru-baojia/SKILL.md
T

6.2 KiB
Raw Blame History

name, description
name description
dqb-daoru-baojia 成套报价软件"导入报价"技能——把用户拖进 AI 助手对话框的甲方报价 Excel(.xlsx)由 AI 看表确定列含义后导入当前项目。当用户说"导入报价""把这个报价表/Excel导进去""解析这份报价单并导入""拖给你的报价文件帮我导一下""这是甲方报价,导入软件"等,或用户直接拖入一个报价 .xlsx 文件要求处理时使用。AI 负责:看表(excelgrid)→确定每列是柜号/名称/型号/单位/数量(mapping)→预览→用户确认后导入;软件负责按映射确定性解析、事务落库和界面刷新(与软件"导入报价"按钮同源)。

报价表拖入导入(AI 看表定列 → 软件同源解析落库)

不同甲方的报价表样千差万别(列位漂移、sheet 名不同、有无规格列……)。 本技能让 AI(LLM) 看表判断结构,软件按 AI 给出的列映射确定性解析+事务落库—— 数据不经过 AI 转写,不会错位。软件端与手工点"导入报价"按钮 100% 同一条管线。

铁律

  1. 必须先预览,用户明确确认后才 --exec 真导入;禁止拿到文件直接导入。
  2. 路径必须用用户拖入文件的真实绝对路径(会话中附件给出的本地路径,原样使用;含空格/中文要加引号)。
  3. 只支持 .xlsx;.xls 老格式让用户先用 Excel 另存为 .xlsx。
  4. 不要自己读 Excel 内容/手工转写数据——AI 只看表头定列,行数据全部由软件按映射解析。
  5. 导入是追加,不是覆盖,软件有防重复拦截:预览响应里的 existing 非空 = 项目里已有同名图号 (这份文件很可能导入过)。此时必须先把 existing 清单亮给用户,说明"再导会产生双份数据", 并问用户怎么办:同一份报价就不要再导 / 用户在软件里删掉旧图号后再导 / 用户明确同意重复才可加 --allow-duplicate。软件在重名时会直接拒绝 --exec(duplicate 拦截),不要反复重试。
  6. 不执行任何直接 SQL;一切走脚本(已封装 /api/excelgrid 与 /api/importquote)。

前置自检(第一步必做)

TOKEN=$(cat ~/.zcode/chengtao/token.txt)
curl -s "http://127.0.0.1:18790/api/xuanxing?token=$TOKEN"
  • 返回 ok:false 且含"没有打开项目"→ 请用户先在软件项目列表双击进入项目。
  • 读不到令牌/端口不通 → 软件没运行,请用户先打开成套报价软件(daoru.js 会自动扫 18790~18799)。

工作流(四步)

① 看表:列出工作表 → 看表头网格

node "<本技能目录>/daoru.js" "<拖入xlsx绝对路径>" --grid
node "<本技能目录>/daoru.js" "<同一个xlsx绝对路径>" --grid "屏柜汇总表" 14
node "<本技能目录>/daoru.js" "<同一个xlsx绝对路径>" --grid "屏柜分项表" 14

输出带行号/列号的网格文本。AI 据表头文字判断:哪个 sheet 是箱柜汇总、哪个是元件明细、 每列是什么(柜号/箱柜名称/型号/单位/数量…)、数据从哪行开始。

② 定列:写 mapping.json

根据①看到的表头写映射文件(0 基列号;该表没有的列写 -1):

{
  "summarySheet": "屏柜汇总表",
  "detailSheet": "屏柜分项表",
  "summary": { "seq": 0, "cabinet": 1, "name": 2, "model": 3, "spec": -1, "unit": 4, "qty": 5 },
  "detail":  { "seq": 0, "name": 1, "spec": 2, "unit": 3, "qty": 4, "price": 5, "amount": 6, "vendor": 7 }
}
  • summary 键:seq序号 cabinet柜号 name箱柜名称 model型号 spec规格 unit单位 qty数量
  • detail 键:seq序号 name元件名称 spec型号规格 unit单位 qty数量 price单价 amount金额 vendor厂家
  • 逐列核对:以表头文字为准,不要套用默认列号(例:有的表"单位"在 E 列=4,有的在 F 列=5)。
  • 特例免 mapping:sheet 名为"设备汇总表/设备明细表"(正泰识图格式)时软件自动识别,直接走③。

③ 预览(不落库)

node "<本技能目录>/daoru.js" "<xlsx绝对路径>" --mapping "<mapping.json路径>"

输出:图号数、箱号数、元件总数,每个图号下的箱柜清单(柜号、箱名、型号、单位、数量、元件条数)。 AI 要抽查核对:拿网格里看到的某台柜(如 G1 高压进线柜 单位=台 数量=1)与预览输出对得上才算数; 对不上说明列映射错了,回①重新看表改 mapping。

④ 用户确认后真导入

用户明确回复"导入/确认/可以"后:

node "<本技能目录>/daoru.js" "<同一个xlsx绝对路径>" --mapping "<mapping.json路径>" --exec

成功输出:✅ 报价已导入当前项目:图号 N 个、箱号 N 个、元件 N 条;软件界面已自动刷新。 导入完成后软件自动保存未完成编辑、清缓存并重算汇总,不需要再做任何刷新操作。

汇报格式建议

📄 已看表并解析报价表:<文件名>
列映射:汇总表"单位"=E列、"数量"=F列(按实际表头判断)
识别到:图号 N 个 / 箱柜 N 台 / 元件 N 条
1. <图号名>(M 台)
   - G1 高压进线柜 HXGN-12(1台,元件 n 条)
   - …
⚠️ 导入是追加式,重复导入会产生重复数据。
尚未导入,确认导入吗?

完成:

✅ 已导入:图号 N 个、箱柜 N 台、元件 N 条,软件界面已自动刷新。

排错

现象 处理
文件不存在 确认拖入文件路径是否可访问,请用户重新拖入
仅支持 .xlsx .xls → Excel 另存为 .xlsx;其他格式(csv/pdf/图片)不走本技能
当前没有打开项目 请用户双击进入项目后再说"继续导入"
预览 0 图号/箱号 或 数量明显不对 列映射错位——回①重新看表头,逐列核对 mapping 后再预览
预览/导入出现 existing 或 ⛔duplicate 项目里已有同名图号(文件可能导过)——按铁律5:亮出清单问用户,绝不默默重复导入
sheet 名不含"汇总/分项"字样 看表判断哪个 sheet 是箱柜清单、哪个是元件明细,把真实 sheet 名写进 mapping
找不到接口 软件未运行;启动软件并进入项目后重试