From de0026f420814a34a0e94c2de702b563b7e9234e Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期三, 31 七月 2024 16:10:12 +0800 Subject: [PATCH] 修改bug --- ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java | 41 +++++++++++++++++++++++++++++++++-------- 1 files changed, 33 insertions(+), 8 deletions(-) diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java index 5f66fd1..b005cfe 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java @@ -142,7 +142,12 @@ goodsStockUpdDTO.setAuctionStock(seckillStock * -1); goodsStockUpdDTO.setGoodsSkuId(goodsSku.getId()); goodsSkuService.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO)); - asyncMethodService.seckillScheduleTask(Lists.newArrayList(goodsSeckill)); + if (goodsSeckill.getEndTime().isBefore(LocalDateTime.now())) { + goodsSeckill.setStartStatus(StartStatusEnum.ENDED); + this.updateById(goodsSeckill); + } else { + asyncMethodService.seckillScheduleTask(Lists.newArrayList(goodsSeckill)); + } } } @@ -181,15 +186,29 @@ if (goodsSku.getStock() < upd.getSeckillStock()) { throw new ServiceException("编辑失败,商品库存不足"); } + Optional<GoodsSeckill> seckillOpt = this.lambdaQuery() + .ne(GoodsSeckill::getStartStatus, StartStatusEnum.ENDED) + .ne(GoodsSeckill::getId, goodsSeckill.getId()) + .eq(GoodsSeckill::getGoodsSkuId, goodsSeckill.getGoodsSkuId()).oneOpt(); + if (seckillOpt.isPresent()) { + throw new ServiceException("编辑失败,商品在该时间段内有其他秒杀活动"); + } GoodsSeckill goodsSeckillUpd = BeanUtils.copyBean(upd, GoodsSeckill.class); goodsSeckillUpd.setListingStatus(ListingStatusEnum.ON_SHELVES); goodsSeckillUpd.setStartStatus(StartStatusEnum.NOT_STARTED); this.updateById(goodsSeckillUpd); - GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); - goodsStockUpdDTO.setAuctionStock(upd.getSeckillStock() * -1); - goodsStockUpdDTO.setGoodsSkuId(goodsSeckill.getGoodsSkuId()); - goodsSkuService.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO)); - asyncMethodService.seckillScheduleTask(Lists.newArrayList(goodsSeckillUpd)); + + if (goodsSeckillUpd.getEndTime().isBefore(LocalDateTime.now())) { + goodsSeckillUpd.setStartStatus(StartStatusEnum.ENDED); + this.updateById(goodsSeckillUpd); + } else { + // 修改库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setAuctionStock(upd.getSeckillStock() * -1); + goodsStockUpdDTO.setGoodsSkuId(goodsSeckill.getGoodsSkuId()); + goodsSkuService.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO)); + asyncMethodService.seckillScheduleTask(Lists.newArrayList(goodsSeckillUpd)); + } } /** @@ -204,7 +223,8 @@ throw new ServiceException("秒杀商品不存在"); } goodsSeckill.setListingStatus(dto.getListingStatus()); - if (dto.getListingStatus().equals(ListingStatusEnum.REMOVED_FROM_THE_SHELF)) { + if (dto.getListingStatus().equals(ListingStatusEnum.REMOVED_FROM_THE_SHELF) + && !goodsSeckill.getStartStatus().equals(StartStatusEnum.ENDED)) { // 退回剩余库存 GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setAuctionStock(goodsSeckill.getSeckillStock()); @@ -280,12 +300,17 @@ log.info(">>>>>>>>>>>>>>>>>>>>{}秒杀结束<<<<<<<<<<<<<<<<<<<<", seckillId); GoodsSeckill goodsSeckill = this.getById(seckillId); if (StringUtils.isNotNull(goodsSeckill) - && goodsSeckill.getStartStatus().equals(StartStatusEnum.STARTED)) { + && !goodsSeckill.getStartStatus().equals(StartStatusEnum.ENDED)) { //结束秒杀 this.lambdaUpdate().set(GoodsSeckill::getStartStatus, StartStatusEnum.ENDED) .eq(GoodsSeckill::getId, seckillId).update(); // 将秒杀商品从缓存中移除 redisService.deleteObject(CacheConstants.SECKILL_GOODS + goodsSeckill.getId()); + // 退回剩余库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setAuctionStock(goodsSeckill.getSeckillStock()); + goodsStockUpdDTO.setGoodsSkuId(goodsSeckill.getGoodsSkuId()); + goodsSkuService.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO)); } Map<String, Object> map = new ConcurrentHashMap<>(); map.put("notification_type", NotificationTypeConstant.SECKILL); -- Gitblit v1.7.1