忻州内厩机械设备有限公司

熱門系統(tǒng)產(chǎn)品
電商交易類產(chǎn)品
渠道/經(jīng)銷商產(chǎn)品
AI人工智能產(chǎn)品
業(yè)務協(xié)同系統(tǒng)產(chǎn)品
其他產(chǎn)品與服務
沒有你合適的?
我要定制 >

分布式電商系統(tǒng)項目總結(jié)

發(fā)布時間: 2018-10-23 文章分類: 技術干貨
閱讀量: 0

商城是采用分布式架構(gòu)部署的一個大型網(wǎng)上商城系統(tǒng),類似于京東商城。本系統(tǒng)分前臺系統(tǒng)和后臺系統(tǒng)。前臺系統(tǒng)主要負責商城的頁面的顯示功能,這里獨立商城網(wǎng)站建設采用的面向服務的方式,pc端手機端只負責顯示頁面,業(yè)務邏輯都在服務層實現(xiàn),客戶端調(diào)用服務端接口來實現(xiàn)顯示功能。

在前臺網(wǎng)上商城系統(tǒng)中主要分為:客戶端:系統(tǒng)前臺頁面顯示系統(tǒng)(portal,8082)。

服務端系統(tǒng):

(1)rest系統(tǒng)(8081):負責調(diào)用CMS系統(tǒng)的內(nèi)容,將CMS系統(tǒng)的內(nèi)容顯示到頁面,(這里的CMS內(nèi)容管理系統(tǒng),在后臺實現(xiàn))。

(2)商品的搜索系統(tǒng)(8083),當在頁面輸入商品信息時,可以搜索商品。這里用到了solr技術,利用solr索引庫來實現(xiàn)。

(3)SSO(單點登陸系統(tǒng),8084),因為商城采用分布式的系統(tǒng)部署,將整個系統(tǒng)劃分為幾個子系統(tǒng),所以對于用戶的訪問權(quán)限是一個問題,如何實現(xiàn)一次登陸即其他系統(tǒng)都可以免登陸,sso可以解決。

(4)訂單系統(tǒng)(8085):商城購物少不了訂單系統(tǒng),所以將此作為一個獨立工程編寫。

后臺系統(tǒng)功能:商城的后臺系統(tǒng)主要是負責商品的分類,添加、規(guī)格參數(shù)。CMS系統(tǒng)(這里主要是廣告的分類、添加)。

本系統(tǒng)前臺界面設計采用的easyUI的設計,后臺采用springMVC、spring、mybatis框架,擦用java語言編程。

步驟分析:

1、項目需求分析:模仿京東商城系統(tǒng)。

2、項目數(shù)據(jù)庫設計:商品信息表、商品信息分類表、商品信息描述表、商品規(guī)格參數(shù)表。

3、CMS系統(tǒng)內(nèi)容表、CMS系統(tǒng)內(nèi)容分類表。

4、用戶表、訂單表、訂單的具體明細表。

具體實現(xiàn):

1、框架的搭建:

這里采用maven來管理整個項目。

優(yōu)勢兩點:

1、maven可以以管理整個項目工程,方便熱部署項目,項目發(fā)布方便。

2、maven管理你jar包具有很大的優(yōu)勢,可以自動下載所需的jar包,只需定義好版本即可,其他maven自動下載。

因為這個項目比較大,子工程比較多,所以我們建立一個pom類型(聚合工程)parent來管理里所有jar包的版本,這樣其他 子工程都依賴此工程。版本得到了統(tǒng)一,不會出現(xiàn)因版本問題導致的錯誤。其次建立一個專門的(jar類型)common工具類,可以將系統(tǒng)中使用到的工具類都加入此類,其他類也依賴此類,就可以使用這里面的工具了。此工具類也依賴parent類。

下面就是利用SSM框架來搭建工程了:利用框架搭建工程主要分兩步:框架所依賴的jar包,框架的配置文件。弄清了這兩點就好辦了。

框架主要分三層:

