FDE·案例复盘
基础目录
德莉玛 monorepo 订购单流水线 会员制 CRM 订购单系统(单体) 玻璃图纸与拆单 定价引擎 P0~P3

复盘 30 · 玻璃图纸与拆单工单:一张图能不能下发,从来不是画图的问题

这一篇的灵魂是一句不太好听的话:图纸链路「跑得通,但跑不满」。代码能跑、接口能出图、三格式能导出、中文标注能渲染——但真要往下发,数据撑不住。这不是 bug,是数据问题,是我在就任时就得当着人讲清楚的事。

项目锚点

项目:德莉玛(dlmware.cn)淋浴房定制业务里,一张订单怎么变成一张能下发的玻璃图纸这条链路。
技术栈(真实):后端 Express + better-sqlite3,本地端口 8787;部署走 pm2 + rsync。图纸导出三格式 PNG / PDF / DXF,导出后自动落盘归档。相关接口三个:/api/bom(拆料)、/api/glass_dwg(出图)、/api/quote(报价)。
版本状态:在产 v2.5.0;v2.4.9 新增了一个岗位环节——「拆单员 → 技术确认岗」(把老师傅的经验活儿固化成标准流转)。
数据资产(全量):33,176 单 / 387 家经销商 / 2,799 个型号;400 单抽样里 97% 的 spec 是 null 或「否」(等于没有尺寸),只有 3 单有真实尺寸,且这 3 单属于 K / Y 系列。

校验结果(实测命中率)值对图纸链路意味着什么
型号匹配96.6%能认出型号,图有东西可画
玻璃厚度匹配95.2%厚度参数基本齐,DXF 的框线画得出来
尺寸覆盖29%🔴 真正卡点:没尺寸就等于没图
客户 / 经销商匹配0%🔴 图下发给谁,对不上号

同系列往前看:复盘 24 · 德莉玛 monorepo(这套代码怎么组织的)、复盘 25 · 订单到报价流水线(本文档那条链路的前三段体检);单体架构见 复盘 29 · 订购单系统(单体)。跨模块踩坑总账在 20 · 踩坑总账。

01

一张订单到一张图,中间到底过了几道手

复盘一条图纸链路,第一件事不是看代码,是把「谁画、谁认、谁发」写清楚。图纸这个东西很特殊:它错了不报错,它只是浪费一块玻璃。

第 1 段
订单解析
输入:门店录进来的一张订单。输出:系列 + 型号 + 数量。这一段我实测的命中率是 96.6%——型号基本认得出来。
第 2 段
BOM 拆单
输入:归一化后的型号。输出:框料、玻璃、五金、配件清单。接口是 /api/bom。这一段能兜底——模板在,料就拆得出来。
第 3 段
玻璃图纸
输入:BOM + 尺寸 + 开孔参数。输出:切割图、框线、开孔位。接口是 /api/glass_dwg。这一段没有任何兜底:没有长宽,图就是空的。
第 3.5 段
拆单工单 → 技术确认岗(v2.4.9 新增)
输入:画完的图 + 拆单员结论。输出:一个被「技术确认岗」认可的图纸状态。这一段是我主动加的岗位节点,理由在第 04 节。
第 4 段
报价
输入:BOM + 面积 + 出厂价红线。输出:金额区间。接口 /api/quote。这一段是四个接口里唯一需要「钱」的。
段接口缺数据时能否兜底缺什么就废
1 解析——(录单)能(型号 96.6% 兜住大部分)型号词表
2 BOM/api/bom能(模板兜底)模板缺失
3 图纸/api/glass_dwg不能尺寸(spec)
3.5 技术确认——(岗位流转)能(人工兜底,这是它存在的理由)人不在岗
4 报价/api/quote不能尺寸 + 出厂价 + 经销商对应关系
注意 3.5 这一行是全表唯一的例外:整条链路只有拆单 → 技术确认这一段,是故意留给人兜底的。
前面四段我一律不许用默认值糊过去(?? 800 这类写法在图纸链路里同样视为伪造);唯独这一段,我把它做成一个正式的岗位节点,而不是「让老师傅顺手看一眼」。区别在哪?「顺手看一眼」不在系统里,它今天在、明天人调岗就没了;做成节点,它就有状态、有记录、有交接。
02

