151 3746 0293

行业动态

聚澜智能智能取证书柜面向政务大厅、行政审批中心,实现营业执照、资格证书、执业证件 7×24 小时自助取证,支持身份证、人脸、二维码多种身份核验,RFID 证书识别存取、全程日志审计,原生适配银河麒麟、统信 UOS 信创环境,支持政务内网业务系统对接,解决传统人工发证值守成本高、错拿漏登记、非工作时间无法取证的业务痛
智能取证书柜硬件参数与技术代码实现-聚澜智能
时间:2026-08-18 14:26:23
<p><br/></p><h5>聚澜智能智能取证书柜面向政务大厅、行政审批中心,实现营业执照、资格证书、执业证件 7×24 小时自助取证,支持身份证、人脸、二维码多种身份核验,RFID 证书识别存取、全程日志审计,原生适配银河麒麟、统信 UOS 信创环境,支持政务内网业务系统对接,解决传统人工发证值守成本高、错拿漏登记、非工作时间无法取证的业务痛点。本文整理整机硬件参数、系统技术要求、通信接口规范,并提供后端接口示例、锁控调用、证书业务核心代码片段。</h5><p style="text-align: center;"><img alt="" class="cke_widget_element" data-cke-saved-src="https://i-blog.csdnimg.cn/direct/f09cfbf2f5004749a7e0402f2763f18d.jpeg" data-cke-widget-data="%7B%22hasCaption%22%3Afalse%2C%22src%22%3A%22https%3A%2F%2Fi-blog.csdnimg.cn%2Fdirect%2Ff09cfbf2f5004749a7e0402f2763f18d.jpeg%22%2C%22alt%22%3A%22%22%2C%22width%22%3A%22%22%2C%22height%22%3A%22%22%2C%22lock%22%3Atrue%2C%22align%22%3A%22none%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="image" isbindedload="true" src="/static/upload/image/20260818/1787034344700586.jpeg"/>编辑</p><h2>一、整机硬件核心参数</h2><p>表格</p><table><thead><tr class="firstRow"><th>项目</th><th>技术指标</th></tr></thead><tbody><tr><td>柜体材质</td><td>1.2mm 加厚国标冷轧钢板,防静电喷涂,防撬钣金结构</td></tr><tr><td>整机外形尺寸</td><td>1880mm×1260mm×420mm(可定制)</td></tr><tr><td>格口配置</td><td>标准 24 格;格口尺寸 340×240×320mm,格口数量可增减,隔板可调</td></tr><tr><td>门锁</td><td>工业电磁锁,开合寿命≥10 万次,支持机械应急开锁、断电应急开锁</td></tr><tr><td>触控屏幕</td><td>15 寸工业电容触摸屏,防尘;分辨率 1024*768</td></tr><tr><td>识别模块</td><td>身份证阅读器、二维码扫码模块;选配人脸识别模块</td></tr><tr><td>RFID 模块</td><td>UHF 超高频读写器,ISO18000‑6C;识别准确率≥99.9%,支持证书标签盘点,抗金属干扰算法</td></tr><tr><td>工控主机</td><td>国产 ARM/x86 工控;4G 内存,64G SSD 固态硬盘;双千兆网口;RS232/RS485、USB 接口丰富</td></tr><tr><td>操作系统</td><td>银河麒麟 V10、统信 UOS、Linux;支持国产化信创运行环境</td></tr><tr><td>供电</td><td>AC220V‑50Hz;内置 UPS 断电续航模块,断电可维持设备运行 30 分钟以上</td></tr><tr><td>安全告警</td><td>柜门异常开启告警、防拆报警、离线状态上报;语音提示</td></tr><tr><td>工作环境</td><td>温度 0‑45℃;湿度 20%‑80% RH;支持 72h 出厂老化测试</td></tr><tr><td>数据存储</td><td>本地日志保存≥12 个月;支持本地缓存,断网状态下可完成取证业务,联网自动同步数据</td></tr></tbody></table><h2>二、软件与技术规范要求</h2><ol class=" list-paddingleft-2"><li><p><br/></p></li><li><p>信创适配:全栈适配国产操作系统飞腾、鲲鹏、海光 CPU 架构;支持达梦、人大金仓国产数据库,支持部署政务涉密内网,国密 TLS 加密传输,操作日志不可篡改。</p></li><li><p><br/></p></li><li><p>业务功能</p></li><ul class=" list-paddingleft-2"><li><p><br/></p></li><li><p>证书入柜:业务系统将证书放入指定格口,绑定证书编号、身份证号、取证人员信息,写入 RFID 标签。</p></li><li><p><br/></p></li><li><p>自助取证:群众刷身份证 / 扫码核验身份,系统校验待取证列表,自动开启对应格口,取证完成 RFID 自动校验证书是否取走。</p></li><li><p><br/></p></li><li><p>异常处理:证书未取出、放错格口、非法开门实时告警;支持远程查询设备状态、远程授权开箱。</p></li><li><p><br/></p></li><li><p>日志审计:每一次入柜、取证、开箱、告警生成完整记录,包含设备 ID、时间戳、人员身份、格口编号、操作结果。</p></li><li><p><br/></p></li></ul><li><p><br/></p></li><li><p>通信接口</p></li><ul class=" list-paddingleft-2"><li><p><br/></p></li><li><p>硬件层:RS485 总线对接锁控板;TCP Socket 与 RFID 读写器通信。</p></li><li><p><br/></p></li><li><p>应用层:RESTful HTTPS 接口,JSON 格式;支持内网对接政务审批业务平台;设备主动上报状态与事件。</p></li><li><p><br/></p></li></ul><li><p><br/></p></li><li><p>部署模式:支持单机离线运行;支持云‑边协同;支持多台证书柜集群统一管理。</p></li></ol><h2>三、接口协议定义(RESTful)</h2><blockquote><p>设备本地服务端口:9907;所有请求必须携带设备唯一deviceId;请求响应统一 JSON 格式;传输启用 TLS 加密。</p></blockquote><h3>1. 打开指定格口接口</h3><p>POST /api/cabinet/openCell 请求体:</p><pre data-cke-widget-data="%7B%22code%22%3A%22%7B%5Cn%20%20%5C%22deviceId%5C%22%3A%5C%22JL%E2%80%91CAB%E2%80%91001%5C%22%2C%5Cn%20%20%5C%22cellNo%5C%22%3A%5C%2208%5C%22%2C%5Cn%20%20%5C%22certNo%5C%22%3A%5C%22ZZ20260814001%5C%22%2C%5Cn%20%20%5C%22userId%5C%22%3A%5C%224110******1234%5C%22%2C%5Cn%20%20%5C%22operDesc%5C%22%3A%5C%22%E8%87%AA%E5%8A%A9%E5%8F%96%E8%AF%81%5C%22%5Cn%7D%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet">{ &nbsp;&nbsp;&quot;deviceId&quot;:&quot;JL‑CAB‑001&quot;, &nbsp;&nbsp;&quot;cellNo&quot;:&quot;08&quot;, &nbsp;&nbsp;&quot;certNo&quot;:&quot;ZZ20260814001&quot;, &nbsp;&nbsp;&quot;userId&quot;:&quot;4110******1234&quot;, &nbsp;&nbsp;&quot;operDesc&quot;:&quot;自助取证&quot; }</pre><p><br/></p><p>成功返回:</p><pre data-cke-widget-data="%7B%22code%22%3A%22%7B%5Cn%20%20%5C%22code%5C%22%3A200%2C%5Cn%20%20%5C%22msg%5C%22%3A%5C%22%E6%A0%BC%E5%8F%A3%E5%B7%B2%E4%B8%8B%E5%8F%91%E5%BC%80%E9%97%A8%E6%8C%87%E4%BB%A4%5C%22%2C%5Cn%20%20%5C%22data%5C%22%3A%7B%5Cn%20%20%20%20%5C%22cellNo%5C%22%3A%5C%2208%5C%22%2C%5Cn%20%20%20%20%5C%22status%5C%22%3A%5C%22opening%5C%22%2C%5Cn%20%20%20%20%5C%22timestamp%5C%22%3A%5C%222026%E2%80%9108%E2%80%9114%2010%3A30%3A22%5C%22%5Cn%20%20%7D%5Cn%7D%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet">{ &nbsp;&nbsp;&quot;code&quot;:200, &nbsp;&nbsp;&quot;msg&quot;:&quot;格口已下发开门指令&quot;, &nbsp;&nbsp;&quot;data&quot;:{ &nbsp;&nbsp;&nbsp;&nbsp;&quot;cellNo&quot;:&quot;08&quot;, &nbsp;&nbsp;&nbsp;&nbsp;&quot;status&quot;:&quot;opening&quot;, &nbsp;&nbsp;&nbsp;&nbsp;&quot;timestamp&quot;:&quot;2026‑08‑14&nbsp;10:30:22&quot; &nbsp;&nbsp;} }</pre><p><br/></p><p>错误返回示例:</p><pre data-cke-widget-data="%7B%22code%22%3A%22%7B%5C%22code%5C%22%3A400%2C%5C%22msg%5C%22%3A%5C%22%E6%A0%BC%E5%8F%A3%E6%95%85%E9%9A%9C%E6%88%96%E7%A6%BB%E7%BA%BF%5C%22%2C%5C%22data%5C%22%3Anull%7D%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet">{&quot;code&quot;:400,&quot;msg&quot;:&quot;格口故障或离线&quot;,&quot;data&quot;:null}</pre><p><br/></p><h3>2. 获取设备与格口状态</h3><p>GET /api/cabinet/status?deviceId=JL‑CAB‑001 返回包含整机在线状态、每个格口:锁状态、门磁状态、是否存放证书、证书编号。</p><h3>3. 事件上报(设备主动推送)</h3><p>设备发生取证完成、告警、柜门开关事件,POST 上报业务平台地址。</p><pre data-cke-widget-data="%7B%22code%22%3A%22%7B%5Cn%20%20%5C%22eventType%5C%22%3A%5C%22CERT_TAKEN%5C%22%2C%5Cn%20%20%5C%22deviceId%5C%22%3A%5C%22JL%E2%80%91CAB%E2%80%91001%5C%22%2C%5Cn%20%20%5C%22cellNo%5C%22%3A%5C%2208%5C%22%2C%5Cn%20%20%5C%22certNo%5C%22%3A%5C%22ZZ20260814001%5C%22%2C%5Cn%20%20%5C%22userId%5C%22%3A%5C%224110******1234%5C%22%2C%5Cn%20%20%5C%22eventTime%5C%22%3A%5C%222026%E2%80%9108%E2%80%9114%2010%3A30%3A28%5C%22%2C%5Cn%20%20%5C%22rfidCheck%5C%22%3Atrue%5Cn%7D%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet">{ &nbsp;&nbsp;&quot;eventType&quot;:&quot;CERT_TAKEN&quot;, &nbsp;&nbsp;&quot;deviceId&quot;:&quot;JL‑CAB‑001&quot;, &nbsp;&nbsp;&quot;cellNo&quot;:&quot;08&quot;, &nbsp;&nbsp;&quot;certNo&quot;:&quot;ZZ20260814001&quot;, &nbsp;&nbsp;&quot;userId&quot;:&quot;4110******1234&quot;, &nbsp;&nbsp;&quot;eventTime&quot;:&quot;2026‑08‑14&nbsp;10:30:28&quot;, &nbsp;&nbsp;&quot;rfidCheck&quot;:true }</pre><p><br/></p><h2>四、核心业务代码示例(Python,设备端业务服务)</h2><blockquote><p>模拟证书柜业务服务,调用底层锁控 SDK、RFID 盘点,处理取证业务逻辑;实际项目对接聚澜智能设备 SDK。</p></blockquote><pre data-cke-widget-data="%7B%22code%22%3A%22import%20time%5Cnimport%20json%5Cnfrom%20datetime%20import%20datetime%5Cn%5Cn%23%20%E6%A8%A1%E6%8B%9F%E5%BA%95%E5%B1%82%E7%A1%AC%E4%BB%B6SDK%EF%BC%88%E8%81%9A%E6%BE%9C%E6%99%BA%E8%83%BD%E8%AE%BE%E5%A4%87%E6%8F%90%E4%BE%9BSDK%E5%B0%81%E8%A3%85%EF%BC%89%5Cnclass%20CabinetSdk%3A%5Cn%20%20%20%20%40staticmethod%5Cn%20%20%20%20def%20open_cell(cell_no%3A%20str)%20-%3E%20bool%3A%5Cn%20%20%20%20%20%20%20%20%5C%22%5C%22%5C%22%E4%B8%8B%E5%8F%91%E6%8C%87%E4%BB%A4%E6%89%93%E5%BC%80%E6%A0%BC%E5%8F%A3%5C%22%5C%22%5C%22%5Cn%20%20%20%20%20%20%20%20print(f%5C%22%E7%A1%AC%E4%BB%B6%E6%8C%87%E4%BB%A4%EF%BC%9A%E6%89%93%E5%BC%80%E6%A0%BC%E5%8F%A3%20%7Bcell_no%7D%5C%22)%5Cn%20%20%20%20%20%20%20%20return%20True%5Cn%5Cn%20%20%20%20%40staticmethod%5Cn%20%20%20%20def%20rfid_scan()%20-%3E%20list%3A%5Cn%20%20%20%20%20%20%20%20%5C%22%5C%22%5C%22RFID%E6%89%AB%E6%8F%8F%E5%BD%93%E5%89%8D%E6%9F%9C%E5%86%85%E8%AF%81%E4%B9%A6%E6%A0%87%E7%AD%BE%EF%BC%8C%E8%BF%94%E5%9B%9E%E6%A0%87%E7%AD%BE%E7%BC%96%E5%8F%B7%E5%88%97%E8%A1%A8%5C%22%5C%22%5C%22%5Cn%20%20%20%20%20%20%20%20return%20%5B%5C%22ZZ20260814001%5C%22%5D%5Cn%5Cn%23%20%E5%8F%96%E8%AF%81%E4%B8%9A%E5%8A%A1%E6%9C%8D%E5%8A%A1%5Cnclass%20CertCabinetService%3A%5Cn%20%20%20%20def%20__init__(self%2C%20device_id)%3A%5Cn%20%20%20%20%20%20%20%20self.device_id%20%3D%20device_id%5Cn%20%20%20%20%20%20%20%20%23%20%E5%86%85%E5%AD%98%E6%A8%A1%E6%8B%9F%E5%BE%85%E5%8F%96%E8%AF%81%E8%AF%81%E4%B9%A6%E6%B1%A0%EF%BC%8C%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E6%9D%A5%E8%87%AA%E6%94%BF%E5%8A%A1%E4%B8%9A%E5%8A%A1%E6%95%B0%E6%8D%AE%E5%BA%93%5Cn%20%20%20%20%20%20%20%20self.wait_cert%20%3D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%5C%22ZZ20260814001%5C%22%3A%20%7B%5C%22cellNo%5C%22%3A%5C%2208%5C%22%2C%5C%22idCard%5C%22%3A%5C%224110******1234%5C%22%2C%5C%22status%5C%22%3A%5C%22wait%5C%22%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%5Cn%20%20%20%20def%20get_user_wait_certs(self%2C%20idcard%3A%20str)%3A%5Cn%20%20%20%20%20%20%20%20%5C%22%5C%22%5C%22%E6%A0%B9%E6%8D%AE%E8%BA%AB%E4%BB%BD%E8%AF%81%E6%9F%A5%E8%AF%A2%E8%AF%A5%E7%94%A8%E6%88%B7%E5%BE%85%E5%8F%96%E8%AF%81%E4%B9%A6%5C%22%5C%22%5C%22%5Cn%20%20%20%20%20%20%20%20res%20%3D%20%5B%5D%5Cn%20%20%20%20%20%20%20%20for%20cert_no%2C%20info%20in%20self.wait_cert.items()%3A%5Cn%20%20%20%20%20%20%20%20%20%20%20%20if%20info%5B%5C%22idCard%5C%22%5D%20%3D%3D%20idcard%20and%20info%5B%5C%22status%5C%22%5D%20%3D%3D%20%5C%22wait%5C%22%3A%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20res.append(%7B%5C%22certNo%5C%22%3A%20cert_no%2C%20%5C%22cellNo%5C%22%3A%20info%5B%5C%22cellNo%5C%22%5D%7D)%5Cn%20%20%20%20%20%20%20%20return%20res%5Cn%5Cn%20%20%20%20def%20take_cert_process(self%2C%20idcard%3A%20str)%3A%5Cn%20%20%20%20%20%20%20%20%5C%22%5C%22%5C%22%E5%AE%8C%E6%95%B4%E8%87%AA%E5%8A%A9%E5%8F%96%E8%AF%81%E4%B8%9A%E5%8A%A1%E6%B5%81%E7%A8%8B%5C%22%5C%22%5C%22%5Cn%20%20%20%20%20%20%20%20user_certs%20%3D%20self.get_user_wait_certs(idcard)%5Cn%20%20%20%20%20%20%20%20if%20not%20user_certs%3A%5Cn%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%5C%22code%5C%22%3A404%2C%20%5C%22msg%5C%22%3A%5C%22%E6%B2%A1%E6%9C%89%E5%BE%85%E9%A2%86%E5%8F%96%E8%AF%81%E4%B9%A6%5C%22%7D%5Cn%5Cn%20%20%20%20%20%20%20%20cert_info%20%3D%20user_certs%5B0%5D%5Cn%20%20%20%20%20%20%20%20cert_no%20%3D%20cert_info%5B%5C%22certNo%5C%22%5D%5Cn%20%20%20%20%20%20%20%20cell_no%20%3D%20cert_info%5B%5C%22cellNo%5C%22%5D%5Cn%5Cn%20%20%20%20%20%20%20%20%23%201.%E4%B8%8B%E5%8F%91%E5%BC%80%E9%97%A8%5Cn%20%20%20%20%20%20%20%20ok%20%3D%20CabinetSdk.open_cell(cell_no)%5Cn%20%20%20%20%20%20%20%20if%20not%20ok%3A%5Cn%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%5C%22code%5C%22%3A500%2C%20%5C%22msg%5C%22%3A%5C%22%E6%A0%BC%E5%8F%A3%E5%BC%80%E9%97%A8%E5%A4%B1%E8%B4%A5%5C%22%7D%5Cn%5Cn%20%20%20%20%20%20%20%20%23%202.%E7%AD%89%E5%BE%85%E7%94%A8%E6%88%B7%E5%8F%96%E4%BB%B6%EF%BC%8C%E5%BB%B6%E6%97%B6%E5%90%8ERFID%E6%A0%A1%E9%AA%8C%E8%AF%81%E4%B9%A6%E6%98%AF%E5%90%A6%E5%8F%96%E8%B5%B0%5Cn%20%20%20%20%20%20%20%20time.sleep(4)%5Cn%20%20%20%20%20%20%20%20remain_tags%20%3D%20CabinetSdk.rfid_scan()%5Cn%20%20%20%20%20%20%20%20take_success%20%3D%20cert_no%20not%20in%20remain_tags%5Cn%5Cn%20%20%20%20%20%20%20%20event_data%20%3D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%5C%22eventType%5C%22%3A%20%5C%22CERT_TAKEN%5C%22%20if%20take_success%20else%20%5C%22CERT_NOT_TAKE%5C%22%2C%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%5C%22deviceId%5C%22%3A%20self.device_id%2C%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%5C%22cellNo%5C%22%3A%20cell_no%2C%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%5C%22certNo%5C%22%3A%20cert_no%2C%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%5C%22userId%5C%22%3A%20idcard%2C%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%5C%22eventTime%5C%22%3A%20datetime.now().strftime(%5C%22%25Y%E2%80%91%25m%E2%80%91%25d%20%25H%3A%25M%3A%25S%5C%22)%2C%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%5C%22rfidCheck%5C%22%3A%20take_success%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%5Cn%20%20%20%20%20%20%20%20%23%20%E6%9B%B4%E6%96%B0%E4%B8%9A%E5%8A%A1%E7%8A%B6%E6%80%81%5Cn%20%20%20%20%20%20%20%20if%20take_success%3A%5Cn%20%20%20%20%20%20%20%20%20%20%20%20self.wait_cert%5Bcert_no%5D%5B%5C%22status%5C%22%5D%20%3D%20%5C%22taken%5C%22%5Cn%5Cn%20%20%20%20%20%20%20%20print(json.dumps(event_data%2C%20ensure_ascii%3DFalse))%5Cn%20%20%20%20%20%20%20%20return%20%7B%5C%22code%5C%22%3A200%20if%20take_success%20else%20501%2C%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5C%22msg%5C%22%3A%5C%22%E5%8F%96%E8%AF%81%E6%88%90%E5%8A%9F%5C%22%20if%20take_success%20else%20%5C%22%E8%AF%81%E4%B9%A6%E6%9C%AA%E5%8F%96%E5%87%BA%EF%BC%8C%E8%AF%B7%E9%87%8D%E6%96%B0%E6%93%8D%E4%BD%9C%5C%22%2C%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5C%22data%5C%22%3Aevent_data%7D%5Cn%5Cn%5Cnif%20__name__%20%3D%3D%20%5C%22__main__%5C%22%3A%5Cn%20%20%20%20svc%20%3D%20CertCabinetService(device_id%3D%5C%22JL%E2%80%91CAB%E2%80%91001%5C%22)%5Cn%20%20%20%20%23%20%E7%94%A8%E6%88%B7%E5%88%B7%E8%BA%AB%E4%BB%BD%E8%AF%81%E5%8F%91%E8%B5%B7%E5%8F%96%E8%AF%81%5Cn%20%20%20%20result%20%3D%20svc.take_cert_process(idcard%3D%5C%224110******1234%5C%22)%5Cn%20%20%20%20print(json.dumps(result%2C%20ensure_ascii%3DFalse%2C%20indent%3D2))%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet">import&nbsp;time import&nbsp;json from&nbsp;datetime&nbsp;import&nbsp;datetime #&nbsp;模拟底层硬件SDK(聚澜智能设备提供SDK封装) class&nbsp;CabinetSdk: &nbsp;&nbsp;&nbsp;&nbsp;@staticmethod &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;open_cell(cell_no:&nbsp;str)&nbsp;-&gt;&nbsp;bool: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;下发指令打开格口&quot;&quot;&quot; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f&quot;硬件指令:打开格口&nbsp;{cell_no}&quot;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;True &nbsp;&nbsp;&nbsp;&nbsp;@staticmethod &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;rfid_scan()&nbsp;-&gt;&nbsp;list: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;RFID扫描当前柜内证书标签,返回标签编号列表&quot;&quot;&quot; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[&quot;ZZ20260814001&quot;] #&nbsp;取证业务服务 class&nbsp;CertCabinetService: &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__init__(self,&nbsp;device_id): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.device_id&nbsp;=&nbsp;device_id &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;内存模拟待取证证书池,生产环境来自政务业务数据库 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.wait_cert&nbsp;=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;ZZ20260814001&quot;:&nbsp;{&quot;cellNo&quot;:&quot;08&quot;,&quot;idCard&quot;:&quot;4110******1234&quot;,&quot;status&quot;:&quot;wait&quot;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;get_user_wait_certs(self,&nbsp;idcard:&nbsp;str): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;根据身份证查询该用户待取证书&quot;&quot;&quot; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;=&nbsp;[] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;cert_no,&nbsp;info&nbsp;in&nbsp;self.wait_cert.items(): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;info[&quot;idCard&quot;]&nbsp;==&nbsp;idcard&nbsp;and&nbsp;info[&quot;status&quot;]&nbsp;==&nbsp;&quot;wait&quot;: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res.append({&quot;certNo&quot;:&nbsp;cert_no,&nbsp;&quot;cellNo&quot;:&nbsp;info[&quot;cellNo&quot;]}) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;res &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;take_cert_process(self,&nbsp;idcard:&nbsp;str): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;完整自助取证业务流程&quot;&quot;&quot; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user_certs&nbsp;=&nbsp;self.get_user_wait_certs(idcard) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;user_certs: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{&quot;code&quot;:404,&nbsp;&quot;msg&quot;:&quot;没有待领取证书&quot;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cert_info&nbsp;=&nbsp;user_certs[0] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cert_no&nbsp;=&nbsp;cert_info[&quot;certNo&quot;] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cell_no&nbsp;=&nbsp;cert_info[&quot;cellNo&quot;] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;1.下发开门 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ok&nbsp;=&nbsp;CabinetSdk.open_cell(cell_no) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;ok: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{&quot;code&quot;:500,&nbsp;&quot;msg&quot;:&quot;格口开门失败&quot;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;2.等待用户取件,延时后RFID校验证书是否取走 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time.sleep(4) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remain_tags&nbsp;=&nbsp;CabinetSdk.rfid_scan() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;take_success&nbsp;=&nbsp;cert_no&nbsp;not&nbsp;in&nbsp;remain_tags &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event_data&nbsp;=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;eventType&quot;:&nbsp;&quot;CERT_TAKEN&quot;&nbsp;if&nbsp;take_success&nbsp;else&nbsp;&quot;CERT_NOT_TAKE&quot;, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;deviceId&quot;:&nbsp;self.device_id, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;cellNo&quot;:&nbsp;cell_no, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;certNo&quot;:&nbsp;cert_no, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;userId&quot;:&nbsp;idcard, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;eventTime&quot;:&nbsp;datetime.now().strftime(&quot;%Y‑%m‑%d&nbsp;%H:%M:%S&quot;), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;rfidCheck&quot;:&nbsp;take_success &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;更新业务状态 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;take_success: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.wait_cert[cert_no][&quot;status&quot;]&nbsp;=&nbsp;&quot;taken&quot; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(json.dumps(event_data,&nbsp;ensure_ascii=False)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{&quot;code&quot;:200&nbsp;if&nbsp;take_success&nbsp;else&nbsp;501, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;msg&quot;:&quot;取证成功&quot;&nbsp;if&nbsp;take_success&nbsp;else&nbsp;&quot;证书未取出,请重新操作&quot;, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;data&quot;:event_data} if&nbsp;__name__&nbsp;==&nbsp;&quot;__main__&quot;: &nbsp;&nbsp;&nbsp;&nbsp;svc&nbsp;=&nbsp;CertCabinetService(device_id=&quot;JL‑CAB‑001&quot;) &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;用户刷身份证发起取证 &nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;svc.take_cert_process(idcard=&quot;4110******1234&quot;) &nbsp;&nbsp;&nbsp;&nbsp;print(json.dumps(result,&nbsp;ensure_ascii=False,&nbsp;indent=2))</pre><p><br/></p><h2>五、锁控底层串口通信简要示例(RS485,伪代码)</h2><blockquote><p>锁控板通过 RS485 下发十六进制指令控制格口;真实指令集以聚澜智能硬件通信协议文档为准。</p></blockquote><pre data-cke-widget-data="%7B%22code%22%3A%22import%20serial%5Cn%5Cn%23%20%E4%B8%B2%E5%8F%A3%E5%88%9D%E5%A7%8B%E5%8C%96%5Cnser%20%3D%20serial.Serial(%5Cn%20%20%20%20port%3D&#39;%2Fdev%2FttyS4&#39;%2C%5Cn%20%20%20%20baudrate%3D9600%2C%5Cn%20%20%20%20parity%3Dserial.PARITY_NONE%2C%5Cn%20%20%20%20stopbits%3D1%2C%5Cn%20%20%20%20bytesize%3D8%2C%5Cn%20%20%20%20timeout%3D1%5Cn)%5Cn%5Cndef%20send_open_lock_cmd(cell_index%3Aint)%3A%5Cn%20%20%20%20%5C%22%5C%22%5C%22%E5%90%91%E9%94%81%E6%8E%A7%E6%9D%BF%E5%8F%91%E9%80%81%E5%BC%80%E9%94%81%E6%8C%87%E4%BB%A4%5C%22%5C%22%5C%22%5Cn%20%20%20%20%23%20%E7%A4%BA%E4%BE%8B%E5%B8%A7%E5%A4%B4%2B%E6%A0%BC%E5%8F%A3%E5%9C%B0%E5%9D%80%2B%E6%A0%A1%E9%AA%8C%EF%BC%8C%E5%AE%9E%E9%99%85%E4%BD%BF%E7%94%A8%E5%8E%9F%E5%8E%82%E5%8D%8F%E8%AE%AE%E5%B8%A7%5Cn%20%20%20%20cmd_frame%20%3D%20bytes(%5B0xAA%2C%200x01%2C%20cell_index%2C%200xBB%5D)%5Cn%20%20%20%20ser.write(cmd_frame)%5Cn%20%20%20%20resp%20%3D%20ser.read(8)%5Cn%20%20%20%20return%20resp%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet">import&nbsp;serial #&nbsp;串口初始化 ser&nbsp;=&nbsp;serial.Serial( &nbsp;&nbsp;&nbsp;&nbsp;port=&#39;/dev/ttyS4&#39;, &nbsp;&nbsp;&nbsp;&nbsp;baudrate=9600, &nbsp;&nbsp;&nbsp;&nbsp;parity=serial.PARITY_NONE, &nbsp;&nbsp;&nbsp;&nbsp;stopbits=1, &nbsp;&nbsp;&nbsp;&nbsp;bytesize=8, &nbsp;&nbsp;&nbsp;&nbsp;timeout=1 ) def&nbsp;send_open_lock_cmd(cell_index:int): &nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;向锁控板发送开锁指令&quot;&quot;&quot; &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;示例帧头+格口地址+校验,实际使用原厂协议帧 &nbsp;&nbsp;&nbsp;&nbsp;cmd_frame&nbsp;=&nbsp;bytes([0xAA,&nbsp;0x01,&nbsp;cell_index,&nbsp;0xBB]) &nbsp;&nbsp;&nbsp;&nbsp;ser.write(cmd_frame) &nbsp;&nbsp;&nbsp;&nbsp;resp&nbsp;=&nbsp;ser.read(8) &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;resp</pre><p><br/></p><h2>六、对接部署注意事项</h2><ol class=" list-paddingleft-2"><li><p><br/></p></li><li><p>内网对接政务审批平台,网络需要放行证书柜设备 9907 端口;双向 HTTPS 通信,配置证书签名校验。</p></li><li><p><br/></p></li><li><p>信创银河麒麟环境部署,优先使用 Python3 国产化版本,串口、网口权限配置,设置服务开机自启。</p></li><li><p><br/></p></li><li><p>业务数据必须做本地持久化,断网场景下,证书柜独立完成取证,待网络恢复自动同步事件日志。</p></li><li><p><br/></p></li><li><p>RFID 标签选用政务证书专用抗金属标签,入柜业务流程必须绑定证书编号与格口,避免错配。</p></li><li><p><br/></p></li><li><p>所有操作日志至少保存 12 个月,满足审计留痕要求。</p></li></ol><blockquote><p>说明:文中代码为业务逻辑演示示例,正式项目需使用聚澜智能提供完整 SDK、硬件通信协议文档进行二次开发,硬件指令帧以原厂交付文档为准。</p></blockquote>
请留下您的联系方式,我们免费为您提供最新方案和报价
提 交
15137460293 发送短信
报名免费获取设计方案及报价