dao層(mybatis)(主要是與數(shù)據(jù)庫打交道)、service層(spring)(主要是負責調(diào)用dao層,實現(xiàn)業(yè)務邏輯的編寫)、controller層(springMVC)(這里主要調(diào)用service層,根據(jù)jsp頁面的內(nèi)容,將jsp的內(nèi)容傳遞到service層,然后講數(shù)據(jù)顯示到jsp頁面)。

所以這里的配置文件也就:mybatis的SqlMapConfig.xml (主要是它的插件配置,數(shù)據(jù)庫配置放在dao)。spring將mybatis和springMVC整合起來的application_context_dao.xml(配置數(shù)據(jù)源,與數(shù)據(jù)庫的連接),application_context_service.xml(將service的文件包引入工程)。application_context_transation.xml(這里將事務獨立出來,主要是事務的配置)

SpringMVC.xml(主要是前端控制器,試圖解析器的配置)

框架搭建完成后,利用mybatis的逆向工程生成各個表的mapper.xml和mapper.java文件、pojo文件。

2、具體的功能的實現(xiàn)邏輯

(1)后臺系統(tǒng)功能實現(xiàn)

(這里主要講商品的查詢、添加、規(guī)格參數(shù)、CMS系統(tǒng)的分類、添加)

其實對于功能模塊的分析主要有三點:

從哪個數(shù)據(jù)表獲?。ㄖ饕猰apper實現(xiàn));頁面?zhèn)鬟f是否有參數(shù),頁面的url是什么(controller實現(xiàn));返回值是什么(即頁面展示的格式是什么樣子的,這個根據(jù)jsp使用的框架來決定,比如這里的easyUI,可以查詢它的api文檔,找到其返回值類型);

A、商品的查詢邏輯分析:其實對于商品的查詢主要就是從數(shù)據(jù)庫中將所有商品查詢出來。這簡單的查詢很簡單,可是在頁面分頁顯示出來這就是一個問題了。這里到了mybatis的分頁插件pageHelper來實現(xiàn)。

1、傳入?yún)?shù):Easyui頁面默認有page、rows參數(shù)傳遞。

2、返回值:easyui的格式即datagrid的格式,專門編寫一個對應的pojo類放入專門工具類中使用,返回格式即這個pojo。

3、邏輯:Dao層:Dao層用mybatis的逆向工程

4、Service調(diào)用mapper的查詢和分頁實現(xiàn)邏輯。

5、Controller即將參數(shù)傳遞過去,url寫好

B、商品添加:商品添加即將商品信息寫入數(shù)據(jù)庫,頁面?zhèn)鬟f的內(nèi)容當點擊提交按鈕時直接寫入數(shù)據(jù)庫,只需補全沒有的字段即可。

這里涉及到商品的類目選擇、上面的圖片上傳、商品的描述信息。

類目選擇首先得將類目展示出來,這里使用的異步樹的格式。查詢api發(fā)現(xiàn)異步樹的返回值的格式。主要思路是:根據(jù)parentId來查詢類目表,默認從0開始,異步樹有個特點,就是每次獲取到的id,如果有子節(jié)點,會發(fā)送url再次請求,如果沒有子節(jié)點則不發(fā)送請求,所以可以都遍歷到所有節(jié)點。(這個是tree的特點,自動請求)

1、異步樹的特點:從最頂層開始讀取,先讀頂層節(jié)點,如果是閉合狀態(tài),發(fā)送請求給服務器讀取子節(jié)點,子節(jié)點的狀態(tài)依賴于父節(jié)點,當展開一個封閉的節(jié)點時,如果節(jié)點沒有加載子節(jié)點,它將會把節(jié)點的id的值作為http請求參數(shù)并命名為id,通過url發(fā)送到服務器上檢索子節(jié)點。所以遍歷一次后,如果父節(jié)點還是父節(jié)點(即存在子節(jié)點)則檢索下面的子節(jié)點的內(nèi)容,將子節(jié)點的id作為parentId來檢索下面的節(jié)點。如果不是父節(jié)點了,則打開下面列表。也就是說這些實現(xiàn)都是 異步樹自動實現(xiàn)的,我們只需要判斷父節(jié)點的狀態(tài)即可,下面的檢索根據(jù)這個狀態(tài)進行。