为什么是 PNG / PDF / DXF 三个,不是其中一个

刚做导出的时候我以为一个格式就够。结论:这三种格式服务的是三种完全不同的人,缺一个整条链路就断在一半。

① DXF —— 给机器看的下游切割 / 排版要读它。它里面是坐标、线段、图层,不是一个「看起来像门」的画面,是一堆能被引擎解析的矢量结构。只有 DXF,人看不了;但图纸只有 DXF,等于下发了没人能验。
② PNG —— 给人快速看的截图、预览、贴在工单上、发微信。它快、轻、任何设备都能打开,缺点是放大就糊、不能打印、机器读不了。只有 PNG,下游切不了;但图纸只有 PNG,产线那边根本用不上。
③ PDF —— 给人正式看的要下发、要打印、要签字。矢量文字、A3 排版、打出来不糊。这是「交付物」那一档的格式,PNG 打印会虚,DXF 打印出来是一堆线框。PDF 在这条链路里看着最冗余,实际上最不可省——它是唯一能直接交到技术确认岗手上的东西。
格式主用途谁在用不能替代谁
DXF切割 / 排版数据下游机器、排版软件替代不了 PNG/PDF(人读不了)
PNG预览 / 沟通 / 工单附图拆单员、销售、车间替代不了 PDF/DXF(打印糊、机器不认)
PDF正式下发 / 打印 / 存档技术确认岗、归档替代不了 DXF(人能看但不代表线能切)
取舍说得直白点:三格式不是「功能冗余」,是「三拨人各拿各的」。
DXF 是数据出口,PDF/PNG 是人的界面。如果我为了减少工作量只留一个 DXF,产线上会出现一张人看不懂的图纸;只留 PNG,下游排版那边直接没法开工。
那为什么不做「一个格式 + 一键转换」?坦白说这条我没做,也没量化过它的工作量——因为三格式在我接手时已经是既有事实,改动它要动导出层、动归档层、动下游对接约定,收益不确定。在一条自己没测过的链上先动最贵的那一环,这是我给自己定的红线之一。
03

中文标注渲染:这张图我排查了最久的一块技术债

淋浴房图纸必须带中文标注——系列代号看人认,但「上沿 8mm」「左固定」「开孔 φ35」这种字是给车间看的。结果第一版出来的图纸,中文要么不出、要么是一堆方块。

先说排障时我犯的错

我第一反应真实情况
「渲染库没装中文支持」→ 换渲染库换库解决不了:换完还是方块,因为根因不在库 selection,在字体没有在绘图层显式注册
「换个默认字体就行」系统里有中文字体≠渲染环境里注册了它。headless 环境下渲染进程拿不到系统字体映射,中文填空
「导出后我人眼看一眼图,没乱码就发」这条最危险:一张整页黑块/空白的图,肉眼也能「看过去」,人眼看图会漏——尤其批量归档以后,没人会一张张看

最后的处理方式:换字体注册 + 出图后程序化验证

两步,第一步解决「出不出得来」,第二步解决「怎么确认它出来了」。

