神领物流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、练习三(暂时没有想法不做)

相关推荐
wdfk_prog18 分钟前
[Linux]学习笔记系列 -- [kernel]workqueue
linux·笔记·学习
wdfk_prog19 分钟前
[Linux]学习笔记系列 -- [kernel]usermode_helper
linux·笔记·学习
一只爱做笔记的码农43 分钟前
【BootstrapBlazor】移植BootstrapBlazor VS工程到Vscode工程,报error blazor106的问题
笔记·学习·c#
木西1 小时前
人间观察:关于健康、善良与选择的思考
笔记
星轨初途1 小时前
数据结构排序算法详解(2)——选择排序(附动图)
c语言·数据结构·经验分享·笔记·b树·算法·排序算法
charlie1145141913 小时前
勇闯前后端Week2:后端基础——Flask API速览
笔记·后端·python·学习·flask·教程
深蓝海拓3 小时前
OpenCV学习笔记之:调整ORB算法的参数以适应不同的图像
笔记·opencv·学习
d111111111d3 小时前
STM32外设--SPI读取W25Q64(学习笔记)硬件SPI
笔记·stm32·单片机·嵌入式硬件·学习
摇滚侠3 小时前
2025最新 SpringCloud 教程,Nacos-配置中心-数据隔离-动态切换环境,笔记18
java·笔记·spring cloud
_Kayo_4 小时前
vue3 computed 练习笔记
前端·vue.js·笔记