精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go開發實戰-訂單接口的功能分析和代碼開發講解

開發 前端
我們的購物車數據是保存在服務端的數據表中的,因為這個數據保存在服務端,所以創建訂單這個功能客戶端提交上來的數據就只需要把要生成訂單進行結算的購物項目ID和用戶的地址信息ID提交上來即可。

前面實現購物車模式的時候我們說了,購物車作為商品和訂單的中間角色,讓用戶有機會一次性選購多個商品后再進行下單結賬。

那么用戶在把想要選購的商品加入購物車后,接下來的產品流程就到了進行購物結算了,等用戶支付后,商家或者購物平臺會安排進行物流發貨,虛擬產品則是為用戶開通某些權益。

訂單結算這個產品流程其實包括兩個子流程

  • 購物項創建訂單
  • 支付訂單

訂單模塊功能分析

首先我們再次看一下需求分析章節中,我們分析出來的業務結構,這里我們重點關注訂單模塊,以及它跟其他模塊靠什么關聯。

圖片圖片


可以看到訂單中,訂單是業務的聚合根,其下還有訂單商品明細和訂單地址。為什么要有后面兩部分呢?在上圖的注釋里我們做了標注:它們是作為訂單的快照信息,因為如果訂單直接跟商品ID和用戶地址ID關聯的話,假如未來商品調整了價格、下架了亦或是用戶搬家更新了地址,萬一哪天“秋后算賬”看看之前的訂單,就會出現訂單信息跟用戶自己當初購買時信息不一致的情況。

訂單模塊在付款之前的功能如下(支付功能等下節再分析):

  • 創建訂單
  • 訂單查詢

訂單列表

訂單詳情

  • 修改訂單 (一般C端此時只允許用戶取消訂單)

創建訂單

我們的購物車數據是保存在服務端的數據表中的,因為這個數據保存在服務端,所以創建訂單這個功能客戶端提交上來的數據就只需要把要生成訂單進行結算的購物項目ID和用戶的地址信息ID提交上來即可。

所以我們先在api/request/order.go 中,定義用戶創建訂單的請求格式如下:

type OrderCreate struct {
 CartItemIdList []int64 `json:"cart_item_id_list" binding:"required"`
 UserAddressId  int64   `json:"user_address_id" binding:"required"`
}

服務端拿到參數后可以自己去檢索對應的購物項信息,然后再去獲取對應的商品信息,進行結算相關的計算。這樣整個過程不需要客戶端過多參與,能最大限度地保證用戶數據的安全。

所以我們在Order的應用服務中的邏輯如下:

func (oas *OrderAppSvc) CreateOrder(orderRequest *request.OrderCreate, userId int64) (*reply.OrderCreateReply, error) {
 cartDomainSvc := domainservice.NewCartDomainSvc(oas.ctx)
 cartItems, err := cartDomainSvc.GetCheckedCartItems(orderRequest.CartItemIdList, userId)
if err != nil {
returnnil, err
 }
 userDomainSvc := domainservice.NewUserDomainSvc(oas.ctx)
 address, err := userDomainSvc.GetUserSingleAddress(userId, orderRequest.UserAddressId)
if err != nil {
returnnil, err
 }

 order, err := oas.orderDomainSvc.CreateOrder(cartItems, address)
if err != nil {
returnnil, err
 }
 orderReply := new(reply.OrderCreateReply)
 orderReply.OrderNo = order.OrderNo
return orderReply, nil
}
  • 首先調用CartDomainSvc通過購物項ID獲取用戶添加在購物車中的購物項,該方法 GetCheckedCartItems 是我們在購物車模塊中已經實現好的,通過它能獲取購物項信息,其中會包括具體的商品信息、價格、購買數量等。
  • 通過用戶的地址信息ID調用UserDomainSvc獲取用戶的詳細地址信息。
  • 拿到創建訂單所依賴的信息后,調用OrderDomainSVC 去創建訂單。

OrderDomainSVC中創建訂單的實現如下:

func (ods *OrderDomainSvc) CreateOrder(items []*do.ShoppingCartItem, userAddress *do.UserAddressInfo) (*do.Order, error) {
  // 詳細的代碼實現和注釋
  // 請訂閱專欄加入項目后查看
 return order, err
}

