分享

基于中台思想的物流系统设计(四):物流服务与物流详情

 hmtomyang 2019-08-25

一、概述

在物流系统中,中台只负责物流订单的流转,具体的物流履行往往需要对接第三方快递公司。由于第三方快递公司的技术标准不一样,因此我们需要对第三方快递公司的接口进行封装,这里涉及到两大类封装,一个是下发请求的封装,一个是接收回传的物流详情的封装。对于下发快递公司,我们不仅仅是接口层面的封装,而是抽象出了一套服务模板,让快递公司的物流服务以一种产品形式呈现给商家和用户。对于物流详情,我们会设计一套自己的数据模型,来对接不同的快递公司。

二、物流服务

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

四、总结

物流服务和物流详情是对第三方快递公司的一层抽象和封装,相对来说比较简单,下一篇文章我们将进入重点内容:产品服务层的设计。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多