订单退款申请状态更新

300 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情

每日英语:

Beware! For I am fearless, and therefore powerful.

翻译:当心!因为我无所畏惧,所以我无比强大。 ——玛丽·雪莱

订单退款申请状态更新

1606529071900.png

我们需要先监听到消息,再根据退款申请状态结果做出对应判断,如果退款申请通过了,需要更新订单表order_info的状态order_status改为5(退款申请成功),并且将退款订单记录表order_refund的状态status变更为2(退款申请成功,等待微信退款),如果退款申请失败了,此时需要走人工渠道,只需要更新退款记录状态,而订单状态不能更新,由工作人员更新。

退款申请状态处理

Service-退款申请成功:

接口:修改com.xz.mall.order.service.OrderService添加退款申请成功修改订单记录状态以及订单状态的方法,代码如下:

/****
 * 退款申请成功
 * @param out_trade_no:订单号
 * @param out_refund_no:退款记录订单号
 */
void updateRefundStatus(String out_trade_no,String out_refund_no);

实现类:修改com.xz.mall.order.service.impl.OrderServiceImpl添加接口实现方法,代码如下:

/***
 * 退款申请成功
 * @param out_trade_no:订单号
 * @param out_refund_no:退款记录订单号
 */
@Override
public void updateRefundStatus(String out_trade_no,String out_refund_no) {
    //订单状态更新
    Order order = new Order();
    order.setId(out_trade_no); //ID
    order.setOrderStatus(5); //退款申请成功
    orderMapper.updateById(order);
​
    //修改退款记录状态
    OrderRefund orderRefund = new OrderRefund();
    orderRefund.setId(out_refund_no);
    orderRefund.setStatus(2);   //退款申请成功,等待微信退款
    orderRefundMapper.updateById(orderRefund);
}

Service-退款申请失败:

接口:修改com.xz.mall.order.service.OrderService添加退款申请失败修改订单记录状态的方法,代码如下:

/***
 * 退款申请失败,修改退款记录状态
 * @param out_refund_no
 */
void updateRefundFailStatus(String out_refund_no);

实现类:修改com.xz.mall.order.service.impl.OrderServiceImpl添加接口实现方法,代码如下:

/***
 * 退款申请失败,修改退款记录状态
 * @param out_refund_no
 */
@Override
public void updateRefundFailStatus(String out_refund_no) {
    OrderRefund orderRefund = new OrderRefund();
    orderRefund.setId(out_refund_no);
    orderRefund.setStatus(1);   //退款申请失败(微信自动退款失败)
    orderRefundMapper.updateById(orderRefund);
}

退款申请结果监听

mall-order-service创建com.xz.mall.order.mq.RefundStatusResultListener,用于监听退款申请状态信息,并执行订单状态以及订单退款记录状态更新,代码如下:

@Component
@RocketMQMessageListener(topic = "refundstatus", consumerGroup = "refundstatus-group")
public class RefundStatusResultListener implements RocketMQListener,RocketMQPushConsumerLifecycleListener {
​
    @Autowired
    private OrderService orderService;
​
    /***
     * 监听消息
     * 实现RocketMQPushConsumerLifecycleListener监听器之后,此方法不调用
     * @param message
     */
    @Override
    public void onMessage(Object message) {
    }
​
    /***
     * 消息监听
     * @param consumer
     */
    @Override
    public void prepareStart(DefaultMQPushConsumer consumer) {
        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                try {
                    for (MessageExt msg : msgs) {
                        String result = new String(msg.getBody(),"UTF-8");
                        //获取payId,修改订单状态
                        Map<String,String> refundStatusMap = JSON.parseObject(result,Map.class);
​
                        //退款申请成功
                        String out_trade_no = refundStatusMap.get("out_trade_no"); //订单号
                        String out_refund_no = refundStatusMap.get("out_refund_no"); //订单号
                        if(refundStatusMap.get("return_code").equals("SUCCESS") && refundStatusMap.get("result_code").equals("SUCCESS")){
                            orderService.updateRefundStatus(out_trade_no,out_refund_no);
                        }else{
                            //退款失败,人工处理
                            orderService.updateRefundFailStatus(out_refund_no);
                        }
                    }
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                //消费状态
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
    }
}

总结

本篇主要讲述了一下订单退款申请状态更新时涉及到的退款申请状态处理和退款申请结果监听两个需求的业务逻辑代码编写。