1. 程式人生 > >訂單功能模組設計與實現

訂單功能模組設計與實現

在商城專案中,之前我們介紹了購物車功能模組的實現,商品加入到購物車之後,就是到購物車結算,然後顯示購物車的商品列表,點選去結算,然後到了未提交前的訂單列表

點選提交訂單後,生成此訂單,返回訂單的訂單號,付款金額,訂單預計到達時間。訂單系統是一個非常重要的系統,我們的移動端、PC端都需要訂單系統,所以這裡我們將訂單系統單獨作為一個服務來,留出介面供客戶單來呼叫

今天我們來看下這個訂單系統到底是如何實現的:

一、訂單系統功能

訂單系統主要包含哪些功能模組呢?

建立訂單功能、檢視訂單列表、根據訂單id查詢訂單的詳細資訊、訂單修改、訂單取消、訂單狀態、訂單評價等功能的實現。

今天我們來看下建立訂單的流程:

二、訂單系統的資料庫表的設計

建立訂單說到底就是向訂單表中新增資料,即insert這些資訊。

下單功能一定要使用關係型資料庫表,保證資料的一致性,因為建立訂單要保證在一個事務(一個事務就是指向資料庫中進行的一種操作:比如插入,刪除等等)裡面,nosql資料庫不支援事務,可能會丟失資料。

我們在網上購物的時候通常這個訂單包含的資訊比較多,所以對於訂單系統如何建立它的資料庫也是非常重要的。建立資料庫遵循資料庫設計的三大正規化原則來設計。

我們建立了三個表:tb_order(訂單資訊表),tb_order_item(訂單詳情表),tb_order_shipping(訂單配送表).

tb_order:這裡包含了訂單的基本資訊

  

tb_order_item:訂單詳情表:訂單的詳情主要就是購買商品的資訊,通過訂單的id來實現關聯

tb_order_shipping:訂單配送表:

這是三個基本的表,其實還可以有物流資訊表,訂單交易資訊表。這裡我們採用這三張表足夠。

三、訂單系統介面文件,一般我們開發的時候會收到已經寫好的介面文件,比如建立訂單的介面文件。

從上面這個表中,我們可以看到該介面的url,介面的傳入引數和返回值。

接下來我們針對這三個來進行程式碼的編寫:

url屬於controller層,

傳入引數這裡我們可以看到是資料庫建立的三張表資訊:第一個是tb_order,第二個是一個集合式的訂單明細List,第三個是訂單的配送資訊表。

所以傳入引數就是這三個物件。這裡我們是編寫介面,供客戶端呼叫,至於客戶端怎麼將這些引數傳遞過來,那是客戶端團隊考慮的事情。

返回值這裡使用了taotaoresult來包裝了下,因為我們提交訂單成功後,返回的是訂單號,即訂單的id所以,我們需要向客戶端傳遞訂單id過去,並顯示在訂單建立成功的頁面。

下面看下訂單服務介面的service層的實現:

service層的主要實現是將訂單資訊新增到資料庫中,即接收controller傳遞過來的物件,然後補全頁面沒有的欄位,insert資料庫,這裡可以使用逆向工程生成的dao。

另外還有個問題:

訂單編號:訂單編號用什麼形式比較好呢?

解決方案一(不能使用):

使用mysql的自增長。

優點:不需要我們自己生成訂單號,mysql會自動生成。

缺點:如果訂單表數量太大時需要分庫分表,此時訂單號會重複。如果資料備份後再恢復,訂單號會變。

方案二:日期+隨機數

採用毫秒+隨機數。

缺點:仍然有重複的可能。不建議採用此方案。在沒有更好的解決方案之前可以使用。

方案三:使用UUID

優點:不會重複。

缺點:長。可讀性查。不建議使用。 

方案四:可讀性好,不能太長。一般訂單都是全數字的。可以使用redis的incr命令生成訂單號。

優點:可讀性好,不會重複

缺點:需要搭建redis伺服器。

所以我們選取方案四作為生成訂單號的方案。