// 第一步:显式注册字体,不依赖渲染进程默认映射 registerFont('/path/to/xx-font.ttf', { family: 'DLMAnnotation' }); // 第二步:出图后验证,不看图,看字节 + 采样 const buf = renderToBuffer(dwg); // (a) 字节:整页全空 / 全黑时体积会明显异常 assert(buf.length > MIN_BYTES, '图纸体积异常,疑似空白渲染'); // (b) 内容采样:按像素采样若干点,统计非背景色占比 const inked = sampleInkRatio(buf); assert(inked > 0.02 && inked < 0.95, `墨迹占比 ${inked} 越界,疑似渲染失败`);
验证手段查什么为什么不能省
文件字节产物体积是否落在合理区间整页空白的图体积会缩到异常小,这条能挡住 80% 的「图是空的」
内容采样按点采样统计非背景像素占比(墨迹率)挡住「体积正常但内容错版 / 全黑 / 字挤成一团」这类字节骗不过肉眼、但肉眼看不过来的情况
人眼看图——不写进自动化流程。批量归档场景下人眼不可靠也不可持续
「不靠肉眼看图」这句话是这次最值钱的产出。
图纸这种产物,它的失败形态非常阴:不报错、不抛异常、接口返回 200、文件也生成了,就是内容不对。凡是「不报错的失败」,都只能靠对产物做机械测量来兜。
我给自己定的规矩:任何导出类接口,必须有对产物的断言,断言挂在接口后面而不是挂在人身上。这条后来我直接搬到了别的导出模块上。
技术债要讲清楚:这块是欠着的,不是还清的。字体注册这件事我是绕着做的(显式注册一个能用、渲染稳定的字体),没有去动绘图层本身的字体抽象层。
为什么不动?动绘图层等于重写出图那一层,而那一层同时被 PNG / PDF / DXF 三个导出共用,风险面是整个图纸模块。在一条「跑得通但跑不满」的链上,我先让图出得来,再谈把它做漂亮。
04

v2.4.9 加的那个岗位:把老师傅的经验活儿变成节点

在产版本 v2.5.0;v2.4.9 干了一件事——在拆单和发图之间,插进一个「技术确认岗」。这不是加个审批按钮,是把原来靠人肉扛的复核,变成流水线里的一段。

加岗位之前加岗位之后(v2.4.9)
图纸怎么走到车间拆单员画完 → 直接流转,靠老师傅顺手看一眼拆单员出图 → 技术确认岗确认 → 下发
复核在哪发生脑子里 / 口头 / 半成品上才发现在系统里,是一个可见状态
人不在怎么办没人复核就直接流下去(真的发生过)状态卡在「待技术确认」,图下不发
经验怎么传人带人,走了就断固化成标准流转,新人照着节点走

为什么我愿意为此「慢下来」

错的代价不对称图纸错一次的代价是玻璃报废 + 返工 + 可能装不上门;多一次人工确认的成本,是几分钟。这两个数放在一起,加岗位是压倒性划算——前提是我真知道错一次是什么代价。这个我没测过货币化的数字,我只能说:淋浴房的玻璃是定尺裁的,废一块就是废一块,这个常识本身就是理由。
代价我也如实说多一个节点就多一次人工环节,效率一定下降。这个下降是真实的,具体下降多少我没测(没有可比的对照组,两条链路我都没跑满)。我不拿「加了岗位更好」这种一句话结论糊过去。
它解决的真正问题不是「不放心」,是不可追。以前图纸流过谁、谁看的、看的哪一版,全部不可查;有了节点,至少「这一版被谁确认过」是可问的一句话。
设计取舍:节点放在「拆完」和「下发」之间,而不是放在「录单」之前。
放在录单前,等于让确认岗去审一个连型号都不确定的东西,审不了也审不动;放在下发前,审的就是一张能看的、有尺寸的、已经能在 DXF 里被解析的图——审的东西是实的。
这是我加节点时唯一坚持的一条:确认岗面前必须有实物,不能让他审空气。
版本纪律本身也是知识:v2.4.9 加环节、v2.5.0 在产。改 production 系统的流转节点,我一律走「改版本 + 记变更」而不是「热改一行」——因为流转节点一改,在途的单怎么处理是必须先回答的问题。这条在 模板库 · 变更单 里有对应模板可套。
05

导出即落盘归档:文件名必须 ASCII,这条是我踩出来的

