校園外賣微信小程序設(shè)計與實現(xiàn)_第1頁
校園外賣微信小程序設(shè)計與實現(xiàn)_第2頁
校園外賣微信小程序設(shè)計與實現(xiàn)_第3頁
校園外賣微信小程序設(shè)計與實現(xiàn)_第4頁
校園外賣微信小程序設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

II緒論研究的背景與意義當今外賣市場呈現(xiàn)出蓬勃發(fā)展的趨勢,其規(guī)模不斷擴大并呈現(xiàn)出持續(xù)增長的態(tài)勢。隨著社會生活節(jié)奏加快、消費習慣變遷以及互聯(lián)網(wǎng)技術(shù)的廣泛應(yīng)用,外賣服務(wù)已經(jīng)成為許多人日常生活中的重要選擇。首先,據(jù)統(tǒng)計數(shù)據(jù)顯示,外賣市場在過去幾年內(nèi)呈現(xiàn)出快速增長的態(tài)勢,成為餐飲行業(yè)的一支重要力量REF_Ref16864\r\h[2]。其次,外賣行業(yè)的增長態(tài)勢持續(xù)向好。隨著外賣平臺的普及和消費者對外賣服務(wù)的認可度提高,外賣行業(yè)的增長態(tài)勢持續(xù)向好。各類外賣平臺的訂單量大幅增長,外賣行業(yè)整體呈現(xiàn)出良好的發(fā)展勢頭。最后,消費者對外賣服務(wù)需求的變化REF_Ref17007\r\h[3]。隨著生活方式的改變和消費觀念的更新,消費者對外賣服務(wù)的需求也在發(fā)生變化。他們更加注重便捷、個性化的用餐體驗,對于外賣的品質(zhì)、配送速度、服務(wù)體驗等方面提出了更高的要求。校園外賣微信小程序的課題意義主要體現(xiàn)在以下幾個方面:1,滿足學生需求:校園外賣微信小程序可以提供便捷、快速的訂餐服務(wù),滿足了學生對于方便、多樣化餐飲選擇的需求,提升了他們的生活質(zhì)量和學習效率。2,推動餐飲行業(yè)發(fā)展:校園外賣微信小程序為校園周邊的餐飲行業(yè)提供了新的銷售渠道,增加了餐飲行業(yè)的收入,促進了行業(yè)的發(fā)展和升級。3,提升校園服務(wù)水平:通過校園外賣微信小程序,學生可以更方便地享受到優(yōu)質(zhì)的餐飲服務(wù),提升了校園的服務(wù)水平和形象,有利于吸引更多學生和家長選擇該校就讀。研究現(xiàn)狀校園外賣微信小程序的研發(fā)已受到廣泛關(guān)注。研發(fā)人員著重關(guān)注以下幾個方面:1,用戶體驗優(yōu)化:研究者們致力于改善校園外賣微信小程序的用戶體驗,包括界面設(shè)計、交互設(shè)計、響應(yīng)速度、個性化推薦等方面。他們通過用戶調(diào)研和數(shù)據(jù)分析,不斷改進小程序的功能和性能,提高用戶滿意度。2,數(shù)據(jù)挖掘和智能推薦:研究者們利用大數(shù)據(jù)技術(shù)對用戶行為和愛好進行挖掘發(fā)現(xiàn),通過機器學習算法和推薦系統(tǒng),為用戶提供別樣的餐飲推薦服務(wù)REF_Ref30396\r\h[4]。他們嘗試將多源數(shù)據(jù)整合,提高推薦準確度和效果。3,支付安全和隱私保護:隨著移動支付的普及,研究者們關(guān)注校園外賣微信小程序中支付安全和用戶隱私保護的問題。他們探索安全支付技術(shù)、加密算法、身份認證等方法,確保用戶的支付信息和個人隱私得到有效保護。本文研究內(nèi)容本文旨在探討校園外賣微信小程序的設(shè)計與實現(xiàn),主要滿足在校學生和教師兩種類別用戶的所需。本項目將采用MySQL數(shù)據(jù)庫來進行保存數(shù)據(jù),結(jié)合MyBatis框架實現(xiàn)與后臺數(shù)據(jù)庫的連接。后端主要基于SpringBoot和SpringMVC來進行搭建,前端界面將融合靜態(tài)頁面和Vue的Element-ui組件,通過Ajax技術(shù)來進行與后端的交互。整體架構(gòu)遵循B/S模式,旨在滿足用戶需求并提升系統(tǒng)的穩(wěn)定性REF_Ref17007\r\h[3]。本文的組織結(jié)構(gòu)本文的組織結(jié)構(gòu)如下:第1章:本章主要圍繞校園外賣微信小程序展開,包括其背景、現(xiàn)狀、意義以及研究內(nèi)容的介紹和論述。第2章:此章詳細介紹了開發(fā)本小程序所采用的關(guān)鍵技術(shù)和框架第3章:描述校園外賣微信小程序的各個需求 。第4章:簡要此系統(tǒng)的系統(tǒng)設(shè)計、數(shù)據(jù)庫模型設(shè)計、數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計以及系統(tǒng)業(yè)務(wù)流程設(shè)計。第5章:簡單的介紹了功能與實現(xiàn)的步驟第6章:這章對系統(tǒng)測試進行詳解。最后:對存在的不足進行總結(jié),并提出改進建議,以完善和優(yōu)化校園外賣微信小程序系統(tǒng)的性能和功能。技術(shù)背景Java簡介Java是一種廣泛使用的高級編程語言和計算平臺。它由SunMicrosystems(后被Oracle收購)于20世紀90年代初開發(fā),并于1995年正式發(fā)布REF_Ref19845\r\h[5]。作為一種面向?qū)ο蟮木幊陶Z言,吸收了其他語言好的特性,簡化了語法,使得程序員更容易理解和使用。java具有跨平臺的特性,即“一次編寫,到處運行”,使得Java應(yīng)用能夠在各種不同的操作系統(tǒng)上運行。MYSQL數(shù)據(jù)庫MySQL作為一款廣泛應(yīng)用于Web應(yīng)用程序后端數(shù)據(jù)存儲的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),不僅支持多種操作系統(tǒng),而且具備卓越的性能、可靠性和靈活性。采用標準SQL語言進行數(shù)據(jù)管理,MySQL提供了強大的數(shù)據(jù)處理能力和豐富的功能,如觸發(fā)器、存儲過程和視圖等REF_Ref22696\r\h[6]。其卓越的擴展性能夠輕松處理龐大數(shù)據(jù)庫并支持高并發(fā)訪問。綜上所述,MySQL以功能強大、性能卓越且易用性為特點,適用于各種規(guī)模的應(yīng)用場景。SpringBoot介紹SpringBoot是一個基于Spring框架的開源項目,旨在簡化基于Spring的應(yīng)用程序的開發(fā)。它能夠快速的構(gòu)建基于Spring的應(yīng)用,并且具有開箱即用的特點REF_Ref22840\r\h[7],避免了繁瑣的配置,讓開發(fā)者能夠更專注于業(yè)務(wù)邏輯的實現(xiàn)。這種特性使得開發(fā)過程更加高效,同時提升了代碼的可維護性和可擴展性。SpringBoot能夠自動配置大部分常用的功能,如數(shù)據(jù)源、Web服務(wù)、安全性等,同時提供了諸如Actuator、DevTools等開發(fā)工具,幫助開發(fā)者更高效地進行開發(fā)和調(diào)試。Vue框架介紹Vue.js是一款流行的前端JavaScript框架,專用于的Web界面進行交互。采用了MVVM(Model-View-ViewModel)模式,有助于將視圖、數(shù)據(jù)和業(yè)務(wù)邏輯進行有效分離,使得代碼結(jié)構(gòu)更加清晰、易于維護REF_Ref22928\r\h[8]。這種架構(gòu)設(shè)計不僅提高了開發(fā)效率,還使得前端界面的開發(fā)更具有靈活性和可擴展性,為構(gòu)建現(xiàn)代化的Web應(yīng)用提供了便利。系統(tǒng)需求分析功能需求分析基于外賣配送平臺系統(tǒng)共有顧客,員工,管理員3個角色,用戶與管理員功能相似,只有權(quán)限不同,管理員端一共可以分為五大模塊,分別為員工管理,分類管理,菜品管理,套餐管理,訂單管理。而用戶共可以分為六大大模塊,分別為登入管理,查看菜系,菜品選擇,套餐管理,購物車下單,設(shè)置地址管理,其用例圖如圖3-1所示。圖3-SEQ圖\*ARABIC\r1\s11管理員與用戶功能用例圖管理員主要模塊的功能分別如下:用戶管理:只有管理員才能進行操作,里面包括對員工的增刪改查。當添加用戶完成時可以選擇保存或者保存并繼續(xù)添加,當對某一員工修改信息時會回顯數(shù)據(jù)庫保存信息,并且可以對普通員工進行狀態(tài)修改,可以選擇是否禁用啟用此用戶,用例圖如下圖3-2所示。圖3-SEQ圖\*ARABIC\s12用戶管理用例圖分類管理:在分類管理中,我們有兩大分類,其一為菜品分類,二為套餐分類,而分類管理中的排序功能,為分類的種類進行排序,設(shè)置排序為升序排序,1最大,越是近1,則在移動端用戶頁面顯示的時候,自動的分類就會越在上面。而1則為默認顯示的首頁,若多個分類為1,則以最后更新時間為準;在修改時會訪問數(shù)據(jù)庫,拿到保存的數(shù)據(jù)回顯到頁面上,用例圖如下圖3-3所示。圖3-SEQ圖\*ARABIC\s13分類管理用例圖菜品管理:菜品管理有著傳統(tǒng)的CRUD,但是有所不同的是,在新增時會根據(jù)菜品分類進行在本分類下進行添加,分類不同菜品不同,同時在菜品中可以通過對此菜品的文件上傳下載在本地,同時在頁面中還有在移動端用戶處顯示;同時在進行菜品的新增修改時可以選擇個性化口味;而批量刪除則可以通過對菜品進行多選進行刪除,而進行刪除的菜品需要首先將菜品進行停售,起售停售菜品就是改變菜品當前狀態(tài),用例圖如下圖3-4所示。圖3-SEQ圖\*ARABIC\s14菜品管理用例圖套餐管理:套餐管理與菜品管理相似,只是多了一個嵌套關(guān)系,就是套餐包含不止一個菜品。在新增套餐中首先需要已有的套餐分類進行選擇,之后在新增菜品時,可以通過已有菜品分類進行模糊查詢搜索并可以批量添加;而進行刪除的菜品需要首先將菜品進行停售。在修改套餐中可以自主對套餐中的菜品進行刪除,用例圖如下圖3-5所示。圖3-SEQ圖\*ARABIC\s15套餐管理用例圖地址簿管理:開發(fā)移動端時,當用戶購入菜品后下單要填寫收貨地址,添加收貨地址并且可以給此地址打上一個標簽,表示其屬性,并且可以設(shè)置地址是否為默認地址,如果地址為默認地址則,此賬戶下一次下單后直接以此地址作為收貨地址,同時可以去個人主頁的地址管理可以查詢指定用戶的所有地址并可以對地址的CRUD,用例圖如下圖3-6所示。圖3-SEQ圖\*ARABIC\s16地址簿管理用例圖購物車管理:當用戶想要選擇菜品或者是套餐時,就可以點擊“+”進行添加,想要什么就添加什么,也可以點擊購物車一欄查看購物車的選擇,不想要的點擊“—”,也可以直接選擇清空購物車,用例圖如下圖3-7所示。圖3-7外賣配送平臺系統(tǒng)后端功能圖非功能需求分析性能需求外賣配送平臺的管理員端前端頁面設(shè)計簡潔,具有較高的安全性和流暢性,適用于多種操作系統(tǒng)。開發(fā)采用Java語言,數(shù)據(jù)庫工具能夠高效存儲大量數(shù)據(jù)并確保數(shù)據(jù)安全性?;谶^程管理,提升了管理效率REF_Ref23901\r\h[9]。支持高達1000的并發(fā)度,極大提升了外賣配送平臺的性能表現(xiàn)。在性能處理方面,這些特性使得外賣配送平臺能夠更好地滿足用戶需求,提供穩(wěn)定可靠的服務(wù)REF_Ref26268\r\h[10]。并發(fā)度:1000(Tomcat)響應(yīng)時間:5s事務(wù)處理:2分鐘可擴展性:基于接口的MVC架構(gòu)安全性:基于角色的權(quán)限管理系統(tǒng)設(shè)計總體設(shè)計圖4-SEQ圖\*ARABIC\r1\s11系統(tǒng)管理員端功能圖外賣配送平臺系統(tǒng)是由移動前臺端,系統(tǒng)后臺管理員端兩個模塊相互結(jié)合而成。外賣配送平臺系統(tǒng)管理員端功能圖如圖所示4-1:交互界面設(shè)計系統(tǒng)主要包括管理員、員工、用戶3個角色,根據(jù)不同角色的功能設(shè)計界面,管理員端設(shè)計界面如表4-1所示。表4-SEQ表\*ARABIC\r1\s11管理員端設(shè)計界面表角色描述(界面顯示)窗體名(程序中用到)管理員員工管理employee.html添加員工add..html分類管理category.html套餐管理combol.html新建套餐add.html菜品管理food.html新建菜品add.html訂單明細orders.html登錄login.html退出logout.html外賣配送平臺系統(tǒng)管理端主界面index.tml數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫模型設(shè)計各個實體屬性圖如下圖4-2所示。圖4-SEQ圖\*ARABIC\s12用戶下單實體圖用戶信息如圖4-3圖4-SEQ圖\*ARABIC\s13用戶信息實體圖菜品信息如圖4-4圖4-SEQ圖\*ARABIC\s14菜品信息實體圖訂單信息如圖4-5圖4-SEQ圖\*ARABIC\s15訂單信息實體圖套餐信息如圖4-6圖4-SEQ圖\*ARABIC\s16套餐信息實體圖菜品與套餐分類信息如圖4-7圖4-SEQ圖\*ARABIC\s17菜品與套餐分類信息員工信息如圖4-8圖4-SEQ圖\*ARABIC\s18員工信息實體圖如圖4-9圖4-SEQ圖\*ARABIC\s19地址信息實體圖菜品口味信息如圖4-10圖4-SEQ圖\*ARABIC\s110菜品口味信息實體圖訂單明細如圖4-11圖4-SEQ圖\*ARABIC\s111訂單明細實體圖套餐菜品關(guān)系信息如圖4-12圖4-SEQ圖\*ARABIC\s112套餐菜品信息實體圖購物車信息如圖4-13圖4-SEQ圖\*ARABIC\s113購物車信息實體圖數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計根據(jù)數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計中的實體及屬性描述、以及數(shù)據(jù)庫的規(guī)范化理論,設(shè)計各個不同模塊的信息表。表4-SEQ表\*ARABIC\s12管理員信息表字段名列類型與長度描述備注numvarchar(255)工號主鍵namevarchar(32)姓名非空usernamevarchar(32)姓名非空passwordvarchar(64)密碼非空表4-SEQ表\*ARABIC\s13分類信息表字段名列類型與長度描述備注idbigint(20)編號主鍵typeint(11)類型非空namevarchar(64)分類名稱非空sotrint(11)順序非空Create_timedatetime創(chuàng)建時間非空Update_timedatetime更新時間非空Create_userbigint(20)創(chuàng)建人非空Update_userbigint(20)修改人非空表4-SEQ表\*ARABIC\s14菜品管理信息表字段名列類型與長度描述備注idbigint(20)編號主鍵namevarchar(64)菜品名稱非空category_idbigint(20)菜品分類id非空pricedecimal(10,2)菜品價格非空codevarchar(64)商品碼非空imagevarchar(200)圖片非空descriptionvarchar(400)描述信息非空statusint(11)0停售1起售非空sortint(11)順序非空Create_timedatetime創(chuàng)建時間非空Update_timedatetime更新時間非空Create_userbigint(20)創(chuàng)建人非空Update_userbigint(20)修改人非空is_deletedint(11)是否刪除非空表4-SEQ表\*ARABIC\s15菜品口味關(guān)系表字段名列類型與長度描述備注idbigint(20)編號主鍵dish_idbigint(20)菜品非空namevarchar(64)口味名稱非空valuevarchar(500)口味數(shù)據(jù)list非空Create_timedatetime創(chuàng)建時間非空Update_timedatetime更新時間非空Create_userbigint(20)創(chuàng)建人非空Update_userbigint(20)修改人非空is_deletedint(11)是否刪除非空表4-SEQ表\*ARABIC\s16員工信息表字段名列類型與長度描述備注idbigint(20)編號主鍵namevarchar(32)姓名非空usernamevarchar(32)姓名非空passwordvarchar(64)密碼非空phonevarchar(11)手機號非空sexvarchar(2)性別非空id_numbervarchar(18)身份證號非空statusint(11)狀態(tài)0:禁用1:正常非空Create_timedatetime創(chuàng)建時間非空Update_timedatetime更新時間非空Create_userbigint(20)創(chuàng)建人非空Update_userbigint(20)修改人非空表4-SEQ表\*ARABIC\s17訂單信息表字段名列類型與長度描述備注idbigint(20)編號主鍵numbervarchar(50)訂單號非空statusint(11)訂單狀態(tài)1待付款,2待派送,3已派送,4已完成,5已取消非空user_idbigint(20)下單用戶非空address_book_idbigint(20)地址id非空order_timedatetime下單時間非空checkout_timedatetime結(jié)賬時間非空pay_methodint(11)支付方式1微信,2支付寶非空amountvarchar(255)實收金額非空remarkvarchar(255)備注非空phonevarchar(11)電話非空addressvarchar(255)地址非空user_namevarchar(32)用戶名非空consigneevarchar(50)收貨人非空表4-SEQ表\*ARABIC\s18訂單明細表字段名列類型與長度描述備注idbigint(20)編號主鍵namevarchar(50)名字非空imagevarchar(100)圖片非空order_idbigint(20)訂單id非空dish_idbigint(20)菜品id非空setmeal_idbigint(20)套餐id非空dish_flavorvarchar(50)口味非空numberint(11)數(shù)量非空amountdecimal(10,2)金額非空表4-SEQ表\*ARABIC\s19套餐信息表字段名列類型與長度描述備注idbigint(20)編號主鍵category_idbigint(20)菜品分類id非空namevarchar(64套餐名稱非空pricedecimal(10,2)套餐價格非空statusint(11)狀態(tài)0停售1起售非空codevarchar(32)編碼非空descriptionvarchar(512)描述信息非空imagevarchar(255)圖片非空Create_timedatetime創(chuàng)建時間非空Update_timedatetime更新時間非空Create_userbigint(20)創(chuàng)建人非空Update_userbigint(20)修改人非空is_deletedint(11)是否刪除非空表4-SEQ表\*ARABIC\s110套餐菜品關(guān)系表字段名列類型與長度描述備注idbigint(20)編號主鍵setmeal_idvarchar(32)'套餐id非空dish_idvarchar(32)菜品id非空namevarchar(32)菜品名稱非空pricedecimal(10,2)菜品原價非空copiesint(11)份數(shù)非空sortint(11)排序非空Create_timedatetime創(chuàng)建時間非空Update_timedatetime更新時間非空Create_userbigint(20)創(chuàng)建人非空Update_userbigint(20)修改人非空is_deletedint(11)是否刪除非空表4-SEQ表\*ARABIC\s111購物車信息表字段名列類型與長度描述備注idbigint(20)編號主鍵namevarchar(50)名稱非空imagevarchar(100)圖片非空user_idbigint(20)主鍵非空dish_idbigint(20)菜品id非空setmeal_idbigint(20)套餐id非空dish_flavorvarchar(50)口味非空numberint(11)數(shù)量非空amountdecimal(10,2)金額非空create_timedatetime創(chuàng)建時間非空表4-SEQ表\*ARABIC\s112用戶信息表字段名列類型與長度描述備注idbigint(20)編號主鍵namevarchar(50)姓名非空phonevarchar(100)手機號非空sexvarchar(2)性別非空id_numbervarchar(18)身份證號非空avatarvarchar(500)頭像非空statusint(11)狀態(tài)0:禁用1:正常非空業(yè)務(wù)流程設(shè)計現(xiàn)以刪除菜品為例模擬次功能模塊的事件流,在刪除菜品中有一個重要的關(guān)聯(lián)條件為菜品是可以添加到套餐中的,即若想要刪除菜品在某一正在售賣的套餐中,我們是無法對其進行刪除的,否則會拋異常,套餐不完整也就沒用,所以刪除菜品用例規(guī)約表如下表4-13所示REF_Ref26432\r\h[11]。表4-SEQ表\*ARABIC\s113刪除菜品規(guī)約表用例名稱:刪除菜品用例ID:UC1001角色:后臺系統(tǒng)管理員前置條件:管理員角色已登錄、新增菜品同時此菜品狀態(tài)為起售基本事件流:管理員在本事件流中可以選擇首先停止銷售此菜品,此時菜品狀態(tài)被修改為“停售”,即“status=0”之后所以根據(jù)需求刪除或批量刪除想要刪除的菜品。3.刪除了菜品后,用戶在移動端時在是瀏覽不到此菜品的,當然在停售狀態(tài)下的菜品也無法瀏覽。擴展事件流:若此菜品在某一套餐中,將無法被刪除,只有當要刪除的菜品關(guān)聯(lián)的套餐沒有在售賣,才可以被刪除。如果認為此菜品在當前不可銷售,卻又不忍徹底刪除則可以選擇“停售”,當想要重新起售此菜品時可選擇“起售”??梢耘縿h除不想要銷售的菜品。后置條件:刪除菜品,將更新過的菜品數(shù)據(jù)或套餐數(shù)據(jù)保存到數(shù)據(jù)庫中在以添加套餐的時候模擬,我們首先要選擇已有的套餐分類,在此套餐分類下,我們添加一些我們各式菜品,當你想要添加菜品時,可以直接在搜索框中進行模糊查詢進行添加,當添加后覺得不是很合理也可以直接進行刪除菜品,也可以個性化數(shù)量選擇,之后上傳文件下載到服務(wù)器顯示,保存即可,所以新增套餐規(guī)約表如下表4-14所示表4-SEQ表\*ARABIC\s114新增套餐規(guī)約表用例名稱:新增套餐用例ID:UC1002角色:后臺系統(tǒng)管理員前置條件:管理員角色已登錄,添加的菜品起售中基本事件流:管理員在本事件流中點擊“新增套餐”,跳轉(zhuǎn)添加套餐頁面。選擇已有套餐分類,編輯套餐名稱價格。3.點擊“添加菜品”,可以直接搜索欄搜索要添加的菜品,或者直接點擊菜品分類去搜索,之后對菜品進行數(shù)量選擇。擴展事件流:如果不想要添加某一菜品,也可以直接選擇“刪除菜品”。可以批量刪除不想要添加的菜品。后置條件:新增套餐,將更新過的套餐數(shù)據(jù)保存到數(shù)據(jù)庫中系統(tǒng)的實現(xiàn)開發(fā)環(huán)境軟件環(huán)境和硬件環(huán)境操作系統(tǒng)版本:Windows10系統(tǒng)軟件:IntelliJIDEA、VisulStudioCode數(shù)據(jù)庫管理系統(tǒng):DataGrip、MySQL、Redis、RESP網(wǎng)絡(luò):100Mbps的無線網(wǎng)絡(luò)處理器:Intel(R)Core(TM)i5-10210UCPU@1.60GHz2.11GHz內(nèi)存容量:8G硬盤容量:1T員工管理模塊的實現(xiàn)員工管理主界面員工管理的主界面如圖5-1所示:圖5-SEQ圖\*ARABIC\r1\s11用戶管理主界面員工的模糊查詢功能的順序圖如圖5-2所示:圖5-SEQ圖\*ARABIC\s12用戶模糊查詢順序圖在list.html頁面上,管理員通過點擊輸入框輸入關(guān)鍵字,再點擊查詢按鈕,就會觸發(fā)點擊事件返送Ajax請求,將關(guān)鍵字name,當前頁數(shù)page以及每頁的信息條數(shù)pageSize作為參數(shù)傳入,調(diào)用EmployeeServlet中的page方法。EmployeeServlet拿到參數(shù)之后,首先將page,pageSize作為參數(shù)構(gòu)造分頁構(gòu)造器,然后構(gòu)造一個條件構(gòu)造器queryWrapper,然后判斷name是否為空,如果不為空,將name作為queryWrapper.like的參數(shù)添加過濾條件,最后將pageInfo,queryWapper作為參數(shù)調(diào)用EmployeeService的page方法。EmployeeService接收到參數(shù)之后,調(diào)用page方法將name拼接成數(shù)據(jù)庫模糊查詢所要求的字段格式(“%name%”)最后傳到數(shù)據(jù)庫查詢Dao層的EmployeeMapper中進行數(shù)據(jù)庫的操作。Dao層接收到傳過來的參數(shù)后。把參數(shù)放入SQL語句中進行數(shù)據(jù)庫的查詢操作,然后將查詢結(jié)果封裝為商品信息集合返回給控制器,最后組裝成返回結(jié)果類R返回給前端視圖。添加員工信息添加員工界面如圖5-3所示:圖5-SEQ圖\*ARABIC\s13添加員工界面添加員工功能的順序圖如圖5-4所示:圖5-SEQ圖\*ARABIC\s14員工添加順序圖在add.html上,管理員通過輸入賬號,員工姓名,手機號,選擇性別以及輸入身份證號等信息,將一系列信息填寫完整后點擊保存按鈕,會將信息封裝為json對象,通過Ajax發(fā)送跨域請求,調(diào)用EmployeeController中的save()方法。EmployeeController通過@RequestBody注解將接收到的json對象轉(zhuǎn)為java對象,設(shè)置初始密碼并進行md5加密,然后將java對象作為參數(shù)調(diào)用EmployeeService中的save方法。EmployeeService接收到Java對象的參數(shù)后,傳到數(shù)據(jù)庫查詢Dao層的EmployeeMapper中調(diào)用insert(obj)方法進行數(shù)據(jù)庫的操作。Dao層接收到傳過來的參數(shù)后。把Java對象中的字段取出,放入SQL語句中進行數(shù)據(jù)庫的插入,插入成功后返回Integer類型的值給控制器,如果為1則插入成功,否則將插入失敗,最后控制器再將結(jié)果組裝成R返回給前端視圖。修改員工信息修改員工信息界面如圖5-5所示。圖5-SEQ圖\*ARABIC\s15修改員工信息界面修改員工信息順序圖如圖5-6所示:圖5-SEQ圖\*ARABIC\s16修改員工信息順序圖在list.html上,管理員通過點擊編輯按鈕,跳轉(zhuǎn)到add.html頁面并在url中攜帶參數(shù)員工id,add.html在初始化時就會執(zhí)行生命周期函數(shù)created并取出路徑中的商品id發(fā)送Ajax跨域請求,調(diào)用EployeeController中的getById()方法。EployeeControlle接收員工id,將員工id作為參數(shù)調(diào)用EmployeeService中的getById()方法。EmployeeService接收到參數(shù)之后,傳到數(shù)據(jù)庫查詢的Dao層的EmployeeMapper中調(diào)用selectById()方法進行數(shù)據(jù)庫的操作。Dao層接收到傳過來的參數(shù)后將用戶id取出,放入SQL語句中進行數(shù)據(jù)庫的查詢,返回對應(yīng)的用戶信息到add.html中進行展示。數(shù)據(jù)展示之后,管理員可以對需要修改的信息進行填寫,填寫完之后點擊保存按鈕,之后頁面會將用戶信息封裝為json對象,并發(fā)送Ajax請求調(diào)用EmployeeController中的update方法。EmployeeController通過@RequestBody注解將接收到的json對象轉(zhuǎn)為java對象,然后調(diào)用EmployeeService中的updateById(obj)方法。employeeService接收到Java對象的參數(shù)后,傳到數(shù)據(jù)庫查詢Dao層的EmployeeMapper中調(diào)用updateById(obj)方法進行數(shù)據(jù)庫的操作。Dao層接收到傳過來的參數(shù)后。把Java對象中的字段取出,放入SQL語句中進行數(shù)據(jù)庫的修改,修改成功后返回Integer類型的值給控制器,如果為1則修改成功,否則將修改失敗,最后控制器再將結(jié)果組裝成R返回給前端視圖。啟用、禁用員工賬號禁用(啟用)員工賬號界面如圖5-7所示。圖5-SEQ圖\*ARABIC\s17禁用(啟用)員工賬號界面禁用(啟用)員工賬號順序圖如圖5-8所示:圖5-SEQ圖\*ARABIC\s18禁用(啟用)員工賬號順序圖在add.html上,管理員通過點擊禁用(啟用)按鈕將員工id以及員工狀態(tài)status作為參數(shù)向Ajax發(fā)送跨域請求,調(diào)用EmployeeController中的update()方法。EmployeeController接收頁面發(fā)送過來的參數(shù)并封裝為java對象,然后將java對象作為參數(shù)調(diào)用employeeService中的updateById(obj)方法。EmployeeService接收到Java對象的參數(shù)后,傳到數(shù)據(jù)庫查詢Dao層的EmployeeMapper中調(diào)用updateById(obj)方法進行數(shù)據(jù)庫的操作。Dao層接收到傳過來的參數(shù)后。把Java對象中的字段取出,放入SQL語句中進行數(shù)據(jù)庫的修改,修改成功后返回Integer類型的值給控制器,如果為1則修改成功,否則將修改失敗,最后控制器再將結(jié)果組裝成R返回給前端視圖。分類管理模塊實現(xiàn)分類管理主界面分類管理的主界面如圖5-9所示:圖5-SEQ圖\*ARABIC\s19分類管理主界面新增分類信息新增分類界面如圖5-10所示:圖5-SEQ圖\*ARABIC\s110新增分類界面新增分類信息順序圖如圖5-11所示:圖5-11新增分類信息順序圖在list.html上,管理員通過輸入分類名稱以及順序等信息,將一系列信息填寫完整后點擊保存按鈕,會將信息封裝為json對象,其中如果添加的是菜品信息json對象中的type的值是1,如果添加的是套餐信息json對象中的type的值是1,然后通過Ajax發(fā)送跨域請求,調(diào)用CategroyController中的save()方法。CategroyController通過@RequestBody注解將接收到的json對象轉(zhuǎn)為java對象,然后將java對象作為參數(shù)調(diào)用CategroyService中的save方法。CategroyService接收到Java對象的參數(shù)后,傳到數(shù)據(jù)庫查詢Dao層的CategroyMapper中調(diào)用insert(obj)方法進行數(shù)據(jù)庫的操作。Dao層接收到傳過來的參數(shù)后。把Java對象中的字段取出,放入SQL語句中進行數(shù)據(jù)庫的插入,插入成功后返回Integer類型的值給控制器,如果為1則插入成功,否則將插入失敗,最后控制器再將結(jié)果組裝成R返回給前端視圖。修改分類信息修改分類信息界面如圖5-12所示。圖5-12修改分類信息界面刪除分類信息刪除分類界面如圖5-13所示。圖5-SEQ圖\*ARABIC\s113刪除分類界面刪除分類順序圖如圖5-14所示:圖5-SEQ圖\*ARABIC\s114刪除分類信息順序圖在list.html上,管理員通過點擊刪除按鈕,發(fā)送Ajax跨域請求提交分類id,調(diào)用CategroyController中的delete()方法。CategroyController通過將接收的分類id作為參數(shù)調(diào)用CategroyService中的delete方法。CategroyService接收到Java對象的參數(shù)后,傳到數(shù)據(jù)庫查詢Dao層的DishMapper中調(diào)用count方法看返回的值是否大于0,如果大于0就說明該分類關(guān)聯(lián)的有菜品,就拋出異常說明不能刪除;如果不大于0就調(diào)用SetmealMappe中的count方法看返回的值是否大于0,如果大于0就說明該分類關(guān)聯(lián)的有套餐,就拋出異常說明不能刪除;如果不大于0就調(diào)用Category中的removeById(id)方法。Dao層接收到傳過來的參數(shù)后。把參數(shù)取出,放入SQL語句中進行數(shù)據(jù)庫的刪除,插入成功后返回Integer類型的值給控制器,如果為1則刪除成功,否則將刪除失敗,最后控制器再將結(jié)果組裝成R返回給前端視圖。菜品管理模塊實現(xiàn)菜品管理主界面菜品管理的主界面如圖5-15所示:圖5-SEQ圖\*ARABIC\s115菜品管理主界面菜品的模糊查詢的順序圖如圖5-16所示:圖5-SEQ圖\*ARABIC\s116菜品模糊查詢順序圖在list.html頁面上,管理員通過點擊輸入框輸入關(guān)鍵字,再點擊查詢按鈕,就會出發(fā)點擊事件發(fā)送Ajax請求,將關(guān)鍵字name,當前頁數(shù)page以及每頁的信息條數(shù)pageSize作為參數(shù)傳入,調(diào)用DiahServlet中的page方法。DishServlet拿到參數(shù)之后,首先將page,pageSize作為參數(shù)構(gòu)造分頁構(gòu)造器,然后構(gòu)造一個條件構(gòu)造器queryWrapper,然后判斷name是否為空,如果不為空,將name作為queryWrapper.like的參數(shù)添加過濾條件,最后將pageInfo,queryWapper作為參數(shù)調(diào)用DishService的page方法。前端頁面進行菜品所屬分類展示時需要的是菜品分類名稱categoryName而我們查詢菜品表返回的數(shù)據(jù)只有菜品所屬分類id沒有分類名,所以需要將每一個菜品dish對象中的數(shù)據(jù)封裝到dishDto對象中,并且設(shè)置dishDto對象的categoryName屬性即可實現(xiàn)前端的正常展示。重新構(gòu)造一個泛型為DishDto的分頁構(gòu)造器dishDtoPage,然后從從pageInfo對象中獲取當前頁數(shù)據(jù)列表records,遍歷records集合將集合中的每一個dish對象中的數(shù)據(jù)賦值到DishDto對象中,并且為DishDto對象的categoryName屬性賦值,在遍歷records集合時,將每一個新創(chuàng)建出來的dishDto對象存入到泛型為DishDto的List集合lsit中,這樣就得到當前頁要顯示的數(shù)據(jù)集合了,將當前頁數(shù)據(jù)集合list和總條數(shù)封裝到dishDtoPage對象中返回即可DishService接收到參數(shù)之后,調(diào)用page方法將name拼接成數(shù)據(jù)庫模糊查詢所要求的字段格式(“%name%”)最后傳到數(shù)據(jù)庫查詢Dao層的DishMapper中進行數(shù)據(jù)庫的操作。Dao層接收到傳過來的參數(shù)后。把參數(shù)放入SQL語句中進行數(shù)據(jù)庫的查詢操作,然后將查詢結(jié)果封裝為商品信息集合返回給控制器,最后組裝成返回結(jié)果類R返回給前端視圖。新增菜品信息新增菜品的界面如圖5-17所示:圖5-SEQ圖\*ARABIC\s117新增菜品界面新增菜品順序圖如圖5-18所示:圖5-SEQ圖\*ARABIC\s118新增菜品順序圖管理員點擊新建菜品,頁面會將類型type封裝為Category對象,然后將Category對象作為參數(shù),發(fā)送一個Ajax請求,請求調(diào)用CategoryController中的list方法將菜品分類顯示到下拉框中REF_Ref27274\r\h[12]。CategoryController接收到參數(shù)之后,首先取出type將type作為參數(shù)構(gòu)造分頁構(gòu)造器,然后構(gòu)造一個條件構(gòu)造器queryWrapper,然后判斷type是否為空,如果不為空,將type作為queryWrapper.eq的參數(shù)添加過濾條件,最后將queryWapper作為參數(shù)調(diào)用CategoryService的list方法。CategoryService接收到參數(shù)之后,調(diào)用list方法將type拼接按條件查詢所要求的格式,最后傳到數(shù)據(jù)庫查詢Dao層的CategoryMapper中進行數(shù)據(jù)庫的操作。Dao層接收到傳過來的參數(shù)后。把參數(shù)放入SQL語句中進行數(shù)據(jù)庫的查詢操作,然后將查詢結(jié)果封裝為商品信息集合返回給控制器,最后組裝成返回結(jié)果類R返回給前端視圖REF_Ref27326\r\h[13]。管理員輸入菜品信息點擊上傳圖片,頁面會發(fā)送一個請求調(diào)用CommonController中的upload方法將圖片保存。圖片保存之后,頁面會在發(fā)一個請求調(diào)用CommonController中的download方法對圖片進行下載并回顯。管理員輸入完菜品信息之后點擊保存按鈕,就會觸發(fā)點擊事件,將填寫的信息封裝為json對象,并發(fā)送Ajax請求調(diào)用DishController中的SaveWithFlavor(obj)方法。DishController通過@RequestBody注解將json對象轉(zhuǎn)換為java對象,調(diào)用DishController中的SaveWithFlavor(obj)方法,將該Java對象作為參數(shù)傳入。DishService接收到參數(shù)之后,首先調(diào)用調(diào)用Dao層的DishMapper中的save(obj)方法將商品信息對象傳入進行數(shù)據(jù)庫的操作。然后從對象中獲取菜品id和菜品口味,然后遍歷菜品口味集合,給每個口味對象設(shè)置菜品id,最后調(diào)用dishFlavorService中的saveBatch()方法調(diào)用調(diào)用Dao層的dishFlavorMapper中的saveBatch()方法將商品信息對象傳入進行數(shù)據(jù)庫的操作。把接收的參數(shù)放入SQL語句中去進行數(shù)據(jù)庫的查詢操作,然后將查詢結(jié)果封裝為商品信息集合返回給控制器,最后組裝成返回結(jié)果類R返回給前端視圖。修改菜品信息修改菜品信息界面如圖5-19所示。圖5-SEQ圖\*ARABIC\s119修改菜品信息界面修改菜品信息順序圖如圖5-20所示:圖5-SEQ圖\*ARABIC\s120修改菜品信息順序圖管理員點擊新建菜品,頁面會將類型type封裝為Category對象,然后將Category對象作為參數(shù),發(fā)送一個Ajax請求,請求調(diào)用CategoryController中的list方法將菜品分類顯示到下拉框中。頁面將菜品id作為參數(shù),發(fā)送Ajax請求,請求調(diào)用DishController中的get()方法。DishControlle通過@PathVariable注解解析拿到菜品id,將菜品id作為參數(shù)調(diào)用DishService中的getById(id)方法傳到數(shù)據(jù)庫查詢的Dao層的DishMapper中調(diào)用selectById()方法進行數(shù)據(jù)庫的操作來獲取菜品基本信息。然后將獲取到菜品基本信息封裝到dish對象中,然后將dish對象中的信息拷貝到dishDto對象中,然后調(diào)用dishFlavorService中的list()方法,根據(jù)菜品id查詢當前菜品所對應(yīng)的口味信息,然后將口味信息設(shè)置在dishDto對象中,最后返回dishDto對象。Dao層接收到傳過來的參數(shù)后將用戶id取出,放入SQL語句中進行數(shù)據(jù)庫的查詢,返回對應(yīng)的菜品信息到add.html中回顯。界面還會發(fā)送一個請求,請求調(diào)用CommonController中的下載方法進行圖片的回顯。所有信息返回前端之后,管理員可以輸入要修改的信息,輸入完畢之后點擊保存按鈕,之后就會頁面就會將菜品信息數(shù)據(jù)封裝為json對象,并發(fā)送Ajax請求,請求調(diào)用DishController中的update方法。DishController通過@RequestBody注解將接收到的json對象轉(zhuǎn)為java對象,然后調(diào)用EmployeeService中的updateWithFlavor(obj)方法。DishService接收到Java對象的參數(shù)后,首先將參數(shù)傳到數(shù)據(jù)庫查詢Dao層的DishMapper中調(diào)用updateById(obj)方法進行數(shù)據(jù)庫的操作。然后調(diào)用dishFlavorService中的remove()方法清理當前菜品的所有口味信息。然后再調(diào)用dishFlavorService中的saveBatch()方法添加當前提交過來的口味數(shù)據(jù)。Dao層接收到傳過來的參數(shù)后。把Java對象中的字段取出,放入SQL語句中進行數(shù)據(jù)庫的修改,修改成功后返回Integer類型的值給控制器,如果為1則修改成功,否則將修改失敗,最后控制器再將結(jié)果組裝成R返回給前端視圖刪除菜品信息刪除菜品信息界面如圖5-21所示。圖5-SEQ圖\*ARABIC\s121刪除菜品信息界面刪除菜品信息順序圖如圖5-22所示:圖5-SEQ圖\*ARABIC\s122刪除菜品信息用例圖在list.html上,管理員通過點擊刪除按鈕,發(fā)送Ajax跨域請求提交菜品id,調(diào)用DishController中的deleteById()方法。DishController通過將接收的菜品id作為參數(shù)調(diào)用DishService中的deleteByIds()方法。DishService接收到參數(shù)后,首先判斷參數(shù)中是否含有“,”,如果不含“,”就說明是刪除單個菜品信息,就直接將參數(shù)傳到數(shù)據(jù)庫查詢Dao層的DishMapper中調(diào)用removeById(id)方法;如果含有“,”,就說明刪除的是多個菜品信息,就調(diào)用split方法根據(jù)“,”將各個id分割出來,然后創(chuàng)建一個list集合,將分割出來的id都添加到list集合中,最后將list傳到數(shù)據(jù)庫查詢Dao層的DishMapper中調(diào)用removeByIds(list)方法Dao層接收到傳過來的參數(shù)后。把參數(shù)取出,放入SQL語句中進行數(shù)據(jù)庫的刪除,插入成功后返回Integer類型的值給控制器,如果為1則刪除成功,否則將刪除失敗,最后控制器再將結(jié)果組裝成R返回給前端視圖。停售、起售菜品管理員可以點擊菜品信息右側(cè)操作中的停售(起售)按鈕來修改單個菜品的狀態(tài),也可以選中多個菜品,然后點擊批量停售(起售)按鈕來修改多個菜品的狀態(tài)。處于停售狀態(tài)的菜品不會在展示在移動端前臺上。停售(起售)菜品信息界面如圖5-23所示。圖5-SEQ圖\*ARABIC\s123停售(起售)菜品信息界面停售(起售)菜品的順序圖如圖5-24所示:圖5-SEQ圖\*ARABIC\s124停售(起售)菜品順序圖在list.html上,管理員通過點擊刪除按鈕,發(fā)送Ajax跨域請求提交菜品id和菜品狀態(tài)status,調(diào)用DishController中的updateStatus()方法。DishController通過將接收的菜品id和菜品狀態(tài)status作為參數(shù)調(diào)用DishService中的updateStatus()方法。DishService接收到參數(shù)后,;就調(diào)用split方法根據(jù)“,”將各個id分割出來,然后創(chuàng)建一個list集合,將分割出來的id都添加到list集合中,最后將list傳到數(shù)據(jù)庫查詢Dao層的DishMapper中調(diào)用updateStatus(list)方法Dao層接收到傳過來的參數(shù)后。把參數(shù)取出,放入SQL語句中進行數(shù)據(jù)庫的修改,修改成功后返回Integer類型的值給控制器,如果為1則修改成功,否則將修改失敗,最后控制器再將結(jié)果組裝成R返回給前端視圖。套餐管理模塊實現(xiàn)套餐管理主界面套餐管理模塊包括套餐的模糊查詢、添加、修改、刪除、停售、起售等功能,管理員還可以進行批量操作,刪除多條數(shù)據(jù)或者停售、起售多條數(shù)據(jù)。套餐管理的主界面如圖5.25所示:圖5-SEQ圖\*ARABIC\s125套餐管理主界面新增套餐信息管理員可以點擊新建菜品按鈕來新增套餐,點擊新建套餐按鈕之后add.html頁面會發(fā)送一個Ajax請求,請求調(diào)用CategoryController中的list方法將套餐分類顯示到下拉框中,緊接著頁面再次發(fā)送一個Ajax請求,求調(diào)用CategoryController中的list方法獲取菜品分類并在窗口進行展示。然后頁面第三次發(fā)送一個Ajax請求,請求調(diào)用DishController中的list方法根據(jù)菜品分類查詢對應(yīng)的菜品數(shù)據(jù)去回顯到對應(yīng)的窗口。管理員輸入套餐信息點擊上傳圖片,頁面會發(fā)送一個請求調(diào)用CommonController中的upload方法將圖片保存。圖片保存之后,頁面會在發(fā)一個請求調(diào)用CommonController中的download方法對圖片進行下載并回顯。最后管理員點擊保存按鈕,頁面發(fā)送一個Ajax請求,請求調(diào)用setmealController中的save方法保存數(shù)據(jù)。新增套餐的界面如圖5.26所示:圖5-SEQ圖\*ARABIC\s126新增套餐信息界面修改套餐信息修改套餐信息界面如圖5-27所示。圖5-SEQ圖\*ARABIC\s127修改套餐信息界面刪除套餐信息管理員可以刪除單個套餐信息,也可以多個套餐,然后可以點擊批量刪除按鈕來刪除多個套餐信息。如果套餐處于售賣狀態(tài)(status為1),則不能刪除。刪除套餐信息界面如圖5-28示。 圖5-SEQ圖\*ARABIC\s128刪除套餐信息界面停售、起售套餐管理員可以點擊套餐信息右側(cè)操作中的停售(起售)按鈕來修改單個套餐的狀態(tài),也可以選中多個套餐,然后點擊批量停售(起售)按鈕來修改多個套餐的狀態(tài)。處于停售狀態(tài)(status為0)的菜品不會在展示在移動端前臺上,處于售賣狀態(tài)(status為1)的菜品不會被刪除。停售(起售)套餐信息界面如圖5-29所示。圖5-SEQ圖\*ARABIC\s129停售(起售)套餐信息界面訂單管理模塊實現(xiàn)訂單管理主界面訂單明細主界面如圖5-30所示。圖5-SEQ圖\*ARABIC\s130訂單明細主界面訂單模糊查詢順序圖如圖5-31所示。圖5-31訂單模糊查詢順序圖在list.html頁面上,管理員通過點擊輸入框輸入訂單號,開始日期,結(jié)束日期,再點擊查詢按鈕,就會觸發(fā)點擊事件返送Ajax請求,將關(guān)鍵字number,開始日期beginTime,結(jié)束日期endTime,當前頁數(shù)page以及每頁的信息條數(shù)pageSize作為參數(shù)傳入,調(diào)用OrederServlet中的getOrders方法。CategroyController通過將接收的分類id作為參數(shù)調(diào)用CategroyService中的delete方法。OrderServlet拿到參數(shù)之后,首先將page,pageSize作為參數(shù)構(gòu)造分頁構(gòu)造器,然后構(gòu)造一個條件構(gòu)造器queryWrapper,然后分別判斷number,beginTime,endTime是否為空,如果不為空,分別將number,beginTime,endTime作為queryWrapper.like,queryWrapper.ge,queryWrapper.eq的參數(shù)添加過濾條件,最后將pageInfo,queryWapper作為參數(shù)調(diào)用OrderService的page方法。OrderService接收到參數(shù)之后,調(diào)用page方法將name,beginTime,endTime拼接成數(shù)據(jù)庫模糊查詢所要求的字段格式最后傳到數(shù)據(jù)庫查詢Dao層的OrderMapper中進行數(shù)據(jù)庫的操作。Dao層接收到傳過來的參數(shù)后。把參數(shù)放入SQL語句中進行數(shù)據(jù)庫的查詢操作,然后將查詢結(jié)果封裝為商品信息集合返回給控制器,最后組裝成返回結(jié)果類R返回給前端視圖查看訂單信息查看訂單詳細信息界面如圖5-32所示。圖5-SEQ圖\*ARABIC\s132查看訂單詳細信息界面派送,完成訂單修改訂單狀態(tài)界面如圖5-33所示。圖5-SEQ圖\*ARABIC\s133修改訂單狀態(tài)界面派送、完成順序圖如圖5-34所示:圖5-SEQ圖\*ARABIC\s134派送、完成順序圖在list.html上,管理員通過點擊派送(完成)按鈕將員工id以及員工狀態(tài)status封裝為json對象向Ajax發(fā)送跨域請求,調(diào)用OrderController中的updatestatus()方法。OrderController接收頁面發(fā)送過來的參數(shù)并封裝為Map對象,然后將Map對象作為參數(shù)調(diào)用OrderService中的updateStatus()方法。OrderService接收到Map對象的參數(shù)后,傳到數(shù)據(jù)庫查詢Dao層的OrderMapper中調(diào)用getById(id)方法進行數(shù)據(jù)庫的操作來獲取訂單的相關(guān)信息封裝在orders對象中,然后給該對象的status設(shè)置為頁面穿過來的status的值,然后傳到數(shù)據(jù)庫查詢Dao層的OrderMapper中調(diào)用updateById(id)方法進行數(shù)據(jù)庫的操作Dao層接收到傳過來的參數(shù)后。把Java對象中的字段取出,放入SQL語句中進行數(shù)據(jù)庫的修改,修改成功后返回Integer類型的值給控制器,如果為1則修改成功,否則將修改失敗,最后控制器再將結(jié)果組裝成R返回給前端視圖。移動端購物車業(yè)務(wù)開發(fā)實現(xiàn)添加購物車數(shù)據(jù)移動端用戶可以將菜品或者套餐添加到購物車。購物車具體流程如下圖5-35所示。圖5-SEQ圖\*ARABIC\s135購物車具體流程其實添加菜品套餐到購物車中與之前的添加功能模塊都相似,所以就不再詳細說明,在這里描述一下開發(fā)過程吧。當我們?nèi)c擊加入的按鈕時,頁面會發(fā)送ajax請求,請求Controller服務(wù)端,Controller層首先設(shè)置用戶id,指定當前哪一個用戶的購物車數(shù)據(jù)。并且獲取當前購物車中的菜品id,套餐id。之后調(diào)用ShoppingCartService層的getOne方法查詢當前菜品或套餐是否在購物車中,進行判斷,如果存在,number+1,Service層調(diào)用updateById更新購物車中的菜品數(shù)據(jù);如果不存在就添加到購物車中,默認設(shè)置number=1,然后調(diào)用Service層的save方法保存數(shù)據(jù)到購物車字符串中。返回R類型,菜品套餐成功購入購物車。操作購物車時進行的交互過程如下圖5-36所示。圖5-SEQ圖\*ARABIC\s136購物車時前端頁面與服務(wù)端交互過程減少或清空購物車數(shù)據(jù)減少購物車數(shù)據(jù)當移動端用戶將菜品或者套餐添加到購物車,發(fā)現(xiàn)有些菜品又突然不是很想要了,或者覺得物低所值,那我們就可以通過購物車來減少其中的數(shù)據(jù)。在購物車中可以修改菜品和套餐的數(shù)量。這里與上述增加數(shù)據(jù)基本一致,不同的有幾點。第一點:當查看購物車發(fā)現(xiàn)菜品或套餐的數(shù)量number=1時,我們想要減少數(shù)據(jù)時,則直接調(diào)用ShoppingCartService層的remove方法,清空該數(shù)據(jù);如果該數(shù)據(jù)number>1,則用戶每點擊“-”按鈕一次,number-1,之后Service層調(diào)用updateById更新購物車中的菜品數(shù)據(jù),最終返回R類型,更新購物車中數(shù)據(jù)。清空購物車數(shù)據(jù)清空購物車數(shù)據(jù)更是簡單,當我們點進購物車后,右上角有一個“清空”,當我們點擊“清空”后,頁面發(fā)送請求,服務(wù)端接收Json數(shù)據(jù),然后調(diào)用ShoppingCartService層的remove方法,直接將購物車清空,返回R類型,成功執(zhí)行。新建地址地址簿的功能與展示。如下圖5-37所示。圖5-SEQ圖\*ARABIC\s137收貨地址頁面展示新建地址尤為簡單,我們簡要說一下。首先通過獲取當前CurrentIdId,將其賦給當前地址用戶Id,輸入完信息,封裝成Json字符串,發(fā)送ajax請求給服務(wù)端,然后服務(wù)端調(diào)用AddressBookService的save方法,保存當前地址信息,返回R類型。設(shè)置默認地址相對于新建地址,設(shè)置默認地址的邏輯長一些。首先是獲取當前CurrentId與AddressBook的UserId比較相等,之后設(shè)置AddressBook的默認條件getIsDefault為0,調(diào)用AddressBookService的update方法構(gòu)造更新條件。更新后設(shè)置AddressBook的IsDefault為1,之后調(diào)用AddressBookService的updateById方法更新當前地址為默認地址,返回R類型。下單移動端用戶把想要的菜品或者套餐加入到購物車里之后,就可以點擊進行結(jié)算,當我們點擊結(jié)算后就會出現(xiàn)下圖,而點擊支付按鈕后就完成了下單的操作,如下圖5-38所示。圖5-SEQ圖\*ARABIC\s138下單頁面展示那其實下單的代碼邏輯實現(xiàn)也不是很難,主要是用戶下單業(yè)務(wù)對應(yīng)的數(shù)據(jù)表為orders表和order_detail表:orders:訂單表、order_detail:訂單明細表這兩個表之間的操作。具體邏輯如下圖5-39所示。圖5-SEQ圖\*ARABIC\s139下單代碼邏輯詳細描述一遍就是,首先當用戶點擊“去結(jié)算”按鈕后,頁面會跳轉(zhuǎn)到訂單確認頁面,然后會發(fā)送請求,服務(wù)端會進行Id比較,相等即獲取當前用戶的默認地址;同時將購物車的使用用戶Id與當前用戶比較,相等即獲取當前登陸用戶的購物車數(shù)據(jù),并顯示在下單頁面中。之后在訂單確認頁面點擊“去支付”按鈕,發(fā)送請求,服務(wù)端接收到數(shù)據(jù),調(diào)用OrderService層的submit方法,提交訂單,完成下單操作。系統(tǒng)測試測試方法每一個系統(tǒng)在開發(fā)整個過程中,都需要對系統(tǒng)不斷地測試和修改,測試在每個項目的開發(fā)過程中都是必不可少的一個階段,通過這些測試我們可以發(fā)現(xiàn)系統(tǒng)存在的不足從而不斷地完善并優(yōu)化系統(tǒng)。系統(tǒng)的問題和不足之處都會通過測試得以顯現(xiàn),方便以后系統(tǒng)使用過程的運行和維護。無論是代碼編寫錯誤還是遺忘的代碼問題都會被清楚的發(fā)現(xiàn),進而改進和優(yōu)化。無論是項目還是機器,在使用過程中都用進行不斷的測試,測試伴隨著開發(fā)到完成的整個過程,測試-調(diào)試-測試是整個項目開發(fā)的過程。部分功能測試登錄功能測試測試流程:以admin用戶身份從登錄界面點擊進去,測試系統(tǒng)的登錄功能,以及管理員用戶是不是有成功建立連接。管理員登錄測試結(jié)果如表6.1。表6-SEQ表\*ARABIC\r1\s11測試結(jié)果表一測試用例(用戶名、密碼)預(yù)期結(jié)果測試結(jié)果(“”,“”)用戶名不能為空提示:輸入用戶名(“admin”,“”)密碼不能為空提示:輸入密碼(“admin”,“123456”)密碼錯誤提示:輸入正確密碼(“admin”,“123123”)登錄成功登錄成功,跳轉(zhuǎn)到員工管理頁面員工管理測試測試流程:以管理員(admin用戶)從登錄界面登錄管理員,測試系統(tǒng)的員工管理功能,測試結(jié)果如表6.2。表6-SEQ表\*ARABIC\s12測試結(jié)果表二測試用例(名稱、價格、庫存、描述,圖標,分類、狀態(tài))預(yù)期結(jié)果測試結(jié)果添加用戶(zhangsan、張三、16638980885、男添加成功,返回員工列表顯示員工的信息。添加成功,返回員工列表顯示員工的信息添加用戶(“”、張三、16638980885、男添加失敗提示框“請輸入賬號”禁用員工(id:

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論