修复未开始的秒杀活动修改时,先添加秒杀商品后修改时间时,秒杀活动商品时间没有改变问题

This commit is contained in:
paulGao 2022-03-01 11:49:35 +08:00
parent 0714480e01
commit e27185d424
3 changed files with 65 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package cn.lili.modules.promotion.service;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.promotion.entity.dos.Seckill;
import cn.lili.modules.promotion.entity.dos.SeckillApply;
import cn.lili.modules.promotion.entity.dto.search.SeckillSearchParams;
import cn.lili.modules.promotion.entity.vos.SeckillApplyVO;
@ -97,4 +98,12 @@ public interface SeckillApplyService extends IService<SeckillApply> {
*/
void updateSeckillApplyQuantity(String seckillId, String skuId, Integer quantity);
/**
* 更新秒杀活动时间
*
* @param seckill 秒杀活动
* @return 是否更新成功
*/
boolean updateSeckillApplyTime(Seckill seckill);
}

View File

@ -185,6 +185,7 @@ public class SeckillApplyServiceImpl extends ServiceImpl<SeckillApplyMapper, Sec
if (!promotionGoodsList.isEmpty()) {
PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams();
searchParams.setStoreId(storeId);
searchParams.setPromotionType(PromotionTypeEnum.SECKILL.name());
searchParams.setSkuIds(promotionGoodsList.stream().map(PromotionGoods::getSkuId).collect(Collectors.toList()));
promotionGoodsService.deletePromotionGoods(searchParams);
//初始化促销商品
@ -207,6 +208,7 @@ public class SeckillApplyServiceImpl extends ServiceImpl<SeckillApplyMapper, Sec
* @param id id
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void removeSeckillApply(String seckillId, String id) {
Seckill seckill = this.seckillService.getById(seckillId);
if (seckill == null) {
@ -243,6 +245,41 @@ public class SeckillApplyServiceImpl extends ServiceImpl<SeckillApplyMapper, Sec
this.update(updateWrapper);
}
/**
* 更新秒杀活动时间
*
* @param seckill 秒杀活动
* @return 是否更新成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateSeckillApplyTime(Seckill seckill) {
boolean result = false;
List<PromotionGoods> promotionGoodsList = new ArrayList<>();
LambdaQueryWrapper<SeckillApply> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SeckillApply::getSeckillId, seckill.getId());
List<SeckillApply> list = this.list(queryWrapper);
for (SeckillApply seckillApply : list) {
//获取参与活动的商品信息
GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(seckillApply.getSkuId());
//获取促销商品
PromotionGoods promotionGoods = this.setSeckillGoods(goodsSku, seckillApply, seckill);
promotionGoodsList.add(promotionGoods);
}
//保存促销活动商品信息
if (!promotionGoodsList.isEmpty()) {
PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams();
searchParams.setPromotionType(PromotionTypeEnum.SECKILL.name());
searchParams.setSkuIds(promotionGoodsList.stream().map(PromotionGoods::getSkuId).collect(Collectors.toList()));
promotionGoodsService.deletePromotionGoods(searchParams);
//初始化促销商品
PromotionTools.promotionGoodsInit(promotionGoodsList, seckill, PromotionTypeEnum.SECKILL);
result = promotionGoodsService.saveBatch(promotionGoodsList);
this.seckillService.updateEsGoodsSeckill(seckill, list);
}
return result;
}
/**
* 检查秒杀活动申请列表参数信息
*

View File

@ -131,12 +131,31 @@ public class SeckillServiceImpl extends AbstractPromotionsServiceImpl<SeckillMap
}
}
/**
* 通用促销更新
* 调用顺序:
* 1. checkStatus 检查促销状态
* 2. checkPromotions 检查促销参数
* 3. saveOrUpdate 保存促销信息
* 4. updatePromotionGoods 更新促销商品信息
* 5. updateEsGoodsIndex 更新商品索引促销信息
*
* @param promotions 促销信息
* @return 是否更新成功
*/
@Override
public boolean updatePromotions(Seckill promotions) {
seckillApplyService.updateSeckillApplyTime(promotions);
return super.updatePromotions(promotions);
}
/**
* 更新商品索引限时抢购信息
*
* @param seckill 限时抢购信息
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void updateEsGoodsSeckill(Seckill seckill, List<SeckillApply> seckillApplies) {
if (seckillApplies != null && !seckillApplies.isEmpty()) {
// 更新促销范围