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/domain/pojo/OrderAuctionBond.java             |   12 +
 /dev/null                                                                                             |   19 ---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java           |  106 ++++++++++++++++++---
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java            |    6 +
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java |    9 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java           |   33 ++++++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/PaylogController.java              |   38 +------
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/RefundDTO.java               |   24 ++++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java                   |   19 +--
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java       |    7 +
 10 files changed, 190 insertions(+), 83 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/RefundDTO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/RefundDTO.java
new file mode 100644
index 0000000..918e8a7
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/RefundDTO.java
@@ -0,0 +1,24 @@
+package com.ruoyi.system.api.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/5/29
+ */
+@Data
+@ApiModel("退款数据传输对象")
+public class RefundDTO implements Serializable {
+
+    private static final long serialVersionUID = -8486815089305219482L;
+
+    @ApiModelProperty("订单号")
+    private String orderNo;
+
+    @ApiModelProperty("金额")
+    private BigDecimal amount;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
index c9d48f4..08f9019 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
@@ -4,8 +4,10 @@
 import com.ruoyi.system.api.domain.Order;
 import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
 import com.ruoyi.system.api.domain.dto.OrderDTO;
+import com.ruoyi.system.api.domain.dto.RefundDTO;
 import com.ruoyi.system.api.feignClient.OrderClient;
 import java.util.List;
+import java.util.Map;
 import org.springframework.cloud.openfeign.FallbackFactory;
 
 /**
@@ -43,6 +45,11 @@
             public R<List<Order>> getOrderByGroupPurchaseId(Long id, String source) {
                 return R.fail("根据团购商品id获取订单列表失败:" + cause.getMessage());
             }
+
+            @Override
+            public R<Map<String, Object>> refund(List<RefundDTO> refundDTOS, String source) {
+                return R.fail("批量退款失败" + cause.getMessage());
+            }
         };
 
     }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java
index fe80090..850c948 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java
@@ -6,8 +6,10 @@
 import com.ruoyi.system.api.domain.Order;
 import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
 import com.ruoyi.system.api.domain.dto.OrderDTO;
+import com.ruoyi.system.api.domain.dto.RefundDTO;
 import com.ruoyi.system.api.factory.OrderFallbackFactory;
 import java.util.List;
+import java.util.Map;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -56,4 +58,8 @@
     @GetMapping("/order/group-purchase-id/{id}")
     R<List<Order>> getOrderByGroupPurchaseId(@PathVariable("id") Long id,
             @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    @PostMapping("/inner/pay/refund-batch")
+    R<Map<String, Object>> refund(@RequestBody List<RefundDTO> refundDTOS,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MemberBondController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MemberBondController.java
deleted file mode 100644
index 61067d2..0000000
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MemberBondController.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.ruoyi.auction.controller.management;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 前端控制器
- * </p>
- *
- * @author mitao
- * @since 2024-05-27
- */
-@RestController
-@RequestMapping("/mgt/member-bond")
-public class MemberBondController {
-
-}
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
index e70ee71..089761a 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -52,9 +52,9 @@
 public class AuctionGoodsServiceImpl extends ServiceImpl<AuctionGoodsMapper, AuctionGoods> implements IAuctionGoodsService {
 
     private final GoodsSkuClient goodsSkuClient;
-    private final IAuctionBidRecordService auctionBidRecordService;
     private final MemberClient memberClient;
     private final OrderClient orderClient;
+    private final IAuctionBidRecordService auctionBidRecordService;
     /**
      * 获取拍卖商品列表的分页数据
      *
@@ -227,10 +227,17 @@
                     orderDTO.setReceiverphone(data.getRecipientPhone());
                 }
                 orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER);
+            } else {
+                // 没有人出价,退回拍卖商品库存
+                goodsSkuClient.returningStock(auctionGoods.getGoodsSkuId(),
+                        auctionGoods.getAuctionStock(), SecurityConstants.INNER);
             }
             // 结束拍卖
             this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
                     .eq(AuctionGoods::getId, id).update();
+            // 查询已支付保证基记录
+            // TODO 退还保证金
+          
         }
     }
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/PaylogController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/PaylogController.java
index 25206bd..917379c 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/PaylogController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/PaylogController.java
@@ -1,45 +1,19 @@
 package com.ruoyi.order.controller;
 
 
-import com.alipay.api.AlipayClient;
-import com.alipay.api.DefaultAlipayClient;
-import com.alipay.api.request.AlipayTradeRefundRequest;
-import com.alipay.api.response.AlipayTradeRefundResponse;
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.order.domain.pojo.Paylog;
 import com.ruoyi.order.service.IPaylogService;
 import com.ruoyi.order.service.impl.PaylogServiceImpl;
-import com.ruoyi.order.util.DateUtil;
-import com.ruoyi.order.util.SinataUtil;
-import com.ruoyi.order.util.alipay.config.AlipayConfig;
-import com.ruoyi.order.util.alipay.util.PayDemoActivity;
-import com.ruoyi.order.util.tencent.common.Configure;
-import com.ruoyi.order.util.tencent.common.Signature;
-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 io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
+import java.util.Map;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.time.LocalDateTime;
-import java.util.*;
-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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java
new file mode 100644
index 0000000..e4c6465
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java
@@ -0,0 +1,33 @@
+package com.ruoyi.order.controller.inner;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.annotation.InnerAuth;
+import com.ruoyi.order.service.IPaylogService;
+import com.ruoyi.order.service.impl.PaylogServiceImpl;
+import com.ruoyi.system.api.domain.dto.RefundDTO;
+import java.util.List;
+import java.util.Map;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author mitao
+ * @date 2024/5/29
+ */
+@RestController
+@RequestMapping("/inner/pay")
+@RequiredArgsConstructor
+public class PayController {
+
+    private final IPaylogService paylogService;
+    private final PaylogServiceImpl paylogServiceImpl;
+
+    @InnerAuth
+    @PostMapping("/refund-batch")
+    public R<Map<String, Object>> refund(@RequestBody List<RefundDTO> refundDTOS) {
+        return R.ok(paylogService.refund(refundDTOS));
+    }
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/OrderAuctionBond.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/OrderAuctionBond.java
index 0577669..86359a3 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/OrderAuctionBond.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/OrderAuctionBond.java
@@ -6,6 +6,9 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
+import com.ruoyi.common.core.enums.BondStatusEnum;
+import com.ruoyi.common.core.enums.PaymentMethodEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import java.io.Serializable;
@@ -51,8 +54,11 @@
     @ApiModelProperty(value = "保证金")
     private BigDecimal bond;
 
-    @ApiModelProperty(value = "是否缴纳保证金")
-    private Boolean boundStatus;
+    @ApiModelProperty(value = "保证金状态 1=待支付 2=已支付 3=已退款")
+    private BondStatusEnum boundStatus;
+
+    @ApiModelProperty(value = "保证金类型1=普通拍品 2=拍卖会拍品")
+    private AuctionOrderTypeEnum bondType;
 
     @ApiModelProperty(value = "创建者")
     @TableField(value = "create_by", fill = FieldFill.INSERT)
@@ -74,7 +80,7 @@
     @TableLogic
     private Integer delFlag;
     @ApiModelProperty(value = "支付方式 1=微信 2=支付宝")
-    private Integer paymentMethod;
+    private PaymentMethodEnum paymentMethod;
 
     @ApiModelProperty(value = "保证金订单编号")
     private String orderNo;
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java
index d861f56..fa76bc8 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java
@@ -1,21 +1,14 @@
 package com.ruoyi.order.service;
 
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.order.domain.pojo.Paylog;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.order.util.tencent.common.Signature;
-import com.ruoyi.order.util.tencent.common.XMLParser;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
+import com.ruoyi.system.api.domain.dto.RefundDTO;
+import java.util.List;
+import java.util.Map;
 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 org.springframework.web.bind.annotation.RequestMapping;
 
 /**
  * <p>
@@ -48,4 +41,6 @@
      * @param response
      */
     void wxnotify(HttpServletRequest request, HttpServletResponse response);
+
+    Map<String, Object> refund(List<RefundDTO> refundDTOS);
 }
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 a76532a..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>
@@ -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