From 9bcc40d213a44498c46dae5e678e592b918b40b0 Mon Sep 17 00:00:00 2001
From: rentaiming <806181062@qq.com>
Date: 星期四, 30 五月 2024 18:33:54 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java |   71 +++++++++++++++++++++++++++++------
 1 files changed, 58 insertions(+), 13 deletions(-)

diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
index 69dc106..ba23349 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -4,14 +4,16 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.enums.GroupStatusEnum;
 import com.ruoyi.common.core.enums.ListingStatusEnum;
-import com.ruoyi.common.core.enums.PaymentMethodEnum;
+import com.ruoyi.common.core.enums.OrderStatusEnum;
 import com.ruoyi.common.core.enums.StartStatusEnum;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.page.BeanUtils;
 import com.ruoyi.common.core.utils.page.PageDTO;
+import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.goods.controller.management.dto.GoodsGroupPurchaseDTO;
 import com.ruoyi.goods.controller.management.dto.GoodsGroupPurchaseQuery;
 import com.ruoyi.goods.controller.management.vo.GoodsGroupPurchaseVO;
@@ -20,15 +22,20 @@
 import com.ruoyi.goods.service.IGoodsGroupPurchaseService;
 import com.ruoyi.goods.service.IGoodsSkuService;
 import com.ruoyi.goods.service.async.AsyncMethodService;
+import com.ruoyi.system.api.constants.DelayTaskEnum;
 import com.ruoyi.system.api.constants.NotificationTypeConstant;
 import com.ruoyi.system.api.domain.GoodsSku;
 import com.ruoyi.system.api.domain.Order;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
+import com.ruoyi.system.api.domain.dto.OrderUpdDTO;
+import com.ruoyi.system.api.domain.dto.RefundDTO;
 import com.ruoyi.system.api.feignClient.OrderClient;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -50,6 +57,7 @@
     private final OrderClient orderClient;
     private final IGoodsSkuService goodsSkuService;
     private final AsyncMethodService asyncMethodService;
+    private final RedisService redisService;
     // 创建一个静态共享的ObjectMapper实例以重用
     private static final ObjectMapper objectMapper = new ObjectMapper();
     /**
@@ -92,6 +100,12 @@
             if (StringUtils.isNull(groupPurchase)) {
                 throw new ServiceException("团购商品不存在");
             }
+            if (groupPurchase.getStartStatus().equals(StartStatusEnum.STARTED)) {
+                throw new ServiceException("已开始的团购商品不能编辑");
+            }
+            if (groupPurchase.getStartStatus().equals(StartStatusEnum.ENDED)) {
+                throw new ServiceException("已结束的团购商品不能编辑");
+            }
             int originGroupStock = groupPurchase.getLimitNumber() * groupPurchase.getGroupSize();
             GoodsSku goodsSku = goodsSkuService.getById(dto.getGoodsSkuId());
             if (StringUtils.isNull(goodsSku)) {
@@ -124,7 +138,8 @@
         GoodsGroupPurchaseVO vo = BeanUtils.copyBean(groupPurchase,
                 GoodsGroupPurchaseVO.class);
         //远程调用订单服务查询商品购买总数
-        Integer num = orderClient.getGroupPurchasesGoodsNum(groupPurchase.getId()).getData();
+        Integer num = orderClient.getGroupPurchasesGoodsNum(groupPurchase.getId(),
+                SecurityConstants.INNER).getData();
         vo.setBuyNumber(num);
         return vo;
     }
@@ -141,9 +156,15 @@
             throw new ServiceException("团购商品不存在");
         }
         //判断商品状态
-        if (dto.getListingStatus().equals(ListingStatusEnum.REMOVED_FROM_THE_SHELF)
-                && groupPurchase.getStartStatus().equals(StartStatusEnum.STARTED)) {
-            throw new ServiceException("该商品已开始团购,不能下架");
+        if (dto.getListingStatus().equals(ListingStatusEnum.REMOVED_FROM_THE_SHELF)) {
+            if (groupPurchase.getStartStatus().equals(StartStatusEnum.STARTED)) {
+                throw new ServiceException("该商品已开始团购,不能下架");
+            }
+            //移除该团购商品延时任务
+            redisService.deleteObject(DelayTaskEnum.GROUP_PURCHASES_START_TASK.getCode() + "-"
+                    + groupPurchase.getId());
+            redisService.deleteObject(
+                    DelayTaskEnum.GROUP_PURCHASES_END_TASK.getCode() + "-" + groupPurchase.getId());
         }
         //修改状态
         groupPurchase.setListingStatus(dto.getListingStatus());
@@ -208,14 +229,38 @@
         //判断商品状态,未成团则查询关联订单,进行退款;成团就直接修改状态
         if (groupPurchase.getGroupStatus().equals(GroupStatusEnum.TO_FORM_A_GROUP)) {
             //查询关联订单
-            List<Order> orderList = orderClient.getOrderByGroupPurchaseId(id).getData();
-            for (Order order : orderList) {
-                if (PaymentMethodEnum.ALIPAY.equals(order.getPaymentMethod())) {
-                    //TODO 退款
-                }
-                if (PaymentMethodEnum.WECHAT.equals(order.getPaymentMethod())) {
-                    //TODO 退款
-                }
+            List<Order> orderList = orderClient.getOrderByGroupPurchaseId(id,
+                    SecurityConstants.INNER).getData();
+
+            List<RefundDTO> refundDTOList = orderList.stream().map(order -> {
+                RefundDTO refundDTO = new RefundDTO();
+                refundDTO.setOrderNo(order.getOrderNo());
+                refundDTO.setAmount(order.getTotalAmount());
+                return refundDTO;
+            }).collect(Collectors.toList());
+            Map<String, Object> data = orderClient.refund(refundDTOList,
+                    SecurityConstants.INNER).getData();
+            if (StringUtils.isNotEmpty(data)) {
+                // 处理退款返回结果
+                List<String> successfulOrders = new ArrayList<>();
+                List<String> failedOrders = new ArrayList<>();
+
+                data.forEach((key, value) -> {
+                    if ((boolean) value) {
+                        successfulOrders.add(key);
+                    } else {
+                        failedOrders.add(key);
+                    }
+                });
+                // 处理退款结果
+                List<Order> updateOrderList = orderList.stream()
+                        .filter(order -> successfulOrders.contains(order.getOrderNo()))
+                        .peek(order -> {
+                            order.setOrderStatus(OrderStatusEnum.CANCELED);
+                        }).collect(Collectors.toList());
+                List<OrderUpdDTO> orderUpdDTOS = BeanUtils.copyList(updateOrderList,
+                        OrderUpdDTO.class);
+                orderClient.updateOrderList(orderUpdDTOS, SecurityConstants.INNER);
             }
         } else {
             this.lambdaUpdate()

--
Gitblit v1.7.1