mitao
2024-08-14 8dceb015ec8bd9642297d757e73936af84f4aaf1
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -37,6 +37,7 @@
import com.ruoyi.system.api.domain.GoodsSku;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.WebsocketMessageDTO;
import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
import com.ruoyi.system.api.domain.dto.ListStatusDTO;
import com.ruoyi.system.api.domain.dto.OrderDTO;
@@ -45,12 +46,14 @@
import com.ruoyi.system.api.domain.vo.GoodsGroupPurchaseInfoVO;
import com.ruoyi.system.api.domain.vo.OrderVO;
import com.ruoyi.system.api.domain.vo.WdGoodsGroupPurchaseVO;
import com.ruoyi.system.api.feignClient.GoodsSkuClient;
import com.ruoyi.system.api.feignClient.OrderClient;
import com.ruoyi.system.api.feignClient.SysUserClient;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
@@ -77,6 +80,7 @@
    private final IMemberGoodsCollectionService iMemberGoodsCollectionService;
    private final SysUserClient sysUserClient;
    private final IGoodsGroupPurchaseInfoService goodsGroupPurchaseInfoService;
    private final GoodsSkuClient goodsSkuClient;
    // 创建一个静态共享的ObjectMapper实例以重用
    private static final ObjectMapper objectMapper = new ObjectMapper();
    /**
@@ -248,7 +252,7 @@
    public void endGroupPurchase(Long groupPurchaseId) throws JsonProcessingException {
        log.info(">>>>>>>>>>>>>>>>>>>>{}团购商品结束团购<<<<<<<<<<<<<<<<<<<<", groupPurchaseId);
        GoodsGroupPurchase groupPurchase = this.getById(groupPurchaseId);
        boolean res = handleGroupPurchase(groupPurchaseId);
        boolean res = handleGroupPurchase(groupPurchase);
        if (StringUtils.isNotNull(groupPurchase)) {
            groupPurchase.setStartStatus(StartStatusEnum.ENDED);
            groupPurchase.setGroupStatus(
@@ -278,7 +282,7 @@
            throw new ServiceException("团购商品不存在");
        }
        // 处理未成团订单退款和成团订单修改展示状态
        boolean res = handleGroupPurchase(id);
        boolean res = handleGroupPurchase(groupPurchase);
        groupPurchase.setGroupStatus(
                res ? GroupStatusEnum.FORMED_INTO_A_GROUP : GroupStatusEnum.GROUP_FAILURE);
        groupPurchase.setStartStatus(StartStatusEnum.ENDED);
@@ -286,58 +290,80 @@
        this.updateById(groupPurchase);
    }
    private boolean handleGroupPurchase(Long id) {
    private boolean handleGroupPurchase(GoodsGroupPurchase groupPurchase) {
        Long id = groupPurchase.getId();
        // 查询参团记录
        List<GoodsGroupPurchaseInfo> groupPurchaseInfoList = goodsGroupPurchaseInfoService.lambdaQuery()
                .eq(GoodsGroupPurchaseInfo::getGroupPurchaseId, id).list();
        if (CollUtils.isNotEmpty(groupPurchaseInfoList)) {
            List<String> mubres = groupPurchaseInfoList.stream()
            // 筛选未成团的记录
            List<GoodsGroupPurchaseInfo> notGroupedInfoList = groupPurchaseInfoList.stream()
                    .filter(g -> g.getCurrentNumber()
                            < g.getGroupSize())
                    .map(GoodsGroupPurchaseInfo::getMubre).collect(
                    .collect(
                            Collectors.toList());
            List<Order> orderList = orderClient.getOrderListByMubres(mubres,
                    SecurityConstants.INNER).getData();
            if (CollUtils.isNotEmpty(orderList)) {
                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,
            // 回退未成团记录的商品库存
            if (CollUtils.isNotEmpty(notGroupedInfoList)) {
                Integer goodsStock = notGroupedInfoList.stream()
                        .map(GoodsGroupPurchaseInfo::getPurchaseNum)
                        .reduce(Integer::sum).orElse(0);
                GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
                goodsStockUpdDTO.setGoodsSkuId(groupPurchase.getGoodsSkuId());
                goodsStockUpdDTO.setAuctionStock(goodsStock);
                goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
                        SecurityConstants.INNER);
                // 根据唯一标识查询订单
                List<String> mubres = notGroupedInfoList.stream()
                        .map(GoodsGroupPurchaseInfo::getMubre)
                        .collect(
                                Collectors.toList());
                List<Order> orderList = orderClient.getOrderListByMubres(mubres,
                        SecurityConstants.INNER).getData();
                if (StringUtils.isNotEmpty(data)) {
                    // 处理退款返回结果
                    List<String> successfulOrders = new ArrayList<>();
                    List<String> failedOrders = new ArrayList<>();
                if (CollUtils.isNotEmpty(orderList)) {
                    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);
                        data.forEach((key, value) -> {
                            if ((boolean) value) {
                                successfulOrders.add(key);
                            } else {
                                failedOrders.add(key);
                            }
                        });
                        try {
                            log.info(
                                    "=============================退款结束=============================");
                            log.info("退款成功订单:{}",
                                    objectMapper.writeValueAsString(successfulOrders));
                            log.info("退款失败订单:{}",
                                    objectMapper.writeValueAsString(failedOrders));
                        } catch (JsonProcessingException e) {
                            throw new RuntimeException(e);
                        }
                    });
                    try {
                        log.info(
                                "=============================退款结束=============================");
                        log.info("退款成功订单:{}",
                                objectMapper.writeValueAsString(successfulOrders));
                        log.info("退款失败订单:{}", objectMapper.writeValueAsString(failedOrders));
                    } catch (JsonProcessingException e) {
                        throw new RuntimeException(e);
                        // 处理退款结果
                        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);
                    }
                    // 处理退款结果
                    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);
                }
            }
            // 已成团的记录更新订单状态
            List<String> formedGroupMubres = groupPurchaseInfoList.stream()
                    .filter(g -> g.getCurrentNumber()
                            >= g.getGroupSize())
@@ -362,7 +388,7 @@
        GoodsSku byId = goodsSkuService.getById(homeGoodsSkuDTO.getGoodsSkuId());
        LambdaQueryWrapper<GoodsGroupPurchase> wrapper3= Wrappers.lambdaQuery();
        wrapper3.eq(GoodsGroupPurchase::getDelFlag,0);
        wrapper3.eq(GoodsGroupPurchase::getGoodsSkuId,homeGoodsSkuDTO.getGoodsSkuId());
        wrapper3.eq(GoodsGroupPurchase::getId, homeGoodsSkuDTO.getId());
        wrapper3.eq(GoodsGroupPurchase::getListingStatus,0);
        List arr=new ArrayList<>();
        arr.add(0);
@@ -370,109 +396,117 @@
        wrapper3.in(GoodsGroupPurchase::getStartStatus,arr);
        GoodsGroupPurchase one = this.getOne(wrapper3);
        GoodsGroupPurchaseInfoVO  goodsGroupPurchaseInfoVO=new GoodsGroupPurchaseInfoVO();
        goodsGroupPurchaseInfoVO.setGoodsSkuId(one.getId());
        goodsGroupPurchaseInfoVO.setGoodsSkuName(byId.getSkuName());
        goodsGroupPurchaseInfoVO.setYears(String.valueOf(byId.getYears().getYear()));
        goodsGroupPurchaseInfoVO.setCoverPic(byId.getCoverPic());
        goodsGroupPurchaseInfoVO.setPrice(byId.getPrice());
        goodsGroupPurchaseInfoVO.setShareTitle(one.getShareTitle());
        goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
        goodsGroupPurchaseInfoVO.setStartStatus(one.getStartStatus());
        goodsGroupPurchaseInfoVO.setStartTime(one.getStartTime());
        goodsGroupPurchaseInfoVO.setEndTime(one.getEndTime());
        goodsGroupPurchaseInfoVO.setSharePic(one.getSharePic());
        goodsGroupPurchaseInfoVO.setGroupPurchasePrice(one.getGroupPurchasePrice());
        goodsGroupPurchaseInfoVO.setGroupSize(one.getGroupSize());
        goodsGroupPurchaseInfoVO.setLimitNumber(one.getLimitNumber());
        if (Objects.nonNull(one)) {
            goodsGroupPurchaseInfoVO.setGoodsSkuId(one.getId());
            goodsGroupPurchaseInfoVO.setGoodsSkuName(byId.getSkuName());
            goodsGroupPurchaseInfoVO.setYears(String.valueOf(byId.getYears().getYear()));
            goodsGroupPurchaseInfoVO.setCoverPic(byId.getCoverPic());
            goodsGroupPurchaseInfoVO.setPrice(byId.getPrice());
            goodsGroupPurchaseInfoVO.setShareTitle(one.getShareTitle());
            goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
            goodsGroupPurchaseInfoVO.setStartStatus(one.getStartStatus());
            goodsGroupPurchaseInfoVO.setStartTime(one.getStartTime());
            goodsGroupPurchaseInfoVO.setEndTime(one.getEndTime());
            goodsGroupPurchaseInfoVO.setSharePic(one.getSharePic());
            goodsGroupPurchaseInfoVO.setGroupPurchasePrice(one.getGroupPurchasePrice());
            goodsGroupPurchaseInfoVO.setGroupSize(one.getGroupSize());
            goodsGroupPurchaseInfoVO.setLimitNumber(one.getLimitNumber());
            if (one.getGroupStatus().getCode() == 0) {
                LambdaQueryWrapper<GoodsGroupPurchaseInfo> wrapper6 = Wrappers.lambdaQuery();
                wrapper6.eq(GoodsGroupPurchaseInfo::getDelFlag, 0);
                wrapper6.eq(GoodsGroupPurchaseInfo::getGroupStatus, 0);
                wrapper6.eq(GoodsGroupPurchaseInfo::getGroupPurchaseId, one.getId());
                GoodsGroupPurchaseInfo one1 = goodsGroupPurchaseInfoService.getOne(wrapper6);
                if (one1 != null) {
                    goodsGroupPurchaseInfoVO.setCurrentNumber(one1.getCurrentNumber());
                    if (one1.getGroupStatus() == 0) {
                        goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.TO_FORM_A_GROUP);
                    }
                    if (one1.getGroupStatus() == 1) {
                        goodsGroupPurchaseInfoVO.setGroupStatus(
                                GroupStatusEnum.FORMED_INTO_A_GROUP);
                    }
                    if (one1.getGroupStatus() == 2) {
                        goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.GROUP_FAILURE);
                    }
        if (one.getGroupStatus().getCode()==0){
            LambdaQueryWrapper<GoodsGroupPurchaseInfo> wrapper6= Wrappers.lambdaQuery();
            wrapper6.eq(GoodsGroupPurchaseInfo::getDelFlag,0);
            wrapper6.eq(GoodsGroupPurchaseInfo::getGroupStatus,0);
            wrapper6.eq(GoodsGroupPurchaseInfo::getGroupPurchaseId,one.getId());
            GoodsGroupPurchaseInfo one1 = goodsGroupPurchaseInfoService.getOne(wrapper6);
            if (one1!=null){
                goodsGroupPurchaseInfoVO.setCurrentNumber(one1.getCurrentNumber());
                if (one1.getGroupStatus()==0){
                    goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.TO_FORM_A_GROUP);
                }if(one1.getGroupStatus()==1){
                    goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.FORMED_INTO_A_GROUP);
                }if(one1.getGroupStatus()==2){
                    goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.GROUP_FAILURE);
                } else {
                    goodsGroupPurchaseInfoVO.setCurrentNumber(one.getCurrentNumber());
                    goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
                }
            }else{
            } else {
                goodsGroupPurchaseInfoVO.setCurrentNumber(one.getCurrentNumber());
                goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
            }
        }else{
            goodsGroupPurchaseInfoVO.setCurrentNumber(one.getCurrentNumber());
            goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
        }
        goodsGroupPurchaseInfoVO.setStartTime(one.getStartTime());
        goodsGroupPurchaseInfoVO.setEndTime(one.getEndTime());
        goodsGroupPurchaseInfoVO.setDescription(one.getDescription());
        goodsGroupPurchaseInfoVO.setDetail(byId.getDescription());
            goodsGroupPurchaseInfoVO.setStartTime(one.getStartTime());
            goodsGroupPurchaseInfoVO.setEndTime(one.getEndTime());
            goodsGroupPurchaseInfoVO.setDescription(one.getDescription());
            goodsGroupPurchaseInfoVO.setDetail(byId.getDescription());
        goodsGroupPurchaseInfoVO.setListingStatus(one.getListingStatus());
            goodsGroupPurchaseInfoVO.setListingStatus(one.getListingStatus());
        LambdaQueryWrapper<MemberGoodsCollection> wrapper4= Wrappers.lambdaQuery();
        wrapper4.eq(MemberGoodsCollection::getDelFlag,0);
        wrapper4.eq(MemberGoodsCollection::getMemberId,homeGoodsSkuDTO.getMemberId());
        wrapper4.eq(MemberGoodsCollection::getTargetId,one.getId());
        wrapper4.eq(MemberGoodsCollection::getType,1);
        List<MemberGoodsCollection> list = iMemberGoodsCollectionService.list(wrapper4);
        if (list.size()>0){
            goodsGroupPurchaseInfoVO.setIsCollection(2);
        }else{
            goodsGroupPurchaseInfoVO.setIsCollection(1);
        }
        HomeGoodsSkuDTO homeGoodsSkuDTO1=new HomeGoodsSkuDTO();
        homeGoodsSkuDTO1.setGoodsSkuId(one.getId());
        homeGoodsSkuDTO1.setMemberId(homeGoodsSkuDTO.getMemberId());
        Order data = orderClient.getOrderByGroupPurchaseMemberId2(homeGoodsSkuDTO1, SecurityConstants.INNER).getData();
        if (data!=null){
            goodsGroupPurchaseInfoVO.setIsGoodsGroupPurchase(2);
            goodsGroupPurchaseInfoVO.setOrder(data);
            goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.YCT_FAILURE);
            LambdaQueryWrapper<GoodsGroupPurchaseInfo> wrapper7= Wrappers.lambdaQuery();
            wrapper7.eq(GoodsGroupPurchaseInfo::getMubre,data.getGroupNo());
            GoodsGroupPurchaseInfo one7 = goodsGroupPurchaseInfoService.getOne(wrapper7);
            if (one7!=null){
                goodsGroupPurchaseInfoVO.setCurrentNumber(one7.getCurrentNumber());
                if (one7.getGroupStatus()==0){
                    if (one7.getGroupSize()-one7.getCurrentNumber()<5){
                        goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.MS_FAILURE);
                    }else{
                        goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.TO_FORM_A_GROUP);
                    }
                }if(one7.getGroupStatus()==1){
                    goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.FORMED_INTO_A_GROUP);
                }if(one7.getGroupStatus()==2){
                    goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.GROUP_FAILURE);
                }
            LambdaQueryWrapper<MemberGoodsCollection> wrapper4 = Wrappers.lambdaQuery();
            wrapper4.eq(MemberGoodsCollection::getDelFlag, 0);
            wrapper4.eq(MemberGoodsCollection::getMemberId, homeGoodsSkuDTO.getMemberId());
            wrapper4.eq(MemberGoodsCollection::getTargetId, one.getId());
            wrapper4.eq(MemberGoodsCollection::getType, 1);
            List<MemberGoodsCollection> list = iMemberGoodsCollectionService.list(wrapper4);
            if (list.size() > 0) {
                goodsGroupPurchaseInfoVO.setIsCollection(2);
            } else {
                goodsGroupPurchaseInfoVO.setIsCollection(1);
            }
        }else{
            if (one.getGroupStatus().getCode()==0){
                if (one.getGroupSize()>5){
                    if (one.getGroupSize()-one.getCurrentNumber()<5){
                        goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.MS_FAILURE);
                    }else{
            HomeGoodsSkuDTO homeGoodsSkuDTO1 = new HomeGoodsSkuDTO();
            homeGoodsSkuDTO1.setGoodsSkuId(one.getId());
            homeGoodsSkuDTO1.setMemberId(homeGoodsSkuDTO.getMemberId());
            Order data = orderClient.getOrderByGroupPurchaseMemberId2(homeGoodsSkuDTO1,
                    SecurityConstants.INNER).getData();
            if (data != null) {
                goodsGroupPurchaseInfoVO.setIsGoodsGroupPurchase(2);
                goodsGroupPurchaseInfoVO.setOrder(data);
                goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.YCT_FAILURE);
                LambdaQueryWrapper<GoodsGroupPurchaseInfo> wrapper7 = Wrappers.lambdaQuery();
                wrapper7.eq(GoodsGroupPurchaseInfo::getMubre, data.getGroupNo());
                GoodsGroupPurchaseInfo one7 = goodsGroupPurchaseInfoService.getOne(wrapper7);
                if (one7 != null) {
                    goodsGroupPurchaseInfoVO.setCurrentNumber(one7.getCurrentNumber());
                    if (one7.getGroupStatus() == 0) {
                        if (one7.getGroupSize() - one7.getCurrentNumber() < 5) {
                            goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.MS_FAILURE);
                        } else {
                            goodsGroupPurchaseInfoVO.setGroupStatus(
                                    GroupStatusEnum.TO_FORM_A_GROUP);
                        }
                    }
                    if (one7.getGroupStatus() == 1) {
                        goodsGroupPurchaseInfoVO.setGroupStatus(
                                GroupStatusEnum.FORMED_INTO_A_GROUP);
                    }
                    if (one7.getGroupStatus() == 2) {
                        goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.GROUP_FAILURE);
                    }
                }
            } else {
                if (one.getGroupStatus().getCode() == 0) {
                    if (one.getGroupSize() > 5) {
                        if (one.getGroupSize() - one.getCurrentNumber() < 5) {
                            goodsGroupPurchaseInfoVO.setGroupStatus(GroupStatusEnum.MS_FAILURE);
                        } else {
                            goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
                        }
                    } else {
                        goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
                    }
                }else{
                } else {
                    goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
                }
            }else {
                goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
                goodsGroupPurchaseInfoVO.setIsGoodsGroupPurchase(1);
            }
            goodsGroupPurchaseInfoVO.setIsGoodsGroupPurchase(1);
        }
        return goodsGroupPurchaseInfoVO;
    }