徐秀芳,夏 旻,徐 森,裴森森,陶奕阳
(1.盐城工学院信息工程学院;2.盐城工学院 校长办公室,江苏 盐城 224051)
2020 年春节前夕,一场突如其来的新冠肺炎疫情汹涌而至[1-2]。疫情时期,根据国家教育主管部门要求,学校严格执行“日报告”“零报告”制度[3],精准掌握师生员工健康状况,在加强学生思想疏导和学习生活指导的同时,积极开展线上授课和线上学习等在线教学活动,做好疫情防控期间高校在线教学组织与管理工作[4]。
根据疫情上报需要,很多单位和部门研究开发健康申报系统或微信小程序[5]。余靓等[6]建立数据监测与管理系统平台,保障武汉14 家方舱医院平稳高效运行;肖永平[7]设计具有报送提醒、填写、审核、监测管理和统计分析功能的疫情监测与上报管理系统;钟机灵[8]设计具有健康打卡、异常报告、返校申请等功能的应急管理服务平台;李润川等[9]设计基于云计算的智能健康监测系统;周振发等[10]依托省地理信息公共服务平台,建立省级疫情防控辅助决策系统等。
以上方法未在校园应用场景方面进行深入细致研究,如师生返校条件审核、进校数据存储、学生进入学习和生活场所的数据管理、疫情常态化后进出校门管理等。本文系统在满足日常健康申报的基础上,通过用户扫描校园不同地点的二维码,实现反向追踪查询,为疫情防控提供依据。同时,根据风险地区等级实时分析疫情相关数据,形成数据报表或可视化图表,提供决策支持。
疫情防控初期,由于学校师生员工数量众多且来自全国各地,校方在进行健康信息收集(电子表格形式统计)时,经常出现信息填写错误、报送不够及时、工作效率低下、数据更新滞后等问题。高校校园场景急需一套具有健康信息报送、校园轨迹跟踪和健康数据分析等功能的智能应用系统,为疫情防控提供实时监控和决策依据。
通过网络调研及校园场景应用需求分析,确定系统主要目标为:①实现师生员工健康信息每日报送[11];②记录用户校园活动轨迹[12];③根据学校分级管理体系为管理员设置不同权限,分工明确、高效管理;④根据健康数据和活动轨迹,挖掘与疫情相关的有价值信息,提供决策支持[13]。
(1)并发性。确保2 万人同时段访问下系统稳定和及时响应。
(2)数据更新。系统存储用户健康报送信息,并对权限管理员提供数据查询、修改等操作,实时更新。
(3)安全性。采取多维度、高强度数据加密等多重安全措施,防止用户敏感数据泄露。
(4)界面友好。用户体验良好,适配PC 端与移动端,可视化图表辅助用户挖掘数据。
(5)兼容性。系统界面适应市场主流移动设备与不同PC 端,兼容iOS、Android 等不同手机系统。
(1)师生信息需求。能够存储全校师生员工的个人信息与健康信息,包括姓名、证件号、地址、电话、部门及当前位置、接触状况等,并以简洁清晰的不同表单形式填写。
(2)用户权限需求。根据学校管理架构,分为教师、职工、本科生、研究生四类用户,各部门管理员设计不同权限。以学生管理为例,支持班级辅导员、学院学生科、学院领导、校学生处、校领导等多种角色,各司其职。
(3)健康报送需求。健康报送表单完善、全面,系统根据不同用户自动匹配表单。为提升填写效率和交互体验,用户通过选项按钮、自动填充默认信息、下拉列表等,以向导提示完成数据填写。
(4)健康码需求。参考支付宝的“健康码”[14],系统根据用户填报的数据进行风险评估,从地理位置、接触状况、身体状况等多个维度进行风险评估,分为“高、中、低”3 种风险等级,以红、黄、绿三色码呈现“个人健康码”。同时提供二维码和条形码两种形式的健康码,方便不同设备读取,并提供接入扫码枪功能。特别是在疫情相对稳定时,盐城工学院作为江苏省第一批开学的高校,系统为学校顺利开学提供了极大支持。
(5)轨迹追踪需求。根据校园常用地点列表,自动生成地点ID、地点二维码、批处理数据文档资源,再由动态二维码生成器[15]和Photoshop 技术处理,自动批量生成美观的地点二维码海报,张贴在校园对应位置,经过或使用该地点的人员通过手机扫描二维码即可完成地点登记,为用户行踪分析提供依据。
(6)历史数据需求。系统在提供实时数据可视化功能的同时,也提供历史数据下载。授权用户通过PC 端页面进行历史日期选取,查看并下载历史健康数据,便于备份和利用电子表格作进一步分析。
为提高开发效率和便于功能扩展,使用Python 语言及Django 框架开发;为保证WEB 前端的全平台兼容性,采用Bootstrap4(一种前端开发框架)及Vant(移动端Vue 组件库)框架技术,Visual Studio Code 进行跨平台开发[16-18]。生产环境部署在阿里云,使用Aliyun Linux 及Docker(一种应用容器引擎)容器化,并将系统与Uwsgi(一种Web 服务器)一同构建镜像,使用的Nginx(一种Web 服务器)服务器、MariaDB、Redis(一种内存数据库)数据库均为官方容器镜像。需要分别在Windows、Android 和iOS 的系统环境下进行测试,以保证全平台的可用性与兼容性。
疫情防控解决方案[19-21]主要包括以下功能:健康报送、个人健康码、地点码、跟踪分析和数据可视化等。其中,健康报送与地点码扫描是整个方案的基础,后续个人健康码、轨迹分析、接触人员跟踪、人流预估等功能以此数据分析得到。
校园疫情防控系统架构如图1 所示。系统架构从下向上分为云平台、运行环境、数据库、业务层、展示层、用户界面和访问层。业务层以下提供数据存储和开发环境,业务层实现用户管理、角色管理、权限管理、班级管理、学院管理、记录审计等功能;展示层提供浏览器访问页面时的模板引擎渲染数据和AJAX(Asynchronous JavaScript and XML,异步的JavaScript 和XML)请求;前端界面采用最新的UI 技术,保证功能性、美观性和良好体验;最上面为访问层,系统采用HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议)协议、HSTS(HTTP Strict Transport Se⁃curity,HTTP 严格传输安全协议)强制安全策略,通过不同移动端和PC 端为用户访问提供数据安全和实时响应。
Fig.1 Campus epidemic prevention and control system architecture图1 校园疫情防控系统架构
疫情防控解决方案采用MariaDB 数据库,共有28 个表,且各表之间相互关联,部分E-R(实体-联系)图如图2所示。
(1)用户表。存储用户基本信息和权限,包括用户id、用户名、密码、最后一次登录时间、姓名、学号(工号)、人员类别、学院(部门)、班级,权限等级、风险等级、风险更新时间、风险原因等。
(2)班级表。存储班级信息,可指定班级辅导员,包括班级id、班级名称、学院id、辅导员id 等。
(3)学院(部门)表。存储系统内的学院或部门信息,包括id 和学院(部门)名称。
健康报送是系统的主体部分,主要由个人基础信息和每日健康数据两个表组成。
(4)基本信息表。记录用户基础信息,包括基本数据id、创建时间、用户id、籍贯、籍贯地址、校区、宿舍、性别、电话等信息。用户初次进行健康报送时填写,之后禁止用户自行修改。
(5)更新信息表。用于记录用户每日健康信息,包括更新数据id、创建时间、用户id、所在地、接触疫情严重地区人员时间、家庭/小区/村有疑似或感染时间、到访或途径高风险地区时间、离开高风险地区时间、健康状况、非正常健康状况时间、是否咳嗽、是否发烧、是否呼吸困难、其他疑似症状、接触境外人员时间、家庭成员入境国家等。用户每日进行健康登记时,都会创建一条更新信息,权限管理员可以日历形式进行健康审阅。
Fig.2 System E-R diagram(part)图2 系统E-R 图(部分)
(6)地点表。记录校园内教室、实验室、体育馆、校门进/出口等地点信息,包括地点id、校区、地点名称、位置等信息。
(7)二维码扫描记录表。记录入校扫描记录,包括学生入校记录和日常活动地点码扫描记录,便于人员位置跟踪和分析。
(8)辅导员表。用于查看、审核、统计班级学生健康情况,包括辅导员id、姓名、学院id、班级id 等。
系统前端采用Bootstrap4 及Vant 框架技术。Bootstrap4用于开发跨平台页面,可以在不同尺寸的设备上提供一致的体验,有效缩短开发周期。Vant 框架用于设计移动端专属页面,提供更加接近原生应用的体验。移动端界面采用向导式设计,移动端界面设计如图3 所示。
Fig.3 Interface design of mobile terminal图3 移动端界面设计
健康报送子模块的表单项根据《江苏省教育厅疫情上报模块、学校疫情日报表、入苏返苏人员健康状况统计表》这3 张表进行综合分析后设计而成,且根据不同人员类别分别设计不同表单。为避免相同信息重复填报,在初次成功报送后,若用户的健康状况、地理位置等未发生变化,可选择“与昨日一致”,3~5s 即可完成健康报送[21]。
(1)信息报表子模块。根据使用者的权限,生成权限范围内人员每日健康状况,由xlsx.js 生成excel 表格,便于数据统计和分析。
(2)信息审计子模块。用于审计个人基础信息与健康信息填写是否正确。系统根据人员的不同健康状况使用js-year-calendar.js 日历,以不同色彩显示,管理员发现异常后可进一步核查,确认是否需要向上一级汇报或修改误操作状态。
(3)核心功能代码。该模块部分核心代码如下:
(1)风险评估子模块。根据健康报送中的数据,进行异常数据分析,如途经风险地区、家庭/小区/村有确诊或疑似病例”、咳嗽发烧、家庭成员身体异常等11 个异常检查点,对应不同风险等级,以“红黄绿三色码”显示个人健康码。
(2)健康码子模块。健康码子模块以黑白条形码与彩色二维码两种方式呈现。采用qrcode.js 技术生成,并根据用户id 和当前时间加密,通过encodeURIComponent 技术操作后加域名的方式实现,便于手机扫码读取。健康码每分钟自动刷新,防止截屏保存,提高扫码的安全性、准确性。
(3)扫码枪子模块。为满足学生开学入校登记的扫码需求,系统提供准确、高速的扫码枪功能。管理员扫描“盐工健康码”,形成学生入校记录并显示其风险状态,非低风险者系统会进行弹窗警告和语音播报功能。
(1)地点码模块。根据不同校区、不同楼宇和地点,利用Photoshop 技术,批处理后快速生成地点二维码。每张二维码海报包含该地点的全称、简称、地点专属二维码,可选附加NFC 芯片,实现一碰即完成登记,并附有防疫宣传标语及防疫工作组联系电话,兼顾功能性和美观性。
(2)扫码记录审计子模块。该子模块可以按日期查看某个指定地点的全部扫码记录。在常态化疫情控控时期,学生可以通过校门口的进、出二维码进出校门,便于校方掌握学生动态。
跟踪分析模块也是系统的主要设计目标,数据来源于地点码的扫码记录和健康数据。
在对指定人员进行跟踪分析时,根据其在某一地点的扫码记录,获取其扫码前后某一时间段在该地点扫码的其他人员信息,即可找出可能与此人接触的其他人员,便于后续筛查。
3.5.1 跟踪分析步骤
(1)输入分析数据。前端页面仿照百度的搜索逻辑,并提供了自动补全功能,仅需输入被分析人员证件号、姓名、学号、工号等关键字,系统便可自动找出最相关的人员,选中人员后可以对其进行跟踪分析。
(2)扫码记录分析。分析内容包括个人信息、个人扫码记录及某时段在同一地点的相关人员。相关人员由系统自动查找与分析得出,分析数据由用户的扫码记录与学院、班级、宿舍、籍贯、所在地等个人信息相结合。通过数据库查找,筛选出用户扫码前1 小时与后5 小时计6 小时内的扫码记录,将扫码人添加至可能接触人员字典,并赋初始权值5,若用户被多次判定为可能接触人员,则每次权值加5。
(3)数据信息关联。完成扫码记录分析后,根据获得的可能接触人员字典,分析每个可能接触人员与被分析人员在学院、班级、宿舍、籍贯、所在地等信息上的关联度。关联度越大,权值越高,最终按权值降序显示相关人员列表,有利于后续进一步排查和主动防疫。
3.5.2 核心功能代码(部分)
3.6.1 数据可视化
数据可视化模块则是引入爬虫技术[22]与ECharts4.0库,爬虫获取“全球新冠病毒最新实时疫情地图_丁香园”[23]国内各地现存感染人数,以ECharts4.0 中的“地图”图表展示,并叠加学校人员当前位置信息,便于查看人员地理位置与疫情局势。数据可视化页面如图4 所示。
此模块还包括每日报送情况、人员健康状况等校园数据,以不同图表显示,每种图表均可针对人员类别及人员部门进行筛选,有助于工作人员实时掌握师生的健康动态。
3.6.2 人流量预估
人流量预估图是系统根据指定地点的历史校园卡刷卡、扫码记录,完成数据清洗后,使用时间序列算法进行预测得出,有助于师生选择合适的时间段,错峰用餐、洗澡。人流预估数据可视化页面如图5 所示。
软件测试是软件生命周期中的重要组成部分,主要检测软件的可靠性。主要包括功能测试、UI 测试、兼容性测试、安全性和访问控制测试以及性能测试等,而单元测试和集成测试由开发人员执行。
Fig.4 Visualization page of health data图4 健康数据可视化页面
Fig.5 Visualization page of passenger flow estimation data图5 人流预估数据可视化页面
测试模块:用户登录、健康报送、个人健康码、地点码、人流预估、轨迹分析、接触人群追踪、数据可视化等功能。
测试过程:各功能模块均以不同用户身份进行测试并应用,如用户提交数据的合法性验证、软件功能与交互界面的正确性判定、响应时间的用户体验度及系统和数据安全性检验等。
测试结论:从健康报送、轨迹分析、接触人群追踪、数据可视化等单元测试到整个系统的集成测试,均正确运行。从基础信息到每日健康报送,从地点码扫描到风险数据分析,实现校园疫情防控智能化。
系统运行过程中,分别对内存使用、平均负载和网络流入流出速率等性能进行监测与分析。
24 小时系统平均负载如图6 所示,网络流入流出速率如图7 所示。
Fig.6 Average load of the system(24 hours)图6 系统平均负载(24 小时)
由图6 和图7 可知,平均负载和数据查询在0 点时会有一个高峰,在7 点半左右会有一个小高峰,这是由于系统每日限定登记时间为0 点到10 点所致。
以8 月28 日为例,根据系统检测,在0 点时每秒查询率达到高峰550QPS,此时系统仍能正常处理请求。这是由于系统中的静态资源交由CDN 处理,网络流入流出速率保持在5Mbps 以下。系统内存占用在0 点处有一个小的下降,是由于大量访问触发了Uwsgi Web 服务器的自动重启机制,由于同时存在多个Uwsgi 服务进程,重启不会导致服务中断,且可以有效防止内存泄漏,在提高性能的同时保证安全性。
Fig.7 Network inflow and outflow rate图7 网络流入流出速率
面对突发的新冠肺炎疫情,确保师生健康和学校安全稳定成为首要工作。根据学校师生特点及分层管理,设计不同用户及管理权限,采用Django 框架和Python 语言开发一套用户体验好、安全性高、数据可追踪的健康信息报送系统。与传统电子表格收集数据相比,数据报送的及时性和准确性得到大幅提升,工作效率提高3 倍以上。自2020年3 月1 日以来,全校2 万多名师生员工每天通过学校官微中的“健康报送”入口,上报个人健康信息,为领导决策和疫情防控提供数据支持。