分庫(kù)分表實(shí)戰(zhàn)之訂單業(yè)務(wù)完整梳理

前 言
?上一期?內(nèi)容我們整體了解了分庫(kù)分表實(shí)戰(zhàn)項(xiàng)目當(dāng)前使用的系統(tǒng)架構(gòu),也就是單庫(kù)版本訂單系統(tǒng)的系統(tǒng)架構(gòu)。同時(shí),我們也知道了未來要做的分庫(kù)分表版本的訂單系統(tǒng)架構(gòu)?,F(xiàn)在,我們就從單庫(kù)版本的訂單系統(tǒng)開始,一步一步的來進(jìn)行優(yōu)化。
如果想要優(yōu)化單庫(kù)版本的訂單系統(tǒng),首先要了解目前的訂單系統(tǒng)有哪些核心功能,核心功能的業(yè)務(wù)流程是什么。
如果你剛?cè)肼毩诉@家初創(chuàng)型互聯(lián)網(wǎng)公司,而你所在的部門又剛好是做外賣APP的訂單系統(tǒng)的,那你認(rèn)為入職之后要干的第一件事是什么呢?
必須是了解整個(gè)訂單系統(tǒng),你的leader可能會(huì)直接給你發(fā)個(gè)wiki,這個(gè)wiki中包含了單庫(kù)版本的系統(tǒng)架構(gòu)圖,如下圖:

通過這張系統(tǒng)架構(gòu)圖,可以知道整個(gè)訂單系統(tǒng)目前有哪些核心功能,都使用了哪些技術(shù)棧。
并且,在這個(gè)wiki中除了有系統(tǒng)架構(gòu)圖之外,還有很多核心接口的業(yè)務(wù)流程圖,通過這些業(yè)務(wù)流程圖,可以快速了解到訂單系統(tǒng)核心接口的業(yè)務(wù)流程。
那訂單系統(tǒng)中,有哪些核心接口的業(yè)務(wù)流程圖?現(xiàn)在,我們一起來看一下。
用戶下單流程
大家或多或少都是點(diǎn)過外賣的,訂單系統(tǒng)涉及用戶和商家兩個(gè)角色的功能,先來看一下C端,即用戶端的一些業(yè)務(wù)流程,首先就是用戶下單的操作。
用戶可以在外賣APP中點(diǎn)外賣,當(dāng)用戶選中一個(gè)商品之后,會(huì)提交訂單,接著就會(huì)發(fā)起一個(gè)創(chuàng)建訂單的請(qǐng)求,如下圖:

可以看到,創(chuàng)建訂單的請(qǐng)求首先會(huì)轉(zhuǎn)發(fā)給Controller組件,Controller組件再把請(qǐng)求交給Service組件處理,在Service組件中會(huì)先生成一個(gè)訂單號(hào),然后為新的訂單組裝好訂單信息以及訂單明細(xì)信息。
隨后,Service組件再將組裝好的訂單信息轉(zhuǎn)交給Repository組件處理,Repository組件通過Mapper組件,最終將訂單的信息保存到數(shù)據(jù)庫(kù)中。
當(dāng)然,用戶正式下單之后,是需要支付訂單的,但是支付相關(guān)的功能,這里可以暫時(shí)不用關(guān)注。
用戶查詢訂單列表流程
當(dāng)用戶完成下單之后,用戶可能要看一下自己曾經(jīng)下過哪些訂單,所以,訂單系統(tǒng)還支持訂單列表查詢,如下圖:

可以看到,用戶可以向外賣訂單系統(tǒng),發(fā)起一個(gè)查詢訂單列表的請(qǐng)求,請(qǐng)求同樣先轉(zhuǎn)發(fā)到Controller組件上,因?yàn)槭遣樵冇唵瘟斜淼男畔?,所以我們只需要傳遞查詢的參數(shù)即可。
然后,Controller組件會(huì)把請(qǐng)求參數(shù),通過Service組件傳到Repository組件上,然后Repository組件可以調(diào)用Mapper組件的接口,再到數(shù)據(jù)庫(kù)中查詢用戶的所有訂單信息,查詢結(jié)果最后會(huì)形成一個(gè)訂單列表,最后一步步返回給用戶。
最終,用戶就可以從訂單列表中,看到自己下過的所有訂單信息了。
用戶查看訂單詳情流程
如果用戶還想要看下某個(gè)訂單里面的詳細(xì)信息,此時(shí)業(yè)務(wù)流程圖如下所示:

可以看到,查詢訂單明細(xì)請(qǐng)求會(huì)先轉(zhuǎn)發(fā)到Controller組件上,然后Controller組件把請(qǐng)求交給Service組件處理。
隨后,Service組件攜帶著訂單號(hào),將查詢訂單明細(xì)的請(qǐng)求交給Repository組件來查詢,Repository組件根據(jù)訂單號(hào)調(diào)用Mapper組件的接口,接口會(huì)到數(shù)據(jù)庫(kù)中查詢訂單及訂單明細(xì)的信息,最后將查詢出來的訂單明細(xì)信息返回給用戶。
用戶取消訂單流程
另外,用戶下單之后也是支持取消訂單的,當(dāng)用戶要取消一個(gè)訂單時(shí),也會(huì)發(fā)送一個(gè)取消訂單的請(qǐng)求,如下圖:

如所有請(qǐng)求一樣,取消訂單的請(qǐng)求首先發(fā)送給Controller組件,Controller組件會(huì)將請(qǐng)求交給Service組件處理,Service組件會(huì)把需要取消訂單的訂單號(hào)發(fā)送給Repository組件,Repository組件拿著訂單號(hào)調(diào)用Mapper組件中的接口,更新訂單將訂單取消掉。
現(xiàn)在,外賣訂單系統(tǒng)中,C端也就是用戶端的一些操作我們已經(jīng)了解了,而B端也就是商家的功能,和用戶端的功能是比較類似的。
商家也會(huì)查看訂單列表以及訂單的明細(xì)信息,而且,當(dāng)用戶下單之后,商家可以選擇接單或者拒接,一旦商家選擇接單,那么訂單狀態(tài)就會(huì)變?yōu)椤耙呀訂巍保@些功能在我們的外賣訂單系統(tǒng)中都是支持的。
結(jié)束語
最后,在這個(gè)wiki中不僅有一堆的流程圖,還有訂單系統(tǒng)代碼倉(cāng)庫(kù)的Git地址,然后你將代碼拉到本地,接著,你一邊看著這些wiki中的業(yè)務(wù)流程圖,一邊慢慢開始熟悉起來了代碼......















 
 
 


















 
 
 
 