一、概述

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

二、物流服务

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

四、总结

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