fix settlement seckill promotion is not punctuality
This commit is contained in:
parent
4063c8b063
commit
5fcdbe8df9
@ -1,16 +1,16 @@
|
||||
package cn.lili.trigger.executor;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.lili.trigger.interfaces.TimeTrigger;
|
||||
import cn.lili.trigger.TimeTriggerExecutor;
|
||||
import cn.lili.trigger.message.PintuanOrderMessage;
|
||||
import cn.lili.trigger.message.PromotionMessage;
|
||||
import cn.lili.trigger.model.TimeExecuteConstant;
|
||||
import cn.lili.trigger.model.TimeTriggerMsg;
|
||||
import cn.lili.common.properties.RocketmqCustomProperties;
|
||||
import cn.lili.modules.order.order.service.OrderService;
|
||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||
import cn.lili.modules.promotion.service.PromotionService;
|
||||
import cn.lili.trigger.TimeTriggerExecutor;
|
||||
import cn.lili.trigger.interfaces.TimeTrigger;
|
||||
import cn.lili.trigger.message.PintuanOrderMessage;
|
||||
import cn.lili.trigger.message.PromotionMessage;
|
||||
import cn.lili.trigger.model.TimeExecuteConstant;
|
||||
import cn.lili.trigger.model.TimeTriggerMsg;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -62,11 +62,13 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor {
|
||||
//促销活动开始后,设置促销活动结束的定时任务
|
||||
promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name());
|
||||
String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId();
|
||||
//结束时间(延时一分钟)
|
||||
long closeTime = promotionMessage.getEndTime().getTime() + 60000;
|
||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic());
|
||||
//添加延时任务
|
||||
timeTrigger.addDelay(timeTriggerMsg);
|
||||
if (promotionMessage.getEndTime() != null) {
|
||||
//结束时间(延时一分钟)
|
||||
long closeTime = promotionMessage.getEndTime().getTime() + 60000;
|
||||
TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic());
|
||||
//添加延时任务
|
||||
timeTrigger.addDelay(timeTriggerMsg);
|
||||
}
|
||||
} else {
|
||||
//不是开始,则修改活动状态
|
||||
promotionService.updatePromotionStatus(promotionMessage);
|
||||
|
@ -59,13 +59,11 @@ public class SkuPromotionRender implements CartRenderStep {
|
||||
*/
|
||||
private void renderBasePrice(TradeDTO tradeDTO) {
|
||||
tradeDTO.getCartList().forEach(
|
||||
cartVO -> {
|
||||
cartVO.getSkuList().forEach(cartSkuVO -> {
|
||||
PriceDetailDTO priceDetailDTO = cartSkuVO.getPriceDetailDTO();
|
||||
priceDetailDTO.setGoodsPrice(cartSkuVO.getSubTotal());
|
||||
priceDetailDTO.setDiscountPrice(CurrencyUtil.sub(priceDetailDTO.getOriginalPrice(), cartSkuVO.getSubTotal()));
|
||||
});
|
||||
}
|
||||
cartVO -> cartVO.getSkuList().forEach(cartSkuVO -> {
|
||||
PriceDetailDTO priceDetailDTO = cartSkuVO.getPriceDetailDTO();
|
||||
priceDetailDTO.setGoodsPrice(cartSkuVO.getSubTotal());
|
||||
priceDetailDTO.setDiscountPrice(CurrencyUtil.sub(priceDetailDTO.getOriginalPrice(), cartSkuVO.getSubTotal()));
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -129,7 +129,7 @@ public class CartServiceImpl implements CartService {
|
||||
if (cartSkuVO != null && dataSku.getUpdateTime().equals(cartSkuVO.getGoodsSku().getUpdateTime())) {
|
||||
|
||||
//如果覆盖购物车中商品数量
|
||||
if (cover) {
|
||||
if (Boolean.TRUE.equals(cover)) {
|
||||
cartSkuVO.setNum(num);
|
||||
this.checkSetGoodsQuantity(cartSkuVO, skuId, num);
|
||||
} else {
|
||||
|
@ -1,7 +1,7 @@
|
||||
package cn.lili.modules.order.order.entity.vo;
|
||||
|
||||
import cn.lili.common.utils.StringUtils;
|
||||
import cn.lili.common.enums.ClientTypeEnum;
|
||||
import cn.lili.common.utils.StringUtils;
|
||||
import cn.lili.modules.order.order.entity.enums.*;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@ -149,7 +149,7 @@ public class OrderSimpleVO {
|
||||
String[] complainStatus = groupComplainStatus.split(",");
|
||||
String[] commentStatus = groupCommentStatus.split(",");
|
||||
String[] goodsPrice = groupGoodsPrice.split(",");
|
||||
// String goodsId, String skuId, Integer num, String image, String name, String afterSaleStatus
|
||||
|
||||
for (int i = 0; i < goodsId.length; i++) {
|
||||
orderItemVOS.add(new OrderItemVO(orderItemsSn[i], goodsId[i], skuId[i], num[i], image[i], name[i], afterSaleStatus[i], complainStatus[i], commentStatus[i], Double.parseDouble(goodsPrice[i])));
|
||||
}
|
||||
|
@ -91,12 +91,12 @@ public class PromotionGoodsServiceImpl extends ServiceImpl<PromotionGoodsMapper,
|
||||
|
||||
GoodsSku sku = goodsSkuService.getGoodsSkuByIdFromCache(skuId);
|
||||
if (sku == null) {
|
||||
return null;
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
List<PromotionGoods> promotionGoods = new ArrayList<>();
|
||||
promotionGoods.addAll(this.list(new LambdaQueryWrapper<PromotionGoods>()
|
||||
List<PromotionGoods> promotionGoods = new ArrayList<>(this.list(new LambdaQueryWrapper<PromotionGoods>()
|
||||
.eq(PromotionGoods::getSkuId, skuId)
|
||||
.le(PromotionGoods::getStartTime, System.currentTimeMillis())
|
||||
.eq(PromotionGoods::getPromotionStatus, PromotionStatusEnum.START.name())));
|
||||
|
||||
|
||||
@ -170,8 +170,8 @@ public class PromotionGoodsServiceImpl extends ServiceImpl<PromotionGoodsMapper,
|
||||
promotionGoodsPage.setSize(page.getSize());
|
||||
promotionGoodsPage.setTotal(page.getTotal());
|
||||
promotionGoodsPage.setPages(page.getPages());
|
||||
for (PromotionGoods record : page.getRecords()) {
|
||||
PromotionGoodsDTO promotionGoodsDTO = this.wrapperPromotionGoodsDTO(record);
|
||||
for (PromotionGoods promotionGoods : page.getRecords()) {
|
||||
PromotionGoodsDTO promotionGoodsDTO = this.wrapperPromotionGoodsDTO(promotionGoods);
|
||||
promotionGoodsList.add(promotionGoodsDTO);
|
||||
}
|
||||
promotionGoodsPage.setRecords(promotionGoodsList);
|
||||
@ -380,8 +380,8 @@ public class PromotionGoodsServiceImpl extends ServiceImpl<PromotionGoodsMapper,
|
||||
promotionGoodsPage.setTotal(page.getTotal());
|
||||
promotionGoodsPage.setPages(page.getPages());
|
||||
List<PromotionGoods> records = page.getRecords();
|
||||
for (PromotionGoods record : records) {
|
||||
PromotionGoodsDTO promotionGoodsDTO = this.wrapperPromotionGoodsDTO(record);
|
||||
for (PromotionGoods promotionGoods : records) {
|
||||
PromotionGoodsDTO promotionGoodsDTO = this.wrapperPromotionGoodsDTO(promotionGoods);
|
||||
promotionGoodsList.add(promotionGoodsDTO);
|
||||
}
|
||||
promotionGoodsPage.setRecords(promotionGoodsList);
|
||||
@ -414,9 +414,9 @@ public class PromotionGoodsServiceImpl extends ServiceImpl<PromotionGoodsMapper,
|
||||
searchParams.setOrder(pageVo.getOrder());
|
||||
IPage<GoodsSku> goodsSkuByPage = goodsSkuService.getGoodsSkuByPage(searchParams);
|
||||
//将查询到的商品sku转换为促销商品
|
||||
for (GoodsSku record : goodsSkuByPage.getRecords()) {
|
||||
PromotionGoodsDTO promotionGoods = new PromotionGoodsDTO(record);
|
||||
promotionGoods.setGoodsImage(record.getThumbnail());
|
||||
for (GoodsSku goodsSku : goodsSkuByPage.getRecords()) {
|
||||
PromotionGoodsDTO promotionGoods = new PromotionGoodsDTO(goodsSku);
|
||||
promotionGoods.setGoodsImage(goodsSku.getThumbnail());
|
||||
promotionGoods.setStartTime(promotion.getStartTime());
|
||||
promotionGoods.setEndTime(promotion.getEndTime());
|
||||
promotionGoods.setTitle(promotion.getPromotionName());
|
||||
|
@ -4,10 +4,9 @@ import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.lili.common.enums.PromotionTypeEnum;
|
||||
import cn.lili.common.enums.ResultCode;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.enums.PromotionTypeEnum;
|
||||
import cn.lili.trigger.message.PromotionMessage;
|
||||
import cn.lili.modules.order.cart.entity.vo.FullDiscountVO;
|
||||
import cn.lili.modules.promotion.entity.dos.*;
|
||||
import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO;
|
||||
@ -19,6 +18,7 @@ import cn.lili.modules.promotion.entity.vos.SeckillVO;
|
||||
import cn.lili.modules.promotion.service.*;
|
||||
import cn.lili.modules.search.entity.dos.EsGoodsIndex;
|
||||
import cn.lili.modules.search.service.EsGoodsIndexService;
|
||||
import cn.lili.trigger.message.PromotionMessage;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
@ -115,7 +115,7 @@ public class PromotionServiceImpl implements PromotionService {
|
||||
break;
|
||||
//秒杀
|
||||
case SECKILL:
|
||||
result = this.updateSeckill(promotionMessage, esPromotionKey, promotionTypeEnum);
|
||||
result = this.updateSeckill(promotionMessage, promotionTypeEnum);
|
||||
break;
|
||||
//拼团
|
||||
case PINTUAN:
|
||||
@ -381,11 +381,10 @@ public class PromotionServiceImpl implements PromotionService {
|
||||
* 修改秒杀状态
|
||||
*
|
||||
* @param promotionMessage 信息队列传输促销信息实体
|
||||
* @param esPromotionKey es Key
|
||||
* @param promotionTypeEnum 促销分类枚举
|
||||
* @return 修改结果
|
||||
*/
|
||||
private boolean updateSeckill(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) {
|
||||
private boolean updateSeckill(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) {
|
||||
boolean result;
|
||||
SeckillVO seckill = this.mongoTemplate.findById(promotionMessage.getPromotionId(), SeckillVO.class);
|
||||
if (seckill == null) {
|
||||
|
@ -1,24 +1,17 @@
|
||||
package cn.lili.modules.promotion.serviceimpl;
|
||||
|
||||
import cn.lili.common.enums.PromotionTypeEnum;
|
||||
import cn.lili.common.enums.ResultCode;
|
||||
import cn.lili.trigger.util.DelayQueueTools;
|
||||
import cn.lili.trigger.enums.DelayTypeEnums;
|
||||
import cn.lili.trigger.message.PromotionMessage;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.trigger.interfaces.TimeTrigger;
|
||||
import cn.lili.trigger.model.TimeExecuteConstant;
|
||||
import cn.lili.trigger.model.TimeTriggerMsg;
|
||||
import cn.lili.common.properties.RocketmqCustomProperties;
|
||||
import cn.lili.common.utils.BeanUtil;
|
||||
import cn.lili.common.utils.DateUtil;
|
||||
import cn.lili.mybatis.util.PageUtil;
|
||||
import cn.lili.common.utils.StringUtils;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.common.properties.RocketmqCustomProperties;
|
||||
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
|
||||
import cn.lili.modules.promotion.entity.dos.Seckill;
|
||||
import cn.lili.modules.promotion.entity.dos.SeckillApply;
|
||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||
import cn.lili.common.enums.PromotionTypeEnum;
|
||||
import cn.lili.modules.promotion.entity.enums.SeckillApplyStatusEnum;
|
||||
import cn.lili.modules.promotion.entity.vos.SeckillSearchParams;
|
||||
import cn.lili.modules.promotion.entity.vos.SeckillVO;
|
||||
@ -32,6 +25,13 @@ import cn.lili.modules.system.entity.dos.Setting;
|
||||
import cn.lili.modules.system.entity.dto.SeckillSetting;
|
||||
import cn.lili.modules.system.entity.enums.SettingEnum;
|
||||
import cn.lili.modules.system.service.SettingService;
|
||||
import cn.lili.mybatis.util.PageUtil;
|
||||
import cn.lili.trigger.enums.DelayTypeEnums;
|
||||
import cn.lili.trigger.interfaces.TimeTrigger;
|
||||
import cn.lili.trigger.message.PromotionMessage;
|
||||
import cn.lili.trigger.model.TimeExecuteConstant;
|
||||
import cn.lili.trigger.model.TimeTriggerMsg;
|
||||
import cn.lili.trigger.util.DelayQueueTools;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
@ -47,6 +47,7 @@ import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -193,6 +194,9 @@ public class SeckillServiceImpl extends ServiceImpl<SeckillMapper, Seckill> impl
|
||||
this.mongoTemplate.save(seckillVO);
|
||||
//如果编辑后活动时间不一致,则编辑延时任务
|
||||
if (seckill.getStartTime().getTime() != seckillVO.getStartTime().getTime()) {
|
||||
if (seckillVO.getEndTime() == null) {
|
||||
seckillVO.setEndTime(cn.hutool.core.date.DateUtil.endOfDay(new Date()));
|
||||
}
|
||||
PromotionMessage promotionMessage = new PromotionMessage(seckillVO.getId(), PromotionTypeEnum.SECKILL.name(), PromotionStatusEnum.START.name(), seckillVO.getStartTime(), seckillVO.getEndTime());
|
||||
//更新延时任务
|
||||
this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.lili.modules.promotion.tools;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import cn.lili.common.enums.PromotionTypeEnum;
|
||||
import cn.lili.common.enums.ResultCode;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.utils.DateUtil;
|
||||
@ -8,7 +9,6 @@ import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
|
||||
import cn.lili.modules.promotion.entity.dto.BasePromotion;
|
||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||
import cn.lili.common.enums.PromotionTypeEnum;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Sort;
|
||||
@ -120,7 +120,9 @@ public class PromotionTools {
|
||||
promotionGoods.setPromotionId(promotion.getId());
|
||||
promotionGoods.setStoreName(promotion.getStoreName());
|
||||
promotionGoods.setTitle(promotion.getPromotionName());
|
||||
promotionGoods.setStartTime(promotion.getStartTime());
|
||||
if (promotionGoods.getStartTime() == null) {
|
||||
promotionGoods.setStartTime(promotion.getStartTime());
|
||||
}
|
||||
if (promotion.getEndTime() == null) {
|
||||
promotionGoods.setEndTime(promotion.getEndTime());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user