From 855921d253a4854d4fb78b83bfcf7c6e93b3f68d Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 29 五月 2024 19:43:50 +0800
Subject: [PATCH] 1.提交【管理后台】团购、拍卖商品立即结束退款处理 2.提交【管理后台】拍卖场管理部分接口

---
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java |   52 ++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 48 insertions(+), 4 deletions(-)

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 089761a..f97c276 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
@@ -15,6 +15,7 @@
 import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
 import com.ruoyi.common.core.enums.AuctionStartStatusEnum;
 import com.ruoyi.common.core.enums.BidStatusEnum;
+import com.ruoyi.common.core.enums.BondStatusEnum;
 import com.ruoyi.common.core.enums.OrderFromEnum;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -23,14 +24,18 @@
 import com.ruoyi.system.api.domain.GoodsSku;
 import com.ruoyi.system.api.domain.Member;
 import com.ruoyi.system.api.domain.MemberAddress;
+import com.ruoyi.system.api.domain.OrderAuctionBond;
 import com.ruoyi.system.api.domain.dto.OrderDTO;
+import com.ruoyi.system.api.domain.dto.RefundDTO;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import com.ruoyi.system.api.feignClient.MemberClient;
 import com.ruoyi.system.api.feignClient.OrderClient;
 import io.seata.spring.annotation.GlobalTransactional;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
@@ -202,12 +207,13 @@
             // 查询出价记录
             List<AuctionBidRecord> auctionBidRecords = auctionBidRecordService.getBidRecordByGoodsId(
                     id);
+            Long memberId = null;
             if (StringUtils.isNotEmpty(auctionBidRecords)) {
                 // 中标
                 AuctionBidRecord auctionBidRecord = auctionBidRecords.get(0);
                 auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
                 auctionBidRecordService.updateById(auctionBidRecord);
-
+                memberId = auctionBidRecord.getMemberId();
                 // 创建待支付订单
                 OrderDTO orderDTO = new OrderDTO();
                 orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS);
@@ -235,9 +241,47 @@
             // 结束拍卖
             this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
                     .eq(AuctionGoods::getId, id).update();
-            // 查询已支付保证基记录
-            // TODO 退还保证金
-          
+            // 查询已支付保证金记录
+            List<OrderAuctionBond> auctionBondList = orderClient.getOrderAuctionBondList(id,
+                    AuctionOrderTypeEnum.REGULAR_ITEMS,
+                    BondStatusEnum.PAID,
+                    SecurityConstants.INNER).getData();
+            if (StringUtils.isNotEmpty(auctionBondList)) {
+                List<RefundDTO> refundDTOList = new ArrayList<>();
+                for (OrderAuctionBond orderAuctionBond : auctionBondList) {
+                    // 已中标需在订单完成后退保证金
+                    if (orderAuctionBond.getMemberId().equals(memberId)) {
+                        continue;
+                    }
+                    RefundDTO refundDTO = new RefundDTO();
+                    refundDTO.setOrderNo(orderAuctionBond.getOrderNo());
+                    refundDTO.setAmount(orderAuctionBond.getBond());
+                }
+                // 远程调用订单服务进行退款
+                Map<String, Object> data = orderClient.refund(refundDTOList,
+                        SecurityConstants.INNER).getData();
+                // 处理退款返回结果
+                List<String> successfulOrders = new ArrayList<>();
+                List<String> failedOrders = new ArrayList<>();
+
+                data.forEach((key, value) -> {
+                    if ((boolean) value) {
+                        successfulOrders.add(key);
+                    } else {
+                        failedOrders.add(key);
+                    }
+                });
+                log.info("订单号:{},退款失败", failedOrders);
+                // 退款成功的订单修改状态
+                List<Long> ids = auctionBondList.stream().map(bond -> {
+                    if (successfulOrders.contains(bond.getOrderNo())) {
+                        return bond.getId();
+                    }
+                    return null;
+                }).filter(Objects::nonNull).collect(Collectors.toList());
+                // 远程调用订单服务修改订单状态
+                orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID);
+            }
         }
     }
 }

--
Gitblit v1.7.1