生成预订单代码实现2|学习笔记

简介:  快速学习生成预订单代码实现2

开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段)生成预订单代码实现2】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/703/detail/12415


生成预订单代码实现2

内容介绍:

一、判断用户是否使用优惠券

二、核算订单支付金额

三、设置下单时间

四、小结


一、判断用户是否使用优惠券

判断用户是否使用优惠券要先从订单中拿到优惠券的ID。输入 Long couponID = order.getCouponID();

if(couponID!=null){

如果它不等于空,代表用户当前使用了优惠券。继续判断优惠券是否存在,如果存在要去判断,优惠券是否已经被使用。

所以要根据 ID,进行优惠券的微服务的查询。

在 api 的工程里去编写接口 ICouPon Service。先去提供借口,这个接口就是优惠券的接口,提供查询优惠券的方法。

输入 TradeCoupon findOne(Long coupouID),根据这个 ID 查询当前的优惠券。

那在 Orderservice 把它注入进来,输入 ICouponService

注入进来后,去进行处理。

输入 CouponService.findone(couponID);按回车键,接收 conpon

然后判断如果 compound 等于空,应该去抛异常。传递 ID 但是优惠券不存在,说明没有优惠券。

输入 CastException.castShopCode.SHOP_COUPON_NO_EXIST

如果优惠券存在,要进一步判断它的状态。

如果优惠券已经被使用,那么就不用再去往下走。取 intvalue 的值,因为 is used 是 integrity 类型,要转换成基本类型的数字,查看它是否等于提前准备的

coupon.getIsUsed().intVaue()==ShopCode.SHOP_COUPON_ISUSED.get)常量,优惠券已经使用的状态就是1,把它转成基本类型的值做判断。

如果优惠券已经使用,此时要抛异常。这是关于优惠券的处理。

如果优惠券没有传递过来,可以在 else 当中去设置 order.setCouponPaid(BigDecimal.ZERO)

它在后期减去优惠券的时候,不会出现控制帧的问题。即如果没有去传递优惠券 ID,优惠券减去的金额就是零。


二、核算订单的支付金额

订单的支付金额,应该是订单总金额减去余额再减去优惠券金额。

输入

order.getOrderAmount().subtract (order.getMoneyPaid().subtract(order.getCouponPaid))

得到的应该是 payAmount。这是要支付的总金额,给它设置到 payAmount。 这就是最终的所核算的支付金额。


三、设置下单时间

接着进行订单下单时间的处理。发现有 setAdd time,new date 放入。去数据库当中进行保存。

依然把 TradeOrderMapper orderMapper 注入进来。注入进来之后,就可以使用 ordermapper 进行订单的存储。

存完之后,就可以把 orderID 返回来,这就是整个的生成预订单所有的代码实现.

image.png

代码比较多,按照之前所分析的步骤来完善它。先把注释敲出来,再用代码实现。后期如果有问题,可以做异常。


四、小结

现在来去检查看这里边哪些有问题。

顺便做小结。首先去把订单的状态设置为不可见。然后设置订单 ID,核算运费。查看运费。

image.png

如果金额大于100,运费是0。如果金额小于100,就是10元。

image.png

运费核算是看订单里传递过来的运费是否等于自己核算的。如果不等于直接抛异常。

订单的金额在核算的时候,应该是商品的金额加上运费。商品的金额是商品的单价乘以商品的数量。然后判断自己核算的与订单当中的总金额是否一样,不一样直接抛异常。

接着进行余额的判断。

如果订单当中使用余额,判断余额是否大于0。如果小于0,就不能使用余额。

如果大于零,判断它要用的余额与数据库当中所拥有的余额是否一致。如果它大于拥有的余额,那么余额是不可用的。如果它当前的余额是空,为了计算方便,把余额设置为零。

image.png

接着进行优惠券的判断。拿到订单当中优惠券的ID,先查询出对象。判断如果优惠券不存在,那直接抛异常。

如果它存在去比较状态,关注是不是已经使用。如果已经使用,也不能使用。如果没有问题,为下边优惠券金额不报错,可以把当前所查询出来的优惠券的金额设置进去。

如果没有传递优惠券的信息,优惠券使用的金额就是0。

image.png

然后计算订单的支付金额。支付金额等于订单的总金额减去余额减去优惠券金额。

最后把订单的金额设置到订单的对象当中,再添加当前时间。存储到数据库,存完后,返回订单 ID。

相关文章
|
JavaScript
JS自动生成速记符、拼音简写/拼音的声母(例如:“你挚爱的强哥”转换为“NZADQG”)。提取首字母,返回大写形式;提取拼音, 返回首字母大写形式(全拼)。
JS自动生成速记符、拼音简写/拼音的声母(例如:“你挚爱的强哥”转换为“NZADQG”)。提取首字母,返回大写形式;提取拼音, 返回首字母大写形式(全拼)。
18157 0
|
1月前
|
人工智能 自然语言处理 JavaScript
Playwright MCP:AI驱动自动化测试,轻松告别传统脚本编写
本文介绍如何结合Playwright与MCP协议实现对话式UI自动化测试。通过自然语言指令驱动浏览器操作,显著降低脚本编写门槛,提升测试效率。文章涵盖环境配置、核心功能及实战案例,为构建智能自动化测试方案提供完整指南。
|
IDE Linux 编译器
【Linux】gcc/g++编译器、make/Makefile自动化构建工具
目录 1.gcc/c++的概念: 2.程序编译过程详解: 2.1程序编译过程:
264 0
|
7月前
|
人工智能 安全 算法
从一城一云到AI CITY,智慧城市进入新阶段
AI正在重塑城市面貌,华为云副总裁黄瑾在数字中国建设峰会上提出智慧城市的演进已进入AI CITY新阶段。通过“五个新”(智能终端、算力基础设施、数据基础设施、AI模型、生态体验),AI CITY以技术为核心驱动,推动城市现代化与产业智能化深度融合。相比传统智慧城市,AI CITY不仅实现降本增效,更在决策人性化、服务个性化和产业智能化上迈出一大步。案例显示,从政务到行业应用,AI正为城市注入持续动能,抹平城市间的技术代差,助力每个城市释放先进生产力。
310 0
|
4月前
|
存储 Ubuntu Linux
使用VM虚拟机安装最新版Ubuntu系统
重启后开机进入登录界面 输入前面设置的密码进入系统 成功启动Ubuntu系统
|
监控 安全 网络协议
透明防火墙:网络安全的隐形守护者
【8月更文挑战第24天】
576 0
|
存储 关系型数据库 MySQL
MySQL触发器实战:自动执行的秘密
MySQL触发器实战:自动执行的秘密
372 3
|
监控 网络协议 Java
一些适合性能测试脚本编写和维护的工具
一些适合性能测试脚本编写和维护的工具
500 59
|
存储 人工智能 vr&ar
转载:【AI系统】CPU 基础
CPU,即中央处理器,是计算机的核心部件,负责执行指令和控制所有组件。本文从CPU的发展史入手,介绍了从ENIAC到现代CPU的演变,重点讲述了冯·诺依曼架构的形成及其对CPU设计的影响。文章还详细解析了CPU的基本构成,包括算术逻辑单元(ALU)、存储单元(MU)和控制单元(CU),以及它们如何协同工作完成指令的取指、解码、执行和写回过程。此外,文章探讨了CPU的局限性及并行处理架构的引入。
转载:【AI系统】CPU 基础
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
327 9