From f9cfd322ebd0924cf346d4cc9198bc3a5d9d80c0 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 29 五月 2024 15:01:47 +0800
Subject: [PATCH] 1.提交退款远程调用接口 2.拍卖保证金实体类字段调整

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java |  108 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 91 insertions(+), 17 deletions(-)

diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java
index 4d2cccf..c7f3ed1 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java
@@ -1,14 +1,18 @@
 package com.ruoyi.order.service.impl;
 
+import static com.ruoyi.order.util.tencent.WXPay.requestRefundService;
+import static com.ruoyi.order.util.tencent.WXPay.requestUnifiedorderService;
+
 import com.alipay.api.AlipayClient;
 import com.alipay.api.DefaultAlipayClient;
 import com.alipay.api.request.AlipayTradeRefundRequest;
 import com.alipay.api.response.AlipayTradeRefundResponse;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.order.domain.pojo.Paylog;
 import com.ruoyi.order.mapper.PaylogMapper;
 import com.ruoyi.order.service.IPaylogService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.order.util.SinataUtil;
 import com.ruoyi.order.util.alipay.config.AlipayConfig;
 import com.ruoyi.order.util.alipay.util.PayDemoActivity;
@@ -17,24 +21,27 @@
 import com.ruoyi.order.util.tencent.common.XMLParser;
 import com.ruoyi.order.util.tencent.protocol.AppPayReqData;
 import com.ruoyi.order.util.tencent.protocol.UnifiedorderReqData;
-import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
+import com.ruoyi.system.api.domain.dto.RefundDTO;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import static com.ruoyi.order.util.tencent.WXPay.requestRefundService;
-import static com.ruoyi.order.util.tencent.WXPay.requestUnifiedorderService;
+import org.springframework.stereotype.Service;
 
 /**
  * <p>
@@ -69,7 +76,7 @@
                     return paylogServiceImpl.alipay("1", subject, body, price, request);
                 } else {
                     // 微信预下单
-                    return wxpay(1, "1", body, price, request);
+                    return paylogServiceImpl.wxpay(1, "1", body, price, request);
                 }
             }
         } catch (Exception e) {
@@ -431,4 +438,71 @@
             return m.matches();
         }
 
+    @Override
+    public Map<String, Object> refund(List<RefundDTO> refundDTOS) {
+        Map<String, Object> map = new HashMap<>();
+        Set<String> orderNoList = refundDTOS.stream().map(RefundDTO::getOrderNo)
+                .collect(Collectors.toSet());
+        if (StringUtils.isNotEmpty(orderNoList)) {
+            Map<String, Paylog> paylogMap = iPaylogService.lambdaQuery()
+                    .in(Paylog::getOutTradeNo, orderNoList).eq(Paylog::getState, 1).list().stream()
+                    .collect(Collectors.toMap(Paylog::getOutTradeNo, Function.identity()));
+            List<Paylog> updList = new ArrayList<>();
+            for (RefundDTO refundDTO : refundDTOS) {
+                String orderNo = refundDTO.getOrderNo();
+                BigDecimal amount = refundDTO.getAmount();
+                Paylog paylog = paylogMap.get(orderNo);
+                Optional.of(paylog).ifPresent(pay -> {
+                    Boolean res = handleRefund(pay, amount, orderNo);
+                    map.put(orderNo, res);
+                    if (res) {
+                        pay.setState(3);
+                        updList.add(pay);
+                    }
+                });
+            }
+            iPaylogService.updateBatchById(updList);
+        }
+        return map;
+    }
+
+    public static void main(String[] args) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("1", true);
+        map.put("2", false);
+        map.put("3", true);
+        map.put("4", false);
+        map.put("5", true);
+        List<String> collect = map.entrySet().stream().map(entry -> {
+            if (!(boolean) entry.getValue()) {
+                return entry.getKey();
+            }
+            return null;
+        }).filter(Objects::nonNull).collect(Collectors.toList());
+        System.out.println(collect);
+    }
+
+    private Boolean handleRefund(Paylog paylog, BigDecimal amount,
+            String orderNo) {
+        boolean res = false;
+        if (StringUtils.isNotNull(paylog)) {
+            if (paylog.getPayType() == 1) {
+                res = paylogServiceImpl.refundForAlipay(paylog.getOutTradeNo(),
+                        paylog.getTradeNo(), amount.doubleValue());
+            }
+            if (paylog.getPayType() == 2) {
+                String refundMoney = SinataUtil.doubleRetainTwo(
+                        amount.doubleValue() * 100d);
+                Integer refundFee = Integer.parseInt(
+                        refundMoney.substring(0, refundMoney.length() - 3));
+                String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d);
+                Integer totalFee = Integer.parseInt(
+                        money.substring(0, money.length() - 3));
+                res = paylogServiceImpl.refundForWxpay(2, paylog.getTradeNo(),
+                        paylog.getOutTradeNo(), orderNo, totalFee,
+                        refundFee, "4");
+            }
+        }
+        return res;
+    }
 }

--
Gitblit v1.7.1