这不是做完就放着的演示品 —— 它是立成自己每天在用的生产系统, 订单、钱、工厂结算全跑在上面。下面是支撑这件事的工程设计。
口径:闸门 = 仓库里的自动检查脚本数;中断 = 每 150 毫秒一次探针、连打 200 次期间的失败次数。
接口是双实例,所以更新的时候可以一个一个重启,用的人感觉不到。
外贸公司里「谁能看到成本」「谁能改订单」是真金白银的事, 所以这块做得比一般 CRM 重 —— 绕开界面直接调接口,一样拦得住。
请求刚进来就按角色和模块判一次:这个角色能不能碰这个模块的这个动作。
业务逻辑内部再判一次归属:是不是你名下的客户、你负责的订单。
真正落库之前,独立再查一遍权限与合规,和前面两道各自独立、互不替代。
每个写操作必须登记在册才允许执行 —— 没登记的新功能一律拒绝,不会悄悄放行。
最后才是按钮显不显示。它是体验,不是安全 —— 安全在前面四道。
不跟随模块权限,单独一个开关。外部角色(工厂 / 物流商)在代码层面恒不可见 —— 不靠管理员记得取消勾选,勾了也没用。
管理员在每道门前都直接放行,所以权限缺陷用它永远复现不出来。 验收固定跑「非管理员角色 × 全部只读接口」的矩阵测试,一千多次调用。
先进回收站,到期才真删;谁在什么时候改了什么全程留痕,可回溯。
135 个场景,每一个都要走完下面这条线才允许上线。
涉及价格、库存、交期的场景,系统先把真实数据取出来递给模型,并明确告诉它哪些查不到。 没有的只写「我们正在确认」—— 这条是硬规则,不靠提示词碰运气。
风险识别、绩效、审批这些场景里,判断由确定性规则做, AI 负责总结、解释和排序。高影响动作一律要人工确认才执行。
各场景的提示词统一维护、可灰度开关,不散落在代码各处; 调整措辞不需要发版。按人按天有用量上限。
系统规模大了以后,「记得检查」这件事必然失效。 所以每一类踩过的坑,都被做成了一道自动检查。
覆盖权限接线、数据一致性、接口注册、界面规范、时区换算、附件挂载等类别, 每次改动前后都要全绿才允许部署。
新增一道检查时,先故意注入一个错误确认它真的报红,再还原确认它转绿 —— 一道从没红过的检查等于没有检查。
八个非管理员角色乘以两百多个只读接口全跑一遍, 只认一种信号:换个角色一调就崩。
接口双实例,严格串行重启并等前一个真正就绪。 实测部署期间服务中断为 0 次。
换版前先读线上当前版本当哨兵,版本漂移就中止且一个字节不动, 避免覆盖掉别人刚上线的东西。
前端更新后,还开着旧页面的人会收到提示而不是一片空白; 上一版资源保留一段时间,保证平滑过渡。
每一套系统有自己独立的数据库与存储,不与其他公司共用一张表。 要迁走、要导出、要停用,使用方说了算。
对外集成的 API Key、Token、Secret 集中加密存放, 不散落在配置文件里,也不明文出现在界面和日志上。
数据库与上传文件每日备份到异地对象存储,传输与静态均加密, 备份完成后自动校验 —— 没校验过就不算备份。
运行日志与 AI 调用日志里的联系方式、凭据等敏感字段在写入前就被脱敏, 并且有自动检查盯着这件事不被改回去。
外贸的业务不在一个系统里发生,所以连接能力是刚需。
多账号收发、会话线程、签名、附件自动进文件中心
询盘签名校验后直接入库并按规则分配给业务
运单自动登记与轨迹回传,状态变化推送给相关的人
待办与审批推送、经营简报定时发送
会话同步、消息归属到客户、发送有多重确认闸
文件与图片统一存放,内容去重,异地备份
支持多家模型服务,按场景切换与降级
订单、报价、确认单、箱单中英双语导出
既然这一页讲安全,就把你正在看的这个页面也讲清楚。
这些不是设计意图,是上线当天在生产环境上一条条打出来的。