智能一卡通系统(DAIC-YKT)对接方案
一、方案概述
本方案基于 多奥智能一卡通平台(DAIC-YKT-PT) 的统一事件上报接口(DAIC-YKT-SF),实现门禁、人脸识别、车牌识别、梯控、人行通道闸等子系统的事件数据汇聚与第三方平台对接。
核心理念:一卡 · 一库 · 一脸 · 一网 · 一平台
适用场景:学校、医院、政企、工厂、园区、写字楼、集团公司
二、系统架构
| 层级 | 组件 | 说明 |
|---|---|---|
| 应用层 | 综合管理平台 | 对接 HIS、BA、HR、MOP、MES、AIoT、ERP 等系统 |
| 平台层 | 一卡通核心服务 | 身份认证、权限管理、数据汇聚、API 开放网关 |
| 子系统层 | 六大子系统 | 门禁考勤、人脸识别、车牌识别、智能梯控、人行通道闸、卡片管理 |
| 设备层 | 终端设备 | 控制器、读卡器、抓拍机、道闸、闸机等 |
三、统一事件上报接口规范
3.1 接口定义
所有子系统通过统一的接口上报通行事件,字段定义如下:
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
deviceName | String | 是 | 设备名称,如"1号楼大厅门禁" |
deviceId | String | 是 | 设备唯一标识 |
areaId | Int | 是 | 所属区域 ID |
areaName | String | 是 | 所在区域名称,如"行政楼A区" |
evValue | Int | 是 | 事件值(状态码) |
evName | String | 是 | 事件名称,如"合法卡开门" |
userId | Int | 否 | 用户 ID(系统内部编号) |
userNo | String | 否 | 用户工号/学号 |
userName | String | 否 | 用户姓名 |
accessPassport | String | 是 | 认证凭证:门禁/梯控为卡号,人脸识别为登记号,车牌识别为车牌号 |
orgName | String | 否 | 用户所属机构/部门名称 |
evTime | String | 是 | 事件时间,格式建议 yyyy-MM-dd HH:mm:ss |
inOut | Int | 是 | 进出方向:1进 / 2出 / 3层(电梯门禁楼层) |
accessType | Int | 是 | 通行类型:1门禁 / 2人脸 / 3车牌识别 / 4梯控 |
3.2 枚举值说明
inOut(进出方向)
| 值 | 含义 | 适用系统 |
|---|---|---|
| 1 | 进 | 门禁、通道闸、车牌 |
| 2 | 出 | 门禁、通道闸、车牌 |
| 3 | 层 | 梯控(表示到达楼层) |
accessType(通行类型)
| 值 | 含义 | 认证凭证格式 |
|---|---|---|
| 1 | 门禁 | CPU 卡号 / M1 卡号 |
| 2 | 人脸识别 | 人脸登记号(系统分配) |
| 3 | 车牌识别 | 车牌号,如"京A·12345" |
| 4 | 梯控 | CPU 卡号 |
四、对接流程
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 终端设备 │────▶│ 子系统 │────▶│ 一卡通平台 │────▶│ 第三方系统 │
│ (门禁/人脸) │ │ 控制器 │ │ API网关 │ │ (HR/ERP等) │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ 数据库/ │
│ 消息队列 │
└─────────────┘
对接步骤:
-
网络准备:确保子系统与一卡通平台网络互通,建议采用专线或 VPN
-
设备注册:在平台录入设备信息,获取
deviceId和areaId -
用户同步:通过 HR/ERP 系统同步人员基础数据至一卡通平台
-
权限下发:平台根据用户角色下发通行权限至各子系统
-
事件订阅:第三方系统订阅平台事件推送接口(Webhook 或消息队列)
-
数据消费:接收并解析统一事件 JSON,写入业务系统
五、JSON 示例
5.1 门禁刷卡事件
JSON
{
"deviceName": "1号楼大厅门禁",
"deviceId": "ACS-001-A",
"areaId": 1001,
"areaName": "行政楼A区",
"evValue": 1,
"evName": "合法卡开门",
"userId": 10245,
"userNo": "EMP2024001",
"userName": "张三",
"accessPassport": "A1B2C3D4E5F6",
"orgName": "信息技术部",
"evTime": "2026-09-01 08:30:15",
"inOut": 1,
"accessType": 1
}
5.2 人脸识别通行事件
JSON
{
"deviceName": "南门人脸通道",
"deviceId": "FACE-003-S",
"areaId": 2003,
"areaName": "园区南门",
"evValue": 1,
"evName": "人脸比对通过",
"userId": 10245,
"userNo": "EMP2024001",
"userName": "张三",
"accessPassport": "FACE_REG_0010245",
"orgName": "信息技术部",
"evTime": "2026-09-01 08:30:20",
"inOut": 1,
"accessType": 2
}
5.3 车牌识别事件
JSON
{
"deviceName": "地下车库入口",
"deviceId": "LPR-001-B1",
"areaId": 3001,
"areaName": "B1层停车场",
"evValue": 1,
"evName": "白名单车辆放行",
"userId": 10245,
"userNo": "EMP2024001",
"userName": "张三",
"accessPassport": "京A·12345",
"orgName": "信息技术部",
"evTime": "2026-09-01 08:29:50",
"inOut": 1,
"accessType": 3
}
5.4 梯控刷卡事件
JSON
{
"deviceName": "A座电梯1号梯",
"deviceId": "ELV-001-A",
"areaId": 4001,
"areaName": "A座电梯厅",
"evValue": 15,
"evName": "刷卡直达15层",
"userId": 10245,
"userNo": "EMP2024001",
"userName": "张三",
"accessPassport": "A1B2C3D4E5F6",
"orgName": "信息技术部",
"evTime": "2026-09-01 08:30:25",
"inOut": 3,
"accessType": 4
}
六、接收端示例代码(Java)
java
@RestController
@RequestMapping("/api/card")
public class AccessEventController {
@PostMapping("/event")
public ResponseEntity<String> receiveEvent(@RequestBody AccessEvent event) {
// 1. 基础校验
if (event.getDeviceId() == null || event.getAccessPassport() == null) {
return ResponseEntity.badRequest().body("缺少必要字段");
}
// 2. 根据通行类型路由处理
switch (event.getAccessType()) {
case 1: // 门禁
handleAccessControl(event);
break;
case 2: // 人脸
handleFaceRecognition(event);
break;
case 3: // 车牌
handleLicensePlate(event);
break;
case 4: // 梯控
handleElevatorControl(event);
break;
default:
log.warn("未知通行类型: {}", event.getAccessType());
}
// 3. 统一记录日志
log.info("[{}] {} 通过 {} 在 {} {} {}",
event.getAccessType() == 1 ? "门禁" :
event.getAccessType() == 2 ? "人脸" :
event.getAccessType() == 3 ? "车牌" : "梯控",
event.getUserName(),
event.getDeviceName(),
event.getAreaName(),
event.getInOut() == 1 ? "进入" : event.getInOut() == 2 ? "离开" : "到达" + event.getInOut() + "层",
event.getEvTime()
);
return ResponseEntity.ok("SUCCESS");
}
private void handleAccessControl(AccessEvent e) {
// 考勤联动:写入考勤表
// 安全联动:触发报警判断
}
private void handleFaceRecognition(AccessEvent e) {
// 人脸库比对日志记录
}
private void handleLicensePlate(AccessEvent e) {
// 停车计费/车位管理联动
}
private void handleElevatorControl(AccessEvent e) {
// 楼层权限审计
}
}
七、安全与注意事项
| 项目 | 要求 |
|---|---|
| 传输安全 | 事件上报接口必须使用 HTTPS,建议配合 Token 或签名验证 |
| 国密卡支持 | 高安全区域须采用 CPU 卡(国密 SM1/SM4 算法),禁止复制 |
| 数据一致性 | 用户工号 userNo 须与 HR 系统保持一致,作为跨系统关联键 |
| 时区统一 | evTime 统一采用北京时间(UTC+8),格式标准化 |
| 幂等处理 | 接收端需做幂等控制,防止网络重传导致重复记录 |
| 异常降级 | 平台与设备断网时,子系统应支持本地脱机运行,恢复后补传 |
八、扩展建议
-
消息队列接入:高并发场景建议通过 Kafka/RabbitMQ 异步消费事件
-
实时大屏:基于
evTime做流式计算,实现园区实时通行态势感知 -
考勤联动:门禁/人脸事件直接生成考勤记录,减少重复打卡
-
访客系统:临时人员通过人脸/二维码/临时卡授权,过期自动失效

781

被折叠的 条评论
为什么被折叠?



