神领物流v2.0-day3-运费微服务笔记(个人记录、含练习答案、仅供参考)

目录

一、前言

二、预估运费

1、模拟实现

2、测试

三、运费微服务

1、拉取代码

2、模板列表

1)导入相关代码

2)测试

3)代码优化

3、新增或更新运费模板

1)导入代码

2)测试

4、运费计算

1)导入代码

2)测试

3)整合到订单微服务

4)测试

5、代码优化-责任链设计模式

1)导入代码

2)测试

四、练习

1、练习一:删除运费模板

1)确认接口信息

2)代码实现

3)测试

2、练习二:查询模板增加缓存

1)代码实现

2)测试

3、练习三(暂时没有想法不做)


一、前言

个人学习记录,已完成练习一和练习二(含答案和测试),练习三未完成

二、预估运费

1、模拟实现

前面的业务需求和实现分析大家跟着视频走就行,下面我主要记录一下代码的实现。如下拉取oms-service的代码,至于后续导入模块及创建develop分支的流程我就不赘述了

找到OrderServiceImpl下的computerCarriage方法,将调用feign接口的代码先注释掉,将文档中模拟实现的代码复制进来。模拟实现就是直接把运费写死为10元

2、测试

在虚拟机连接工具中通过docker stop sl-express-ms-oms-service指令停掉虚拟机中的服务

在本地idea中将OmsApplication、GatewayApplication、WebCustomerApplication三个服务启动,然后打开微信开发者工具。因为oms-service的代码修改了,所以点击一下连衣裙改为2公斤让小程序刷新一下,出现如下图预估总价为10元就测试成功了

三、运费微服务

1、拉取代码

老样子,拉取代码的流程不再赘述

2、模板列表

1)导入相关代码

这部分代码基本都是直接从文档中复制过来,不再赘述

2)测试

将下图的四个服务启动起来,等会基于swagger和前端都测试一下

启动项目后,基于swagger接口进行测试:http://127.0.0.1:18094/doc.html。如下图可见swagger测试没有任何问题

登录管理员前端界面,点击运费管理看到如下图的显示就测试成功了

3)代码优化

导入文档给出的运费模板工具类

将原来转化为DTO对象的代码进行优化。优化完之后重新启动那四个服务再打开前端进行测试,基本是没有问题的

3、新增或更新运费模板

1)导入代码

CarriageController导入代码如下:

CarriageService导入代码如下:

CarriageServiceImpl导入代码如下:

导入文档给出的异常枚举类

2)测试

老样子,测试还是启动这四个服务

测试在存在模板的情况下,新增非经济互寄

测试经济互寄关联城市重复的情况

测试修改模板,将续重价格从原来的5改为10,测试没有问题

4、运费计算

1)导入代码

直接拉取的经济区枚举的代码bug记得改一下并推送上去

导入CarriageController代码如下:

导入CarriageService代码如下:

导入CarriageServiceImpl代码如下:

2)测试

通过swagger进行测试,将如下图的服务启动起来

请求参数按照文档给出的填上去测试,计算出来运费是112就成功了

3)整合到订单微服务

回到之前模拟实现的部分,把feign调用的代码注释解开,然后把模拟实现的代码注释掉

4)测试

重新启动如下四个服务

通过微信小程序进行测试,如下图测试成功

5、代码优化-责任链设计模式

1)导入代码

这部分代码基本都是直接从文档导入的,想研究的自己看文档吧,我就展示一下目录不展示具体代码了

2)测试

还是在微信小程序测试,没有任何问题,后续jenkins部署再测试也没有问题

四、练习

1、练习一:删除运费模板

1)确认接口信息

由于文档并没有给出接口信息,所以我先启动这四个服务然后打开前端看看接口信息

打开管理员前端,点击删除当然会报错。报错信息是Feign调用失败

然后打开idea发现CarriageFeign其实已经存在删除运费模板的feign接口了,只是没有实现而已

2)代码实现

CarriageController代码如下,由于这个接口的功能单纯就是根据运费模板id去删除,所以在这里直接写调用MybatisPlus的removeById方法是可以的。我为了统一就还是controller、service、serviceImpl依次写下去了

service代码如下:

serviceImpl代码如下:

3)测试

重启服务,测试之前先打开数据库看一眼,最下面标蓝的就是黑吉辽的数据

重新打开管理员前端把黑吉辽的模板数据给删除了,显示删除成功,同时前端不再显示该行数据了

重新打开数据库表也可以看到确实数据已经被删除了,没有任何问题

最后记得把数据还原回去

2、练习二:查询模板增加缓存

1)代码实现

在carriage-service的pom文件中引入redis的相关依赖

在boostrap-local.yml文件中加上nacos中redis的共享配置(shared-spring-redis.yml配置在nacos中已经存在)

修改CarriageChainHandler中的findCarriage代码如下,注释非常详细。这里使用的是Redis中的Hash结构,它的层次结构是key field value

修改CarriageServiceImpl的saveOrUpdateCarriage代码如下,这里是为了保证数据的一致性。理论的想法是更新运费模板时删除由key和field确定的唯一的value,但是这里有两个问题。第一是这里的saveOrUpdate是MybatisPlus提供的方法,之前的代码并没有实现区分新增和更新的逻辑。第二个问题是大家可以自己查看WaybillDTO和CarriageDTO,然后就如下注释所分析的,它们两个没有公用的属性字段,所以无论以哪一个字段为field,这里都做不到由key和field确定唯一的value再删除。所以就只能把整个缓存全部删除,不过这部分运费模板本来就不是经常需要新增更新的,所以也说的过去

2)测试

启动如下图的五个服务

打开微信开发者工具,老样子如下图选择连衣裙3公斤,看到左下角预估总价计算出28后,再去查看Redis的数据

打开DataGrip可以看到以carriage:cache为key的缓存已经出现,像这里我因为自己喜欢小写,所以一眼就看出来wechat和这个是我自己实现的缓存。不过这个大家还是按自己喜好习惯来

点进去也能查询到具体的数据

然后此时打开管理员的前端界面,将黑吉辽的续重价格从5改为6,目的是测试更新运费模板是否会删除缓存来保持数据一致性

上面修改成功之后再次打开redis就会发现缓存已经被删除了,测试没有任何问题

3、练习三(暂时没有想法不做)

相关推荐
IMPYLH1 天前
Lua 的 Math(数学) 模块
开发语言·笔记·lua
EmmaXLZHONG1 天前
Notes of Software Engineering Ninth Edition(软件工程第九版笔记)
笔记·软件工程
断剑zou天涯1 天前
【算法笔记】AC自动机
java·笔记·算法
d111111111d1 天前
编码器测速详情解释:PID闭环控制
笔记·stm32·单片机·嵌入式硬件·学习·算法
风123456789~1 天前
【健康管理】第8章 身体活动基本知识 1/2
笔记·考证·健康管理
(づど)1 天前
一套齐全的环境设置:nvm\node\nrm\pnpm
前端·笔记
宵时待雨1 天前
C语言笔记归纳21:编译与链接
linux·c语言·开发语言·笔记
走在路上的菜鸟1 天前
Android学Dart学习笔记第二十二节 类-扩展方法
android·笔记·学习·flutter
TL滕1 天前
从0开始学算法——第二十天(简易搜索引擎)
笔记·学习·算法
铭哥的编程日记1 天前
后端面试通关笔记:从真题到思路(me)
笔记·面试·职场和发展