无关风月
2025-01-16 d1cab4b2f2690d1331f12f0d9de78bbbf926f390
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.common.core.utils.PageUtils;
import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.service.TokenService;
@@ -14,6 +15,7 @@
import com.ruoyi.other.mapper.GoodsShopMapper;
import com.ruoyi.other.mapper.SeckillActivityInfoMapper;
import com.ruoyi.other.mapper.ShopMapper;
import com.ruoyi.other.service.GoodsEvaluateService;
import com.ruoyi.other.service.GoodsSeckillService;
import com.ruoyi.other.service.GoodsService;
import com.ruoyi.other.service.SeckillActivityInfoService;
@@ -57,12 +59,15 @@
    private GoodsService goodsService;
    @Resource
    private OrderClient orderClient;
    @Resource
    private GoodsEvaluateService goodsEvaluateService;
    @Override
    public List<SeckillActivityVO> listSeckillActivity(Goods goods) {
        LoginUser loginUserApplet = tokenService.getLoginUserApplet();
        AppUser appUser = appUserClient.getAppUserById(loginUserApplet.getUserid());
        goods.setVipId(appUser.getVipId());
        List<SeckillActivityVO> seckillActivityVOS = seckillActivityInfoMapper.listSeckillActivity(goods);
        for (SeckillActivityVO seckillActivityVO : seckillActivityVOS) {
            Integer data = orderClient.getGoodsSaleNum(seckillActivityVO.getGoodsId(), 2).getData();
@@ -78,7 +83,50 @@
                seckillActivityVO.setStatus(1); // 未开始
            }
        }
        return seckillActivityVOS;
        Integer pageCurr = goods.getPageCurr();
        Integer pageSize = goods.getPageSize();
        String orderByColumn = goods.getOrderByColumn();
        String isAsc = goods.getIsAsc();
        // 排序
        Comparator<SeckillActivityVO> comparator = getComparator(orderByColumn, isAsc);
        List<SeckillActivityVO> sortedList = seckillActivityVOS.stream()
                .sorted(comparator)
                .collect(Collectors.toList());
        // 分页
        int startIndex = (pageCurr - 1) * pageSize;
        int endIndex = Math.min(startIndex + pageSize, sortedList.size());
        if (startIndex >= sortedList.size()) {
            return new ArrayList<>();
        }
        return sortedList.subList(startIndex, endIndex);
    }
    private Comparator<SeckillActivityVO> getComparator(String orderByColumn, String isAsc) {
        Comparator<SeckillActivityVO> comparator;
        switch (orderByColumn) {
            case "tgs.selling_price":
                comparator = Comparator.comparing(SeckillActivityVO::getSellingPrice);
                break;
            case "integral":
                comparator = Comparator.comparing(SeckillActivityVO::getIntegral);
                break;
            case "sale_num":
                comparator = Comparator.comparing(SeckillActivityVO::getSaleNum);
                break;
            // 添加其他排序字段
            default:
                comparator = Comparator.comparing(SeckillActivityVO::getId); // 默认按ID排序
                break;
        }
        if ("desc".equalsIgnoreCase(isAsc)) {
            comparator = comparator.reversed();
        }
        return comparator;
    }
    @Override
@@ -89,6 +137,16 @@
            Long userid = tokenService.getLoginUserApplet().getUserid();
            AppUser appUser = appUserClient.getAppUserById(userid);
            vipId = appUser.getVipId();
        }
        SeckillActivityInfo activityInfo = this.getById(seckillActivityId);
        if(null == activityInfo || activityInfo.getDelFlag() == 1){
            throw new RuntimeException("活动不存在");
        }
        if(activityInfo.getIsShelves() == 0){
            throw new RuntimeException("活动已下架");
        }
        if(!activityInfo.getVipIds().contains(vipId.toString())){
            throw new RuntimeException("权限不足");
        }
        SeckillActivityDetailVO seckillActivityDetailVO = seckillActivityInfoMapper.selectDetail(seckillActivityId, vipId);
        Integer goodsId = seckillActivityDetailVO.getGoodsId();
