基于中台思想的物流系统设计(四):物流服务与物流详情
一、概述
在物流系统中,中台只负责物流订单的流转,具体的物流履行往往需要对接第三方快递公司。由于第三方快递公司的技术标准不一样,因此我们需要对第三方快递公司的接口进行封装,这里涉及到两大类封装,一个是下发请求的封装,一个是接收回传的物流详情的封装。对于下发快递公司,我们不仅仅是接口层面的封装,而是抽象出了一套服务模板,让快递公司的物流服务以一种产品形式呈现给商家和用户。对于物流详情,我们会设计一套自己的数据模型,来对接不同的快递公司。
二、物流服务
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
(未经同意,请勿转载)
基于中台思想的物流系统设计(四):物流服务与物流详情相关推荐
- 基于中台思想的物流系统设计(二):构建物流订单能力
一.引言 物流订单能力作为基础能力,需要设计一套稳定的订单模型,以及一套能够在高并发环境下持续可用的接口.这些接口作为原子接口,供上层业务复用.上层业务无论多么复杂,通过这些原子接口,最终都会收敛到稳 ...
- 基于中台思想的物流系统设计(一)
一.总体设计 在中台架构中,我们往往把一个系统划分为基础能力层和产品服务层.其中,基础能力层聚焦于稳定收敛的业务模型和基础服务本身,不会随着业务和前台产品的调整发生变化,平台产品层则专注于通过流程编排 ...
- 基于中台思想的物流系统设计(三):构建物流地址能力
一.引言 在电商物流领域我们会涉及到地址,其中包括了基础的四级地址和用户填写的地址.四级地址在整个从下单到收货的业务流程中都会用到,因此设计的时候要考虑如何最大限度地提高QPS.用户地址在下单的时候让 ...
- 基于java的快递物流查询系统_毕业论文-快递管理基于java的物流快递管理系统设计.doc...
毕业论文-快递管理基于java的物流快递管理系统设计 快递管理系统 毕业设计论文 题 目 快递管理系统 姓 名 王敏雪 所 属 系 数学与计算机科学 专 业 计算机科学与技术 班 级 07级计科三班 ...
- 基于4G DTU和工业4G路由器的互联网+智慧物流解决方案
一.行业背景 智慧物流是一种以信息技术为支撑,在物流的运输.仓储.包装.装卸搬运.流通加工.配送.信息服务等各个环节实现系统感知.全面分析,及时处理及自我调整功能,实现物流规整智慧.发现智慧.创新智慧 ...
- 嵌入式项目实战——基于QT的视频监控系统设计(四)
嵌入式项目实战--基于QT的视频监控系统设计(四) 进入到五一假期的第四天,通过前三天的分享,相信你应该已经掌握了QT的基本使用.UDP网络编程.v4l2视频处理模块.多线程编程等基本的知识点.其实昨 ...
- 基于物联网的智能家居系统设计(课设)
基于物联网的智能家居系统设计(课设) 摘 要 一.概述 二.系统分析 三.系统设计 四.系统实现 1.硬件实现 2.软件实现 五.结论与心得 六.参考文献 摘 要 科技的快速发展给人们的生活带来了 ...
- java毕业设计——基于Java+Socket的视频会议系统设计与实现(毕业论文+程序源码)——视频会议系统
基于Java+Socket的视频会议系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+Socket的视频会议系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下 ...
- 【IoT】基于 CC2530 的 ZigBee 物联网系统设计
1.1设计背景 无线传感器网络是目前研究的热门领域,它集成 了多门学科的知识,应用领域广泛,因此深受国际社会 的关注. 在 21 世纪里,无线传感器网络技术是具有 较大影响力技术中的一个热门技术,也是 ...
最新文章
- UVa11022 String Factoring(kmp+dp)
- linux eclipse java_从Linux终端编译运行Eclipse Java项目
- Storm,Trident,Spark Streaming,Samza和Flink主流流处理框架比较
- 936焊台(恒温电烙铁)温度不可调的维修 (Z)
- 进程handle获取线程_获取进程中的线程列表
- java 添加注解_你知道Java中的package-info的作用吗?
- 基于POLARDB数据库的压测实践
- python的底层实现_Python底层封装实现方法详解
- 【参与开源】J2EE开源项目JEECG快速开发平台,欢迎广大技术爱好者参与,第三期招募新成员
- 每日一道算法题--leetcode 746--使用最小花费爬楼梯--python
- python开发聊天机器人_Python实现机器人聊天
- open函数返回-1_Linux驱动开发 / 字符设备驱动内幕 (1)
- 搜狗浏览器安装插件(.crx)
- linux安装谷歌中文,CentOS 7安装谷歌拼音中文输入法
- 修复YYC松鼠短视频系统搜索功能无法使用问题
- uniapp-连接服务器超时,点击重试
- 老爷“鸡”升级小记!
- Deepin Linux系统安装及显示器配置教程(可竖屏)
- 修改织梦dedecms后台默认admin账号的方法
- php设置字体为黑体,css如何设置黑体样式