智能访客管理系统中访客过程的呈现及数据的持久化处理

时间:2022-06-03 06:53:51

智能访客管理系统中访客过程的呈现及数据的持久化处理

摘要:在软件设计中,客户与软件的人机交互界面,越来越受到人们的关注。如何紧密接合客户的需求,是我们设计的重点。该文讨论了在智能访客管理系统的开发中,从访客信息、接待人信息的采集到接待后离开的完整过程的呈现,实现来访过程的创建、修改、离开,这是设计智能访客管理系统的重要环节。针对访客过程中可能存在的数据物理链路断开,导致来访数据无法上传到中心的问题,该文给出了数据的持久化处理方法。

关键词:智能访客系统;过程的呈现持久化处理

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)27-0270-04

Abstract: In the design of software, the interface between the customer and the software is more and more attention.How to engage the customer's needs, is the focus of our design. This paper discusses the complete process of presentation in development of intelligent visitor management system,from the visitor informationacquisition、 reception information acquisition to the left after the reception. It creates a visiting process、modify process and leave process.This is an important point in the design of intelligent visitor management system. Because of the data physical link disconnection which may exist in the process of visitors, the data can not be uploaded to the center. In view of the problem,persistent process should be used.

Key words: intelligent visitor system;presentation of process;persistent process

1 前言

智能访客管理系统是基于Client/Server架构的访客管理系统,它具备了全面而完整地进行访客全过程接待的管理能力,从而对访客身份以及其接待信息提供了详细的甄别和记载,不仅可以保障各个单位的安全,更可以提高企事业单位的电子化访客登记水平和形象。为各级政府机关和企事业单位提供一个多能、高效、安全、稳定的访客管理业务平台,帮助他们实现高效安全的来访人员管理。

针对政府机关的特殊管理要求,我们深入了解相关需求,开发了政府机关的智能访客系统。本系统的开发基于Visual C++ 语言、TCP/IP协议、SQL Server数据库进行。由数据采集、数据传输、业务操作、业务管理等子系统组成。本文论述了访客过程的呈现设计,在物理链路断开时,本文讨论了可以通过数据持久化处理来保证数据的完整性。

2 问题的提出

随着公安部颁布的《公安机关监督检查企业事业单位内部治安保卫工作规定》在2007年10月1日正式实施,来访宾客进出安全管理问题成为各级政府机关及企事业单位的头等大事。特别是社会经济的快速发展及融合,各种外来人员流动性的日益频繁,更增加了安全隐患:

来访人员真实身份难以识别;

人工纸质手写登记人员信息,书写繁杂,而且多位身份证号码容易错位漏位;

不利于企事业单位建立高科技管理形象;

纸质登记单容易丢失、损坏,同时不易保存,不便查找,流于形式,难以进行有效管理。

为此, 我们专门研发了智能访客管理系统,加强登记有序管理,防止安全事故发生。

3 系统组成和系统拓扑图

1)系统组成

2)系统拓扑图

4 过程的呈现

4.1 来访记录的创建

我们设计借助一些采集设备自动登记来访者和接待者的信息,来访者的身份信息由二代身份证读卡器华视CVR100获取,系统自动将来访者证件内的姓名、性别、出生年月、家庭住址和照片存入系统内。如果来访者使用警官证,则来访者的身份信息由警官证读卡器读取,系统自动将姓名、警号、服务的厅局和照片存到系统内。同时,我们设计采用高清晰网络摄像头罗技 Logitech C270进行现场头像抓拍,以防止来访者和证件人不符。

对于政府要害部门,为了防止外来人员(非政府机关内部系统人员)误闯入敏感区域,规定外来访客人员需由接待人员带进办公区,再由接待人员带出办公区。那么,如何实现这个功能,是我们设计的重点。由于各政府单位基本都实现了门禁一卡通系统,所以,我们设计充分利用标识员工身份的一卡通IC卡来完成此功能。在智能访客系统的前端,安装一个门禁读卡器,接待人只需在门禁读卡器上刷一下他的门禁控制IC卡,即可。如果门禁卡非法,软件会自动提示非法不允许。

在特殊情况下(如:来访者的证件无法识别),系统可自动切换到手动创建模式。

4.2 数据采集

包括来访者信息、接待者信息,为了实现程序代码的复用性,我们把部分模块设计采用OCX的ActiveX组件形式进行开发。代码片段如下(C++语法):

4.2.1 来访者二代身份证

基于二代证读卡器华视CVR100的SDK,我们设计开发了二代证识别组件IDRCoreOcx.ocx

二代证信息的结构定义:

structdefMsg{

unsigned short name[15]; //姓名

unsigned short sex[1]; //性别

unsigned short nation[2]; //民族

unsigned short bY[4],bM[2],bD[2]; //出生年月日

unsigned short address[35]; //地址

unsigned short id[18]; //身份证号码

unsigned short depart[15]; //发证机关

unsigned short tsY[4],tsM[2],tsD[2]; //有效起始日期

unsigned short tpY[4],tpM[2],tpD[2]; };//有效结束日期