那麼service層的編碼如下:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980package com.taotao.order.service.impl;import java.util.Date;import java.util.List;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Service;import com.taotao.common.utils.TaotaoResult;import com.taotao.mapper.TbOrderItemMapper;import com.taotao.mapper.TbOrderMapper;import com.taotao.mapper.TbOrderShippingMapper;import com.taotao.order.dao.JedisClient;import com.taotao.order.service.OrderService;import com.taotao.pojo.TbOrder;import com.taotao.pojo.TbOrderItem;import com.taotao.pojo.TbOrderShipping;//訂單模組實現@Servicepublic class OrderServiceImpl implements OrderService {@Autowiredprivate TbOrderMapper orderMapper;@Autowiredprivate TbOrderItemMapper orderItemMapper;@Autowiredprivate TbOrderShippingMapper shippingMapper;

相關推薦

訂單功能模組設計實現

在商城專案中,之前我們介紹了購物車功能模組的實現,商品加入到購物車之後,就是到購物車結算,然後顯示購物車的商品列表,點選去結算,然後到了未提交前的訂單列表,點選提交訂單後,生成此訂單,返回訂單的訂單號,付款金額,訂單預計到達時間。訂單系統是一個非常重要的系統,我們的移動端、P

商城簽到功能設計實現

tex lsp day efault bre 開啟 保存 規則 設置 需求分析   1、用戶當天登錄商城,只要簽到就直接獎勵一定的積分或者根據用戶本周或者本月內已經連續簽到的天數進行積分獎勵,後臺可以設置具體的獎勵規則,這裏假設本周內連續登錄三天獎勵 1

Python 的網絡傳輸文件功能設計實現

roc 內容 guid 公司 代碼結構 網絡傳輸 智能 類型 模塊 Python 的網絡傳輸文件功能的設計與實現 摘要:Python 是目前較流行的程序設計語言之一,它具有簡單易學代碼簡潔等特點,並且Python 提供了大量的功能庫文件,開發大型應用程序時非常方便,廣泛用於

網站統計功能設計實現

本文簡要介紹網站統計功能的設計與實現。 本文分為以下五個部分: 埋點設計與實現 頁面引入 資料接收 資料入庫 統計分析   一、埋點設計與實現 在JavaScript中,包含了很多物件,可以用於獲取使用者的資料。比如Document

模組設計實現經驗總結(一)

作者:  朱賽凡   楊雷 當開始進行模組開發時,系統負責人會給模組開發負責人描述模組功能與要求,但是此時模組功能與需求一般是比較粗線條和不完備的,例如很多細粒度異常情況處理需求一般系統負責人可能會考

模組管理常規功能自定義系統的設計實現(24--二個模組之間的關聯[2])

父子模組之間關聯操作(2)         上一節介紹了子模組中對父模組的一些相關操作。這一節來看看父模組中對子模組可以進行什麼樣的操作。         一、進入子模組的時候,限定父模組值。

模組管理常規功能自定義系統的設計實現(56--開源開發測試版釋出 )

常規功能自定義模組管理系統(cfcmms)開發試用版釋出 此開發試用版中包括所有的前臺js程式碼(Extjs 4),後臺java的大部分開發原始碼(部分打包成了jar)。想要使用的使用者可以

自己主動升級系統的設計實現(續2) -- 添加斷點續傳功能 (附最新源代碼)

