基于SpringBoot微信外賣小程序設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于SpringBoot微信外賣小程序設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于SpringBoot微信外賣小程序設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于SpringBoot微信外賣小程序設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于SpringBoot微信外賣小程序設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于SpringBoot的微信外賣小程序設(shè)計(jì)與實(shí)現(xiàn)目錄TOC\o"1-3"\h\u326601.研究意義以及研究現(xiàn)狀 7281241.1研究背景 7138001.2國(guó)內(nèi)外研究現(xiàn)狀 8302832.本文的研究?jī)?nèi)容和創(chuàng)新點(diǎn) 8143293.相關(guān)技術(shù)介紹 9176913.1SpringBoot框架 9223073.2微信小程序開發(fā) 1094563.3MySQL 10243943.4Redis 1120994.微信外賣小程序的系統(tǒng)分析 1130274.1可行性分析 11232094.1.1技術(shù)可行性分析 1165814.1.2經(jīng)濟(jì)可行性分析 12286354.1.3操作可行性分析 12127314.2系統(tǒng)業(yè)務(wù)流程分析 12257484.3系統(tǒng)功能分析 16210715.外賣小程序的系統(tǒng)設(shè)計(jì) 17264245.1控制器設(shè)計(jì) 18315845.2系統(tǒng)功能業(yè)務(wù)邏輯設(shè)計(jì) 20160475.3系統(tǒng)安全性設(shè)計(jì) 26194875.4系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì) 28235156.系統(tǒng)實(shí)現(xiàn) 3286327.系統(tǒng)測(cè)試 39262968.總結(jié)與展望 4114464致謝 411535參考文獻(xiàn) 42