defMsg IDRMsg;

接口函数的定义:

BOOL InitDevice() //用于初始化加载二代证读卡器动态链接库termb.dll到内存

Void FreeDevice() //释放二代证读卡器动态链接库termb.dll所占内存

BOOL OpenDevice() //用于打开二代证读卡器设备所接的计算机端口(串口或USB口)

Void CloseDevice() //用于关闭二代证读卡器设备

BSTR GetIDRData() //用于读卡,成功后在termb.dll文件所在路径下zp.bmp(照片信息),同时文字信息生成到IDGMsg,最后拼成字符串返回。

4.2.2 来访者警官证

基于警官证读卡器SDK,我们设计开发了警官证识别组件PoliceCoreOcx.ocx

警官证信息的结构定义:

typedefstructPoliceCardPubInfo

{BYTE _type; //证件类型未知 = 0, 警官证 = 1, 工作证 = 2, 退休证 = 3

BYTE _name[27]; //姓名(27个字节)

BYTE _sex; //性别女 = 0, 男 = 1, 未知 = 2

BYTE _ID[8]; //证件编号8位数字编号

BYTE _grade[16]; //警衔(16字节)

BYTE _duty[40]; //职务(40字节)

BYTE _unit[54]; //工作单位(54字节)

BYTE _validateStart[4]; //有效期起始:20年月日, 2007年12月1日表示如下:

//_validateStart[0] = 20; (20)

//_validateStart[1] = 7; (年-2000)

//_validateStart[2] = 12; (月)

//_validateStart[3] = 1; (日)

BYTE _validateEnd[4]; //有效期结束:20年月日, 2012年12月31日表示如下:

//_validateStart[0] = 20; (20)

//_validateStart[1] = 12; (年-2000)

//_validateStart[2] = 12; (月)

//_validateStart[3] = 31; (日)

}PoliceCardPubInfo;

PoliceCardPubInfo myInfo;

接口函数的定义:

BOOL OpenDevice(); //用于初始化警官证读卡器设备,并打开设备;

BOOL CloseDevice(); //关闭警官证读卡器设备,并释放设备资源;

BSTR GetPoliceData(); //用于读卡,成功后,将识别出的照片buffer保存到指定目录,将识别出的文字信息生成到myInfo,最后拼成字符串返回。

4.2.3 接待者门禁控制IC卡

门禁控制IC卡读卡器通过232的串口,把读到的卡号送给访客系统,基于串口通迅原理,我们设计开发了门禁IC卡识别组件EmployCardOcx.ocx

接口函数的定义:

BOOL InitReaderOcx(LPCTSTR strPort); //设置读卡器所在串口号,并打开串口

void FreeReaderOcx(); //关闭读卡器所在串口,

void CardEvent(CstringstrRet); //事件函数,组件可时刻监听是否有人刷门禁卡,一旦有人刷卡,组件则会主动识别出卡号,由字符串strRet返回。主程序通过注册事件回调,被动获得IC卡号。

4.2.4 来访者现场头像照片

USB接口高清晰摄像头,我们设计采用VFW(Windows 专门提供的Video For Windows)视频捕捉技术,实时抓拍来访者头像。代码片段如下(C++语法):

