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