Browse Source

律师退款-微信支付

jyc 1 tuần trước cách đây
mục cha
commit
be67fd3778

+ 63 - 25
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/OrderExpirationServiceImpl.java

@@ -9,23 +9,28 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import shop.alien.entity.result.R;
 import shop.alien.entity.store.LawyerConsultationOrder;
 import shop.alien.entity.store.LifeNotice;
 import shop.alien.entity.store.vo.WebSocketVo;
 import shop.alien.lawyer.config.BaseRedisService;
 import shop.alien.lawyer.config.WebSocketProcess;
 import shop.alien.lawyer.controller.AliController;
+import shop.alien.lawyer.feign.AlienStoreFeign;
 import shop.alien.lawyer.listener.RedisKeyExpirationHandler;
 import shop.alien.lawyer.service.OrderExpirationService;
 import shop.alien.mapper.LawyerConsultationOrderMapper;
 import shop.alien.mapper.LifeNoticeMapper;
 import shop.alien.mapper.LifeUserMapper;
 import shop.alien.util.common.DateUtils;
+import shop.alien.util.common.constant.PaymentEnum;
 
 
 import javax.annotation.PostConstruct;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 訂單過期處理服務實現類
@@ -51,6 +56,7 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
     private final LifeNoticeMapper lifeNoticeMapper;
     private final LifeUserMapper lifeUserMapper;
     private final WebSocketProcess webSocketProcess;
+    private final AlienStoreFeign alienStoreFeign;
 
     /**
      * Redis key前綴:訂單支付超時
@@ -147,11 +153,6 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
 
                 log.info("檢測到有訂單需要退款,訂單no: {}", orderNo);
 
-                // 處理訂單退款
-                aliController.processRefund(order.getAlipayNo(),  new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString(), refundReason,"");
-
-                log.info("訂單退款成功,訂單no: {}", orderNo);
-
                 //通知
                 LifeNotice lifeNotice = buildUserLifeNotice(order, title, message);
                 WebSocketVo webSocketVo = buildWebSocketVo(lifeNotice);
@@ -161,11 +162,32 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
 
                 log.info("系统通知发送成功,訂單no: {}", orderNo);
 
-                LawyerConsultationOrder update = new LawyerConsultationOrder();
-                update.setId(order.getId());
-                update.setOrderStatus(5);
-                orderMapper.updateById( update);
+                // 處理訂單退款
+                //aliController.processRefund(order.getAlipayNo(),  new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString(), refundReason,"");
+
+                // 微信/支付宝退款
+                Map<String, String> paramMap = new HashMap<>();
+                refundParam(paramMap, order, refundReason);
+                R refunds = alienStoreFeign.paymentRefunds(paramMap);
+
+                if (refunds.getCode() == 200) {
+                    log.info("訂單退款成功,訂單no: {}", orderNo);
+
+                    //退款到账通知
+                    LifeNotice lifeNotice2 = buildUserLifeNotice(order, "退款到账通知", "您的编号为" + orderNo + "的订单,订单金额已原路返还至您的支付渠道,请查收。");
+                    WebSocketVo webSocketVo2 = buildWebSocketVo(lifeNotice2);
+                    lifeNotice2.setCreatedTime(DateUtils.calcMinute(lifeNotice2.getCreatedTime(), 2));
+
+                    lifeNoticeMapper.insert(lifeNotice2);
+                    webSocketProcess.sendMessage(lifeNotice2.getReceiverId(), JSONObject.from(webSocketVo2).toJSONString());
+
+                    log.info("系统通知发送成功,訂單no: {}", orderNo);
 
+                    LawyerConsultationOrder update = new LawyerConsultationOrder();
+                    update.setId(order.getId());
+                    update.setOrderStatus(5);
+                    orderMapper.updateById( update);
+                }
             }
             //申请退款 律师没处理
             if (expiredKey.contains(ORDER_REFUND_TIMEOUT_PREFIX)) {
@@ -179,30 +201,28 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
 
                 log.info("檢測到有訂單需要退款,訂單no: {}", orderNo);
 
+                //同意退款通知
+                LifeNotice lifeNotice = buildUserLifeNotice(order, "同意退款通知", "您的编号为" + orderNo + "的订单,律师已同意您的退款申请,订单金额将在1-3个工作日原路返还,请注意查收。");
+                WebSocketVo webSocketVo = buildWebSocketVo(lifeNotice);
+
+                lifeNoticeMapper.insert(lifeNotice);
+                webSocketProcess.sendMessage(lifeNotice.getReceiverId(), JSONObject.from(webSocketVo).toJSONString());
+
                 // 處理訂單退款
-                String refundResult = aliController.processRefund(order.getAlipayNo(), new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString(), refundReason, "");
+                //String refundResult = aliController.processRefund(order.getAlipayNo(), new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString(), refundReason, "");
 
                 // 微信/支付宝退款
-                /*paramMap.put("payType", "1".equals(order.getPayType()) ? PaymentEnum.ALIPAY.getType() : PaymentEnum.WECHAT_PAY.getType());
-                paramMap.put("outTradeNo", order.getAlipayNo());
-                paramMap.put("refundReason", refundReason);
-                paramMap.put("refundAmount", new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
-                R refunds = alienStoreFeign.paymentRefunds(paramMap);*/
+                Map<String, String> paramMap = new HashMap<>();
+                refundParam(paramMap, order, refundReason);
+                R refunds = alienStoreFeign.paymentRefunds(paramMap);
 
