开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段):回退用户余额】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/703/detail/12431
回退用户余额
1、将优惠卷进行回退操作,代码有一处需要进行修改,在进行优惠卷回退中可能消息中没有优惠卷的id,在直接回退时就会出现问题。
@Autowired
private TradeCouponMapper couponMapper;
@Override
public void onMessage(MessageExt message) {
try {
//1.解析消息内容
String body = new String(message. getBody(),
charsetName: "UTF-8");
MQEntity mqEntity = JSON. parse0bject(body,
MQEntity.class);
Log. info("接收到消息");
if(mqEntity . getCouponId()! =nu11){
//2.查询优惠券信息
TradeCoupon coupon=couponMapper.
selectByPrimaryKey(mqEntity . getCouponId());
//3.更改优惠券状态
coupon. setUsedTime( n
ul
l);
coupon. setIsUsed(ShopCode.SHOP_COUPON_UNUSED. getCode());
coupon. setorderId(null);
couponMapper . updateByPrimaryKey( coupon);
}
Log. info("回退优惠券成功");
} catch (UnsupportedEncodingException e) {
e. printStackTrace();
Log . error("回退优惠券失败");
}
2、用户余额的回退相对简单,因为业务层已经提供 updateMoneyPaid 的方法,方法中已经有扣减余额和回退余额,所以只需要封装 userMoneyLog 对象,提交过来让 updateMoneyPaid 进行处理。
@
slf
4
j
@Autowired
private IUserService userService;
@Override
public void onMessage (MessageExt messageExt) {
try {
//1.解析消息,进行异常的处理
String body = new String(messageExt . getBody(),
charsetName: "UTF-8");
MQEntity mqEntity = JSON. parseObject( body, MQEntity. class);
Log. Info(
“接收到消息
”);
//2.调用业务层,进行余额修改,设置当前余额的类型,进行余额的回退,调用业务层进行余额的回退,打印日志余额回退成功,如果出现异常,余额回退失败
TradeUserMoneyLog userMoneyLog = new
TradeUserMoneyLog();
userMoneyLog . setUseMoney (mqEntity.
getUserMoney());
userMoneyLog . setMoneyLogType ( ShopCode . SHOP_ USER_ MONEY_ REFUND. getCode());
userMoneyLog. setUserId(mqEntity . getUserId());
userMoneyLog, setOrderId(mqEntity . getorderId());
userService .pdateMoneyPaid(userMoneyLog) ;
Log . info("余额回退成功");
}catch (UnsupportedEncodingException e){
e. printStackTrace();
Log.error("余额回退失败");
}
}
}
3、为了代码的健壮性,如果当前用户的余额是空的,就不需要进行回退,所以进行判断。
@
slf
4
j
@Autowired
private IUserService userService;
@Override
public void onMessage (MessageExt messageExt) {
try {
//1.解析消息
String body = new String(messageExt . getBody(),
charsetName: "UTF-8");
MQEntity mqEntity = JSON. parseObject( body, MQEntity. class);
Log. Info(
“接收到消息
”);
if(mqEntity. getUserMoney()!=null && mqEntity .
getUserMoney(). compareTo(BigDecimal .ZERO)>0){
//2.调用业务层,进行余额修改
TradeUserMoneyLog userMoneyLog = new
TradeUserMoneyLog();
userMoneyLog . setUseMoney (mqEntity.
getUserMoney());
userMoneyLog . setMoneyLogType ( ShopCode . SHOP_ USER_ MONEY_ REFUND. getCode());
userMoneyLog. setUserId(mqEntity . getUserId());
userMoneyLog, setOrderId(mqEntity . getorderId());
userService .pdateMoneyPaid(userMoneyLog) ;
Log . info("余额回退成功");
}catch (UnsupportedEncodingException e){
e. printStackTrace();
Log.error("余额回退失败");
}
}
}