版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于SpringBoot的分布式微服務(wù)商城系統(tǒng)設(shè)計(jì)摘要:伴隨的時(shí)代的不斷發(fā)展,本世紀(jì)網(wǎng)絡(luò)購(gòu)物已經(jīng)成為如今中國(guó)最大的市場(chǎng),覆蓋人群面廣泛,而本購(gòu)物商城系統(tǒng)主要針對(duì)人群為有一定購(gòu)買力的小康水平人群。本購(gòu)物商城系統(tǒng)主要采用微服務(wù)架構(gòu),采用前端與后端分離的模式,數(shù)據(jù)發(fā)展之間信息交互利用token進(jìn)行。系統(tǒng)主要有這些模塊:1、商品的銷售服務(wù)。2、用戶的會(huì)員服務(wù)。3、倉(cāng)儲(chǔ)的庫(kù)存服務(wù)。4、購(gòu)物車的服務(wù)。5、訂單的相關(guān)服務(wù)。6、搜索商品的服務(wù)。后端使用Springboot+Springcloud+mybatis的架構(gòu),開(kāi)發(fā)語(yǔ)言使用的是Java,前端使用vue.js框架,輕量級(jí)開(kāi)源MySQL關(guān)系數(shù)據(jù)庫(kù)用于存儲(chǔ)數(shù)據(jù),jdk為1.8。實(shí)現(xiàn)了后臺(tái)對(duì)商品、品牌、訂單、庫(kù)存和用戶的管理等,可以對(duì)商品信息進(jìn)行分析搜索、加入購(gòu)物車、支付、查看歷史訂單管理等功能。關(guān)鍵詞:基于SpringBoot的分布式微服務(wù)商城系統(tǒng);Java;Mysql;vue.js目錄1緒論 51.1項(xiàng)目背景 51.2研究的內(nèi)容和主要工作 51.2.1研究的內(nèi)容 51.2.2本人主要工作 61.3論文結(jié)構(gòu) 62需求分析 72.1業(yè)務(wù)分析 72.1.1業(yè)務(wù)描述 72.1.2業(yè)務(wù)人員分析 72.2系統(tǒng)業(yè)務(wù)流程分析 72.2.1用戶登錄流程 72.2.2用戶購(gòu)物流程 92.3系統(tǒng)用例分析 112.3.1用戶角色分析 112.3.2用例分析 113軟件設(shè)計(jì) 273.1軟件體系結(jié)構(gòu)設(shè)計(jì) 273.2軟件功能模塊設(shè)計(jì) 283.2.1系統(tǒng)總體功能設(shè)計(jì) 283.2.2登錄注冊(cè)功能模塊設(shè)計(jì) 293.2.3搜索商品功能模塊設(shè)計(jì) 303.2.4購(gòu)物車功能模塊設(shè)計(jì) 303.2.5訂單中心功能模塊設(shè)計(jì) 313.2.6商品管理功能模塊設(shè)計(jì) 323.2.7庫(kù)存管理功能模塊設(shè)計(jì) 333.3數(shù)據(jù)庫(kù)設(shè)計(jì) 343.3.1實(shí)體類關(guān)系分析 343.3.2數(shù)據(jù)庫(kù)表 344系統(tǒng)實(shí)現(xiàn) 404.1注冊(cè)登錄功能實(shí)現(xiàn) 404.2搜索商品功能實(shí)現(xiàn) 464.3購(gòu)物車功能實(shí)現(xiàn) 494.4訂單功能實(shí)現(xiàn) 524.5商品管理功能實(shí)現(xiàn) 534.6庫(kù)存管理功能實(shí)現(xiàn) 545總結(jié)與展望 555.1總結(jié) 555.2進(jìn)一步的工作 55參考文獻(xiàn) 561緒論1.1項(xiàng)目背景伴隨著互聯(lián)網(wǎng)上電子商務(wù)的持續(xù)蓬勃發(fā)展,現(xiàn)如今網(wǎng)絡(luò)購(gòu)物已經(jīng)成為了現(xiàn)在如今中國(guó)最大的市場(chǎng),2021年中國(guó)網(wǎng)絡(luò)進(jìn)行購(gòu)物市場(chǎng)環(huán)境分析研究報(bào)告表明:隨著我國(guó)消費(fèi)服務(wù)的升級(jí)和互聯(lián)網(wǎng)的迅速普及,網(wǎng)絡(luò)購(gòu)物市場(chǎng)有著良好的發(fā)展趨勢(shì)。這些年來(lái),中國(guó)進(jìn)行網(wǎng)上購(gòu)物客戶信息數(shù)量、在我國(guó)的滲透率、總交易成本金額均穩(wěn)定發(fā)展持續(xù)的增長(zhǎng),一同驅(qū)動(dòng)著我國(guó)的網(wǎng)絡(luò)平臺(tái)購(gòu)物服務(wù)市場(chǎng)的成長(zhǎng)。據(jù)相關(guān)數(shù)據(jù)顯示,2019年中國(guó)網(wǎng)購(gòu)客戶數(shù)量達(dá)到6.49億,在中國(guó)的滲透率為76.2%,交易總額達(dá)到6.66萬(wàn)億元。估計(jì)到2020年網(wǎng)上購(gòu)物客戶總數(shù)量將達(dá)6.59億人,總買賣金額將達(dá)6.82萬(wàn)億元,在我國(guó)滲透率將達(dá)到79.5%。所以這是一個(gè)巨大的市場(chǎng),也是未來(lái)的主流方向。在2020年的疫情中,線下實(shí)體經(jīng)營(yíng)店鋪受到了非常巨大的沖擊,街道空蕩蕩的,原本熙熙攘攘的商場(chǎng)變得很冷清,營(yíng)商環(huán)境也不容樂(lè)觀。而線上購(gòu)物已經(jīng)成為了帶動(dòng)我國(guó)的經(jīng)濟(jì)發(fā)展的最為核心的增長(zhǎng)極,引領(lǐng)中國(guó)經(jīng)濟(jì)不斷向前。成為將來(lái)社會(huì)經(jīng)濟(jì)不斷發(fā)展的重要支柱,所以我認(rèn)為不管是現(xiàn)在還是未來(lái),網(wǎng)絡(luò)購(gòu)物都將是大有可為的。網(wǎng)購(gòu)種類豐富全面,省時(shí)省力。如今各種網(wǎng)購(gòu)平臺(tái)混雜,網(wǎng)上購(gòu)物商品的質(zhì)量也參次不齊,軟件公司各種獲取身份信息的行為讓個(gè)人隱私安全權(quán)益難以得到應(yīng)有的保障,而一個(gè)好的網(wǎng)上購(gòu)物商城不僅能給消費(fèi)者提供更好的消費(fèi)體驗(yàn),還能有效的保障消費(fèi)的權(quán)益,需要嚴(yán)格對(duì)商品質(zhì)量的把關(guān)和對(duì)服務(wù)的全面升級(jí)。1.2研究的內(nèi)容和主要工作1.2.1研究的內(nèi)容先詳細(xì)分析和描述系統(tǒng)設(shè)計(jì)的業(yè)務(wù)流程、目標(biāo)及功能。然后研究與設(shè)計(jì)系統(tǒng)的數(shù)據(jù)庫(kù)、模塊以及具有的功能。本系統(tǒng)主要設(shè)計(jì)了登錄注冊(cè)模塊、用戶服務(wù)模塊、商品服務(wù)模塊、購(gòu)物車模塊、訂單服務(wù)模塊、檢索服務(wù)模塊、庫(kù)存服務(wù)模塊、網(wǎng)關(guān)服務(wù)模塊以及第三方服務(wù)模塊。管理員可以管理菜單分類、商品屬性分組、商品規(guī)格參數(shù)、商品銷售屬性、商品的增刪改查、商品庫(kù)存的增刪改查、以及商品的上架。用戶可以搜索商品、查看商品、加入購(gòu)物車、提交訂單、支付和查看訂單。前后端主要使用的技術(shù)棧如下表:前端技術(shù)棧表STYLEREF1\s0SEQ表\*ARABIC\s11前端技術(shù)棧技術(shù)版本類型Vue2.5.16漸進(jìn)式框架Element2.8.2UI組件npm6.9.0包管理器后端技術(shù)棧表STYLEREF1\s0SEQ表\*ARABIC\s12后端技術(shù)棧技術(shù)版本類型SpringBoot2.1.8.RELEASE項(xiàng)目框架Maven3.6.1項(xiàng)目構(gòu)建系統(tǒng)MySQL5.7關(guān)系型數(shù)據(jù)庫(kù)Redis2.1.8.RELEASE緩存數(shù)據(jù)庫(kù)Docker19.03.12應(yīng)用容器引擎Nacos1.1.4服務(wù)注冊(cè)發(fā)現(xiàn)中心Nginx1.14HTTP和反向代理web服務(wù)器mybatis-plus3.2.0持久層框架openfen2.1.3.RELEASE遠(yuǎn)程調(diào)用ElasticSearch7.6.2分布式搜索分析引擎oauth2.02.0開(kāi)放授權(quán)標(biāo)準(zhǔn)Kibana7.6.2數(shù)據(jù)分析RabbitMQ3.8.9消息中間件Lombok1.18.8簡(jiǎn)化消除冗余代碼工具thymeleaf2.1.8.RELEASEHTML5模板引擎1.2.2本人主要工作本人主要負(fù)責(zé)微服務(wù)購(gòu)物商城系統(tǒng)業(yè)務(wù)分析中登錄注冊(cè)服務(wù)流程分析、邏輯模型、靜態(tài)頁(yè)面設(shè)計(jì)、UML類圖以及流程圖的構(gòu)建,數(shù)據(jù)庫(kù)設(shè)計(jì),業(yè)務(wù)流程分析,完成各個(gè)功能模塊的具體實(shí)現(xiàn),頁(yè)面美化,后期系統(tǒng)測(cè)試和維護(hù)。1.3論文結(jié)構(gòu)本文中各個(gè)章節(jié)內(nèi)容:第一章介紹了購(gòu)物商城系統(tǒng)的項(xiàng)目背景,本系統(tǒng)研究的主要內(nèi)容以及本人的主要工作。第二章對(duì)業(yè)務(wù)進(jìn)行詳細(xì)的研究與需求分析,包括:業(yè)務(wù)描述、業(yè)務(wù)流程分析和和系統(tǒng)用例分析。第三章對(duì)系統(tǒng)進(jìn)行設(shè)計(jì),包括:體系架構(gòu)設(shè)計(jì)、功能模塊設(shè)計(jì)、實(shí)體類分析、數(shù)據(jù)庫(kù)表設(shè)計(jì)。第四章對(duì)系統(tǒng)各個(gè)模塊功能的實(shí)現(xiàn)及前后端界面、部分代碼的展示。第六章總結(jié)了本文中所完成的工作,并且對(duì)個(gè)人的進(jìn)一步的工作進(jìn)行展望。2需求分析2.1業(yè)務(wù)分析2.1.1業(yè)務(wù)描述現(xiàn)在中國(guó)市場(chǎng)上比較常見(jiàn)的商城管理模式有六種:B2B、B2C、
C2B、C2C、O2O和O2P。1、B2BMode。B2B(BusinesstoBusiness),是指商家對(duì)商家。2、B2CMode。B2C(BusinesstoConsumer),它是直接向消費(fèi)者銷售產(chǎn)品和服務(wù)。也就是我們可以通過(guò)經(jīng)??吹降墓?yīng)商家直接的把產(chǎn)品給到用戶手中的方式,也就是中國(guó)商業(yè)零售發(fā)展方式。3、C2BMode。C2B(CustomertoBusiness),先先有消費(fèi)客戶群體提出相關(guān)產(chǎn)品發(fā)展需求,后有負(fù)責(zé)公司生產(chǎn)的企業(yè)按需求組織生產(chǎn)技術(shù)產(chǎn)品。即從消費(fèi)客戶到生產(chǎn)的企業(yè)的模式。它是在企業(yè)生產(chǎn)之前,以消費(fèi)者需求為前提生產(chǎn)的。4、C2CMode。C2C(CustomertoConsumer),交易模式是在消費(fèi)用戶與消費(fèi)用戶之間發(fā)生的。5、O2OMode。O2O(OnlineToOfline),線上市場(chǎng)和線下市場(chǎng)的有機(jī)結(jié)合。線上快速支付,線下優(yōu)質(zhì)服務(wù)。6、O2PMode。(也就是OnlineToPlace),它的營(yíng)銷模式是一種本土化的02O行為。而我們的系統(tǒng)采用的是B2C的自營(yíng)商品模式,可以更直接、高效的把控商品的質(zhì)量,以及更好的服務(wù)客戶。2.1.2業(yè)務(wù)人員分析(1)用戶:可以注冊(cè)登錄、可以檢索商品、查看商品詳情、加入購(gòu)物車、可以修改購(gòu)物車中商品數(shù)量、可以刪除購(gòu)物車中商品、提交選中商品訂單、付款之后可以查看訂單的詳情。(2)管理員:在后臺(tái)可以對(duì)商品的信息修改、刪除,商品庫(kù)存的修改,上架商品到商城中。2.2系統(tǒng)業(yè)務(wù)流程分析2.2.1用戶登錄流程如下圖2-1所示,購(gòu)物商城系統(tǒng)登錄注冊(cè)工作流程說(shuō)明:用戶在登錄界面開(kāi)始登錄,如果是新用戶,前往注冊(cè)界面,注冊(cè)成功返回登錄頁(yè)面。使用普通登錄和第三方登錄則在后臺(tái)進(jìn)行驗(yàn)證,驗(yàn)證成功進(jìn)入后臺(tái)首頁(yè)。圖2SEQ圖\*ARABIC\s21登錄注冊(cè)流程圖2.2.2用戶購(gòu)物流程如下圖2-2所示,購(gòu)物商城系統(tǒng)購(gòu)物工作流程說(shuō)明:用戶在商城首頁(yè)可以選擇搜索自己想買的商品,也可以通過(guò)菜單欄的商品分類查看商品列表。用戶在商品列表中點(diǎn)擊要購(gòu)買的商品可以在商品詳情頁(yè)中查看。用戶在商品詳情頁(yè)中可以選擇想要銷售屬性,點(diǎn)擊加入購(gòu)物車。用戶可以在購(gòu)物車中對(duì)商品進(jìn)行增加,減少以及刪除。用戶在點(diǎn)擊選中要購(gòu)買的商品,然后提交訂單。訂單驗(yàn)證完成后,支付確認(rèn)也點(diǎn)擊確定。跳轉(zhuǎn)到支付寶的沙箱支付頁(yè)面支付成功之后,重定向回訂單頁(yè)面。同時(shí)修改訂單表中訂單狀態(tài)。圖2SEQ圖\*ARABIC\s22購(gòu)物流程圖2.3系統(tǒng)用例分析2.3.1用戶角色分析從雁來(lái)購(gòu)物商城系統(tǒng)的所需要的功能需求分析,系統(tǒng)主要涉及到以下角色:表2-3用戶角色劃分表角色職責(zé)或功能用戶系統(tǒng)主要參與者,可以注冊(cè)登錄、可以檢索商品、查看商品詳情、加入購(gòu)物車、可以修改購(gòu)物車中商品數(shù)量、可以刪除購(gòu)物車中商品、提交選中商品訂單、付款之后可以查看訂單的詳情。管理人員系統(tǒng)的管理人員,負(fù)責(zé)上傳考勤信息、考勤備份等2.3.2用例分析下面給出了商城系統(tǒng)的總體用例圖,包含登錄注冊(cè)、搜索商品、購(gòu)物車、訂單、商品系統(tǒng)、庫(kù)存系統(tǒng)六個(gè)模塊,如下圖所示:圖2SEQ圖\*ARABIC\s23系統(tǒng)總體用例圖注冊(cè)登錄用例圖2SEQ圖\*ARABIC\s24用戶登錄注冊(cè)用例圖如上圖所示,用戶對(duì)注冊(cè)登錄的用例。用戶在商城登錄頁(yè)面可以進(jìn)行普通登錄以及微博登錄,新用戶可以進(jìn)行用戶注冊(cè)。表2-4用戶注冊(cè)用例描述描述項(xiàng)說(shuō)明名稱用戶注冊(cè)描述描述了用戶使用本系統(tǒng)注冊(cè)登錄模塊進(jìn)行用戶注冊(cè)的過(guò)程參與者用戶前置條件必須是新用戶后置條件生成用戶信息到用戶表基本操作流在系統(tǒng)中點(diǎn)擊“免費(fèi)注冊(cè)”;進(jìn)入系統(tǒng)注冊(cè)界面;輸入新用戶的賬號(hào)、密碼、手機(jī)號(hào);點(diǎn)擊“發(fā)送驗(yàn)證碼”按鈕;輸入驗(yàn)證碼;點(diǎn)擊“立即注冊(cè)”按鈕。表2-5普通登錄用例描述描述項(xiàng)說(shuō)明名稱普通登錄描述描述了用戶使用本系統(tǒng)注冊(cè)登錄模塊進(jìn)行普通登錄的過(guò)程參與者用戶前置條件用戶已在用戶表中存在后置條件登錄成功進(jìn)入商城首頁(yè)基本操作流在系統(tǒng)中點(diǎn)擊“你好,請(qǐng)登錄”按鈕;進(jìn)入系統(tǒng)登錄頁(yè)面,輸入用戶名、密碼;點(diǎn)擊登錄按鈕;表2-6微博登錄用例描述描述項(xiàng)說(shuō)明名稱微博登錄描述描述了用戶使用本系統(tǒng)注冊(cè)登錄模塊進(jìn)行微博登錄的過(guò)程參與者用戶前置條件后置條件登錄成功進(jìn)入商城首頁(yè)基本操作流在系統(tǒng)中點(diǎn)擊“你好,請(qǐng)登錄”按鈕;進(jìn)入系統(tǒng)登錄頁(yè)面,點(diǎn)擊“微博”按鈕圖標(biāo);跳轉(zhuǎn)出掃碼登錄界面,用微博掃描登錄;搜索商品用例圖2SEQ圖\*ARABIC\s25用戶搜索商品用例圖如上圖所示,用戶對(duì)搜索商品的用例。用戶在商城首頁(yè)可以進(jìn)行搜索商品,在商品列表中選擇商品查看商品的詳情,然后現(xiàn)在商品參數(shù)加入到購(gòu)物車當(dāng)中。表2-7搜索商品用例描述描述項(xiàng)說(shuō)明名稱搜索商品描述描述了用戶使用本系統(tǒng)搜索模塊進(jìn)行查找商品的過(guò)程參與者用戶前置條件商品已經(jīng)上架后置條件到達(dá)商品列表頁(yè)面基本操作流在商城首頁(yè)中點(diǎn)擊商品的分類菜單或者在搜索框中搜索商品;表2-8商品詳情用例描述描述項(xiàng)說(shuō)明名稱商品詳情描述描述了用戶使用本系統(tǒng)搜索模塊選擇商品進(jìn)行查看商品詳情的過(guò)程參與者用戶前置條件商品已經(jīng)上架后置條件到達(dá)商品詳情頁(yè)基本操作流在商品列表頁(yè)中點(diǎn)擊要購(gòu)買的商品;表2-9選擇商品參數(shù)用例描述描述項(xiàng)說(shuō)明名稱選擇商品參數(shù)描述描述了用戶使用本系統(tǒng)在商品詳情頁(yè)中選擇要購(gòu)買商品銷售參數(shù)的過(guò)程參與者用戶前置條件商品已經(jīng)上架后置條件選中該商品的sku基本操作流在商品詳情頁(yè)中選擇銷售屬性;表2-10加入購(gòu)物車用例描述描述項(xiàng)說(shuō)明名稱加入購(gòu)物車描述描述了用戶使用本系統(tǒng)在商品詳情頁(yè)選擇要購(gòu)買商品銷售參數(shù)的之后加入到購(gòu)物車中過(guò)程參與者用戶前置條件商品已經(jīng)上架,已選中該商品的sku后置條件商品信息在購(gòu)物車列表中基本操作流點(diǎn)擊商品詳情頁(yè)中的“加入購(gòu)物車”按鈕;購(gòu)物車用例圖2SEQ圖\*ARABIC\s26用戶購(gòu)物車用例圖如上圖所示,用戶對(duì)購(gòu)物車的用例。用戶在商城購(gòu)物車頁(yè)面可以對(duì)購(gòu)物車之中的商品進(jìn)行數(shù)量的加減,還可以刪除想刪除的商品,也可以選擇其中的部分商品進(jìn)行結(jié)算,然后支付。表2-11購(gòu)物車商品數(shù)量修改用例描述描述項(xiàng)說(shuō)明名稱購(gòu)物車商品數(shù)量修改描述描述了用戶使用本系統(tǒng)購(gòu)物車模塊頁(yè)面中修改購(gòu)物車商品數(shù)量的過(guò)程參與者用戶前置條件商品已經(jīng)加入到購(gòu)物車之中后置條件購(gòu)物車中商品數(shù)量修改基本操作流在商城首頁(yè)中點(diǎn)擊“我的購(gòu)物車”按鈕;進(jìn)入到購(gòu)物車界面,點(diǎn)擊“+”按鈕,購(gòu)物車商品數(shù)量增加。點(diǎn)擊“-”按鈕,購(gòu)物車商品數(shù)量增加。表2-12購(gòu)物車商品刪除用例描述描述項(xiàng)說(shuō)明名稱購(gòu)物車商品刪除描述描述了用戶使用本系統(tǒng)購(gòu)物車模塊刪除購(gòu)物車商品的過(guò)程參與者用戶前置條件商品已經(jīng)加入到購(gòu)物車之中后置條件該商品從購(gòu)物車頁(yè)面中刪除基本操作流在購(gòu)物車頁(yè)面中點(diǎn)擊“刪除”按鈕,在彈框中再次點(diǎn)擊“刪除”;表2-13選中購(gòu)物車商品結(jié)算用例描述描述項(xiàng)說(shuō)明名稱選中購(gòu)物車商品結(jié)算描述描述了用戶使用本系統(tǒng)購(gòu)物車模塊選中購(gòu)物車商品提交訂單的過(guò)程參與者用戶前置條件商品已經(jīng)加入到購(gòu)物車之中,用戶已登錄后置條件商品加入到訂單頁(yè)面基本操作流在購(gòu)物車中選擇要結(jié)算的商品點(diǎn)擊“去結(jié)算”按鈕;在訂單確認(rèn)頁(yè)中點(diǎn)擊“提交訂單”;表2-14支付用例描述描述項(xiàng)說(shuō)明名稱支付描述描述了用戶使用本系統(tǒng)訂單中支付的過(guò)程參與者用戶前置條件商品已經(jīng)生成訂單后置條件訂單中商品的狀態(tài)改變基本操作流在支付頁(yè)中點(diǎn)擊“支付寶”支付按鈕;跳轉(zhuǎn)到支付寶沙箱支付頁(yè)面,登錄支付寶賬號(hào);輸入支付寶支付密碼;查看訂單用例圖2SEQ圖\*ARABIC\s27用戶查看訂單用例圖如上圖所示,用戶對(duì)查看訂單的用例。用戶在商城我的訂單頁(yè)面可以查看當(dāng)前登錄賬號(hào)的所有已生成的訂單詳情。表2-15查看訂單用例描述描述項(xiàng)說(shuō)明名稱查看訂單描述描述了用戶使用本系統(tǒng)查看已購(gòu)買商品的過(guò)程參與者用戶前置條件商品已購(gòu)買、用戶已登錄后置條件加載已購(gòu)買商品列表信息基本操作流在商城首頁(yè)點(diǎn)擊“我的頂單”按鈕商品管理用例圖2SEQ圖\*ARABIC\s28管理員管理商品用例圖如上圖所示,管理員對(duì)商品管理的用例。用戶在商城后臺(tái)商品管理頁(yè)面可以對(duì)分類菜單進(jìn)行維護(hù)、商品品牌的維護(hù)、商品屬性分組的維護(hù)、商品規(guī)格參數(shù)的維護(hù)、商品銷售屬性的維護(hù)、商品的維護(hù)以及商品的上架操作。表2-16分類菜單增刪改查用例描述描述項(xiàng)說(shuō)明名稱分類菜單增刪改查描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)分類菜單增刪改查的過(guò)程參與者管理員前置條件管理員已登錄后置條件商城頁(yè)面中分類菜單改變基本操作流點(diǎn)擊“分類維護(hù)”按鈕,點(diǎn)擊“append”,可以對(duì)菜單增加。點(diǎn)擊“edit”可以對(duì)菜單刪除。表2-17商品品牌的增刪改查用例描述描述項(xiàng)說(shuō)明名稱商品品牌的增刪改查描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)商品品牌種類增刪改查的過(guò)程參與者管理員前置條件管理員已登錄后置條件商城頁(yè)面中品牌種類改變基本操作流點(diǎn)擊“品牌管理”按鈕,點(diǎn)擊“新增”按鈕;輸入品牌名、品牌logo、介紹、檢索字母等,點(diǎn)擊“確定”按鈕,品牌種類增加;點(diǎn)擊“刪除”按鈕,品牌種類減少。表2-18商品屬性分組的增刪改查用例描述描述項(xiàng)說(shuō)明名稱商品屬性分組的增刪改查描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)商品屬性分組增刪改查的過(guò)程參與者管理員前置條件管理員已登錄后置條件商城頁(yè)面中屬性分組改變基本操作流點(diǎn)擊“屬性分組”按鈕,點(diǎn)擊“新增”按鈕;輸入組名、排序、所屬分類,點(diǎn)擊“確定”按鈕,屬性分組增加;點(diǎn)擊“刪除”按鈕,屬性分組減少。表2-19商品規(guī)格參數(shù)的增刪改查用例描述描述項(xiàng)說(shuō)明名稱商品規(guī)格參數(shù)的增刪改查描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)商品規(guī)格參數(shù)增刪改查的過(guò)程參與者管理員前置條件管理員已登錄后置條件商城頁(yè)面中規(guī)格參數(shù)改變基本操作流點(diǎn)擊“規(guī)格參數(shù)”按鈕,點(diǎn)擊“新增”按鈕;輸入屬性名、可選值、所屬分類、所屬分組,點(diǎn)擊“確定”按鈕,規(guī)格參數(shù)增加;點(diǎn)擊“刪除”按鈕,規(guī)格參數(shù)減少。表2-20商品銷售屬性的增刪改查用例描述描述項(xiàng)說(shuō)明名稱商品銷售屬性的增刪改查描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)商品銷售屬性增刪改查的過(guò)程參與者管理員前置條件管理員已登錄后置條件商城頁(yè)面中銷售參數(shù)改變基本操作流(1)點(diǎn)擊“銷售參數(shù)”按鈕,點(diǎn)擊“新增”按鈕;輸入屬性名、可選值、所屬分類、所屬分組,點(diǎn)擊“確定”按鈕,銷售參數(shù)增加;點(diǎn)擊“刪除”按鈕,銷售參數(shù)減少。表2-21新增商品用例描述描述項(xiàng)說(shuō)明名稱新增商品描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)商品增加的過(guò)程參與者管理員前置條件管理員已登錄后置條件商品表中新增商品基本操作流點(diǎn)擊“發(fā)布商品”按鈕,輸入商品名、商品描述、選擇分類、商品重量、商品介紹圖片、商品圖片,點(diǎn)擊“設(shè)置基本參數(shù)”按鈕;設(shè)置好規(guī)格參數(shù)之后,點(diǎn)擊“設(shè)置銷售屬性”按鈕;設(shè)置好規(guī)格參數(shù)之后,點(diǎn)擊“設(shè)置SKU信息”按鈕;然后點(diǎn)擊“保存商品信息”按鈕,商品新增完成;表2-22商品的刪除用例描述描述項(xiàng)說(shuō)明名稱商品的刪除描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)商品維護(hù)的過(guò)程參與者管理員前置條件管理員已登錄后置條件商品表中商品改變基本操作流點(diǎn)擊“商品管理”按鈕,點(diǎn)擊“刪除”按鈕,商品減少。表2-23商品上架用例描述描述項(xiàng)說(shuō)明名稱商品上架描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)商品進(jìn)行上架到商城的過(guò)程參與者管理員前置條件管理員已登錄、商品已新增后置條件商城頁(yè)面中有該商品基本操作流點(diǎn)擊“spu管理”按鈕,點(diǎn)擊“上架”按鈕;庫(kù)存管理用例圖2SEQ圖\*ARABIC\s29管理員庫(kù)存管理用例圖如上圖所示,管理員對(duì)庫(kù)存管理的用例。用戶在商城后臺(tái)庫(kù)存管理頁(yè)面可以對(duì)倉(cāng)庫(kù)進(jìn)行維護(hù)、以及對(duì)sku的庫(kù)存進(jìn)行增加、修改、刪除等操作。表2-24倉(cāng)庫(kù)增加用例描述描述項(xiàng)說(shuō)明名稱倉(cāng)庫(kù)增加描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)倉(cāng)庫(kù)進(jìn)行增加的過(guò)程參與者管理員前置條件管理員已登錄后置條件商品可在該倉(cāng)庫(kù)存儲(chǔ)基本操作流在后臺(tái)管理系統(tǒng)中點(diǎn)擊“倉(cāng)庫(kù)維護(hù)”按鈕,點(diǎn)擊“新增”按鈕;輸入倉(cāng)庫(kù)名、倉(cāng)庫(kù)地址、區(qū)域編碼,點(diǎn)擊確定;表2-25倉(cāng)庫(kù)修改用例描述描述項(xiàng)說(shuō)明名稱倉(cāng)庫(kù)增加描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)倉(cāng)庫(kù)進(jìn)行修改的過(guò)程參與者管理員前置條件管理員已登錄后置條件倉(cāng)庫(kù)信息改變基本操作流在后臺(tái)管理系統(tǒng)中點(diǎn)擊“倉(cāng)庫(kù)維護(hù)”按鈕,點(diǎn)擊“修改”按鈕;修改倉(cāng)庫(kù)名、倉(cāng)庫(kù)地址、區(qū)域編碼,點(diǎn)擊確定;表2-26倉(cāng)庫(kù)刪除用例描述描述項(xiàng)說(shuō)明名稱倉(cāng)庫(kù)刪除描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)倉(cāng)庫(kù)進(jìn)行刪除的過(guò)程參與者管理員前置條件管理員已登錄后置條件倉(cāng)庫(kù)從界面中移除基本操作流在后臺(tái)管理系統(tǒng)中點(diǎn)擊“倉(cāng)庫(kù)維護(hù)”按鈕,點(diǎn)擊“刪除”按鈕;表2-27sku庫(kù)存增加用例描述描述項(xiàng)說(shuō)明名稱sku庫(kù)存增加描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)sku庫(kù)存進(jìn)行增加的過(guò)程參與者管理員前置條件管理員已登錄、商品已新增后置條件商品庫(kù)存增加基本操作流在后臺(tái)管理系統(tǒng)中點(diǎn)擊“商品庫(kù)存”按鈕,點(diǎn)擊“新增”按鈕;輸入sku_id、選擇倉(cāng)庫(kù)、庫(kù)存數(shù)、sku_name,點(diǎn)擊確定;表2-28sku庫(kù)存修改用例描述描述項(xiàng)說(shuō)明名稱sku庫(kù)存修改描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)sku庫(kù)存進(jìn)行修改的過(guò)程參與者管理員前置條件管理員已登錄、商品已新增后置條件商品庫(kù)存信息改變基本操作流在后臺(tái)管理系統(tǒng)中點(diǎn)擊“商品庫(kù)存”按鈕,點(diǎn)擊“修改”按鈕;輸入sku_id、選擇倉(cāng)庫(kù)、庫(kù)存數(shù)、sku_name,點(diǎn)擊確定;表2-29sku庫(kù)存刪除用例描述描述項(xiàng)說(shuō)明名稱sku庫(kù)存刪除描述描述了管理員使用后臺(tái)管理系統(tǒng)對(duì)sku庫(kù)存進(jìn)行刪除的過(guò)程參與者管理員前置條件管理員已登錄、商品已新增后置條件商品無(wú)庫(kù)存基本操作流在后臺(tái)管理系統(tǒng)中點(diǎn)擊“商品庫(kù)存”按鈕,點(diǎn)擊“刪除”按鈕;3軟件設(shè)計(jì)3.1軟件體系結(jié)構(gòu)設(shè)計(jì)系統(tǒng)采用當(dāng)前主流技術(shù),前端技術(shù)棧有Node.js、vue、Element-ui、ES6等技術(shù),后端技術(shù)棧有SpringBoot、SpringCloudAlibaba、Lombok、Mybatis-plus、MySql、Redis、Ngnix、Maven等技術(shù)。以上都是目前主流的技術(shù)框架,非常成熟穩(wěn)定。采用前端Visual
Studio代碼開(kāi)發(fā)工具,開(kāi)源、免費(fèi)并與許多插件集成是Visual
Studio
Code的優(yōu)勢(shì),可以協(xié)助我們更快的開(kāi)發(fā)。后端系統(tǒng)開(kāi)發(fā)研究工具可以使用IntelliJ
IDEA,IntelliJ
IDEA是目前主流的Java開(kāi)發(fā)集成環(huán)境,比Eclipse更加智能,人性化。同時(shí)十分強(qiáng)大。數(shù)據(jù)庫(kù)使用MySQL,免費(fèi),支持高并發(fā),語(yǔ)法簡(jiǎn)單,操作方便。系統(tǒng)開(kāi)發(fā)按照J(rèn)ava開(kāi)發(fā)規(guī)范要求,提高企業(yè)代碼的可靠性、可讀性、可維護(hù)性和可修改性。系統(tǒng)大概的技術(shù)層如下圖:圖31系統(tǒng)架構(gòu)圖前端Vue.js框架一種用于構(gòu)建客戶界面的漸進(jìn)式的JavaScript框架是Vue.js.其優(yōu)點(diǎn)是體積更小、運(yùn)行效率更高、雙向數(shù)據(jù)綁定、生態(tài)豐富、學(xué)習(xí)成本低。成熟穩(wěn)定,開(kāi)發(fā)成本低。系統(tǒng)主要采用Vue腳手架實(shí)現(xiàn)后臺(tái)管理系統(tǒng)的模塊化開(kāi)發(fā)??梢詥为?dú)于Model的變化和更改是vue.js的一大特點(diǎn)。而且能夠在多個(gè)view重用一個(gè)ViewModel的視圖邏輯,可重用性強(qiáng)。同時(shí)Vue的數(shù)據(jù)與視圖同步可以使我們專注于業(yè)務(wù)層面上有關(guān)data以及邏輯的工作。后端SpringBoot框架可以以jar的方式進(jìn)行單獨(dú)的運(yùn)行SpringBoot,不用進(jìn)行單獨(dú)去下載Tomcat之類的服務(wù)器裝載springboot項(xiàng)目,內(nèi)嵌到容器設(shè)計(jì)中去,使得學(xué)生我們可以讓項(xiàng)目管理更加經(jīng)濟(jì)快速的運(yùn)行,也降低企業(yè)項(xiàng)目對(duì)運(yùn)行工作環(huán)境的基本發(fā)展要求,環(huán)境中配置好jdk就可以了。SpringBoot比Spring提供了更多的注解,大量使用了自動(dòng)化配置,簡(jiǎn)單了開(kāi)發(fā)的進(jìn)程。數(shù)據(jù)庫(kù)MySql輕量級(jí)應(yīng)用開(kāi)源的MySQL關(guān)系型數(shù)據(jù)庫(kù)是開(kāi)源可以免費(fèi)的數(shù)據(jù)庫(kù),任何用戶都可以在輕量級(jí)開(kāi)源的MySQL的官網(wǎng)上把它下載下來(lái),是不需要付費(fèi)使用的。輕量級(jí)開(kāi)源MySQL不僅可以在windows系列桌面操作系統(tǒng)上運(yùn)行,還可以在UNIX、Linux、macos等桌面操作系統(tǒng)上運(yùn)行。所以有大量的網(wǎng)絡(luò)站點(diǎn)開(kāi)發(fā)都選擇Linux和UNIX作為站點(diǎn)的服務(wù)器,它在Web應(yīng)用方面的優(yōu)勢(shì)在于輕量級(jí)開(kāi)源的MySQL的跨平臺(tái)性。輕量級(jí)開(kāi)源的MySQL關(guān)系型數(shù)據(jù)庫(kù)管理服務(wù)器是有多用戶、多線程SQL的。能夠快速、有效、安全地處理大量數(shù)據(jù)??焖佟⒔押鸵子?。3.2軟件功能模塊設(shè)計(jì)3.2.1系統(tǒng)總體功能設(shè)計(jì)圖32系統(tǒng)總體功能設(shè)計(jì)圖如上圖3-2所示,雁來(lái)購(gòu)物商城系統(tǒng)一共分為兩大模塊:前端商城界面和后端管理界面。在系統(tǒng)的前端要實(shí)現(xiàn)用戶注冊(cè),用戶注冊(cè)之后可以進(jìn)行普通登錄,還可以用微博掃描登錄。登錄之后搜索商品、查看商品列表、查看商品詳情、選擇要購(gòu)買的商品的屬性、可以將商品加入到購(gòu)物車當(dāng)中、可以對(duì)購(gòu)物車中的商品進(jìn)行各種操作,可以選擇商品進(jìn)行下單付款,可以查看下單的商品。在系統(tǒng)后臺(tái)要實(shí)現(xiàn)管理員對(duì)商品的發(fā)布、更新、刪除,商城菜單欄的更新、刪除,商品庫(kù)存的更新、刪除,商品倉(cāng)庫(kù)的更新、刪除等操作。3.2.2登錄注冊(cè)功能模塊設(shè)計(jì)圖33用戶登錄注冊(cè)模塊縮略類圖圖34注冊(cè)時(shí)序圖如上圖登錄注冊(cè)功能模塊縮略類圖以及注冊(cè)時(shí)序圖中,用戶在商城的登錄注冊(cè)界面,可以實(shí)現(xiàn)登錄和注冊(cè),而登錄注冊(cè)需要?jiǎng)?chuàng)建用戶實(shí)體類,來(lái)驗(yàn)證用戶登錄以及存儲(chǔ)用戶的相關(guān)信息。用戶實(shí)體類中有用戶的id、等級(jí)、賬戶名、密碼、手機(jī)號(hào)、頭像、狀態(tài)、創(chuàng)建時(shí)間、唯一id、訪問(wèn)令牌值、訪問(wèn)令牌的時(shí)間。3.2.3搜索商品功能模塊設(shè)計(jì)圖35用戶搜索商品模塊縮略類圖如上圖用戶搜索商品模塊縮略類圖中,用戶在商城的首頁(yè)中,可以搜索商品、查看商品列表、選擇商品查看商品詳情,這需要?jiǎng)?chuàng)建spu實(shí)體類,spu實(shí)體類中包括spu的id、spu的名字、spu的介紹、所屬的菜單分類、所屬的品牌分類、重量、是否上架狀態(tài)值、創(chuàng)建時(shí)間以及更新時(shí)間,以實(shí)現(xiàn)可以對(duì)商品進(jìn)行以上操作,而對(duì)商品的屬性的選擇,則需要?jiǎng)?chuàng)建sku實(shí)體類,以確實(shí)我們唯一要購(gòu)買的商品。Sku實(shí)體類中包括sku的id、spu的id、sku的名字、sku的介紹、所屬的菜單分類、所屬的品牌分類、默認(rèn)的圖片、sku的標(biāo)題以及價(jià)格。3.2.4購(gòu)物車功能模塊設(shè)計(jì)圖36用戶購(gòu)物車模塊縮略類圖如上圖用戶購(gòu)物車模塊縮略類圖中,用戶要在購(gòu)物車中實(shí)現(xiàn)購(gòu)物車商品數(shù)量的增減、刪除、以及選中商品進(jìn)行結(jié)算操作,需要?jiǎng)?chuàng)建購(gòu)物車信息的實(shí)體類,其中包括購(gòu)物車中所有的商品信息、數(shù)量、商品類型數(shù)量、商品總價(jià)、商品的減免價(jià)格。3.2.5訂單中心功能模塊設(shè)計(jì)圖37用戶訂單模塊縮略類圖如上圖用戶訂單模塊縮略類圖中,用戶要在訂單頁(yè)面中查看當(dāng)前賬號(hào)生成的訂單,需要?jiǎng)?chuàng)建訂單實(shí)體類,其中包括訂單的id、用戶的id、訂單的訂單號(hào)、訂單的創(chuàng)建時(shí)間、用戶的用戶名、訂單總價(jià)、訂單實(shí)際付款、訂單狀態(tài)、收貨人的姓名、收貨人的手機(jī)號(hào)、收貨人的郵編、收貨人所在的省、收貨人所在的市、收貨人所在的區(qū)、收貨人的詳細(xì)地址、支付時(shí)間。3.2.6商品管理功能模塊設(shè)計(jì)圖38管理員商品管理模塊縮略類圖如上圖管理員商品管理模塊縮略類圖中,管理員要在后臺(tái)界面商品管理中實(shí)現(xiàn)對(duì)分類菜單信息的維護(hù),需要?jiǎng)?chuàng)建商品分類實(shí)體類來(lái)實(shí)現(xiàn),商品分類實(shí)體類包括了分類的id、分類的名稱、父分類的id、層級(jí)、以及計(jì)量的單位。管理員要在后臺(tái)界面商品管理中實(shí)現(xiàn)對(duì)品牌信息的維護(hù),需要?jiǎng)?chuàng)建品牌實(shí)體類來(lái)實(shí)現(xiàn),品牌實(shí)體類包括了品牌的id、品牌的名稱、品牌的logo、介紹、以及檢索首字母。管理員要在后臺(tái)界面商品管理中實(shí)現(xiàn)對(duì)規(guī)格參數(shù)和銷售屬性的維護(hù),需要?jiǎng)?chuàng)建屬性分組實(shí)體類來(lái)實(shí)現(xiàn),屬性分組實(shí)體類包括了屬性分組的id、屬性分組的名稱、屬性分組所屬的菜單id。管理員要在后臺(tái)界面商品管理中實(shí)現(xiàn)對(duì)商品的發(fā)布、上架以及維護(hù),需要?jiǎng)?chuàng)建spu實(shí)體類來(lái)實(shí)現(xiàn),spu實(shí)體類中包括spu的id、spu的名字、spu的介紹、所屬的菜單分類、所屬的品牌分類、重量、是否上架狀態(tài)值、創(chuàng)建時(shí)間以及更新時(shí)間。3.2.7庫(kù)存管理功能模塊設(shè)計(jì)圖39管理員庫(kù)存管理模塊縮略類圖如上圖庫(kù)存管理功能模塊縮略類圖中,管理員進(jìn)入后臺(tái)系統(tǒng)的倉(cāng)庫(kù)維護(hù)界面,可以對(duì)倉(cāng)庫(kù)的進(jìn)行增加、修改、刪除,而倉(cāng)庫(kù)的維護(hù)需要?jiǎng)?chuàng)建倉(cāng)庫(kù)信息類,倉(cāng)庫(kù)信息類中需要包含倉(cāng)庫(kù)的id、名字、地址和區(qū)域編碼。還可以通過(guò)商品庫(kù)存管理來(lái)對(duì)哪些倉(cāng)庫(kù)存有多少商品庫(kù)存進(jìn)行設(shè)定。這需要?jiǎng)?chuàng)建商品庫(kù)存信息類需要包含商品庫(kù)存id、sku_id、庫(kù)存、sku名字等。3.3數(shù)據(jù)庫(kù)設(shè)計(jì)3.3.1實(shí)體類關(guān)系分析圖3SEQ圖\*ARABIC\s210系統(tǒng)數(shù)據(jù)表E-R圖如上圖3-10雁來(lái)購(gòu)物商城系統(tǒng)中,用戶和用戶地址、sku、spu是一對(duì)多的關(guān)系,一個(gè)用戶可以擁有多個(gè)收貨的地址,一個(gè)用戶也可以查看多個(gè)spu商品,可以購(gòu)買多個(gè)sku商品。而一個(gè)spu里面也擁有多個(gè)sku以及多個(gè)spu屬性、spu圖片。一個(gè)品牌擁有多個(gè)屬性的分組和多個(gè)spu,一個(gè)屬性分組擁有多個(gè)商品屬性,一個(gè)sku可以生成多個(gè)商品訂單和多個(gè)商品庫(kù)存、擁有多個(gè)sku屬性和多個(gè)sku圖片。而一個(gè)商品的庫(kù)存可以有多個(gè)不同的倉(cāng)庫(kù)。3.3.2數(shù)據(jù)庫(kù)表1、商品屬性表保存商品屬性信息表31商品屬性表字段名字段類型長(zhǎng)度允許空是否主鍵描述attr_idbigintnullNO是屬性idattr_namechar30YES屬性名value_selectchar255YES可選值列表[用逗號(hào)分隔]attr_typetinyintnullYES屬性類型enablebigintnullYES啟用狀態(tài)[0-禁用,1-啟用]catelog_idbigintnullYES所屬分類2、屬性分組表保存屬性分組信息表32屬性分組表字段名字段類型長(zhǎng)度允許空是否主鍵描述attr_group_idbigintnullNO是分組idattr_group_namechar20YES組名descriptvarchar255YES描述catelog_idbigintnullYES所屬分類id3、商品品牌表保存商品品牌信息表3SEQ表\*ARABIC\s13商品品牌表字段名字段類型長(zhǎng)度允許空是否主鍵描述brand_idbigintnullNO是品牌idnamechar50YES品牌名logovarchar2000YES品牌logo地址descriptlongtext4294967295YES介紹first_letterchar1YES檢索首字母4、商品分類表保存商品菜單信息表3SEQ表\*ARABIC\s14商品分類表字段名字段類型長(zhǎng)度允許空是否主鍵描述cat_idbigintnullNO是分類idnamechar50YES分類名稱parent_cidbigintnullYESMUL父分類idcat_levelintnullYES層級(jí)product_countintnullYES商品數(shù)量5、spu屬性表保存spu屬性信息表3SEQ表\*ARABIC\s15spu屬性表字段名字段類型長(zhǎng)度允許空是否主鍵描述idbigintnullNO是idspu_idbigintnullYES商品idattr_idbigintnullYES屬性idattr_namevarchar200YES屬性名attr_valuevarchar200YES屬性值6、sku圖片表保存sku圖片信息表3SEQ表\*ARABIC\s16sku圖片表字段名字段類型長(zhǎng)度允許空是否主鍵描述idbigintnullNO是idsku_idbigintnullYESsku_idimg_urlvarchar255YES圖片地址default_imgintnullYES默認(rèn)圖[0-不是默認(rèn)圖,1-是默認(rèn)圖]7、sku信息表保存sku信息表3SEQ表\*ARABIC\s17sku信息表字段名字段類型長(zhǎng)度允許空是否主鍵描述sku_idbigintnullNO是skuIdspu_idbigintnullYESspuIdsku_namevarchar255YESsku名稱sku_descvarchar2000YESsku介紹描述catalog_idbigintnullYES所屬分類idbrand_idbigintnullYES品牌idsku_default_imgvarchar255YES默認(rèn)圖片sku_titlevarchar255YES標(biāo)題pricedecimalnullYES價(jià)格8、sku銷售屬性表表3SEQ表\*ARABIC\s18sku銷售屬性表字段名字段類型長(zhǎng)度允許空是否主鍵描述idbigintnullNO是idsku_idbigintnullYESsku_idattr_idbigintnullYESattr_idattr_namevarchar200YES銷售屬性名attr_valuevarchar200YES銷售屬性值9、spu圖片表表3SEQ表\*ARABIC\s19spu圖片表字段名字段類型長(zhǎng)度允許空是否主鍵描述idbigintnullNO是idspu_idbigintnullYESspu_idimg_namevarchar200YES圖片名img_urlvarchar255YES圖片地址default_imgtinyintnullYES是否默認(rèn)圖10、spu信息表表3SEQ表\*ARABIC\s110spu信息表字段名字段類型長(zhǎng)度允許空是否主鍵描述idbigintnullNO是商品idspu_namevarchar200YES商品名稱spu_descriptionvarchar1000YES商品描述catalog_idbigintnullYES所屬分類idbrand_idbigintnullYES品牌idweightdecimalnullYESpublish_statustinyintnullYES上架狀態(tài)[0-下架,1-上架]create_timedatetimenullYESupdate_timedatetimenullYES11、收貨地址表表3SEQ表\*ARABIC\s111收貨地址表字段名字段類型長(zhǎng)度允許空是否主鍵描述idbigintnullNO是idmember_idbigintnullYESmember_idnamevarchar255YES收貨人姓名phonevarchar64YES電話post_codevarchar64YES郵政編碼provincevarchar100YES省份/直轄市cityvarchar100YES城市regionvarchar100YES區(qū)detail_addressvarchar255YES詳細(xì)地址(街道)areacodevarchar15YES省市區(qū)代碼default_statustinyintnullYES是否默認(rèn)12、用戶表表3SEQ表\*ARABIC\s112用戶表字段名字段類型長(zhǎng)度允許空是否主鍵描述idbigintnullNO是idlevel_idbigintnullYES會(huì)員等級(jí)idusernamechar64YES用戶名passwordvarchar64YES密碼mobilevarchar20YES手機(jī)號(hào)碼headervarchar500YES頭像statustinyintnullYES啟用狀態(tài)create_timedatetimenullYES注冊(cè)時(shí)間social_uidvarchar225YES社交用戶的唯一idaccess_tokenvarchar255YES訪問(wèn)令牌expires_invarchar255YES訪問(wèn)令牌的時(shí)間13、訂單表表3SEQ表\*ARABIC\s113訂單表字段名字段類型長(zhǎng)度允許空是否主鍵描述idbigintnullNO是idmember_idbigintnullYESmember_idorder_snchar64YES訂單號(hào)create_timedatetimenullYEScreate_timemember_usernamevarchar200YES用戶名total_amountdecimalnullYES訂單總額pay_amountdecimalnullYES應(yīng)付總額freight_amountdecimalnullYES運(yùn)費(fèi)金額statustinyintnullYES訂單狀態(tài)receiver_namevarchar100YES收貨人姓名receiver_phonevarchar32YES收貨人電話receiver_post_codevarchar32YES收貨人郵編receiver_provincevarchar32YES省份/直轄市receiver_cityvarchar32YES城市receiver_regionvarchar32YES區(qū)receiver_detail_addressvarchar200YES詳細(xì)地址payment_timedatetimenullYES支付時(shí)間14、商品庫(kù)存表表3SEQ表\*ARABIC\s114商品庫(kù)存表字段名字段類型長(zhǎng)度允許空是否主鍵描述idbigintnullNO是idsku_idbigintnullYESsku_idware_idbigintnullYES倉(cāng)庫(kù)idstockintnullYES庫(kù)存數(shù)sku_namevarchar200YESsku_namestock_lockedintnullYES鎖定庫(kù)存15、倉(cāng)庫(kù)信息表表3SEQ表\*ARABIC\s115倉(cāng)庫(kù)信息表字段名字段類型長(zhǎng)度允許空是否主鍵描述idbigintnullNO是idnamevarchar255YES倉(cāng)庫(kù)名addressvarchar255YES倉(cāng)庫(kù)地址areacodevarchar20YES區(qū)域編碼4系統(tǒng)實(shí)現(xiàn)4.1注冊(cè)登錄功能實(shí)現(xiàn)“注冊(cè)登錄模塊”實(shí)現(xiàn)了用戶的注冊(cè)、用戶的普通登錄和第三方微博登錄功能。當(dāng)用戶輸入用戶名和密碼通過(guò)前端ajxa傳到后端校驗(yàn)成功之后進(jìn)入商城首頁(yè),失敗則提示錯(cuò)誤重定向回登錄界面。微博掃描二維碼登錄成功后,會(huì)跳轉(zhuǎn)到商城主頁(yè),失敗則重定向回登錄界面。用戶為新用戶時(shí),則前往注冊(cè)用戶界面進(jìn)行注冊(cè),填寫客戶賬號(hào)名和密碼,以及通過(guò)輸入客戶的手機(jī)號(hào)發(fā)送驗(yàn)證號(hào)碼,當(dāng)輸入驗(yàn)證號(hào)碼與系統(tǒng)中生成的驗(yàn)證碼驗(yàn)證一致時(shí),注冊(cè)成功。將客戶數(shù)據(jù)保存到DataBase中,活動(dòng)圖如下:圖41注冊(cè)登錄活動(dòng)圖前端界面設(shè)計(jì)如下圖所示:圖42登錄界面圖圖43注冊(cè)界面圖部分核心代碼:/**
*用戶注冊(cè)
*/
@Override
publicvoidregister(MemberUserRegisterVovo){
MemberEntitymemberEntity=newMemberEntity();
MemberLevelEntitylevelEntity=memberLevelDao.getDefaultLevel();
memberEntity.setLevelId(levelEntity.getId());
checkUserNameUnique(vo.getUserName());
checkPhoneUnique(vo.getPhone());
memberEntity.setMobile(vo.getPhone());
memberEntity.setNickname(vo.getUserName());
memberEntity.setUsername(vo.getUserName());
BCryptPasswordEncoderbCryptPasswordEncoder=newBCryptPasswordEncoder();
Stringencode=bCryptPasswordEncoder.encode(vo.getPassword());
memberEntity.setPassword(encode);
this.baseMapper.insert(memberEntity);
}/**
*判斷用戶名是否重復(fù)
*/
@Override
publicvoidcheckUserNameUnique(StringuserName)throwsUsernameException{
IntegerusernameCount=this.baseMapper.selectCount(newQueryWrapper<MemberEntity>().eq("username",userName));
if(usernameCount>0){
thrownewUsernameException();
}
}/**
*用戶登錄
*/
@Override
publicMemberEntitylogin(MemberUserLoginVovo){
Stringloginacct=vo.getLoginacct();
Stringpassword=vo.getPassword();
MemberEntitymemberEntity=this.baseMapper.selectOne(newQueryWrapper<MemberEntity>()
.eq("username",loginacct).or().eq("mobile",loginacct));
if(memberEntity==null){
returnnull;
}else{
Stringpassword1=memberEntity.getPassword();
BCryptPasswordEncoderpasswordEncoder=newBCryptPasswordEncoder();
booleanmatches=passwordEncoder.matches(password,password1);
if(matches){
returnmemberEntity;
}
}
returnnull;
}
/**
*微博用戶的登錄
*/
@Override
publicMemberEntitylogin(SocialUsersocialUser)throwsException{
Stringuid=socialUser.getUid();
MemberEntitymemberEntity=this.baseMapper.selectOne(newQueryWrapper<MemberEntity>().eq("social_uid",uid));
if(memberEntity!=null){
MemberEntityupdate=newMemberEntity();
update.setId(memberEntity.getId());
update.setAccessToken(socialUser.getAccess_token());
update.setExpiresIn(socialUser.getExpires_in());
this.baseMapper.updateById(update);
memberEntity.setAccessToken(socialUser.getAccess_token());
memberEntity.setExpiresIn(socialUser.getExpires_in());
returnmemberEntity;
}else{
MemberEntityregister=newMemberEntity();
Map<String,String>query=newHashMap<>();
query.put("access_token",socialUser.getAccess_token());
query.put("uid",socialUser.getUid());
HttpResponseresponse=HttpUtils.doGet("","/2/users/show.json","get",newHashMap<String,String>(),query);
if(response.getStatusLine().getStatusCode()==200){
Stringjson=EntityUtils.toString(response.getEntity());
JSONObjectjsonObject=JSON.parseObject(json);
Stringname=jsonObject.getString("name");
Stringgender=jsonObject.getString("gender");
StringprofileImageUrl=jsonObject.getString("profile_image_url");
register.setNickname(name);
register.setGender("m".equals(gender)?1:0);
register.setHeader(profileImageUrl);
register.setCreateTime(newDate());
register.setSocialUid(socialUser.getUid());
register.setAccessToken(socialUser.getAccess_token());
register.setExpiresIn(socialUser.getExpires_in());
this.baseMapper.insert(register);
}
returnregister;
}
}實(shí)現(xiàn)通過(guò)手機(jī)號(hào)發(fā)送短信使用阿里云的短信服務(wù)。當(dāng)客戶按發(fā)送驗(yàn)證號(hào)碼的按鈕時(shí),登錄服務(wù)通過(guò)openfeign調(diào)用第三方服務(wù)中的發(fā)送短信接口,將系統(tǒng)中隨機(jī)生成的六位數(shù)字驗(yàn)證碼發(fā)送到用戶手機(jī)上。當(dāng)未通過(guò)系統(tǒng)的校驗(yàn)時(shí),則通過(guò)BindResult這個(gè)vo封裝錯(cuò)誤信息,并重新定向至注冊(cè)界面。若通過(guò)系統(tǒng)的校驗(yàn),則需要判斷驗(yàn)證號(hào)碼是否正確,可以從redis中取值,如果正常的話通過(guò)客戶服務(wù)注冊(cè),將在ums_member表中保存客戶的數(shù)據(jù)。重定向至登錄界頁(yè)則表示客戶服務(wù)調(diào)用成功,否則封裝遠(yuǎn)程服務(wù)返回的錯(cuò)誤信息返回至注冊(cè)頁(yè)面。圖片上傳的實(shí)現(xiàn)在阿里云中創(chuàng)建Bucket,然后根據(jù)阿里云的官方文檔整合到我們的系統(tǒng)中,原理如下圖:圖44上傳到OSS原理圖短信發(fā)送界面如下圖:圖45手機(jī)接收驗(yàn)證碼圖核心代碼如下:@ResponseBody
@GetMapping("/sms/sendCode")
publicRsendCode(@RequestParam("phone")Stringphone){
StringredisCode=redisTemplate.opsForValue().get(AuthServerConstant.SMS_CODE_CACHE_PREFIX+phone);
if(!StringUtils.isEmpty(redisCode)){
longl=Long.parseLong(redisCode.split("_")[1]);
if(System.currentTimeMillis()-l<60000){
returnR.error(BizCodeEnum.SMS_CODE_EXCEPTION.getCode(),BizCodeEnum.SMS_CODE_EXCEPTION.getMsg());
}
}
intcode=(int)((Math.random()*9+1)*100000);
StringcodeNum=String.valueOf(code);
StringredisStorage=codeNum+"_"+System.currentTimeMillis();
redisTemplate.opsForValue().set(AuthServerConstant.SMS_CODE_CACHE_PREFIX+phone,
redisStorage,10,TimeUnit.MINUTES);
thirdPartFeignService.sendCode(phone,codeNum);
returnR.ok();
}@GetMapping(value="/sendCode")
publicRsendCode(@RequestParam("phone")Stringphone,@RequestParam("code")Stringcode){
smsComponent.sendSmsCode(phone,code);
returnR.ok();
}@Component
@ConfigurationProperties(prefix="spring.cloud.alicloud.sms")
@Data
publicclassSmsComponent{
privateStringaccessKeyId;
privateStringsecret;
privateStringsysVersion;
privateStringsignName;
privateStringtemplateCode;
publicvoidsendSmsCode(Stringphone,Stringcode){
DefaultProfileprofile=DefaultProfile.getProfile("cn-hangzhou",getAccessKeyId(),getSecret());
IAcsClientclient=newDefaultAcsClient(profile);
CommonRequestrequest=newCommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId","cn-hangzhou");
request.putQueryParameter("PhoneNumbers",phone);
request.putQueryParameter("SignName",getSignName());
request.putQueryParameter("TemplateCode",getTemplateCode());
request.putQueryParameter("TemplateParam","{\"code\":\""+code+"\"}");
try{
CommonResponseresponse=client.getCommonResponse(request);
System.out.println(response.getData());
}catch(ServerExceptione){
e.printStackTrace();
}catch(ClientExceptione){
e.printStackTrace();
}
}
}4.2搜索商品功能實(shí)現(xiàn)搜索商品功能的實(shí)現(xiàn)將請(qǐng)求參數(shù)的封裝到SearchParam這個(gè)vo中,返回參數(shù)則封裝在名字為SearchResult的vo中。然后在service層,將封裝好的SearchParam組建查詢條件,再將返回后的結(jié)果封裝成SearchResult,在頁(yè)面中渲染出來(lái)。前端界面展示如下圖:圖46商品列表圖部分核心代碼展示:
@Override
publicSearchResultsearch(SearchParamsearchParam){
SearchResultresult=null;
SearchRequestsearchRequest=buildSearchRequest(searchParam);
try{
SearchResponseresponse=client.search(searchRequest,YanlaimallElasticSearchConfig.COMMON_OPTIONS);
result=buildSearchResult(response,searchParam);
}catch(IOExceptione){
e.printStackTrace();
}
returnresult;
}商品詳情頁(yè)的實(shí)現(xiàn)先將sku的信息抽取到SkuItemVo中,在service層中將這些信息通過(guò)model用thymeleaf在前端頁(yè)面渲染出來(lái)。通過(guò)spuId和catalog_Id在數(shù)據(jù)庫(kù)中查詢對(duì)應(yīng)規(guī)格參數(shù),所以我們需要通過(guò)productms_attr_group表獲得catalog_Id的值和attr_GroupName的值,然后通過(guò)查詢productms_attr_attrgroup_relation來(lái)獲取對(duì)應(yīng)分組的id屬性,spuId對(duì)應(yīng)的屬性值通過(guò)productms_product_attr_value查詢,聯(lián)表含有需要的所有屬性展現(xiàn)最終的數(shù)據(jù)效果。前端頁(yè)面展示如下圖:圖47商品詳情圖部分核心代碼展示:@Override
publicSkuItemVoitem(LongskuId)throwsExecutionException,InterruptedException{
SkuItemVoskuItemVo=newSkuItemVo();
CompletableFuture<SkuInfoEntity>infoFuture=CompletableFuture.supplyAsync(()->{
SkuInfoEntityinfo=this.getById(skuId);
skuItemVo.setInfo(info);
returninfo;
},executor);
CompletableFuture<Void>saleAttrFuture=infoFuture.thenAcceptAsync((res)->{
List<SkuItemSaleAttrVo>saleAttrVos=skuSaleAttrValueService.getSaleAttrBySpuId(res.getSpuId());
skuItemVo.setSaleAttr(saleAttrVos);
},executor);
CompletableFuture<Void>descFuture=infoFuture.thenAcceptAsync((res)->{
SpuInfoDescEntityspuInfoDescEntity=spuInfoDescService.getById(res.getSpuId());
skuItemVo.setDesc(spuInfoDescEntity);
},executor);
CompletableFuture<Void>baseAttrFuture=infoFuture.thenAcceptAsync((res)->{
List<SpuItemAttrGroupVo>attrGroupVos=attrGroupService.getAttrGroupWithAttrsBySpuId(res.getSpuId(),res.getCatalogId());
skuItemVo.setGroupAttrs(attrGroupVos);
},executor);
CompletableFuture<Void>imageFuture=CompletableFuture.runAsync(()->{
List<SkuImagesEntity>imagesEntities=skuImagesService.getImagesBySkuId(skuId);
skuItemVo.setImages(imagesEntities);
},executor);
}4.3購(gòu)物車功能實(shí)現(xiàn)用ThreadLocal進(jìn)行用戶身份鑒別信息傳遞在點(diǎn)擊進(jìn)入購(gòu)物車時(shí),會(huì)為企業(yè)項(xiàng)目臨時(shí)進(jìn)行用戶可以生成提供一個(gè)name為user-key的cookie臨時(shí)標(biāo)識(shí),過(guò)期使用時(shí)間為一個(gè)月,如果我們手動(dòng)方式清除user-key,那么對(duì)于臨時(shí)購(gòu)物車的購(gòu)物項(xiàng)也被清除,所以u(píng)ser-key是用來(lái)作為標(biāo)識(shí)和存儲(chǔ)系統(tǒng)臨時(shí)購(gòu)物車信息數(shù)據(jù)的。在調(diào)用購(gòu)物車的接口前,首先使用會(huì)話信息確定是否登錄。并分別進(jìn)行用戶身份信息的封裝,并并將用戶密鑰放入cookie中,通過(guò)攔截器進(jìn)行完成。添加商品到購(gòu)物車獲取當(dāng)前以當(dāng)前用戶標(biāo)識(shí)為key的hash的操作,判斷當(dāng)前購(gòu)物車是否已經(jīng)存在我們需要的產(chǎn)品,如果已經(jīng)存在購(gòu)物車之中,將數(shù)據(jù)取出并添加商品數(shù)量,將json轉(zhuǎn)為對(duì)象并將count+,更新后的對(duì)象被轉(zhuǎn)換成json并存儲(chǔ)在redis中,未存在購(gòu)物車,則添加新商品,通過(guò)遠(yuǎn)程商品服務(wù)查詢sku基本信息和屬性組合信息,將該產(chǎn)品屬性進(jìn)行封裝并存入redis,登錄用戶使用用戶ID作為密鑰,否則使用user-key獲取購(gòu)物車用戶未登錄,直接通過(guò)user-key獲取臨時(shí)購(gòu)物車。用戶登錄,查詢userId對(duì)應(yīng)的購(gòu)物車,查詢user-key對(duì)應(yīng)的臨時(shí)購(gòu)物車,并和用戶購(gòu)物車合并,在redis中更新數(shù)據(jù),刪除臨時(shí)購(gòu)物車數(shù)據(jù),選中購(gòu)物車項(xiàng),通過(guò)修改修改skuId對(duì)應(yīng)購(gòu)物車項(xiàng)的選中狀態(tài)。前端頁(yè)面展示如下圖:圖48商品購(gòu)物車圖部分代碼如下:/**
*添加商品到購(gòu)物車
*/
@GetMapping(value="/addCartItem")
publicStringaddCartItem(@RequestParam("skuId")LongskuId,
@RequestParam("num")Integernum,
RedirectAttributesattributes)throwsExecutionException,InterruptedException{
cartService.addToCart(skuId,num);
attributes.addAttribute("skuId",skuId);
return"redirect:/addToCartSuccessPage.html";
}
/**
*商品是否選中
*/
@GetMapping(value="/checkItem")
publicStringcheckItem(@RequestParam(value="skuId")LongskuId,
@RequestParam(value="checked")Integerchecked){
cartService.checkItem(skuId,checked);
return"redirect:/cart.html";
}
/**
*改變商品數(shù)量
*/
@GetMapping(value="/countItem")
publicStringcountItem(@RequestParam(value="skuId")LongskuId,
@RequestParam(value="num")Integernum){
cartService.changeItemCount(skuId,num);
return"redirect:/cart.html";
}
/**
*刪除商品信息
*/
@GetMapping(value="/deleteItem")
publicStringdeleteItem(@RequestParam("skuId")IntegerskuId){
cartService.deleteIdCartInfo(skuId);
return"redirect:/cart.html";
}下單的實(shí)現(xiàn)先使用攔截器統(tǒng)一獲取登錄信息,只有登錄才能進(jìn)行下單操作。遠(yuǎn)程購(gòu)物車服務(wù)查詢用戶選中的購(gòu)物信息。根據(jù)userId遠(yuǎn)程用戶服務(wù)在uerms_user_address表中獲取收貨地址,用過(guò)skuId遠(yuǎn)程進(jìn)行商品管理服務(wù)可以查詢sku的信息,同時(shí)遠(yuǎn)程庫(kù)存服務(wù)查詢是否有庫(kù)存,有則可以提交訂單,無(wú)庫(kù)存返回信息到訂單頁(yè)面上。當(dāng)用戶點(diǎn)擊提交訂單按鈕,收集頁(yè)面數(shù)據(jù)提交到后臺(tái)并生成訂單數(shù)據(jù)。驗(yàn)證令牌防止重復(fù)提交,然后驗(yàn)證產(chǎn)品的價(jià)格,驗(yàn)證產(chǎn)品的庫(kù)存,并鎖定產(chǎn)品的庫(kù)存。生成客戶的購(gòu)物訂單,最后購(gòu)物車中對(duì)應(yīng)的記錄通過(guò)消息隊(duì)列刪除??赡艹霈F(xiàn)客戶下單之后一直不付錢,產(chǎn)品的庫(kù)存處于鎖定狀態(tài),陷入店家的產(chǎn)品賣不出,其他購(gòu)買的買家無(wú)法購(gòu)買的情況。所以,關(guān)閉鎖定的客戶訂單需要通過(guò)延時(shí)隊(duì)列定來(lái)完成。前端頁(yè)面展示如下圖:圖49訂單確認(rèn)頁(yè)圖支付的實(shí)現(xiàn)系統(tǒng)通過(guò)內(nèi)網(wǎng)穿透實(shí)現(xiàn)請(qǐng)求名稱為alipay.Trade.page.pay支付寶界面,商家請(qǐng)求參數(shù)通過(guò)支付寶驗(yàn)證后,重定
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 綠色多核系統(tǒng)設(shè)計(jì)與功耗優(yōu)化-洞察及研究
- 靶向藥物遞送系統(tǒng)的設(shè)計(jì)與優(yōu)化對(duì)提高療效的作用-洞察及研究
- 基于自監(jiān)督學(xué)習(xí)的機(jī)器學(xué)習(xí)模型自動(dòng)調(diào)優(yōu)-洞察及研究
- 2026天津藍(lán)巢中煤芒來(lái)(錫林郭勒)運(yùn)行維護(hù)項(xiàng)目部招聘210人考試參考題庫(kù)及答案解析
- 勞動(dòng)者權(quán)益保護(hù)體系-洞察及研究
- 住宅精裝修施工方案范本
- 2026浙江臺(tái)州浙江大學(xué)科技園發(fā)展有限公司招聘2人考試備考題庫(kù)及答案解析
- 職業(yè)教育終身學(xué)習(xí)平臺(tái)建設(shè)方案
- 超材料聲學(xué)特性突破-洞察及研究
- 膽茶堿對(duì)代謝性骨病的治療效果評(píng)價(jià)-洞察及研究
- 《質(zhì)量比較儀校準(zhǔn)規(guī)范》
- 去極端化宣傳課件
- 2025至2030中國(guó)智能VR手術(shù)眼鏡市場(chǎng)發(fā)展現(xiàn)狀及未來(lái)前景預(yù)測(cè)分析報(bào)告
- 2025春季學(xué)期國(guó)開(kāi)電大本科《人文英語(yǔ)4》一平臺(tái)機(jī)考真題及答案(第八套)
- 2025-2030中國(guó)房地產(chǎn)與房地產(chǎn)軟件行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 委托貸款購(gòu)車協(xié)議書
- 婚后子女撫養(yǎng)協(xié)議書
- R-Breaker交易系統(tǒng)策略(TB版)
- 光伏勞務(wù)居間合同范例
- 雙氧水管理制度
- 公司環(huán)保迎檢工作方案
評(píng)論
0/150
提交評(píng)論