满减优惠问题相关处理,秒杀商品打开页面异常问题处理

This commit is contained in:
Chopper
2021-08-25 20:58:09 +08:00
parent d4911d1a32
commit a971066909
21 changed files with 615 additions and 237 deletions

View File

@@ -0,0 +1,202 @@
package cn.lili.event.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil;
import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.utils.SnowFlake;
import cn.lili.event.OrderStatusChangeEvent;
import cn.lili.event.TradeEvent;
import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.member.entity.enums.PointTypeEnum;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.cart.entity.vo.CartVO;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.modules.order.order.entity.dto.PriceDetailDTO;
import cn.lili.modules.order.order.entity.enums.*;
import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.trade.entity.dos.OrderLog;
import cn.lili.modules.order.trade.service.OrderLogService;
import cn.lili.modules.promotion.service.MemberCouponService;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.MqOrderTagsEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 订单状态处理类
*
* @author Chopper
* @since 2020-07-03 11:20
**/
@Slf4j
@Service
public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent {
@Autowired
private Cache cache;
@Autowired
private MemberService memberService;
@Autowired
private OrderService orderService;
@Autowired
private OrderItemService orderItemService;
@Autowired
private OrderLogService orderLogService;
@Autowired
private MemberCouponService memberCouponService;
@Autowired
private GoodsSkuService goodsSkuService;
@Autowired
private RocketmqCustomProperties rocketmqCustomProperties;
@Autowired
private RocketMQTemplate rocketMQTemplate;
@Override
public void orderCreate(TradeDTO tradeDTO) {
tradeDTO.getCartList().forEach(
cartVO -> {
//有满减优惠,则记录信息
if (cartVO.getGiftList() != null && cartVO.getGiftList().size() > 0
&& cartVO.getGiftPoint() != null && cartVO.getGiftPoint() > 0
&& cartVO.getGiftCouponList() != null && cartVO.getGiftCouponList().size() > 0) {
cache.put(CachePrefix.ORDER.getPrefix() + cartVO.getSn(), cartVO);
}
}
);
}
@Override
public void orderChange(OrderMessage orderMessage) {
System.out.println(CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn());
if (orderMessage.getNewStatus().equals(OrderStatusEnum.PAID)) {
renderGift((CartVO) cache.get(CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn()), orderMessage);
}
}
/**
* 渲染优惠券信息
*/
private void renderGift(CartVO cartVO, OrderMessage orderMessage) {
//没有优惠信息则跳过
if (cartVO == null) {
return;
}
Order order = orderService.getBySn(orderMessage.getOrderSn());
//赠送积分判定
try {
if (cartVO.getGiftPoint() != null && cartVO.getGiftPoint() > 0) {
memberService.updateMemberPoint(cartVO.getGiftPoint().longValue(), PointTypeEnum.INCREASE.name(),
order.getMemberId(), "订单满优惠赠送积分" + cartVO.getGiftPoint());
}
} catch (Exception e) {
log.error("订单赠送积分异常", e);
}
try {
//优惠券判定
if (cartVO.getGiftCouponList() != null && cartVO.getGiftCouponList().size() > 0) {
cartVO.getGiftCouponList().forEach(couponId -> {
memberCouponService.receiveCoupon(couponId, order.getMemberId(), order.getMemberName());
});
}
} catch (Exception e) {
log.error("订单赠送优惠券异常", e);
}
try {
//赠品潘迪ing
if (cartVO.getGiftList() != null && cartVO.getGiftList().size() > 0) {
generatorGiftOrder(cartVO.getGiftList(), cartVO, order);
}
} catch (Exception e) {
log.error("订单赠送赠品异常", e);
}
}
/**
* 生成赠品订单
*
* @param skuIds 赠品sku信息
* @param cartVO 购物车信息
* @param originOrder 赠品原订单信息
*/
private void generatorGiftOrder(List<String> skuIds, CartVO cartVO, Order originOrder) {
List<OrderItem> orderItems = new ArrayList<>();
List<OrderLog> orderLogs = new ArrayList<>();
Order order = new Order();
PriceDetailDTO priceDetailDTO = new PriceDetailDTO();
BeanUtil.copyProperties(originOrder, order, "id");
BeanUtil.copyProperties(priceDetailDTO, order, "id");
order.setSn(SnowFlake.createStr("G"));
order.setOrderType(OrderPromotionTypeEnum.GIFT.name());
order.setOrderStatus(OrderStatusEnum.UNPAID.name());
order.setPayStatus(PayStatusEnum.UNPAID.name());
order.setDeliverStatus(DeliverStatusEnum.UNDELIVERED.name());
order.setNeedReceipt(false);
order.setPriceDetailDTO(priceDetailDTO);
order.setClientType(originOrder.getClientType());
String message = "赠品订单[" + order.getSn() + "]创建";
orderLogs.add(new OrderLog(order.getSn(), originOrder.getMemberId(), UserEnums.MEMBER.name(), originOrder.getMemberName(), message));
for (String skuId : skuIds) {
GoodsSku goodsSkuByIdFromCache = goodsSkuService.getGoodsSkuByIdFromCache(skuId);
OrderItem orderItem = new OrderItem();
BeanUtil.copyProperties(goodsSkuByIdFromCache, orderItem, "id");
BeanUtil.copyProperties(priceDetailDTO, orderItem, "id");
orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.NEW.name());
orderItem.setCommentStatus(CommentStatusEnum.NEW.name());
orderItem.setComplainStatus(OrderComplaintStatusEnum.NEW.name());
orderItem.setNum(1);
orderItem.setOrderSn(order.getSn());
orderItem.setImage(goodsSkuByIdFromCache.getThumbnail());
orderItem.setGoodsName(goodsSkuByIdFromCache.getGoodsName());
orderItem.setSkuId(goodsSkuByIdFromCache.getId());
orderItem.setCategoryId(goodsSkuByIdFromCache.getCategoryPath().substring(
goodsSkuByIdFromCache.getCategoryPath().lastIndexOf(",") + 1
));
orderItem.setGoodsPrice(goodsSkuByIdFromCache.getPrice());
orderItem.setPriceDetailDTO(priceDetailDTO);
orderItems.add(orderItem);
}
orderService.save(order);
orderItemService.saveBatch(orderItems);
orderLogService.saveBatch(orderLogs);
//发送订单已付款消息
OrderMessage orderMessage = new OrderMessage();
orderMessage.setOrderSn(order.getSn());
orderMessage.setPaymentMethod(order.getPaymentMethod());
orderMessage.setNewStatus(OrderStatusEnum.PAID);
String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.STATUS_CHANGE.name();
//发送订单变更mq消息
rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(orderMessage), RocketmqSendCallbackBuilder.commonCallback());
}
}

View File

@@ -45,6 +45,19 @@ public class OrderMessageListener implements RocketMQListener<MessageExt> {
@Override
public void onMessage(MessageExt messageExt) {
try {
this.orderStatusEvent(messageExt);
} catch (Exception e) {
log.error("订单状态变更事件调用异常", e);
}
}
/**
* 订单状态变更
* @param messageExt
*/
public void orderStatusEvent(MessageExt messageExt) {
switch (MqOrderTagsEnum.valueOf(messageExt.getTags())) {
//订单创建
case ORDER_CREATE:
@@ -86,5 +99,4 @@ public class OrderMessageListener implements RocketMQListener<MessageExt> {
break;
}
}
}