图纸导出后自动落盘归档——导出这个动作和落盘这个动作,我在设计上绑成同一个原子操作,不做成「先出图、再回头存一下」。原因很简单:中了「下发了但没存」,出事时你拿不出任何版本记录。

环节要求为什么
导出即落盘导出成功后立刻写盘;失败就是失败,不返回「成功」下发和归档不能分成两步,分成两步就一定会丢
文件名 ASCII用订单号 + 系列 + 型号 + 时间戳,全 ASCII;中文文件名一律不许进文件名① 中文文件名在传输 / 跨目录拷贝时会乱码;② 归档要能被程序检索,中文名检索不了
目录结构按订单号 / 时间归档,路径可回溯日后要能一句话答出「这张图当时是哪一版」
三格式同批落PNG / PDF / DXF 同一次导出一起存,不是三个接口各存一次三者描述的是同一张图,存成三次就会出现「PDF 是新的、DXF 是旧的」这种鬼情况
踩坑实录:中文文件名。
第一版我用订单备注里的中文当文件名的一部分(备注里常有「金框 / 白框 / 长虹玻璃」这种描述)。结果是同一个订单在两台机器之间搬一次,文件名就变了形,归档检索直接失效。
修法很土但有效:文件名只准 ASCII,中文一律挪到「内容字段」里去(图纸内部的标注层、归档索引表的一个字段),绝不进文件名。
这条我自己踩过一次,代价是一批归档文件要重命名。
归档和「客户匹配 0%」的关系:/api/glass_dwg 能画,但下发给谁这个问题上,订单 ↔ 经销商的对应关系实测是 0%。
归档本身不依赖这个(落盘只要图在),但归档之后怎么分发、归档归谁所有、谁有权取,全依赖它。所以我给这条链路的诊断结论是:出图这一段能通,分发这一段是断的。
06

四个命中率:图纸链路到底能跑到哪一步

我跑过一轮全量校验,四个数:型号 96.6%、玻璃厚度 95.2%、尺寸 29%、客户匹配 0%。把这组词扔到任何汇报里,别人第一反应都是「前两个挺好」。

指标值正确读法容易误读成
型号匹配96.6%第 1 段过关,图有东西可画❌「数据没问题,就快能全量出图了」
玻璃厚度匹配95.2%厚度参数基本齐,框线能画❌「参数齐了图就完整」
尺寸覆盖29%🔴 第 3 段的命门,没尺寸就是没图❌「平均一下还有 60% 左右」
客户匹配0%🔴 图下发给谁,一个都对不上❌「0% 才要紧,别的还能救」
算法(不是计算机术语,是交付常识):一条链能跑通的比例,不是这四个数的平均数,是四个数里的最小值。
96.6% 和 0% 平均是 48.3%——而实际上能完整下发到人的单量是 0%。
报「平均覆盖 48%」,等于当场承诺了一个做不到的东西。这一节和 复盘 25 里那组数字是同一套口径,我不给它换个好听的说法。
尺寸 29% 为什么对图纸比对报价更要命:报价缺尺寸只是算不出钱,人还能手工估、还能先报个区间;图纸缺尺寸是画不出来——没有长宽,DXF 里就没有坐标,PDF 里就没有框线。
而 400 单抽样里 97% 的 spec 是 null 或「否」,真正有尺寸的只有 3 单,还是 K / Y 系列,不是 H / H4 / M / S 主流系列。我最需要拿去验证出图链路的那批主流数据,一份都摸不到。
07

「跑得通但跑不满」——这句话我必须当着人讲

这是我在这篇里最想要的一句结论,也是最难开口的一句:这条链路的代码是好的,问题全在数据和岗位上。

