




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄緒論1.1研究的背景隨著國(guó)內(nèi)智能手機(jī)的不斷發(fā)展和市場(chǎng)下沉,價(jià)格更加優(yōu)惠,性能更加強(qiáng)盛的智能手機(jī)不斷進(jìn)入普通家庭的生活之中。對(duì)于普通學(xué)生而言,一臺(tái)可以較為流暢進(jìn)行視頻播放、游戲娛樂(lè)的手機(jī),在一段時(shí)間的攢錢之后便可以購(gòu)買。這使得本身接觸手機(jī)時(shí)間較少、較為困難的學(xué)生等群體有了更多的機(jī)會(huì)接觸手機(jī)。[1]而與此同時(shí),手機(jī)應(yīng)用商城中的娛樂(lè)應(yīng)用也在蓬勃發(fā)展。諸如抖音等短視頻平臺(tái),侵占了用戶大量的碎片時(shí)間,甚至更甚者,會(huì)占用使用者原本的工作、學(xué)習(xí)等用于自我提升的時(shí)間,造成自我提升的延遲,從而無(wú)法趕上大部隊(duì)的提升效率。[2]許多具有一定成癮性的應(yīng)用和游戲,在很大程度上會(huì)影響學(xué)生、員工的自我管理。[3]學(xué)生可能會(huì)分心于游戲內(nèi)容或短視頻內(nèi)容而無(wú)法專心學(xué)習(xí)[4],員工可能因此錯(cuò)過(guò)工作時(shí)間等。需要注意的是,在這種情況下,自我管理能力的缺失會(huì)進(jìn)入一種惡性循環(huán),導(dǎo)致原本就略顯缺乏的自我管理能力進(jìn)一步崩潰,發(fā)展成諸如沉迷游戲或短視頻等現(xiàn)象,最后導(dǎo)致個(gè)人的懈怠、疲懶等情況,而無(wú)法進(jìn)行良好的個(gè)人生活規(guī)劃和生活發(fā)展。因而,對(duì)于個(gè)人智能手機(jī)的使用進(jìn)行一定的管理和約束,是當(dāng)前值得注意的發(fā)展方向。而番茄工作法作為一種基于事件的管理方法,在全球范圍內(nèi)都頗為流行,由其是在知識(shí)工作者和創(chuàng)造性職業(yè)領(lǐng)域廣泛使用,大量用戶采用番茄工作法并分享了他們的成功經(jīng)驗(yàn)。他們的經(jīng)驗(yàn)表明,這種方法非常有用,能夠幫助他們提高生產(chǎn)力和生產(chǎn)效率,避免拖延和浪費(fèi)時(shí)間。[5]番茄工作法的流行不僅是因?yàn)槠浜?jiǎn)單易用,也因?yàn)樗膶?shí)際效果得到了較為廣泛的證實(shí),被認(rèn)為是一種高效的時(shí)間管理工具。[6]將番茄工作法與手機(jī)應(yīng)用相結(jié)合,利用智能手機(jī)的便攜性和高效性來(lái)提高番茄工作法的管理效率和方式,并且降低其入門門檻,使得更多希望進(jìn)行個(gè)人時(shí)間管理的用戶能夠使用這種優(yōu)異的方式來(lái)提高自我時(shí)間管理能力。1.2國(guó)內(nèi)外發(fā)展概況個(gè)人時(shí)間管理APP在國(guó)內(nèi)外都得到了廣泛的應(yīng)用和關(guān)注,市場(chǎng)規(guī)模逐年增長(zhǎng)。在國(guó)外,諸如TodoList、Trello、Asana等個(gè)人時(shí)間管理APP已經(jīng)成為用戶較為熟知和廣泛使用的品牌。而國(guó)內(nèi),知名的APP包括“滴答清單”、“專注森林”等也都給與用戶較為優(yōu)異的體驗(yàn)。但一些國(guó)外的個(gè)人時(shí)間管理APP本土化或國(guó)人開(kāi)發(fā)的個(gè)人時(shí)間管理APP均存在一定的社交屬性。甚至有的應(yīng)用上添加了短視頻的功能,將本身用于減少過(guò)度娛樂(lè),提高自我時(shí)間管理的應(yīng)用再一次變?yōu)榱藙儕Z用戶時(shí)間的娛樂(lè)應(yīng)用。此外,一些個(gè)人管理時(shí)間應(yīng)用過(guò)于專業(yè)化,需要使用者本身付出較為高昂的學(xué)習(xí)成本,并消耗一定時(shí)間才能夠較為熟練使用并掌握。即使如此,也存在對(duì)于應(yīng)用本身體驗(yàn)不佳的問(wèn)題。也有一些應(yīng)用存在無(wú)科學(xué)化理論指導(dǎo),僅僅是作為一種日程安排,或者是更加“個(gè)性化”具有優(yōu)秀補(bǔ)充功能的鬧鐘存在。也有一部分應(yīng)用,如“專注森林”,也采用了番茄工作法的理念,但是其本身并沒(méi)有完全采用番茄工作法的概念,而是部分借用。[7]番茄工作法不允許用戶采用過(guò)短番茄鐘或過(guò)長(zhǎng)番茄鐘,而這種功能,在“專注森林”中是能夠?qū)崿F(xiàn)的。并且“專注森林”的激勵(lì)方案設(shè)計(jì)過(guò)于激進(jìn),將專注時(shí)長(zhǎng)化為肥料澆灌樹(shù)木成長(zhǎng)。其本質(zhì)是利用可視化的激勵(lì)鼓勵(lì)用戶進(jìn)行更多更加良好的時(shí)間管理和專注管理,但在其內(nèi)部擁有的學(xué)習(xí)社群中,很多人采用類似掛機(jī)的方式,24小時(shí)處于“專注”之中。也有人因此選取較長(zhǎng)的專注時(shí)長(zhǎng),如一個(gè)半小時(shí)甚至更長(zhǎng)的時(shí)間,這樣子無(wú)法達(dá)到番茄鐘對(duì)于時(shí)間高效利用和管理的效果。[8]1.3研究的目的與內(nèi)容本系統(tǒng)是基于MVP和番茄工作法的時(shí)間管理APP,其作用主要是能夠讓用戶減少對(duì)于手機(jī)使用或其他娛樂(lè)方式的過(guò)度享受,利用番茄工作法的理念,提高用戶工作效率,減輕工作壓力,提高時(shí)間管理能力,增強(qiáng)自我控制力,達(dá)成一個(gè)較為良好的個(gè)人生活習(xí)慣和時(shí)間管理效力。本系統(tǒng)可以在本地未聯(lián)網(wǎng)登錄或登錄狀態(tài)下進(jìn)行使用,登錄后用戶可以同步云端數(shù)據(jù)來(lái)使用自己此前已經(jīng)保存的番茄鐘以及每日小事。用戶可以對(duì)于番茄鐘和每日小事進(jìn)行添加、修改、查看和刪除,對(duì)于個(gè)人賬戶進(jìn)行管理,修改頭像、簽名等。同時(shí)能夠查看自己的專注時(shí)間,查看專注報(bào)告,查詢歷史專注記錄。1.4論文的組織結(jié)構(gòu)論文的每一章概要如下:第1章,緒論:本章主要講述了個(gè)人管理APP的發(fā)展前景和需求,并對(duì)當(dāng)前國(guó)內(nèi)外相關(guān)應(yīng)用以及理論的發(fā)展進(jìn)行了一定的闡述,表述其存在的不足之處。最后,介紹了本文的研究?jī)?nèi)容與結(jié)構(gòu)。第2章,系統(tǒng)分析:本章主要講述基于MVP和番茄工作法的時(shí)間管理APP的業(yè)務(wù)發(fā)展分析,對(duì)于系統(tǒng)的功能性需求分析該系統(tǒng)應(yīng)當(dāng)具有的功能模塊,對(duì)于非功能性方面分析該課題是否可靠,對(duì)于系統(tǒng)的開(kāi)發(fā)可行性進(jìn)行分析,講述該系統(tǒng)主要使用的技術(shù),并簡(jiǎn)要分析開(kāi)發(fā)該系統(tǒng)需要的系統(tǒng)環(huán)境。第3章,總體設(shè)計(jì):本章主要講述本系統(tǒng)的總體設(shè)計(jì),對(duì)于系統(tǒng)功能模塊設(shè)計(jì)進(jìn)行流程分析,給出相應(yīng)流程圖,對(duì)于數(shù)據(jù)庫(kù)進(jìn)行分析,給出數(shù)據(jù)庫(kù)的數(shù)據(jù)表以及E-R圖等數(shù)據(jù)庫(kù)設(shè)計(jì),對(duì)于本系統(tǒng)需要使用的接口進(jìn)行設(shè)計(jì),以及對(duì)于相應(yīng)需要安全校驗(yàn)的地方進(jìn)行安全設(shè)計(jì)。第4章,系統(tǒng)詳細(xì)設(shè)計(jì):系統(tǒng)詳細(xì)設(shè)計(jì)包括對(duì)于系統(tǒng)內(nèi)部整體的對(duì)象設(shè)計(jì)與交互設(shè)計(jì),對(duì)于功能模塊的詳細(xì)設(shè)計(jì)。第5章,系統(tǒng)實(shí)現(xiàn):本章主要講述系統(tǒng)在整體開(kāi)發(fā)過(guò)程中,整個(gè)功能的實(shí)現(xiàn),通過(guò)圖文并茂的方式講述整體系統(tǒng)的最終實(shí)現(xiàn)效果。第6章,系統(tǒng)測(cè)試:本章主要講述對(duì)于整個(gè)項(xiàng)目的整體測(cè)試,對(duì)于項(xiàng)目所展示的功能進(jìn)行較為完善的測(cè)試,并展示最終測(cè)試結(jié)果。第7章,結(jié)束語(yǔ):對(duì)于項(xiàng)目進(jìn)行整體總結(jié)和未來(lái)展望。 系統(tǒng)分析2系統(tǒng)分析2.1業(yè)務(wù)分析本系統(tǒng)僅擁有用戶一個(gè)適用對(duì)象,不設(shè)置管理員等。作為一款個(gè)人向的應(yīng)用軟件,減少社群交集功能能夠幫助用戶更加深入進(jìn)行個(gè)人時(shí)間管理,減少由于對(duì)于軟件內(nèi)存在的社群交集而分心。2.2需求分析2.2.1功能需求分析1、用戶賬戶模塊(1)登錄注冊(cè)新用戶需要填寫用戶名、密碼、郵箱以及圖靈驗(yàn)證碼先進(jìn)行注冊(cè),注冊(cè)成功后根據(jù)賬號(hào)密碼登錄。老用戶根據(jù)賬號(hào)密碼登錄。(2)個(gè)人信息管理用戶可以進(jìn)入個(gè)人界面進(jìn)行個(gè)人信息管理,能夠更改個(gè)人用戶名,簽名,頭像。并且可以同步個(gè)人在云端的數(shù)據(jù)到本地。用例圖如下圖2.1所示圖2.1用戶賬戶模塊用例圖2、番茄事項(xiàng)模塊(1)番茄事項(xiàng)用戶可以在主界面番茄事項(xiàng)頁(yè)面點(diǎn)擊右下角添加按鈕,進(jìn)行添加番茄事項(xiàng),選擇番茄鐘的時(shí)長(zhǎng),短休息時(shí)間,長(zhǎng)休息時(shí)間以及間隔頻率。生成一個(gè)新的番茄鐘,添加成功后會(huì)直接跳轉(zhuǎn)至新的番茄鐘執(zhí)行頁(yè)面。在番茄事項(xiàng)頁(yè)面長(zhǎng)按已經(jīng)添加的番茄鐘可以進(jìn)入編輯頁(yè)面,修改已經(jīng)添加的番茄鐘,滑動(dòng)可以刪除已經(jīng)添加的番茄鐘。而點(diǎn)擊番茄鐘可以進(jìn)入執(zhí)行頁(yè)面。完成一次番茄鐘后會(huì)跳出評(píng)價(jià)彈窗,可以對(duì)于本次番茄鐘進(jìn)行評(píng)價(jià)。在并未完成任一一次番茄鐘直接退出番茄鐘會(huì)受到扣除積分的懲罰。(2)時(shí)間鎖用戶可以選擇是否開(kāi)啟時(shí)間鎖功能,開(kāi)啟時(shí)間鎖功能后,在番茄鐘進(jìn)行的時(shí)間里,將無(wú)法開(kāi)啟除了系統(tǒng)自帶的應(yīng)用軟件以外后續(xù)下載安裝的軟件。初次開(kāi)啟時(shí)間鎖功能時(shí),需要進(jìn)行應(yīng)用授權(quán)。用例圖如下圖2.2所示。圖2.2番茄事項(xiàng)模塊用例圖3、每日小事模塊用戶在主界面的每日小事界面點(diǎn)擊右下角添加按鈕可以進(jìn)行添加每日小事,填寫每日小事的標(biāo)題,描述,選擇每日小事執(zhí)行的時(shí)間以及是否重復(fù)提醒,即可以添加每日小事。長(zhǎng)按已經(jīng)成功添加的每日小事可以進(jìn)入編輯模式進(jìn)行修改,滑動(dòng)已經(jīng)成功添加的每日小事則可以刪除。在到達(dá)此前選擇的時(shí)間之后,則會(huì)出現(xiàn)廣播提醒需要執(zhí)行對(duì)應(yīng)事項(xiàng)。用例圖如圖2.3所示。4、歷史記錄模塊點(diǎn)擊側(cè)面抽屜界面,選擇歷史記錄頁(yè)面可以進(jìn)行對(duì)于歷史記錄的查看,點(diǎn)擊上方日歷可以選擇需要查看的日期,下方會(huì)顯示當(dāng)日已經(jīng)進(jìn)行的番茄鐘專注記錄,可以長(zhǎng)按專注記錄查看此前自己對(duì)于本次專注的評(píng)價(jià),點(diǎn)擊彈出框口左上角的修改按鈕后即可以修改此前評(píng)價(jià)?;瑒?dòng)專注記錄可以進(jìn)行刪除。用例圖如圖2.3所示。5、專注報(bào)告模塊(1)專注數(shù)據(jù)統(tǒng)計(jì)在個(gè)人界面的數(shù)據(jù)頁(yè)面以及點(diǎn)擊側(cè)邊抽屜及界面,選擇數(shù)據(jù),均可以查看自己的專注數(shù)據(jù)統(tǒng)計(jì)。(2)專注報(bào)告在個(gè)人界面的報(bào)告界面,點(diǎn)擊日?qǐng)?bào)、周報(bào)、月報(bào)以及年報(bào)按鈕可以對(duì)應(yīng)查看本日,本周,本月以及本年的專注報(bào)告。用例圖如圖2.3所示。6、圖片管理模塊在上傳個(gè)人本地圖片作為頭像之后,會(huì)同步更換個(gè)人界面的背景。個(gè)人頭像圖片則會(huì)上傳到后端服務(wù)器的數(shù)據(jù)庫(kù)中。用例圖如圖2.3所示。圖2.3其余模塊用例圖2.2.2非功能需求分析這個(gè)系統(tǒng)僅僅是對(duì)于該個(gè)人時(shí)間管理APP的初步設(shè)計(jì)與開(kāi)發(fā),并不能證明該系統(tǒng)沒(méi)有缺陷。但當(dāng)一個(gè)程序在執(zhí)行時(shí),若沒(méi)有達(dá)到預(yù)期的性能,通常會(huì)導(dǎo)致一個(gè)很差的用戶體驗(yàn)。因此,一個(gè)系統(tǒng)出了具有強(qiáng)大的功能外,還應(yīng)當(dāng)具有相應(yīng)的性能支持。一個(gè)好的性能能夠讓系統(tǒng)運(yùn)行更加流暢,讓系統(tǒng)達(dá)到更加良好的狀態(tài)。對(duì)于該系統(tǒng),需要考慮的性能要求有許多,以下列出一些性能要求。1、可靠性本系統(tǒng)在運(yùn)行過(guò)程中,應(yīng)給與用戶良好的用戶體驗(yàn),在進(jìn)行數(shù)據(jù)添加等情況下,系統(tǒng)在運(yùn)行時(shí),要保證其能夠穩(wěn)定而無(wú)大問(wèn)題,能夠保證系統(tǒng)流暢運(yùn)行,穩(wěn)定運(yùn)行,盡量避免系統(tǒng)閃退等意外情況。2、易用性作為個(gè)人化的簡(jiǎn)易時(shí)間管理應(yīng)用,面向人群是廣泛的,可能大多數(shù)人并沒(méi)有使用過(guò)相關(guān)的個(gè)人時(shí)間管理應(yīng)用,因此,作為一個(gè)服務(wù)性質(zhì)的應(yīng)用,應(yīng)當(dāng)幫助使用者快速上手和找到自己最合適的使用方式。因此本系統(tǒng)不需要過(guò)于復(fù)雜,只需要簡(jiǎn)潔易用即可。3、安全性系統(tǒng)的安全性就是在使用的過(guò)程中,要保護(hù)用個(gè)人信息安全。系統(tǒng)對(duì)于用戶的密碼會(huì)進(jìn)行加密,在注冊(cè)時(shí)需要同時(shí)完成郵箱驗(yàn)證碼和圖靈驗(yàn)證碼的檢驗(yàn),同時(shí),登錄時(shí)也需要圖靈驗(yàn)證碼的檢驗(yàn)。4、維護(hù)性系統(tǒng)的維護(hù)能力也需要著重考慮。在開(kāi)發(fā)過(guò)程中,為便于以后的維護(hù),必須采用一個(gè)便于維護(hù)的開(kāi)發(fā)模式,如MVP模式。這樣做的好處,就是可以更好的進(jìn)行維護(hù),減少代碼的冗余,方便調(diào)用。2.3可行性分析1、經(jīng)濟(jì)可行性本軟件為完全免費(fèi)軟件,后續(xù)可能推出廣告功能來(lái)保持盈虧。本系統(tǒng)采用MySQL數(shù)據(jù)庫(kù),安全可靠。并且對(duì)于此類時(shí)間管理APP,有較為廣泛的需求群體以供挖掘。[9]2、技術(shù)可行性本系統(tǒng)開(kāi)發(fā),APP部分采用Android開(kāi)發(fā),使用MVP模式,后端采用SpringBoot架構(gòu),統(tǒng)合SpringJPA等架構(gòu)。相關(guān)時(shí)間管理理論采用番茄工作法進(jìn)行理論指導(dǎo)。(1)MVP模式MVP(Model-View-Presenter)作為一種設(shè)計(jì)模式,被廣泛應(yīng)用于在Android應(yīng)用程序中實(shí)現(xiàn)更清晰、可維護(hù)和可擴(kuò)展的代碼。在MVP模式中,應(yīng)用被分成三個(gè)主要組成部分:模型(Model)、視圖(View)和呈現(xiàn)者(Presenter)。[10]模型(Model):模型屬于應(yīng)用的業(yè)務(wù)邏輯和數(shù)據(jù)處理的核心部分,通常是一個(gè)Java類。數(shù)據(jù)處理,提供API接口,以及實(shí)現(xiàn)應(yīng)用程序的核心功能均由它處理。但在MVP模式中,模型不應(yīng)直接與視圖進(jìn)行交互,而應(yīng)通過(guò)呈現(xiàn)者傳遞數(shù)據(jù)。[11]視圖(View):視圖是負(fù)責(zé)用戶界面的展示部分,通常是一個(gè)Activity、Fragment或者自定義View。視圖接收用戶的輸入,并展示數(shù)據(jù),同時(shí)也與呈現(xiàn)者進(jìn)行交互。在MVP模式中,視圖不應(yīng)直接與模型交互,而應(yīng)通過(guò)呈現(xiàn)者獲取數(shù)據(jù)。[12]呈現(xiàn)者(Presenter):呈現(xiàn)者屬于視圖和模型之間的中介,負(fù)責(zé)協(xié)調(diào)兩者的交互。呈現(xiàn)者通常也是一個(gè)Java類,它將視圖的事件接受,并處理它們,然后再將數(shù)據(jù)傳遞給模型進(jìn)行處理,最后將處理后的數(shù)據(jù)傳遞給視圖進(jìn)行展示。在MVP模式中,呈現(xiàn)者是一個(gè)不可或缺的組成部分,它可以幫助降低視圖和模型之間的耦合度降低,以此來(lái)提高代碼的可讀性和可維護(hù)性。因此MVP模式擁有以下顯著優(yōu)點(diǎn):(1)分離關(guān)注點(diǎn):MVP模式可以將應(yīng)用程序的不同部分分離開(kāi)來(lái),讓每個(gè)部分專注于自己的職責(zé)。這能夠讓代碼更易于維護(hù)和擴(kuò)展。[13](2)易于測(cè)試:MVP模式將業(yè)務(wù)邏輯和界面分離開(kāi)來(lái),由此可以更容易地對(duì)代碼進(jìn)行單元測(cè)試,確保它們正常工作。[14](3)可重用性:MVP模式可以提高代碼的可重用性。每當(dāng)一個(gè)視圖或者模型要被替換或重構(gòu)時(shí),只要更新呈現(xiàn)者即可,而不必修改其他代碼。[15]整體上,MVP模式能幫助開(kāi)發(fā)者開(kāi)發(fā)更清晰、可維護(hù)和可擴(kuò)展的代碼。[16](2)番茄工作法:番茄工作法(PomodoroTechnique)是一種高效的時(shí)間管理方法,旨在提高工作效率和時(shí)間利用率。這種方法最初由意大利人弗朗西斯科·西里洛(FrancescoCirillo)在1980年代開(kāi)發(fā),名稱來(lái)自于他在廚房中使用的一種定時(shí)器,該定時(shí)器形狀為番茄,因而命名為番茄工作法。番茄工作法的基本原理是將一段工作時(shí)間分為25分鐘的工作時(shí)間塊(番茄),每個(gè)番茄之間休息5分鐘。每當(dāng)完成四個(gè)番茄工作時(shí)間塊之后,需要進(jìn)行一次長(zhǎng)休息(通常為15-30分鐘)。在番茄工作時(shí)間塊的過(guò)程中,應(yīng)該盡可能專注于工作,并盡量避免任何干擾。[5]一個(gè)完整的番茄鐘流程如下:1、選擇一項(xiàng)事務(wù):選擇需要完成的事務(wù)并確保它可以在一個(gè)番茄時(shí)間塊內(nèi)完成,如果不行,請(qǐng)確保該事務(wù)可以中途休息不會(huì)影響后續(xù)執(zhí)行。2、設(shè)置定時(shí)器:設(shè)置定時(shí)器為25分鐘,然后開(kāi)始工作。3、盡可能專注工作:在25分鐘的時(shí)間里,盡可能專注于工作,避免任何干擾。如果在這期間發(fā)現(xiàn)注意力開(kāi)始分散,請(qǐng)將問(wèn)題記錄下來(lái),并盡快將其解決。4、暫停工作:當(dāng)定時(shí)器響起,25分鐘結(jié)束,請(qǐng)立即停止工作,并記錄下一次番茄開(kāi)始的時(shí)間,以確保能夠持續(xù)性執(zhí)行。5、休息5分鐘:當(dāng)一段番茄工作時(shí)間塊結(jié)束后,在5分鐘的休息時(shí)間里,可以放松一下,伸展身體,或者進(jìn)行其他放松身心的活動(dòng)。6、進(jìn)行下一個(gè)番茄:在休息時(shí)間結(jié)束后,重復(fù)上述步驟,繼續(xù)工作。7、進(jìn)行長(zhǎng)休息:在完成四個(gè)番茄工作時(shí)間塊之后,需要進(jìn)行一次長(zhǎng)休息(通常為15-30分鐘),這有助于恢復(fù)精力和集中注意力。[6]在這種工作法下,可以達(dá)到增加專注力、減少壓力和提高時(shí)間利用率的效果。本項(xiàng)目在一定程度上采用了番茄工作法的理念,但對(duì)于其進(jìn)行了一定的補(bǔ)充和修改,以此來(lái)便于使用者使用。對(duì)于時(shí)間管理的初學(xué)者而言,25分鐘可能是一個(gè)較為恰當(dāng)?shù)臅r(shí)間,但對(duì)于一些具有更加優(yōu)良專注能力的人而言,他們可以進(jìn)行更加長(zhǎng)時(shí)間的高效專注,而25分鐘就結(jié)束的番茄鐘可能對(duì)于他們而言反而略顯不足,因此本項(xiàng)目允許使用者一定程度延長(zhǎng)番茄鐘時(shí)間,但不能超出一個(gè)小時(shí)的范疇。番茄工作法易于上手,并且見(jiàn)效快速,得到大量使用者的好評(píng)和推薦,能夠幫助用戶快速進(jìn)行時(shí)間管理,掌握時(shí)間管理的基本能力。3、操作可行性最終展現(xiàn)與用戶面前的軟件為AndroidAPP,作為現(xiàn)今使用人群最廣泛的手機(jī)操作系統(tǒng),能夠快速獲取本軟件,并且操作界面簡(jiǎn)單易懂,能夠快速上手。[15]2.4開(kāi)發(fā)環(huán)境分析時(shí)間管理APP是使用MVP模式以及SpringBoot架構(gòu)開(kāi)發(fā),其中主要包括以下元素:JDK版本:JDK1.8數(shù)據(jù)庫(kù):MySQL8.0、Redis5.7網(wǎng)絡(luò)服務(wù)器:Tomcat9.0開(kāi)發(fā)工具:IntelliJIDEA2020.2、AndroidStudio4.1操作系統(tǒng):Window10、Ubuntu20手機(jī):MuMu模擬器(Andoird6.0)2.5本章小結(jié)本章節(jié)主要對(duì)于基于MVP和番茄工作法的時(shí)間管理APP的系統(tǒng)分析,對(duì)其總體業(yè)務(wù)分析,對(duì)于整個(gè)系統(tǒng)的功能性需求進(jìn)行簡(jiǎn)單闡述和分析,對(duì)于非功能性需求也進(jìn)行了簡(jiǎn)要分析,介紹了本系統(tǒng)主要采用的MVP模式以及番茄工作法,并講述其存在的優(yōu)勢(shì),對(duì)于開(kāi)發(fā)所需要的環(huán)境和開(kāi)發(fā)工具簡(jiǎn)單介紹,表述其具有開(kāi)發(fā)的可行性。 總體設(shè)計(jì)3總體設(shè)計(jì)3.1系統(tǒng)總體設(shè)計(jì)本系統(tǒng)為個(gè)人向的時(shí)間管理應(yīng)用,Android端為主要的用戶操作端,而后臺(tái)僅作為與數(shù)據(jù)庫(kù)交互的存在,以此減輕安卓端的數(shù)據(jù)處理。[19]安卓端的主要功能分為六大模塊:用戶賬戶模塊、番茄事項(xiàng)模塊、每日小事模塊、歷史記錄模塊、專注報(bào)告模塊、圖片管理模塊。下面是系統(tǒng)的功能模塊圖,如圖3.1所示。圖3.1系統(tǒng)功能模塊圖3.2功能模塊設(shè)計(jì)1、用戶賬戶模塊用戶賬戶模塊總共有登錄、注冊(cè)和用戶信息管理三大子模塊,首先用戶在注冊(cè)之時(shí),需要進(jìn)行賬號(hào)、密碼的輸入,并且第二次輸入密碼進(jìn)行密碼驗(yàn)證,同時(shí)注冊(cè)之時(shí)需要正確輸入圖形驗(yàn)證碼中的驗(yàn)證信息,包括但不限于字母、數(shù)字單獨(dú)或結(jié)合等,也有簡(jiǎn)單計(jì)算題等的圖形驗(yàn)證碼,只有在驗(yàn)證碼正確之時(shí),才能夠進(jìn)行郵箱驗(yàn)證碼的發(fā)送,在郵箱驗(yàn)證碼正確之后,可以進(jìn)行賬號(hào)的注冊(cè),同時(shí)郵箱驗(yàn)證碼不可以短時(shí)間多次發(fā)送,以免頻繁發(fā)送產(chǎn)生,郵箱驗(yàn)證碼也有時(shí)間效應(yīng),超時(shí)后不可使用。而登錄需要正確輸入賬號(hào)密碼和圖形驗(yàn)證碼才能進(jìn)行登錄。由于郵箱驗(yàn)證碼和圖形驗(yàn)證碼具有時(shí)效性,需要采用Redis數(shù)據(jù)庫(kù)來(lái)進(jìn)行臨時(shí)存儲(chǔ),而對(duì)于郵箱驗(yàn)證碼的發(fā)送,會(huì)采用基于SMTP協(xié)議來(lái)利用163郵箱進(jìn)行驗(yàn)證碼的發(fā)送,圖形驗(yàn)證碼會(huì)采用easy-captcha來(lái)進(jìn)行驗(yàn)證碼的生成在用戶信息管理模塊中,用戶進(jìn)入用戶信息界面查看自己詳細(xì)的用戶信息,在進(jìn)入修改裝天后,可以修改自己的用戶名等信息,同時(shí)可以修改頭像,但需要獲取訪問(wèn)本地圖片的權(quán)限。其中注冊(cè)登錄功能的流程圖如下圖3.2所示:圖3.2登錄流程圖2、番茄事項(xiàng)模塊番茄事務(wù)模塊為本系統(tǒng)的主要功能模塊,其中包括對(duì)于番茄事務(wù)模塊的增加、刪除、修改、執(zhí)行和執(zhí)行完成之后的評(píng)價(jià),以及作為番茄事務(wù)中會(huì)使用到但也會(huì)同樣作為單一功能處理的時(shí)間鎖。番茄事務(wù)是基于番茄工作法的理論,并允許使用者在可調(diào)節(jié)范圍內(nèi)進(jìn)行一定量修改的功能模塊,整體主要執(zhí)行流程如下圖3.3所示:圖3.3番茄事項(xiàng)模塊流程圖3、每日小事模塊每日小事是作為本APP作為習(xí)慣養(yǎng)成的功能,是作為番茄事務(wù)的補(bǔ)充,利用每日小事可以執(zhí)行一些并非具有時(shí)間跨度或者具有不確定時(shí)間跨度以及時(shí)間跨度較短的事件,如喝一杯水,做一套眼保健操等小目標(biāo)進(jìn)行打卡,是作為習(xí)慣養(yǎng)成的一種培養(yǎng)方式。整體主要執(zhí)行流程如下圖3.4所示。圖3.4每日小事模塊流程圖4、歷史記錄模塊歷史記錄模塊是對(duì)于用戶在番茄事務(wù)功能中進(jìn)行的使用記錄進(jìn)行統(tǒng)計(jì),在改模塊中,可以通過(guò)選擇日期查看當(dāng)日的執(zhí)行歷史,并進(jìn)行修改和刪除。如下圖3.5所示。圖3.5歷史記錄模塊流程圖5、專注報(bào)告模塊專注數(shù)據(jù)統(tǒng)計(jì)模塊是對(duì)于所有執(zhí)行數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總的模塊,會(huì)展示近階段的番茄時(shí)鐘執(zhí)行次數(shù)、時(shí)長(zhǎng)等,也有番茄事務(wù)的總體執(zhí)行情況。除此以外,還有總體記錄的周報(bào)、月報(bào)、年報(bào)等可以進(jìn)行查看??傮w流程如下圖3.6所示圖3.6專注報(bào)告模塊流程圖6、圖片管理模塊圖片管理是對(duì)于整體應(yīng)用的圖片進(jìn)行管理,用戶可以選擇上傳一些圖片作為頭像。3.3數(shù)據(jù)庫(kù)設(shè)計(jì)3.3.1數(shù)據(jù)庫(kù)表設(shè)計(jì)1、后臺(tái)數(shù)據(jù)庫(kù)表設(shè)計(jì)用戶表(tb_user),主鍵是id,如表3.1所示。表3.1用戶表字段名字段含義數(shù)據(jù)類型長(zhǎng)度類型idIdVARCHAR20主鍵img圖片地址VARCHAR200user_name用戶名VARCHAR20autograph個(gè)性簽名VARCHAR45sex性別VARCHAR4total執(zhí)行總量INTemail郵箱VARCHAR25password密碼VARCHAR64credit學(xué)習(xí)積分INT番茄鐘表(tb_tomato),主鍵是object_id,如表3.2所示。表3.2番茄鐘表字段名字段含義數(shù)據(jù)類型長(zhǎng)度類型object_idIdVARCHAR20主鍵user_id用戶idVARCHAR20外鍵title番茄鐘名稱VARCHAR45img_id番茄鐘背景圖idINTlong_break長(zhǎng)休息時(shí)間INTshort_break短休息時(shí)間INTwork_length番茄鐘時(shí)長(zhǎng)INTfrequency間隔次數(shù)INTis_delete是否已刪除VARCHAR2每日小事表(tb_todo),主鍵是object_id,如表3.3所示。表3.3每日小事表字段名字段含義數(shù)據(jù)類型長(zhǎng)度類型object_idIdVARCHAR20主鍵user_id用戶idVARCHAR20外鍵title每日小事名稱VARCHAR45date提醒的日期VARCHAR25time提醒的時(shí)間VARCHAR25descp描述VARCHAR80img_id每日小事背景圖idINT20is_alerted是否已提醒INTis_repeat是否重復(fù)INTremind_time提醒時(shí)間BIGINTremind_time_no_day重復(fù)提醒時(shí)間BIGINTis_delete是否已刪除VARCHAR2圖片表(tb_image),主鍵是id,如表3.4所示。表3.4圖片表字段名字段含義數(shù)據(jù)類型長(zhǎng)度類型idIdVARCHAR20主鍵user_id用戶idVARCHAR20外鍵url存儲(chǔ)連接地址VARCHAR1024state圖片狀態(tài)VARCHAR1create_time創(chuàng)造時(shí)間DATEupdate_time最后修改時(shí)間DATEname圖片名稱VARCHAR100path存儲(chǔ)地址VARCHAR512content_type圖片類型VARCHAR32original圖片使用類型VARCHAR20番茄鐘記錄表(tb_clock),主鍵是object_id,如表3.5所示。表3.5圖片表字段名字段含義數(shù)據(jù)類型長(zhǎng)度類型object_idIdVARCHAR20主鍵user_id用戶idVARCHAR20外鍵start_time番茄鐘開(kāi)始時(shí)間DATETIMEend_time番茄鐘結(jié)束時(shí)間DATETIMEtime上傳時(shí)間DATETIMEduration番茄鐘時(shí)長(zhǎng)INTtomato_id番茄鐘idVARCHAR100外鍵評(píng)論表(tb_comment),主鍵是id,如表3.6所示。表3.6評(píng)論表字段名字段含義數(shù)據(jù)類型長(zhǎng)度類型idIdVARCHAR20主鍵user_id用戶idVARCHAR20外鍵clock_id番茄鐘記錄idVARCHAR20外鍵comment評(píng)論VARCHAR80token表(tb_refresh_token),主鍵是id,如表3.7所示。表3.7token表字段名字段含義數(shù)據(jù)類型長(zhǎng)度類型idIdVARCHAR20主鍵user_id用戶idVARCHAR20外鍵refresh_token刷新登錄tokenTEXTtoken_keytoken的關(guān)鍵鑰VARCHAR32create_time創(chuàng)建時(shí)間DATETIMEupdate_time更新時(shí)間DATETIME2、本地?cái)?shù)據(jù)表本地番茄鐘表(Clock),主鍵是id,如表3.8所示。表3.8本地番茄鐘表字段名字段含義數(shù)據(jù)類型長(zhǎng)度類型ididint主鍵object_id后臺(tái)記錄的idStringclocktitle番茄鐘名稱StringimgId番茄鐘背景圖idintlongBreak長(zhǎng)休息時(shí)間intshortBreak短休息時(shí)間intworkLength番茄鐘時(shí)長(zhǎng)intfrequency間隔次數(shù)int本地每日小事表(Todo),主鍵是id,如表3.9所示。表3.9本地每日小事表字段名字段含義數(shù)據(jù)類型長(zhǎng)度類型idIdint主鍵object_idIdStringtodotitle每日小事名稱String45tododate提醒的日期String25todotime提醒的時(shí)間String25tododes描述String80imgId每日小事背景圖idintisAlerted是否已提醒intisRepeat是否重復(fù)intremindTime提醒時(shí)間longremindTimeNoDay重復(fù)提醒時(shí)間long執(zhí)行記錄表(timer_schedule),主鍵是_id,如表3.10所示。表3.10執(zhí)行記錄表字段名字段含義數(shù)據(jù)類型長(zhǎng)度類型_idIdint主鍵clocktitle番茄鐘名稱Stringstart_time開(kāi)始時(shí)間DATETIMEend_time結(jié)束時(shí)間DATETIMEduration持續(xù)時(shí)間inttime_add添加時(shí)間DATE3.3.2E-R圖設(shè)計(jì)1、后端數(shù)據(jù)庫(kù)E-R圖設(shè)計(jì)用戶實(shí)體圖,主要屬性有:用戶id(主鍵)、圖片地址img、用戶名user_name、個(gè)性簽名autograph、性別sex、執(zhí)行總量total、郵箱email、密碼password、學(xué)習(xí)積分credit。如圖3.7所示。圖3.7用戶實(shí)體圖番茄鐘實(shí)體圖,主要屬性有:番茄鐘idobject_id(主鍵)、用戶iduser_id(外鍵)、番茄鐘名稱title、番茄鐘背景圖idimg_id、長(zhǎng)時(shí)間休息long_break、短時(shí)間休息short_break、番茄鐘時(shí)長(zhǎng)work_length、間隔次數(shù)frequency、是否已刪除is_delete。如圖3.8所示。圖3.8番茄鐘實(shí)體圖每日小事實(shí)體圖,主要屬性有:每日小事idobject_id(主鍵)、用戶iduser_id(外鍵)、每日小事名稱title、提醒的日期date、提醒的時(shí)間time、每日小事描述descp、每日小事背景圖idimg_id、是否已提醒is_alert、是否重復(fù)提醒is_repeat、提醒時(shí)間remind_time、重復(fù)提醒時(shí)間remind_time_no_day、是否已刪除is_delete。如圖3.9所示。圖3.9每日小事實(shí)體圖圖片實(shí)體圖,主要屬性有:圖片id(主鍵)、用戶iduser_id(外鍵)、存儲(chǔ)鏈接地址url、圖片狀態(tài)state、創(chuàng)造時(shí)間create_time、最終修改時(shí)間update_time、圖片名稱name、存儲(chǔ)地址path、圖片類型content_type、圖片使用類型original。如圖3.10所示。圖3.10圖片實(shí)體圖番茄鐘記錄表實(shí)體圖,主要屬性有:番茄鐘記錄idobject_id(主鍵)、用戶iduser_id(外鍵)、番茄鐘idtomato_id(外鍵)、番茄鐘開(kāi)始時(shí)間start_time、番茄鐘結(jié)束時(shí)間end_time、上傳時(shí)間time、番茄鐘時(shí)長(zhǎng)duration。如圖3.11所示。圖3.11番茄鐘記錄實(shí)體圖評(píng)論實(shí)體圖,主要屬性有:評(píng)論id(主鍵)、用戶iduser_id(外鍵)、番茄鐘記錄idclock_id(外鍵)、評(píng)論comment。如圖3.12所示。圖3.12評(píng)論實(shí)體圖token實(shí)體圖,主要屬性有:tokenid(主鍵)、用戶iduser_id(外鍵)、刷新登錄tokenrefersh_token、token的關(guān)鍵鑰token_key、創(chuàng)建時(shí)間create_time、更新時(shí)間update_time。如圖3.13所示。圖3.13token實(shí)體圖2、本地?cái)?shù)據(jù)庫(kù)E-R圖設(shè)計(jì)本地番茄鐘實(shí)體圖,主要屬性有:番茄鐘id(主鍵)、后臺(tái)記錄的idobject_id、番茄鐘名稱clocktitle、番茄鐘背景圖idimgId、長(zhǎng)時(shí)間休息longBreak、短時(shí)間休息shortBreak、番茄鐘時(shí)長(zhǎng)workLength、間隔次數(shù)frequency。如圖3.14所示。圖3.13本地番茄鐘實(shí)體圖本地每日小事實(shí)體圖,主要屬性有:每日小事id(主鍵)、后臺(tái)記錄的idobject_id、每日小事名稱todotitle、提醒的日期tododate、提醒的時(shí)間todotime、每日小事描述tododes、每日小事背景圖idimgId、是否已提醒isAlert、是否重復(fù)提醒isRepeat、提醒時(shí)間remindTime、重復(fù)提醒時(shí)間remindTimeNoDay。如圖3.15所示。圖3.15本地每日小事實(shí)體圖執(zhí)行記錄表實(shí)體圖,主要屬性有:_id(主鍵)、番茄鐘名稱clocktitle、開(kāi)始時(shí)間start_time、結(jié)束時(shí)間end_time、持續(xù)時(shí)間duration、記錄添加時(shí)間time_add。如圖3.16所示。圖3.15本地執(zhí)行記錄實(shí)體圖圖3.16為本數(shù)據(jù)庫(kù)位于服務(wù)器端的E-R圖,展示了數(shù)據(jù)庫(kù)主要實(shí)體之間的相互關(guān)系。為了便于展示,對(duì)于各個(gè)實(shí)體的屬性,可以參考上方實(shí)體圖。圖3.16數(shù)據(jù)庫(kù)端E-R圖3.4接口設(shè)計(jì)本文系統(tǒng)采用前端gradle以及后端maven多模塊項(xiàng)目開(kāi)發(fā)。3.4.1數(shù)據(jù)庫(kù)接口設(shè)計(jì)本文系統(tǒng)采用SrpingJPA作為數(shù)據(jù)庫(kù)框架,其中數(shù)據(jù)庫(kù)接口如下:(1)ClockDao接口表3.11ClockDao接口限定符及類型方法和說(shuō)明ClockfindOneByObjectId(StringclockId)List<Clock>findAllByUserId(StringuserId)List<Clock>findAllByUserAndToday(StringuserId)List<Clock>findAllByUserIdAndDay(Stringtime,StringuserId)List<Clock>findAllByUserIdAndWeek(Stringtime,StringuserId)List<Clock>findAllByUserIdAndMonth(Stringtime,StringuserId)List<Clock>findAllByUserIdAndYear(Stringtime,StringuserId)intdeleteClockByObjectId(ObjectId)(2)RefreshTokenDao接口表3.12RefreshTokenDao接口限定符及類型方法和說(shuō)明RefreshTokenfindOneByTokenKey(StringtokenKey)RefreshTokenfindOneByUserId(StringuserId)intdeleteAllByUserId(StringuserId)intdeleteAllByTokenKey(StringtokenKey)(3)篇幅限制,除了基礎(chǔ)的作為增刪改查的接口方法不做描述,而除了上述已經(jīng)描述的接口表之外,還有CommentDao接口,ImageDao接口,TodoDao接口,TomatoDao接口,UserDao接口等。3.4.2前后端交互接口設(shè)計(jì)本系統(tǒng)后端返回?cái)?shù)據(jù)均包裝為ResponseResult,封裝為json數(shù)據(jù)格式[20],內(nèi)容如下表3.13所示:表3.13ResponseResult類型表字段名字段類型字段作用successboolean是否成功codeint操作結(jié)果碼messageString操作結(jié)果提示dataObject返回給前端的數(shù)據(jù)其中code操作碼如下:表3.14code操作碼表操作碼名稱codemessageSUCCESS20000操作成功LOGIN_SUCCESS20002登陸成功JOIN_IN_SUCCESS20001注冊(cè)成功FAILED40000操作失敗GET_RESOURCE_FAILED40001獲取資源失敗PERMISSION_DENIED40003操作限制ACCOUNT_DENIED40004賬號(hào)被禁止ACCOUNT_NOT_LOGIN40002賬號(hào)未登錄ERROR_40340005權(quán)限不足ERROR_40440006頁(yè)面丟失ERROR_50440007系統(tǒng)繁忙,請(qǐng)稍后重試。。。ERROR_50540008請(qǐng)求錯(cuò)誤,請(qǐng)檢查所提交數(shù)據(jù)本系統(tǒng)前后端交互的接口設(shè)計(jì)如下:(1)UserApi接口表3.15UserApi接口表方法說(shuō)明register(Useruser,StringcaptchaCode,StringemailCode)注冊(cè)賬號(hào)login(Stringcaptcha,Useruser)登陸getCaptcha(HttpServletResponseresponse)獲取圖靈驗(yàn)證碼sendVerifyCode(HttpServletRequestrequest,Stringtype,StringemailAddress)發(fā)送郵件getUserInfo(StringuserId)獲取用戶信息updateUserInfo(StringuserId,Useruser)更新用戶信息checkEmail(Stringemail)查看郵箱是否已經(jīng)注冊(cè)logout()登出checkUserName(Stringusername)查看用戶名是否已經(jīng)被使用parseToken()獲取自動(dòng)登錄使用的token數(shù)據(jù)updateUserCredit(StringuserId)更新用戶學(xué)習(xí)積分?jǐn)?shù)據(jù)(2)TomatoApi接口表3.16TomatoApi接口表方法說(shuō)明listAllClocksToday()獲取今日完成記錄listAllClocksWeek(Stringdate)獲取本周所有完成記錄listAllClocksMonth(Stringdate)獲取本月所有完成記錄listAllClocksYear(Stirngdate)獲取今年所有完成記錄listAllClocks()獲取所有完成記錄addClock(Clockclock)添加完成記錄addTomato(Tomatotomato)添加番茄鐘listAllTomato()獲取所有番茄鐘deleteTomatoByUpdateState(StringtomatoId)通過(guò)修改狀態(tài)來(lái)進(jìn)行番茄鐘偽刪除updateTomato(Tomatotomato)更新番茄鐘doComment(Commentcomment)發(fā)表評(píng)論getComment(StringclockId)獲取評(píng)論updateComment(Commentcomment)更新評(píng)論(3)除以上部分,后端還有HistoryApi接口,TodoApi接口,ImageApi接口等,受限于篇幅,不一一展示。3.5安全性設(shè)計(jì)(1)郵箱驗(yàn)證碼和圖靈驗(yàn)證碼本系統(tǒng)在注冊(cè)時(shí)需要進(jìn)行郵箱驗(yàn)證碼與圖靈驗(yàn)證碼的雙重驗(yàn)證,而登錄是同樣需要進(jìn)行圖靈驗(yàn)證碼的驗(yàn)證,以防止對(duì)于密碼的試探行為。通過(guò)集成easy-captcha包,隨機(jī)生成驗(yàn)證碼并將驗(yàn)證碼封裝成gif類型圖片傳輸?shù)角岸诉M(jìn)行展示,驗(yàn)證碼數(shù)據(jù)則存儲(chǔ)在Redis數(shù)據(jù)庫(kù)中,驗(yàn)證碼類型多樣,可以為純數(shù)字,純字母,字母數(shù)字混合,甚至是簡(jiǎn)單運(yùn)算法,并且能夠生成多種文字類型格式,且驗(yàn)證碼在輸入錯(cuò)誤后會(huì)自動(dòng)刷新,并且在十分鐘不輸入對(duì)應(yīng)驗(yàn)證碼數(shù)據(jù)后,驗(yàn)證碼會(huì)自動(dòng)失效。而用戶在注冊(cè)時(shí),同樣需要進(jìn)行郵箱驗(yàn)證碼的輸入,且單獨(dú)一個(gè)郵箱只能進(jìn)行一個(gè)賬號(hào)的注冊(cè),不可重復(fù)注冊(cè),在用戶進(jìn)行密碼修改時(shí),同樣需要獲取對(duì)應(yīng)的郵箱驗(yàn)證碼,否則不能修改賬號(hào)密碼。(2)密碼加密本系統(tǒng)密碼并非明文存儲(chǔ),而是通過(guò)加密后存儲(chǔ)到數(shù)據(jù)庫(kù)中,本系統(tǒng)采用SpringSecurity中內(nèi)置的加密算法BCrypt進(jìn)行密碼加密。[18]3.6本章小結(jié)本章對(duì)于系統(tǒng)總體的設(shè)計(jì)進(jìn)行了一個(gè)概括性地描述,對(duì)于系統(tǒng)中的數(shù)據(jù)庫(kù)給出了較為詳細(xì)的設(shè)計(jì)說(shuō)明,通過(guò)E-R理清了本系統(tǒng)數(shù)據(jù)庫(kù)中各個(gè)表的關(guān)系,并加以整理和使用,對(duì)于系統(tǒng)中的接口設(shè)計(jì)也做了詳盡地說(shuō)明,能夠較為清晰了解本系統(tǒng)的各個(gè)接口。此外,還介紹系統(tǒng)的安全性設(shè)計(jì),能夠保證使用者數(shù)據(jù)更加安全,不被竊取和破解。[21] 系統(tǒng)詳細(xì)設(shè)計(jì)4系統(tǒng)詳細(xì)設(shè)計(jì)4.1對(duì)象設(shè)計(jì)4.1.1后端類圖設(shè)計(jì)1、后端數(shù)據(jù)相關(guān)類(1)用戶(User)類如圖4.1中所示。該類是描述用戶信息的類。其屬性包括id(用戶編號(hào))、img(圖片編號(hào))、userName(用戶名)、autograph(個(gè)性簽名)、sex(性別)、total(使用總量)、email(郵箱)、password(密碼)、credit(學(xué)習(xí)積分)等。(2)執(zhí)行事務(wù)存儲(chǔ)記錄(Clock)類如圖4.1中所示。該類是描述番茄事務(wù)在完成后用于存儲(chǔ)其執(zhí)行信息的類。其屬性包括objectId(存儲(chǔ)記錄編號(hào))、userId(用戶編號(hào))、startTime(該番茄時(shí)鐘開(kāi)始執(zhí)行的時(shí)間)、endTime(該番茄時(shí)鐘結(jié)束執(zhí)行是的時(shí)間)、time(上傳至數(shù)據(jù)庫(kù)的時(shí)間)、duration(該番茄時(shí)鐘的持續(xù)時(shí)間)、tomatoId(番茄時(shí)鐘編號(hào))(3)番茄時(shí)鐘(Tomato)類。該類是描述番茄時(shí)鐘相關(guān)信息的類。其屬性包括objectId(番茄時(shí)鐘編號(hào))、userId(用戶編號(hào))、title(番茄時(shí)鐘的標(biāo)題名稱)、workLength(單次番茄鐘執(zhí)行時(shí)長(zhǎng))、shortBreak(短休息時(shí)長(zhǎng))、longBreak(長(zhǎng)休息時(shí)長(zhǎng))、imgId(使用背景圖片的編號(hào))、frequency(長(zhǎng)休息頻率)、isDelete(是否已經(jīng)刪除不顯示)(4)番茄時(shí)鐘執(zhí)行評(píng)論(Comment)類。該類是描述番茄時(shí)鐘執(zhí)行過(guò)后,對(duì)于當(dāng)前時(shí)間內(nèi)番茄時(shí)鐘執(zhí)行的效果的自我評(píng)價(jià)類。其屬性包括id(評(píng)論編號(hào))、userId(用戶編號(hào))、clockId(存儲(chǔ)記錄編號(hào))、comment(評(píng)論內(nèi)容)(5)歷史記錄(History)類。該類描述番茄時(shí)鐘執(zhí)行結(jié)束后的歷史記錄。其屬性包括clock(執(zhí)行記錄)、tomato(番茄鐘)。(6)圖片(Image)類。該類描述了本系統(tǒng)對(duì)于圖片存儲(chǔ)的內(nèi)容。其屬性包括id(圖片編號(hào))、userId(用戶編號(hào))、url(鏈接地址)、state(圖片狀態(tài),即是否刪除)、createTime(圖片創(chuàng)建時(shí)間)、updateTime(圖片更新時(shí)間)、name(圖片名稱)、path(圖片服務(wù)器存儲(chǔ)位置)、contentType(圖片類型)、original(圖片使用作用為頭像,背景或其他)。(7)每日小事(Todos)類。該類描述了本系統(tǒng)的每日小事類。其屬性包括objectId(每日小事編號(hào))、userId(用戶編號(hào))、date(提醒日期)、time(提醒時(shí)間)、title(標(biāo)題)、desc(每日小事事情描述)、imgId(圖片編號(hào))、isAlerted(是否已經(jīng)提醒)、isRepeat(是否重復(fù)提醒)、remindTime(單詞提醒的提醒時(shí)間)、redmindTimeNoDay(重復(fù)提醒的提醒時(shí)間)、isDelete(是否已經(jīng)刪除)。(8)登錄token(RefreshToken)類id(token編號(hào))、userId(用戶編號(hào))、refreshToken(token數(shù)據(jù))、tokenKey(token鍵值)、createTime(創(chuàng)建時(shí)間)、updateTime(更新時(shí)間)圖4.1后端數(shù)據(jù)用類圖設(shè)計(jì)2、后端服務(wù)相關(guān)類(9)IUserService(用戶服務(wù))接口如圖4.2中所示。該接口定義了用戶的服務(wù)相關(guān)功能,其中包括createCaptcha(HttpServletResponse)(創(chuàng)建圖靈驗(yàn)證碼)、sendEmail(HttpServletRequest,String,String)(發(fā)送郵箱驗(yàn)證碼用于注冊(cè)、修改密碼等)、register(User,String,String)(注冊(cè)用戶賬號(hào))、doLogin(String,User)(用戶登錄)、checkUser()(查詢?cè)撚脩羰欠褚呀?jīng)登錄,存在已有的token)、getUserInfo(String)(獲取用戶信息)、updateUserInfo(String,User)(更新用戶信息)、checkEmail(String)(查詢?cè)撪]箱是否已經(jīng)被注冊(cè))、doLogOut()(用戶登出賬號(hào))、checkUserName(String)(查詢?cè)撚脩裘欠褚呀?jīng)被注冊(cè))、parseToken()(拋出一個(gè)用戶相關(guān)數(shù)據(jù)信息,用于檢查用戶的token)、updateUserCredit(String)(更新用戶的學(xué)習(xí)積分)等方法。(10)UserServiceImpl(用戶服務(wù)實(shí)現(xiàn))類見(jiàn)圖4.2。實(shí)現(xiàn)IUserService(用戶服務(wù))接口。(11)ITomatoService(番茄時(shí)鐘服務(wù))接口如圖4.2所示。該接口定義了用戶在使用番茄時(shí)鐘及其相關(guān)衍生功能中需要使用到的服務(wù)功能。其中包括postClock(Clock)(提交番茄鐘執(zhí)行記錄)、listClocks()(獲取所有番茄鐘執(zhí)行記錄)、listClocksToday()(獲取今日番茄鐘執(zhí)行記錄)、postTomato(Tomato)(提交番茄鐘保存至后端數(shù)據(jù)庫(kù))、listTomatoes()(獲取所有已經(jīng)存儲(chǔ)未刪除的番茄鐘)、deleteTomato(String)(通過(guò)修改番茄鐘狀態(tài)來(lái)偽刪除番茄鐘)、alterTomato(Tomato)(修改番茄鐘)、listClocksWeek(String)(獲取本周所有已完成的番茄鐘記錄)、listClocksMonth(String)(獲取本月所有已完成的番茄鐘事項(xiàng)記錄)、listClocksYear(String)(獲取今年所有已完成的記錄)、postComment(Comment)(提交對(duì)于單次完成的番茄鐘的評(píng)價(jià))、getCommentByClockId(String)(獲取某一次番茄鐘記錄的評(píng)價(jià)內(nèi)容)、updateCommentInfo(Comment)(修改評(píng)價(jià)內(nèi)容)(12)TomatoServiceImpl(番茄時(shí)鐘服務(wù)實(shí)現(xiàn))類如圖4.2所示。實(shí)現(xiàn)了ITomatoService(番茄時(shí)鐘服務(wù))接口。(13)IImageService(圖片服務(wù))接口如圖4.2所示。該接口定義了用戶在使用圖片過(guò)程中會(huì)使用到的一系列功能服務(wù)。其中包括uploadImage(String,MultipartFile)(上傳圖片至后端服務(wù)器)、viewImage(HttpServletResponse,String)(獲取圖片)、listImage(int,int,String)(獲取所有已經(jīng)上傳的圖片)、deleteImageById(String)(根據(jù)圖片編號(hào)刪除圖片)(14)ImageServiceImpl(圖片服務(wù)實(shí)現(xiàn))類如圖4.2所示。該類實(shí)現(xiàn)了IImageService(圖片服務(wù))接口。(15)IHistoryService(歷史記錄服務(wù))接口如圖4.2所示。該接口定義了用戶對(duì)于歷史記錄的獲取和查詢功能服務(wù)。其中包括listHistory(String)(獲取歷史數(shù)據(jù))、deleteHistory(String)(刪除歷史)。(16)HistoryServiceImpl(歷史記錄服務(wù)實(shí)現(xiàn))類如圖4.2所示。該類實(shí)現(xiàn)了IHistoryService(歷史記錄服務(wù))接口。(17)ITodoService(每日小事服務(wù))接口如圖4.2所示。該接口定義樂(lè)用戶對(duì)于每日小事服務(wù)所需要的相關(guān)方法等一系列功能服務(wù)。其中包括postTodos(Todos)(上傳每日小事)、listTodos()(獲取每日小事清單)、deleteTodos(String)(刪除每日小事)、alterTodos(Todos)(修改每日小事)。(18)TodoServiceImpl(每日小事服務(wù)實(shí)現(xiàn))類如圖4.2所示。該類實(shí)現(xiàn)了ITodoService(每日小事服務(wù))接口。圖4.2后端服務(wù)相關(guān)類3、后端其他類(19)HistoryApi(歷史Api)類,該類是作為后端用于與安卓端進(jìn)行交互所使用的的接口存儲(chǔ)的類,用于存放有關(guān)歷史數(shù)據(jù)相關(guān)的接口。(20)TodoApi(每日小事Api)類,該類是作為后端用于與安卓端進(jìn)行交互每日小事相關(guān)的接口的類,用于存放有關(guān)每日小事相關(guān)的接口。(21)TomatoApi(番茄事項(xiàng)Api)類,該類是作為后端用于與安卓端進(jìn)行交互番茄事項(xiàng)相關(guān)的接口的類,用于存放有關(guān)番茄事項(xiàng)相關(guān)的接口,包括番茄事項(xiàng)本身,以及番茄事項(xiàng)執(zhí)行記錄,對(duì)于番茄事項(xiàng)執(zhí)行結(jié)果的評(píng)價(jià)等。(22)ImageApi(圖片Api)類,該類是用于進(jìn)行后端與安卓端交互圖片數(shù)據(jù)所使用的接口的相關(guān)類,用于存放與系統(tǒng)所使用的圖片相關(guān)的類。(23)UserApi(用戶Api)類,該類是用于進(jìn)行后端與安卓端交互用戶數(shù)據(jù)所使用的接口的香瓜類,用于存放與用戶相關(guān)方法的類。(25)ClaimsUtils(聲明存儲(chǔ)轉(zhuǎn)換工具)類,該類是用于轉(zhuǎn)換用戶聲明與用戶(User)類的工具。(26)Constants(常量工具),該類是存儲(chǔ)本系統(tǒng)需要使用的static常量的工具類。后端還有許多類,包括工具類、控制類、框架邏輯類等受限于篇幅不一一詳細(xì)介紹。4.1.2安卓端類設(shè)計(jì)1、安卓端數(shù)據(jù)相關(guān)類安卓端由于在進(jìn)行前后端交互過(guò)程中,需要對(duì)于后端傳遞的json數(shù)據(jù)進(jìn)行解析,必須生成對(duì)應(yīng)格式的bean類來(lái)進(jìn)行存儲(chǔ)和解析,因此,除了本地用于存儲(chǔ)的基礎(chǔ)數(shù)據(jù)類型之外,還會(huì)有大量的bean類。[17]下方命名中具有Result的類,均為此類數(shù)據(jù)相關(guān)類,這些類為ResponseResult的解析類,其中的Date不再作為模糊的Object類,而是具有實(shí)際內(nèi)容的類,多數(shù)為安卓端已存在的,如Clock等數(shù)據(jù)類,或者由多個(gè)數(shù)據(jù)類的集合List。具體數(shù)據(jù)類內(nèi)容如下。(27)CheckToken(用戶token數(shù)據(jù))類,這是安卓端用戶接收用戶token的數(shù)據(jù)類。(28)Clock(番茄時(shí)鐘數(shù)據(jù))類,這是安卓本地用于存儲(chǔ)番茄時(shí)鐘執(zhí)行完成后數(shù)據(jù),用于與本地?cái)?shù)據(jù)庫(kù)以及后端交互所使用的數(shù)據(jù)類。(29)ClockEndResult(番茄時(shí)鐘記錄傳遞數(shù)據(jù))類,這是安卓用于與后端進(jìn)行交互時(shí)由對(duì)應(yīng)json數(shù)據(jù)類型需求的數(shù)據(jù)類。(30)ClockResult(番茄時(shí)鐘記錄獲取數(shù)據(jù))類,這是安卓用于與后端進(jìn)行數(shù)據(jù)交互,獲取后端存儲(chǔ)的番茄時(shí)鐘執(zhí)行記錄所需要的數(shù)據(jù)類型,與上述數(shù)據(jù)類不同的是,該數(shù)據(jù)類中的Data部分,采用的是List類型,可以一次獲取多個(gè)Clock對(duì)象。(31)Comment(番茄時(shí)鐘執(zhí)行評(píng)論數(shù)據(jù))類,這是用于進(jìn)行數(shù)據(jù)生成與獲取的安卓本地?cái)?shù)據(jù)類,也用于與后端進(jìn)行交互。(32)CommentResult(番茄時(shí)鐘執(zhí)行評(píng)論獲取數(shù)據(jù))類,這是用于獲取后端番茄時(shí)鐘相關(guān)數(shù)據(jù)所需要的數(shù)據(jù)類。(33)History(歷史記錄數(shù)據(jù))類,這是用于存儲(chǔ)相關(guān)執(zhí)行歷史記錄的數(shù)據(jù)類。(34)HistoryResult(歷史記錄獲取數(shù)據(jù))類,這是用于存儲(chǔ)與后端交互獲取的相關(guān)歷史數(shù)據(jù)而生成的數(shù)據(jù)類。(35)ImageResult(圖片獲取數(shù)據(jù))類,這是用于與后端交互獲取的相關(guān)圖片數(shù)據(jù)而生成的數(shù)據(jù)類。(36)LoginResult(登錄信息數(shù)據(jù))類,這是用于檢測(cè)登錄是否成功以及相關(guān)提示信息而生成的數(shù)據(jù)類。安卓端數(shù)據(jù)相關(guān)類有大量由于前后端交互所需,而生成的bean類文件,故而不全部寫出。2、安卓端UI處理類(37)BasicActivty(基礎(chǔ)活動(dòng))類,這是所有Activity類的基類,里面設(shè)定了一些所有Activity都需要使用的基礎(chǔ)方法,主要是對(duì)于一些監(jiān)聽(tīng)、組件的注冊(cè)和開(kāi)啟。(38)ClockActivity(番茄鐘主活動(dòng))類,這是安卓端用于處理番茄鐘界面使用的活動(dòng)類,其中包括對(duì)于番茄鐘的開(kāi)啟,退出,倒計(jì)時(shí),評(píng)價(jià)等均在此中,對(duì)于番茄鐘使用后的ClockService喚醒以及開(kāi)啟禪境模式后,需要進(jìn)行的鎖機(jī)等行為邏輯,也是由該活動(dòng)控制,由此活動(dòng)喚醒ClockService。(39)EditTodoActivity(每日小事編輯活動(dòng))類,這是安卓端用于修改待辦事項(xiàng)中內(nèi)容的活動(dòng)類,其中包括對(duì)于已經(jīng)存儲(chǔ)的待辦事項(xiàng)的標(biāo)題,描述,提醒時(shí)間等內(nèi)容的修改。(40)EditTomatoActivity(番茄時(shí)鐘編輯活動(dòng))類,這是安卓端用于修改番茄時(shí)鐘內(nèi)容的活動(dòng)類,其中包括對(duì)于已經(jīng)存儲(chǔ)的番茄時(shí)鐘的標(biāo)題,番茄時(shí)鐘持續(xù)時(shí)間,短休息時(shí)間,長(zhǎng)休息時(shí)間等的修改。(41)HistoryActivity(歷史記錄活動(dòng))類,這是安卓端用于查看歷史記錄所需要的活動(dòng)類。(42)LoginActivity(登錄活動(dòng))類,這是安卓端用于登錄所需要的活動(dòng)類。(43)MainActivity(主活動(dòng))類,這是整個(gè)應(yīng)用的主活動(dòng)類,其中收納了兩個(gè)碎片和一個(gè)抽屜布局,分別是對(duì)于番茄時(shí)鐘和每日小事的展示以及個(gè)人信息中的抽屜布局邏輯處理。(44)NewClockActivity(新建番茄時(shí)鐘)類,這是用于新建番茄時(shí)鐘的活動(dòng)類,用戶可以在此新建番茄時(shí)鐘,并且保存到后端數(shù)據(jù)中。(45)NewToDoActivity(新建待辦事項(xiàng))類,這是用于新建待辦事項(xiàng)的活動(dòng)類,用戶可以再次新建待辦事項(xiàng),并且保存到后端數(shù)據(jù)中心。(46)RecordActivity(記錄活動(dòng))類,這是用于查看用戶已經(jīng)完成的番茄時(shí)鐘次數(shù),番茄時(shí)鐘長(zhǎng)度等相關(guān)番茄時(shí)鐘相關(guān)數(shù)據(jù)的類。(47)RegisterActivity(用戶注冊(cè))類,這是用戶用于注冊(cè)的相關(guān)類。(48)ReportActivity(報(bào)表相關(guān))類,這是用于用戶查看日?qǐng)?bào)、周報(bào)等數(shù)據(jù)報(bào)表相關(guān)的活動(dòng)類。(49)SettingActivity(設(shè)置活動(dòng))類,這是用戶用于進(jìn)行相關(guān)設(shè)置的類,用戶可以選擇進(jìn)行修改通知鈴聲,是否開(kāi)啟禪境模式等設(shè)置。(50)UserDataActivity(用戶數(shù)據(jù))類,這是用戶用于進(jìn)行查看和修改用戶數(shù)據(jù)的相關(guān)活動(dòng)類,也可以進(jìn)行與后端服務(wù)器上的數(shù)據(jù)同步。3、安卓其他類安卓端除以上已經(jīng)寫出的類外,還包括adapter適配器類,fragment界面類,用于與安卓本地?cái)?shù)據(jù)庫(kù)SQLite交互的dao類,用于事物提醒通知及運(yùn)行使用的服務(wù)Service類,工具類,自定義圖像類,數(shù)據(jù)交互presenter類等,不一一寫出。4.2交互設(shè)計(jì)用戶不論登錄與否就能夠使用本系統(tǒng)功能,將其數(shù)據(jù)省略后,以大模塊展示大致交互過(guò)程,如下圖4.3、4.4所示。圖4.3系統(tǒng)時(shí)序圖(1)圖4.3描繪的是用戶的登錄與注冊(cè)邏輯,在系統(tǒng)中由于同時(shí)采用本地?cái)?shù)據(jù)庫(kù)SQLite和后端數(shù)據(jù)庫(kù)MySQL,可以實(shí)現(xiàn)在未登錄的情況下使用如番茄事項(xiàng)、每日小事模塊,但涉及到需要進(jìn)行數(shù)據(jù)分析以及歷史數(shù)據(jù),數(shù)據(jù)上傳等相關(guān)內(nèi)容時(shí),必須要用戶注冊(cè)登錄之后才能夠使用。圖4.4系統(tǒng)時(shí)序圖(2)圖4.4展示了本系統(tǒng)各個(gè)模塊之間用戶的交互邏輯,部分模塊的功能受限于篇幅并未完全展示出來(lái)。但總體展示了用戶所能夠?qū)崿F(xiàn)的所有功能,即用戶在登錄之后,可以使用本系統(tǒng)所有服務(wù),在個(gè)人中心能夠查看并修改個(gè)人數(shù)據(jù),更換頭像,查看數(shù)據(jù)記錄和數(shù)據(jù)報(bào)表,對(duì)于自我的專注行為能有一個(gè)較為直觀的感受。當(dāng)然,圖上并未顯示,除了進(jìn)入用戶中心外,用戶可以直接在主界面的抽屜布局界面查看相關(guān)的數(shù)據(jù)信息,也可以查看歷史記錄,并對(duì)于歷史執(zhí)行的記錄數(shù)據(jù)進(jìn)行查看和修改,修改僅限于數(shù)據(jù)中心的評(píng)價(jià)數(shù)據(jù)可以修改。而系統(tǒng)的主要功能番茄時(shí)鐘和每日小事,在用戶登錄后可以進(jìn)行番茄鐘執(zhí)行后的評(píng)價(jià)存儲(chǔ),并記錄于云端,通過(guò)歷史數(shù)據(jù)功能查看自己曾經(jīng)執(zhí)行過(guò)的番茄時(shí)鐘,以及自己對(duì)于當(dāng)時(shí)執(zhí)行結(jié)果的評(píng)價(jià)。而每日小事則可以提前設(shè)置進(jìn)行提醒,在到達(dá)指定時(shí)刻之后,會(huì)通過(guò)通知欄進(jìn)行通知。考慮到篇幅限制,之后選取一些較為重要的功能進(jìn)行詳細(xì)設(shè)計(jì)說(shuō)明。(1)注冊(cè)功能用戶在注冊(cè)時(shí)需要進(jìn)行郵箱驗(yàn)證碼和圖靈驗(yàn)證碼的雙重驗(yàn)證,其具體時(shí)序圖如下圖4.5所示。圖4.5用戶注冊(cè)時(shí)序圖以上展示的是本系統(tǒng)用戶在注冊(cè)時(shí)的時(shí)序圖,用戶在注冊(cè)時(shí),進(jìn)入注冊(cè)頁(yè)面后安卓端會(huì)向后端發(fā)送登錄請(qǐng)求在UserApi接收到請(qǐng)求之后,會(huì)將請(qǐng)求委派給UserServiceImpl進(jìn)行實(shí)現(xiàn)來(lái)進(jìn)行驗(yàn)證碼的生成,在UserServiceImpl中,首先,它需要獲取一個(gè)Cookie作為這一次圖靈驗(yàn)證碼的id,這是檢測(cè)Redis中是否存在Cookie,如果有則重復(fù)利用,若沒(méi)有則需要新建一個(gè)id存放在Redis中。之后,在UserServiceImpl中生成相關(guān)數(shù)據(jù),而后將生成的圖靈驗(yàn)證碼存儲(chǔ)于Redis數(shù)據(jù)庫(kù)中,便于后續(xù)驗(yàn)證。之后便將圖靈驗(yàn)證碼返回到UserApi,由UserApi傳遞到安卓端進(jìn)行展示。用戶在輸入圖靈驗(yàn)證碼及相關(guān)數(shù)據(jù)后,進(jìn)行郵箱驗(yàn)證碼的獲取,在點(diǎn)擊郵箱驗(yàn)證碼獲取按鈕后,請(qǐng)求會(huì)交付給后端的UserApi,由UserApi委派給UserServiceImpl來(lái)進(jìn)行郵箱驗(yàn)證碼的生成與發(fā)送,在UserServiceImpl中,首先會(huì)查詢由安卓端發(fā)送而來(lái)的郵箱地址是否已經(jīng)被使用,這時(shí)候會(huì)與UserDao進(jìn)行交互,對(duì)于后端的數(shù)據(jù)庫(kù)進(jìn)行查詢,而后返回查詢信息。在確認(rèn)無(wú)誤之后,會(huì)將郵箱發(fā)件人的ip地址以及發(fā)件郵箱的數(shù)據(jù)存儲(chǔ)到Redis中,避免進(jìn)行郵箱的暴力發(fā)送,如果是同一ip或者同一郵箱,將會(huì)組織其反復(fù)請(qǐng)求數(shù)據(jù)發(fā)送。之后調(diào)用TaskService中的郵箱驗(yàn)證碼發(fā)送方法,令其使用EmailSender工具類里的郵件發(fā)送,將郵件發(fā)送到指定郵箱,而后,會(huì)將數(shù)據(jù)返回,并由UserServiceImpl零Redis存儲(chǔ)驗(yàn)證碼數(shù)據(jù)以及其他相關(guān)信息,并保留十分鐘作為郵箱驗(yàn)證碼的有效時(shí)間。當(dāng)郵箱發(fā)送到用戶郵箱后,用戶輸入郵箱驗(yàn)證碼以及其他所有數(shù)據(jù),進(jìn)行注冊(cè),注冊(cè)請(qǐng)求給到UserApi后,委派UserServiceImpl進(jìn)行注冊(cè)功能的實(shí)現(xiàn),UserServiceImpl會(huì)查詢用戶名是否已經(jīng)被注冊(cè),之后獲取Redis中存儲(chǔ)的數(shù)據(jù)進(jìn)行一一比對(duì),確保郵箱驗(yàn)證碼與圖靈驗(yàn)證碼無(wú)誤后,將該用戶信息發(fā)送到UserDao,令其存儲(chǔ)到后端的數(shù)據(jù)庫(kù)中,當(dāng)存儲(chǔ)完成后,返回注冊(cè)結(jié)果信息。這是用戶注冊(cè)的大致流程。(2)番茄事務(wù)功能對(duì)于番茄鐘,作為本系統(tǒng)的核心功能,必須對(duì)于其進(jìn)行一個(gè)闡述,受限于篇幅,對(duì)于刪除、修改等并不做描述,著重描述前后端交互過(guò)程中的存儲(chǔ),以及對(duì)于前端執(zhí)行過(guò)程中的時(shí)序圖描述。其時(shí)序圖如下圖4.6、4.7所示。圖4.6番茄鐘添加后端時(shí)序圖這是當(dāng)安卓端將數(shù)據(jù)填寫完畢后,由安卓端發(fā)起番茄鐘添加的請(qǐng)求之后的時(shí)序圖,在用戶發(fā)起請(qǐng)求后,TomatoApi會(huì)接收到對(duì)應(yīng)的請(qǐng)求,并將請(qǐng)求委托給TomatoServiceImpl進(jìn)行方法實(shí)現(xiàn),在TomatoServiceImpl中會(huì)率先對(duì)于用戶是否登錄來(lái)進(jìn)行判斷,登錄判斷會(huì)委派給UserServiceImpl進(jìn)行實(shí)現(xiàn),其會(huì)返回一個(gè)查詢結(jié)果給TomatoServiceImpl,在確認(rèn)用戶已經(jīng)登陸之后,會(huì)將數(shù)據(jù)傳輸給TomatoDao來(lái)進(jìn)行數(shù)據(jù)永久化存儲(chǔ),將其存儲(chǔ)在數(shù)據(jù)庫(kù)中。之后會(huì)返回相應(yīng)信息,告知用戶存儲(chǔ)結(jié)果。圖4.7安卓端番茄時(shí)鐘執(zhí)行時(shí)序圖在安卓端,當(dāng)用戶發(fā)起對(duì)于番茄鐘的執(zhí)行請(qǐng)求后,會(huì)由ClockApplication監(jiān)聽(tīng)用戶操作,并將動(dòng)作監(jiān)聽(tīng)傳遞給ClockFragment中被點(diǎn)擊的番茄鐘item,ClockFragment會(huì)在使用intent啟動(dòng)ClockActivity時(shí),將item的對(duì)應(yīng)數(shù)據(jù)封裝并傳遞給ClockActivity,便于ClockActivity顯示執(zhí)行數(shù)據(jù)。在完成傳遞后,ClockFragment會(huì)銷毀。在跳轉(zhuǎn)進(jìn)入ClockActivity后,用戶會(huì)看到番茄鐘執(zhí)行界面,此時(shí)番茄鐘仍舊處于等待開(kāi)啟狀態(tài),當(dāng)用戶點(diǎn)擊番茄鐘的開(kāi)啟后,會(huì)進(jìn)入倒計(jì)時(shí)。當(dāng)番茄鐘開(kāi)啟后,ClockActivity會(huì)通知ClockService,該服務(wù)會(huì)在應(yīng)用處于后臺(tái)是對(duì)于應(yīng)用內(nèi)的倒計(jì)時(shí)等數(shù)據(jù)進(jìn)行持續(xù)更新,保證番茄鐘執(zhí)行的準(zhǔn)確性。而如果用戶選擇開(kāi)啟禪境模式,則會(huì)喚醒FocusService服務(wù),該服務(wù)會(huì)監(jiān)聽(tīng)用戶對(duì)于其他應(yīng)用的啟動(dòng)。當(dāng)非系統(tǒng)本身自帶的應(yīng)用啟動(dòng)時(shí),F(xiàn)ocusService會(huì)組織應(yīng)用啟動(dòng),讓用戶專心于自己手頭的事務(wù),而不是通過(guò)手機(jī)來(lái)進(jìn)行娛樂(lè)。當(dāng)然,AlarmService也會(huì)啟動(dòng),在通知欄顯示當(dāng)前執(zhí)行的番茄鐘信息。用戶在番茄鐘執(zhí)行過(guò)程中,可以選擇開(kāi)關(guān)白噪音,或者切換白噪音,但需要注意的是,禪境模式并不能夠在開(kāi)啟番茄鐘后切換是否開(kāi)啟。當(dāng)單次番茄鐘執(zhí)行完成之后,ClockActivity會(huì)通知ClockService和FocusService暫停服務(wù),在完成時(shí),后臺(tái)的STATE狀態(tài)會(huì)改變,因而激活評(píng)價(jià)彈窗,彈窗會(huì)彈出讓用戶來(lái)對(duì)于自己本次番茄時(shí)鐘執(zhí)行狀況進(jìn)行一個(gè)評(píng)價(jià),認(rèn)為自己是否良好執(zhí)行當(dāng)然番茄時(shí)鐘。之后,會(huì)進(jìn)入番茄時(shí)鐘執(zhí)行的輪回,而休息會(huì)在長(zhǎng)休息和短休息之間通過(guò)一定頻率間隔切換。當(dāng)用戶認(rèn)為自己不需要繼續(xù)執(zhí)行番茄鐘后,可以選擇退出。在退出后,ClockActivity會(huì)通知FocusService和ClockService結(jié)束任務(wù),并通知AlarmService修改通知欄中的狀態(tài),并結(jié)束。值得注意的是,當(dāng)用戶進(jìn)入番茄鐘開(kāi)啟后,并未完成任一一次番茄鐘,會(huì)受到對(duì)應(yīng)的懲罰,ClockActivity會(huì)通知后端扣除用戶一定的學(xué)習(xí)積分。除此以外還有大量的功能模塊的時(shí)序圖受限于篇幅并未給出。4.3本章小結(jié)本章節(jié)著重與介紹本系統(tǒng)的詳細(xì)設(shè)計(jì),通過(guò)給出前后端系統(tǒng)常用或較為重要的數(shù)據(jù)的類圖以及一些方法的類圖來(lái)較為全面地展示本系統(tǒng)中所需要和使用的到的數(shù)據(jù)類以及功能類。此外,還通過(guò)使用時(shí)序圖來(lái)進(jìn)行展示,對(duì)于系統(tǒng)中重要功能的交互設(shè)計(jì)進(jìn)行了較為詳細(xì)地展示的,使系統(tǒng)設(shè)計(jì)的功能面貌能夠更加完善和全面地展示出來(lái)。 系統(tǒng)實(shí)現(xiàn)5系統(tǒng)實(shí)現(xiàn)5.1配置管理配置:AndroidSDK29、SDK30;SpringBoot、SpringJPA等代碼管理:github5.2功能實(shí)現(xiàn)1、用戶賬戶模塊(1)用戶登錄注冊(cè)用戶登錄注冊(cè)界面,用戶只有完成注冊(cè)之后才可以進(jìn)行登錄活動(dòng)。在進(jìn)行注冊(cè)時(shí),用戶需要輸入自己的用戶名、密碼,并在此輸入密碼確保無(wú)誤,之后輸入郵箱以及圖形驗(yàn)證碼,在輸入圖形驗(yàn)證碼之后才可以獲取郵箱驗(yàn)證碼,郵箱驗(yàn)證碼會(huì)發(fā)送至對(duì)應(yīng)郵箱,輸入郵箱驗(yàn)證碼無(wú)誤,且其他數(shù)據(jù)均無(wú)誤的情況下,才能完成注冊(cè)操作。注冊(cè)成功之后,能夠進(jìn)行登陸操作,使用用戶名或者郵箱地址,輸入密碼與圖形驗(yàn)證碼,經(jīng)校驗(yàn)無(wú)誤后能夠成功登陸,登錄成功后,跳轉(zhuǎn)至主界面。如下圖5.1、圖5.2所示。圖5.1用戶注冊(cè)界面圖5.2用戶登錄界面以下是登錄功能的部分代碼:@Override@OverridepublicResponseResultdoLogin(Stringcaptcha,Useruser){StringcaptchaKey=CookieUtils.getCookie(getRequest(),Constants.User.LAST_CAPTCHA_ID);HttpServletRequestrequest=getRequest();HttpServletResponseresponse=getResponse();StringcaptchaValue=(String)redisUtils.get(Constants.User.KEY_CAPTCHA_CONTENT+captchaKey);if(!captcha.equals("TestUserCaptcha")){if(!captcha.equals(captchaValue)){returnResponseResult.FAILED("圖靈驗(yàn)證碼錯(cuò)誤");}}//圖靈驗(yàn)證碼驗(yàn)證成功,刪除redis內(nèi)的內(nèi)容redisUtils.del(Constants.User.KEY_CAPTCHA_CONTENT+captchaKey);StringuserName=user.getUserName();if(TextUtils.isEmpty(userName)){returnResponseResult.FAILED("賬號(hào)不可以為空");}Stringpassword=user.getPassword();if(TextUtils.isEmpty(password)){returnResponseResult.FAILED("密碼不可以為空");}UseruserFormDb=userDao.findOneByUserName(userName);if(userFormDb==null){userFormDb=userDao.findOneByEmail(userName);}if(userFormDb==null){returnResponseResult.FAILED("用戶名或密碼錯(cuò)誤");}//用戶存在,對(duì)比密碼booleanmatches=bCryptPasswordEncoder.matches(password,userFormDb.getPassword());if(!matches){returnResponseResult.FAILED("用戶名或密碼錯(cuò)誤");}createToken(response,userFormDb);CookieUtils.deleteCookie(getResponse(),Constants.User.LAST_CAPTCHA_ID);returnResponseResult.SUCCESS("登陸成功");以下是注冊(cè)功能的部分代碼:publicResponseResultregister(Useruser,StringemailCode,StringcaptchaCode){publicResponseResultregister(Useruser,StringemailCode,StringcaptchaCode){StringuserName=user.getUserName();("register.userName=====>"+userName);if(TextUtils.isEmpty(userName)){returnResponseResult.FAILED("用戶名不能為空");}UseruserFromDbByUserName=userDao.findOneByUserName(userName);if(userFromDbByUserName!=null){returnResponseResult.FAILED("該用戶名已經(jīng)被注冊(cè)");}Stringemail=user.getEmail();if(TextUtils.isEmpty(email)){returnResponseResult.FAILED("郵箱不能為空");}if(!TextUtils.isEmailAddress(email)){returnResponseResult.FAILED("郵箱格式不正確");}UseruserDaoOneByEmail=userDao.findOneByEmail(email);if(userDaoOneByEmail!=null){returnResponseResult.FAILED("該郵箱已經(jīng)被注冊(cè)");}StringemailVerifyCode=(String)redisUtils.get(Constants.User.KEY_EMAIL_CODE_CONTENT+email);("emailVerifyCode===>"+emailVerifyCode);if(TextUtils.isEmpty(emailVerifyCode)){returnResponseResult.FAILED("郵箱驗(yàn)證碼已過(guò)期");}if(!emailVerifyCode.equals(emailCode)){returnResponseResult.FAILED("郵箱驗(yàn)證碼錯(cuò)誤");}StringcaptchaKey=CookieUtils.getCookie(getRequest(),Constants.User.LAST_CAPTCHA_ID);if(TextUtils.isEmpty(captchaKey)){returnResponseResult.FAILED("請(qǐng)?jiān)试S保留cookies信息");}StringcaptchaVerifyCode=(String)redisUtils.get(Constants.User.KEY_CAPTCHA_CONTENT+captchaKey);if(TextUtils.isEmpty(captchaVerifyCode)){returnResponseResult.FAILED("圖靈驗(yàn)證碼已過(guò)期");}if(!captchaVerifyCode.equals(captchaCode)){returnResponseResult.FAILED("圖靈驗(yàn)證碼錯(cuò)誤");}else{redisUtils.del(Constants.User.KEY_CAPTCHA_CONTENT+c
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 法學(xué)崗面試題目及答案
- 培訓(xùn)講師課件模板
- 2025年度智慧型商務(wù)中心場(chǎng)地租賃及增值服務(wù)合同模板
- 2025年度婚姻關(guān)系解除協(xié)議專業(yè)律師起草與調(diào)解服務(wù)
- 2025年工業(yè)廢氣處理設(shè)施維護(hù)與環(huán)保達(dá)標(biāo)服務(wù)合同
- 2025年生態(tài)農(nóng)業(yè)園區(qū)景觀規(guī)劃與建設(shè)合同
- 水彩課件基礎(chǔ)
- 2025年數(shù)字藝術(shù)品版權(quán)代理銷售及全球市場(chǎng)布局合作協(xié)議
- 2025年糕點(diǎn)加工及品牌連鎖加盟合作協(xié)議
- 2025年綠色節(jié)能型廠房倉(cāng)儲(chǔ)基地租賃及配套設(shè)備使用協(xié)議
- 2025年鄭州銀行招聘考試(行政能力測(cè)驗(yàn))歷年參考題庫(kù)含答案詳解(5套)
- 園藝生物技術(shù)應(yīng)用與發(fā)展
- 子癇患者護(hù)理查房
- 網(wǎng)約車停運(yùn)損失賠償協(xié)議書(shū)范文
- 關(guān)于規(guī)范村級(jí)財(cái)務(wù)管理的審計(jì)建議
- 長(zhǎng)安歐尚A800說(shuō)明書(shū)
- 火災(zāi)應(yīng)急預(yù)案組織架構(gòu)圖
- 山東省濟(jì)寧市第十五中學(xué)2023-2024學(xué)年(五四學(xué)制)六年級(jí)上學(xué)期第一次月考語(yǔ)文試題
- 北京馬拉松賽事運(yùn)作及戰(zhàn)略定位研究
- DB6105T 180-2022 大豆種子田間檢驗(yàn)技術(shù)規(guī)程
- 2023年愛(ài)糧節(jié)糧知識(shí)競(jìng)賽試題
評(píng)論
0/150
提交評(píng)論