Мазмун

设备通行与外部世界

宿舍管理系统通过五类连接器接入门禁、教务、地图与统一身份等外部系统,入库前校验记录归属,并以降级不造假、留痕不猜测、测试连接先行守住数据主权。

  • 五类连接器接入外部事实:门禁、单点登录、微信、教务
  • 系统只接收设备识别结果,不替设备下结论
  • 通行记录入库前须做对人对床的归属校验
  • 地图五家可选,但同时只启用一家并做坐标互转
  • 外部依赖须保留本地兜底,测试连接通过再启用

明·如归 · 宿舍管理白皮书 | 第三篇 数据篇

前面几章的数据都是系统自己长出来的——考勤是打卡打的、床位是分床分的、评分是检查查的。但宿舍不是孤岛。门口有闸机、楼里有门禁、地图要用外部服务、身份要接统一认证、数据要从教务同步——系统每时每刻都在和外部世界交换事实。面对外部世界、系统应该怎么接、怎么出、怎么在接和出之间不丢掉自己的判断力——这是数据篇最后一章的主题

17.1 五类连接器:把外部事实接进来的五种姿势

系统里"外部世界"分五类、每类对应一种连接器:

17.1.1 通用接口连接器(门禁)

用途:任何厂商的门禁、闸机、人脸终端只要能通过标准接口推送结构化或表单格式的通行记录、都可以对接。

接入方式:管理员在系统里配一条通用接口连接器(目标地址、认证方式、字段映射)、厂商侧配一个"通行记录回调 URL"指向系统——设备一刷卡、通行事件就推过来。

这一类连接器不假设厂商是谁、只假设"你能发一个标准接口调用"它是数据主权的关键一道门:厂商不用他们自己的管理软件、也能被系统接入。

17.1.2 海康设备协议连接器

用途:直连海康威视门禁设备、通过局域网设备协议拉取事件流。

接入方式:管理员配设备 IP、账号、口令——系统主动去拉设备的事件、而不是等设备推

这一类连接器的价值海康是高校宿舍最常见的门禁品牌、很多学校的存量设备就是海康的——这类连接器让存量设备不用换就能接入

17.1.3 单点登录连接器(两种协议)

用途:让师生用学校统一身份登录宿舍系统、不再记一套密码。

两种协议:CAS 与 OIDC——两种都是高校常用的单点登录协议、覆盖 90% 的高校场景

接入方式:管理员配授权端点、令牌端点、用户信息端点、字段映射、退出地址——测试连接通过后启用

17.1.4 企业微信与微信连接器

用途:让师生用企业微信 / 微信身份登录、消息能推送到企业微信 / 服务号。

接入方式:管理员配企业 ID / 公众号 ID / 应用密钥——这些凭据全部落在服务器配置里、不进代码库、不进日志

17.1.5 教务与学籍同步连接器

用途:定期从教务系统拉学生名单、班级、学院、学籍状态。

接入方式:定时任务 + 全量或增量接口 + 冲突处理策略——"以谁为准"由管理员在配置里决定(一般以教务为准、但宿舍端的字段如"床位号"以宿舍为准)。

这一类连接器接进来的是"人"的元数据、前四类接进来的是"事件"和"认证"

17.2 设备接入的准则:把事实接进来、不替设备下结论

宿舍里可能出现的设备类型:门禁控制器、闸机、人脸识别终端、智能门锁。它们有一个共同特征算法在设备端、系统只接收结果。一个人刷脸通过了、设备告诉系统"某人某时在某门进了"——系统不验是不是本人(那是设备侧的事)、不判是不是代刷(那是管理规则的事)

"系统接受设备侧识别结果、不替设备下结论"——这句听上去有点保守的话、是设备接入最诚实的边界。把闸机厂商的识别率包装成自己的技术能力、出了事(误识或拒识)责任就说不清了。

已实证接入两条设备通道

  • 通用接口连接器(标准接口、任何厂商按规范推送通行记录即可对接);
  • 海康设备协议连接器(直连海康门禁设备、通过局域网协议拉取事件流)。

两条通道共用一套连接器框架:配置凭据、测试连接、拉取记录、写入考勤来源或设备事件表。其余厂商可按同一框架扩展、不需要改系统逻辑

17.3 进来的每条记录先验归属

设备推来一条通行记录、上面可能带着卡号、学号、设备编号、时间戳。系统在入库之前做一件事对人对床

  • :这条记录能匹配到哪个在住人员?
  • 匹配上 → 写入设备事件表、可选作为考勤第五路来源;
  • 匹配不上 → 落进"通行无主"质量规则、进问题工作台等人工处理。

"设备事实也要过治理的闸"是接入层和数据治理层的一条接缝。不验归属就入链、一个月后考勤表里会多出一堆"无主未归"——实际上人根本没来过、是设备推送了测试数据或旧卡号

设备通道还带着心跳和日志同步:后台服务定时轮询设备状态、拉取增量通行日志。设备离线时系统不编造数据——这条来源自然为空、考勤的其他四路(学生打卡、宿舍长、宿管、自动)照常运转

17.4 地图:一家启用、五家可选、坐标互转

宿舍管理里地图出现在两个场景:移动打卡的地理围栏判定(楼栋坐标 + 允许半径)、学生端的"我的宿舍在哪"导航可视化

系统内置五家地图服务:

  • OpenStreetMapCARTO:内置不可删除的保底数据源、无需凭据即可显示底图;
  • 天地图、高德、百度:管理员自行配置密钥后启用。

