生成预订单代码实现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。

相关文章
|
6月前
|
Java
JAVA实现图书管理系统(思路,和完整代码)
JAVA实现图书管理系统(思路,和完整代码)
804 0
|
存储
《通讯录》思路及代码实现详解
《通讯录》思路及代码实现详解
122 0
|
4月前
|
存储 数据管理 数据库
CRUD操作实战:从理论到代码实现的全面解析
【7月更文挑战第4天】在软件开发领域,CRUD代表了数据管理的四个基本操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。这四个操作构成了大多数应用程序数据交互的核心。本文将深入讲解CRUD概念,并通过一个简单的代码示例,展示如何在实际项目中实现这些操作。我们将使用Python语言结合SQLite数据库来演示,因为它们的轻量级特性和易用性非常适合教学目的。
372 2
|
6月前
|
存储 前端开发 JavaScript
网站运行原理与代码实现
网站运行原理与代码实现
128 1
|
算法 Java 索引
【kmp算法】原理以及代码实现
【kmp算法】原理以及代码实现
116 0
|
Serverless C语言
用代码实现一个简单计算器
用代码实现一个简单计算器
132 0
|
人工智能 搜索推荐 算法
个人整理——排序算法及其代码实现
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。元素相等不交换,如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。 每趟排序必确定一个数值的最终位置。
个人整理——排序算法及其代码实现
|
开发工具 对象存储 Python
需求文档及代码实现
compare hdfs & oss files
118 0
|
消息中间件 数据库 RocketMQ
 生成预订单代码实现1|学习笔记
 快速学习生成预订单代码实现1
105 0
 生成预订单代码实现1|学习笔记
|
搜索推荐 Java
八种排序算法与代码实现(Java代码实现)
八大排序算法是:1、直接插入排序;2、希尔排序;3、简单选择排序;4、堆排序;5、冒泡排序;6、快速排序;7、归并排序;8、桶排序/基数排序。
141 0