代碼較長這里簡單說下里面的實現步驟:

  • 首先我們依賴上節課使用職責鏈實現的CartBillChecker來計算一下訂單商品的總價、優惠金額等結算信息
  • 設置用戶訂單的UserId、OrderNo、訂單金額-BillMoney、實際支付金額-PayMoney、訂單狀態。
  • 開啟數據庫事務

操作一:保存訂單信息到數據表

操作二:從用戶購物車中刪除已下單商品

操作三:如使用了優惠券,鎖定優惠券,等支付成功后再核銷(項目沒有,這里Mock)

操作四:如參與了滿減活動、記錄相關信息

操作五:減少訂單購買商品的庫存,因為會鎖行記錄, 把這一步放到創建訂單步驟的最后, 減少行記錄加鎖的時間

  • 提交/回滾事務。

在實現代碼中我特地使用了GORM手動管理事務的方法,在用戶地址信息維護章節中我已經演示過了GORM自動管理事務的db.Transaction方法,其實我這里用的就是db.Transaction 的內部實現邏輯。

大家可以根據自己的喜好,手動或者自動管理事務,如果讓我選,我還是推薦GORM自己管理事務,別太相信自己,畢竟萬一漏掉一點代碼就是一個BUG,到時候甩鍋都不好甩給GORM,哈哈哈哈。

重啟項目后我們,發起創建訂單請求把購物車中的購物項下單, 請求結果如下。

圖片圖片


整個創建訂單過程中生成訂單號、還有其他的一些代碼大家就去項目里看吧,這里不貼這么多了。接下來我們來看訂單查詢。

訂單查詢

關于訂單查詢,其實主要有一點需要注意,就是我們訂單前臺顯示狀態和訂單在系統中真正的狀態流轉是有一丟丟不一樣的,說大白話就是數據庫里訂單狀態的枚舉值跟用戶在前臺看到的狀態值是不一樣的。

針對訂單狀態,我們在項目的 common/enum/order.go 中定義了如下枚舉值和數據表里的訂單狀態值一一對應。

const (
 OrderStatusCreated        = iota // 已創建
 OrderStatusUnPaid                // 待支付
 OrderStatusPaid                  // 已支付
 OrderStatusChecked               // 檢貨完成
 OrderStatusShipped               // 已發貨
 OrderStatusOnDelivery            // 配送中 -- 快遞員上門送貨中
 OrderStatusDelivered             // 已送達
 OrderStatusConfirmReceipt        // 已確認收貨
 OrderStatusCompleted             // 訂單完成
 OrderStatusUserQuit              // 用戶取消
 OrderStatusUnpaidClose           // 超時未支付
 OrderStatusMerchantClose         // 商家關閉訂單
)

但是用戶在前臺看到自己的訂單狀態,往往是像下面這樣。

圖片圖片

所以我們在給客戶端返回用戶的訂單時,關于訂單狀態的前臺展示要做一下轉換才行,盡量不要讓客戶端拿到所有狀態再去轉換,因為如果前后端都有邏輯,維護起來或者做自動化測試這些都會很困難。

這里我對訂單狀態的枚舉值跟前臺顯示狀態做了如下映射,讓我們在返回響應給客戶端前可以把訂單狀態轉換為前臺展示狀態:

// OrderFrontStatus 用戶在前臺看到的訂單狀態
var OrderFrontStatus = map[int]string{
 OrderStatusCreated:        "待付款",
 OrderStatusUnPaid:         "待付款",
 OrderStatusPaid:           "待發貨",
 OrderStatusChecked:        "待發貨",
 OrderStatusShipped:        "待收貨",
 OrderStatusOnDelivery:     "待收貨",
 OrderStatusDelivered:      "待收貨",
 OrderStatusConfirmReceipt: "待評價",
 OrderStatusCompleted:      "已完成",
 OrderStatusUserQuit:       "已取消",
 OrderStatusUnpaidClose:    "已取消",
 OrderStatusMerchantClose:  "已取消",
}

接下來我們看一下,訂單查詢相關的功能實現。

責任編輯:武曉燕 來源: 網管叨bi叨
相關推薦

2025-03-10 09:07:20

2010-12-22 17:17:54

2011-11-29 10:24:17

OpenStackNova

2010-09-22 15:31:05

OracleSPARCSolaris

2010-02-05 16:25:10

