开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段):更新余额1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/703/detail/12420
更新余额1
内容介绍:
一、基本概念介绍
二、方法编写
三、参数设置
四、余额扣减
一、基本概念介绍
接下来完成确认订单的第五步:使用余额,使用余额的话也可以叫做扣减余额。
表1trade_user
这个功能就是要在当前的用户表当中,用用户的余额字段(user_money)里面的钱数减去订单当中用户要使用的余额的数量,然后再将这个字段值更新为减去订单当中的余额后的数值。
表trade_user_money_log
更新余额的话,要去做一个余额更新日志的,上图就是一个日志,里面主要记录用户的身份、使用的订单 id、使用的钱数、使用的时间。这里还有一个叫 money_log_type。
它的作用是:
就余额而言,如果用户正常购买商品的话,它能进行订单的一个付款,那如果当前确认订单失败了,但是余额使用了,后期要进行一个订单的退款,也就是订单取消之后要把余额退还给客户。所以这里要区分当前的操作到底是订单付款的减余额操作,还是订单退款的加余额操作啊,要把这个类型设置一下。
所以我们所分析的要去操作这两个表,也就是上图的两个表,一个表呢做的是更新操作,一个表做的是插入数据的操作。
二、方法编写
现在我们编写一个方法: reduceMoneyPaid(order); 然后把这 order 对象传递过去。
然后进行方法的实现:
点击 Create method’reduceMoneyPaid’, 显示以下页面,然后进行一个注释,解释该方法的作用是扣减余额:
扣减余额时候,要先做一个判断,首先余额 MoneyPaid 不能为空,并且这个order.getMoneyPaid 必须大于零的,如果小于等于零,就不用进行扣减了。
前面我们在进行预订单保存的时候,我们将余额做了一个校验。
所以,如果订单当中有余额,那么就可以直接进行余额的扣减。
三、参数设置
那么如果要去传递参数,我们可以把这些参数封装到的 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()+"",扣减余额成功 来告诉我们扣减成功。
完整代码如下:
因为再这里我们要在用户的微服务当中,将这个方法进行一个实现,现在先把接口创建出来:
把这个方法定义出来。稍后我们会对这个方法进行一个实现。关于扣减余额的第一步先说到这里。