层现状归因归谁负责
出图代码✅ 三格式能导出,中文能标注,落盘能归档能跑通代码(已解决)
可画的样本🔴 尺寸覆盖 29%;400 单抽样 97% 无尺寸数据问题录单口径 / 采集层
下发对象🔴 客户匹配 0%,不知道发给谁主数据问题主数据补录
复核环节v2.4.9 已补齐为「拆单员 → 技术确认岗」岗位问题(已修)流程
能讲清楚的部分(有数字)出图链路 96.6% / 95.2% / 29% / 0% 四个实测命中率;400 单抽样 97% 无尺寸、3 单有尺寸且属 K / Y 系列。这些是真跑出来的,我照报。
讲不清楚的部分(我没测)「改造后出图成功率会到多少」「技术确认岗实际能拦下多少错」「DXF 下游实际接入了多少单」——这些我没测,或者还没量化,我就不给数。
拿一个估的数当承诺交出去,是把技术债提前转成信任债。
最难开口的一句客户听到「图纸系统做好了,但只能画出 29%」第一反应是「那你做的东西有什么用」。
我的答法是把「跑得通」和「跑不满」同时摆出来:跑得通的部分(三格式、中文标注、自动归档、岗位流转)是一次性投入、永久可用的;跑不满的部分(尺寸采集、经销商对照)是每天少收一点数据就能往前挪一点的活儿。这两件事的性质完全不同,混在一起讲就是既骗不了人、也说服不了人。
为什么敢这么说?因为「数据不够」不是故障,是状态。
代码写错我能修;数据不足我不但不遮,还把它变成一个每天能消的待办——缺尺寸的单进「待补尺寸」队列,订单 ↔ 经销商对不上的进「待对号」队列。这是 复盘 25 里那条「把『算不了』做成一等公民状态」在同一条链路上的第二次应用:出不了图也必须是一个正式状态,不是一个异常。
08

FDE 变更纪律:先看,不改任何东西

这一节的关键词是客户那句原话:「先看不要改任何东西。」——驻场工程师最容易犯的职业病,就是看到问题顺手改掉,然后被问「那之前那三个月数据是怎么回事」。

我接到「图纸这块看看」之后,按这个顺序走

1

只读诊断,先不动

把相关接口、归档目录、落盘文件读一遍。这一步全程只读,一个字节都不写。

2

程序化验证,不靠肉眼

看图对不对这个问题,用文件字节 + 内容采样回答(第 03 节那两条断言)。肉眼在这个场景里不是证据。

3

把问题归类,而不是把问题修掉

诊断结果落成四栏:能跑通的 / 缺数据的 / 主数据断的 / 岗位缺的。分别对应不同的负责方和不同的工期,混成一团就等于没诊断。

4

给出「先做哪一段」的建议,等确认再动

动 production 之前必须拿到「可以改了」这句话。在 复盘 29 · 订购单系统(单体) 里我讲了这套单体为什么改一次要连着看哪些地方。

纪律具体口径我为什么守它
① 诊断期只读用户说「先看」就是真的只看,不备份、不改配置、不重启read-only 是把责任边界画清楚;顺手改了,出了事分不清是原问题还是我改出来的
② 验证靠机械测量文件字节、内容采样、接口返回结构图纸类产物失败不报错,只有测量能兜
③ 归类先于修复先分「代码 / 数据 / 主数据 / 岗位」四桶四桶对应四种工期和四种人,不分类开出的单子没人能认领
④ 生产变更走版本v2.4.9 / v2.5.0 有明确版本,改流转节点记变更单模板见 模板库 · 变更单;踩坑总账在 20 · 踩坑总账
这一节对面试的意义比技术大:驻场(FDE)这个岗位卖的不是「我会写代码」,是「我在你们生产系统上改东西之前,知道会发生什么」。
「先看不要改任何东西」这句话,是我见过对生产系统最实在的尊重——因为生产系统里 90% 的「改一下试试」,最后都要靠加班还原。
09

这一段的取舍清单:做了什么、没做什么、为什么