@@ -106,25 +164,44 @@
            shops = shopMapper.selectList(new LambdaUpdateWrapper<Shop>().eq(Shop::getDelFlag, 0));
        }
        for (Shop shop : shops) {
            Double wgs84 = GeodesyUtil.getDistance(longitude + "," + latitude, shop.getLongitude() + "," + shop.getLatitude()).get("WGS84");
            shop.setDistance(wgs84);
        }
        shops.sort(new Comparator<Shop>() {
            @Override
            public int compare(Shop o1, Shop o2) {
                return o1.getDistance().compareTo(o2.getDistance());
        if(StringUtils.isNotEmpty(longitude) && StringUtils.isNotEmpty(latitude)){
            for (Shop shop : shops) {
                Double wgs84 = GeodesyUtil.getDistance(longitude + "," + latitude, shop.getLongitude() + "," + shop.getLatitude()).get("WGS84");
                shop.setDistance(wgs84);
            }
        });
            shops.sort(new Comparator<Shop>() {
                @Override
                public int compare(Shop o1, Shop o2) {
                    return o1.getDistance().compareTo(o2.getDistance());
                }
            });
        }
        seckillActivityDetailVO.setShopList(shops);
        Integer integer = orderClient.getGoodsSaleNum(goods.getId(), 2).getData();
        seckillActivityDetailVO.setSaleNum(integer);
        GoodsEvaluate goodsEvaluate = goodsEvaluateService.lambdaQuery().eq(GoodsEvaluate::getGoodsId, goodsId).isNotNull(GoodsEvaluate::getComment).ne(GoodsEvaluate::getComment, "")
                .orderByDesc(GoodsEvaluate::getGrade).eq(GoodsEvaluate::getStatus, 2).eq(GoodsEvaluate::getDelFlag, 0).last(" limit 0, 1").one();
        if (null != goodsEvaluate) {
            AppUser appUserById = appUserClient.getAppUserById(goodsEvaluate.getAppUserId());
            if(null != appUserById){
                goodsEvaluate.setUserName(appUserById.getName());
                goodsEvaluate.setAvatar(appUserById.getAvatar());
                goodsEvaluate.setIdStr(String.valueOf(goodsEvaluate.getId()));
            }
        }
        seckillActivityDetailVO.setGoodsEvaluate(goodsEvaluate);
        return seckillActivityDetailVO;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveSeckillActivityInfo(SeckillActivityInfo seckillActivityInfo) {
        Integer goodId = seckillActivityInfo.getGoodId();
        long count = this.count(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodId).eq(SeckillActivityInfo::getDelFlag, 0)
                .eq(SeckillActivityInfo::getIsShelves, 1).last(" and now() between start_time and end_time"));
        if(0 < count){
            throw new RuntimeException("该秒杀商品已在其他秒杀活动中存在");
        }
        this.baseMapper.insert(seckillActivityInfo);
        List<GoodsSeckill> goodsSeckills = seckillActivityInfo.getGoodsSeckills();
        for (GoodsSeckill goodsSeckill : goodsSeckills) {
@@ -138,6 +215,12 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateSeckillActivityInfo(SeckillActivityInfo seckillActivityInfo) {
        Integer goodId = seckillActivityInfo.getGoodId();
        long count = this.count(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodId).eq(SeckillActivityInfo::getDelFlag, 0)
                .eq(SeckillActivityInfo::getIsShelves, 1).last(" and now() between start_time and end_time"));
        if(1 < count){
            throw new RuntimeException("该秒杀商品已在其他秒杀活动中存在");
        }
        this.baseMapper.updateById(seckillActivityInfo);
        goodsSeckillService.remove(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, seckillActivityInfo.getId()));
        List<GoodsSeckill> goodsSeckills = seckillActivityInfo.getGoodsSeckills();