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

相关推荐
mifengxing1 小时前
计算机组成原理概述
笔记·考研·计算机组成原理·复习笔记
最后的最后、7961 小时前
SQLi-Labs 六关 SQL 注入过关笔记
数据库·笔记·sql
筱谙1 小时前
BES BLE CTKD 完整学习笔记
笔记·学习
会编程的土豆2 小时前
数据库mysql八股
数据库·笔记·八股
数据皮皮侠AI2 小时前
退市监督数据(2000-2024)
大数据·人工智能·笔记·机器学习·回归
会编程的土豆2 小时前
MySQL 中的 IN 和 EXISTS(零基础笔记)
数据库·笔记·mysql
神明不懂浪漫4 小时前
【第七章】Java中的常用类
java·开发语言·前端·经验分享·笔记
疯狂打码的少年18 小时前
【软件工程】软件质量保证(ISO/IEC 9126质量特性)
笔记
龙仔72521 小时前
SQL Server OS_Core 数据库全自动备份【完整笔记·可直接复用】
数据库·笔记·oracle
殷忆枫1 天前
AI笔记三十七:AI边缘端道桥安全监测系统:YOLOv8n推理与Web监控全解析
笔记·yolo