项决定理由(真实取舍)
三格式并存保留 PNG / PDF / DXF三拨人各拿各的;「一键转换」我没做也没量化,动导出层风险面太大
中文渲染绕行方案:显式注册字体 + 出图断言没动绘图层——那一层被三格式共用,重写风险是整个模块;先让图出得来
人工复核做成节点,不做成人肉提醒(v2.4.9)「顺手看一眼」不在系统里,人一调岗就断;做成节点才有状态和交接
出得来但画不满如实报,不改代码去凑数用默认值补尺寸能「跑满」,但那是伪造图,一线拿着去下单,废的是玻璃
归档文件名只准 ASCII中文文件名在跨机 / 跨目录搬移时会变形,归档检索会失效(我踩过)
没做的优化没做的就写没做比如 DXF 下游实际接入率、改造后出图成功率,我没测 / 还没量化,不编
一句话总结这一篇:玻璃图纸这条链路教会我的,不是怎么画图,是什么时候承认数据不够。
代码层面它没什么魔法;真正值钱的是那条判断链:图能出 ≠ 图该发,能发 ≠ 发得对。中间隔着尺寸(29%)和对应关系(0%)两道硬数字。
✓

自查清单

  • ✓我能背出技术栈:Express + better-sqlite3、本地端口 8787、pm2 + rsync 部署、三格式 PNG / PDF / DXF、三个接口 /api/bom /api/glass_dwg /api/quote
  • ✓我讲得清三格式各给谁用:DXF 给下游机器、PNG 给人快速看、PDF 是唯一能正式下发打印的,缺一个就断在一半
  • ✓我承认第一版中文渲染排查走过弯路(换渲染库、换默认字体都无效),根因是字体没在绘图层显式注册
  • ✓我知道验证靠文件字节 + 内容采样,不靠人眼看图——图纸类产物失败不报错、接口返回 200、文件也生成了,就是内容不对
  • ✓我踩过中文文件名导致归档变形的坑,现在的规矩是文件名只准 ASCII,中文进内容字段不进文件名
  • ✓我讲得清 v2.4.9 加「拆单员 → 技术确认岗」的原因:错的代价(废玻璃)远高于确认成本,但具体慢多少我没测
  • ✓我知道节点放在拆完和下发之间而不是录单前——确认岗面前必须有实物,不能让他审空气
  • ✓四个命中率我按最小值讲:型号 96.6% / 厚度 95.2% / 尺寸 29% / 客户 0%,不报平均数 48.3%
  • ✓我敢说「跑得通但跑不满」是数据问题不是代码问题,并且能把它拆成代码 / 数据 / 主数据 / 岗位四桶
  • ✓我知道尺寸 29% 对图纸比对报价更致命:报价缺尺寸能手工估,图纸缺尺寸是画不出来
  • ✓我守 FDE 纪律:用户说「先看不要改任何东西」就是真只读,验证靠机械测量不靠肉眼,归类先于修复
  • ✓我不给估的数:没测的(改造后出图成功率、技术确认岗拦截率)我直说没测 / 还没量化
面试怎么答

题目:给你一条「功能都跑得通」的生产链路,你怎么判断它到底值不值得继续投?

我会先问一句「跑得通是跑给谁看的」,然后报四个实测命中率。德莉玛玻璃图纸这条链路就是我最好的例子——三格式导出、中文标注、自动归档、岗位流转全都做完了,但我不会说它「做好了」。

背景是这样的:德莉玛(dlmware.cn)淋浴房定制,订单 → BOM → 玻璃图纸 → 报价。技术栈是 Express + better-sqlite3,本地端口 8787,pm2 + rsync 部署。图纸导出 PNG / PDF / DXF 三种:DXF 给下游切割排版用,PNG 给人快速看,PDF 是唯一能正式下发打印的——三个格式不是冗余,是三拨人各拿各的,缺一个整条链就断在一半。相关接口三个:/api/bom、/api/glass_dwg、/api/quote。
我跑的实测命中率:型号匹配 96.6%、玻璃厚度 95.2%、尺寸覆盖 29%、客户匹配 0%。全量历史是 33,176 单、387 家经销商、2,799 个型号;抽样 400 单查尺寸字段 spec,97% 是 null 或「否」,真正有尺寸的只有 3 单,而且这 3 单属于 K / Y 系列,不是主流系列。

