📹 第十一章 GB/T 28181国标平台案例应用
📄 一句话概括

手工一台台填配置不现实,现场都是「Excel 导出一批、平台批量导入」。 批量导入的价值不在省事,在「能提前发现错」——三段拦截,一段都不能省。

📝 本节和前面几节的关系

上一节把软件跑起来了,这一节把设备接进去。 单台接入和批量接入是两种工作:前者靠细心,后者靠校验。 这一节的重点是「错有哪几种、怎么拦」。

一、编号的五种错

二十位编号最常见的五种错:少一位、多一位、含字母、重号、以及「长度对但字符是别的」。 前三种能靠「长度加数字校验」拦住,后两种要靠「查库比对」和「字符集检查」。 最容易漏的是重号:两条编号完全一样,第一条能过、第二条该拦。 但如果导入程序只做格式校验不做重复校验,就漏了。 漏进去的后果是「后导入的覆盖前一条」,而且不报错—— 等到点播时才发现「两台设备指向同一路流」。

二、三段拦截

第一段在导入前:格式、长度、字符,在表格里直接标红。 这一段最容易做,也最容易被跳。 第二段在导入中:重号、编号段归属,靠查库比对。 「编号段归属」这条容易被忘—— 某个市的设备用了别的市的中心编码,逻辑上不冲突,但级联时会出事。 第三段在导入后:拉一次在线状态,把没注册上的挑出来。 这一段最有价值,也最常被省掉——因为格式全对不代表能注册上,密码、端口、域都可能不对。 三段都做的话,现场返工率会从「一半」降到「几个百分点」。 这不是理论估算,是「多做半天、少跑三趟」的账。

三、注册会挤在一起

批量接入的第二个问题是「同时注册」:平台重启之后所有设备会同时重注册, 几百台一起上,鉴权和写库会被打满。 所以有的平台会做「注册抖动」:设备随机延迟几秒再发,把峰值摊平。 这一步在设备侧做,平台侧不用改。 算一下就知道「串行要多久」其实不是问题: 三百台、每台五十毫秒,串行十五秒,加十个并发只要一秒半。 真正的风险不是慢,是「同时」——并发是好事,但峰值太尖会把数据库打爆。

四、动手 Demo:批量导入三百台,失败的都是哪几种

拿六条编号逐条跑校验(长度、数字、重复),看哪种错能被拦住、哪种会漏。

for code in codes:
    bad = []
    if len(code) != 20:
        bad.append("长度 %d" % len(code))
    if not code.isdigit():
        bad.append("非数字")
    if not bad and code in seen:
        bad.append("重复")
    seen.add(code)

实跑输出:

--------------------------------------------------------------------
批量导入三百台,失败的都是哪几种
--------------------------------------------------------------------
**手工一台台填配置是不现实的**,**现场都是「Excel 导出一批、平台批量导入」。**
**批量导入的价值不在省事,在「能提前发现错」。**

  编号                        长度       校验            问题
  -----------------------------------------------------------------
  `34020000001320000001`      **20**     **通过**        正常
  `34020000001320000002`      **20**     **通过**        正常
  `3402000000132000002`       **19**     **长度 19**     少一位
  `340200000013200000033`     **21**     **长度 21**     多一位
  `3402000000132000000A`      **20**     **非数字**      含字母
  `34020000001320000001`      **20**     **重复**        重号

  六条里通过 2 条,失败 4 条

**四种错里有三种是「长度不对」或「带字母」**,
**这类错在导入时能被拦住**——**前提是「导入程序里写了校验」。**

**最坑的是第五种:重号**:**两条编号完全一样,第一条能过、第二条该拦。**
**但如果导入程序只做「格式校验」不做「重复校验」,就漏了。**
**漏进去的后果是「后导入的覆盖前一条」,而且不报错。**

**所以批量导入的正确设计是三段拦截**:
  阶段           拦什么                   怎么做
  --------------------------------------------------------------
  **导入前**     **格式、长度、字符**     **表格里直接标红**
  **导入中**     **重复、编号段归属**     **查库比对**
  **导入后**     **注册结果**             **拉一次在线状态**

**第三段最容易被省掉,也最有价值**:**格式全对不代表能注册上**——**密码、端口、域都可能不对。**
**所以导入完必须「拉一次在线状态」,把没上线的挑出来。**

**算一下批量导入的时间账**:
  300 台设备,每台一次注册往返按 50 毫秒算
  串行要 15.0 秒;加 10 个并发只要 1.5 秒

**串行也就十几秒,看着不多**——**但这是「网络理想」的情况。**
**现场往往是一批设备同时上电,注册请求会挤在一起,这时候并发控制比并行更重要。**

六条里过两条、挂四条,挂的四种分别是:少一位、多一位、含字母、重号。 「长度 19」「长度 21」这两条能被长度校验一眼抓住, 「非数字」也能被 isdigit() 抓住——三条都是「导入前就能拦」的。 只有「重复」需要「边导边查库」,这就是「三段拦截」要分三段的原因: 不同错需要不同阶段的信息。 最后那句「格式全对不代表能注册上」是本节的落点:编号对了、密码错了,一样上不去。 而密码对不对,只有「真去注册一次」才知道。 所以「导入后拉一次在线状态」这一步,是不能用格式校验替代的。

30 秒实验

  1. 算一下:六条编号里几条能通过?(2 条)
  2. 想一下:哪种错必须「边导边查库」才能拦?(重号)
  3. 想一下:为什么格式全对也可能注册不上?

常见误区

  1. 以为「长度对就是合法编号」。 还要全是数字,带字母平台不理你。
  2. 以为「导入成功就是接好了」。 要拉一次在线状态才算。
  3. 以为「设备多就一定会慢」。 串行也就十几秒,真正的风险是峰值太尖。
自测三问(点开对答案) 1. 二十位编号的五种常见错是什么? —— **少一位、多一位、含字母、重号、字符不对**。 2. 三段拦截分别拦什么? —— **导入前拦格式、导入中拦重复和段归属、导入后拉在线状态**。 3. 「注册抖动」解决什么问题? —— **把同时注册的峰值摊平**,避免鉴权和写库被打满。

下一节讲分域:一棵域树能有多少节点,权限怎么继承。

相关笔记