瀏覽代碼

退款接口优化

cup 3 年之前
父節點
當前提交
1d241c2b6b

+ 1 - 1
mp-quartz/src/main/java/com/qs/mp/quartz/task/OperateToolTask.java

@@ -50,7 +50,7 @@ public class OperateToolTask {
   public void refund(String orderNo, Integer refundAmount){
     LogUtil.info(logger, "...退款任务开始...");
 
-    walletService.refundByUser(orderNo, refundAmount, "后台人工操作");
+    walletService.refund(orderNo, refundAmount, "后台人工操作");
 
     LogUtil.info(logger, "...退款任务结束...");
 

+ 2 - 15
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelOrderServiceImpl.java

@@ -226,22 +226,9 @@ public class ChannelOrderServiceImpl extends
             }
         }
 
-        // 获取支付成功的订单号
-        PayOrder payOrder = payOrderService.getOne(new LambdaQueryWrapper<PayOrder>()
-                .eq(PayOrder::getBizId, channelOrder.getOrderId())
-                .eq(PayOrder::getOrderStatus, PayOrderStatusEnum.SUCCESS));
-        if (Objects.isNull(payOrder)) {
-            throw new ServiceException("支付订单不存在");
-        }
-
-        // 更新支付表订单状态
-        PayOrder payOrderParam = new PayOrder();
-        payOrderParam.setOrderId(payOrder.getOrderId());
-        payOrderParam.setOrderStatus(PayOrderStatusEnum.REFUND.getValue());
-        payOrderService.updateById(payOrderParam);
 
-        // 退款
-        walletService.refundByChannel(payOrder.getOrderId(), channelOrder.getPayAmt(),"经销商取消订单");
+        //退款
+        walletService.refund(channelOrder.getOrderId(), channelOrder.getPayAmt(),"经销商取消订单");
 
         return true;
     }

+ 6 - 7
mp-service/src/main/java/com/qs/mp/pay/service/IWalletService.java

@@ -23,17 +23,16 @@ public interface IWalletService {
   JSONObject pay(BizTypeEnum bizType, String bizId, String openId, int money,
       String orderRemark);
 
-  /**
-   * 用户订单退款
-   * @return
-   */
-  boolean refundByUser(String orderNo, Integer refundAmount, String remark);
 
   /**
-   * 经销商订单退款
+   * 订单退款
+   * @param bizId
+   * @param refundAmount
+   * @param remark
    * @return
    */
-  boolean refundByChannel(String orderNo, Integer refundAmount, String remark);
+  boolean refund(String bizId, Integer refundAmount, String remark);
+
 
   /**
    *

+ 35 - 29
mp-service/src/main/java/com/qs/mp/pay/service/impl/WalletServiceImpl.java

@@ -1,9 +1,12 @@
 package com.qs.mp.pay.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.qs.mp.channel.service.IChannelOrderService;
 import com.qs.mp.common.enums.BizTypeEnum;
 import com.qs.mp.common.enums.MqTopicType;
+import com.qs.mp.common.enums.PayOrderStatusEnum;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.pulsar.PulsarClientService;
 import com.qs.mp.common.utils.DateUtils;
@@ -23,6 +26,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.util.Objects;
+
 /**
  * @auther duota
  * @create 2021 2021/9/4 1:59 下午
@@ -122,52 +127,53 @@ public class WalletServiceImpl implements IWalletService {
   }
 
   @Override
-  public boolean refundByUser(String orderNo, Integer refundAmount, String remark) {
+  public boolean refund(String bizId, Integer refundAmount, String remark) {
+    // 获取支付成功的订单号
+    PayOrder payOrder = payOrderService.getOne(new LambdaQueryWrapper<PayOrder>()
+            .eq(PayOrder::getBizId, bizId)
+            .eq(PayOrder::getOrderStatus, PayOrderStatusEnum.SUCCESS));
+    if (Objects.isNull(payOrder)) {
+      throw new ServiceException("支付订单不存在");
+    }
 
     String reqUrl = baseUrl + "/pay/refundOrder";
-
     JSONObject sendData = new JSONObject();
-    sendData.put("shop_no", userPayShopNo);
+
+    if (BizTypeEnum.CHANNEL_ORDER.equals(payOrder.getBizType())) {
+      sendData.put("shop_no", channelPayShopNo);
+      sendData.put("sign",channelPaySign);
+    } else {
+      sendData.put("shop_no", userPayShopNo);
+      sendData.put("sign",userPaySign);
+    }
     sendData.put("timestamp",System.currentTimeMillis());
-    sendData.put("order_no",orderNo);
+    sendData.put("order_no",payOrder.getOrderId());
     sendData.put("refund_amount", refundAmount);
     sendData.put("order_remark", remark);
     sendData.put("type","sno");
-    sendData.put("sign",userPaySign);
     String result = OkHttpUtil.postJsonParams(reqUrl, sendData.toJSONString());
     JSONObject jsonObject = JSONObject.parseObject(result);
     String code = jsonObject.getString("code");
     logger.info("用户订单退款 -> request params:" + sendData.toJSONString() + "  result:" + result);
+    // 退款成功,更新订单状态
     if ("R0001".equals(code)) {
+      payOrder.setOrderId(payOrder.getOrderId());
+      payOrder.setOrderStatus(PayOrderStatusEnum.REFUND.getValue());
+      boolean ret = payOrderService.update(new LambdaUpdateWrapper<PayOrder>()
+              .set(PayOrder::getOrderStatus, PayOrderStatusEnum.REFUND.getValue())
+              .eq(PayOrder::getOrderId, payOrder.getOrderId())
+              .eq(PayOrder::getOrderStatus, PayOrderStatusEnum.SUCCESS.getValue()));
+
+      if (!ret) {
+        LogUtil.error(logger, "订单退款状态数据库更新失败, BizId:" + bizId);
+      }
       return true;
     }
-    throw new ServiceException(jsonObject.getString("result"));
+    LogUtil.error(logger, "订单退款失败,code:" + code);
+    throw new ServiceException("订单退款失败");
   }
 
 
-  @Override
-  public boolean refundByChannel(String orderNo, Integer refundAmount, String remark) {
-
-    String reqUrl = baseUrl + "/pay/refundOrder";
-
-    JSONObject sendData = new JSONObject();
-    sendData.put("shop_no", channelPayShopNo);
-    sendData.put("timestamp",System.currentTimeMillis());
-    sendData.put("order_no",orderNo);
-    sendData.put("refund_amount", refundAmount);
-    sendData.put("order_remark", remark);
-    sendData.put("type","sno");
-    sendData.put("sign",channelPaySign);
-    String result = OkHttpUtil.postJsonParams(reqUrl, sendData.toJSONString());
-    JSONObject jsonObject = JSONObject.parseObject(result);
-    String code = jsonObject.getString("code");
-    logger.info("经销商订单退款 -> request params:" + sendData.toJSONString() + "  result:" + result);
-    if ("R0001".equals(code)) {
-      return true;
-    }
-    throw new ServiceException(jsonObject.getString("result"));
-  }
-
   @Override
   public void payOrderStatusHandle(PayOrder payOrder) {
     String orderNo = payOrder.getOrderId();