一、概述
在物流系統中,中臺只負責物流訂單的流轉,具體的物流履行往往需要對接第三方快遞公司。由於第三方快遞公司的技術標準不一樣,因此我們需要對第三方快遞公司的介面進行封裝,這裡涉及到兩大類封裝,一個是下發請求的封裝,一個是接收回傳的物流詳情的封裝。對於下發快遞公司,我們不僅僅是介面層面的封裝,而是抽象出了一套服務模板,讓快遞公司的物流服務以一種產品形式呈現給商家和使用者。對於物流詳情,我們會設計一套自己的資料模型,來對接不同的快遞公司。
二、物流服務
1、概念模型
物流服務從模型上又分成三個部分:服務模板、快遞公司模型和運費模板。物流服務從流程上來說分成三個階段:物流服務的表達、物流服務的路由、物流服務的履行。
首先我們會錄入快遞公司,並且配置好快遞公司的運費模板,然後我們會編輯服務模板,最後我們把可以提供相應服務的快遞公司掛載到對應的服務模板下面。完成上面的步驟後,商家就可以針對不同的商品選擇對應的服務模板,掛載了服務模板的商品在使用者交易下單的時候是可以看到物流服務的,這時候就會讓使用者選擇服務模板下的不同快遞公司,然後根據快遞公司的運費模板進行物流費用的計算,從而完成訂單金額的計算,後續商家發貨的時候,中臺會根據訂單上的物流服務快照資訊,呼叫不同的快遞公司進行發貨。
2、資料模型
ER資料模型如下圖所示:
2.1、logistics_service
描述:物流服務模板
欄位名稱 | 欄位型別 | 是否可為空 | 描述 |
id | bigint | 否 | 主鍵 |
service_name | varchar(32) | 否 | 服務模板名稱 |
service_code | varchar(32) | 否 | 服務模板code |
type | int | 否 | 模板型別 |
status | int | 否 | 模板狀態 |
is_delete | int | 否 | 是否刪除標記 |
feature | varchar(1024) | 是 | 擴充套件欄位 |
version | int | 是 | 版本號,預設0 |
gmt_created | Datetime | 否 | 建立時間 |
gmt_modified | Datetime | 否 | 修改時間 |
索引欄位:id、service_code
2.2、logistics_company
欄位名稱 | 欄位型別 | 是否可為空 | 描述 |
id | bigint | 否 | 主鍵 |
company_name | varchar(32) | 否 | 快遞公司名稱 |
company_code | varchar(32) | 否 | 快遞公司編碼 |
telephone | varchar(32) | 是 | 公司手機號 |
phone | varchar(32) | 是 | 公司座機號 |
country | varchar(32) | 是 | 國家 |
address | varchar(1024) | 是 | 公司地址 |
company_url | varchar(1024) | 是 | 公司網站地址 |
company_logo | varchar(1024) | 是 | 公司logo圖片地址 |
status | int | 否 | 狀態 |
is_delete | int | 否 | 是否刪除 |
feature | varchar(1024) | 是 | 擴充套件欄位 |
version | int | 是 | 版本號,預設為0 |
gmt_created | Datetime | 否 | 建立時間 |
gmt_modified | Datetime | 否 | 修改時間 |
索引欄位:id、company_code
2.3、logistics_service_company
描述:物流服務模板與物流公司的關聯表
欄位名稱 | 欄位型別 | 是否可以為空 | 描述 |
id | bigint | 否 | 主鍵 |
service_id | bigint | 否 | 服務模板ID |
company_id | bigint | 否 | 物流公司ID |
gmt_created | Datetime | 否 | 建立時間 |
gmt_modified | Datetime | 否 | 修改時間 |
索引:id、service_id、company_id
2.4、freight_template
描述:運費模板
欄位名稱 | 欄位型別 | 是否可為空 | 描述 |
id | bigint | 否 | 主鍵 |
template_name | varchar(32) | 否 | 運費模板名稱 |
company_id | bigint | 否 | 公司ID |
company_code | varchar(32) | 否 | 公司code |
template_type | int | 否 | 模板型別 |
is_default | int | 否 | 是否預設 |
is_delete | int | 否 | 是否刪除 |
status | int | 否 | 狀態 |
feature | varchar(1024) | 是 | 擴充套件欄位 |
version | int | 是 | 版本號,預設0 |
gmt_created | Datetime | 否 | 建立時間 |
gmt_modified | Datetime | 否 | 修改時間 |
索引:id、company_id、company_code
2.5、freight_template_detail
描述:運費模板明細
欄位名稱 | 欄位型別 | 是否可為空 | 描述 |
id | bigint | 否 | 主鍵 |
template_id | bigint | 否 | 運費模板ID |
sendAreaCode | varchar(32) | 否 | 發貨地四級地址code |
sendAreaName | varchar(64) | 是 | 發貨地四級地址名稱 |
sendAreaLevel | int | 否 | 發貨地四級地址level |
receiveAreaCode | varchar(32) | 否 | 收貨地四級地址code |
receiveAreaName | varchar(64) | 是 | 收貨地四級地址名稱 |
receiveAreaLevel | int | 否 | 收貨地四級地址level |
min_weight | Decimal | 是 | 重量下限 |
max_weight | Decimal | 是 | 重量上限 |
min_volumn | Decimal | 是 | 體積下限 |
max_volumn | Decimal | 是 | 體積上限 |
min_count | int | 是 | 數量下限 |
max_count | int | 是 | 數量上限 |
price | Decimal | 否 | 價格 |
is_default | int | 否 | 是否預設 |
is_delete | int | 否 | 是否刪除 |
status | int | 否 | 狀態 |
calculate_type | int | 否 | 計算型別:1 重量 2體積 3 數量 |
priority | int | 否 | 優先順序,預設0 |
feature | varchar(1024) | 是 | 擴充套件欄位 |
version | int | 是 | 版本號,預設0 |
gmt_created | Datetime | 否 | 建立時間 |
gmt_modified | Datetime | 否 | 修改時間 |
索引:id、template_id、sendAreaCode、receiveAreaCode
三、物流詳情
1、流程設計
物流訂單發貨的時候,會傳送非同步訊息,物流詳情接收到訊息後建立一個物流詳情單,然後去訂閱第三方快遞公司,然後快遞公司會非同步回傳物流詳情給我們。對於一些無法訂閱物流詳情的快遞公司,我們通過定時任務定時批量查物流詳情,同步到我們的資料庫中。
2、資料模型
2.1、logistics_detail
描述:物流詳情單
欄位名稱 | 欄位型別 | 是否必填 | 描述 |
id | bigint | 必填 | 主鍵 |
lg_detail_code | varchar(128) | 必填 | 物流詳情單號 |
outer_id | varchar(128) | 必填 | 外部單號 |
outer_order_type | int | 必填 | 外部單型別:1物流訂單 |
receiver_id | bigint | 非必填 | 收貨人ID |
receiver_name | varchar(64) | 非必填 | 收貨人姓名 |
receiver_telephone | varchar(32) | 非必填 | 收貨人電話 |
receiver_province | varchar(32) | 非必填 | 收貨人省份 |
receiver_city | varchar(64) | 非必填 | 收貨人城市 |
receiver_area | varchar(64) | 非必填 | 收貨人地區 |
receiver_street | varchar(64) | 非必填 | 收貨人街道 |
receiver_address | varchar(1024) | 非必填 | 收貨人詳細地址 |
receiver_address_code | varchar(32) | 非必填 | 四級地址編碼 |
sender_id | bigint | 非必填 | 發貨人ID |
sender_name | varchar(64) | 非必填 | 發貨人姓名 |
sender_telephone | varchar(32) | 非必填 | 發貨人電話 |
sender_province | varchar(32) | 非必填 | 發貨人省份 |
sender_city | varchar(64) | 非必填 | 發貨人城市 |
sender_area | varchar(64) | 非必填 | 發貨人地區 |
sender_street | varchar(64) | 非必填 | 發貨人街道 |
sender_address | varchar(1024) | 非必填 | 發貨人詳細地址 |
sender_address_code | varchar(32) | 非必填 | 四級地址編碼 |
mail_no | varchar(128) | 必填 | 運單號 |
company_code | varchar(32) | 非必填 | 快遞公司code |
company_name | varchar(32) | 非必填 | 快遞公司名稱 |
service_code | varchar(32) | 非必填 | 服務模板code |
status | int | 必填 | 狀態 |
is_delete | int | 必填 | 是否刪除 |
feature | varchar(1024) | 非必填 | 擴充套件欄位 |
version | int | 非必填 | 版本號,預設0 |
gmt_created | Datetime | 必填 | 建立時間 |
gmt_modified | Datetime | 必填 | 修改時間 |
索引:id、lg_detail_code、unique(outer_id,outer_order_type)
2.2、logistics_detail_node
欄位名稱 | 欄位型別 | 是否必填 | 描述 |
id | bigint | 必填 | 主鍵 |
lg_detail_code | varchar(128) | 必填 | 物流詳情單code |
mail_no | varchar(128) | 必填 | 運單號 |
node_time | Datetime | 非必填 | 物流詳情節點時間 |
node_detail | varchar(2048) | 非必填 | 物流詳情節點內容 |
sort_value | int | 非必填 | 排序 |
feature | varchar(1024) | 非必填 | 擴充套件欄位 |
version | int | 非必填 | 版本號,預設0 |
gmt_created | Datetime | 必填 | 建立時間 |
gmt_modified | Datetime | 必填 | 修改時間 |
索引:id、lg_detail_code
四、總結
物流服務和物流詳情是對第三方快遞公司的一層抽象和封裝,相對來說比較簡單,下一篇文章我們將進入重點內容:產品服務層的設計。
更多文章歡迎訪問 http://www.apexyun.com/
聯絡郵箱:public@space-explore.com
(未經同意,請勿轉載)