type
status
date
slug
summary
tags
category
titleIcon
password
icon
calloutIcon
记录一次简单的debug分析过程 - 天机学堂结算优惠前端不显示问题
背景概要
- 在购物车结算服务中,用户具有优惠卷但结算不显示。


注:复盘时已经修复,使用的是没有优惠劵的用户展示结算界面
链路1-前端请求
- 先明确计算优惠劵方案的接口路径,为/available,挂在tj-promotion服务下

- 考察前端请求,并没有/available的请求路径

- 一个请求tj-learning,不属于相关内容,排除

- 一个请求order相关,属于相关内容,进一步考察相关代码

链路2-后端服务
网关部分的内容可以自行查阅,不再赘述,也可以自行断点确定是否接口真是与前端对应的
- 定位到对应接口

- 查看内容,发现相关优惠劵业务未实现,问题定位到prePlaceOrder接口

- 核对gogs里master分支相关代码,无相关实现,需要自行补充


链路3-核查前端代码
- 切换至前端源码,定位请求API回调

- 在对应page下查找相关使用

- 在对应返回数据中,应该有以下结构:
discounts:array
- ids:array<number>
- rules:array
- discountAmount:number

- 继续沿着orderInfo赋值变量的使用,可以看到还需要:
courses:array
- name: string
- coverUrl: string
- price: number

链路4-回归计算接口
- 现在重回优惠计算的接口,观察返回参数

- List<CouponDiscountDTO>:array
- ids(List<Long>):array<number>
- rules(List):array
- discountAmount(Integer):number
- 出参与所需重叠,需要将计算优惠的返回参数传回前端

- courses:array
- name: string
- coverUrl: string
- price: number
- 由于课程信息的参数没有现成的VO复用,需要自行补充

链路5-回归原接口
- 重回原接口,在返回值参数里面补充信息


- 补充实现计算优惠业务逻辑

问题解决
- 重启tj-trade服务,重新切回页面,再次测试

- 可以选择优惠劵

- 正确获得优惠后金额

其他常见问题
Feign调用404
- feign调用需要补上写在Controller类上的部分路径,提供完整路径调用,路径不全可能出现404错误

- 相关日志

No format fit for date string
- 构造LocalDateTime的时候错误地传入时间戳,

- 切换为AOP分布式锁版本后的领劵业务没有从lua版本的优惠劵缓存写切换为一般版本的缓存写,使得时间是时间戳形式,而不是LocalDateTime


后台业务响应但前端没有展示
- 参考以下流程,更换tj-portal
正常预期效果:

解决方案:
1.虚拟机上自带的tj-admin会出现这样的情况,可以使用API直接发放
2.对前端资料的tj-admin在npm i后重新npm run build(注意使用build,dev环境打包,prod打包js文件不全),对打包的dist文件夹重命名tj-admin上传虚拟机替换目录(/usr/local/src)下tj-admin,重新进入即可。
了解更多
- 作者:CamelliaV
- 链接:https://camelliav.netlify.app/article/debug-1
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。