張升 潘佳佳
摘 要:本文針對(duì)傳統(tǒng)學(xué)生請(qǐng)假過程中流程繁瑣耗時(shí)、記錄不便管理等弊端,設(shè)計(jì)開發(fā)一款基于Android的學(xué)生請(qǐng)假APP。該軟件分為學(xué)生、教師、班主任等三個(gè)不同的角色,在請(qǐng)假流程流轉(zhuǎn)過程中對(duì)應(yīng)不同的任務(wù)節(jié)點(diǎn)。本文首先簡(jiǎn)要介紹了系統(tǒng)開發(fā)的環(huán)境及工具,然后根據(jù)不同角色分析了各自的功能需求,并介紹了其設(shè)計(jì)及實(shí)現(xiàn)過程,最后對(duì)系統(tǒng)進(jìn)行了功能測(cè)試,驗(yàn)證了其能夠快捷高效的完成請(qǐng)假流程的流轉(zhuǎn)及管理。
關(guān)鍵詞:Activiti;Android;學(xué)生請(qǐng)假
中圖分類號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言(Introduction)
目前,大學(xué)校園信息化正在逐漸完善,為了便于全校師生的學(xué)習(xí)、辦公、管理和生活,教務(wù)管理系統(tǒng)、招生就業(yè)系統(tǒng)等各種管理信息系統(tǒng)紛紛開始使用。而對(duì)于學(xué)生請(qǐng)假業(yè)務(wù)目前沒有相應(yīng)的軟件進(jìn)行實(shí)現(xiàn)與管理,還是按照線下方式完成。一般情況下,學(xué)生需要提前填寫請(qǐng)假申請(qǐng)表格,班主任首先進(jìn)行審批,并根據(jù)請(qǐng)假事由及天數(shù),判斷是否要交由上級(jí)學(xué)生主管部門審批備案。但這種形式有許多缺點(diǎn),例如請(qǐng)假過程費(fèi)時(shí)費(fèi)力,歷史信息不便記錄等。所以無論是學(xué)生還是教師都需要一個(gè)軟件對(duì)學(xué)生請(qǐng)假業(yè)務(wù)進(jìn)行實(shí)現(xiàn)和管理。
本系統(tǒng)的目的是設(shè)計(jì)實(shí)現(xiàn)一個(gè)基于Android[1,2]的學(xué)生請(qǐng)假APP。此APP可以借助安卓移動(dòng)設(shè)備,不僅使學(xué)生可以隨時(shí)隨地發(fā)起請(qǐng)假申請(qǐng),還可以使老師及時(shí)處理請(qǐng)假申請(qǐng),方便記錄、了解學(xué)生的請(qǐng)假情況。
2 系統(tǒng)開發(fā)環(huán)境及技術(shù)(System development
environment and technology)
2.1 開發(fā)環(huán)境
系統(tǒng)使用Android Studio為開發(fā)環(huán)境。Android Studio是目前Android開發(fā)中使用人數(shù)最多的開發(fā)工具,其軟件布局大方得當(dāng),開發(fā)人員使用十分順手,具有豐富的快捷方法,流暢的代碼提示功能,其自帶的布局編輯器能夠使開發(fā)人員及時(shí)預(yù)覽布局效果或直接拖拉控件。
2.2 系統(tǒng)架構(gòu)及主要技術(shù)
系統(tǒng)采用MVP[3]設(shè)計(jì)模式,使Android開發(fā)中實(shí)現(xiàn)了更好的代碼解耦。View層對(duì)應(yīng)于視圖,負(fù)責(zé)頁面控件的顯示,以及與用戶進(jìn)行數(shù)據(jù)交換,Presenter為了完成視圖與數(shù)據(jù)間的連接,通過Model層的對(duì)象獲取數(shù)據(jù),然后將其傳到View層,而Model層主要作用于數(shù)據(jù),對(duì)其進(jìn)行加工處理。MVP架構(gòu)圖如圖1所示。
系統(tǒng)使用了Activiti[4,5]業(yè)務(wù)流程管理框架,Activiti是基于Apache許可的開源BPM[6]平臺(tái),覆蓋了業(yè)務(wù)流程管理、工作流、服務(wù)協(xié)作等領(lǐng)域的一個(gè)開源的、靈活的、易擴(kuò)展的可執(zhí)行流程語言框架。本系統(tǒng)在此框架下進(jìn)行請(qǐng)假業(yè)務(wù)流程建模,在此框架下進(jìn)行請(qǐng)假流程的創(chuàng)建、流轉(zhuǎn)、歷史記錄等操作。
在請(qǐng)假業(yè)務(wù)流程(圖2)中,首先由學(xué)生發(fā)起請(qǐng)假申請(qǐng),提交給班主任審批;班主任根據(jù)請(qǐng)假天數(shù)、是否離校等情況,經(jīng)過互斥路由節(jié)點(diǎn),選擇是直接通知學(xué)生審批結(jié)果,還是轉(zhuǎn)由上級(jí)分管領(lǐng)導(dǎo)審批;分管領(lǐng)導(dǎo)審批結(jié)束后,將審批結(jié)果通知學(xué)生;學(xué)生根據(jù)審批結(jié)果經(jīng)過路由節(jié)點(diǎn)做相應(yīng)處理,若通過則通知相關(guān)代課教師后結(jié)束流程,若沒有通過則直接結(jié)束流程。
3 系統(tǒng)需求分析及功能設(shè)計(jì)(System requirement
analysis and function design)
3.1 系統(tǒng)功能需求
本系統(tǒng)主要有學(xué)生、班主任/分管領(lǐng)導(dǎo)和代課教師三種不同的角色,分別有不同的功能需求。
(1)學(xué)生角色主要功能
①發(fā)起請(qǐng)假申請(qǐng):學(xué)生發(fā)起請(qǐng)假申請(qǐng),填寫請(qǐng)假申請(qǐng)表中的請(qǐng)假起止時(shí)間、請(qǐng)假事由、是否離校外出及外出目的地等信息后,提交班主任審批。
②發(fā)起銷假申請(qǐng):學(xué)生對(duì)審批通過的請(qǐng)假申請(qǐng),發(fā)起銷假申請(qǐng),提供圖片等返校憑證后,提交班主任審核。
③歷史查詢:查詢歷史請(qǐng)假申請(qǐng)情況。
(2)班主任/分管領(lǐng)導(dǎo)角色主要功能
①請(qǐng)假審批:審核學(xué)生發(fā)起的請(qǐng)假申請(qǐng)表中的內(nèi)容,填寫審批意見后,進(jìn)行拒絕、同意及轉(zhuǎn)發(fā)操作。
②銷假審批:審核學(xué)生發(fā)起的銷假申請(qǐng),查看返校憑證的圖片,進(jìn)行拒絕、同意及轉(zhuǎn)發(fā)操作。
③歷史查詢:查詢處理過的請(qǐng)假、銷假申請(qǐng)。
(3)代課教師角色主要功能
代課教師角色功能較少,主要為請(qǐng)假信息查詢:用來查看學(xué)生請(qǐng)假成功后轉(zhuǎn)發(fā)過來的有效的請(qǐng)假信息。
3.2 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
本系統(tǒng)數(shù)據(jù)庫(kù)名為leavesystem,里面包含34個(gè)表,其中23個(gè)表為Activiti框架自動(dòng)生成的表,其余的數(shù)據(jù)表依次分別是本系統(tǒng)業(yè)務(wù)所需要的表。下面將對(duì)這些數(shù)據(jù)表分別介紹。
(1)Activiti框架相關(guān)表
Activiti框架相關(guān)表全部是以act_開頭,分別有資源流程信息表、運(yùn)行時(shí)信息表、歷史數(shù)據(jù)表、用戶信息表、公共數(shù)據(jù)表五類。
①資源流程信息表主要有:
act_re_deployment表:用來用于記錄部署信息;
act_re_model表:用于記錄流程設(shè)計(jì)模型部署數(shù)據(jù);
act_re_procdef表:用于記錄流程定義數(shù)據(jù)。
②運(yùn)行時(shí)信息表主要有:
act_ru_execution表:用于記錄運(yùn)行時(shí)流程執(zhí)行實(shí)例信息;
act_ru_identitylink表:用于記錄運(yùn)行時(shí)流程人員信息;
act_ru_task表:用于記錄運(yùn)行時(shí)任務(wù)節(jié)點(diǎn)信息;
act_ru_variable表:用于記錄運(yùn)行時(shí)流程變量數(shù)據(jù);
act_ru_event_subscr表:用于throwEvent、catchEvent時(shí)間監(jiān)聽;
act_ru_job表:用于記錄運(yùn)行時(shí)定時(shí)任務(wù)數(shù)據(jù)。
③歷史數(shù)據(jù)表主要有:
act_hi_actinst表:用于記錄歷史節(jié)點(diǎn)信息;
act_hi_attachment表:用于記錄歷史附件信息;
act_hi_comment表:用于記錄歷史意見;
act_hi_identitylink表:用于記錄歷史流程人員信息;
act_hi_detail 表:用于記錄歷史詳情;
act_hi_procinst表:用于記錄歷史流程實(shí)例信息;
act_hi_taskinst表:用于記錄歷史任務(wù)實(shí)例信息;
act_hi_varinst表:用于記錄歷史變量。
④用戶信息表主要有:
act_id_group表:用于記錄用戶組信息;
act_id_info表:用于記錄用戶擴(kuò)展信息;
act_id_membership表:用于記錄用戶與用戶組對(duì)應(yīng)信息;
act_id_user表:用于記錄用戶信息。
⑤公共數(shù)據(jù)表主要有:
act_ge_bytearray表:用于記錄二進(jìn)制數(shù)據(jù);
act_ge_property表:用于記錄整個(gè)流程引擎級(jí)別的數(shù)據(jù)。
(2)系統(tǒng)業(yè)務(wù)相關(guān)表
系統(tǒng)業(yè)務(wù)相關(guān)的表主要有:用戶表(user)、老師表(teacher)、學(xué)生表(student)、專業(yè)表(major)、班級(jí)表(classes)、角色表(role)、角色—用戶表(role_user)、老師—班級(jí)表(teacher_class)、假條表(leavecontent)、請(qǐng)假表(leavess)、銷假表(back)等。
①用戶表(user):主要字段有用戶id、用戶名、用戶賬號(hào)、密碼、郵箱等。
②老師表(teacher):老師繼承自用戶,主要字段為id,且與用戶表一致。
③學(xué)生表(student):學(xué)生繼承自用戶,主要字段有id(與用戶表一致)、班級(jí)id、專業(yè)id等。
④專業(yè)表(major):主要字段有專業(yè)id、專業(yè)名稱、專業(yè)說明、備注等。
⑤班級(jí)表(classes):主要字段有班級(jí)id、班級(jí)名稱、專業(yè)id、備注等。
⑥角色表(role):主要字段有角色id、角色名稱、說明等。
⑦角色—用戶表(role_user):主要字段有角色id、用戶id,用來存放角色和用戶的對(duì)應(yīng)關(guān)系。
⑧老師—班級(jí)表(teacher_class):主要字段有老師id、班級(jí)id、角色id,用來存放老師和班級(jí)的對(duì)應(yīng)關(guān)系。
⑨假條表(leavecontent):主要字段有id、流程id、學(xué)生id、開始時(shí)間、結(jié)束時(shí)間、請(qǐng)假原因、狀態(tài)標(biāo)志位等。
⑩請(qǐng)假表(leavess):主要字段有id、流程id、假條id、老師id、申請(qǐng)時(shí)間、回復(fù)時(shí)間、回復(fù)內(nèi)容、狀態(tài)標(biāo)志位、轉(zhuǎn)發(fā)id等。
銷假表(back):主要字段有id、流程id、假條id、銷假內(nèi)容、時(shí)間、地址、照片路徑、回復(fù)內(nèi)容、回復(fù)時(shí)間、申請(qǐng)時(shí)間、狀態(tài)標(biāo)志位等。
4 系統(tǒng)實(shí)現(xiàn)(System implementation)
系統(tǒng)可分為Android端和服務(wù)端兩部分。Android端采用MVP架構(gòu),其中View層為***Activity類,用來實(shí)現(xiàn)Android端界面,并使用ButterKnife進(jìn)行View對(duì)象綁定;Presenter層為***Request類,負(fù)責(zé)View層和Model層的交互,被View層的***Activity類引用,同時(shí)引用Model層的數(shù)據(jù)模型,若需要服務(wù)端的支持通過Retrofit網(wǎng)絡(luò)請(qǐng)求框架向服務(wù)端發(fā)送請(qǐng)求。服務(wù)端使用Servlet來處理Http請(qǐng)求;定義數(shù)據(jù)表對(duì)應(yīng)的實(shí)體類;定義***Dao類用來對(duì)實(shí)體類進(jìn)行數(shù)據(jù)訪問操作。下面介紹兩個(gè)主要功能的實(shí)現(xiàn)過程。
(1)用戶登錄
登錄界面(圖3)中主要有賬號(hào)、密碼文本框(EditText)、登錄按鈕(Button)和logo圖標(biāo)(ImageView)等組件,由View層LoginActivity類實(shí)現(xiàn)該頁面。打開登錄頁面時(shí),在onCreate方法中為組件、引用的Request及相關(guān)數(shù)據(jù)進(jìn)行初始化并使用ObjectAnimator屬性動(dòng)畫以漸出效果呈現(xiàn)各個(gè)組件。當(dāng)輸入賬號(hào)、密碼后點(diǎn)擊登錄按鈕時(shí),在登錄按鈕OnClick事件方法中判斷賬號(hào)、密碼是否填寫完整;若沒有填寫完整,彈出對(duì)應(yīng)的Toast消息框;若填寫完整,調(diào)用Presenter層LoginActivityRequest類中的login方法向服務(wù)端發(fā)送請(qǐng)求,服務(wù)端使用LoginServlet類處理該請(qǐng)求,返回登錄是否成功的響應(yīng)結(jié)果。login方法中將根據(jù)請(qǐng)求的不同響應(yīng)結(jié)果給出不同處理,若登錄請(qǐng)求不成功,則彈出響應(yīng)的信息;若登錄請(qǐng)求成功,調(diào)用View層中success方法,利用SharedPreferences將用戶信息記錄在用戶手機(jī)中,同時(shí)判斷當(dāng)前用戶角色,若角色數(shù)大于1,則彈出選擇角色窗口,由用戶選擇后,進(jìn)入對(duì)應(yīng)的界面,否則直接進(jìn)入當(dāng)前角色對(duì)應(yīng)的界面。
(2)發(fā)起請(qǐng)假
發(fā)起請(qǐng)假界面(圖4)主要有請(qǐng)假開始時(shí)間、請(qǐng)假結(jié)束時(shí)間、請(qǐng)假請(qǐng)求發(fā)送至及請(qǐng)假原因等組件,由View層WriteLeaveActivity類實(shí)現(xiàn)該界面。用戶進(jìn)入該頁面后,點(diǎn)擊“開始時(shí)間”和“結(jié)束時(shí)間”將出現(xiàn)DatePickerDialog時(shí)間選擇器,方便用戶選擇時(shí)間。若開始時(shí)間超過結(jié)束時(shí)間,在Toast提示框中,顯示相應(yīng)錯(cuò)誤信息。點(diǎn)擊“選擇發(fā)送到”按鈕,用戶可選擇發(fā)送請(qǐng)假請(qǐng)求的老師,列表中優(yōu)先列出該學(xué)生的班主任。信息填寫完成后,點(diǎn)擊“完成”按鈕,將通過對(duì)應(yīng)的Presenter層WriteLeaveActiRequest類中的toLeave方法向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器端ToLeaveServlet接受處理后,返回是否響應(yīng)成功的結(jié)果。
5 結(jié)論(Conclusion)
系統(tǒng)針對(duì)高校學(xué)生請(qǐng)銷假的實(shí)際需求出發(fā),使用標(biāo)準(zhǔn)的BPM框架Activiti進(jìn)行流程設(shè)計(jì),實(shí)現(xiàn)了學(xué)生請(qǐng)假的Android App,能夠方便快捷的進(jìn)行請(qǐng)假流程的流轉(zhuǎn),能夠?qū)崿F(xiàn)請(qǐng)假信息的管理與統(tǒng)計(jì)。系統(tǒng)使用了目前Android開發(fā)中較流行的MVP架構(gòu),使用Retrofit框架實(shí)現(xiàn)HTTP請(qǐng)求,使用Servlet進(jìn)行請(qǐng)求響應(yīng),頁面設(shè)計(jì)采用Material風(fēng)格。系統(tǒng)主要分學(xué)生、班主任/分管領(lǐng)導(dǎo)和代課教師等三種角色,實(shí)現(xiàn)了學(xué)生發(fā)起請(qǐng)銷假請(qǐng)求、班主任/分管領(lǐng)導(dǎo)處理(批準(zhǔn)或轉(zhuǎn)發(fā))請(qǐng)銷假請(qǐng)求、學(xué)生和代課教師查看審批結(jié)果等流程流轉(zhuǎn)功能,此外還實(shí)現(xiàn)了歷史請(qǐng)假請(qǐng)求查詢、統(tǒng)計(jì)等信息管理功能。當(dāng)前系統(tǒng)中的請(qǐng)銷假流程是使用Activiti框架預(yù)先設(shè)計(jì)好的,任務(wù)節(jié)點(diǎn)相對(duì)固定,雖然能滿足當(dāng)前請(qǐng)銷假業(yè)務(wù)的需要,但不夠靈活,若業(yè)務(wù)流程有較大變動(dòng),需重新設(shè)計(jì)修改編碼。所以,系統(tǒng)在后期迭代更新時(shí),可考慮增加流程定義功能,能夠在系統(tǒng)中定義使用流程。
參考文獻(xiàn)(References)
[1] Liu Yi.Mobile Network Application Engine Design Based on Android System[J].Applied Mechanics and Materials,2014(608):291-294.
[2] Lin Deng,Jeff Offutt,Paul Ammann,Nariman Mirzaei.Mutation operators for testing Android apps[J].Information and Software Technology,2017,1(81):154-168.
[3] 曾露.MVP模式在Android中的應(yīng)用研究[J].軟件,2016(06):75-78.
[4] 孫勇.基于Activiti的考勤工作流系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2016(02):75-78.
[5] 李修云.基于Activiti框架的在線審批流程應(yīng)用研究[J].計(jì)算機(jī)科學(xué),2016,43(6A):555-557.
[6] Matthias Geiger,Simon Harrer,J?rg Lenhard,et al.BPMN 2.0:The state of support and implementation[J].Future Generation Computer Systems,2018,3(80):250-262.
作者簡(jiǎn)介:
張 升(1982-),男,碩士,講師.研究領(lǐng)域:計(jì)算機(jī)應(yīng)用.
潘佳佳(1995-),女,本科.研究領(lǐng)域:軟件開發(fā).