2、圖片上傳功能:因為商城的圖片非常多,所以我們將這么多的圖片保存在圖片服務器中,然后將圖片在服務器中的具體url寫入數(shù)據(jù)庫,供前臺調(diào)用。前臺獲取到這個url既可獲取到這個圖片。這里圖片上傳到服務器的功能:先生存圖片的名稱,然后生成圖片保存的格式,然后利用ftpUtil將圖片上傳到服務器,返回一個url鏈接。

3、商品規(guī)格參數(shù),這里采用的規(guī)格參數(shù)模板的形式:

(1)這里有兩個表:

一個模板表(根據(jù)商品的分類建立的模板,根據(jù)分類id),一個展示模板表(根據(jù)商品的信息寫入模板表,根據(jù)商品id查詢商品信息,然后寫入對應訂單模板中,然后生成HTML)。

1、商品的描述:這里采用文本的形式存儲的,寫入即可。富文本編輯器。

2、CMS分類:這里的格式也是用了異步樹的格式,所以顯示方法是一樣的。

3、分類添加:像表中插入數(shù)據(jù)庫即可。

(2)前臺功能實現(xiàn)

首頁大廣告位的實現(xiàn):這里是從CMS系統(tǒng)中獲取廣告位的圖片,然后展示在頁面。但是前臺跟后臺是不一樣的端口,如何從前臺訪問后臺呢,可以使用jsonp的形式。但是我們這里系統(tǒng)是采用面向服務的編程,所以采用rest接口的方式然后功能前臺調(diào)用,這里用的httpcliet來調(diào)用接口。

(3)商品搜索功能的實現(xiàn):

首先在linux下部署好solr服務器,然后將數(shù)據(jù)庫的表字段導入到solr索引庫。然后編寫search服務接口,然后供前臺調(diào)用這個服務接口。

1、Rest功能:

商品詳情頁面展示:寫三個服務:根據(jù)id查詢商品的具體信息顯示到頁面,根據(jù)id查詢商品的內(nèi)容表,根據(jù)id查詢商品的規(guī)格參數(shù),即將三個信息展示到頁面。然后前臺分別調(diào)用。

2、SSO系統(tǒng):這里涉及到攔截器:

這里是利用了sso的接口文檔,即校驗接口、注冊、登錄接口、根據(jù)token查詢用戶接口、安全退出接口。這個的調(diào)用服務層是利用jsonp的形式訪問的服務接口,實現(xiàn)跨域訪問。客戶端全部在jsp頁面實現(xiàn)的。

3、具體流程:

當用戶點擊注冊的時候,跳轉(zhuǎn)到注冊頁面,即用戶信息的保存功能。檢驗用戶名是否存在、手機號和郵箱不能為空。

當用戶點擊登錄按鈕的時候,用戶輸入用戶名和密碼,檢驗用戶名是否在數(shù)據(jù)庫中存在,然后用戶名密碼是否正確。這里的密碼是用了spring的MD5加密技術。當全部成功后,給用戶頒發(fā)一個token令牌(利用uuid實現(xiàn)),然后將token存入到redis中(token的key是它生成的號,值是用戶的名字),然后設置在redis的過期時間。這相當于用戶的session。

然后將token寫入cookie中,前臺頁面利用jsonp調(diào)用,根據(jù)cookie中的token的值,調(diào)用sso的根據(jù)token查詢用戶的服務,查看用戶是否有效,如果有效則將用戶返回前臺頁面,前臺頁面獲取用戶的用戶名顯示在首頁,表示***已登陸。

這里的cookie是設置了共享域,即全部子系統(tǒng)都可以訪問到cookie。

