rentaiming
2024-06-02 af4255818ddf43abc83482ebe95c171300272916
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
@@ -1,5 +1,7 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -24,17 +26,23 @@
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.GoodsSeckill;
import com.ruoyi.system.api.domain.GoodsSku;
import com.ruoyi.system.api.domain.*;
import com.ruoyi.system.api.domain.dto.AuctionGoodsListPageDTO;
import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
import com.ruoyi.system.api.domain.dto.ListStatusDTO;
import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO;
import com.ruoyi.system.api.domain.vo.HomeGoodsSeckillInfoVO;
import com.ruoyi.system.api.domain.vo.HomeGoodsSeckillVO;
import com.ruoyi.system.api.feignClient.GoodsSkuClient;
import com.ruoyi.system.api.feignClient.OrderClient;
import com.ruoyi.system.api.feignClient.SysUserClient;
import com.ruoyi.system.api.util.WebSocketUsers;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -55,6 +63,7 @@
    private final IGoodsSkuService goodsSkuService;
    private final OrderClient orderClient;
    private final GoodsSkuClient goodsSkuClient;
    private final RedisService redisService;
    private final SysUserClient sysUserClient;
    private final AsyncMethodService asyncMethodService;
@@ -227,4 +236,129 @@
        WebSocketUsers.sendMessageToUsersByText(msg);
        log.info("===================>发送websocket通知,消息体{}", msg);
    }
    @Override
    public PageDTO<HomeGoodsSeckillVO> getHomeGoodsSeckillVOList(HomeGoodsSkuDTO homeGoodsSkuDTO) {
        LambdaQueryWrapper<GoodsSku> wrapper3= Wrappers.lambdaQuery();
        wrapper3.eq(GoodsSku::getDelFlag,0);
        wrapper3.eq(GoodsSku::getListingStatus,0);
        wrapper3.like(GoodsSku::getSkuName,homeGoodsSkuDTO.getSkuName());
        wrapper3.eq(GoodsSku::getSkuName,homeGoodsSkuDTO.getSkuName());
        wrapper3.eq(GoodsSku::getBrandId,homeGoodsSkuDTO.getBrandId());
        wrapper3.eq(GoodsSku::getCategoryId,homeGoodsSkuDTO.getCategoryId());
        wrapper3.eq(GoodsSku::getSeriesId,homeGoodsSkuDTO.getSeriesId());
        wrapper3.eq(GoodsSku::getFlavorTypeId,homeGoodsSkuDTO.getFlavorTypeId());
        if (homeGoodsSkuDTO.getSort()==2){
            wrapper3.orderByAsc(GoodsSku::getPrice);
        }
        if (homeGoodsSkuDTO.getSort()==3){
            wrapper3.orderByDesc(GoodsSku::getPrice);
        }
        if (homeGoodsSkuDTO.getSort()==4){
            wrapper3.orderByAsc(GoodsSku::getSoldQuantity);
        }
        if (homeGoodsSkuDTO.getSort()==5){
            wrapper3.orderByDesc(GoodsSku::getSoldQuantity);
        }
        if(homeGoodsSkuDTO.getYear()==2){
            LocalDateTime now = LocalDateTime.now();
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            LocalDateTime newTime7 = now.minusYears(30);
            String formattedDate7 = newTime7.format(formatter);
            LocalDateTime parseTime7 = LocalDateTime.parse(formattedDate7, formatter);
            wrapper3.gt(GoodsSku::getYears,parseTime7);
        }
        if(homeGoodsSkuDTO.getYear()==3){
            LocalDateTime now = LocalDateTime.now();
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            LocalDateTime newTime7 = now.minusYears(30);
            String formattedDate7 = newTime7.format(formatter);
            LocalDateTime parseTime7 = LocalDateTime.parse(formattedDate7, formatter);
            LocalDateTime newTime15 = now.minusYears(15);
            String formattedDate15 = newTime15.format(formatter);
            LocalDateTime parseTime15= LocalDateTime.parse(formattedDate15, formatter);
            wrapper3.gt(GoodsSku::getYears, parseTime15)
                    .le(GoodsSku::getYears, parseTime7);
        }
        if(homeGoodsSkuDTO.getYear()==3){
            LocalDateTime now = LocalDateTime.now();
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            LocalDateTime newTime7 = now.minusYears(5);
            String formattedDate7 = newTime7.format(formatter);
            LocalDateTime parseTime7 = LocalDateTime.parse(formattedDate7, formatter);
            LocalDateTime newTime15 = now.minusYears(15);
            String formattedDate15 = newTime15.format(formatter);
            LocalDateTime parseTime15= LocalDateTime.parse(formattedDate15, formatter);
            wrapper3.ge(GoodsSku::getYears, parseTime7)
                    .le(GoodsSku::getYears, parseTime15);
        }
        List<GoodsSku> page1 =  goodsSkuService.list(wrapper3);
        Set<Long> goodsSkuIdList = null;
        goodsSkuIdList = page1.stream().map(GoodsSku::getId)
                .collect(Collectors.toSet());
        Page<GoodsSeckill> page = new Page<>();
        page.setSize(homeGoodsSkuDTO.getPageSize());
        page.setCurrent(homeGoodsSkuDTO.getPageCurr());
        LambdaQueryWrapper<GoodsSeckill> wrapper4= Wrappers.lambdaQuery();
        wrapper4.eq(GoodsSeckill::getDelFlag,0);
        wrapper4.eq(GoodsSeckill::getListingStatus,0);
        List<Integer> in=new ArrayList<>();
        in.add(0);
        in.add(1);
        wrapper4.in(GoodsSeckill::getStartStatus,in);
        wrapper4.in(GoodsSeckill::getGoodsSkuId,goodsSkuIdList);
        wrapper4.orderByAsc(GoodsSeckill::getSortNum);
        Page<GoodsSeckill> page2 = this.page(page, wrapper4);
        PageDTO<HomeGoodsSeckillVO> HomeGoodsSeckillVOPageDTO = PageDTO.of(page2, HomeGoodsSeckillVO.class);
        List<HomeGoodsSeckillVO> list2 = HomeGoodsSeckillVOPageDTO.getList();
        for (HomeGoodsSeckillVO homeGoodsSeckillVO:list2){
            GoodsSku data = goodsSkuClient.getGoodsSkuOne(homeGoodsSeckillVO.getGoodsSkuId(), SecurityConstants.INNER).getData();
            homeGoodsSeckillVO.setPrice(data.getPrice());
            homeGoodsSeckillVO.setYears(String.valueOf(data.getYears().getYear()));
            homeGoodsSeckillVO.setCoverPic(data.getCoverPic());
            homeGoodsSeckillVO.setSkuName(data.getSkuName());
        }
        return HomeGoodsSeckillVOPageDTO;
    }
    @Override
    public HomeGoodsSeckillInfoVO getHomeGoodsSeckillInfo(HomeGoodsSkuDTO homeGoodsSkuDTO) {
        GoodsSeckill byId = this.getById(homeGoodsSkuDTO.getGoodsSkuId());
        GoodsSku data6 = goodsSkuClient.getGoodsSkuOne(byId.getGoodsSkuId(), SecurityConstants.INNER).getData();
        HomeGoodsSeckillInfoVO homeGoodsSeckillInfoVO=new HomeGoodsSeckillInfoVO();
        homeGoodsSeckillInfoVO.setGoodsSkuId(byId.getId());
        homeGoodsSeckillInfoVO.setSkuName(data6.getSkuName());
        homeGoodsSeckillInfoVO.setYears(String.valueOf(data6.getYears().getYear()));
        GoodsBrand data = goodsSkuClient.getBrandOne(data6.getBrandId(), SecurityConstants.INNER).getData();
        GoodsCategory data1 = goodsSkuClient.getCategoryOne(data6.getCategoryId(), SecurityConstants.INNER).getData();
        GoodsSeries data2 = goodsSkuClient.getSeriesOne(data6.getSeriesId(), SecurityConstants.INNER).getData();
        GoodsFlavorType data3 = goodsSkuClient.getFlavorTypeOne(data6.getFlavorTypeId(), SecurityConstants.INNER).getData();
        homeGoodsSeckillInfoVO.setBrand(data.getBrandName());
        homeGoodsSeckillInfoVO.setCategory(data1.getCategoryName());
        homeGoodsSeckillInfoVO.setSeries(data2.getSeriesName());
        homeGoodsSeckillInfoVO.setFlavorType(data3.getFlavorTypeName());
        homeGoodsSeckillInfoVO.setPrice(data6.getPrice());
        homeGoodsSeckillInfoVO.setSoldQuantity(byId.getSoldQuantity());
        homeGoodsSeckillInfoVO.setUnit(data6.getUnit());
        homeGoodsSeckillInfoVO.setSpecUnit(data6.getSpecUnit());
        homeGoodsSeckillInfoVO.setCoverPic(data6.getCoverPic());
        homeGoodsSeckillInfoVO.setAlbum(data6.getAlbum());
        homeGoodsSeckillInfoVO.setShareTitle(byId.getShareTitle());
        homeGoodsSeckillInfoVO.setSeckillPrice(byId.getSeckillPrice());
        homeGoodsSeckillInfoVO.setDescription(data6.getDescription());
        homeGoodsSeckillInfoVO.setDetail(data6.getDetail());
        homeGoodsSeckillInfoVO.setLimitNumber(byId.getLimitNumber());
        homeGoodsSeckillInfoVO.setSeckillPrice(byId.getSeckillPrice());
        homeGoodsSeckillInfoVO.setStartTime(byId.getStartTime());
        homeGoodsSeckillInfoVO.setEndTime(byId.getEndTime());
        homeGoodsSeckillInfoVO.setStartStatus(byId.getStartStatus());
        return homeGoodsSeckillInfoVO;
    }
}