Mundarija

风险预警:谁会主动来敲你的门

本文说明芒旭软件中真正会自动触发的预警只有三项:客户自动退回、报价过期催办、五类待办按角色再提醒,其余风险需人工查看,且部分看板数据取自无写入点的空表。

  • 全仓仅三个后台定时任务,只有它们会主动找人
  • 待办再提醒按角色群发,定位不到具体负责人
  • 设备保养与校准日期无人比对,不会主动催办
  • 看板缺料预警读无写入点的老表,恒为零
  • 库存三个入口三种真值,物料与分仓数不相符

21.1 一句实话垫在前面

厂里说"预警",意思从来不是"屏上有个数",是**"我没看屏幕,事也会来找我"**。

所以这一章只按一个标准讲:哪件事会自己跑到人跟前,哪件事必须有人先点开。按这个标准过一遍,答案比多数人以为的少,也比多数人以为的怪——有几条线看起来在响,其实永远不会响。

21.2 服务里真养着三件会自己跑的事

后端启动时会拉起三个后台任务,全仓就这三个:

跑多勤干什么力度
每天早八点扫全部客户,连续九十天没有任何业务往来的,清空负责人、退回客户池会直接改数据
每天早九点扫报价单,按有效天数算,还剩三天以内提一次,过期了接着每天提只发通知
每两小时扫各类待办,超时未处理的再提醒一次只发通知

第一件的分量第七章和第十七章都提过:它是这套系统里唯一一处"系统自己动手改业务归属"的地方,天数可以配,但它不看客户处在哪个阶段。

第二件看着温吞,实际最吵:它不判重。一张过期的报价单,只要还挂在那个状态,每天早上一条通知,天天如此。

第三件是这一段的主角,得单独拆开看。

21.3 那件"待办再提醒":五档都发得出去,但发不到"负责人"手上

它的配置写着五档节奏:审批超四小时提一次、报价超一天提一次、生产超八小时提一次、采购超一天提一次、质检超八小时提一次。五档现在都接上了扫描,也都会判重。

判重的口径是一件事四个条件:同一个人、同一类通知、正文里带上那张单的单号、落在这档的时间窗以内。四条都中才算提过。单号必须写进正文,下一轮才有依据。

但有三档只能"按角色找人",做不到"按负责人找人",原因是那几张表上没有归属格:

  • 工单没有生产负责人、采购单没有创建人。 这两档改成发给对应角色的在岗用户:生产档发生产角色与经理,采购档发采购经理与经理。一张单会同时提醒好几个同角色的人,系统并不知道这单具体归谁。
  • 检验单上那格"检验员"是一行自由姓名,不是用户编号。质检档先拿姓名去撞人:撞得上就发给他,撞不上就发给质量角色。姓名写错或者写成工号,这条提醒就落到集体头上。
  • 用户表上"他是什么角色"也有两种存法(旧的角色文字格与新的角色关联),两法都认、取并集,避免历史账号被漏掉。

这一处此前是三档断链的形状,值得留档:生产档与采购档各去读一格根本不存在的字段,取不到就跳过,所以一条都发不出;审批与报价档拿标题里搜一个词来判重,而实发的标题跟那个词对不上,于是同一件事每两小时再发一遍。这两类错都不会报错:没人的时候安静,有人的时候刷屏。

还有一个方向相反的:进计划超过七天还没转生产的那条超期检查,写得挺完整(查谁建的单、通知本人和管理员、内容带上产品与等待天数),但它是一个要人点的按钮,不挂在定时任务上;而且它判重判得极死——历史上只要提过一次,从此不再提。

所以"会自动催"这件事,眼下成立的是三条:客户会被自动退回,报价过期会被天天催,五类待办会按角色再提醒。 剩下的都要有人主动去看。

21.4 通知出不出得去这个系统

站内通知是主体:发给某个人的编号,进他的消息列表,点开跳到对应页面。移动端有专门的消息页面。

另外有一条外发口子:每条站内通知在写库之后,会顺手往一个钉钉机器人推一次(标题加正文、带签名,失败只记日志、不影响业务)。这一段以前是同步推的——网络不通时能把开单那个请求白挂五秒。现在改成丢给一个后台线程去推,配置读取留在当前请求里做完,往外发的网络动作不再拖住业务。

这条口子有三个形状要知道:

  1. 它是群广播,不是私信。 全局只有一条配置,推的是那一个群,不 @ 具体人,也不管这条通知本来是发给谁的。
  2. 总开关以前管不住它——收了。 钉钉配置上有"启用"这一格,还有"机器人通知"这一格。推送那段以前只看了后者、没看前者:对接整体停用了,只要回调地址填过、机器人开关还是默认值,通知照样进群。现在外发前两个开关一起判,总开关一关就不再往群里推。
  3. 它和再提醒的扇出是相乘的。 生产与采购两档按角色发,一张单一次就是几条,而每一条都要往群里推一次。判重修好之后不再是刷屏的主因,但同一个人名下的多条待办,在群里仍会被重复几遍,且不 @ 任何人。 预警系统最坏的结局不是没发出去,是发得让人不想看。

