一座桥,从图纸到通车 — AutoCount × QianYi WMS 集成插件 / Melodies Distributors
美乐蒂公司电脑(本地) 中国厦门(云端)
┌──────────────────────┐ ┌──────────────────────┐
│ AutoCount │ │ 千一 WMS │
│ (会计 + 进销存软件) │ │ (仓库管理系统) │
│ │ ┌──────────────────┐ │ │
│ • 采购单 (PO) │◄──│ WMS Sync Hub │──►│ • 仓库拣货任务 │
│ • 拣货单 (Picking) │ │ 插 件 │ │ • 收货 / 入库记录 │
│ • 商品编码 (SKU) │──►│ (Prisma 制作的桥)│◄──│ • 库存数量状态 │
│ • 收货记录 (GRN) │ └──────────────────┘ │ │
└──────────────────────┘ ngrok 隧道 └──────────────────────┘
账目在这里 (让云端能访问本地电脑) 仓库动作在这里
三句话版本:
- 美乐蒂用 AutoCount(账目软件,记录所有进货、出货、库存)管财务,用 千一 WMS(仓库管理系统)管仓库实体操作。
- 两个系统原本"不认识"对方,每笔数据都要工人手动录入两遍,费时又容易出错。
- Prisma 做的 WMS Sync Hub 插件(一个让两套系统自动互相说话的翻译程序),就是这道故事的主角。
| 时间 | 里程碑 | 状态 |
|---|---|---|
| 2024 年底 | Prisma 完成 SME Corp 数字化项目,赢得 Derrick(老板)信任 | ✅ |
| 2026 年 1 月 | 选定千一 WMS;Prisma 受委托做 AutoCount 对接插件 | ✅ |
| 2026 年 3 月 19 日 | 正式签约 PQ-260203,金额 RM 13,900 | ✅ |
| 2026 年 5 月 4 日 | WMS Sync Hub v1.6.5 上线(支持一张采购单分批收货) | ✅ |
| 2026 年 5 月 5 日 | 🔴 BUG-001 爆发 → v1.6.6 1 小时内修复 | ✅ |
| 2026 年 5 月 18 日 | 第二期签约:Purchase Return 模块 RM 8,000 | ✅ |
| 2026 年 5 月 19 日 | v1.6.9 上线:Cancel 操作加审计日志 | ✅ |
| 2026 年 7 月 14 日 | 系统更新:修复 3 个操作问题 | ✅ |
| 2026 年 7 月 21 日 | Purchase Return 培训完成(3 人参与) | ✅ |
| 2026 年 7 月 22 日 | 🟢 Purchase Return 模块正式上线 | ✅ |
| 幕 | 一句话总结 | 适合谁看 |
|---|---|---|
| 第一幕 | 美乐蒂是谁、做什么生意 | 第一次听说这个客户 |
| 第二幕 | 仓库系统瘫痪,工人回到手写时代 | 想知道问题有多严重 |
| 第三幕 | 选千一 WMS,但它不认识 AutoCount | 想知道为什么要做这个插件 |
| 第四~六幕 | 报价、开发、上线 | 想了解做了什么 |
| 第七幕 ⭐ | 🔴 Derrick 录音:"一小时解决,否则弃用 WMS" | 想看最刺激的那一段 |
| 第八幕 | 事故分析,5 个待办,真正的教训 | 想知道出了什么事、怎么收尾 |
| 第九幕 | "不是插件的锅"——人改单才是根因 | 想知道事故后发生了什么 |
| 第十幕 | Purchase Return 模块签约 RM 8,000 | 想了解第二期业务 |
| 第十一幕 | 9 台 PDA 到位,系统平稳运行两个月 | 想知道日常运作情况 |
| 第十二幕 | 三个小问题,四天解决 | 想看日常 troubleshooting |
| 第十三幕 | DOB 集成被 HRDF 证书卡住 | 想了解为什么 DOB 还没好 |
| 第十四幕 | Purchase Return 培训成功举行 | 想看第二期交付的节点 |
| 第十五幕 | 模块上线;Mr Lee 新需求浮出 | 最新进展 |
在柔佛乌鲁地南(Ulu Tiram)的 Taman Perindustrian Cemerlang 工业区里,有一间叫做 Melodies Distributors(美乐蒂)的公司。
这不是什么小店。他们是 柔佛州数一数二的 FMCG 快消品批发商,1999 年就注册了(SSM: 0476474-M),做了超过 25 年的批发生意。
他们批发什么?——日用品、纸巾、打火机、火柴、罐头食品、汽水饮料、各种杂货。总之,你在便利店、杂货铺看到的那些日常用品,很多就是从美乐蒂的仓库发出去的。
老板叫 Derrick Teo(张远居),在 Ulu Tiram 和 Masai(士年纳)各有一个仓库据点。每天的运营节奏是这样的:
早上——几十辆供应商的货车排队送货,仓库工人验货、扫描、入库、上架。
下午——几百张零售商的订单涌进来,拣货、打包、装车、派送。
每天——成千上万个 SKU(商品编码,每种商品的唯一编号,比如"可口可乐 355ml 罐装"是一个 SKU,"可口可乐 500ml 瓶装"是另一个)在仓库里流转——不同品牌、不同规格、不同批次的牙膏、洗发水、纸巾、可乐……
对于一个 FMCG 批发商来说,仓库就是心脏。心脏跳得快不快、稳不稳,直接决定了公司能不能准时出货、能不能少出错、能不能赚钱。
问题是——美乐蒂的仓库"心脏",出事了。
他们之前有一套 WMS(仓库管理系统),但这套系统已经全面瘫痪:
想象一下:一个每天要处理几百张订单的批发商,仓库系统完全瘫痪。这意味着什么?
手写。回到手写时代。
工人拿着纸和笔记录收货,拿着纸和笔核对拣货单,拿着纸和笔登记出库。效率暴跌,错误率飙升。送错货、漏发货、库存对不上——这些问题天天在发生。
Derrick 急了。他需要一套新的 WMS,而且要快。
Derrick 找到了 Prisma Technology。
其实两家公司是老交情了——2024 年底,Prisma 刚帮美乐蒂做完一个 SME Corp 政府数字化项目(SCM 供应链系统 + CRM 客户管理 + AI 聊天机器人),通过了政府审计。所以 Derrick 信任 Prisma。
Jay(Prisma 创始人)做了调研,带着团队去实地考察。他们研究了一套中国产的网页版 WMS——千一 WMS(QianYi WMS),功能很全:入库、出库、库存盘点、多仓管理,什么模块都有。
Prisma 也提了自己的方案:我们帮你定制一套 WMS,买断制,一次付清。
但 Derrick 的选择很务实:
对于一个仓库已经瘫痪、每天都在亏效率的批发商来说,"快"比"完美"重要一万倍。
所以 Derrick 选了千一。
但千一有一个致命的短板——它不支持 AutoCount。
美乐蒂用了很多年的 AutoCount 会计系统来管采购单、销售单、物料编码、财务账目。千一 WMS 管仓库,AutoCount 管账目——这两套系统之间,没有任何桥梁。
Derrick 也看过另一个供应商,但那家网站打不开,后来说太忙了没法支持。
这时候 Jay 说了一句话,直接定义了这个项目:
2026 年 3 月 19 日,Dhai(Prisma 的技术负责人)签署了正式报价单 PQ-260203,报价给 Mr. Wong(美乐蒂的技术负责人):
| 项目 | 金额 |
|---|---|
| AutoCount 拣货 & 收货集成插件(对接千一 WMS) | RM 12,000 |
| 物料编码同步(AutoCount → WMS,单向) | RM 1,500 |
| ngrok API 公网暴露(年费) | RM 400 |
| 总计 | RM 13,900 |
附带 6 个月售后支持 + 4 小时培训。客户已经接受并付款。
报价单上写了三个流程,对应三个最直白的画面:
那条看不见的隧道叫 ngrok(一种网络工具,作用是给装在公司内部电脑里的软件"开一扇网络窗户")。AutoCount 装在美乐蒂公司的本地电脑上,外网访问不到;千一 WMS 在中国厦门,是公网云端的系统。ngrok 在美乐蒂电脑上"打了一个洞",让远在中国的千一 WMS 可以通过这个洞"打电话"进来。
项目看起来结构清晰、范围明确。但真正的挑战,往往藏在报价单写不到的地方。开发前,我们列了七块暗礁——其中有几块,后来真的撞上了。
四月、五月初,桥一段一段地通车了。
到这个时候,桥看起来已经稳了。办公室和仓库说同一种语言。Derrick 的批发业务每天数百单的吞吐量在新系统上跑得起来。
但桥真正的考验,从来不是通车那天,而是通车之后第一次堵车的时候。
那一次,发生在 2026 年 5 月 5 日的早上。
📖 前情提要:第一至六幕发生了什么?
如果你是第一次看这个故事,或者已经忘了前面,这里是五分钟速成版:
美乐蒂(Melodies Distributors) 是柔佛数一数二的日用品批发商,每天发出几百张零售订单。老板叫 Derrick Teo。
他们的仓库系统彻底坏了——入库功能坏、出库功能坏、手持扫描枪也报废了。工人只好回到纸和笔记录货物的时代,每天出错不断。
Derrick 选了来自中国的 千一 WMS(仓库管理系统,就是管理仓库所有货物进出的电脑程序)来救场。但千一不认识他们用了多年的 AutoCount(一款马来西亚常用的账目软件,记录公司所有的进货、出货、库存、账目)。两套系统各管各的,数据还是要工人手动录入两遍。
Prisma Technology 的 Jay 说了一句话定义了这个项目:
"不管你找谁做 WMS,到头来都得跟 AutoCount 对接。"Prisma 的 Dhai(技术负责人)花了两个月做出 WMS Sync Hub 插件(一个安装在 AutoCount 里的小程序,让两套系统自动互相说话),负责三件事:① 拣货单自动从 AutoCount 推到仓库工人的手机扫描枪 ② 供应商送货时自动生成收货记录回传 AutoCount ③ 新商品编码自动同步两边。报价 RM 13,900,签约了。
5 月 4 日,v1.6.5 上线。
接下来:上线的第二天早上,麻烦来了。
5 月 5 日清晨,柔佛还在睡。Melodies 的 WhatsApp 群"Integration (Wms x Melodies x Autocount)"忽然热闹起来。
01:21(UTC+8 上午 9:21),Derrick 在群里第一次发声:
"是不是 overnight 就会被 cancel?"
"昨天他们 import 进 DMS 做到晚上,结果今天取消了,又叫我们重新做过。"
"不可以用系统 call 回拯救?"
仓库的 Melodies staff 7391 跟着补刀:
"照着流程去 pick 货,是什么情况这个单会 close 呢?"
千一支持那边一开始的判断是"人为取消"——AutoCount 后台有人按了取消。但当 7391 解释清楚——"我们手动导入进去的是另一块文件(这个没有做 AutoCount 推送),所以我们手动去 OMS 操作,有自动推送的是 PICKLIST"——案情就开始拐弯了。
01:50,Derrick 录了一段 11 秒的语音说得更清楚:"我们刚才是重新导入新的,不是昨天那些新的,今天新的。刚刚导入也是不能,也是 cancel。"
紧接着又补一段 15 秒:"我们现在遇到问题的不是 Picking List 做好 Integration 的那一个部分哦。我们是有 DOB 的东西的,DOB 的东西 Integration 还没有做好,所以 DOB 的我们是 Manual 导入进去的,现在 Manual 导入进去的不能用。"
02:05,7391 录了一段 72 秒的关键语音,把现象说穿了:
"WMS 有给我们就是可以用 Almond S 的方式自己把那个订单导入进去嘛。然后 LS 这个公司的话我们还是用这个操作……可是同时我们也是有用这个 OMS 一起把另外一张单进来,可是一进来它就马上 close 掉了……LS 这边是没有问题的,可是美乐这边一进来就 close,不到一秒就 close 了,我完全做不到订单。"
紧跟着:
"所以这个东西会影响到我们这边吗?因为 LS 没有问题,因为 LS 没有 plugin integration,可是美乐有 plugin integration,自己手动去 OMS 进的单都会帮我自己 close、自己 cancel。"
这一句话把问题指了名。有插件的租户出问题,没插件的租户没事。问题就在我们这座桥上。
02:10,Derrick 又一段 37 秒的语音——这是整个事件最重的一段:
"这个问题可以帮我们赶一下,因为昨天已经一整天没有试货了,已经没有出货了,然后今天再不出货,顾客就不能够接受了。所以 Warehouse 他们要运作,我跟他们说给我们多一个小时——一个小时里面解决了,如果没有解决的话,他们又会放弃开跑这个 WMS。我们周末点的货全部都报废了。"
一个小时。仓库要弃用 WMS 的一个小时倒数计时已经按下去了。
02:13,Derrick 直接 @ Dhai:"kindly check if your integration affect or not"。
02:13,Dhai 一个字回过去:"Checking"。
02:15,千一支持给出了一个具体单号:"800286103"。
02:18,Dhai 反问:"800286103 的 picking list no 是什么"。
02:27,Melodies 3948 答:"没有 picking list,做不到 picking list 的。所以我们才会用手动上传的方式。"
02:27,Dhai:"明白"。
那两个字背后是 root cause 已经被锁定。
我们这座桥的对账逻辑(英文叫 reconciliation,就像你每月核对银行账单,把两边的记录比对一遍找出差异)是这么写的:定时拉取全部的 WMS 订单,跟 AutoCount 的状态对一遍,对不上的——比如 WMS 里有但 AutoCount 里没有的——就当成"该取消"的处理。
听起来合理。但 5 月 5 日的清晨揭穿了一件事:WMS 里的订单不止来自一条路。
| 路径 | 描述 | AutoCount 那边有没有记录? |
|---|---|---|
| Path A | AutoCount 开拣货单 → 插件推送 → 千一 WMS | 有 |
| Path B | DOB 类订单(AutoCount 不开拣货单)→ 员工手动导入 OMS 模板 → 千一 WMS | 没有 |
| Path C | 仓库工人直接在千一 WMS 界面上手动建单 | 没有 |
旧版本的对账逻辑只懂 Path A。Path B 和 Path C 的订单——它们在 AutoCount 里"找不到",于是被插件标记成"该取消",一秒之内自己被自己 cancel 掉。订单 800286103,以及 5 月 4 日深夜批量导入的那一整批,就是这么没的。
02:35,Dhai 在群里发了一段最关键的话:
"非常抱歉造成不便 🙏
WMS Sync Hub v1.6.6 已经更新好。
之前那批被误取消的 WMS 订单(800286103 等),是因为 plugin 检测 AutoCount 跟 WMS 两边状态对不上时,误把外部的订单也当成"该取消"的处理。
新版本已经修好……plugin 现在只会处理它自己推到 WMS 的订单,不会动你那边在 WMS 自己建的或其他来源的单。
再次抱歉,谢谢你的耐心 🙏"
修复的核心很短一句话:对账范围 = 插件自己推过的订单,仅此而已。插件不再当 WMS 的霸主,它只管自己的孩子。
Jay 隔了一分钟跟一句:"麻烦测试了让我们知道🙏🏼"。
02:37,Derrick 抱着最后一点侥幸问千一支持 Ethan:"可以不可以帮我们按掉症?取消,我们就不用重新再导入,可以吗?"
02:38,Ethan 回:"这个不行,只能重新导入或者重新从 AutoCount 下发。"
被取消的订单救不回来。800286103 那一批,只能按千一支持发的模板格式重新导入一遍,从头跑。
桥没塌——但桥上掉下去的那一车货,找不回来了。
v1.6.6 上线了。Derrick 那"一个小时倒数"挡住了。但事情远没结束。
桥要继续加固,留下五件待办(详见 06-next-actions.md):
| # | 待办 | 谁来做 |
|---|---|---|
| F1 | 把 800286103 和 5 月 4 日深夜那批订单重新导入或从 AutoCount 重新下发——按千一支持给的模板格式 |
Melodies + 千一 |
| F2 | 把 Path A / B / C 三条路写成 SOP,让 Melodies 员工不再混淆"自动推送的"和"手动导入的" | Prisma(Dhai/Jay) |
| F3 | 跟千一一起,把 DOB 这类目前不在 AutoCount 自动推送范围内的订单类型梳理出来,单独估价当 Phase 2 | 千一 + Prisma |
| F4 | 端到端验证 v1.6.6 的对账范围过滤——从 AutoCount 推一张、在 WMS 手动建一张、跑对账、确认手动那张不被取消 | Prisma(Dhai) |
| F5 | 把 07-system-analysis.md 的订单流程图跟新的 12-architecture-diagram.md 对齐——12 是权威 |
Prisma |
这场事故留下来的真正教训,不是某一行代码。
是这座桥从来不只走一条路。Path A 是我们设计的路,Path B 和 Path C 是客户原本就在走的路。一座桥要安全,必须看得见所有进入它的路口,包括那些它"不打算管"的路口——尤其是那些路口。
Melodies 跟 Prisma 的关系,靠的是 2024 年那个 SME Corp 项目结结实实做完的信任。今天早上 02:10 那 37 秒的语音,把这份信任放在了刀尖上。v1.6.6 把它接住了。
但只要 Path B、Path C 在生产里还会再悄悄断一次,这份信任就会再被放回刀尖。
所以 F4 不能拖。F2 不能拖。F3 越早跟客户对齐越好——客户已经在催 DOB 自动化了。
桥还在原地。从图纸到通车,再到第一次堵车之后还能继续跑——这才是 Melody 项目真正的故事。
下一章,由下一次报警的人来续。
📖 前情提要:第七至八幕发生了什么?
2026 年 5 月 5 日早上,仓库工人发现导入的订单一进系统就自动被"取消"了。
根因(通俗解释):插件的"核对逻辑"是这样设计的——定时把千一 WMS 里的所有订单拿出来,跟 AutoCount 那边核对一遍,如果千一里有一张订单但 AutoCount 那边查不到对应记录,插件就认为"这张单是多出来的,应该取消",然后帮你取消掉。
听起来合理。但它忽略了一件事:WMS 里的订单不是只从一个地方来的。 除了 AutoCount 推过来的,还有员工手动导入的"DOB 订单",以及仓库工人直接在系统里建的单。这两类订单,AutoCount 那边根本没有记录——于是插件把它们全当成"多余的",在不到一秒内自动取消了。
就像一个机器人保安,把所有"进门时没刷主门卡"的人都赶出去——但其实有些人走的是侧门,有合法通行证,只是保安不认识那道门。
Derrick 录了一段 37 秒语音,内容是:"给我们一个小时。一小时内解决了就继续用 WMS,解决不了,仓库就放弃 WMS。"
Prisma 的 Dhai 在 1 小时内 修复并上线 v1.6.6:插件只核对"自己推过去的订单",不再管其他来源的单子。事故平息,但被误取消的订单找不回来了,只能重新导入一遍。
v1.6.6 把那一个小时倒数挡下来之后,群里没有再安静。桥还在跑,每天都有新的小石子从车轮底下蹦出来。两个礼拜下来,故事从"插件可不可靠",悄悄变成了"人在桥上干了什么"。
5 月 6 日——一个新症状冒头。 Malvyn 在群里发图:"没有 order 的货,也 scan 进去了"——仓库 checker 扫到了系统里根本不存在订单的货。一开始所有人都怀疑是不是插件又乱来了。
5 月 7 日——PDA 扫描枪事件。 新到的手持扫描枪扫不出 2D 条码。千一一句话切中:"卸载重装试下 安装的时候所有权限要都给"。同一天 Malvyn 下单 9 台 PDA(8+1 备用) ——硬件铺开的节奏起来了。
5 月 8 日——5 月 6 日那个症状的真相。 群里有人把诊断写明白:"可能是有人在 import 進去了 wms 後又在 autocount 那邊改單……可以去 autocount 的 audit trail 那裡 key in 那個 purchase return 的單號查一查"。AutoCount 的审计日志最后揭出了凶手——是用户 CHOOML 和 CHANWL,在 WMS 已经导入之后,又跑去 AutoCount 手动改单。换句话说:不是插件的错,是人在桥上偷偷改路标。 这一发现,等同于把 F4 那块石头从心口卸了下来——v1.6.6 的对账范围过滤一直在守着,问题出在桥的范围之外。
同一天,群里也补了一条 PDA SOP:拣货拣到一半要退出怎么办?"要退出,就是 back,然后随便选一个号码,按 confirm"。F2 的一小块拼图补上了。
5 月 14 日——v1.6.8 上线,新 bug 浮出水面。 Dhai 在 LS 部署了 WMS Sync Hub v1.6.8。同一天他抓到一条新症状:"2 item codes that are unable to create GRN via WMS Sync Hub. Other than these two items, all other items are able to sync back…will investigate further"。这就是 BUG-002——两个特定物料编码走不通 GRN 创建的路。同一天他也把用户手册挂上线:https://wmssynchubdocs.bold-feather-8495.workers.dev/——F2 终于有了正式的文档落脚点。
5 月 18–19 日——一个用户手滑,引出 v1.6.9。 Jin Yee 报告一张拣货单不见了——PN-26050868(RAHMAT BERSIH,4 支 ZAITUN 牙膏)。Dhai 翻日志:"User-initiated cancel"——有人在插件里点了"取消"。同胞单 PN-26050867 因为已经发货所以躲过一劫。
第二天 Dhai 直接发版 v1.6.9:
"v1.6.9 修补:以后没推过 WMS 的 picking note 完全不会出现在 Cancel list 里, 而且每次按 Cancel 都会记录用户名、机器名、时间。"
两件事一次做完:没推过 WMS 的拣货单从 Cancel 列表里彻底拿掉;每一次 Cancel 都留下取证级的日志。 然后 Dhai 远程进 LS 把 PN-26050868 救回来,叮嘱:"必须用 scanner 在 scan 一次让 picked qty restore 回来。"
5 月 20 日——BUG-003 当天出现。 Malvyn 报 SKU MPSNSW65HCS 显示零库存。千一支持很快定位:"单据 800297796 之前拣货到一半被取消 又推送了一次,wms 占用了之前的库存"。一张订单拣到一半被取消再推一次,WMS 会把库存还锁在已取消的那张单上。临时解法是手动关掉那张作废单,然后重新生成拣货任务。千一支持承认:"oms 库存同步有点延迟, 这里我让开发看下"——开发已经介入。
这两个礼拜的整体走向,从插件本身的稳定性,悄悄换轨到人在桥上的行为——手动改单、手动取消、取消再推送。v1.6.9 的审计日志,是第一块"鉴识"层的钢筋。它上线的同一周,就抓住了第一个目标。
桥还在跑。但桥要变聪明了——它得记住每一辆车是谁开上去的、什么时候开的、按了哪个按钮。
跟客户群里灭火的同一段时间,Prisma 内部群 PS20 (Internal) Melodies QYWMS AC Integration 里在悄悄做另一件事:把第一笔 RM 13,900 之外的下一张单谈下来。
新模块叫 Purchase Return(采购退货)加购模块。流程在 2026-05-11 由 Dhai 写出 9 步草案,2026-05-12 经 Jas 编辑定稿:
这是桥的第二条车道——第一条是出货(picking → 拣货),第二条是回流(returns → 退货)。
2026-05-18 15:56 MYT,Jas 在群里上传了两份报价 PDF,文件名都是 MR CHANG - WMS INTEGRATION QUO RM8,000.00:
(HRDF - RM3,000).pdf(HRDF - RM5,000).pdf定价逻辑是 Dhai 在 2026-05-13 11:12–11:16 MYT 提出的:
"their want to add on module in plugin. We will Quote Them RM 5000 for add on moudle. But this time their ask 'can claim HRDF?'"
"IDEA 1: 1. PAY FULL PAYMENT FOR RM 3000 FOR ADD ON MODULE. (ONE BILL) 2. CLAIM HRDF RM5000 (SECOND BILL). IDEA 2: 1. PAY FULL PAYMENT FOR RM 3000 FOR ADD ON MODULE. (ONE BILL) 2. CLAIM HRDF RM8000 (SECOND BILL) 3. REFUND RM3000 TO MELODIES."
翻译成生意话:软件开发收 RM 3,000 现金走第一张账单;HRDF 培训补贴 RM 5,000 或 RM 8,000 走第二张账单,由客户拿政府补贴报销。HRDF 培训规模 Dhai 建议 15 人 × RM 200 = RM 3,000 的训练费基础。
2026-05-13 11:05,Teo Kae Shyong(Prisma 老板/会计)发了一句话,把 HRDF 这条线压回了道德边界:
"Have you said all these to them? If not, do not offer using HRdF Training to cover the software dev cost."
"在没和客户讲清楚之前,不要拿 HRDF 培训去包装软件开发的成本。"
这句话很重要——它把"巧妙拆分"和"误导报销"之间那条线划清楚了。Jay 后续问 Teo 倾向哪一个 idea,先推 Idea 1 走全额 RM 3,000 + HRDF RM 5,000 这条干净路。
2026-05-18 15:56 MYT,Jas 在内部群确认:
"Melodies there confirmed the PR Modules already... i'll ask them pay for this one 1st (full payment)"
Derrick 已经签字接受。 等着 Melodies 把 RM 3,000 第一张账单付掉,Dhai 那边准备 HRDF 培训计划和议程,再走第二张账单的补贴申请。
C:\Dev\WMSSyncHub,192.168.1.92 + 192.168.1.151,ngrok 隧道只在 .92 上),以及 PROMPT_USUALLY_DHAI_USE.md 这份"Dhai 平时给 AI 的提示词",正在交给 Yashini。桥的第二条车道,要换人来铺了。第一张单 RM 13,900 是"把桥建起来"。第二张单 RM 8,000(净拿 RM 3,000,HRDF 报 RM 5,000)是"在桥上再加一条反向车道"。
更重要的是,这笔单子的谈判方式:拆账单、用 HRDF 报销软件开发——这是马来西亚中小企业项目里很常见的做法,但很容易越界。老板那一句"在没和客户讲清楚之前不要做",把这一单的姿态摆正了。
Melodies 这条客户,从 2024 年那个 SME Corp 项目开始,已经做到 2026 年的第二笔加购。这就是"信任会复利"的样子。
📖 前情提要:第九至十幕发生了什么?
v1.6.6 之后的两周,排查出一个"幽灵扫描"现象:有货物被扫描进了 WMS,但订单根本不存在。所有人第一反应都是"是不是插件又出问题了"。
但查了 AutoCount 的审计日志(系统自动记录"谁在什么时候改了什么"的流水账,就像银行的交易记录)之后,找到了真凶:两个员工(CHOOML 和 CHANWL)在货物已经录入 WMS 之后,跑回去手动修改了原始单据。这就造成了两边数据对不上。不是代码的问题,是人的操作习惯。
v1.6.9(5 月 19 日)上线,加了"取消审计日志":每次用户点"取消",系统都会记下是谁、在哪台电脑、什么时候点的。就像在关键按钮旁装了一台监控摄像头,上线当周就"抓住"了第一个案子(一张拣货单被用户手动误取消)。
同一时期,Prisma 把第二笔生意谈下来了:Purchase Return(采购退货)模块 RM 8,000。桥要加一条反向车道——不只是货物从仓库出去,还要支持货物从客户那边退回来。
v1.6.9 上线之后,两件事悄悄发生了。
第一件:桥真的稳下来了。五月下旬到七月初,"Integration (Wms x Melodies x Autocount)"群没有再响起那种让人心跳加速的紧急求救。Derrick 没有再录过像 02:10 那 37 秒一样的语音。对于一个每天处理数百张订单的 FMCG 批发商来说,这已经是最好的消息——没有消息就是好消息。
第二件:9 台 PDA 手持扫描枪到货,铺到了仓库里。仓库工人第一次不用趴在电脑屏幕前找货,而是举着枪走到货架前扫码。桥不只是在软件层面通了——它开始被人手里的硬件支撑起来了。
与此同时,桥的第二条车道——Purchase Return 采购退货模块——在 Prisma 内部群 PS20(Internal Melodies QYWMS AC Integration)里紧锣密鼓地开发。Dhai 已经把开发环境(C:\Dev\WMSSyncHub,机器 192.168.1.92 和 192.168.1.151)和他平时用的 AI 提示词文档 PROMPT_USUALLY_DHAI_USE.md 一起交接给了 Yashini。桥要多一个人来铺了。
Prisma 也给这个项目建了一个专属的文档门户:melody.wenjyue.com——从这里开始,所有关于 WMS Sync Hub 的文档、版本说明、SOP,都往这里汇。
这段时间,群里偶尔会有一两条消息——千一那边的系统维护通知、Malvyn 问一个操作细节、Mr Wong 确认一张单的状态。没有大事。桥在跑。
七月里,群里终于又热闹了一些。但这次不是大事故,是三块从车轮底下蹦出来的小石子——每一块都有名字,每一块都在 4 天内被清掉了。
第一块:拣货任务"拣到一半,退不回来"
七月十三日凌晨,一张拣货任务被执行了一半,用户想把它退回去重新来——但系统日志显示这张单已经被操作过,无法回退。LS WMS 团队在群里给出结论:
「这个任务看了下日志是有被操作过的……如果从 OMS 导入,需在 OMS 取消后重新导入。」
Derrick 确认了逻辑:「Cancel 掉,重新做,对吗?」
——答案是肯定的。这一条,跟 5 月 5 日那次 BUG-001 的余波是一脉相承的:已经触发了操作的单,没有"撤销"键,只有"重来"路。
第二块:Storage 页面报错
七月十五日,有用户点开 Storage 页面,直接弹错误。
「为什么我按 Storage 就会出这个?」
LS WMS 团队的回复来得很快:「系统昨晚(7 月 14 日约 8 点)已经做了 update,按照提示 refresh 一下页面就好。」
用户试了,回了一句:「OK 谢谢。」
System update 不通知就上线,用户不知道要刷新——这是 SaaS 系统的老毛病,跟代码本身无关。
第三块:WMS 物料类型对不上 AutoCount
七月十六日是这一周最有内容的一天。Malvyn 发了截图——WMS 里某批物料(AYAM.B 系列 SKU)的 Item Type 跟 AutoCount 那边不一致,同一个商品,两边分类不同。
Mr Chang 排查之后,在群里写出了根因:
「主要原因:1. sync 那栏没有打勾。2. status = E(表示异常状态)。
解决方案:进入 WMS SyncHub 页面,在 sync 栏(左边第 1 栏)打勾那些 AYAM.B items,点击 Sync Now → items 的 Item Type 就会 sync 去 WMS。」
片刻后,他又跟了一句:「我有试了这个 Item,已成功 update 了。」
用户跟进:「所以全部显示这个说明的都要重新 SYNC 对吗?」
还有一个衍生问题:没有勾选任何物料直接操作,系统弹出权限提示,用户不知道下一步。Chang 的建议:「你试看用 Retry Failed Item。」
三块石子,四天,全清。七月十四日那一次 system update 把这三个问题的根源一并扫掉了。
教训还是那一条:日常运营中,人的操作习惯(没刷新缓存、Sync 栏漏勾、没选就提交)能造成跟代码 bug 一模一样的症状。日志和 SOP,是区分「代码坏了」和「人做错了」的唯一工具。v1.6.9 的审计日志,这个月继续立功。
如果说三块小石子是技术层面的顺利收尾,那七月十七日这一天,是一扇门打开了又关上。
DOB 订单的集成——Path B 那个一直悬着的缺口,F3 待办——在 5 月 5 日那次事故之后两个多月,终于等来了一个直接的答案。
七月十七日上午 8 点,Derrick 在群里问:
「@202559381885131(DOB)integration 还没有做好?」
回来的话很平:「要 training 啊,等 HRDF。」
Derrick 追了一句:「所以 after 21/7 就可以 start 用?或者还在 training 而已?」
这一次的回答,把两层卡点都摊开了:
「那个 integration 的哦,21/7 应该来不及,HRDF 有问题,如果很 urgent 你们要不要直接用?」
HRDF 有问题——Purchase Return 那笔 RM 8,000 的单子,有一部分要走 HRDF 人力资源发展基金的培训报销。HRDF 申请需要特定的培训资质认证,认证流程卡住了,没拿到批准,正式培训就没法按计划开。
Mr Chang 接着提了一个过渡方案:
「我是 OK,要先办一个 online 的先?」
回复来了:「你可以的话,我这边加 Liting Chan 就好了。」
这是务实的选择:桥不等证书开通,先把人教会怎么走,再补手续。DOB 集成本身还在开发,但采购退货那条车道,可以先开培训。
七月二十日早上,群里开始谈时间。
Chang 问:「照样明天 2pm?或其他哪一个时间你们比较方便?」
Derrick 回了,然后确认参与者:「Melodies 3 PAX:Mr Wong、Jing Wen + Mei Khim。」
之后他补了一句话,语气直接:「你没有回答。我这里通知了,Melodies 两个人上课。」——是催 LS 那边确认,不是在跟 Chang 说话。
同一天上午 7:49,Chang 在群里发出正式会议邀请:
MELODIES PURCHASE RETURN
Tuesday, July 21 · 2:00 – 3:00pm
Time zone: Asia/Kuala_Lumpur
Google Meet: https://meet.google.com/djv-qdcb-hpg
七月二十一日上午 5:47(距离会议还有 8 小时),Chang 发出最后提醒,点名 6 个人。Derrick 回了一个 👍。
下午 2 点整,培训开始。
Melodies 这边来了三个人:Mr Wong(技术负责人)、Jing Wen(郑静汶)、Mei Khim(美金)。入会时有人电脑卡了,Derrick 在群里问:「can us phone?」 Chang 说:「we'll start 1st。」
这是整个项目最重要的一个节点之一——不是因为技术上有多难,而是因为那套 2026-05-11 由 Dhai 写出 9 步草案、2026-05-12 经 Jas 定稿的流程:
……今天第一次坐到了真实用户面前,变成了三个人的操作演练。
下午 3 点,培训结束。Chang 开了 Q&A 环节,发出备用会议链接 jsf-ihbc-xfd,让还有问题的人进来问。
桥的第二条车道,从图纸变成了可以踩油门的路。
培训结束后的第二天,2026 年 7 月 22 日,事情一件接一件地发生。
早上 3 点 06 分,Chang 在群里厘清了权限现状:Melodies 那边的 Admin 和 WMSSync 两个账号已经开通了 Purchase Return 模块权限,但 LS 那边还没有——他建议 LS 内部先讨论,再告诉他是要自己维护权限,还是叫他来开。
Dhai 回:「ok, we discuss first。」
早上 5 点 25 分,Mr Wong 发来了正式请求,用英文写,简洁明确:
「Hi Chang,
LS would like to start the DOB purchase return process together with Melodies, please open the access for LS admin team as well.
Thanks.」
早上 6 点 16 至 18 分,Chang 开通了权限,并发出截图确认:
「i set for these 2 users (Admin and WMSSync) only
the other users i think better ur site maintain… 🙏🙏」
「now LS also can see this Purchase Return module(Admin and WMSSync only)」
早上 9 点 07 分,Mr Wong 对着群里的 Melodies 联系人正式下达指令:
「@60137300121
Please liaise with Melodies team and LS can start the DOB purchase return process.」
Purchase Return 模块,正式上线。
但桥开通的同一天下午,新的矛盾浮出来了。
下午 12 点 19 至 22 分,Dhai 在群里问了一个问题:
「请问一下如果一张订单有 3 种货品没有库存了,当我们在上传该订单时有办法让系统自动删除那 3 种货品并上传到 WMS 吗?」
他接着补了一句业务背景:
「因为我们现在很花时间在修改订单,如有库存不足的货品该订单无法上传到 WMS。」
LS 系统那边的回答在 12 点 31 分 到达,一句话:
「这个做不到。系统只会校验是否库存充足,不会删除订单明细。」
WMS Sync Hub 现在的设计逻辑是:校验但不删除。它告诉用户「这一行库存不足」,但不替用户做业务决策——删还是不删、改数量还是等货——这些判断权在人手里,不在系统里。
下午 1 点 44 分,Derrick 把他的理解写清楚了:
「要 edit 系统里的订单,save 了,才重新上传 wms,才可以下一步。
原本没有 wms 的 step,SO 也是要 edit 了,才可以转去 inv。相当于系统的 item 和 inv 的 item 是需要相同的。所以有没有 wms,都是要 edit so 的。」
这是 Derrick 自己把账算清楚了——有没有 WMS,编辑这一步都跑不掉。WMS 没有让流程变慢,是原本就有的合规步骤。
下午 2 点 12 分,Dhai 转述了更上层的声音:
「Mr Lee 讲要求他们系统做掉这些东西,因为现在就是做这些东西我们要花很多时间做。」
Mr Lee 的诉求合理:销售订单里如果有 SKU 库存不足,能不能让系统自动剔掉那几行,只推有货的部分进 WMS?省掉人工核对和手动修改的时间。
下午 2 点 38 分,Derrick 的判断来了,一句话:
「auto 应该是做不到吧。」
这一句不是在关门——而是在把这个需求放进「Phase 2 还是 Phase 3」的盒子里。Derrick 做了 25 年批发,他知道「做不到」和「现在不做」是两件事。
与此同时,还有一个问题悬在空中:WMS Sync Hub 的正式 go-live 日期,已经问了 8 天,还没有答案。 Jay 在内部对 Dhai 发了问,但 Dhai 和 Derrick 还没有正式对上这个时间点。
从 2026 年 1 月 Derrick 和 Jay 第一次坐下来谈,到 2026 年 7 月 22 日 Purchase Return 模块权限正式开通——这座桥,走了整整半年。
| 阶段 | 时间 | 交付 | 金额 |
|---|---|---|---|
| Phase 1 | 2026-03 → 2026-05 | Picking + GRN + Item Sync + ngrok | RM 13,900 |
| Phase 2 | 2026-05 → 2026-07 | Purchase Return 模块 + 培训 | RM 3,000(净)+ HRDF RM 5,000 |
但桥要去的地方,还没有终点:
一座桥,从图纸到通车,再到第一次堵车,再到开出第二条车道,再到有人想在桥上加一套自动分流系统——Melody 项目的真实故事,就是这么一帧一帧走过来的。
项目文档:melody.wenjyue.com
下一章,还是由下一次群里响起消息的那个人来续。
证据来源:WhatsApp 群"Integration (Wms x Melodies x Autocount)"
120363425694826375@g.us(2026-07-13 → 2026-07-22,80 条消息)+ Notion Daily Briefs(2026-07-18、07-20、07-21、07-22)
↑ index · wiki/index · now · decisions
See also: 01-project-overview · 02-client-profile · 03-stakeholders · 04-project-history · 05-technical-scope · 06-next-actions · 07-system-analysis · 08-autocount-sdk-reference · 09-tunnel-architecture · 10-qianyi-wms-reference · 11-bugs-and-fixes · 12-architecture-diagram · raw/2026-05-05_whatsapp-integration-chat · wiki/whatsapp-timeline-2026-07-13-22