任何时刻只有一家地图服务处于启用状态——切一家另一家自动停用、不存在"同时用高德底图又用百度坐标"的混乱

三家国内服务的坐标系各不相同(WGS84 / GCJ02 / BD09)、系统做坐标互转——从 A 服务拿到的坐标可以正确显示在 B 服务底图上、不会偏出几百米。移动打卡的地理围栏判定走统一坐标系、不管用户手机给的原始坐标来自哪家定位服务

"一家启用"这条硬约束的价值:地图服务密钥是学校的敏感凭据、同时启用多家会出现"两个密钥都用过、都留下调用记录、泄露时不知道哪一家"的困境。一家启用把这个风险降到最小。

17.5 身份:十二种认证链、一套本地兜底

宿舍系统不应该让师生再记一套密码。系统里可选的认证链有 12 种

  • 本地口令:兜底、永远存在;
  • 两种单点登录协议(CAS、OIDC);
  • 企业微信:账号 + 扫码 + 小程序三种入口;
  • 微信:服务号 + 小程序两种入口;
  • 几家主流校园 App 的票据体系:对接学校自己的移动门户;
  • 短信验证码:口令找回和二次校验;
  • 临时令牌:设备侧回调鉴权。

认证依赖第三方站点可用、但保底有本地口令入口——统一的身份、不统一的风险。学校统一认证挂了、宿管还能用本地口令进入系统处理应急事务;如果所有认证都依赖学校统一认证、学校一挂宿舍就成黑箱。

17.6 数据进出:两条通道、一套受管出口

  • 数据出去走开放接口:第六章讲过、每第三方应用有独立凭据和限流每条调用全量留痕
  • 数据进来走连接器:教务同步、设备通道、身份认证回调——都归连接器框架管

"数据能出去"和"数据能被随便拿走"之间、隔的就是这一层受管出口。受管的三个含义:

  • 可追溯:谁在什么时候拿了什么数据、都有记录;
  • 可限流:单个应用超量拉数据会被临时禁用;
  • 可撤销:一个应用不再需要访问、管理员一键禁用它的凭据。

17.7 外部世界的不可控与三条应对

闸机会坏、教务接口会改版、地图服务会限流——外部世界不总是配合的。系统的应对策略有三条:

17.7.1 降级不造假

地图服务不可用时显示空白底图加文字地址、不画一个假的位置点。门禁设备离线时考勤照常运转(少了那一路来源)、不补录假数据。企业微信推送失败时站内消息照常、外部通道留失败日志供重试

17.7.2 留痕不猜测

通行记录时间戳和设备状态全部原样存储。设备推了个错误时间?存进去、标出来、让质量规则报系统不在存储层"修正"外部数据——修正需要授权、修正的授权来自人工确认、不来自算法猜测

17.7.3 测试连接是独立动作

管理员配了一个新的设备通道、第一步是点"测试连接"——通了再启用、不通不会误写入业务数据。这一条看起来简单、很多系统会忽略——"启用一个失败的连接器"是运维事故的高频起点

17.8 三条关于外部接入的常见误解

误解一:接进来就是自己的。闸机推的通行记录、教务同步的学生信息——这些数据的"所有权"仍然在原系统。原系统改了口径、撤了接口、清了历史、宿舍端就要跟着变。"接进来"不等于"锁定了"——每次外部数据变动都要留一份快照、以便上游改口径时能追溯当时接的是什么

误解二:外部服务越权威越好。学校统一身份、企业微信、国家地图服务——这些确实权威、但依赖它们的可用性就是把系统命脉交到别人手里。健康的做法是"外部为主 + 本地兜底":认证依赖学校统一身份、但保留本地口令入口地图用天地图、但内置 OpenStreetMap 保底

误解三:一个接口通了就永远通。所有外部接口的可用性都是会变的。每个连接器都要有独立的"最后成功时间"和"最近一次失败原因"——这两个字段应该出现在管理员首页、不应该等到有人投诉才发现闸机已经三天没推数据

17.9 一张表:外部接入能力清单

能力当前状态说明
通用接口门禁连接器已投产任何厂商按规范推送即可
海康设备协议连接器已投产直连设备、拉事件流
单点登录(两种协议)已投产CAS + OIDC
企业微信与微信认证已投产三入口企业微信、两入口微信
教务与学籍同步已投产定时 + 冲突处理
五家地图(一家启用)已投产保底 + 三家国内可配
十二种认证链 + 本地兜底已投产不锁死在外部
开放接口受管出口已投产独立凭据、限流、留痕
其余厂商设备扩展按框架扩展不改系统逻辑
数据修正回写上游不做只做只读接入、不改外部源

17.10 给学校的一件事

把你学校宿舍门口那台闸机(或门禁、人脸终端)的厂商叫来、问一句:"你能不能用标准接口把通行记录推到我们的系统?"

  • 如果他说能 —— 恭喜、不需要买他的管理软件、通用连接器就能收
  • 如果他说不能、必须用他的平台 —— 你面对的选择就清晰了:是要他的平台、还是要你的数据主权

宿舍的数据不该锁在设备里。系统的责任是提供一条通道、让数据流向该流向的地方——然后替这笔数据守住归属和尊严

数据篇到此结束。系统能做什么、数据怎么被对待、都已经摊开了。下一篇要谈的是更高一层的问题:攒够了数据之后、拿它做什么判断——智能化篇