21.5 五类风险,逐条过

逾期。 这一条最实。销售看板上有一个及时率(发货日期不晚于订单交期的比例),生产看板上有一个达成率(实际完工不晚于计划完工的比例,没填实际完工时间的工单不进分母,没样本就显示两个横线而不是零),在制工单逾期有计数,财务的账龄分五段(天数是配置项),审批超二十四小时有红点,报价待核价有红点。该有人盯的地方各自都有一个数,缺的是没人把它们合成一句话。

超耗。 这一条的空以前在结构上,如今补了。按工单生成领料单时,明细量取的是清单上的单件用量乘以工单数量——这一步以前就有。现在领料明细上应领和实领拆成了两格:应发量按定额写进去,出库时回写实领量,单级还把两者各自汇总、算出一个超耗数(实领合计减应发合计)。"这单多用了三成料"这句话,如今有两个数可比了。存量老单子当时只有一格数量,两格里会有一格是空的,不回填猜测值。

还有一处没接上:清单明细行上那格"损耗率",全仓仍没有任何一处计算读它——应发量算的是定额乘数量,没把损耗率乘进去。

不良。 有数无阈。检验不合格的条数在总览上占一格,不良按缺陷描述排前十名,处理方式分布也有。没有任何地方规定"超过多少要响"——返工率、一次合格率都只是算出来摆着。顺带说清一次合格率的口径:它是本月检验记录里判合格的比例,同一批复检三次,就算三条记录,它不认"第一次就过"。

设备。 台账上有"下次保养日期",校准记录上有"下次校准日期",两格都存得下、查得出,全仓没有任何一处去比这两个日期到没到。第十三章已经把这句话写死了:设备这一本不会主动催任何人。

供应。 两条线都不通,第十一章交底过:采购明细的已收货数量没有回写点,所以"到货进度"靠人改;供应商的等级和合作状态两格不参与下单校验,停用的供应商照样能被选。再加上第二十章说的那个"及时率"其实是"下单后三十天内交付"的定义——供应这一头连量出来的那把尺子都不是准的。

缺料。 这一条要单独说,因为它同时存在真的和假的两个版本:

  • 真的是这套:仓储模块的低库存查询用的是物料档案上的"当前库存"对"安全库存",能分页看、能导出去。这条线通。
  • 假的是那套:仓储看板上的安全库存预警、库存健康率、缺料条数、呆滞数、分类分布,读的是另一张老表。那张表在整个代码库里没有一个写入点,所以永远是零行——屏上"预警零条、健康率零",看着像好消息。
  • 呆滞那个数还有第二层:它把"这一行记录最后一次被动过"当成"九十天没出入库",把条数直接当金额,并且只取前五十条。

同一个问题在两个入口问,一个有数一个没数。 这不是精度问题,是会让人做出错误结论的问题——看板说没有缺料,仓储页面上列了二十种。

21.6 库存还有第三个坑

库存这件事现在有两处活数据:物料档案上那格"当前库存"(一个数,不分仓),和分仓的库存记录(按物料加仓库累加,成品仓每次入库单开一行)。

它们各有人写,没有一处负责让它们相等。 出入库那些动作会先改物料那格,只有明确指定了仓库才顺手改分仓记录;而另有几条路径直接写分仓记录(盘点后的补录、外协回来的合格数、成品完工入库那几处),这些不改物料那格。物料导入还能手工填当前库存。

于是两个数迟早对不上,而两边都在被前端读:库存报表读分仓记录,低库存预警读物料档案,看板读那张空表。三个入口,三种真值。

21.7 这一章不做的事

  • 不做阈值配置。 没有"超过多少就报"的可调规则,几条线(四小时、二十四小时、七天、九十天)都写在代码或配置项里。
  • 不做告警升级。 一条提醒没人处理,不会转给他上级,也不会换个更响的法子再催。
  • 不做订阅与免打扰。 谁能收到什么,取决于他是建单人、负责人还是管理员,不取决于他自己订过什么。
  • 不做趋势预警。 只看当前状态,不看"这三个月返工率一直在涨"。
  • 不承诺消息必达。 外发失败只写一行日志,不重投。

21.8 今晚能定的三条

  1. 把"必须有人负责看"的三张名单固定下来。 逾期工单、低库存、待判不合格——现在没有系统会催,就得指定谁每天什么时候看一遍,看完在群里回一句"今日无",这件事才算有人管。
  2. 把钉钉那条群广播查一遍。 是不是还开着、群里还有没有人看。再提醒按角色发之后,一条待办会同时落到几个人的账号里,而群里只有一条不 @ 人的广播——站内消息有人看、群基本没人看,是当前该接受的现实。真要把话送到人手上,得先解决 21.4 那三个形状。
  3. 给"缺料"和"库存"各选一个唯一入口。 短期最省事的定法:看板和预警那几格,要么读对表,要么先摘掉。 一张恒为绿的预警牌,比没有预警牌更危险。

这一章能定的事就一句:会自己找人的只有三件事,且找的是"一类人"不是"那一个人";剩下的都是"你去看了才算数",而看起来最像预警的那几格,恰恰是没人写入的老表。