我的判断是四个数里取最小值,不取平均数。96.6 和 0 平均是 48.3%,但实际上能完整下发到人的单量是 0%——因为出图缺尺寸是画不出来,报价缺尺寸还能手工估一下;图纸缺尺寸,DXF 里就没有坐标,PDF 里就没有框线。所以我的结论是:这条链路「跑得通但跑不满」,是数据问题,不是代码问题。我当着客户的面这么讲,不美化。

技术上有两块坑值得说,因为都是「不报错的失败」。
第一块是中文标注:图纸必须带中文(「上沿 8mm」「左固定」「开孔 φ35」是给车间看的),第一版出来是方块。我第一反应是换渲染库、换默认字体,都没用——根因是字体没在绘图层显式注册,headless 环境拿不到系统字体映射。修法我是绕着做的:显式注册一个能用且渲染稳定的字体,没去动绘图层本身的字体抽象层,因为那一层被三个导出共用,重写风险是整个图纸模块。
第二块是验证方式:修完之后我没靠「人眼看一眼图,没乱码就发」——这条最危险,一张整页空白的图肉眼也能看过去,批量归档后更不可能一张张看。我挂的是机械断言:出图后查文件字节(整页空白体积会异常小)+ 内容采样(按点采样统计非背景像素占比)。凡是「不报错的失败」,只能靠对产物做机械测量来兜,断言必须挂在接口后面,不能挂在人身上。

还有一条是产品/流程上的:我在 v2.4.9 加了个岗位节点「拆单员 → 技术确认岗」。以前是拆单员画完直接流下去,靠老师傅顺手看一眼;人不在、人调岗,这复核就没了。做成节点之后,图卡在「待技术确认」,下不发,状态可查。
取舍我如实说:多一个节点就多一次人工环节,效率一定下降,具体下降多少我没测(没有可比的对照组)。但我愿意它慢,因为图纸错一次的代价是废一块定尺裁的玻璃加返工,跟几分钟的确认摆在一起是压倒性划算的。
节点位置我也坚持过:放在「拆完」和「下发」之间,不放录单前——确认岗面前必须有实物,不能让他审一个连型号都不确定的东西。

归档这块我踩过一个很土但很贵的坑:中文文件名。第一版我拿订单备注里的中文(「金框 / 白框 / 长虹玻璃」)进文件名,结果同一批图在两台机器之间搬一次文件名就变形,归档检索直接失效,代价是一批文件要重命名。现在的规矩很硬:文件名只准 ASCII(订单号 + 系列 + 型号 + 时间戳),中文一律进内容字段和索引表,绝不进文件名。另外我设计上把导出和落盘绑成同一个原子操作——分成两步就一定会丢;三格式同批落,不是三个接口各落一次。

最后是我在这条链上守的 FDE 纪律,也是我觉得对面试官最有信号的一点。客户当时只跟我说「先看不要改任何东西」,我就真的全程只读:不备份、不改配置、不重启。诊断完我也不直接动手修,先把问题分成代码 / 数据 / 主数据 / 岗位四桶——四桶对应四种工期和四种人,不分类开出的单子没人能认领——然后给个「先做哪一段」的建议,等「可以改了」再动。
驻场这个岗位卖的不是「我会写代码」,是「我在你们生产系统上改东西之前,知道会发生什么」。生产系统里 90% 的「改一下试试」,最后都要靠加班还原。

我没做的事我也照说不减:「一键把 DXF 转三格式」没做(动导出层风险面太大,收益没量化过);改造后出图成功率会到多少、技术确认岗实际能拦下多少错误,这些我没测 / 还没量化,我就给不出数。拿一个估的数当承诺交出去,是把技术债提前转成信任债。