C++ strtok(

2010-05-04 16:59:52

DNS負載均衡

2015-05-12 10:24:23

OpenStack K新版本特性Horizon

2015-01-12 15:26:42

Cephweb管理云平臺

2025-01-02 09:02:09

Go項目Token

2012-11-05 10:36:40

IBMdw

2012-10-19 16:18:42

Exchange

2015-05-12 10:31:25

openstack開源新特性分析

2015-05-12 10:47:49

openstack k開源分析

2013-02-20 09:15:10

WinRT開發

2015-05-12 10:38:56

openstack k開源分析

2025-01-08 09:07:06

2022-12-27 08:00:00

開發機器學習數據集

2022-08-09 16:01:24

應用開發鴻蒙

2011-07-04 10:55:10

EnyowebOS 3.0 S

2010-08-06 09:38:58

RIP報文
點贊
收藏

51CTO技術棧公眾號

欧美久久久一区| 午夜亚洲一区| 日韩精品一区二区三区swag | 亚洲美女免费视频| 亚洲综合中文字幕在线| 免费在线黄色片| 国产成人毛片| 中文字幕一区三区| 99高清视频有精品视频| 久久国产视频一区| 97视频精品| 亚洲国产精品大全| 国产嫩草在线观看| caoporn免费在线| 丁香另类激情小说| 国产91免费看片| 天天干中文字幕| 欧美极品在线观看| 日韩欧美一区二区三区在线| 精品这里只有精品| 欧洲日本在线| 99免费精品在线观看| 国产精品久久久久久久久久小说| 欧美黄色aaa| 亚洲系列另类av| 日韩欧美精品在线| 男人女人黄一级| av激情在线| 国产亚洲精品免费| www.成人av.com| 中文字幕人妻互换av久久| 在线成人超碰| 深夜福利国产精品| 黄色国产在线观看| 日韩一区二区三区色| 91久久线看在观草草青青| 国产精品日韩三级| 日本免费在线视频| 国产亚洲精品精华液| 国产伦精品一区二区三区高清版| av首页在线观看| 国产人成精品一区二区三| 久久人人爽人人爽人人片亚洲| 精品无码在线视频| 77成人影视| 欧美日韩国产成人在线91| 91视频最新入口| 91超碰在线播放| 亚洲欧洲制服丝袜| 日韩精品久久一区| 熟妇人妻一区二区三区四区 | 久久久久国产精品免费| 美女网站视频色| 蜜桃成人av| 日韩电影免费观看中文字幕| 日本少妇一区二区三区| gogo大尺度成人免费视频| 欧美在线免费观看亚洲| 国产欧美在线一区| 午夜在线激情影院| 亚洲国产高清在线观看视频| 日产精品高清视频免费| 男女网站在线观看| 97se狠狠狠综合亚洲狠狠| 国产精品免费一区二区三区| 不卡视频在线播放| 国产精品一区二区三区99 | 日韩欧美高清一区二区三区| 欧美巨大另类极品videosbest| 色综合手机在线| 欧洲亚洲两性| 欧美在线你懂得| www欧美激情| 四虎4545www国产精品| 欧美午夜免费电影| 91看片在线免费观看| 亚洲精品三区| 欧美一区二区福利视频| 激情图片中文字幕| 欧美午夜在线播放| 欧美tk—视频vk| 日本三级日本三级日本三级极| 精品丝袜久久| 亚洲视屏在线播放| 欧美亚一区二区三区| 亚洲+小说+欧美+激情+另类| 亚洲视频999| 欧美88888| 女同性一区二区三区人了人一| 欧美日本中文字幕| 中文字幕一区二区三区精品| 久久精品二区三区| 国产精品揄拍一区二区| 99热精品在线播放| 成人小视频免费观看| 蜜桃91精品入口| 色在线免费视频| 国产精品拍天天在线| 99精品一级欧美片免费播放| 色综合999| 欧美午夜美女看片| 久热在线视频观看| 91欧美极品| 亚洲一二三在线| 91狠狠综合久久久| 欧美日韩1区| 国内精品久久久久| av首页在线观看| 国产福利一区二区| 日韩av电影免费观看| 黄色动漫在线| 欧美性感美女h网站在线观看免费| 三年中国国语在线播放免费| 免费一级欧美在线大片| 亚洲精品日韩欧美| 亚洲精品国产精品乱码在线观看| 韩国欧美一区| 国产欧美日韩高清| 欧美特黄一级视频| 中文字幕一区二区三区精华液| 91传媒免费视频| 欧美极品影院| 精品国产三级a在线观看| 女人又爽又黄免费女仆| 91一区二区| 国产成人精品视频在线观看| 东京干手机福利视频| 久久精品人人做人人爽97| 蜜臀在线免费观看| 成人福利一区二区| 精品福利一二区| 女人18毛片毛片毛片毛片区二| 亚洲黄色成人| 92福利视频午夜1000合集在线观看| 性xxxx视频播放免费| 亚洲男人电影天堂| 手机看片福利日韩| 青青操综合网| 欧美极品xxxx| 国产农村妇女毛片精品| 国产午夜一区二区三区| 国产精品又粗又长| 国产成人77亚洲精品www| 精品伦理精品一区| 中国一级片在线观看| 日本午夜精品一区二区三区电影| 亚洲va男人天堂| 精品久久久久一区二区三区| 亚洲人午夜精品天堂一二香蕉| 国产一级特黄a大片免费| 中文精品一区二区| 久久久久久久久电影| 精品国产av 无码一区二区三区| 国产女主播视频一区二区| 欧美一级在线看| 欧美a级网站| 97国产在线观看| 亚洲精品国产av| 成人欧美一区二区三区白人 | 欧美极品一区二区| 日韩伦理在线一区| 亚洲国产欧美一区二区三区同亚洲| 免看一级a毛片一片成人不卡| 国产在线精品免费| 在线观看18视频网站| 精品国产一区二区三区性色av| 久久亚洲春色中文字幕| 一级淫片免费看| 综合色中文字幕| 在线视频日韩欧美| 一区二区三区在线电影| 亚洲精品免费网站| 色婷婷av在线| 亚洲成人av片| 黄色在线免费观看| 成人福利视频网站| 日b视频免费观看| 欧美电影完整版在线观看| 欧美中文字幕第一页| 高清性色生活片在线观看| 在线免费av一区| 我要看一级黄色录像| 国产麻豆精品久久一二三| 性高湖久久久久久久久aaaaa| 凹凸av导航大全精品| 51精品国产黑色丝袜高跟鞋| 免费成人av电影| 欧美天堂一区二区三区| 欧美色视频一区二区三区在线观看| 国产在线播放一区| 分分操这里只有精品| 女厕嘘嘘一区二区在线播放| 国产精品久久99久久| 黄色av电影在线观看| 精品国产免费人成电影在线观看四季 | 欧美日韩视频免费看| 欧美日韩999| 欧美套图亚洲一区| 欧美日韩国产电影| 国产一级黄色av| 久久青草欧美一区二区三区| 午夜一区二区视频| aa国产精品| 久久国产日韩欧美| 中文成人在线| 欧美一区二区影院| 黄视频网站在线看| 亚洲欧美国产高清va在线播| 这里只有久久精品视频| 一区二区三区中文字幕精品精品 | 亚洲精品一线| 亚洲最新中文字幕| 懂色av一区二区三区四区| 一本久久综合亚洲鲁鲁五月天| 91精品一区二区三区蜜桃| 91免费视频大全| 亚洲国产日韩欧美在线观看| 亚洲国产电影| 中文字幕日韩一区二区三区| 人人香蕉久久| 91精品黄色| 97精品国产综合久久久动漫日韩| 欧美黑人性猛交| 欧美三级黄网| 亚洲性线免费观看视频成熟| 91在线你懂的| 欧美四级电影网| 国产一级在线播放| 亚洲欧美电影院| 永久免费毛片在线观看| 99久久综合狠狠综合久久| 国产精品探花在线播放| 中文一区在线| 日本大胆人体视频| 日韩av有码| 日本一区二区三区免费看| 极品束缚调教一区二区网站 | 精品国产一区三区| 欧美国产高清| 在线免费观看成人网| 黄色欧美在线| 91在线中文字幕| 香蕉久久一区| 国产精品嫩草视频| 日韩欧美一区二区三区免费观看| 97久久伊人激情网| 大黄网站在线观看| 欧美激情第一页xxx| 国产网站在线免费观看| 日韩天堂在线视频| 成人三级黄色免费网站| 国产一区二区三区在线视频 | 欧美mv和日韩mv的网站| 国产又粗又猛又爽又黄的视频一| 在线免费一区三区| 精品人妻一区二区色欲产成人| 亚洲精品菠萝久久久久久久| 天天色天天综合| 亚洲欧洲日本在线| 美女福利视频网| 综合婷婷亚洲小说| 日韩精品123区| 亚洲天堂2016| 男女性高潮免费网站| 国产精品青草久久| 欧洲美女女同性互添| 亚洲女与黑人做爰| 久久久无码一区二区三区| 一区二区在线观看免费| 久一视频在线观看| 亚洲高清久久久| 中文在线观看免费网站| 最新不卡av在线| avove在线播放| 午夜欧美视频在线观看| 国产一级片毛片| 日本高清不卡在线观看| 一级爱爱免费视频| 在线91免费看| 亚洲黄色在线免费观看| 欧美sm极限捆绑bd| 日本在线一二三| 一本色道久久综合亚洲精品小说| 97视频精彩视频在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 很黄的网站在线观看| 欧美人成在线视频| 爱啪视频在线观看视频免费| 日韩av免费网站| 色999久久久精品人人澡69| 97视频资源在线观看| 美女呻吟一区| 亚洲精品日韩精品| 国产精品毛片久久| 成人在线免费观看网址| 国产精品腿扒开做爽爽爽挤奶网站| 中文字幕乱码人妻综合二区三区| 蜜臀精品久久久久久蜜臀| 国偷自产av一区二区三区麻豆| 91在线高清观看| 99热99这里只有精品| 亚洲h精品动漫在线观看| 国产九色91回来了| 欧美zozo另类异族| 国产精品麻豆一区二区三区| 久久高清视频免费| 17videosex性欧美| 欧美亚洲国产成人精品| 色成人综合网| 欧美日韩无遮挡| 国产一区亚洲| 国产精品无码一本二本三本色| 国产一二精品视频| 久久精品一区二区免费播放| 亚洲欧美日韩中文播放 | 欧美激情aaaa| 欧美123区| 国产精品加勒比| 色综合蜜月久久综合网| 黄色片视频在线免费观看| 国内精品不卡在线| 中文字幕在线1| 亚洲午夜国产一区99re久久| 国产免费av电影| 色av中文字幕一区| 成人交换视频| 日韩av不卡播放| 日本最新不卡在线| 谁有免费的黄色网址| 一本久久综合亚洲鲁鲁五月天| 亚洲 欧美 自拍偷拍| 海角国产乱辈乱精品视频| 视频一区中文字幕精品| 日韩精品手机在线观看| 精品一区二区免费| 国产中文字幕久久| 欧美男生操女生| 黄色网在线看| 91在线直播亚洲| 欧美激情综合色综合啪啪| 古装做爰无遮挡三级聊斋艳谭| 综合欧美一区二区三区| 99久久久久成人国产免费| 久久天天躁狠狠躁夜夜av| 精品一区二区三区中文字幕| 国产对白在线播放| 国产精品一区二区视频| 久久久久久蜜桃| 精品国产髙清在线看国产毛片 | 国产高清一区二区| 99中文字幕在线| 亚洲精品少妇30p| 亚洲xxxx天美| 午夜免费日韩视频| 天天躁日日躁狠狠躁欧美| 欧美日韩在线不卡视频| 国产欧美综合色| 99精品免费观看| 欧美激情亚洲精品| 亚洲欧洲免费| 亚洲福利精品视频| 亚洲视频在线观看一区| 亚洲美女性生活| 日av在线播放中文不卡| 欧美日韩中文一区二区| 国产资源中文字幕| 午夜视频一区在线观看| 黄色在线免费观看大全| 国产在线播放不卡| 国产综合婷婷| 中文字幕av网址| 制服丝袜在线91| 国产精选在线| 亚洲精品二区| 高清视频一区二区| 无码人妻精品一区二区| 久久精品国产亚洲精品| 国产主播性色av福利精品一区| 日韩av在线综合| 亚洲精品国产第一综合99久久| 神马午夜电影一区二区三区在线观看| 欧美综合在线第二页| 91精品福利| 草草地址线路①屁屁影院成人| 欧美日韩国产高清一区二区 | 91成人国产| 朝桐光av一区二区三区| 欧美日韩视频一区二区| 91麻豆免费在线视频| 欧美久久在线| 国产成人丝袜美腿| 国产一卡二卡三卡| 欧美激情网友自拍| 日本a级不卡| 中文字幕一区二区三区乱码不卡| 黄网页免费在线观看| 国产精品一区二区三| 99精品国产在热久久| 最新一区二区三区| 亚洲美女久久久|