{charszDeviceName[80];

charszDeviceVersion[80];

char item[161];

int i;

for (i=0; i

{if ( capGetDriverDescription(i, szDeviceName, sizeof(szDeviceName),szDeviceVersion, sizeof(szDeviceVersion)) ) //获取系统已安装的所有捕获驱动程序的名称和版本。获取不到,则不去捕获视频。

{strcpy(item, szDeviceName);

strcat(item, “ “);

strcat(item, szDeviceVersion);

BOOL b = FALSE;

capDriverDisconnect(m_hVideo); //与捕获视频源断开连接

b = capDriverConnect(m_hVideo,i); //捕获视频源

if(!b)

continue;

BITMAPINFO bminfo;

intnSize = sizeof(BITMAPINFO);

capGetVideoFormat(m_hVideo,(void*)&bminfo,nSize); //获得视频格式 capPreviewRate( m_hVideo, 40 ); //设置预览的速度

capPreviewScale(m_hVideo, TRUE); //设置预览的比例

capPreview( m_hVideo, TRUE ); //开始预览

break; }}

if(i == 10)

{//没有找到视频采集设备}

return 0; }

4.3 数据呈现

数据呈现如下图所示,需要采集的信息有访客信息(含文字和身份证、警官证照片)、接待信息、来访者现场头像照片。

4.4 来访记录的修改

来访信息有时有其他情况需要陈述(如:需延时退卡、延时原因,来访者的车辆、事由、实际离开时间),因此,我们设计可以修改在系统界面实时呈现的未退卡访客记录。

4.5 来访的离开

当来访人员离开时,点击“退卡离开”按钮或者送客人在读卡器上进行刷卡操作都会弹出离开确认对话框,确认后,系统将自动获取访客离开时间并保存,然后将该条访问信息从该访客记录列表中删除。此后该访客信息只能在“信息检索”中查看、打印、生成报表,不能再进行任何的修改。

“退卡离开”和”刷卡离开”的区别:点击“退卡离开”按键,此时,系统默认无送客人;刷员工卡离开,此时,系统将员工卡所有人视为送客人。当送客人与接待人不是同一人时,会提示如下图所示:

5 数据的持久化处理

本系统设计配备了中心存储服务器和中心数据库服务器,所有照片信息和数据信息均通过网络协议实时地传输到中心,但是,当系统物理链路断开时,所有前端的信息均无法实时传输,解决这个问题的最好的方法就是将未传成功的照片和数据进行本地XML文件的持久化处理保存,当物理链路恢复正常时,读取XML文件后对照片和数据进行重新传输,从而保证了数据的完整性。

来访记录的结构定义

structRecordStruct

{CstringstrGuestName; //来宾姓名

CstringstrGuestAddress; //来宾地址

CstringstrGuestBirthday; //来宾出生日期

CstringstrGuestCertificateID; //来宾证件编号

CstringstrGuestDepartment; //来宾部门

CstringstrGuestPhone; //来宾电话

CstringstrEmployeeName; //接待人姓名

CstringstrEmployeeDepartment; //接待人部门

CstringstrEmployeePhone; //接待人电话

CstringstrEmployeeAdress; //接待人地址

CstringstrEmployeeCode; //接待人卡编号

CstringstrReason; //来访事由

CstringstrInTempID; //来宾卡编号

CstringstrStartTime; //来宾访问时间

CstringstrEndTime; //来宾离开时间

CstringstrCarID; //来宾车牌号码

CstringstrCarType; //来宾车型

CstringstrCarColor; //来宾车辆颜色

CstringstrGuestCertificateType; //证件类型

CstringstrManageName; //管理员姓名

intnGuestSex; //0表示男,1表示女

intnSendGuestEmployID; //送客的员工ID号

intnReceiveGuestEmployID; //迎客的员工ID号

CstringstrBeiZhu; //备注

CstringstrPhotoSavePath; //保存路径身份证照片

CstringstrPhotoLocaleSavePath;}; //保存路径现场抓图图片

RecordStructuploadimageinfo;

首先将不能上传的数据缓存化处理,代码片段如下(C++):

…//此处代码省略

if (pDlg->m_pBaseClass->UploadImage(pDlg->m_szCrossName, &uploadimageinfo) == TRUE)

{//上传成功}

else

{//上传失败,写到日志缓存链表m_WriteMsgLogList

CwriteMsgLog *pWriteMsgLog = new CwriteMsgLog;

pWriteMsgLog->strLocalPath = szLocalPath;

pWriteMsgLog->uploadimageinfo = uploadimageinfo;

pDlg->m_WriteMsgLogListLock.Lock();

try{

pDlg->m_WriteMsgLogList.AddTail(pWriteMsgLog); }

catch(…)

{}

pDlg->m_WriteMsgLogListLock.UnLock();}

然后将缓存数据以XML文件形式落地保存到本地硬盘,代码片段如下(C++):

POSITION pos = WriteMsgLogList.GetHeadPosition();

while(NULL != pos)

{CwriteMsgLog *pLII = WriteMsgLogList.GetAt(pos);

pDlg->m_SaveMsgLock.Lock();

pDlg->SaveXmlLog_MSG(pLII->strLocalPath,pLII->uploadimageinfo);//保存XML文件

pDlg->m_SaveMsgLock.UnLock();

deletepLII;

pLII = NULL;

WriteMsgLogList.RemoveAt(pos);

pos = WriteMsgLogList.GetHeadPosition();}

最后,当条件具备时,读取XML文件的记录后,一条一条将文件和数据上传到中心。

6 运行效果总结

本智能访客管理系统作为某省政府部门访客管理工具自2013年开始试运行以来运行良好,每年平均有12万 至15万 人次,访客过程中系统响应及时,没有出现网络阻塞现象,在每次物理链路故障时,均未影响系统的访客接待过程,且每次链路正常后,系统均及时恢复信息的上传,从未影响各级领导的查看工作。本系统作为智能访客管理工具为政府机关单位提供了良好的服务。

参考文献:

[1] 姜桂洪,张龙波.SQL Server 2005数据库应用与开发[M].清华大学出版社,2010.

[2] (美)Walter Savitch.C++面向对象程序设计[M]. 周靖,译.7版.清华大学出版社,2010.

[3] 吴晨 数据库项目案例导航[M].清华大学出版社,2004.

[4] 张海藩.软件工程导论[M].5版.清华大学出版社,2008.

[5] 曹付元,梁吉业.基于SQL语言的粗糙数据查询[J].计算机科学,2004(7).

上一篇:基于AVR单片机的SPI接口设计与实现 下一篇:试分析企业政工队伍的建设现状和对策