摘要:在數(shù)字經(jīng)濟(jì)高速發(fā)展的今天,互聯(lián)網(wǎng)技術(shù)已深入人們生活的各個(gè)領(lǐng)域,尤其是在餐飲行業(yè),通過智能化服務(wù)提升用戶體驗(yàn)已成為發(fā)展的重要趨勢(shì)。在此背景下,外賣服務(wù)業(yè)迎來(lái)了前所未有的發(fā)展機(jī)遇和挑戰(zhàn)。隨著微信小程序的普及,基于微信平臺(tái)的外賣小程序因其無(wú)需下載安裝、使用方便的特點(diǎn)而受到廣大用戶的青睞,但同時(shí)也面臨著如何快速開發(fā)、維護(hù)以及提供穩(wěn)定高效服務(wù)的問題。本研究以SpringBoot為基礎(chǔ)框架,針對(duì)微信外賣小程序的開發(fā)與實(shí)現(xiàn)進(jìn)行了深入探討。SpringBoot作為一種簡(jiǎn)化Spring應(yīng)用開發(fā)的框架,可以有效地減少項(xiàng)目搭建的復(fù)雜性,使得開發(fā)者能夠更加專注于業(yè)務(wù)功能的實(shí)現(xiàn)。本文首先分析了當(dāng)前外賣小程序的業(yè)務(wù)需求和市場(chǎng)特點(diǎn),進(jìn)而設(shè)計(jì)了一款輕量級(jí)、易于擴(kuò)展和維護(hù)的微信外賣小程序架構(gòu)。在此基礎(chǔ)上,運(yùn)用模塊化開發(fā)思想,將系統(tǒng)劃分為用戶模塊、訂單模塊、支付模塊及后臺(tái)管理模塊等,每個(gè)模塊均采用SpringBoot進(jìn)行快速開發(fā)和整合。本系統(tǒng)主要功能有用戶登錄、菜品管理、購(gòu)物車、美食推薦等相關(guān)功能。本系統(tǒng)使用了緩存機(jī)制優(yōu)化了系統(tǒng)性能,提高了系統(tǒng)的并發(fā)性。使用了協(xié)同推薦算法優(yōu)化了用戶訂餐體驗(yàn)。本系統(tǒng)能為程序開發(fā)提供優(yōu)化系統(tǒng)性能、為用戶個(gè)性化功能實(shí)現(xiàn)做出參考。關(guān)鍵詞:Springboot框架;外賣小程序;微信小程序引言本文皆在構(gòu)建一個(gè)微信外賣小程序。第一章為現(xiàn)狀以及介紹背景,介紹目前微信小程序在市場(chǎng)上的廣泛應(yīng)用以及目前研究現(xiàn)狀。第二章為設(shè)計(jì)亮點(diǎn),主要為本次開發(fā)使用了安全性認(rèn)證機(jī)制提高了系統(tǒng)的安全性能以及使用緩存機(jī)制提高了系統(tǒng)響應(yīng)速度。第三章至第六章為相關(guān)技術(shù)介紹、分析設(shè)計(jì)與實(shí)現(xiàn),第三章將介紹本次開發(fā)所使用的技術(shù)工具。分析環(huán)節(jié)包括系統(tǒng)的可行性分析、系統(tǒng)功能分析。可行性分析包括技術(shù)上是否可行、操作上是否可行以及使用成本上的考量。系統(tǒng)功能分析主要分析本系統(tǒng)所具備的常用的功能,例如用戶登錄、菜品管理、訂單管理等一系列功能。設(shè)計(jì)章節(jié)分為控制器設(shè)計(jì),通過設(shè)計(jì)控制器響應(yīng)對(duì)應(yīng)的用戶請(qǐng)求;系統(tǒng)功能業(yè)務(wù)邏輯設(shè)計(jì)主要內(nèi)容為設(shè)計(jì)每個(gè)功能的運(yùn)行邏輯,通過業(yè)務(wù)流程圖設(shè)計(jì)出對(duì)應(yīng)的功能模塊;系統(tǒng)安全性設(shè)計(jì)主要是為了提高系統(tǒng)信息傳輸?shù)陌踩裕缬脩舻卿浀男畔⒓用?,?yàn)證碼隨機(jī)刷新機(jī)制;數(shù)據(jù)庫(kù)設(shè)計(jì)的主要內(nèi)容則是設(shè)計(jì)系統(tǒng)數(shù)據(jù)庫(kù)的ER圖、物理模型以及設(shè)計(jì)相應(yīng)數(shù)據(jù)。實(shí)現(xiàn)環(huán)節(jié)將展示開發(fā)完成后系統(tǒng)的實(shí)現(xiàn)效果圖。第七章為系統(tǒng)測(cè)試,主要以用戶的角度進(jìn)行測(cè)試,測(cè)試系統(tǒng)功能是否可以正常使用。最終章為總結(jié)展望,總結(jié)本次開發(fā)取得的成果以及不足。希望本系統(tǒng)為程序開發(fā)提供一些參考。1.研究意義以及研究現(xiàn)狀1.1研究背景隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的應(yīng)用都能在移動(dòng)設(shè)備上完成。人們使用移動(dòng)設(shè)備可完成購(gòu)物,外賣點(diǎn)單,以及通過在線支付軟件完成訂單。隨著信息技術(shù)的快速發(fā)展,移動(dòng)互聯(lián)網(wǎng)服務(wù)已經(jīng)逐漸成為主流,APP需要在移動(dòng)端下載并占用一定的內(nèi)存,而微信小程序依托于微信,無(wú)需安裝和卸載,具有運(yùn)行效率高、節(jié)省內(nèi)存空間等特點(diǎn)。例如微信支付和支付寶。目前微信已經(jīng)達(dá)成了一個(gè)生態(tài)化的局面。微信雖是一個(gè)通信軟件,但是卻集成了小程序,人們可以使用微信程序,從而不用去單獨(dú)去下載應(yīng)用。配合微信的支付,形成完美的生態(tài)。例如,可以使用微信的商品購(gòu)物小程序,在微信上完成選購(gòu)商品,支付結(jié)算的功能。加之微信的小程序開發(fā)工具高度的完善度,使得微信小程序開發(fā)變得容易。同時(shí)微信小程序也便于外賣商家推廣自家的菜品,也方便用戶了解到當(dāng)前外賣餐品的各種信息。因此開發(fā)一個(gè)微信外賣小程序具有打通用戶和商家窗口的意義。從開發(fā)技術(shù)的角度而言,微信小程序端的開發(fā)可以借助微信官方小程序的開發(fā)工具,從而達(dá)到良好的兼容性。另外微信小程序的開發(fā)主要是JavaScript和WXML,與SpringBoot框架的Java語(yǔ)言相比更接近前端開發(fā),更容易上手。而在商家端,分為前端web網(wǎng)頁(yè)端和后臺(tái)端。因?yàn)槟壳癹ava編程語(yǔ)言具有跨平臺(tái)的完善生態(tài)。因此本次選用Java語(yǔ)言進(jìn)行開發(fā),另外借助SpringBoot框架進(jìn)行開發(fā),SpringBoot的優(yōu)勢(shì)在于可以快速配置,簡(jiǎn)化開發(fā)的特點(diǎn)。并且由于SpringBoot具有高并發(fā)的特性,可以承載大量的用戶數(shù)據(jù),因此選用SpringBoot框架開發(fā)相對(duì)合適。因此本次的基于SpringBoot的微信外賣小程序具有廣闊的應(yīng)用場(chǎng)景還有實(shí)現(xiàn)巨大商業(yè)價(jià)值的潛力。1.2國(guó)內(nèi)外研究現(xiàn)狀目前國(guó)內(nèi)已經(jīng)有很多利用SpringBoot快速搭建管理平臺(tái)的例子,例如使用SpringBoot以及微信小程序平臺(tái)搭建醫(yī)療管理系統(tǒng),使用SpringBoot構(gòu)建電商平臺(tái),幫助農(nóng)民打開商業(yè)銷路,提高商業(yè)價(jià)值。通過SpringBoot的管理后臺(tái)能夠?qū)崟r(shí)查看訂單,具有訂單管理、商品管理、以及實(shí)時(shí)發(fā)布優(yōu)惠改變價(jià)格的功能。與此同時(shí),國(guó)際研究者對(duì)于物聯(lián)網(wǎng)技術(shù)的應(yīng)用也進(jìn)行了深入研究。如一項(xiàng)關(guān)于實(shí)時(shí)異常用電行為監(jiān)測(cè)系統(tǒng)的研究便展現(xiàn)了如何利用物聯(lián)網(wǎng)技術(shù)進(jìn)行數(shù)據(jù)采集和處理。該研究中,通過使用NB-IoT技術(shù)定時(shí)傳送采集到的電流、電壓和功率數(shù)據(jù)至云平臺(tái),并運(yùn)用XGBoost算法對(duì)用電行為進(jìn)行學(xué)習(xí)與預(yù)測(cè),最終實(shí)現(xiàn)了高效的用電監(jiān)測(cè)。這種技術(shù)的邊界拓展為SpringBoot在物聯(lián)網(wǎng)領(lǐng)域的應(yīng)用提供了新的視角。在一些其他的技術(shù)科研領(lǐng)域,例如農(nóng)學(xué),甚至可以通過人工智能配合SpringBoot實(shí)現(xiàn)農(nóng)作物受災(zāi)分析,從而進(jìn)行更好的防治。綜上所述,無(wú)論是在商業(yè)、醫(yī)療、能源監(jiān)控還是高性能競(jìng)賽場(chǎng)景中,基于SpringBoot的應(yīng)用都顯示出了其靈活性和穩(wěn)定性。這些研究成果不僅促進(jìn)了相關(guān)技術(shù)的發(fā)展,也為微信外賣小程序這類生活服務(wù)平臺(tái)的構(gòu)建提供了寶貴的經(jīng)驗(yàn)和參考。隨著技術(shù)的不斷進(jìn)步,未來(lái)基于SpringBoot的微信外賣小程序?qū)⒂型诠δ茇S富性、用戶體驗(yàn)優(yōu)化以及服務(wù)智能化等方面取得更大的突破。2.本文的研究?jī)?nèi)容和創(chuàng)新點(diǎn)隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,傳統(tǒng)外賣服務(wù)逐漸向線上平臺(tái)轉(zhuǎn)移,微信小程序因其無(wú)需下載安裝、使用方便的特點(diǎn)成為外賣行業(yè)新的增長(zhǎng)點(diǎn)。基于SpringBoot框架開發(fā)微信外賣小程序不僅能夠?qū)崿F(xiàn)快速響應(yīng)用戶訂單,還能提供實(shí)時(shí)更新和管理的功能,為商家和消費(fèi)者構(gòu)建一個(gè)輕量級(jí)、高效的訂餐環(huán)境。研究?jī)?nèi)容方面,本文將深入探討基于SpringBoot框架的微信外賣小程序的整體架構(gòu)設(shè)計(jì),包括微信外賣小程序的系統(tǒng)設(shè)計(jì)與架構(gòu),分析并設(shè)計(jì)微信外賣小程序的前端用戶界面,后端服務(wù),數(shù)據(jù)存儲(chǔ)以及推薦算法的集成。詳細(xì)說明后端使用的技術(shù)框架的工作原理及其流程,包括如何有效地實(shí)現(xiàn)數(shù)據(jù)模型和業(yè)務(wù)邏輯。在數(shù)據(jù)存儲(chǔ)方面,將研究如何使用數(shù)據(jù)庫(kù)存儲(chǔ)長(zhǎng)期數(shù)據(jù),例如用戶信息,訂單記錄和菜品分類,討論緩存的應(yīng)用,例如使用內(nèi)存中的緩存配合磁盤中的數(shù)據(jù)庫(kù)實(shí)現(xiàn)快速讀取,或者作為處理高并發(fā)請(qǐng)求的會(huì)話存儲(chǔ)。在微信小程序中的美食推薦模塊中,將會(huì)研究使用協(xié)同過濾算法為客戶推薦菜品的方法,包括算法過程及其實(shí)現(xiàn)。以及研究推薦系統(tǒng)是如何通過分析用戶歷史數(shù)據(jù)和行為來(lái)進(jìn)行菜品的推薦。本文中的潛在創(chuàng)新點(diǎn)在于將關(guān)系數(shù)據(jù)庫(kù)和緩存結(jié)合使用,優(yōu)化了數(shù)據(jù)讀取性能,實(shí)現(xiàn)更快的響應(yīng)。另外推薦算法也是一個(gè)亮點(diǎn),采用協(xié)同推薦算法定制化推薦邏輯,相較于傳統(tǒng)的推薦系統(tǒng),可以更好反映客戶偏好。3.相關(guān)技術(shù)介紹3.1SpringBoot框架SpringBoot是由Pivotal團(tuán)隊(duì)開發(fā)的,其設(shè)計(jì)的目的是簡(jiǎn)化創(chuàng)建Spring應(yīng)用的初始搭建和開發(fā)過程。SpringBoot框架是一個(gè)開源的Java平臺(tái),旨在簡(jiǎn)化創(chuàng)建可立即運(yùn)行的Spring應(yīng)用程序的過程。它繼承了Spring框架的核心特性,同時(shí)通過提供自動(dòng)配置、起步依賴和內(nèi)嵌容器等功能,極大地簡(jiǎn)化了項(xiàng)目的搭建和開發(fā)過程。通常構(gòu)建一個(gè)SpringBoot項(xiàng)目會(huì)遵循某些分層結(jié)構(gòu)來(lái)實(shí)現(xiàn)組織代碼,一般分為控制層、服務(wù)層、數(shù)據(jù)訪問層、數(shù)據(jù)傳輸對(duì)象、領(lǐng)域模型以及輔助層。在控制層(ControllerLayer)中通常由控制器組成,調(diào)用服務(wù)層來(lái)完成具體操作,并返回響應(yīng),在SpringBoot中,這通過使用注解來(lái)實(shí)現(xiàn)。在服務(wù)層中,包含業(yè)務(wù)邏輯,通常與數(shù)據(jù)訪問層分離,以實(shí)現(xiàn)業(yè)務(wù)操作。在這一層中,會(huì)使用@Service注解來(lái)定義服務(wù)組件,并在其中編寫業(yè)務(wù)邏輯。數(shù)據(jù)訪問層主要負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行交互,并提供數(shù)據(jù)查詢和存儲(chǔ)的機(jī)制。在SpringBoot項(xiàng)目中,通常使用SpringDataJPA或MyBatis等技術(shù),并通過@Repository注解標(biāo)識(shí)接口。數(shù)據(jù)傳輸對(duì)象(DTO)主要功能是用于在不同層之間傳輸數(shù)據(jù)的對(duì)象,它們通常封裝了從客戶端傳來(lái)的數(shù)據(jù),或是將要發(fā)送到客戶端的數(shù)據(jù)。而在領(lǐng)域模型(Model)中包括了表示業(yè)務(wù)概念的實(shí)體(Entity)和值對(duì)象(ValueObject)。它們通常通過@Entity注解標(biāo)注,用于映射數(shù)據(jù)庫(kù)表的結(jié)構(gòu)。輔助層通常是提供一些輔助功能,例如安全驗(yàn)證。在SpringBoot應(yīng)用的典型工作流程中,一個(gè)HTTP請(qǐng)求首先達(dá)到控制層,如果設(shè)置了過濾器(Filter)和攔截器(Interceptor),請(qǐng)求會(huì)先經(jīng)過這些組件以確保數(shù)據(jù)傳輸?shù)陌踩?。之后,控制層將?qǐng)求數(shù)據(jù)封裝至DTO并傳遞至服務(wù)層。服務(wù)層處理業(yè)務(wù)邏輯,可能涉及到領(lǐng)域模型的狀態(tài)變更或驗(yàn)證,并調(diào)用數(shù)據(jù)訪問層執(zhí)行數(shù)據(jù)持久化或查詢操作。數(shù)據(jù)訪問層與數(shù)據(jù)庫(kù)互動(dòng)后,將結(jié)果反饋至服務(wù)層,后者可能進(jìn)行進(jìn)一步處理并將結(jié)果封裝在DTO中回傳給控制層。最后,控制層將DTO轉(zhuǎn)換為HTTP響應(yīng),返回給客戶端。這種層次化的架構(gòu)不僅有利于代碼的解耦和重用,也簡(jiǎn)化了測(cè)試和維護(hù)工作。通過依賴注入(DependencyInjection),各層之間的協(xié)作更加緊密和高效。3.2微信小程序開發(fā)在探討微信小程序的開發(fā)相關(guān)技術(shù)時(shí),不可忽視的是其在當(dāng)前數(shù)字化生態(tài)中的重要地位。微信小程序作為一種輕量級(jí)的應(yīng)用形式,依托于微信這一龐大的社交平臺(tái),為開發(fā)者提供了一個(gè)高效、便捷的應(yīng)用開發(fā)環(huán)境。它允許用戶在無(wú)需下載安裝的情況下即時(shí)使用應(yīng)用,極大地簡(jiǎn)化了用戶獲取服務(wù)的路徑,同時(shí)也為商家創(chuàng)造了一個(gè)直接觸達(dá)用戶的通道。微信小程序的開發(fā)框架以JavaScript為基礎(chǔ),結(jié)合WXML(WeiXinMarkupLanguage)和WXSS(WeiXinStyleSheets)這兩種微信特有的標(biāo)記語(yǔ)言和樣式表語(yǔ)言,構(gòu)成了其獨(dú)特的開發(fā)體系。去掉了一些瀏覽器兼容性的復(fù)雜性。這種設(shè)計(jì)使得開發(fā)者可以更專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),而不必糾結(jié)于底層細(xì)節(jié)。在數(shù)據(jù)處理方面,微信小程序提供了豐富的API接口,包括但不限于網(wǎng)絡(luò)請(qǐng)求、文件操作、位置信息獲取等,這些接口為小程序的功能拓展提供了可能。同時(shí),微信還提供了一套完整的登錄授權(quán)機(jī)制,開發(fā)者可以通過微信的用戶身份進(jìn)行用戶鑒權(quán),進(jìn)而實(shí)現(xiàn)個(gè)性化服務(wù)。微信小程序的另一個(gè)顯著特點(diǎn)是它的即用性。用戶通過搜索或掃描二維碼即可立即打開小程序,使用完畢后無(wú)需卸載,不占用手機(jī)存儲(chǔ)空間,這種即走即用的特性使得小程序非常適合于快速消費(fèi)場(chǎng)景,如餐飲外賣、電商購(gòu)物等。綜上所述,微信小程序的開發(fā)集成了一系列優(yōu)化用戶體驗(yàn)的設(shè)計(jì)思想,從簡(jiǎn)化的前端標(biāo)記語(yǔ)言到豐富的API接口,再到組件化的界面構(gòu)建方式,都體現(xiàn)了微信在打造一個(gè)高效、便捷、易維護(hù)的應(yīng)用生態(tài)系統(tǒng)方面的努力。對(duì)于基于SpringBoot的微信外賣小程序設(shè)計(jì)與實(shí)現(xiàn)而言,微信小程序提供的這套開發(fā)框架和工具將是構(gòu)建用戶友好界面和實(shí)現(xiàn)后端服務(wù)對(duì)接的堅(jiān)實(shí)基礎(chǔ)。3.3MySQL在構(gòu)建基于SpringBoot的微信外賣小程序時(shí),數(shù)據(jù)庫(kù)技術(shù)扮演著至關(guān)重要的角色。數(shù)據(jù)庫(kù)作為整個(gè)系統(tǒng)的信息存儲(chǔ)與管理中心,其性能直接影響到小程序的響應(yīng)速度和穩(wěn)定性。選擇合適的數(shù)據(jù)庫(kù)技術(shù)對(duì)于提升用戶體驗(yàn)和保障數(shù)據(jù)安全至關(guān)重要。由于MySQL源、軟件體積小,安裝及維護(hù)成本低,且能提供多種API接口等特點(diǎn)。所以在這個(gè)項(xiàng)目中,數(shù)據(jù)庫(kù)采用MySQL。關(guān)系型數(shù)據(jù)庫(kù)依賴于結(jié)構(gòu)化查詢語(yǔ)言(SQL),這是一種廣泛用于管理和操作數(shù)據(jù)庫(kù)的語(yǔ)言。通過SQL,可以執(zhí)行數(shù)據(jù)的增刪改查操作,確保數(shù)據(jù)的一致性和完整性得到維護(hù)。3.4RedisRedis是一個(gè)開源的高性能鍵值數(shù)據(jù)庫(kù),通常被用作數(shù)據(jù)結(jié)構(gòu)服務(wù)器。Redis因其出色的性能、豐富的數(shù)據(jù)類型和原子操作而廣受歡迎,在許多場(chǎng)景下都非常有用,尤其是作為緩存系統(tǒng)來(lái)減少數(shù)據(jù)庫(kù)負(fù)載、提高應(yīng)用響應(yīng)速度。4.微信外賣小程序的系統(tǒng)分析4.1可行性分析本系統(tǒng)可行性分析包括技術(shù)可行性分析、經(jīng)濟(jì)可行性分析、操作可行性分析。技術(shù)可行性分析主要是分析本次使用的技術(shù)能否達(dá)到開發(fā)要求,能否使用這些技術(shù)實(shí)現(xiàn)系統(tǒng)功能。經(jīng)濟(jì)可行性分析主要分析所使用的技術(shù)工具成本大小,成本能否滿足開發(fā)所需。操作可行性分析主要包括分析用戶的操作是否簡(jiǎn)單方便,清晰易懂。4.1.1技術(shù)可行性分析本次使用java語(yǔ)言進(jìn)行開發(fā),java具有跨平臺(tái)的優(yōu)勢(shì)。在各種操作系統(tǒng)上皆可運(yùn)行,因此本次選用java語(yǔ)言開發(fā)便于上手,另外java中提供了豐富的庫(kù),降低了開發(fā)者的開發(fā)難度。本次開發(fā)使用的后端框架是SpringBoot框架,SpringBoot框架能夠快速開發(fā)Web應(yīng)用,能夠更快實(shí)現(xiàn)業(yè)務(wù)邏輯,提高了開發(fā)的效率,降低了開發(fā)難度。數(shù)據(jù)庫(kù)技術(shù)選用的是MYSQL和Redis,MYSQL是一個(gè)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),采用SQL作為查詢語(yǔ)言,并以表格形式進(jìn)行數(shù)據(jù)的存儲(chǔ)。Redis是一種開源的內(nèi)存中數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng)支持多種數(shù)據(jù)結(jié)構(gòu),如字符串、哈希、列表、集合、有序集合等。Redis被用作緩存、消息隊(duì)列、會(huì)話存儲(chǔ)等。從存儲(chǔ)角度來(lái)看,MYSQL和Redis的區(qū)別在于SQL使用磁盤存儲(chǔ)數(shù)據(jù),而Redis主要使用內(nèi)存存儲(chǔ)數(shù)據(jù),但也可以持久化到磁盤。MySQL適用于存儲(chǔ)大量結(jié)構(gòu)化數(shù)據(jù)并支持復(fù)雜的查詢操作,而Redis適用于高速讀寫、緩存、會(huì)話存儲(chǔ)等場(chǎng)景。在這個(gè)系統(tǒng)開發(fā)中我們將MYSQL和Redis相互配合,Redis作為MySQL的緩存層,提高讀取速度,減輕MySQL的負(fù)載。同時(shí)結(jié)合Redis的實(shí)時(shí)特性,能夠?qū)崿F(xiàn)更快速的數(shù)據(jù)處理和響應(yīng),滿足實(shí)時(shí)性要求較高的場(chǎng)景需求。外賣小程序是一個(gè)用戶訪問量大,實(shí)時(shí)性強(qiáng)的產(chǎn)品,因此選擇MYSQL和Redis能夠滿足微信外賣小程序的數(shù)據(jù)存儲(chǔ)需求。4.1.2經(jīng)濟(jì)可行性分析本次開發(fā)使用的硬件成本并不高,只需一臺(tái)計(jì)算機(jī)就可實(shí)現(xiàn)。另外本次使用的開發(fā)工具,MYSQL、Redis以及idea開發(fā)工具均是免費(fèi)開源,因此對(duì)于開發(fā)一個(gè)微信外賣小程序幾乎可以忽略不計(jì)。經(jīng)濟(jì)上是完全可行的。4.1.3操作可行性分析微信小程序無(wú)需下載安裝即可使用,極大簡(jiǎn)化了用戶獲取和使用小程序的步驟。用戶可以清晰明了的完成下單支付,菜品查看,訂單查看和地址管理。在商家端的后臺(tái)管理頁(yè)面,商家可以輕松就完成信息的修改、刪除以及更新,無(wú)需學(xué)習(xí),就可輕易上手。學(xué)習(xí)使用成本呢較低,因此這套系統(tǒng)操作是可行的。4.2系統(tǒng)業(yè)務(wù)流程分析本次外賣系統(tǒng)整個(gè)業(yè)務(wù)流程包括用戶的注冊(cè)登錄(用戶可以注冊(cè)新賬戶或者登錄已有賬戶,這其中包含安全驗(yàn)證機(jī)制)、瀏覽菜品(用戶可以瀏覽不同的菜品并且可以查看推薦的餐品,并且可以對(duì)菜品進(jìn)行收藏)、確認(rèn)訂單(用戶在購(gòu)物車中確認(rèn)所選菜品以及地址進(jìn)行訂餐的確認(rèn))、商家接單(商家后臺(tái)看到用戶訂單請(qǐng)求,接單并更新訂單狀態(tài))、訂單完成(用戶取餐后完成訂單,商家更新訂單狀態(tài))、評(píng)價(jià)服務(wù)(用戶對(duì)所點(diǎn)的菜品進(jìn)行評(píng)價(jià))。管理員端的業(yè)務(wù)流程主要有當(dāng)用戶下單后進(jìn)行訂單的管理以及通過地址管理查看用戶訂單選擇的菜品以及地址是否正確。用戶完成訂單后評(píng)論,管理員可以查看用戶的評(píng)論以及統(tǒng)計(jì)最新的用戶數(shù)量、菜品數(shù)量、金額以及訂單量。以下是本次系統(tǒng)的業(yè)務(wù)流程圖:圖1:系統(tǒng)業(yè)務(wù)流程圖在各個(gè)管理模塊中主要有查詢信息、插入信息、更新信息、刪除信息等操作。在更新的流程中,首先要接受需要過濾的參數(shù),這些參數(shù)針對(duì)各個(gè)模塊中的要求會(huì)不同。接著對(duì)于每個(gè)參數(shù),要檢查是否有效,例如參數(shù)是不是空白字符串或者為空。若參數(shù)不為空并且不是空白字符串,則按照參數(shù)進(jìn)行過濾,反之則不進(jìn)行參數(shù)過濾。過濾工作做完之后,服務(wù)將進(jìn)行查詢,查詢完成后則返回成功信息以及滿足過濾條件的信息。若查詢不成功,則返回錯(cuò)誤信息。查詢的流程圖如下:圖2:查詢流程圖在信息的插入流程中,主要的流程主要可分為以下幾步。首先就是需要接受要插入的信息,之后要對(duì)要插入的信息進(jìn)行過濾。驗(yàn)證需要插入的信息是不是滿足插入的條件。比如插入的信息是不是已經(jīng)存在,插入的信息是否合法。若滿足插入的條件,則將插入的信息存在數(shù)據(jù)庫(kù)中。插入成功后返回插入成功的信息。反之則返回錯(cuò)誤信息。以下是插入操作的流程圖:圖3:插入流程圖在用戶登錄模塊中需要有安全驗(yàn)證,驗(yàn)證用戶的賬號(hào)密碼以及驗(yàn)證碼的信息。保護(hù)用戶的敏感信息,這里將進(jìn)行安全性設(shè)計(jì)。這個(gè)安全性設(shè)計(jì)將在后文提到。在購(gòu)物車的功能上,要確保購(gòu)物車反應(yīng)速度快,可以使用緩存機(jī)制,加快購(gòu)物車的響應(yīng)速度。后文也將提到購(gòu)物車的設(shè)計(jì)方法。在用戶收藏環(huán)節(jié)也將采用緩存機(jī)制,提高用戶收藏這種臨時(shí)、快速行為的響應(yīng)時(shí)間。推薦功能可先從收藏以及評(píng)論數(shù)據(jù)作為數(shù)據(jù)集基礎(chǔ),之后通過算法生成推薦菜品列表。4.3系統(tǒng)功能分析針對(duì)微信外賣小程序開發(fā),功能上可分為用戶端和商家管理員端。用戶端具有用戶注冊(cè)登錄功能,在這個(gè)功能中,用戶可以注冊(cè)一個(gè)賬號(hào)并登錄系統(tǒng),以便于管理個(gè)人信息。菜品瀏覽和搜索功能,用戶可以查看餐廳的菜單,包括菜品名稱、描述、價(jià)格等信息。用戶端的點(diǎn)餐和定制功能中,用戶可以查看購(gòu)物車中所選中的餐品,可以進(jìn)行數(shù)量修改或者刪除菜品。在下單和支付中,用戶可以進(jìn)行地址的選擇和支付。為了滿足查看歷史訂單時(shí)間,還有訂單歷史和查看功能,用戶可以查看過去的訂單記錄,包括訂單詳情和地址信息。在管理員端具有用戶信息管理(包含查詢、刪除、更新等功能)、訂單管理(主要為訂單的查詢以及修改更新)、菜品管理(包含菜品信息以及分類信息)、用戶管理、評(píng)論功能、推薦功能以及統(tǒng)計(jì)功能(統(tǒng)計(jì)用戶數(shù)量、菜品數(shù)量、訂單數(shù)量、金額)。以下是管理員端的用例圖:圖4:商家用例圖以下是用戶用例圖:圖5:用戶用例圖5.外賣小程序的系統(tǒng)設(shè)計(jì)在系統(tǒng)設(shè)計(jì)階段,著重考慮了系統(tǒng)架構(gòu)設(shè)計(jì)、系統(tǒng)功能設(shè)計(jì)與安全性優(yōu)化。在這個(gè)系統(tǒng)中將圍繞SpringBoot中的控制器層、服務(wù)層以及持久化層進(jìn)行架構(gòu)設(shè)計(jì)。在前邊的SpringBoot的相關(guān)技術(shù)介紹中已經(jīng)講訴了本次使用的SpringBoot框架各個(gè)層的配合流程,下面將用一張SpringBoot的架構(gòu)圖,更清晰的展示SpringBoot的系統(tǒng)架構(gòu)。以下是系統(tǒng)架構(gòu)圖:圖6:系統(tǒng)架構(gòu)圖5.1控制器設(shè)計(jì)首先將進(jìn)行控制器層的設(shè)計(jì),這個(gè)負(fù)責(zé)處理用戶請(qǐng)求,在HTTP的請(qǐng)求中,根據(jù)這個(gè)微信外賣小程序本身的特點(diǎn),將把請(qǐng)求分為常用增刪改查等功能。在SpringBoot中HTTP中的請(qǐng)求是用控制器Controller來(lái)處理。請(qǐng)求處理的流程一般是這樣的,首先客戶端發(fā)送HTTP請(qǐng)求至服務(wù)器,SpringBoot中的DispatcherServlet接收到請(qǐng)求后,根據(jù)映射找到對(duì)應(yīng)的控制器方法。控制器方法處理包含在請(qǐng)求中的數(shù)據(jù)并進(jìn)行業(yè)務(wù)處理,最后控制器方法返回響應(yīng)。根據(jù)這個(gè)小程序的功能,將設(shè)計(jì)以下模塊,根據(jù)設(shè)計(jì)的模塊來(lái)進(jìn)行控制器層的設(shè)計(jì)。這個(gè)小程序的功能模塊圖如下:圖7:功能模塊圖因此在控制器層方面將設(shè)計(jì)以下幾個(gè)控制器,分別是驗(yàn)證碼控制器負(fù)責(zé)響應(yīng)客戶端傳來(lái)的驗(yàn)證授權(quán)請(qǐng)求,地址管理控制器負(fù)責(zé)處理用戶對(duì)地址的增加、更新、刪除、查詢請(qǐng)求。評(píng)論控制器負(fù)責(zé)響應(yīng)用戶評(píng)論的增加、更新、刪除、查詢請(qǐng)求。同時(shí)評(píng)論功能也是后面推薦功能的基礎(chǔ)。菜品分類控制器,主要用于添加菜品分類信息、更新菜品分類信息、刪除菜品分類信息、批量刪除菜品分類信息、條件查詢菜品分類信息、分頁(yè)查詢菜品分類信息以及根據(jù)菜品分類ID查詢信息。菜品控制器,主要負(fù)責(zé)響應(yīng)的請(qǐng)求有:添加、更新、刪除、條件查詢、分頁(yè)查詢、批量刪除菜品信息、根據(jù)ID查詢信息和根據(jù)用戶ID查詢菜品信息。訂單控制器主要負(fù)責(zé)的請(qǐng)求有生成訂單、修改訂單訂單狀態(tài)、改變刪除訂單、批量刪除訂單信息、獲取用戶訂單以及分頁(yè)條件查詢訂單。除了上述提到的控制器,還有算法控制器,負(fù)責(zé)算法接口。控制器的分類圖如下:圖8:控制器圖5.2系統(tǒng)功能業(yè)務(wù)邏輯設(shè)計(jì)在系統(tǒng)功能設(shè)計(jì)方面,功能的業(yè)務(wù)邏輯主要是由SpringBoot中的Service層提供的,接下來(lái)將展示Service中的設(shè)計(jì)。在Service層中主要有以下要處理的業(yè)務(wù)邏輯:首先是地址管理的服務(wù)層設(shè)計(jì)。主要要處理的業(yè)務(wù)邏輯有查詢地址,該方法通過ID查詢單個(gè)地址記錄。如果找到,就返回地址對(duì)象。倘若沒找到,就返回空。獲取單個(gè)地址的設(shè)計(jì)思路主要是通過嘗試調(diào)用查詢地址的方法,將結(jié)果包裝在結(jié)果對(duì)象中,這是一個(gè)用于同意響應(yīng)格式的對(duì)象。查詢多個(gè)地址方法是提供一個(gè)更復(fù)雜的查詢,允許通過ID、接收人姓名、電話和用戶ID進(jìn)行過濾;插入地址,該方法用于添加新的地址記錄。他首先檢查必要的字段是否存在,然后更新記錄并保存到數(shù)據(jù)庫(kù)中;刪除地址,該方法通過將地址狀態(tài)設(shè)置為0的邏輯刪除地址,并不是從數(shù)據(jù)庫(kù)中完全刪除記錄。分頁(yè)查詢地址方法提供了分頁(yè)功能,允許用戶根據(jù)給定的頁(yè)碼和每頁(yè)記錄數(shù)來(lái)查詢地址。批量刪除地址方法則是允許批量刪除地址,通過遍歷ID列表并逐個(gè)更新狀態(tài)。這是地址管理的業(yè)務(wù)邏輯分類圖:圖9:地址業(yè)務(wù)圖在購(gòu)物車項(xiàng)目業(yè)務(wù)邏輯設(shè)計(jì)的思路主要分為:添加商品到購(gòu)物車(Insert方法)、獲取用戶購(gòu)物車的商品(GetCartItems方法)、獲取所有用戶的購(gòu)物車商品(GetAllUsersCartItems方法)、從購(gòu)物車中移除商品(RemoveFromCart方法)。首先是添加商品到購(gòu)物車方法設(shè)計(jì),設(shè)計(jì)思路主要是當(dāng)用戶想要將某個(gè)菜品添加至購(gòu)物車中,就調(diào)用插入方法,將數(shù)據(jù)插入進(jìn)入。實(shí)現(xiàn)添加的效果。這個(gè)方法首先會(huì)通過使用菜品信息服務(wù)中的獲取產(chǎn)品價(jià)格的方法來(lái)得到產(chǎn)品的價(jià)格。將信息插入以及獲得價(jià)格之后,創(chuàng)建一個(gè)購(gòu)物車中的對(duì)象,這個(gè)對(duì)象包含了產(chǎn)品ID、數(shù)量以及價(jià)格的屬性。然后使用Redis中的hset方法,這個(gè)方法的作用是用于將哈希表中的字段賦值。應(yīng)用到我們的設(shè)計(jì)中就是用于將購(gòu)物車項(xiàng)中的產(chǎn)品對(duì)象,存儲(chǔ)至Redis中,這樣,每個(gè)用戶的購(gòu)物車都被存儲(chǔ)在一個(gè)以其用戶ID標(biāo)識(shí)的哈希表中,而每個(gè)產(chǎn)品的購(gòu)物車就是作為哈希表中的一個(gè)字段。存入緩存的操作成功后就返回結(jié)果對(duì)象。假如出現(xiàn)異常情況,返回失敗操作的結(jié)果對(duì)象。獲取購(gòu)物車的商品方法的設(shè)計(jì)思路在于使用Redis中的hmget方法,以"cart:"+userId作為鍵從Redis中獲取購(gòu)物車項(xiàng)。遍歷返回的購(gòu)物車項(xiàng),并將它們存到一個(gè)HashMap中。返回一個(gè)包含這些項(xiàng)的成功的ResultVo對(duì)象。如果獲取過程中發(fā)生異常,返回一個(gè)表示失敗的ResultVo對(duì)象。獲取所有用戶的購(gòu)物車商品方法的設(shè)計(jì)思路主要是使用redisUtil.keys方法找到所有以"cart:"作為前綴的鍵。對(duì)于每個(gè)找到的鍵,提取用戶ID,使用redis中的keys方法獲取相應(yīng)的購(gòu)物車項(xiàng)。將每個(gè)用戶的購(gòu)物車項(xiàng)存入一個(gè)大的Map中,用戶ID作為鍵。返回一個(gè)包含所有購(gòu)物車項(xiàng)的成功的結(jié)果對(duì)象。如果獲取過程中發(fā)生異常,返回一個(gè)表示失敗的結(jié)果對(duì)象。從購(gòu)物車中移除商品方法設(shè)計(jì)為使用redis的hdel方法(Redis中的刪除命令),以cart+userid作為主鍵,productId作為字段來(lái)從Redis的哈希表中刪除購(gòu)物車項(xiàng)。以上訴方法相同,刪除操作成功就返回成功結(jié)果對(duì)象,否則就返回失敗結(jié)果對(duì)象。購(gòu)物車中這幾個(gè)方法主要應(yīng)用了Redis作為緩存機(jī)制提供了購(gòu)物車服務(wù)中的基本操作,包括添加商品到購(gòu)物車、查看一個(gè)或所有用戶的購(gòu)物車內(nèi)容以及從購(gòu)物車中移除商品。每個(gè)操作都有異常處理,保證了服務(wù)的健壯性。返回結(jié)果使用ResultVo對(duì)象,提供了一致的接口響應(yīng)結(jié)構(gòu)。購(gòu)物車方法的分類圖如下:圖10:購(gòu)物車業(yè)務(wù)圖對(duì)于評(píng)論功能的業(yè)務(wù)設(shè)計(jì)主要分為:獲取評(píng)論、查詢?cè)u(píng)論、插入評(píng)論、檢查用戶是否對(duì)一個(gè)訂單進(jìn)行過評(píng)論、更新評(píng)論、添加評(píng)論、刪除評(píng)論、統(tǒng)計(jì)評(píng)論、推薦菜品等功能。其中推薦菜品用到了協(xié)同推薦算法。協(xié)同推薦算法主要是通過分析大量用戶的歷史行為數(shù)據(jù),如購(gòu)買歷史、評(píng)分記錄或在線行為等,來(lái)預(yù)測(cè)特定用戶可能感興趣的項(xiàng)目或內(nèi)容。協(xié)同過濾算法基于這樣一個(gè)假設(shè):如果用戶A在過去喜歡過的項(xiàng)目和用戶B喜歡的項(xiàng)目相似,那么用戶A也有可能對(duì)用戶B喜歡的其他項(xiàng)目感興趣。本次的外賣推薦算法主要是通過用戶對(duì)菜品的評(píng)分進(jìn)行推薦,系統(tǒng)會(huì)優(yōu)先將評(píng)分高的菜品推薦給用戶。首先來(lái)闡述獲取用戶評(píng)論的業(yè)務(wù)方法設(shè)計(jì),它的設(shè)計(jì)思路在于通過唯一的標(biāo)識(shí)符,這是將用戶ID設(shè)為唯一標(biāo)識(shí)符,因?yàn)橛脩舻钠渌侄慰赡芟嗤?。?dāng)這個(gè)方法接受到唯一的標(biāo)識(shí)符后,調(diào)用查找方法,找到這個(gè)id對(duì)應(yīng)的評(píng)論。若是處理成功,則與上文講訴到的地址管理模塊中的處理結(jié)果類似,返回成功結(jié)果對(duì)象,反之則返回失敗結(jié)果對(duì)象。接下來(lái)的方法設(shè)計(jì)將著重描述重要處理步驟,結(jié)果處理方式與之前類似,便不在闡述。接下來(lái)是添加一個(gè)用戶評(píng)論的方法業(yè)務(wù)設(shè)計(jì),這點(diǎn)上與插入相似。主要思路為:先檢查用戶傳來(lái)的評(píng)論參數(shù)是否合法,若是合法,就查找這個(gè)評(píng)論對(duì)應(yīng)的訂單。檢查這個(gè)訂單是否存在,這里可以使用訂單的唯一標(biāo)識(shí)符ID進(jìn)行查找。查找成功則進(jìn)行下一步操作即設(shè)置評(píng)論的信息,這里的信息包括評(píng)論內(nèi)容、評(píng)論的用戶ID、訂單號(hào)ID以及對(duì)應(yīng)的菜品。這樣其他用戶能夠更好的分辨評(píng)論質(zhì)量,做出合理的判斷。前面檢查用戶是否進(jìn)行過評(píng)論可以采用查找用戶ID、菜品ID、以及訂單ID進(jìn)行辨別。如此一來(lái),保證了數(shù)據(jù)一樣,避免系統(tǒng)資源的冗余。統(tǒng)計(jì)評(píng)論的方法步驟的設(shè)計(jì)通常需要獲取數(shù)據(jù),在這個(gè)功能中可選取一個(gè)唯一標(biāo)識(shí),比如說ID以及相關(guān)聯(lián)的用戶ID、評(píng)論內(nèi)容以及評(píng)論時(shí)間。這樣一來(lái)可以確保評(píng)論不會(huì)出現(xiàn)重復(fù)冗余,確保數(shù)據(jù)的合理性。獲取數(shù)據(jù)之后,進(jìn)行檢索,計(jì)算評(píng)論的總數(shù)。在這個(gè)系統(tǒng)中,為了使得推薦算法更加合理,將在評(píng)論統(tǒng)計(jì)這個(gè)功能中使用過濾方法,為后面的推薦算法提供合理的數(shù)據(jù)。在這個(gè)過濾方法中邏輯主要是篩選評(píng)分為5的評(píng)論,并計(jì)算評(píng)論為5的評(píng)論數(shù)。過濾完畢之后,計(jì)算所有的有效評(píng)論數(shù)以及評(píng)論總數(shù)存儲(chǔ)在映射中。在推薦菜品功能中需要用的數(shù)據(jù)有用戶評(píng)分?jǐn)?shù)為5的數(shù)量以及用戶的收藏?cái)?shù)據(jù)。在統(tǒng)計(jì)評(píng)論功能的業(yè)務(wù)設(shè)計(jì)中講到,將評(píng)分為5的評(píng)論存入映射當(dāng)中,在算法推薦中需要用到這部分?jǐn)?shù)據(jù),并且還將獲取用戶的收藏?cái)?shù)據(jù)。將這些數(shù)據(jù)添加到推薦系統(tǒng)當(dāng)中。最后根據(jù)用戶ID獲取推薦列表。以下是評(píng)論模塊中的功能圖:圖11:評(píng)論模塊圖菜品的模塊設(shè)計(jì)中主要的業(yè)務(wù)邏輯有菜品的查詢、菜品的添加、菜品的刪除、菜品的統(tǒng)計(jì)、庫(kù)存情況更新等功能。菜品信息中包含了菜品的ID、菜品的價(jià)格等信息。菜品模塊主要是提供主要方法為其他模塊服務(wù),例如訂單模塊中獲取菜品的庫(kù)存情況,就調(diào)用菜品模塊中的查詢方法。當(dāng)訂單完成之后,就會(huì)調(diào)用菜品模塊中的刪除以及更新功能,進(jìn)行庫(kù)存的更新。在購(gòu)物車模塊中,調(diào)用菜品模塊中的方法進(jìn)行增刪改查??偟膩?lái)說菜品模塊主要是為其他模塊進(jìn)行服務(wù)。在訂單模塊的設(shè)計(jì)中,除了常規(guī)的訂單數(shù)據(jù)的增刪改查以外,重要要保證數(shù)據(jù)的一致性。拿創(chuàng)建訂單這個(gè)實(shí)例來(lái)說明即是在一個(gè)訂單中首先最重要的就是檢查庫(kù)存的情況,如果不檢查庫(kù)存,用戶可能一直下單,可能造成后臺(tái)數(shù)據(jù)的溢出錯(cuò)誤。因此可以調(diào)用用戶訂單中的查詢方法,通過查詢獲取用戶想要的菜品。這里查詢接受的參數(shù)是菜品的ID,因?yàn)檫@個(gè)菜品ID是唯一標(biāo)識(shí)。這樣可以保證查詢結(jié)果正確。如果接收菜品的名稱,可能會(huì)存在連兩個(gè)名字相同的菜品。查詢的目的只要是為了確保菜品的數(shù)量是否小于用戶所需要的購(gòu)買數(shù)量,倘若不足以滿足用戶的數(shù)量要求,要及時(shí)返回結(jié)果。接下來(lái),在庫(kù)存數(shù)量滿足用戶需求的情況下,將創(chuàng)建一個(gè)新的訂單,生成一個(gè)具有創(chuàng)建時(shí)間、用戶ID、地址、評(píng)論狀態(tài)的訂單信息。創(chuàng)建完訂單之后,要對(duì)用戶的訂單進(jìn)行賬目計(jì)算,這里調(diào)用菜品服務(wù)中的查詢方法,獲取到菜品的價(jià)格以及數(shù)量。根據(jù)總價(jià)等于數(shù)量與其價(jià)格的乘積,計(jì)算出用戶的賬目。最后保存訂單,存入數(shù)據(jù)至數(shù)據(jù)庫(kù)中。當(dāng)用戶點(diǎn)完餐后,將進(jìn)行地址距離計(jì)算,計(jì)算用戶收到餐品所需時(shí)間,這里調(diào)用百度地圖的地址方法來(lái)進(jìn)行計(jì)算。如果用戶超出地址顯示無(wú)法配送,反之顯示配送時(shí)間。做完這些步驟后,更新庫(kù)存。用戶的注冊(cè)登錄的后臺(tái)業(yè)務(wù)主要有獲取當(dāng)前用戶信息、添加用戶信息、更新用戶信息、刪除用戶信息、條件查詢信息、條件查詢信息、根據(jù)用戶ID查詢信息、用戶注冊(cè)、重置密碼、批量刪除用戶信息等功能。增刪改查與前面模塊的設(shè)計(jì)思路相似,不同點(diǎn)在于在用戶信息的更新操作中會(huì)使用Springsecurity里面自帶的加密方法BCryptPasswordEncoder,進(jìn)行數(shù)據(jù)庫(kù)中用戶信息密碼的加密。以下是它的功能模塊圖:圖12:用戶登錄圖5.3系統(tǒng)安全性設(shè)計(jì)在設(shè)計(jì)系統(tǒng)的安全性方面,將使用JWT(JSONWebToken),以及使用自定義的攔截器CaptchaFilter,保證用戶信息的安全傳輸。JWT主要負(fù)責(zé)驗(yàn)證正確的用戶身份,自定義攔截器核心作用在于確保只有在輸入了正確的驗(yàn)證碼后用戶才能繼續(xù)進(jìn)行登錄操作。如果驗(yàn)證碼錯(cuò)誤,就會(huì)立即中斷登錄流程,并給用戶一個(gè)錯(cuò)誤提示。JWT一般是由頭部、載荷、簽名構(gòu)成。在JWT的功能模塊設(shè)計(jì)中,得先取得用戶前端請(qǐng)求頭中的JWT令牌。接著就是查看令牌是否存在,有效的話就進(jìn)行下一步操作,那就是驗(yàn)證令牌是不是有效的。驗(yàn)證是否有效這一步要確保JWT是不是由服務(wù)器進(jìn)行發(fā)送,并且簽名是在有效期內(nèi)才可以。如果是無(wú)效或者過期,就拋出異常。拒絕請(qǐng)求。若是有效,將進(jìn)行用戶認(rèn)證步驟。前面已經(jīng)介紹了用戶模塊的業(yè)務(wù)邏輯功能設(shè)計(jì),在用戶模塊功能設(shè)計(jì)中有存放用戶信息的方法。調(diào)用用戶信息,看用戶名與用戶信息是否匹配。匹配成功后,就創(chuàng)建一個(gè)令牌,這個(gè)令牌里面含有用戶名以及簽證還有用戶的授權(quán)信息。這里用戶的授權(quán)信息也是通過調(diào)用用戶模塊中的獲取用戶信息的方法取得的。做完這些之后,將認(rèn)證信息放入到安全上下文中。這樣其他應(yīng)用就知道這個(gè)JWT已經(jīng)是被安全驗(yàn)證了。驗(yàn)證用戶的賬號(hào)密碼之后,就進(jìn)行驗(yàn)證碼的驗(yàn)證。這一步主要是為了防止機(jī)器人登錄。驗(yàn)證碼部分由自定義攔截器負(fù)責(zé)。在自定義攔截器中先檢查請(qǐng)求的URL是否是登錄界面的URL以及方法是否匹配登錄請(qǐng)求,匹配就驗(yàn)證請(qǐng)求中的驗(yàn)證碼。驗(yàn)證驗(yàn)證碼這一步中會(huì)從請(qǐng)求中獲取名為code的參數(shù)值,這個(gè)參數(shù)就是用戶提交的驗(yàn)證碼,當(dāng)然還要得到token這個(gè)唯一標(biāo)識(shí)符的參數(shù)值,這個(gè)token是用來(lái)將提交的驗(yàn)證碼與服務(wù)器存儲(chǔ)的驗(yàn)證碼進(jìn)行匹配的。獲得參數(shù)之后檢查參數(shù)是不是空,這里code和key都要進(jìn)行檢查,查看這兩個(gè)參數(shù)是不是為空或者空字符串。這里的key是與code相關(guān)聯(lián)的唯一標(biāo)識(shí)符。當(dāng)請(qǐng)求參數(shù)檢查符合驗(yàn)證條件之后,就進(jìn)行驗(yàn)證碼匹配。在這一步中,將從Redis哈希表獲取key相對(duì)應(yīng)的code驗(yàn)證碼。獲取code驗(yàn)證碼可以使用Redis中的hget命令,這個(gè)命令可以獲取存儲(chǔ)在哈希數(shù)據(jù)結(jié)構(gòu)中的元素值。匹配成功之后就是用hedel命令從緩存中刪除驗(yàn)證碼相對(duì)應(yīng)key,因?yàn)橐WC驗(yàn)證碼只出現(xiàn)一次。保證數(shù)據(jù)傳輸?shù)陌踩?。以下自定義攔截器的流程圖:圖13:攔截器圖5.4系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)在本次系統(tǒng)開發(fā)中進(jìn)行外賣系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)。數(shù)據(jù)庫(kù)負(fù)責(zé)存放各個(gè)模塊的數(shù)據(jù)。數(shù)據(jù)庫(kù)設(shè)計(jì)包括兩部分,一部分是數(shù)據(jù)庫(kù)中的表。另一部分是數(shù)據(jù)在數(shù)據(jù)庫(kù)設(shè)計(jì)先要進(jìn)行邏輯設(shè)計(jì),數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)設(shè)計(jì)是將E-R圖轉(zhuǎn)換成數(shù)據(jù)模型。在設(shè)計(jì)數(shù)據(jù)庫(kù)表之前先引入數(shù)據(jù)庫(kù)表的常用概念。第一是主鍵,主鍵是數(shù)據(jù)庫(kù)表中的唯一標(biāo)識(shí)符。然后是屬性,他是指與實(shí)體相關(guān)的數(shù)據(jù)項(xiàng),比如用戶的id、菜品的id。實(shí)體指的是明確區(qū)分的任何數(shù)據(jù)對(duì)象,如用戶、訂單、菜品。通常對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一張表。外鍵是一個(gè)字段,它鏈接到另一個(gè)表的主鍵。例如在訂單表中通過菜品數(shù)量與菜品信息表連接。這個(gè)菜品數(shù)量就是一個(gè)外鍵。關(guān)系指的是定義兩個(gè)實(shí)體間的聯(lián)系,比如一對(duì)一、多對(duì)多、一對(duì)多。在本次系統(tǒng)開發(fā)中,設(shè)計(jì)了地址表、評(píng)論表、菜品表、菜品分類表、用戶信息表以及用戶收藏表。通過分析整個(gè)系統(tǒng)的結(jié)構(gòu)。得出各個(gè)實(shí)體間邏輯關(guān)系。以下是數(shù)據(jù)庫(kù)的ER圖:圖14:系統(tǒng)E-R圖在用戶信息表中,主鍵是用戶ID其他屬性為用戶名、用戶的密碼以及性別;在地址表中主鍵為地址ID,外鍵為用戶ID,用戶ID關(guān)聯(lián)到用戶信息表。其他屬性包括地址、聯(lián)系電話、創(chuàng)建時(shí)間、收貨人姓名;在訂單表中,主鍵為訂單ID、外鍵為用戶ID關(guān)聯(lián)到用戶信息表、地址ID關(guān)聯(lián)到地址表。其他屬性包括總價(jià)、評(píng)論狀態(tài)、訂單狀態(tài)、菜品名稱、創(chuàng)建時(shí)間以及更新時(shí)間;在菜品信息表中,主鍵為菜品ID。其他屬性為菜品名稱、菜品描述、價(jià)格、庫(kù)存;評(píng)論表中,主鍵為評(píng)論ID。外鍵為用戶ID關(guān)聯(lián)到用戶信息表、菜品ID、訂單ID關(guān)聯(lián)到訂單表。其他屬性為評(píng)論內(nèi)容、評(píng)論時(shí)間、評(píng)論分值;在菜品分類表中,主鍵為分類ID、分類名稱。其他屬性為創(chuàng)建分類時(shí)間、分類描述以及更新時(shí)間;在用戶收藏表中,主鍵為收藏ID,外鍵為用戶id關(guān)聯(lián)到用戶信息表、菜品ID負(fù)責(zé)關(guān)聯(lián)到菜品信息表。其他屬性為收藏時(shí)間;推薦表中,主鍵為推薦id、其他屬性為菜品id和評(píng)分值以及用戶id以下是各個(gè)表的庫(kù)表結(jié)構(gòu)。以下是用戶信息表:表1:用戶信息表名稱數(shù)據(jù)類型長(zhǎng)度是否可為null是否為主鍵備注user_idint11否是用戶idusernamevarchar255否否用戶名passwordvarchar255否否用戶密碼sexchar1否否用戶性別以下是地址表:表2:地址信息表名稱數(shù)據(jù)類型長(zhǎng)度是否可為null是否為主鍵備注address_idint11否是地址iduser_idvarchar255否否用戶idphonevarchar255否否取餐號(hào)碼created_timechar1否否創(chuàng)建時(shí)間receiver_namevarchar255否否收件人姓名localizationVarchar255否否地址以下是訂單表:表3:訂單信息表名稱數(shù)據(jù)類型長(zhǎng)度是否可為null是否為主鍵備注order_IDint11否是訂單iduser_idvarchar255否否用戶iddish_namevarchar255否否菜品名稱created_timedatetime6否否創(chuàng)建時(shí)間update_timedatetime6是否更新時(shí)間address_idvarchar255否否地址iddish_idint11否否菜品idtotal_pricedecimal19否否總價(jià)statusint11否否訂單狀態(tài)comment_statusint11否否評(píng)論狀態(tài)以下是菜品信息表:表4:菜品信息表名稱數(shù)據(jù)類型長(zhǎng)度是否可為null是否為主鍵備注dish_idint11否是菜品iddish_namevarchar255否否菜品名descriptionvarchar255否否菜品描述pricedecimal19否否菜品價(jià)格stockint11否否菜品庫(kù)存以下是評(píng)論表:表5:評(píng)論表名稱數(shù)據(jù)類型長(zhǎng)度是否可為null是否為主鍵備注comment_idint11否是評(píng)論idcontentvarchar255否否評(píng)論內(nèi)容updated_timedatetime6是否更新時(shí)間user_idint11否否用戶iddish_idint11否否菜品idorder_idint11否否訂單idrateint11否否評(píng)分值以下是菜品分類表:表6:菜品分類表名稱數(shù)據(jù)類型長(zhǎng)度是否可為null是否為主鍵備注category_idint11否是分類idcategory_namevarchar255否否分類名category_descriptionvarchar255否否分類描述created_timedatetime6否否創(chuàng)建時(shí)間updated_timedatetime6是否更新時(shí)間以下是用戶收藏表:表7:用戶收藏表名稱數(shù)據(jù)類型長(zhǎng)度是否可為空是否為主鍵備注favourite_idint11否是收藏idcreated_timedatetime6否否收藏時(shí)間dish_idint11否否菜品iduser_idint11否否用戶id以下是推薦表:表8:推薦表名稱數(shù)據(jù)類型長(zhǎng)度是否可為空是否為主鍵備注recommend_idint11否是推薦iddish_idint11否否菜品iduser_idint11否否用戶idrateint11否否評(píng)分值數(shù)據(jù)庫(kù)的交互設(shè)計(jì)上,借助SpringBoot框架提供的JPA(JavaPersistenceAPI),可以實(shí)現(xiàn)對(duì)象關(guān)系映射(ORM),從而簡(jiǎn)化數(shù)據(jù)庫(kù)操作代碼,提高開發(fā)效率。6.系統(tǒng)實(shí)現(xiàn)根據(jù)前面的業(yè)務(wù)功能設(shè)計(jì)以及數(shù)據(jù)庫(kù)設(shè)計(jì),通過編寫代碼實(shí)現(xiàn)常用功能。下面將展示實(shí)現(xiàn)實(shí)現(xiàn)后的效果。圖15:系統(tǒng)前臺(tái)圖(需要用戶輸入賬號(hào)密碼以及驗(yàn)證碼進(jìn)行安全驗(yàn)證)圖16:系統(tǒng)前臺(tái)菜品圖上圖展示為前臺(tái)菜品信息圖,用戶可以查看菜品的價(jià)格及其信息。圖17:系統(tǒng)前臺(tái)菜品詳情圖上圖展示為菜品的詳情。包括其他用戶的評(píng)論,以及可以在此頁(yè)面進(jìn)行下單收藏。圖18:訂單圖上圖為訂單圖,用戶下單后可以看到訂單信息。圖19:訂單狀態(tài)圖上圖為訂單狀態(tài)圖,下單后可以查看訂單狀態(tài)。圖20:美食推薦圖上圖為推薦功能圖,可以從中看到推薦的菜品。圖21:訂單管理圖上圖為管理員訂單管理圖,可以進(jìn)行訂單的修改以及狀態(tài)更新。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論