fix promotion seckill for no join goods is not autostart

This commit is contained in:
paulGao 2021-09-22 09:43:11 +08:00
parent ac60f27814
commit d4c9b0f147

View File

@ -398,42 +398,42 @@ public class PromotionServiceImpl implements PromotionService {
seckill.setPromotionStatus(promotionMessage.getPromotionStatus()); seckill.setPromotionStatus(promotionMessage.getPromotionStatus());
result = this.seckillService.update(updateWrapper(promotionMessage)); result = this.seckillService.update(updateWrapper(promotionMessage));
log.info("更新限时抢购活动状态:{}", seckill); log.info("更新限时抢购活动状态:{}", seckill);
//判断参与活动的商品是否为空如果为空则返回
if (seckill.getSeckillApplyList() == null) {
return result;
}
//循环秒杀商品数据将数据按照时间段进行存储 //判断参与活动的商品是否为空
for (SeckillApply seckillApply : seckill.getSeckillApplyList()) { if (seckill.getSeckillApplyList() != null && !seckill.getSeckillApplyList().isEmpty()) {
if (seckillApply.getPromotionApplyStatus().equals(PromotionApplyStatusEnum.PASS.name())) { //循环秒杀商品数据将数据按照时间段进行存储
//下一个时间默认为当天结束时间 for (SeckillApply seckillApply : seckill.getSeckillApplyList()) {
int nextHour = 23; if (seckillApply.getPromotionApplyStatus().equals(PromotionApplyStatusEnum.PASS.name())) {
String[] split = seckill.getHours().split(","); //下一个时间默认为当天结束时间
int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); int nextHour = 23;
//排序时间段 String[] split = seckill.getHours().split(",");
Arrays.sort(hoursSored); int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray();
for (int i : hoursSored) { //排序时间段
//如果当前时间段大于排序后的时间段的某个当前时间段的下个时间段即为排序后的时间段的某个 Arrays.sort(hoursSored);
if (seckillApply.getTimeLine() < i) { for (int i : hoursSored) {
nextHour = i; //如果当前时间段大于排序后的时间段的某个当前时间段的下个时间段即为排序后的时间段的某个
break; if (seckillApply.getTimeLine() < i) {
nextHour = i;
break;
}
} }
Seckill seckill1 = JSONUtil.toBean(JSONUtil.toJsonStr(seckill), Seckill.class);
String format = DateUtil.format(seckill.getStartTime(), cn.lili.common.utils.DateUtil.STANDARD_DATE_FORMAT);
DateTime parseStartTime = DateUtil.parse((format + " " + seckillApply.getTimeLine()), "yyyy-MM-dd HH");
DateTime parseEndTime = DateUtil.parse((format + " " + nextHour), "yyyy-MM-dd HH");
//如果是当天最后的时间段则设置到当天结束时间的59分59秒
if (nextHour == seckillApply.getTimeLine()) {
parseEndTime = DateUtil.parse((format + " " + nextHour + ":59:59"), cn.lili.common.utils.DateUtil.STANDARD_FORMAT);
}
seckill1.setStartTime(parseStartTime);
//当时商品的秒杀活动活动结束时间为下个时间段的开始
seckill1.setEndTime(parseEndTime);
log.info("更新限时抢购商品状态:{}", seckill1);
this.goodsIndexService.updateEsGoodsIndex(seckillApply.getSkuId(), seckill1, promotionTypeEnum.name() + "-" + seckillApply.getTimeLine(), seckillApply.getPrice());
} }
Seckill seckill1 = JSONUtil.toBean(JSONUtil.toJsonStr(seckill), Seckill.class);
String format = DateUtil.format(seckill.getStartTime(), cn.lili.common.utils.DateUtil.STANDARD_DATE_FORMAT);
DateTime parseStartTime = DateUtil.parse((format + " " + seckillApply.getTimeLine()), "yyyy-MM-dd HH");
DateTime parseEndTime = DateUtil.parse((format + " " + nextHour), "yyyy-MM-dd HH");
//如果是当天最后的时间段则设置到当天结束时间的59分59秒
if (nextHour == seckillApply.getTimeLine()) {
parseEndTime = DateUtil.parse((format + " " + nextHour + ":59:59"), cn.lili.common.utils.DateUtil.STANDARD_FORMAT);
}
seckill1.setStartTime(parseStartTime);
//当时商品的秒杀活动活动结束时间为下个时间段的开始
seckill1.setEndTime(parseEndTime);
log.info("更新限时抢购商品状态:{}", seckill1);
this.goodsIndexService.updateEsGoodsIndex(seckillApply.getSkuId(), seckill1, promotionTypeEnum.name() + "-" + seckillApply.getTimeLine(), seckillApply.getPrice());
} }
} }
this.mongoTemplate.save(seckill); this.mongoTemplate.save(seckill);
return result; return result;
} }