-                if ("调用成功".equals(refundResult)) {
+                if (refunds.getCode() == 200) {
                     log.info("訂單退款成功,訂單no: {}", orderNo);
 
-                    //同意退款通知
-                    LifeNotice lifeNotice = buildUserLifeNotice(order, "同意退款通知", "您的编号为" + orderNo + "的订单,律师已同意您的退款申请,订单金额将在1-3个工作日原路返还,请注意查收。");
-                    WebSocketVo webSocketVo = buildWebSocketVo(lifeNotice);
-
-                    lifeNoticeMapper.insert(lifeNotice);
-                    webSocketProcess.sendMessage(lifeNotice.getReceiverId(), JSONObject.from(webSocketVo).toJSONString());
-
                     //退款到账通知
                     LifeNotice lifeNotice2 = buildUserLifeNotice(order, "退款到账通知", "您的编号为" + orderNo + "的订单,订单金额已原路返还至您的支付渠道,请查收。");
-                    WebSocketVo webSocketVo2 = buildWebSocketVo(lifeNotice);
-                    lifeNotice2.setCreatedTime(DateUtils.calcMinute(lifeNotice.getCreatedTime(), 2));
+                    WebSocketVo webSocketVo2 = buildWebSocketVo(lifeNotice2);
+                    lifeNotice2.setCreatedTime(DateUtils.calcMinute(lifeNotice2.getCreatedTime(), 2));
 
                     lifeNoticeMapper.insert(lifeNotice2);
                     webSocketProcess.sendMessage(lifeNotice2.getReceiverId(), JSONObject.from(webSocketVo2).toJSONString());
@@ -221,6 +241,24 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
         }
     }
 
+    private void refundParam(Map<String,String> paramMap,LawyerConsultationOrder order,String refundReason){
+        //支付宝
+        if ("1".equals(order.getPayType())) {
+            paramMap.put("payType", PaymentEnum.ALIPAY.getType());
+            paramMap.put("outTradeNo", order.getAlipayNo());
+            paramMap.put("refundReason", refundReason);
+            paramMap.put("refundAmount", new BigDecimal(order.getOrderAmount()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
+        }
+        //微信
+        if ("2".equals(order.getPayType())) {
+            paramMap.put("payType", PaymentEnum.WECHAT_PAY.getType());
+            paramMap.put("outTradeNo", order.getAlipayNo());
+            paramMap.put("reason", refundReason);
+            paramMap.put("refundAmount", order.getOrderAmount().toString());
+            paramMap.put("totalAmount", order.getOrderAmount().toString());
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void handleOrderPaymentTimeout(String orderNum) {