更新余额1|学习笔记

简介: 快速学习更新余额1

开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段)更新余额1】学习笔记,与课程紧密联系,让用户快速学习知识。

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


更新余额1


内容介绍:

一、基本概念介绍

二、方法编写

三、参数设置

四、余额扣减


一、基本概念介绍

接下来完成确认订单的第五步:使用余额,使用余额的话也可以叫做扣减余额。

image.png

表1trade_user

这个功能就是要在当前的用户表当中,用用户的余额字段(user_money)里面的钱数减去订单当中用户要使用的余额的数量,然后再将这个字段值更新为减去订单当中的余额后的数值。

image.png

表trade_user_money_log

更新余额的话,要去做一个余额更新日志的,上图就是一个日志,里面主要记录用户的身份、使用的订单 id、使用的钱数、使用的时间。这里还有一个叫 money_log_type。

它的作用是:

就余额而言,如果用户正常购买商品的话,它能进行订单的一个付款,那如果当前确认订单失败了,但是余额使用了,后期要进行一个订单的退款,也就是订单取消之后要把余额退还给客户。所以这里要区分当前的操作到底是订单付款的减余额操作,还是订单退款的加余额操作啊,要把这个类型设置一下。

所以我们所分析的要去操作这两个表,也就是上图的两个表,一个表呢做的是更新操作,一个表做的是插入数据的操作。


二、方法编写

现在我们编写一个方法: reduceMoneyPaid(order); 然后把这 order 对象传递过去。

然后进行方法的实现:

image.png

点击 Create method’reduceMoneyPaid’, 显示以下页面,然后进行一个注释,解释该方法的作用是扣减余额:

扣减余额时候,要先做一个判断,首先余额 MoneyPaid 不能为空,并且这个order.getMoneyPaid 必须大于零的,如果小于等于零,就不用进行扣减了。

前面我们在进行预订单保存的时候,我们将余额做了一个校验。

image.png

所以,如果订单当中有余额,那么就可以直接进行余额的扣减。


三、参数设置

那么如果要去传递参数,我们可以把这些参数封装到的 TradeUserMoneyLog 当中。

然后设置一下参数.首先呢设置订单 Id,然后是用户 id ,再设置钱数,我们刚分析了,余额的操作,要么就是订单付款减余额,要么就是订单退款加余额。在这里我们是付款,最后把这个值提交过去。

代码如下:

private void reduceMoneyPaid(TradeOrder order){

if(order.getMoneyPaid( ) !=null &&

order.getMoneyPaid( ).compareTo(BigDecimal.ZERO)==1)

//判断余额是否为空,order.getMoneyPaid是否大于等于零

{

TradeUserMoneyLog userMoneyLog = new

TradeUserMoneyLog();  //封装

userMoneyLog.setOrderId(order.getOrderId()); //设置订单id

userMoneyLog.setUserId(order.getUserId());  //设置用户id

userMoneyLog.setUseMoney (order.getMoneypaid()); //设置签署

userMoneyLog.setMoneyLogType(ShopCode.SHOP_uSER_MONEY_PAID.getcode());

//付款操作


四、余额扣款

需要传递的参数已经传递完成了,然后要在微服务端去进行一个扣减余额以及当前日志的记录就行了,所以要将对象提交到微服务端,给他去转递过去,然后这里边我们去接收它的一个返回值 Result。

然后先来判断一下,

如果这个 result.getsuccess().equals(Shopcode.SHOP_FAIL.getSuccess()),如果执行失败了,就告诉他当前扣减余额失败,扣减余额失败可以用常量 SHOP_USER_MONEY_REDUCE_FAIL 代表。

如果没问题,就给它一个提示信息:订单: "+order.getorderId()+"",扣减余额成功 来告诉我们扣减成功。

完整代码如下:

image.png

因为再这里我们要在用户的微服务当中,将这个方法进行一个实现,现在先把接口创建出来:

image.png

把这个方法定义出来。稍后我们会对这个方法进行一个实现。关于扣减余额的第一步先说到这里。

相关文章
|
10月前
|
机器人
如何查询OpenAI账户余额?ChatGPT怎么查看账户余额的方法
ChatGPT是美国OpenAI研发的聊天机器人程序,也是最近火爆全网的热门应用和话题之王。很多用户在使用openai的时候不知道如何查询OpenAI账户余额?
1968 0
单笔转账报错PAYEE_NOT_EXIST(收款账户不存在)-排查方案
报错原因 接口中用户账户参数设置存在问题,导致显示用户收款账户不存在。 排查方案 1、检查payee_account, payee_type是否匹配,如匹配,请检查payee_account是否存在; (1)payee_type设置要求 ALIPAY_USERID:支付宝账号对应的支付宝唯一用户号。
3466 0
假期余额的批量更新
请问各位大佬,通过接口创建的假期规则如需进行批量的添加应如何操作。 按照原方式,通过文件上传来更新假期余额,系统提示不允许操作。 另外是否有办法,在不走钉钉的年假申请,而只是上传请假记录后,自动扣除年假余额呢?
|
6天前
|
开发者
【公告】2021-2022年未兑换积分即将过期,用户等级权益调整
社区用户2021-2022年未兑换积分将于2024年2月29日过期,同时用户等级权益内容将进行调整。
|
弹性计算
阿里云存在未支付订单导致无法下单解决方法
解决阿里云存在未支付订单请支付或作废后再下单,阿里云服务器或其他云资源无法立即购买,提示“您选择的资源存在未支付订单,请支付或作废后再下单!”什么原因?这是由于你的阿里云账号之前已经创建了该订单,只是订单没有支付,所以无法再次创建订单。解决方法是,要么取消之前的订单,要么支付之前的订单。阿里云百科来详细说下阿里云账号下存在未支付订单的解决方法:
743 0
阿里云存在未支付订单导致无法下单解决方法
|
存储 编译器 uml
银行账户类(Accoount)可以为账户存储交易。取款和存款都会产生交易信息。需要记录账户每次交易的信息,包括取钱还是存钱,交易的金额,交易时间和交易之后的余额。系统可以通过账户查询所有的交易次数(最
银行账户类(Accoount)可以为账户存储交易。取款和存款都会产生交易信息。需要记录账户每次交易的信息,包括取钱还是存钱,交易的金额,交易时间和交易之后的余额。系统可以通过账户查询所有的交易次数(最
189 0
|
消息中间件 Java 数据库
更新余额2 |学习笔记
快速学习更新余额2
81 0
更新余额2 |学习笔记
|
消息中间件 RocketMQ 开发者
回退用户余额|学习笔记
快速学习回退用户余额
60 0
|
消息中间件 RocketMQ 开发者
更新优惠卷|学习笔记
快速学习更新优惠卷
80 0
更新优惠卷|学习笔记
|
数据库 开发者 微服务
查询订单支付状态接口(2) | 学习笔记
快速学习查询订单支付状态接口(2)
101 0
查询订单支付状态接口(2) | 学习笔记