版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PAGE5緒論21世紀的互聯(lián)網技術迅猛發(fā)展,他已經悄然聲息的影響人們的消費觀念和消費方式。越來越多的人追隨時代的步加入到了網上購物的隊伍當中。電子商務平臺迅速壯大。本章主要概括了電子商務系統(tǒng)的研究的目的意義、國內外研究現狀以及本系統(tǒng)說明書的結構等內容。設計目的和意義隨著人們的消費觀念和消費方式的轉變,電子商務這一領域逐漸進入了人們的視野。網上購物給人們帶來了方便、快捷、安全的購物和交易,逐漸成為了主流的消費方式,為跨越時間和空間的經營模式提供了可能。1.1.1設計目的現在越來越多的人選擇網上購物,尤其是年輕人居多。人們的生活水平逐漸提高,生活節(jié)奏加快,在全民上網的大環(huán)境下,網上購物的普及,電子商務平臺也得到了極大地發(fā)展,已經成為目前經濟發(fā)展的中流砥柱。有了電子商務系統(tǒng)作為平臺,人們可以足不出戶就可以購買自己心儀的商品,省時間、安全性高、選擇的多樣化等優(yōu)勢已經逐漸取代了傳統(tǒng)的消費方式,廠商也可以降低自己的成本,擴大自己的銷售范圍。是絕大部分銷售中小型企業(yè)不可缺少的一部分。因此,選擇了開發(fā)此電子商務系統(tǒng)。1.1.2設計意義 電子商務系統(tǒng)平臺的出現,對很多中小型企業(yè)有著極大的促進作用,完善基礎管理經營管理現代化。實現了企業(yè)產品及形象宣傳,實現在線交易、經營管理思想和商務模式的轉變,電子商務系統(tǒng)使管理趨向流程化,避免一些誤操作造成不必要的損失,提高交易效率,節(jié)約成本,尤其提高了有業(yè)務的廣度,更加的適應了目前的快節(jié)奏生活。1.2國內外現狀在全球的角度看來,電子商務平臺的發(fā)展并不平衡,呈現出美國、歐盟、亞洲“三足鼎立”的局面,美國是世界最早發(fā)展電子商務的國家,同時也是電子商務發(fā)展最為成熟的國家,一直引領全球電子商務的發(fā)展,是全球電子商務成熟發(fā)達地區(qū)。歐盟電子商務的發(fā)展起步較美國晚,但發(fā)展速度較快,成為全球電子商務較為領先的地區(qū)。亞洲作為電子商務的新秀,市場潛力較大,但是近年的發(fā)展速度和所占份額并不理想,是全球電子商務的持續(xù)發(fā)展地區(qū)。1.2.1國內發(fā)展現狀國內電子商務在將近10年的發(fā)展中逐漸被社會人士所接受,網上購物平臺有著巨大的商業(yè)前景,吸引著越來越多的企業(yè)對其進行研究開發(fā),在國內出現了典型的塊狀式分布,主要集中在沿海等較為發(fā)達地區(qū),中北部處于快速發(fā)展,而西部則較為落后。隨著發(fā)展環(huán)境的不斷完善,經濟的飛速發(fā)展,網上購物將有著持續(xù)發(fā)展的動力和保障。將逐步普及到各中小型企業(yè)當中,甚至會實現全民網購的狀況。目前在國內只能說是處于起步發(fā)展階段,有著巨大的發(fā)展空間,將創(chuàng)造出極大的經濟效益,推動經濟的發(fā)展。因為網上購物為人們的購物節(jié)省了大量的時間,提供了多種多樣的購物選擇,以及支付等安全方面得到了強有力的保障,良好的用戶體驗等很多優(yōu)勢,讓人們更好的完成自己的需求,享受互聯(lián)網發(fā)展所帶來的便捷,被廣大社會人士所接受。1.2.2國外發(fā)展現狀在國外,一些較為發(fā)達國家起步較早,網上購物已經成為主流的消費方式,選擇也更加多樣化,用戶體驗等方面也更加完美。在國家的政策上得到了大力的支持,在美國,電子商務平臺占據著非常大的市場份額,成為了主要零售方式之一。電子商務平臺的發(fā)展已經趨于成熟,在技術方面已經較為全面,基礎設施也比較先進,有著強有力的背后支撐,處于遙遙領先的地位。一些歐洲國家緊隨其后,發(fā)展速度迅猛。歐美國家占據著全球將近七成的份額,日韓等亞洲國家發(fā)展也極為迅速不容小覷,其市場份額今年來持續(xù)遞增,有著很大的發(fā)展?jié)摿Α?.3設計說明書結構本論文的結構如下:第一章是對當下網上購物平臺的電子商務系統(tǒng)的設計的目的與意義,國內外發(fā)展現狀進行了簡單的分析論述。第二章重點對本系統(tǒng)的技術、經濟、操作的可行性分析,前臺后臺的技術需求分析,以及系統(tǒng)對軟件硬件的需求分析的論述。第三章對系統(tǒng)架構、結構、流程的設計,數據庫的概要邏輯設計進行分析說明。第四章闡述了每個模塊的詳細設計和業(yè)務流程。第五章對部分模塊的測試過程以及結果進行展示。第2章需求分析2.1可行性分析本系統(tǒng)使用目前較為主流的分布式架構、SpringBoot框架、并部署在安全性高的Linux系統(tǒng),開發(fā)工具也非常廉價,并對系統(tǒng)進行了很大程度的優(yōu)化,對硬件要求不高,并方便于后期維護。在低成本的同時帶來了巨大的經濟收益。對比大部分類似網站具有很大的優(yōu)勢,所以在經濟可行性方面毫無問題。本系統(tǒng)的開發(fā)是基于Java的,是目前最主流的編程語言,掌握人數多。模塊構成清晰易懂,非常方便后期的維護工作。涉及到的技術目前都較為主流,而且已經趨于成熟,網站界面也簡單明了,方便用戶操作,功能較為全面,更通過市場主流的網上購物平臺分析對比,在操作方面是可行的。2.2業(yè)務需求分析本電子商務系統(tǒng)主要針對各中小企業(yè)以及廣大消費者所開發(fā)的購物平臺,因此有供應商與購物者兩種用戶,實現兩者之間的業(yè)務功能。2.3.1供應商業(yè)務需求分析對于供應商需要實現的需求主要為網站的首頁瀏覽、對商品的查詢、對商品的上架下架以及價格調整,維護類目、商品、庫存單元、廣告位等信息。訂單的后臺服務,負責確認訂單是否付款成功,SSO單點登錄等功能,供應商的用例分析圖如圖2-1所示:2.3.2消費者業(yè)務需求分析對于購物者需要實現的需求主要為首頁商品的展示,包含了商品分類、搜索欄、商品廣告位。商品的分類查詢,根據首頁的商品類目進行查詢。全文搜索,通過搜索欄填入的關鍵字進行搜索,并列表展示。商品詳情查詢,商品的詳細信息展示。將商品添加到購物車,將有購買意向的商品臨時存放。結算將購物車中勾選的商品初始化成要填寫的訂單。支付功能,下單后,用戶點擊支付,負責對接第三方支付系統(tǒng)。SSO單點登錄功能。購物者的用例分析圖如圖2-2所示:2.3技術需求分析本系統(tǒng)采用面向服務分布式架構,原來所有的controller、service接口、service實現都在一個工程,通過Spring的ioc就可以實現互相調用。每一個實現服務的消費端和提供端分離。注冊中心采用zookeeper,Dubbo實現訂閱發(fā)布服務功能,dubbo本身并不是一個服務軟件。它其實就是一個jar包能夠幫你的java程序連接到zookeeper,并利用zookeeper消費、提供服務。Dubbo架構圖如圖2-1所示:圖2-1Dubbo架構圖全文搜索引擎目前主流的索引技術就是倒排索引的方式。首先每個記錄保存數據時,都不會直接存入數據庫。系統(tǒng)先會對數據進行分詞,然后以倒排索引結構保存。Elasticsearch為用戶提供按關鍵字查詢的全文搜索功能,Elasticsearch本身自帶的中文分詞,就是單純把中文一個字一個字的分開,根本沒有詞匯的概念。但是實際應用中,用戶都是以詞匯為條件,進行查詢匹配的,如果能夠把文章以詞匯為單位切分開,那么與用戶的查詢條件能夠更貼切的匹配上,查詢速度也更加快速。FastDFS是一個由C語言實現的開源輕量級分布式文件系統(tǒng),作者余慶(happyfish100),支持Linux、FreeBSD、AID等Unix系統(tǒng),解決了大數據存儲和讀寫負載均衡等問題,適合存儲4KB~500MB之間的小文件,如圖片網站、短視頻網站、文檔、app下載站等,UC、京東、支付寶、迅雷、酷狗等都有使用。該軟件作者是余慶個人獨立開發(fā)的。圖片服務器在linux,nginx做反向代理。FastDFS上傳下載流程如圖2-2所示:圖2-2FastDFS上傳下載流程圖Thymeleaf的主要目標是提供一個優(yōu)雅和高度可維護的創(chuàng)建模板的方式。為了實現這一點,它建立在自然模板的概念上,將其邏輯注入到模板文件中,不會影響模板被用作設計原型。這改善了設計的溝通,彌合了設計和開發(fā)團隊之間的差距。Thymeleaf沒有使用自定義的標簽或語法,所有的模板語言都是擴展了標準H5標簽的屬性,Thymeleaf模版技術在功能開發(fā)中的結構圖如圖2-3所示:圖2-3Thymeleaf結構圖Mysql數據庫具有體積小、成本低、存儲讀取速度快、開放源碼等優(yōu)勢。其功能性可以完全支撐本系統(tǒng)的后臺數據存儲。因此本系統(tǒng)首選的主要關系型數據庫使Mysql??紤]到該頁面是被用戶高頻訪問的,所以性能需要優(yōu)化。一般一個系統(tǒng)最大的性能瓶頸,就是數據庫的io操作。從數據庫入手也是調優(yōu)性價比最高的切入點。一般分為兩個層面,一是提高數據庫sql本身的性能,二是盡量避免直接查詢數據庫。提高數據庫本身的性能首先是優(yōu)化sql,包括:使用索引,減少不必要的大表關聯(lián)次數,控制查詢字段的行數和列數。另外當數據量巨大是可以考慮分庫分表,以減輕單點壓力。緩存可以理解是數據庫的一道保護傘,任何請求只要能在緩存中命中,都不會直接訪問數據庫。而緩存的處理性能是數據庫10-100倍。本系統(tǒng)使用Redis作為緩存系統(tǒng)進行優(yōu)化。Redis非關系型數據庫的結構圖如圖2-4所示:圖2-4Redis數據庫結構圖2.4系統(tǒng)運行環(huán)境需求分析由于本系統(tǒng)采用分布式架構且具有一定的復雜性,需要軟件內存8G以上,硬件內存500G以上。建議處理器為i5及以上,屏幕分辨率以及顯卡等其他配置要求極低。開發(fā)工具為IDEA、SQLyog、Vmare、RedisDesktopManager、XFTP5、SwitchHost、Xshell、notepad++、Google等。本系統(tǒng)采用Windows10的64為操作系統(tǒng)、采用Linux中的CentOS-7-x86操作系統(tǒng)。JDK版本為1.8,Tomcat版本為8.5.24.使用關系型數據庫Mysql5.5.27、非關系型數據庫Redis3.2.8。注冊中心使用Zookeeper3.4.11,檢測中心使用Dubbo2.6.0。分布式文件系統(tǒng)采用FastDFS5.05,反向代理工具使用Njinx1.12.2,全文檢索工具使用Elasticsearch5.6.4,Kibana5.6.4。本地工具采用Maven3.5.0版本。第3章概要設計3.1系統(tǒng)架構設計隨著架構不斷增大,服務節(jié)點越來越多。服務之間的調用和依賴關系也越來越復雜,需要有一個統(tǒng)一的中心來調度、路由、管理所有的服務,基于這個中心構建的這個星型架構就是目前最主流的SOA分布式架構。系統(tǒng)架構圖如圖3-1所示:圖3-1系統(tǒng)架構圖3.2系統(tǒng)功能模塊設計本電子商務購物平臺分為用戶單點登錄、商品詳情、商品檢索、商品管理、購物車、支付、訂單管理七大功能模塊,其中支付模塊又分為支付信息、跳轉支付平臺模塊,購物車模塊分為添加、展示商品列表、合并購物車、變更訂單狀態(tài)模塊,商品管理模塊分為商品的查詢分類信息、屬性添加、屬性查詢、屬性編輯模塊,商品詳情模塊分為商品的詳情查詢、跳轉兄弟頁面模塊,商品檢索模塊分為首頁分類、列表展示、可選屬性模塊。各個模塊的基本功能如下所示:SSO單點登錄功能:用戶點擊頁面上的登錄按鈕,彈出登錄頁面,進行消費者或者供應商登錄。商品詳情功能:以購物者的角度展現一個sku的詳細信息,實現點擊購買、放入購物車、切換顏色等功能。商品檢索功能:購物者在主頁進行商品的檢索,通過關鍵字、屬性值、分類Id、頁碼查詢,提供可選擇的屬性列表。商品管理功能:供應商可以對編輯商品的詳細屬性信息,編輯商品的銷售信息,為spu添加sku。購物車功能:存儲記錄購物者所選的商品、隨時更新購物車信息、決定購買時,跳轉到結算頁面。訂單管理功能:在購物車頁面中,點擊去結算,在登陸狀態(tài)下,跳轉到訂單頁面,填寫訂單信息,生成訂單。支付功能:購物者在填寫訂單信息后,點擊立即購買,網頁跳轉到支付寶收銀頁面。系統(tǒng)的功能模塊框架圖如圖3-2所示:3.3系統(tǒng)流程設計在本系統(tǒng)的設計中,登錄網站后,直接顯示商城的頁面,并可以在非登錄狀態(tài)下進行商品的分類查詢、全文檢索、顯示商品詳情、添加購物車功能,頁面中有專門供用戶登錄的模塊,登錄失敗則重新返回登錄窗口。登陸后,購物者可以進行下單支付功能,供應商可以進行對商品的管理以及訂單的后臺服務功能。系統(tǒng)流程圖如圖3-3所示:圖3-3系統(tǒng)流程圖3.4數據庫設計1.用信息戶表(t_user)表3-1用戶信息表字段數據類型中文字段備注IDint(8)主鍵自增2.商品信息表(spu_info)表3-2商品信息表字段數據類型中文字段備注IDint(8)主鍵自增3.庫存單元信息表(sku_info)表3-3庫存單元信息表字段數據類型中文字段備注IDint(8)主鍵自增4.spu銷售屬性表(spu_sale_atter)表3-4spu銷售屬性表字段數據類型中文字段備注IDint(8)主鍵自增庫存單元圖片表(sku_image)庫存單元圖片表(sku_image)主要屬性有商品id、圖片名稱、圖片路徑、商品圖片id、是否默認圖片等屬性。具體如表3-5所示:表3-5庫存單元圖片表字段數據類型中文字段備注IDint(8)主鍵自增sku_idint(8)商品idimg_namevarchar(30)圖片名稱img_urlvarchar(30)圖片路徑spu_img_idint(8)商品圖片idis_defaultvarchar(30)是否默認圖片1是0否sku銷售屬性值表(sku_sale_attr_value)sku銷售屬性值表(sku_sale_attr_value)主要屬性有庫存單元id、銷售屬性id、銷售屬性名稱、銷售屬性值id、銷售屬性值名稱等屬性。具體如表3-6所示:表3-6sku銷售屬性值表字段數據類型中文字段備注IDint(8)主鍵自增sku_idint(8)庫存單元idsale_attr_idint(8)銷售屬性idsale_attr_namevarchar(30)銷售屬性名稱sale_attr_value_idint(8)銷售屬性值idsale_attr_value_namevarchar(30)銷售屬性值名稱7.購物車信息表(cart_Info)購物車信息表(cart_Info)主要屬性有用戶id、skuid、放入購物車時價格、數量、圖片鏈接、sku名稱等屬性。具體如表3-7所示:表3-7購物車信息表字段數據類型中文字段備注IDint(8)主鍵自增user_idint(8)用戶idsku_idint(8)skuidcart_pricevarchar(30)放入購物車時價格sku_numint(8)數量img_urlvarchar(30)圖片鏈接sku_namevarchar(30)sku名稱8.訂單信息表(order_Info)訂單信息表(order_Info)主要屬性有收貨人名稱、收貨人電話、收貨地址、總金額、訂單狀態(tài)(用戶)、用戶Id、支付方式、訂單狀態(tài)(后臺)、第三方支付編號、創(chuàng)建時間等屬性。具體如表3-8所示:表3-8訂單信息表字段數據類型中文字段備注IDint(8)主鍵自增consigneevarchar(30)收貨人名稱consignee_telvarchar(30)收貨人電話deliveryAddressvarchar(30)收貨地址total_amountvarchar(30)總金額order_statusint(2)訂單狀態(tài)(用戶)1是0否userIdint(8)用戶Idpayment_wayint(8)支付方式orderCommentint(2)訂單狀態(tài)(后臺)1已交易0未交易out_trade_noint(8)第三方支付編號1支付寶2微信create_timevarchar(30)創(chuàng)建時間9.支付信息表(payment_info)支付信息表(payment_info)主要屬性有對外交易編號、訂單編號、訂單金額、交易內容、支付狀態(tài)、創(chuàng)建時間等屬性。具體如表3-9所示:表3-9支付信息表字段數據類型中文字段備注IDint(8)主鍵自增out_trade_noint(8)對外交易編號alipay_trade_noint(8)訂單編號total_amountint(8)訂單金額subjectvarchar(30)交易內容payment_statusint(8)支付狀態(tài)1已交易0未交易create_timevarchar(30)創(chuàng)建時間詳細設計與實現本章詳細闡述的各個模塊所實現功能的詳細設計,分析業(yè)務的處理流程、展示各個模塊的操作頁面、涉及到的技術的介紹。4.1單點登錄模塊設計登錄展示頁面如圖4-1所示,將用戶身份信息獨立管理,以便于更好的分布式管理。用接收的用戶名密碼核對后臺數據庫將用戶信息加載到寫入redis,redis中有該用戶視為登錄狀態(tài)。用userId+當前用戶登錄ip地址+密鑰生成token,重定向用戶到之前的來源地址,同時把token作為參數附上。當業(yè)務模塊某個頁面要檢查當前用戶是否登錄時,提交到認證中心,認證中心進行檢查校驗,返回登錄狀態(tài)、用戶Id和用戶名稱。利用密鑰和IP檢驗token是否正確,并獲得里面的userId,用userId檢查Redis中是否有用戶信息,如果有,登錄成功狀態(tài)返回,如果沒有,登錄失敗狀態(tài)返回。圖4-1登錄頁面主要實現的代碼如下,實現用戶信息緩存。publicStringuserKey_prefix="user:";
publicStringuserinfoKey_suffix=":info";
publicintuserKey_timeOut=60*60*24;@Override
publicUserInfologin(UserInfouserInfo){
Stringpassword=DigestUtils.md5DigestAsHex(userInfo.getPasswd().getBytes());
userInfo.setPasswd(password);
UserInfoinfo=userInfoMapper.selectOne(userInfo);
if(info!=null){
//獲得到redis,將用戶存儲到redis中
Jedisjedis=redisUtil.getJedis();
jedis.setex(userKey_prefix+info.getId()+userinfoKey_suffix,userKey_timeOut,JSON.toJSONString(info));
jedis.close();
returninfo;
}
returnnull;
}4.2商品詳情模塊設計商品詳情頁面如圖4-2所示,商品詳情頁,簡單說就是以購物者的角度展現一個sku的詳情信息。這個頁面不同于傳統(tǒng)的crud的詳情頁,使用者并不是管理員,需要對信息進行查刪改查,取而代之的是點擊購買、放入購物車、切換顏色等等。使用Thymeleaf模版技術導入頁面資源,實現SkuInfo接口,實現類為getSkuInfo,添加控制器,獲取商品信息,根據商品id查找商品信息,圖片信息并在頁面顯示,使用sql查詢出sku對應spu的銷售屬性,sql列出所有該spu的銷售屬性和屬性值,并關聯(lián)某skuid如果能關聯(lián)上is_check設為1,否則設為0。在對應的實體類中SpuSaleAttrValue添加屬性字段。標識出本商品對應的銷售屬性點擊其他銷售屬性值的組合,跳轉到另外的sku頁面。從頁面中獲得得所有選中的銷售屬性進行組合,比如:“屬性值1|屬性值2|屬性值3”用這個字符串匹配一個對照表,來獲得skuId。并進行跳轉,后臺要生成一個“屬性值1|屬性值2|屬性值3:skuId”的一個json串以提供頁面進行匹配。需要從后臺數據庫查詢出該spu下的所有skuId和屬性值關聯(lián)關系。然后加工成如上的Json串,用該json串,跟前臺匹配。圖4-2商品詳情頁面主要實現的代碼如下,實現查詢spu信息。SELECTsa.id,sa.spu_id,sa.sale_attr_name,sa.sale_attr_id,sv.idsale_attr_value_id,sv.sale_attr_value_name,skv.sku_id,IF(skv.sku_idISNOTNULL,1,0)is_checkedFROMspu_sale_attrsaINNERJOINspu_sale_attr_valuesvONsa.spu_id=sv.spu_idANDsa.sale_attr_id=sv.sale_attr_idLEFTJOINsku_sale_attr_valueskvONskv.sale_attr_id=sa.sale_attr_idANDskv.sale_attr_value_id=sv.idANDskv.sku_id=18WHEREsa.spu_id=45ORDERBYsv.sale_attr_id,sv.id4.3商品檢索模塊設計商品檢索頁面如圖4-3所示,利用elasticSearch技術開發(fā)電商的搜索列表功能,拷貝靜態(tài)文件到resources目錄下,手工建立static和templates目錄,為商品檢索模塊添加靜態(tài)頁面。elasticSearch存儲數據是以json格式保存的,那么如果一個javabean的結構剛好跟要求的json格式吻合,我們就可以直接把javaBean序列化為json保持到elasticSearch中,所以制作一個與elasticSearch中json格式一致的javabean,編寫DSL語句,從es中取得數據JestClient客戶端包,提供了一組builder工具。這個工具可以比較方便的幫程序員組合復雜的查詢Json。根據關鍵字、屬性值、分類Id、頁碼查詢sku列表,提供可供選擇的屬性列表,這個列表有兩種情況,如果是通過首頁的3級分類點擊進入的,要按照分類Id查詢對應的屬性和屬性值列表,如果是直接用搜索欄輸入文字進入的,要根據sku的查詢結果涉及的屬性值列表,從結果中取出平臺屬性值列表。點擊屬性時,要把上次查詢的內容也帶上,即帶上歷史參數,使用迭代器遍歷列表中商品的屬性,將查詢結果與選中屬性相比較,如果一致,則返回屬性和屬性值列表,如果不一致,則無對應商品。圖4-2商品詳情頁面主要實現的代碼如下,實現可供選擇的屬性列表。//根據查詢的結果返回屬性和屬性值列表
@Reference
ListServicelistService;
@Reference
privateManageServicemanageService;
@RequestMapping("list.html")
publicStringgetList(SkuLsParamsskuLsParams,Modelmodel){
SkuLsResultskuLsResult=listService.search(skuLsParams);
//獲取sku屬性值列表
List<SkuLsInfo>skuLsInfoList=skuLsResult.getSkuLsInfoList();
model.addAttribute("skuLsInfoList",skuLsInfoList);
//從結果中取出平臺屬性值列表
List<String>attrValueIdList=skuLsResult.getAttrValueIdList();
List<BaseAttrInfo>attrList=manageService.getAttrList(attrValueIdList);
model.addAttribute("attrList",attrList);
//returnJSON.toJSONString(search);
return"list";
}4.4商品管理模塊設計商品檢索頁面如圖4-4所示,SPU(StandardProductUnit):標準化產品單元。是商品信息聚合的最小單位,是一組可復用、易檢索的標準化信息的集合,該集合描述了一個產品的特性。SKU=StockKeepingUnit(庫存量單位)。即庫存進出計量的基本單元,可以是以件,盒,托盤等為單位。SKU這是對于大型連鎖超市DC(配送中心)物流管理的一個必要的方法。現在已經被引申為產品統(tǒng)一編號的簡稱,每種產品均對應有唯一的SKU號。本項目把商品的基本信息進行三級分類,銷售屬性是商品詳情頁右邊,可以通過銷售屬性來定位一組spu下的哪款sku??梢宰尞斍暗纳唐吩斍轫摚D到自己的“兄弟”商品。平臺屬性是之前分類下面,輔助搜索的,類似于條件的屬性。銷售屬性與平臺屬性各自獨立。一個SPU會決定一個商品都有哪些銷售屬性,而某個商品有什么平臺屬性,由他的3級分類決定。同一個SPU下的SKU可以共用一些資源。同一種商品,大部分圖片都是共用的只有因為顏色尺寸等,很少的差別。一般來說商品圖片都是在新增SPU時上傳的,在新增SKU時從該SPU已上傳的圖片中選擇。而海報幾乎是所有SPU下的SKU都一樣。使用fastdfs技術進行圖片的上傳,自己通過源碼方式編譯,打好jar包,安裝到本地倉庫。直接用idea直接把這個源碼作為模塊導入工程,把pom.xml中的版本改成1.27,執(zhí)行install。在商品管理模塊就可以直接使用這個坐標。從后臺查詢數據庫綁定表格控件,根據商品id獲取商品圖片表中的所有圖片列表,用ajax根據商品id查詢銷售屬性及銷售屬性值的列表數據。然后通過js把數據展開成html,變?yōu)槎嘞吕藛危蓤D片列表以供用戶選擇。設置商品id為自增,添加商品以及商品屬性時,將數據插入到商品以及商品各種屬性的表中。圖4-4商品詳情頁面主要實現的代碼如下,實現商品的添加。@Override
publicvoidsaveSkuInfo(SkuInfoskuInfo){
//sku_info
if(skuInfo.getId()==null||skuInfo.getId().length()==0){
//設置id為自增
skuInfo.setId(null);
skuInfoMapper.insertSelective(skuInfo);
}else{
skuInfoMapper.updateByPrimaryKeySelective(skuInfo);
}
//insert
List<SkuImage>skuImageList=skuInfo.getSkuImageList();
if(skuImageList!=null&&skuImageList.size()>0){
for(SkuImageimage:skuImageList){
/*""區(qū)別null*/
if(image.getId()!=null&&image.getId().length()==0){
image.setId(null);
}
//skuId必須賦值
image.setSkuId(skuInfo.getId());
skuImageMapper.insertSelective(image);
}
}
}4.5購物車模塊設計購物車模塊要能存儲顧客所選的的商品,記錄下所選商品,還要能隨時更新,未登錄狀態(tài)也可以存入購物車,當用戶決定購買時,用戶可以選擇決定購買的商品進入結算頁面。添加購物車:根據skuId查詢出商品詳情skuInfo,把skuInfo信息對應保存到購物車[購物車的實體類],然后返回成功頁面。先檢查該用戶的購物車里是否已經有該商品,如果有商品,只要把對應商品的數量增加上去就可以,同時更新緩存,如果沒有該商品,則把對應商品插入到購物車中,同時插入緩存。獲得參數:skuId、skuNum,判斷該用戶是否登錄,用userId判斷,如果登錄則調用后臺的service的業(yè)務方法,如果未登錄,要把購物車信息暫存到cookie中,利用cookie保存購物車。查詢出來在cookie中的購物車,反序列化成列表。通過循環(huán)比較有沒有該商品,如果有,增加數量,如果沒有,增加商品,然后把列表反序列化,利用CookieUtil保存到cookie中。展示購物車列表:判斷用戶是否登錄,登錄了從redis中,redis中沒有,從數據庫中取,redis中取出來要進行反序列化,如果redis中沒有要從數據庫中查詢,要連帶把最新的價格也取出來,默認要顯示最新價格而不是當時放入購物車的價格,加載入緩存時設定失效時間,保證和用戶信息的失效時間一致,從數據庫中查詢,其中cart_price表中可能是舊值,所以需要關聯(lián)sku_info表信息,key都是同一個,值會產生重復覆蓋。合并購物車;由于加入購物車時,用戶可能存在登錄和未登錄兩種情況,登錄前在cookie中保存了一部分購物車信息,如果用戶登錄了,那么對應的要把cookie中的購物車合并到數據庫中,并且刷新緩存。用數據庫中的購物車列表與傳遞過來的cookie里的購物車列表循環(huán)匹配,能匹配上的數量相加,匹配不上的插入到數據庫中,最后重新加載緩存。購物車頁面如圖4-5所示:圖4-5購物車頁面主要實現的代碼如下,實現展示購物車列表。@RequestMapping("cartList")
@LoginRequie(autoRedirect=false)
publicStringcartList(HttpServletRequestrequest,HttpServletResponseresponse){
//判斷用戶是否登錄,登錄了從redis中,redis中沒有,從數據庫中取
//沒有登錄,從cookie中取得
StringuserId=(String)request.getAttribute("userId");
if(userId!=null){
//從redis中取得,或者從數據庫中
List<CartInfo>cartList=cartService.getCartList(userId);
request.setAttribute("cartList",cartList);
}else{
List<CartInfo>cartList=cartCookieHandler.getCartList(request);
request.setAttribute("cartList",cartList);
}
return"cartList";
}4.6訂單模塊設計訂單展示頁面如圖4-6所示,訂單業(yè)務在整個電商平臺中處于核心位置,也是比較復雜的一塊業(yè)務。是把“物”變?yōu)椤板X”的一個中轉站。購物車點擊計算按鈕,結算必須要登錄結算頁面獲得redis中的key,獲取用戶信息和購物車選擇的商品列表,結算的時候,需要將信息添加到訂單明細表中,下訂單時,設置創(chuàng)建時間,設置失效時間,生成第三方支付編號等信息,將訂單信息保存到訂單信息表中,保存完,保存以后把購物車中的商品刪除,重定向到支付頁面。為了跳轉到支付頁面使用。支付會根據訂單id進行支付。圖4-6訂單頁面主要實現的代碼如下,實現保存訂單信息。@Service
publicclassOrderServiceImplimplementsOrderService{
@Autowired
privateOrderInfoMapperorderInfoMapper;
@Autowired
privateOrderDetailMapperorderDetailMapper;
publicStringsaveOrder(OrderInfoorderInfo){
//設置創(chuàng)建時間
orderInfo.setCreateTime(newDate());
//設置失效時間
Calendarcalendar
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年注冊會計師備考題庫及答案(必刷)
- 泡沫混凝土施工技術標準與安全要點
- 深靜脈血栓風險評估工具大全
- 2025航空運輸設備行業(yè)市場發(fā)展評估及技術創(chuàng)新與投資布局報告
- 2025航空運輸企業(yè)競爭格局運營效率分析及差異化發(fā)展策略研究報告
- 2025航空航天特種高溫合金市場供需演變投資策略規(guī)劃分析報告
- 小學朗誦培訓開幕
- 一級建造師建筑實務考前模擬題
- 肝臟疾病的診斷與保健方法
- 建筑工程施工計劃與進度控制
- 財務顧問服務協(xié)議合同
- 國家開放大學《社會工作概論#》補修課形考答案
- 2025國家統(tǒng)計局齊齊哈爾調查隊招聘公益性崗位5人考試筆試參考題庫及答案解析
- 前列腺術后尿控功能康復策略
- 2025年浙江紅船干部學院、中共嘉興市委黨校公開選聘事業(yè)人員2人考試參考題庫附答案解析
- 美容機構的課程
- 路面工程安全專項施工方案
- 2025重慶市環(huán)衛(wèi)集團有限公司招聘27人筆試歷年參考題庫附帶答案詳解
- 通信網絡工程師維護與服務水平績效考核表
- 燃氣施工安全培訓計劃
- 2025年學法考試廣東考場(二)試題及答案
評論
0/150
提交評論