blog down 決定 top lin dom itl com 關於 一.緣起      之前已經寫了兩篇關於自己主動升級系統OAUS的設計與實現的文章(第一篇、第二篇)。在為OAUS服務端添加自己主動檢測文件變更的功能(這樣每次部署版本號升級時,能夠節省非常多時間。

《Linux核心設計實現》讀書筆記(十七)- 裝置模組

本章主要討論與linux的裝置驅動和裝置管理的相關的4個核心成分,裝置型別,模組,核心物件,sysfs。 主要內容: 裝置型別 核心模組 核心物件 sysfs 總結 1. 裝置型別 linux中主要由3種類型的裝置,分別是: 裝置型別 代表裝置

Java SSH框架系列:使用者登入模組設計實現思路

1.簡介 使用者登入模組,指的是根據使用者輸入的使用者名稱和密碼,對使用者的身份進行驗證等。如果使用者沒有登入,使用者就無法訪問其他的一些jsp頁面,甚至是action都不能訪問。二、簡單設計及實現 本程式是基於Java的SSH框架進行的。 1.資料庫設計 我們應該設計一個

畢業設計----多功能電子詞典的設計實現效果展示

此畢業設計實現了:詞語查詢,漢譯英,英譯漢,語句查詢,短語查詢,登入註冊,答題遊戲,快速記憶,單詞本等功能。想要獲取demo原始碼微信搜尋【畢設線上】選擇原始碼下載即可哦。想要學習做畢設的關注微信公眾號

自動升級系統的設計實現(續2) -- 增加斷點續傳功能 (附最新原始碼)

一.緣起       之前已經寫了兩篇關於自動升級系統OAUS的設計與實現的文章(第一篇、第二篇),在為OAUS服務端增加自動檢測檔案變更的功能(這樣每次部署版本升級時,可以節省很多時間,而且可以避免手動修改帶來的錯誤)後,有部分使用者又提出了一個很好的建議:為OAUS增加斷點續傳功能。因為如果網路狀態不是

EasyDarwin開源流媒體雲平臺之語音對講功能設計實現

EasyDarwin雲平臺一直在穩步的升級迭代中,近日,EasyDarwin雲平臺實現了語音對講的功能。對講功能的加入,標誌著EasyDarwin雲平臺進一步的完善。 流程設計 客戶端使用POST的方式在body中攜帶協議報文向雲平臺傳送開始對講命令; 雲

帶有『選擇次數排序』和『搜尋』功能的樹形控制元件設計實現

一、思想創意 樹形控制元件是軟體操作介面中最常見的一種資料展現控制元件,如下圖所示: 圖1 這就是我們常見的樹形結構,目前有很多樹控制元件可以供我們選擇使用,如zTree、Ext中的樹控制元件,等等。 樹形控制元件這麼多,但實現的功能就是上面這張圖,樹

jQuery架構設計實現(2.1.4版本)

需要 引入 hasclass 8.4 uri and hub 組織 移除 市面上的jQuery書太多了,良莠不齊,看了那麽多總覺得少點什麽 對"幹貨",我不喜歡就事論事的寫代碼,我想把自己所學的知識點,代碼技巧,設計思想,代碼模式能很好的表達出來,所以考慮通過分析jQuer

畢業設計-證券宣傳手機微網站的設計實現

信息 browser .com 接受 熱點 互聯網 計算機網絡 業務 結構 本文介紹基於.net的證券公司宣傳微網站手機網頁的設計與實現方法。 隨著計算機技術的快速發展,基於Web的計算機網絡金融、證券宣傳或交易網站已成為現代金融理財發展的熱點,B/S(Browser/Se

MVC實戰之排球計分(四)—— View設計實現

service family 角色 元素 需要 rom 之前 con xsl (view)視圖 視圖是用戶看到並與之交互的界面。對老式的Web應用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術已層出

MVC實戰之排球計分(五)—— Controller的設計實現

需要 strong 技術 ret web src alt 點擊 cnblogs 控制器 控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。所以當單擊Web頁面中的超鏈接和發送HTML表單時, 控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定調用哪個模型構件去處

stm32視頻教程分享:心率檢測儀的設計實現

stm32視頻教程分享:心率檢測儀的設計與實現 STM32系列是基於專為要求高性能、低成本、低功耗的嵌入式應用專門設計的ARM Cortex-M3內核。 本項目主要講述了通過心律傳感器采集我們的心律數據,然後通過串口傳送到上位機中,上位機用Qt

MVC之排球比賽計分程序 ——(四)視圖的設計實現

元素 role view logs image 技術 size 之前 log (view)視圖 視圖是用戶看到並與之交互的界面。對老式的Web應用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術