| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.constant.CacheConstants; |
| | | import com.ruoyi.common.core.enums.StartStatusEnum; |
| | | 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.GoodsSeckillDTO; |
| | | import com.ruoyi.goods.controller.management.DTO.GoodsSeckillQuery; |
| | | import com.ruoyi.goods.controller.management.DTO.GoodsSeckillUpd; |
| | |
| | | |
| | | private final IGoodsSkuService goodsSkuService; |
| | | private final OrderClient orderClient; |
| | | |
| | | private final RedisService redisService; |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void addGoodsSeckill(GoodsSeckillDTO dto) { |
| | |
| | | vo.setNumberOfPurchasedMembers(num); |
| | | return vo; |
| | | } |
| | | |
| | | /** |
| | | * 开始秒杀 |
| | | * |
| | | * @param seckillId 秒杀id |
| | | */ |
| | | @Override |
| | | public void startSeckill(Long seckillId) { |
| | | log.info(">>>>>>>>>>>>>>>>>>>>{}秒杀开始<<<<<<<<<<<<<<<<<<<<", seckillId); |
| | | GoodsSeckill goodsSeckill = this.getById(seckillId); |
| | | //秒杀商品不能为空且状态为未开始 |
| | | if (StringUtils.isNotNull(goodsSeckill) |
| | | && goodsSeckill.getStartStatus().equals(StartStatusEnum.NOT_STARTED)) { |
| | | //开始秒杀 |
| | | this.lambdaUpdate().set(GoodsSeckill::getStartStatus, StartStatusEnum.STARTED) |
| | | .eq(GoodsSeckill::getId, seckillId).update(); |
| | | // 将秒杀商品放入缓存 |
| | | redisService.setCacheObject( |
| | | CacheConstants.SECKILL_GOODS + goodsSeckill.getId(), |
| | | goodsSeckill.getSeckillStock()); |
| | | } |
| | | //TODO websocket 推送秒杀开始消息 |
| | | } |
| | | |
| | | /** |
| | | * 结束秒杀 |
| | | * |
| | | * @param seckillId 秒杀id |
| | | */ |
| | | @Override |
| | | public void endSeckill(Long seckillId) { |
| | | log.info(">>>>>>>>>>>>>>>>>>>>{}秒杀结束<<<<<<<<<<<<<<<<<<<<", seckillId); |
| | | GoodsSeckill goodsSeckill = this.getById(seckillId); |
| | | if (StringUtils.isNotNull(goodsSeckill) |
| | | && goodsSeckill.getStartStatus().equals(StartStatusEnum.STARTED)) { |
| | | //结束秒杀 |
| | | this.lambdaUpdate().set(GoodsSeckill::getStartStatus, StartStatusEnum.ENDED) |
| | | .eq(GoodsSeckill::getId, seckillId).update(); |
| | | // 将秒杀商品从缓存中移除 |
| | | redisService.deleteObject(CacheConstants.SECKILL_GOODS + goodsSeckill.getId()); |
| | | } |
| | | //TODO websocket 推送秒杀结束消息 |
| | | } |
| | | } |