當用戶登錄其他子系統(tǒng)時,先從從cookie中獲取token信息,根據(jù)token信息獲取用戶信息,判斷用戶信息是否有效,如果有效則放行,如果無效,則利用攔截器攔截跳轉(zhuǎn)到登錄頁面。用戶再次登錄的時候刷新redis的時間,重新設置有效期。攔截器的攔截,在springMVC.xml中設置攔截的名稱。

購物車功能:

購物車功能注意到這里商品加入購物車,是將購物車保存在cookie中。這里用到cookieUtil工具來實現(xiàn)這些保存刪除功能。在商品詳情頁面點擊“加入購物車”按鈕提交一個請求吧商品id傳遞給Controller,Controller接收id,Controller調(diào)用Service根據(jù)商品id查詢商品基本信息,購物車的商品專門寫一個pojo對象,因為商品的很多信息購物車里面用不到。將購物車的商品的pojo,把商品寫入cookie中,加入cookie之前先從cookie中把購物車的商品取出來判斷當前購物車商品列表中是否有此商品,如果有數(shù)量加一,如果沒有添加一個商品,數(shù)量為1。展示給用戶購物車列表。

訂單系統(tǒng):訂單系統(tǒng)主要是訂單的創(chuàng)建、查詢、修改、刪除功能。

訂單系統(tǒng)因為pc端和移動端都需要調(diào)用此功能模塊,所以將訂單系統(tǒng)也單獨作為一個服務接口供客戶端調(diào)用。

訂單服務接口也有接口文檔,根據(jù)文檔進行訂單的創(chuàng)建。

訂單的創(chuàng)建需要用戶登錄,這里用到了攔截器在springMVC中配置下攔截方式即可。

當用戶攔截成功后,用戶登錄該商城,這時候注意將用戶保存在request中,目的是因為查詢訂單的時候需要根據(jù)用戶的id來查詢,不同的用戶具有不同的訂單啊。

然后用request的get和setAttribute來獲取值、設定值。為什么可以從request中取,因為我們整個商城都是http協(xié)議訪問的。

(1)訂單創(chuàng)建邏輯:

當點擊去去購物車結(jié)算時,顯示購物車的列表,當選中購物車的商品點擊去結(jié)算的時候,顯示商品的提交訂單之前的一系列信息(也就是結(jié)算頁):針對數(shù)據(jù)庫三張表:訂單基本信息表、訂單明細表(購買的商品信息)、訂單配送(收貨人的地址電話信息)

傳入?yún)?shù):因為創(chuàng)建訂單也就是向數(shù)據(jù)庫中插入一系列的信息,而對應的是數(shù)據(jù)庫中的三個表,所以根據(jù)頁面的內(nèi)容,傳入的參數(shù)也就是三個pojo類,然后頁面填寫的+補全頁面上在數(shù)據(jù)庫中沒有的字段。所以主要是對數(shù)據(jù)庫中的三個表進行插入操作。服務接口是負責接收這三個pojo類,所以客戶端要想辦法將這三個pojo類傳遞過來。

根據(jù)接口文檔,返回的是一個json格式的數(shù)據(jù),即這三張表的數(shù)據(jù)是在一個json串中,所以這里要想辦法將這三個表單獨建立一個pojo來保存這個返回值。

分布式電商系統(tǒng)項目總結(jié)

接收的pojo類:

這里采用了這種方式巧妙的將三個表合并起來了。

接下來就是數(shù)據(jù)的插入操作了,這個在service層實現(xiàn):逐個表的插入數(shù)據(jù)庫即可,然后返回一個訂單號即訂單的id。

controller層傳遞的就是這個pojo類,然后返回給客戶端。

客戶端也是將這個pojo類傳遞給服務接口,返回一個訂單號給客戶端。提交訂單的時候顯示訂單提交成功頁面時候,看下jsp頁面顯示哪些字段,然后用model傳遞給頁面。

(2)訂單的分頁查詢:

前面我們將用戶保存在了request中,然后獲取到用戶的id,根據(jù)用戶的id來查詢訂單,前臺頁面默認傳遞page和rows,利用mybatis的分頁查詢來查詢訂單即可。

分布式電商系統(tǒng)項目總結(jié)

傳入?yún)?shù):page和rows

執(zhí)行操作:根據(jù)用戶id查詢訂單,根據(jù)page和rows分頁

返回值:訂單的列表信息,即用戶的多個訂單信息。根據(jù)接口文檔,我們發(fā)現(xiàn)這個返回的信息就是數(shù)據(jù)中訂單表的部分信息,所以用幾個字段組成一個新的pojo來接收返回值。

分布式電商系統(tǒng)項目總結(jié)

(3)根據(jù)訂單id查詢訂單:

根據(jù)訂單id查詢訂單這個顯示的信息就比較全面了,這個返回值跟之前的三個數(shù)據(jù)庫的表對應,所以根據(jù)id,分別查詢這三個表,來獲取對應的信息。

1、傳入?yún)?shù):訂單id;

2、操作:三個表分別查詢;

3、返回值:之前新定義的三個表的Order的pojo類;

來源:博客園

<數(shù)商云(www.zhimaihui.cn)是國內(nèi)知名企業(yè)級電商平臺提供商,為企業(yè)級商家提供最佳的系統(tǒng)開發(fā)(多種模式電商平臺搭建:B2B/B2B2C/B2C/O2O/新零售等)、供應鏈系統(tǒng)搭建及電商行業(yè)解決方案服務>

點贊 | 0

數(shù)商云是一家全鏈數(shù)字化運營服務商,專注于提供SCM/企業(yè)采購/SRM供應商/DMS經(jīng)銷商/渠道商等管理系統(tǒng),B2B/S2B/S2C/B2B2C/B2C等電商系統(tǒng),從“供應鏈——生產(chǎn)運營——銷售市場”端到端的全鏈數(shù)字化產(chǎn)品和方案,致力于通過數(shù)字化和新技術為企業(yè)創(chuàng)造商業(yè)數(shù)字化價值。

添加企業(yè)微信獲取更多資料
添加企業(yè)微信獲取更多資料
相關文章

評論

剩余-200
發(fā)表
最新資訊

最新資訊

更多 >
推薦閱讀

推薦閱讀

填寫以下信息, 免費獲取方案報價
姓名
手機號碼
企業(yè)名稱
  • 建筑建材
  • 化工
  • 鋼鐵
  • 機械設備
  • 原材料
  • 工業(yè)
  • 環(huán)保
  • 生鮮
  • 醫(yī)療
  • 快消品
  • 農(nóng)林牧漁
  • 汽車汽配
  • 橡膠
  • 工程
  • 加工
  • 儀器儀表
  • 紡織
  • 服裝
  • 電子元器件
  • 物流
  • 化塑
  • 食品
  • 房地產(chǎn)
  • 交通運輸
  • 能源
  • 印刷
  • 教育
  • 跨境電商
  • 旅游
  • 皮革
  • 3C數(shù)碼
  • 金屬制品
  • 批發(fā)
  • 研究和發(fā)展
  • 其他行業(yè)
需求描述
填寫以下信息馬上為您安排系統(tǒng)演示
姓名
手機號碼
你的職位
企業(yè)名稱

恭喜您的需求提交成功

尊敬的用戶,您好!

您的需求我們已經(jīng)收到,我們會為您安排專屬電商商務顧問在24小時內(nèi)(工作日時間)內(nèi)與您取得聯(lián)系,請您在此期間保持電話暢通,并且注意接聽來自廣州區(qū)域的來電。
感謝您的支持!

您好,我是您的專屬產(chǎn)品顧問
掃碼添加我的微信,免費體驗系統(tǒng)
(工作日09:00 - 18:00)
專屬顧問圖片
電話咨詢 (工作日09:00 - 18:00)
客服熱線: 4008 868 127
售前熱線: 189 2432 2993
掃碼即可快速撥打熱線