謝亦才
摘要:本值班簽到系統(tǒng)以MVC為開發(fā)模式,采用JSP為前臺頁面開發(fā)技術(shù)、servlet開發(fā)跳轉(zhuǎn)等流程控制的控制器,Java語言開發(fā)業(yè)務邏輯等模型,以SQL SERVER2008為數(shù)據(jù)庫,tomcat為WEB服務器。開發(fā)了用戶管理、值班管理(包括部門排班、節(jié)假日排班、值周排班、生成值班信息等)、人臉識別設(shè)備管理、微信端值班情況查詢及上報等功能模塊。實現(xiàn)了值班簽到的真實性和無紙化,推進了校園信息化建設(shè)。
關(guān)鍵詞:人臉識別;值班考勤;MVC
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2019)07-0200-03
開放科學(資源服務)標識碼(OSID):
1 引言
我國絕大部分大學都建設(shè)了占地面積大的新校區(qū),需要每天安排值班人員巡查,及時發(fā)現(xiàn)、報告、處置各種突發(fā)事件。為了加強對值班人員的管理,切實履行值班職責,需要對值班人員進行簽到考勤。傳統(tǒng)的值班簽到考勤,很多采用紙質(zhì)簽名的方式,這種方式浪費人力、物力,特別不能解決真實性問題,很容易代簽、事后補簽。如今可以利用計算機和網(wǎng)絡(luò)技術(shù)使傳統(tǒng)的紙質(zhì)簽名考勤方式向網(wǎng)絡(luò)化和無紙化方向發(fā)展,有采用一卡通、指紋等打卡[1]的手段,但都無法解決真實性問題。目前采用人臉識別手段的值班考勤,能解決真實性問題,基于人臉識別的值班簽到系統(tǒng)就是因此而設(shè)計和開發(fā)的。可以有效解決代簽、事后補簽等問題,還可以圖文并茂的方式及時上報值班情況。
本文根據(jù)學校值班管理制度的實際業(yè)務需求,設(shè)計并實現(xiàn)了一套基于人臉識別的值班簽到系統(tǒng)。系統(tǒng)采用MVC架構(gòu),使用JSP做前臺WEB頁面、HTML5做微信查看和上報情況前端、SQL Server2008 作為后臺數(shù)據(jù)庫、JAVA編程實現(xiàn)業(yè)務邏輯。系統(tǒng)有用戶管理、值班管理(包括部門排班、節(jié)假日排班、值周排班、生成值班信息等)、人臉識別設(shè)備管理、微信端值班情況查詢及上報等功能模塊。本系統(tǒng)的使用提高了值班人員的便捷性和工作效率。
2 系統(tǒng)架構(gòu)
為了使系統(tǒng)有更好的可擴展性,便于后期的維護,本基于人臉識別的值班簽到系統(tǒng)采用MVC架構(gòu),如圖1所示。
MVC 設(shè)計模式的核心是實現(xiàn)三層甚至多層的松散耦合,它將應用程序抽象為模型、控制器以及視圖3 個部分,三者既分工又合作地完成用戶提交的任務[2]。實現(xiàn)了視圖層、業(yè)務層和模型層的分離。
(1)視圖層(View):提供用戶交互界面,包括登錄界面、排班頁面、值班上報頁面、刷臉記錄頁面、設(shè)備管理頁面等。它依據(jù)模型數(shù)據(jù)創(chuàng)建的,可以從 Model 訪問數(shù)據(jù),并指定如何表示數(shù)據(jù)。
(2)控制器(Controller):負責從視圖讀取數(shù)據(jù),并向模型發(fā)送數(shù)據(jù),然后根據(jù)用戶動作和 Model 處理的結(jié)果,選擇一個 視圖作為這個用戶請求響應的一部分。
(3)模型層 (Model):負責在數(shù)據(jù)庫中存取數(shù)據(jù),用于處理應用程序業(yè)務邏輯,比如登錄認證、排班錄入、生成預排班記錄、值班上報、設(shè)置值班類型、查詢值班情況等。
3 功能設(shè)計
該人臉識別簽到系統(tǒng)的功能有管理員系統(tǒng)和微信端查詢及上報情況子系統(tǒng)兩大模塊,其中管理員系統(tǒng)功能包括用戶管理、值班管理(包括部門排班、節(jié)假日排班、值周排班、生成值班信息等)、微信端值班情況查詢及上報、人臉識別設(shè)備管理等功能模塊。功能圖2所示:
4 數(shù)據(jù)庫設(shè)計
依據(jù)系統(tǒng)功能模塊, 按照數(shù)據(jù)庫設(shè)計規(guī)范[3],數(shù)據(jù)庫主要有用戶表、值班記錄表、值班調(diào)整表、值班類型表、設(shè)備表信息表等。其中以用戶表和值班記錄表為例如表1所示:
5 系統(tǒng)實現(xiàn)
根據(jù)系統(tǒng)功能和數(shù)據(jù)庫設(shè)計分析,實現(xiàn)系統(tǒng)的總體工作流程如圖3所示:
5.1 系統(tǒng)開發(fā)工具
本系統(tǒng)總體采用MVC開發(fā)模式,用JSP技術(shù)開發(fā)視圖層,其中微信端用HTML5,Java語言開發(fā)模型層,Servlet開發(fā)控制層。采用SQL SERVER2008做數(shù)據(jù)庫,TOMCAT做WEB服務器。
5.2 生成預值班記錄
系統(tǒng)每天晚上12點根據(jù)值班安排表自動生成第二天的值班人員名單,簡稱為預值班記錄,該預值班記錄只有工號和日期字段值,其他的諸如簽到時間、簽退時間、情況報告和狀態(tài)等字段暫設(shè)置為空,第二天各個值班人員確實通過刷臉簽到(退)時填入。部分核心代碼如下:
public void generateDuty(Integer scheduleId) {
SimpleCondition condition = new SimpleCondition();
condition.andEqual("scheduleId", scheduleId);
List
for (DutyDeptScheduleVO dutyScheduleVO : scheduleList) {
SimpleCondition itemCondition = new SimpleCondition();
itemCondition.andEqual("scheduleId", dutyScheduleVO.getScheduleId());
itemCondition.andEqual("dataFlag", BaseConstant.DATA_FLAG_NORMAL);
itemCondition.orderAsc("dutySort");
List
if (itemList == null) {throw new ProgramException("排班明細不能為空!"); }
if (itemList != null && dutyScheduleVO.getDutyNum() > itemList.size()) {
throw new ProgramException("值班人數(shù)大于員工數(shù),請重新設(shè)置");}
dutyDeptRecordService.deleteDutyRecordBatch(new Date(), dutyScheduleVO.getOrgId(), DutyTypeEnum.DeptDuty.getIndex());
if (ScheduleTypeEnum.WEEKLOOP.getIndex() == dutyScheduleVO.getSheduleType()) {generateWeekLoop(dutyScheduleVO, itemList);}
else if (ScheduleTypeEnum.DAYLOOP.getIndex() == dutyScheduleVO.getSheduleType()) {generateDayLoop(dutyScheduleVO, itemList);}
else if (ScheduleTypeEnum.FIXED.getIndex() == dutyScheduleVO.getSheduleType()) {generateFixed(dutyScheduleVO, itemList);
} else if (ScheduleTypeEnum.CADRE.getIndex() == dutyScheduleVO.getSheduleType()) {generateCadre(dutyScheduleVO, itemList);}
else if (ScheduleTypeEnum.WEEKEND.getIndex() == dutyScheduleVO.getSheduleType())
{generateWeekend(dutyScheduleVO, itemList); }}PartitiveFields fields = new PartitiveFields();
fields.put("status", 2);UserUtil.initUpdateInfo(fields);updatePartitive(fields, scheduleId); }}
5.3 微信端查詢
微信端查詢包括查看值班人員的簽到簽退時間和值班情況上報。這個功能的實現(xiàn)主要是在web層使用html5制作頁面,在學校的微信服務號中加鏈接即可實現(xiàn),如圖4所示:
5.4 刷臉簽到(退)更新策略算法
因為是刷臉記錄簽到(退)時間,而刷臉可能有意無意地會有多次,不同時間刷臉的時間記錄作為簽到還是簽退時間,后面的刷臉時間覆蓋前面的時間還是保持不變等都需要更新策略。刷臉簽到(退)更新策略步驟如下:
第一、獲取當前刷臉時間CurRecTime;
第二、簽到字段是否為空?是,則更新簽到值為當前CurRecTime;否,則轉(zhuǎn)入第三步;
第三、簽退字段值是否為空?是,則轉(zhuǎn)入第四步;否,則轉(zhuǎn)入第六步;
第四、簽到記錄值是否在正常簽到時間之前?是,則轉(zhuǎn)入第五步;否,則更新簽退字段值為當前CurRecTime;
第五、CurRecTime是否小于正常右端值?是,則更新簽到字段值為CurRecTime;否,則更新簽退字段值為CurRecTime;
第六、簽退記錄是否在正常簽退時間區(qū)間?是,不更新簽退值;否,則轉(zhuǎn)入第七步;
第七、簽退記錄時間小于正常簽退時間左端?是, 簽退字段值更新為CurRecTime;否,則不更新。
6 結(jié)束語
基于MVC模式開發(fā)的基于人臉識別的值班簽到系統(tǒng),有效地杜絕了替簽到、事后簽到的問題,從根本上解決了值班真實性問題。
參考文獻:
[1] 江奇峰.高校課堂指紋考勤信息管理系統(tǒng)設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2017.13(23):72-73.
[2] 邊霞,趙奎,胡曉勤,等.基于MVC的文件備份后臺管理系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機工程與技術(shù),2011,32(9):3196.
[3] 亓永剛.SQL Server數(shù)據(jù)庫管理與開發(fā)兵書[M].北京:電子工業(yè)出版社,2013.
【通聯(lián)編輯:梁書】