版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
基于微信小程序的家政服務(wù)平臺的實現(xiàn)RealizationofHousekeepingServicePlatformBasedonWeChatMiniProgram摘要隨著中國市場經(jīng)濟的不斷發(fā)展,人口老齡化的加劇,社會對家庭服務(wù)市場的需求越來越大。但是,傳統(tǒng)的線下家庭服務(wù)往往遇到瓶頸,逐漸跟不上時代的發(fā)展趨勢,滿足不了用戶的需求。此外,隨著互聯(lián)網(wǎng)的飛速發(fā)展以及越來越多人擁有如手機、平板等移動設(shè)備,伴隨著微信的快速發(fā)展,已經(jīng)成為現(xiàn)代人不可缺少的社交工具。幾乎所有行業(yè)都希望接入互聯(lián)網(wǎng),形成O2O模式,也就是我們熟知的線上對線下的模式。此外,使用B2B2C模式,即公司對公司、再由公司推到個人,也在發(fā)揮巨大的作用。如阿里巴巴、美團等等。利用互聯(lián)網(wǎng)高效便捷地為用戶提供便利,解決國內(nèi)家政行業(yè)面臨的瓶頸問題是大勢所趨。因此,建立一個透明、公開、平等、高效運行的家政服務(wù)平臺勢在必行。關(guān)鍵字:微信小程序網(wǎng)絡(luò)平臺家政服務(wù)透明化
AbstractWiththecontinuousdevelopmentofChina'smarketeconomyandtheagingofthepopulation,thesociety'sdemandforthefamilyservicemarketisincreasing.However,traditionalofflinefamilyservicesoftenencounterbottlenecks,andgraduallyfailtokeepupwiththedevelopmenttrendofthetimes,andcannotmeettheneedsofusers.WiththerapiddevelopmentoftheInternetandmoreandmorepeopleownmobiledevicessuchasmobilephonesandtablets.WeChathasbecomeanindispensablesocialtoolformodernpeoplebecauseoftherapiddevelopmentoftheInternet.AlmostallindustrieswanttoaccesstheInternettoformanO2Omodel,whichiswhatweknowasanonline-to-offlinemodel.Inaddition,theB2B2Cmodel,thatis,company-to-companyandthencompany-to-personpromotion,hasalsoplayedahugerole,suchasAlibabaGroupandsoon.ItisthegeneraltrendtousetheInternettoefficientlyandconvenientlyprovideconveniencetousersandsolvethebottleneckproblemsfacedbythedomestichousekeepingindustry.Therefore,tobuildatransparent,openandefficienthomemakingserviceplatformisveryimperative.Keywords:MiniProgramPlatformHousekeepingTransparency
目錄第一章緒論 緒論1.1課題背景與意義由2018年中國老年健康研究報告的研究數(shù)據(jù)顯示,中國人口老齡化問題日益嚴(yán)重。年輕人經(jīng)常需要上班,甚至加班,因此,家庭的衛(wèi)生狀況以及是否有小孩都將面臨無人照料的困境。所以以保姆中介市場為代表的家政服務(wù)越來越受到廣大家庭的認(rèn)同。隨著中國經(jīng)濟的發(fā)展,每座城市生活節(jié)奏的飛速提升,家政服務(wù)市場的擴張速度十分迅猛,家政服務(wù)在每個城市中越來越普遍。伴隨著上述的問題,家政服務(wù)市場的需求也變得日趨明顯。但近幾年在家政市場發(fā)生的各種事故,如杭州縱火案等,使不少人擔(dān)心家政企業(yè)對自身財產(chǎn)和生命的保障,對家政行業(yè)的發(fā)展也產(chǎn)生了很大的影響。線下家政服務(wù)機構(gòu)的良莠不齊,給用人單位的選擇帶來不便。因此,隨著互聯(lián)網(wǎng)的發(fā)展,人們越來越迫切地需要一個能夠提供透明的企業(yè)信息和價格的家政服務(wù)平臺,以及目標(biāo)明確的從業(yè)者管理機制。家政服務(wù)平臺,是將家政公司與雇主兩者結(jié)合起來的一種方式,雇主可以通過家政服務(wù)平臺,進行橫向的對比,包括選擇適合自己的價格、優(yōu)勢、劣勢等,物美價廉的家政服務(wù)公司,為雇主提供最大的便利,提高雇主的家庭生活質(zhì)量。其次,優(yōu)勝劣汰,家政公司還可以通過用戶反饋對從業(yè)人員實行考評管理,營造一種良好的市場氛圍。對互聯(lián)網(wǎng)來說,是近十年科技發(fā)展的產(chǎn)物,幾乎家家戶戶都能上網(wǎng),每個人都有手機或者手機,隨時隨地上網(wǎng)已經(jīng)成了家常便飯。將互聯(lián)網(wǎng)的便利與家政服務(wù)平臺相結(jié)合,既能方便雇主對家政服務(wù)的選擇,又能給傳統(tǒng)的線下行業(yè)帶來全新的機遇,從而打開家政服務(wù)新的市場。因此,基于互聯(lián)網(wǎng)的家政服務(wù)平臺是未來幾年甚至幾十年的主流發(fā)展趨勢。1.2研究現(xiàn)狀“家政服務(wù)人員”這個職業(yè)現(xiàn)在已經(jīng)非常常見了,這個職業(yè)最開始是由中國勞動和社會保障部在2000年確定的。家政服務(wù)也開始走上了一條“專業(yè)化”的發(fā)展道路。家政行業(yè)的出現(xiàn),使中國社會家庭幸福程度大大提高。根據(jù)統(tǒng)計,家庭傭工的分類主要有“職業(yè)保姆”、“涉外保姆”、“高級保姆”、“育兒早管”、“育兒早管”、“幼兒育兒服務(wù)”、“家教外教”、“水電維修”、“管道疏通”、“清潔”、“搬家服務(wù)”等,各類家政服務(wù)正深入社會的每一個家庭。由中國家庭服務(wù)行業(yè)在2019年的研究數(shù)據(jù)表明,目前中國約有3000萬家庭需要家政服務(wù),這個數(shù)據(jù)占到了總調(diào)查人數(shù)的15%。由此可見,家政行業(yè)的社會需求十分的明顯,發(fā)展前景十分光明。根據(jù)市民的反饋,目前家政市場的亂象也比較明顯,如臨時加價、退貨無果、甚至搶劫、盜竊等。家政市場越來越需要一個合適的解決方案,以約束家政服務(wù)行業(yè)的服務(wù)效果,從而達到雙贏的局面。1.3論文研究的主要內(nèi)容以家政服務(wù)為核心的發(fā)展理念是本課題的研究目標(biāo)。這次家政服務(wù)平臺的設(shè)計與實現(xiàn),將形成一個三方平臺,將作為第三方平臺進行監(jiān)管,實時監(jiān)督家政服務(wù)公司的服務(wù)內(nèi)容,并實時接受用戶的反饋和建議,一旦發(fā)生用戶的投訴或不滿情況,第三方平臺將積極開展調(diào)查,如確實發(fā)現(xiàn)用戶的舉報行為,該從業(yè)人員將無法在本平臺上執(zhí)行接單,其對應(yīng)的家政公司也會收到警告,一旦積累到一定的次數(shù),該服務(wù)公司也會退出本平臺,并發(fā)出通知,其他雇主將該公司的情況告知,建立一個透明化的服務(wù)平臺。本論文研究的主要內(nèi)容:(1)分析線上家政服務(wù)平臺的現(xiàn)狀以及研究的意義,確定研究的目的;(2)研究SpringBoot、Vue、微信小程序開發(fā)技術(shù),MVC、前后端分離的設(shè)計模式以及MySQL數(shù)據(jù)庫、Redis高速緩存等相關(guān)技術(shù);(3)詳細(xì)分析家政服務(wù)平臺的功能需求,并進行具體的需求分析;(4)研究家政服務(wù)平臺的總體設(shè)計方案,包括總體架構(gòu)和基于典型三層結(jié)構(gòu)(視圖、模型和控制)的設(shè)計和使用微信小程序這一最新的開發(fā)技術(shù);(5)對完成的家政服務(wù)平臺進行測試。在測試中發(fā)現(xiàn)其中的問題,不斷的解決問題,完善平臺的功能;(6)試發(fā)布項目,測試其運行穩(wěn)定性。
相關(guān)開發(fā)環(huán)境和技術(shù)的簡介2.1開發(fā)環(huán)境介紹2.1.1開發(fā)環(huán)境開發(fā)工具:IntelliJIDEA2019.2.3x64、微信開發(fā)者工具、VisualStudioCode數(shù)據(jù)庫:MySQL8.0.18數(shù)據(jù)庫操作工具:NavicatPremium12服務(wù)器操作工具:Xshell62.1.2開發(fā)技術(shù)SpringBoot-2.1.9.RELEASEMyBatisPlus-3.2.0Vue-Cli3MySQL-8.0.18Java11NodeJs微信小程序開發(fā)2.1.3部署環(huán)境技術(shù)DockerNginx2.1.4系統(tǒng)配置開發(fā)環(huán)境配置:Windows10操作系統(tǒng),16G內(nèi)存,硬盤1T+256G,CPU2.6GHz部署環(huán)境配置:騰訊云服務(wù)器(Linux操作系統(tǒng)1核2GB2Mbps)2.2相關(guān)技術(shù)介紹家政服務(wù)平臺在設(shè)計與開發(fā)的工程中,使用了多種技術(shù),包括Java、Vue、SQL等等。本節(jié)我將對上述所涉及到的技術(shù)做簡單的介紹說明。2.2.1Java作為一種廣泛使用的語言,Java具有跨平臺和面向?qū)ο髢纱筇攸c。他在當(dāng)前社會中的開發(fā)被廣泛的運用,是當(dāng)前十分火爆的開發(fā)技術(shù)之一。20世紀(jì)90年代初,將網(wǎng)絡(luò)計算的功能擴展到日常生活是一個激進的設(shè)想。1991年,Sun一小部分名為“GreenTeam”的工程師認(rèn)為,下一步的重點是數(shù)字消費設(shè)備和計算機的結(jié)合。在JamesGosling的帶領(lǐng)下,這個團隊日以繼夜地工作,最終創(chuàng)造出了一種能徹底改變世界的編程語言Java。Java語言是基于C++語言進行開發(fā)的并進行了改進,也繼承了面向?qū)ο蟮募夹g(shù)核心,淘汰了部分過時的容易出錯的代碼。簡言之,Java是一款多平臺、高效的、面向?qū)ο蟮拈_發(fā)語言。Java11在2018年9月25日發(fā)布,是一個長期支持的版本,帶來了很多新功能,比如LocalVar,HttpClient,ListAPI,等等。本次家政服務(wù)平臺的實現(xiàn)也是基于Java11進行開發(fā)的。2.2.2SpringBootSpring是基于Java平臺的應(yīng)該框架,它是完全開源的,并且擁有控制反轉(zhuǎn)這一重大的功能。同時,Web應(yīng)用也采用Spring作為Java企業(yè)版平臺構(gòu)建的技術(shù)支持。目前Spring已經(jīng)在Java世界中被廣泛運用,基本上已經(jīng)替代了JavaBeans模型。SpringBoot是Spring家族中的一部分,其使用配置方式的方法,從而搭建Spring運行環(huán)境,用配置替代原始Spring的搭建方式,使得用戶可以以最小模塊的形式進行SpringBoot項目的開發(fā),而完成這件事情也只需要很少的配置文件就可以完成。其主要功能是:建立獨立的Spring應(yīng)用程式無需像傳統(tǒng)Web項目部署WAR包,可以直接使用自帶的Tomcat組件自動配置Spring所需要的配置文件為簡化Maven配置提供自定義的“入門”項目對象模型(POM)很方便的提供如指標(biāo)等生產(chǎn)準(zhǔn)備,方便的檢查和外部化的配置幾乎不需要代碼生成和XML配置2.2.3MyBatis-PlusMyBatis是一款完全適合于Spring開發(fā)的工具,其優(yōu)點是簡化了傳統(tǒng)JDBC的方式,只要一行SQL語句就可以對數(shù)據(jù)庫進行操作,同時也可以很方便的生成動態(tài)的SQL語句。MyBatis-Plus是由國內(nèi)開發(fā)團隊開發(fā)的對MyBatis的增強工具,簡稱為MP。MP對MyBatis沒有做出任何的修改,只是在MyBatis的基礎(chǔ)上,增加了基本的增刪改查的操作、分頁、全局?jǐn)r截插件等等的功能。從而為開發(fā)者簡化了開發(fā)的流程,避免了重復(fù)的工作,從而把時間完全留在業(yè)務(wù)的開發(fā)上,提高了開發(fā)者的效率。2.2.4VueVue跟Spring一樣是一個開發(fā)框架,區(qū)別是Vue是基于JavaScript的。從下到上是Vue的設(shè)計特點。其核心只關(guān)注與三層結(jié)構(gòu)中的視圖層。Vue基于npm的方式可以非常方便的將第三方代碼庫融合進來。簡言之,Vue是一款十分高效的單頁面應(yīng)用工具引擎。2.2.5微信小程序微信小程序是由騰訊公司設(shè)計開發(fā)的一種全新的連接用戶與服務(wù)的方式,其用戶量十分龐大,絕大多數(shù)中國人已經(jīng)開始使用微信,而且越來越多外國人也開始接觸并使用微信。而微信小程序可以以視作在另外一個操作系統(tǒng)上運行的移動端軟件,為用戶提供了輕量化的程序,用戶無需下載軟件就可以體驗到傳統(tǒng)APP上才有的功能。微信小程序的開發(fā)者可以利用微信官方提供應(yīng)用開發(fā)框架和豐富的組件和API服務(wù),開發(fā)具有原生APP體驗。2.3本章小結(jié)本章主要介紹了本次在家政服務(wù)平臺的開發(fā)編碼過程中所使用到框架和技術(shù),在系統(tǒng)構(gòu)建的過程中對所需要使用的技術(shù)理論基礎(chǔ)進行了充分的研究和分析,為接下來的開發(fā)打下堅實的基礎(chǔ),也為我們的系統(tǒng)進一步的開發(fā)做了技術(shù)上的闡述。
需求分析3.1編寫目的家政服務(wù)平臺的需求分析主要是提出系統(tǒng)應(yīng)該具備的功能模塊,以及我們期望達到的目標(biāo)。通過對用戶需求的理解,需求分析確定了家政服務(wù)平臺的功能和非功能需求。功能需求指的是系統(tǒng)的主要功能和完成的目的。而提供除了業(yè)務(wù)之外的功能就是非功能需求了。除此之外,包括其他與功能需求無關(guān)的需求則是針對系統(tǒng)的質(zhì)量特性進行描述的。它包含了相關(guān)的標(biāo)準(zhǔn),需要對系統(tǒng)的質(zhì)量特性進行描述,包括一些性能要求、安全要求、可維護性要求和其他要求。系統(tǒng)開發(fā)的重要內(nèi)容是系統(tǒng)相關(guān)需求分析,是進行系統(tǒng)設(shè)計和開發(fā)的基礎(chǔ)。也為系統(tǒng)后期測試提供了重要依據(jù)和基礎(chǔ),因此,系統(tǒng)后期維護的說明文檔就是需求分析的目的所在。3.2總體需求經(jīng)相關(guān)調(diào)查得知,傳統(tǒng)的家政服務(wù)平臺是雇主前往線下家政服務(wù)機構(gòu),詢問價格后機構(gòu)會派遣工作人員上門服務(wù),而雇主往往對工作人員的具體情況和服務(wù)態(tài)度一無所知,因此雇主也只能“踩著石頭過河”,有時還會因為這種情況導(dǎo)致最終獲得的服務(wù)效果不佳,有時甚至導(dǎo)致家庭財物失竊,親人生命安全受到威脅等嚴(yán)重情況發(fā)生。而且,雇主需要花一定的時間到線下找家政機構(gòu)了解服務(wù)情況和價格,即使是比較多家機構(gòu),往往也會浪費雇主的時間。綜合以上情況,本次設(shè)計的家政服務(wù)平臺的總體需求是提高用戶選擇家政服務(wù)的時間效率,對比家政服務(wù)的價格,對家政服務(wù)進行監(jiān)控,節(jié)省雇主的寶貴時間,降低服務(wù)過程中的危險因素,保證服務(wù)質(zhì)量,利用互聯(lián)網(wǎng)的優(yōu)勢將家政服務(wù)態(tài)度和價格透明化公開,給用戶帶來最大的便利,并帶來高質(zhì)量的選擇。3.3功能性需求根據(jù)調(diào)查得到家政服務(wù)平臺的具體需求,具體情況如下:前臺(微信小程序端):用戶注冊登錄,用戶通過微信授權(quán),發(fā)起登錄,并輸入其手機號碼,用戶信息將在后臺保存,然后完成登錄。登錄成功后,即可進行預(yù)約服務(wù)等操作。用戶對家政服務(wù)功能的需求查詢:用戶可以通過不同的分類,查詢相應(yīng)的家政服務(wù),在家政服務(wù)中查詢相應(yīng)的機構(gòu)信息、評價、價格等,服務(wù)篩選也可以通過距離、地點等信息進行。對所感興趣的服務(wù)還可以進行收集,方便查詢。用戶對家政預(yù)約的需求:用戶查詢了家政服務(wù)后,如果需要的話,用戶可以通過小程序端進行下單預(yù)約,選擇了預(yù)約聯(lián)系人和聯(lián)系方式后,家政公司就會有專人電聯(lián)用戶,確定具體上門時間和注意事項。用戶完成訂單并做出評價的需要:家政公司服務(wù)完成后,用戶可以通過微信小程序?qū)艺镜姆?wù)成果、態(tài)度、員工等進行評價,并將評分計入家政公司的評分中,在服務(wù)細(xì)節(jié)中公開展示,方便其他用戶進行查詢。用戶學(xué)習(xí)家庭生活提示的需求:用戶可以通過機構(gòu)或平臺發(fā)布的文章,學(xué)習(xí)一些家庭清潔的小技巧,更好的學(xué)習(xí)家庭生活服務(wù)。用戶獲得優(yōu)惠的需求:用戶可獲得優(yōu)惠券,在下單時減免部分金額,提供部分優(yōu)惠。后臺(Web管理端):管理員登錄功能:管理員通過輸入用戶名、密碼、驗證碼后,后端進行校驗,驗證通過即可進入管理端,不同的管理員將會擁有不同的權(quán)限,從而可以操作不同的功能。家政公司管理功能:平臺方可對家政公司進行管理,包括新公司入駐、違規(guī)公司封禁等,通過審核公司即可進行操作,在平臺發(fā)布服務(wù)等。家政公司可以在這一職能下增加自己的內(nèi)部組織,對自己的內(nèi)部組織進行管理。管理員管理功能:平臺方可以通過此功能管理系統(tǒng)管理員,也可以管理家政公司的人員,一旦出現(xiàn)違規(guī)情況,將給予封殺并取消該員工的工作資格。家政公司方可以執(zhí)行諸如員工的添加和刪除等操作。訂單查詢管理功能:家政公司可以在此對相應(yīng)的訂單進行查詢,并在此對客戶進行聯(lián)系、服務(wù)評估等操作。平臺方可跟蹤訂單情況,保證家政服務(wù)公司的服務(wù)質(zhì)量。服務(wù)管理功能:家政服務(wù)公司可以在這里發(fā)布服務(wù)或下架服務(wù)。通過這一功能,平臺方監(jiān)控家政公司發(fā)布的服務(wù)是否符合平臺運行規(guī)則,并及時發(fā)現(xiàn)異常并進行處理。分類管理功能:平臺方可以通過此功能對微信小程序進行分類管理。文章管理功能:平臺方和部分家政公司可以使用此功能發(fā)布文章,提供家居清潔等有效指南。小程序用戶管理:平臺可通過此功能查詢已注冊用戶列表,如有用戶惡意操作或違法行為發(fā)生,平臺可及時進行處理,確保平臺正常運行。系統(tǒng)管理功能:平臺可以對管理系統(tǒng)的權(quán)限、菜單等進行管理,從而可以對整個家庭服務(wù)平臺進行靈活的管理。優(yōu)惠券管理:平臺方可以管理優(yōu)惠券的發(fā)布,提供一部分優(yōu)惠活動。數(shù)據(jù)展示功能:提供平臺數(shù)據(jù)的展示,方便地了解每日的運行情況。
3.4非功能性需求非功能需求是業(yè)務(wù)之外的需求,非業(yè)務(wù)需求也決定用戶的使用體驗、包括了系統(tǒng)總體的穩(wěn)定性。下面列出了一些更重要的非功能性需求。1.界面美觀需求這一需求主要描述了對系統(tǒng)外觀的期望,要求系統(tǒng)實現(xiàn)符合規(guī)范的外觀。家政服務(wù)平臺應(yīng)具備簡潔、莊重、簡約、精致的界面,給人一種專業(yè)而又不失精致的體驗,也要充分符合家政服務(wù)的氣氛。對于后臺管理來說就需要有專業(yè)的感覺了。可參考其他管理學(xué)上的設(shè)計風(fēng)格。2.易操作性需求易操作性將使系統(tǒng)的使用變得更加簡單,對于家政服務(wù)經(jīng)理來說,可以實現(xiàn)“一見鐘情”地使用本系統(tǒng)。與花大量時間和精力熟悉系統(tǒng)操作相比,讓家政公司管理人員快速掌握操作系統(tǒng)更好。對于微信小程序用戶來說,小程序需要清楚地顯示服務(wù)、訂單、個人信息等內(nèi)容,以方便用戶選擇和比較。3.安全性需求安全性是家政服務(wù)平臺的關(guān)鍵,系統(tǒng)必須具有消除潛在風(fēng)險的能力,并對風(fēng)險有一定的承壓能力。家政服務(wù)平臺不僅要保證微信小程序端用戶資料的安全性,還要保證后臺管理模塊家政機構(gòu)信息和從業(yè)人員信息的安全性,防止造成安全事故的發(fā)生。3.5本章小結(jié)系統(tǒng)開發(fā)過程中的需求分析尤為重要,對用戶的需求要有全面的了解,對用戶存在的問題要有透徹的理解。本章主要介紹了家政服務(wù)平臺的一些基本情況,這一點在本系統(tǒng)的設(shè)計中占有重要地位,本章將為后面的家政服務(wù)平臺的詳細(xì)設(shè)計提供完整的文檔支持。
系統(tǒng)的總體設(shè)計4.1系統(tǒng)邊界設(shè)計圖SEQ圖\*ARABIC1系統(tǒng)邊界設(shè)計圖家政服務(wù)平臺的總體邊界設(shè)計如圖1所示,整個家政服務(wù)平臺分成后臺管理平臺和前臺微信小程序平臺兩部分,作為第三方,系統(tǒng)管理員擁有整個平臺的功能權(quán)限,公司管理員作為商戶方進入平臺,會賦予一部分的系統(tǒng)管理權(quán)限和平臺管理權(quán)限,其公司內(nèi)部的員工則擁有查看服務(wù)和訂單的權(quán)限,可以對公司的訂單業(yè)務(wù)進行精細(xì)化處理。用戶則使用微信小程序端進行下單、評價等操作。
4.2系統(tǒng)業(yè)務(wù)流程4.2.1總體業(yè)務(wù)流程圖圖SEQ圖\*ARABIC2系統(tǒng)總體業(yè)務(wù)流程圖
4.2.2查看文章流程圖圖SEQ圖\*ARABIC3系統(tǒng)文章業(yè)務(wù)流程圖4.2.3登錄流程圖圖SEQ圖\*ARABIC4系統(tǒng)登錄業(yè)務(wù)流程圖
4.2.4支付流程圖圖SEQ圖\*ARABIC5系統(tǒng)支付業(yè)務(wù)流程圖
4.3系統(tǒng)數(shù)據(jù)流圖4.3.1頂層數(shù)據(jù)流圖圖SEQ圖\*ARABIC6系統(tǒng)頂層數(shù)據(jù)流圖4.3.2中層數(shù)據(jù)流圖圖SEQ圖\*ARABIC7系統(tǒng)中層數(shù)據(jù)流圖
4.3.3底層數(shù)據(jù)流圖(1)底層用戶登錄數(shù)據(jù)流圖圖SEQ圖\*ARABIC8系統(tǒng)底層用戶登錄數(shù)據(jù)流圖(2)底層文章數(shù)據(jù)流圖圖SEQ圖\*ARABIC9系統(tǒng)底層文章數(shù)據(jù)流圖
(3)底層服務(wù)數(shù)據(jù)流圖圖SEQ圖\*ARABIC10系統(tǒng)底層服務(wù)查詢數(shù)據(jù)流圖(4)底層訂單查詢數(shù)據(jù)流圖圖SEQ圖\*ARABIC11系統(tǒng)底層訂單查詢數(shù)據(jù)流圖
(5)底層預(yù)約服務(wù)數(shù)據(jù)流圖圖SEQ圖\*ARABIC12系統(tǒng)底層預(yù)約服務(wù)數(shù)據(jù)流圖(6)底層商家數(shù)據(jù)流圖圖SEQ圖\*ARABIC13系統(tǒng)底層商家信息數(shù)據(jù)流圖
(7)底層優(yōu)惠券數(shù)據(jù)流圖圖SEQ圖\*ARABIC14系統(tǒng)底層優(yōu)惠券數(shù)據(jù)流圖
4.4總體軟件實現(xiàn)架構(gòu)描述4.4.1層次結(jié)構(gòu)圖SEQ圖\*ARABIC15層次結(jié)構(gòu)圖家政平臺的軟件層次結(jié)構(gòu)如圖15所示,用戶通過操控UI界面的內(nèi)容進行系統(tǒng)的管理和小程序的操作,用戶點擊某一個按鈕后,前端請求api接口,api接口調(diào)用后端的Controller層是視圖控制層,其通過直接調(diào)用Service層(業(yè)務(wù)邏輯層)對業(yè)務(wù)進行處理,處理過程中如果需要調(diào)用到數(shù)據(jù),則需要調(diào)用Dao層(數(shù)據(jù)訪問層)對數(shù)據(jù)進行查詢。最后通過原路徑將數(shù)據(jù)返回到視圖層,視圖層將數(shù)據(jù)封裝成Json格式返回到前端,前端則根據(jù)后端返回的接口進行頁面的渲染,完成整個的數(shù)據(jù)交互。
4.4.2技術(shù)架構(gòu)圖SEQ圖\*ARABIC16技術(shù)架構(gòu)圖家政平臺的技術(shù)架構(gòu)如圖16所示,主要采用的是前后端分離模式進行設(shè)計,前端使用目前比較流行的Vue框架和微信小程序框架進行設(shè)計;后端使用目前比較流行和穩(wěn)定的SpringBoot和MyBatis框架進行設(shè)計,數(shù)據(jù)庫分別使用了傳統(tǒng)數(shù)據(jù)庫MySQL和高性能緩沖數(shù)據(jù)庫Redis。這樣一來,整個系統(tǒng)前后端分離,可以提高整體運行的性能,也可以方便的進行修改,是當(dāng)前比較流行的軟件框架。4.5系統(tǒng)的開發(fā)模式設(shè)計本平臺的實現(xiàn)主要采用瀑布模式,瀑布模式是家政服務(wù)平臺實現(xiàn)的開發(fā)模式,其核心思想是按工序完成問題,把功能的實現(xiàn)和設(shè)計分離開,使用結(jié)構(gòu)化分析的方法,完成軟件的開發(fā),并遵循軟件生命周期自上而下、相互銜接的順序。
4.6總體模塊結(jié)構(gòu) 圖SEQ圖\*ARABIC17總體模塊結(jié)構(gòu)圖
4.7子模塊設(shè)計家政平臺的模塊主要由后臺系統(tǒng)模塊、后臺平臺模塊、后臺小程序模塊、后臺數(shù)據(jù)模塊和微信小程序模塊5個模塊組成。4.7.1系統(tǒng)管理模塊圖SEQ圖\*ARABIC18系統(tǒng)管理模塊示意圖4.7.2平臺管理模塊圖SEQ圖\*ARABIC19平臺管理模塊示意圖
4.7.3小程序管理模塊圖SEQ圖\*ARABIC20小程序管理模塊示意圖4.7.4數(shù)據(jù)模塊圖SEQ圖\*ARABIC21數(shù)據(jù)模塊示意圖
4.7.5微信小程序模塊圖SEQ圖\*ARABIC22小程序模塊示意圖4.8數(shù)據(jù)庫的設(shè)計 4.8.1地址表address索引名字段索引類型索引方法注釋index_addressIdNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOmobile手機號varchar(11)varchar11YESname聯(lián)系人varchar(32)varchar32YESprovince省份varchar(10)varchar10YESarea地區(qū)varchar(10)varchar10YEScity城市varchar(10)varchar10YESdetail詳情varchar(10)varchar10YESis_default是否默認(rèn)tinyint(1)tinyintNOcreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.2文章表article索引名字段索引類型索引方法注釋index_articleIdNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOtitle標(biāo)題varchar(255)varchar255YESauthor作者varchar(64)varchar64YESauthor_avatar_uri作者頭像urivarchar(255)varchar255YEScomment_disabled是否可以評論tinyint(1)tinyintYEScontent內(nèi)容varchar(1024)varchar1024YEScontent_short描述varchar(255)varchar255YESimage_uri圖片urivarchar(255)varchar255YESimportance重要程度smallint(6)smallintYESsource_uri源地址varchar(255)varchar255YESappreciate點贊數(shù)smallint(255)smallintYESattention點擊數(shù)smallint(255)smallintYESforward轉(zhuǎn)發(fā)數(shù)smallint(255)smallintYESstatus狀態(tài)smallint(6)smallintYEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO
4.8.3文章點贊表article_appreciate索引名字段索引類型索引方法注釋idx_articlearticle_idNORMALBTREEidx_useruser_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述article_id文章idvarchar(32)varchar32NOuser_id用戶idvarchar(32)varchar32NO4.8.4分類表category索引名字段索引類型索引方法注釋idx_categoryidNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOcolor顏色varchar(32)varchar32YESicon圖標(biāo)varchar(255)varchar255YESname名稱varchar(64)varchar64YEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.5優(yōu)惠券表coupon索引名字段索引類型索引方法注釋idx_couponidNORMALBTREE
字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOcolor顏色varchar(256)varchar256YESdetail詳情varchar(256)varchar256YESdiscount_value優(yōu)惠價格decimal(10,2)decimalYESname優(yōu)惠券名稱varchar(64)varchar64YESunit單位varchar(32)varchar32YESuse_limit_type_name使用限制varchar(32)varchar32YESvalidity使用時間datetimedatetimeYEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.6評論表evaluate索引名字段索引類型索引方法注釋idx_evaluateidNORMALBTREEidx_good_idgood_idNORMALBTREEidx_order_idorder_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOdept_point公司評分smallint(6)smallintYESdetail詳情varchar(1024)varchar1024YESenvironment_point環(huán)境評分smallint(6)smallintYESgood_id服務(wù)idvarchar(32)varchar32YESorder_id訂單idvarchar(32)varchar32YESworker_point員工評分smallint(6)smallintYEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.7反饋表feedback索引名字段索引類型索引方法注釋idx_feedbackidNORMALBTREEidx_order_idorder_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOachievement完成情況tinyint(4)tinyintYESfeedback備注varchar(255)varchar255YESnotice通知varchar(255)varchar255YESorder_id訂單idvarchar(32)varchar32NOcreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.8服務(wù)表good索引名字段索引類型索引方法注釋idx_goodidNORMALBTREEidx_category_idcategory_idNORMALBTREEidx_dept_iddept_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOcategory_id分類idvarchar(32)varchar32YESdept_id公司idvarchar(32)varchar32YESdetail詳情varchar(1024)varchar1024YESimage_uri圖片連接varchar(255)varchar255YESname服務(wù)名varchar(64)varchar64YESprice價格decimal(5,1)decimalYESunit單位varchar(32)varchar32YEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.9足跡表good_access索引名字段索引類型索引方法注釋idx_good_idgood_idNORMALBTREEidx_user_iduser_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述good_id服務(wù)idvarchar(32)varchar32NOuser_id用戶idvarchar(32)varchar32NO4.8.10收藏表good_love索引名字段索引類型索引方法注釋idx_good_idgood_idNORMALBTREEidx_user_iduser_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述good_id服務(wù)idvarchar(32)varchar32NOuser_id用戶idvarchar(32)varchar32NO4.8.11輪播圖表rotation索引名字段索引類型索引方法注釋idx_rotation_ididNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOurl圖片urlvarchar(255)varchar255YEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.12公司&部門表sys_dept索引名字段索引類型索引方法注釋idx_deptidNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOaddress地址varchar(255)varchar255YESavatar頭像urlvarchar(255)varchar255YESlat緯度decimal(7,4)decimalYES地址計算的緯度lng經(jīng)度decimal(7,4)decimalYES地址計算經(jīng)度name部門名稱varchar(50)varchar50YESparent_id父idvarchar(32)varchar32NO一級部門為0legal企業(yè)法人varchar(50)varchar50YESemail郵箱varchar(50)varchar50YEStel聯(lián)系電話varchar(20)varchar50YESlicense營業(yè)執(zhí)照varchar(255)varchar255YEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.13日志表sys_log索引名字段索引類型索引方法注釋Idx_logidNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOipIP地址varchar(64)varchar64YESmethod請求方法varchar(200)varchar200YESoperation用戶操作varchar(50)varchar50YESparams請求參數(shù)varchar(5000)varchar5000YEStime執(zhí)行時長bigint(20)bigintYES毫秒username用戶名varchar(50)varchar50YEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO
4.8.14菜單表sys_menu索引名字段索引類型索引方法注釋idx_sys_menu_ididNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOcomponent組件varchar(256)varchar256YEShidden是否隱藏tinyint(1)tinyintYES0否,1是icon圖標(biāo)varchar(32)varchar32YESname名稱varchar(32)varchar32YESparent_id父菜單IDvarchar(32)varchar32YES一級菜單為nullpath路徑varchar(255)varchar255YESperms授權(quán)varchar(500)varchar500YES多個用逗號分隔redirect重定向地址varchar(255)varchar255YEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.15角色表sys_role索引名字段索引類型索引方法注釋idx_sys_role_ididNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOdept_id公司idvarchar(32)varchar32YESremark備注varchar(256)varchar256YESrole_name角色名稱varchar(32)varchar32YEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.16角色菜單表sys_role_menu索引名字段索引類型索引方法注釋idx_menu_idmenu_idNORMALBTREEidx_role_idrole_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述menu_id菜單idvarchar(32)varchar32NOrole_id角色idvarchar(32)varchar32NO4.8.17管理員表sys_user索引名字段索引類型索引方法注釋idx_sys_user_ididNORMALBTREEidx_usernameusernameNORMALBTREEidx_dept_iddept_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOavatar頭像varchar(100)varchar100YESdept_id公司idvarchar(32)varchar32YESemail郵箱varchar(32)varchar32YESgmt_login上次登錄時間datetimedatetimeYESlast_login_ip上次登錄ipvarchar(32)varchar32YESmobile聯(lián)系電話varchar(16)varchar16YESpassword密碼varchar(64)varchar64YESusername用戶名varchar(32)varchar32NOcreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.18用戶角色表sys_user_role索引名字段索引類型索引方法注釋idx_user_iduser_idNORMALBTREEidx_role_idrole_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述user_id用戶idvarchar(32)varchar32NOrole_id角色idvarchar(32)varchar32NO4.8.18用戶token表sys_user_token索引名字段索引類型索引方法注釋idx_tokenTokenUNIQUEBTREEidx_user_iduser_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述expire_time過期時間datetimedatetimeYEStokentokenvarchar(100)varchar100NOupdate_time更新時間datetimedatetimeYESuser_id用戶idvarchar(100)varchar100NO4.8.19訂單表t_order索引名字段索引類型索引方法注釋idx_orderidNORMALBTREEidx_dept_iddept_idNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOaddress地址varchar(32)varchar32YEScontact聯(lián)系人varchar(32)varchar32YESdept_id公司idvarchar(32)varchar32YESdiscount_price優(yōu)惠價格decimal(5,1)decimalYESgmt_pay支付時間datetimedatetimeYESgood_id服務(wù)idvarchar(32)varchar32YESimage_uri服務(wù)圖片varchar(255)varchar255YESis_comment是否評論tinyint(1)tinyintYES1是0否mobile聯(lián)系電話varchar(11)varchar11YESname聯(lián)系人varchar(128)varchar128YESpayment支付方式tinyint(4)tinyintYESprice價格decimal(5,1)decimalYESremark備注varchar(1024)varchar1024YESstatus狀態(tài)tinyint(4)tinyintYEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.8.20用戶優(yōu)惠券表user_coupon索引名字段索引類型索引方法注釋idx_user_iduseridNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述coupon_id優(yōu)惠券idvarchar(32)varchar32NOorder_id訂單idvarchar(32)varchar32YESuse_time使用時間datetimedatetimeYESuser_id用戶idvarchar(32)varchar32NO4.8.21微信用戶表wechat_user索引名字段索引類型索引方法注釋idx_wechat_user_ididNORMALBTREEidx_wechat_user_openidopenidNORMALBTREE字段列名名稱數(shù)據(jù)類型字段類型長度是否為空描述ididvarchar(32)varchar32NOavatar_url頭像urlvarchar(255)varchar255YEScity國家varchar(32)varchar32YEScountry城市varchar(32)varchar32YESgender性別tinyint(4)tinyintYES0未知1男2女gmt_login上次登錄時間datetimedatetimeYESlanguage語言varchar(32)varchar32YESlast_login_ip上次登錄ipvarchar(32)varchar32YESmobile手機號varchar(11)varchar11YESnickname昵稱varchar(32)varchar32YESopenidopenidvarchar(32)varchar32YESprovince省份varchar(32)varchar32YESsession_keysession_keyvarchar(32)varchar32YESunionidunionidvarchar(32)varchar32YEScreate_by創(chuàng)建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create創(chuàng)建時間datetimedatetimeNOgmt_modified修改時間datetimedatetimeYESis_deleted是否刪除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本號int(11)intNO4.9本章小結(jié) 本章主要是說明家政服務(wù)平臺的總體設(shè)計,對系統(tǒng)進行總體模塊進行劃分,大概描述系統(tǒng)開發(fā)的總體內(nèi)容情況,為接下來詳細(xì)設(shè)計奠定基礎(chǔ)。系統(tǒng)的詳細(xì)設(shè)計5.1項目結(jié)構(gòu)5.1.1目錄結(jié)構(gòu)圖SEQ圖\*ARABIC23后端目錄結(jié)構(gòu)項目使用了Maven進行托管,采用父子包的形式進行搭建,最外層的pom.xml對項目引用的jar包版本進行管理,common包是基本工具類,entity包是實體類,dao包是數(shù)據(jù)訪問層的類,service包是業(yè)務(wù)處理類,web-api是后臺管理系統(tǒng)的前端控制器類,wx-api是微信小程序的前端控制器類。common模塊圖SEQ圖\*ARABIC24commom結(jié)構(gòu)common包中,annotaion是注解的配置類,exception是存放自定義異常的處理類的包,utils是存放工具類的包,xss是存放防攻擊類的包,Constant是一些常量類。
web-api模塊圖SEQ圖\*ARABIC25web-api結(jié)構(gòu)web-api模塊中,aspect是存放切面類的包,config是存放配置類的包,controller是存放前端控制器類的包,oauth2是存放shiro登錄類的包,utils是存放工具類的包,WebApiApplication是SpringBoot項目的啟動類。wx-api模塊圖SEQ圖\*ARABIC26wx-api結(jié)構(gòu)wx-api模塊中,annotaion和config是存放配置文件的包,utils中是整個項目所需要使用的工具,controller中的類是前端訪問的唯一途徑。
前端Vue模塊圖SEQ圖\*ARABIC27前端Vue目錄結(jié)構(gòu)前端Vue模塊中,public是index.html和圖標(biāo)的包,src中,api是存放封裝了請求api的包,assets是存放了圖片的包,components是存放了一部分公用模塊的包,directive和utils是存放了工具類的包,icons是存放了系統(tǒng)圖標(biāo)庫的包,layout是存放了布局的包,route是存放了路由的包,store是存放了本地緩存的包,styles是存放了部分樣式的包,vendor是存放了excle表格導(dǎo)出使用的工具類的包,views是存放了頁面的包,App.vue是項目的根路徑,main.js是基本的js類,permission.js是權(quán)限管理類,settings.js是設(shè)置管理類。微信小程序模塊圖SEQ圖\*ARABIC28微信小程序結(jié)構(gòu)微信小程序模塊中,colorui是存放前端樣式的基礎(chǔ)包,images是靜態(tài)的圖片,pages是全部的小程序頁面,utils是所有使用到的工具;app.js、app.json、app.wxss是主文件的包,project.config.json是項目配置文件的包。5.2部件詳細(xì)設(shè)計5.2.1統(tǒng)一結(jié)果返回(1)結(jié)果類RpublicclassRextendsHashMap<String,Object>{publicR(){put("code",200);}publicstaticRerror(){returnerror(500,"未知異常,請聯(lián)系管理員");}publicstaticRok(Stringmsg){Rr=newR();r.put("msg",msg);returnr;}}創(chuàng)建類R,繼承HashMap,生成error方法和ok方法,提供兩個返回結(jié)果。5.2.2系統(tǒng)日志注解(2)自定義注解類Log@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceLog{ Stringvalue()default"";}創(chuàng)建@interface類,即注解類Log,使用@Target注解指定在何處寫入注釋的合法位置,這里使用的是ElementType.METHOD,即方法聲明;這里將@Retention的策略設(shè)置為RUNTIME,則在項目整體運行的過程中會一直存在Log類,從而全局都可使用。@Document則是說明Log類是可以JavaDoc進行記錄的,可以保留文檔。在Log類中設(shè)置了一個屬性value,通過這個熟悉可以設(shè)置方法的描述。(3)系統(tǒng)日志切面處理類LogAspect使用Spring的面向切面的編程思想,進行日志的記錄,并保存的數(shù)據(jù)庫中。@Pointcut("@annotation(mon.annotation.Log)")publicvoidlogPointCut(){}使用@Pointcut確認(rèn)其切點的切入方向。@Around("logPointCut()")publicObjectaround(ProceedingJoinPointpoint)throwsThrowable{//開始時間LongbeginTime=System.currentTimeMillis();//執(zhí)行方法Objectresult=ceed();//執(zhí)行時長(毫秒)Longtime=System.currentTimeMillis()-beginTime;saveSysLog(point,time);returnresult;}在切點處理方法中,先通過System.currentTimeMillis獲取方法開始執(zhí)行的時間,然后調(diào)用ceed繼續(xù)執(zhí)行方法,執(zhí)行結(jié)束后通過再次獲取當(dāng)前系統(tǒng)時間,減去起始時間,得到執(zhí)行時長,然后通過調(diào)用saveSysLog方法將日志保存到數(shù)據(jù)庫中。5.2.3自定義異常(1)自定義異常類RRExceptionpublicclassRRExceptionextendsRuntimeException{privateStringmsg;privateintcode=500;RRException是繼承了RuntimeExcetion的實現(xiàn)類,其中包括code和msg屬性,分別為返回代碼和消息。(2)統(tǒng)一異常處理類RRExceptionHandler@RestControllerAdvicepublicclassRRExceptionHandler{創(chuàng)建異常類RRExceptionHandler,使用Spring中的@RestControllerAdvice注解進行配置,設(shè)置其全局處理異常類的功能。@ExceptionHandler(RRException.class)publicRhandleRRException(RRExceptione){Rr=newR();r.put("code",e.getCode());r.put("msg",e.getMsg());returnr;}在Spring中,@ExceptionHandler可以全局捕獲異常,然后根據(jù)自定義進行處理。本類還分別處理DuplicateKeyException(重復(fù)數(shù)據(jù)異常)、AuthorizationException(權(quán)限驗證失敗異常)、NullPointerException(空指針異常)和Exception(其他異常)。
5.2.4獲取請求IP(1)IP工具類IPUtilspublicstaticStringgetIpAddr(HttpServletRequestrequest)創(chuàng)建靜態(tài)方法類getIpAddr,方法參數(shù)為HttpServletRequest,使用request.getRemoteAddr()獲取請求的IP地址。如果使用了Nginx等反向代理軟件,則不能通過request.getRemoteAddr()獲取IP地址,因此需要使用request.getHeader("x-forwarded-for")、request.getHeader("Proxy-Client-IP")、request.getHeader("WL-Proxy-Client-IP")、request.getHeader("HTTP_CLIENT_IP")、request.getHeader("HTTP_X_FORWARDED_FOR")獲取IP地址。由于多層方向代理使用X-Forwarded-For可能存在多個IP地址,因此如果想獲取最開始請求的地址就需要用到ip.substring(0,ip.indexOf(","))來獲取第一個有效的IP地址。5.2.5生成Token(1)Token生成類TokenGeneratorpublicstaticStringgenerateValue(){returngenerateValue(UUIDUtils.uuidStr());}創(chuàng)建Token生成類,使用UUID的形式先生成UUID字符串,然后再調(diào)用generateValue(Stringparam)方法對UUID字符串進行處理。MessageDigestalgorithm=MessageDigest.getInstance("MD5");algorithm.reset();algorithm.update(param.getBytes());byte[]messageDigest=algorithm.digest();returntoHexString(messageDigest);使用secutity包中的MessageDigest方法對uuid進行處理,然后再對結(jié)果進行Hex處理。5.2.6公共實體(1)公共實體類BaseEntity項目數(shù)據(jù)庫中共有8個公共的實體,分別是id、create_by(創(chuàng)建人)、last_modified_by(最后修改人)、gmt_modified(最后修改時間)、gmt_create(創(chuàng)建時間)、sort(排序)、is_deleted(邏輯刪除標(biāo)志)、version(版本號)。創(chuàng)建公共實體類,將其他實體類繼承此類,即可獲得這8個屬性。其中,id是使用由Twitter開源的分布式id生成算法,稱之為雪花(SnowFlake)算法,其根據(jù)機器碼和時間戳等,生成的是全局唯一的long類型的數(shù)據(jù)id。創(chuàng)建人(createBy)、創(chuàng)建時間(gmtCreate)使用MyBatisPlus提供的注解@TableField(fill=FieldFill.INSERT)進行設(shè)置,然后在使用插入語句時,會自動將這兩個字段插入到sql語句中,保存到數(shù)據(jù)庫。修改人(lastModifiedBy)、修改時間(gmtModified)與上面描述類似。排序(sortNo)是將數(shù)據(jù)進行排序。刪除標(biāo)志(isDeleted)是將數(shù)據(jù)進行邏輯刪除,如果該數(shù)據(jù)以及刪除,則將該字段設(shè)置為1,在查詢時會將這個字段帶入查詢條件,只查詢該字段為0的字段。版本號(version)是給每條數(shù)據(jù)加上樂觀鎖,防止數(shù)據(jù)的誤讀、臟讀,保證數(shù)據(jù)的安全。5.2.7Shiro權(quán)限認(rèn)證(1)ShiroApacheShiro是一個Java安全框架,市面上還有SpringSecurity等類似的框架。Shiro可以對會話進行安全管理,包括認(rèn)證和授權(quán)等等。(2)OAuth2Filter使用OAuth2Filter對每條請求連接進行攔截過濾,通過請求頭中的token屬性獲取請求的token字符串,從而對用戶權(quán)限做出校驗。@OverrideprotectedbooleanonAccessDenied(ServletRequestservletRequest,ServletResponseservletResponse)throwsException{Stringtoken=getRequestToken((HttpServletRequest)servletRequest);if(StringUtils.isBlank(token)){HttpServletResponsehttpServletResponse=(HttpServletResponse)servletResponse;Stringjson=newGson().toJson(R.error(500,"invalidtoken"));httpServletResponse.getWriter().print(json);returnfalse;}returnexecuteLogin(servletRequest,servletResponse);}如果拿到的token為空,則返回登錄失敗,如果不為空,則調(diào)用executeLogin方法對token進行校驗,鑒權(quán)。(3)OAuth2Realm@OverrideprotectedAuthorizationInfodoGetAuthorizationInfo(PrincipalCollectionprincipalCollection){SysUsersysUser=(SysUser)principalCollection.getPrimaryPrincipal();StringuserId=sysUser.getId();//獲取用戶權(quán)限列表Set<String>permsSet=shiroService.getUserPermissions(userId);SimpleAuthorizationInfoinfo=newSimpleAuthorizationInfo();info.setStringPermissions(permsSet);returninfo;}該方法會在授權(quán)(驗證權(quán)限)時調(diào)用,其主要思想是在Shiro的用戶信息類PrincipalCollection中獲取用戶信息實體,從而獲取對應(yīng)的用戶id,通過用戶id去數(shù)據(jù)庫中查詢用戶的權(quán)限列表,并將權(quán)限列表保存到用戶認(rèn)證信息中。@OverrideprotectedAuthenticationInfodoGetAuthenticationInfo(AuthenticationTokenauthenticationToken)throwsAuthenticationException{StringaccessToken=(String)authenticationToken.getPrincipal();SysUserTokensysUserToken=shiroService.queryByToken(accessToken);if(sysUserToken==null||sysUserToken.getExpireTime().isAfter(LocalDateTime.now())==false){thrownewIncorrectCredentialsException("token失效,請重新登錄");}SysUsersysUser=shiroService.queryUser(sysUserToken.getUserId());SimpleAuthenticationInfoinfo=newSimpleAuthenticationInfo(sysUser,accessToken,getName());returninfo;}上述方法會在認(rèn)證時調(diào)用,該方法會從Shiro提供的AuthenticationToken類中獲取用戶信息,拿到請求的accessToken,通過token去查詢對應(yīng)用戶信息,將信息保存到Shiro提供的SimpleAuthenticationInfo類中。(4)OAuth2Token該類實現(xiàn)了AuthenticationToken接口,其中定義了一個屬性token,并重寫了getPrincipal和getCredentials方法,使其返回token屬性。(5)ShiroUtils這個類是自定義的Shiro工具類,定義了方法,可以直接從Shiro的庫中拿到如用戶id、用戶信息、權(quán)限等操作。(6)BaseControllerpu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 淺論多媒體在計算機教學(xué)中的應(yīng)用
- 《新能源材料專業(yè)英語》教學(xué)大綱
- 禮儀課題文檔
- 教案 均值不等式教案
- 玉溪師范學(xué)院《土地生態(tài)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 名著經(jīng)典語錄摘要
- 婚姻家庭繼承法教案
- 電影放映機賬務(wù)處理實例-記賬實操
- 房地產(chǎn) -太平山文旅開發(fā)規(guī)劃方案融合運營規(guī)劃提案
- 2024年空氣清新香片項目綜合評估報告
- 傷口評估與記錄測試卷附答案
- 文化哲學(xué)十五講
- 《保障農(nóng)民工工資支付條例》宣傳冊
- 初中語文部編版八年級上冊期末文學(xué)文化常識專項練習(xí)(2022秋)(附參考答案)
- 如何進行品牌傳達和品牌推廣以塑造企業(yè)形象
- 脊髓電刺激術(shù)護理查房課件
- 醫(yī)院培訓(xùn)課件:《房間隔缺損介入封堵術(shù)》
- 《支氣管鏡圖譜》課件
- 糖尿病性周圍神經(jīng)病的護理查房
- 外科住院超30天整改質(zhì)量持續(xù)改進報告(含魚骨圖)
- 2024年中煤電力有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論