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

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

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

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


生成预订单流程实现1

内容介绍:

一、设置订单状态

二、设置订单 ID

三、核算运费

四、核算订单总金额

五、判断是否使用余额


一、设置订单状态

接下来使用代码,将上节所分析的注释翻译出来。

首先第一步设置订单的状态不可见,订单对象已经传递过来了,直接设置就可以。

使用已经提前准备的常量,输入

order.setOrderStatus(ShopCode.SHOP_ORDER_No_CONFIRM. get Code() 

);

其实 SHOP_ORDER_No_CONFIRM 常量是枚举类型。然后零代表当前预订单的状态没有被确认。


二、设置订单 ID

第二步要去设置订单 id。后期可能会存在数据库的分库分表,所以订单id在进行订单表的分库分表后,要保证id的全局唯一性,使用之前在 common 中所介绍的 IdWorker,使用它去生成全局唯一性的 id。

先把 IdWorker 注入进来。在项目当中,要把 bin 实例化,才能去进行注入,此处先注入,后期再完善其它代码。

image.png

使用id生成器,输入 idWorker.nextId(); 按回车键,接受 orderId,输入 order.setOrderID(orderID)


三、核算运费

下一步去核算运费。核算运费的逻辑是如果订单金额大于100,免运费;如果它小于100,收十块钱的运费。此处有处理逻辑,依然采用封装的方法。

输入

BigDecimalshippingFee= calculateShippingFee(order.getorderAmount()) 

去实现出来。

写注释:

*核算运费

*@param orderAmount

*@return

*/

private BigDecimal calculateShippingFee(BigDecimal orderAmount){

判断的逻辑是如果 orderAmount 比100大,就不用付运费。else 如果是小于

100,付十块钱的运费。


四、核算订单总金额

下一步判断订单所传递过来的运费与所核算出来的运费是否一致。

输入

if(order. getshippingFee().compareTo(shippingFee)!==0)

如果不等于0,就给它抛个异常,当前运费不合法。

输入

CastException.cast(ShopCode.SHOP_ORDER_SHIPPINGFEE_INVALID);

如果运费合法,下一步核算订单的总金额是否合法。订单总金额应该要去包含运费。

先计算订单的总金额,输入:

BigDecimalorderAmount=

order.getGoodsPrice().multiply(new

BigDecimal(order.getGoodsNumber())

计算的订单总价要加上所核算的运费,然后,要去判断订单的金额是否等于所计算的总金额。如果它不等于就抛异常,当前订单是非法的,订单的总价格不正确。

image.png

自己核算订单的总价加上运费,然后看核算的价格是否等于订单对象中做封装的订单总金额。如果不一样,说明订单的状态是非法的,直接抛出异常数据。因为订单的处理与金额有关,所以判断和校验要比较全面。


五、判断用户是否使用余额

接着判断用户是否使用余额。

输入BigDecimal moneyPaid = order.getMoneyPaid()

if(moneyPaid!=null){

//订单中余额是否合法

余额肯定不能为负数。

继续输入:

moneyPaid. compareTo(BigDecimal.ZERO)

如果r等于-1,代表订单当中所传递过来的这个余额是负数,此时报异常。

如果r等于1,说明余额大于零。

余额大于零不能直接去使用余额,因为要去判断订单中要使用的余额与数据库当中用户所拥有的余额是否一样,即订单当中使用的余额不能大于数据库当中所拥有的余额。

先把用户的余额查询出来。输入

userService.findOne(order.getUserID),按回车键。

如果它等于1,代表用户要用的余额大于在数据库中所拥有的余额。此处抛异常,余额是非法的,余额不能超支。没问题才能使用。

所以这一块主要判断如果使用余额,余额一定要合法。首先大于零,也必须要小于等于它自己的余额。

如果用户没有使用余额,设置余额为零就行,方便后面的处理,输入 order.setMoneyPaid(BigDecimal.ZERO);.

相关文章
|
域名解析 弹性计算 网络协议
阿里云轻量应用服务器使用教程(2023新版)
阿里云轻量应用服务器使用教程(2023新版)阿里云轻量应用服务器怎么使用?阿里云轻量应用服务器使用教程:轻量应用服务器购买、重置密码、远程连接、宝塔面板的Web环境搭建、WordPress网站程序安装到网站上线,阿里云服务器网分享轻量应用服务器从购买、配置建站环境、轻量服务器应用服务器远程连接、开端口到网站上线全流程
|
3月前
|
运维 架构师 安全
二层协议透明传输:让跨域二层协议“无感穿越”多服务商网络
简介:本文详解二层协议透明传输技术,适用于企业网工、运营商及架构师,解决LLDP/LACP/BPDU跨运营商传输难题,实现端到端协议透传,提升网络韧性与运维效率。
|
SQL 安全 前端开发
详解开源数据库审计平台Yearning
详解开源数据库审计平台Yearning
12581 2
|
Java 关系型数据库 MySQL
阿里巴巴Java开发手册简介(终极版、华山版、泰山版)(附下载地址)
阿里巴巴Java开发手册简介(终极版、华山版、泰山版)(附下载地址)
9373 0
|
机器学习/深度学习 缓存 监控
Pytorch学习笔记(7):优化器、学习率及调整策略、动量
Pytorch学习笔记(7):优化器、学习率及调整策略、动量
1885 0
Pytorch学习笔记(7):优化器、学习率及调整策略、动量
|
24天前
|
人工智能 搜索推荐 语音技术
基于多模态交互的智能面试训练系统设计与实现
基于多模态大模型,我们打造了革命性智能面试系统“模拟面试”,融合语音识别、情感计算与知识图谱,实现全维度能力评估与个性化成长路径规划,推动人才发展进入AI新纪元。
|
7月前
|
机器学习/深度学习 人工智能 运维
运维不靠玄学!用AI预测系统负载,谁用谁说香!
运维不靠玄学!用AI预测系统负载,谁用谁说香!
313 18
|
7月前
|
Java 区块链 网络架构
酷阿鲸森林农场:Java 区块链系统中的 P2P 区块同步与节点自动加入机制
本文介绍了基于 Java 的去中心化区块链电商系统设计与实现,重点探讨了 P2P 网络在酷阿鲸森林农场项目中的应用。通过节点自动发现、区块广播同步及链校验功能,系统实现了无需中心服务器的点对点网络架构。文章详细解析了核心代码逻辑,包括 P2P 服务端监听、客户端广播新区块及节点列表自动获取等环节,并提出了消息签名验证、WebSocket 替代 Socket 等优化方向。该系统不仅适用于农业电商,还可扩展至教育、物流等领域,构建可信数据链条。
|
6月前
|
传感器 算法 定位技术
走错路就尴尬了?AR导航才是“出门不慌”王炸神器!
走错路就尴尬了?AR导航才是“出门不慌”王炸神器!
268 0
|
12月前
|
缓存 Java 测试技术
分享干货:idea常用快捷键分类总结(适合速查~~建议收藏♥)
本文以分类的形式总结了IDEA常用、好用快捷键,全是干货~
4124 1
分享干货:idea常用快捷键分类总结(适合速查~~建议收藏♥)