|
@@ -1,10 +1,14 @@
|
|
|
package com.qs.mp.framework.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.qs.mp.admin.domain.GoodsCard;
|
|
|
import com.qs.mp.admin.domain.Ticket;
|
|
|
import com.qs.mp.admin.domain.TicketBox;
|
|
|
import com.qs.mp.admin.domain.TicketPackage;
|
|
|
+import com.qs.mp.admin.service.IGoodsCardService;
|
|
|
import com.qs.mp.admin.service.ITicketBoxService;
|
|
|
import com.qs.mp.admin.service.ITicketPackageService;
|
|
|
import com.qs.mp.admin.service.ITicketService;
|
|
@@ -13,15 +17,25 @@ import com.qs.mp.channel.service.IChannelOrderService;
|
|
|
import com.qs.mp.channel.service.IChannelUserRelService;
|
|
|
import com.qs.mp.common.enums.*;
|
|
|
import com.qs.mp.common.exception.ServiceException;
|
|
|
+import com.qs.mp.common.utils.DateUtils;
|
|
|
import com.qs.mp.common.utils.LogUtil;
|
|
|
import com.qs.mp.framework.domain.AsyncTask;
|
|
|
import com.qs.mp.framework.mapper.AsyncTaskMapper;
|
|
|
import com.qs.mp.framework.service.IAsyncTaskService;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.qs.mp.user.domain.UserDeliverOrder;
|
|
|
+import com.qs.mp.user.domain.UserDeliverOrderItem;
|
|
|
+import com.qs.mp.user.domain.UserDeliverOrderItemCard;
|
|
|
import com.qs.mp.user.domain.UserTicketOrder;
|
|
|
import com.qs.mp.user.domain.UserTicketOrderItem;
|
|
|
+import com.qs.mp.user.service.IUserDeliverOrderItemCardService;
|
|
|
+import com.qs.mp.user.service.IUserDeliverOrderItemService;
|
|
|
+import com.qs.mp.user.service.IUserDeliverOrderService;
|
|
|
import com.qs.mp.user.service.IUserTicketOrderItemService;
|
|
|
import com.qs.mp.user.service.IUserTicketOrderService;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.stream.Collectors;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -68,6 +82,19 @@ public class AsyncTaskServiceImpl extends ServiceImpl<AsyncTaskMapper, AsyncTask
|
|
|
@Autowired
|
|
|
private IChannelUserRelService channelUserRelService;
|
|
|
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IUserDeliverOrderService userDeliverOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IUserDeliverOrderItemService userDeliverOrderItemService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IGoodsCardService goodsCardService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IUserDeliverOrderItemCardService userDeliverOrderItemCardService;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean insertAsyncTask(AsyncTaskTypeEnum taskType, String bizId) {
|
|
@@ -150,4 +177,76 @@ public class AsyncTaskServiceImpl extends ServiceImpl<AsyncTaskMapper, AsyncTask
|
|
|
}
|
|
|
ticketBoxService.generateTicket(boxId);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void cardOrderDeliver(AsyncTask asyncTask) {
|
|
|
+ String orderId = asyncTask.getBizId();
|
|
|
+ LogUtil.error(logger, "收到卡密订单自动发货任务。orderId=" + orderId);
|
|
|
+ UserDeliverOrder userDeliverOrder = userDeliverOrderService.getById(orderId);
|
|
|
+ // 如果是普通订单或者订单不为待发货则不处理
|
|
|
+ if (DeliverOrderTypeEnum.ORDINARY.getValue().equals(userDeliverOrder.getType())
|
|
|
+ || !DeliverOrderStatusEnum.NOT_DELIVER.equals(userDeliverOrder.getStatus())) {
|
|
|
+ LogUtil.error(logger, "收到卡密订单自动发货任务,订单类型不为卡密订单或者订单状态不为待发货,忽略任务。orderId=" + orderId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取订单详情
|
|
|
+ List<UserDeliverOrderItem> userDeliverOrderItemList = userDeliverOrderItemService.list(
|
|
|
+ new LambdaQueryWrapper<UserDeliverOrderItem>().eq(UserDeliverOrderItem::getOrderId, orderId));
|
|
|
+ if (CollectionUtils.isEmpty(userDeliverOrderItemList)) {
|
|
|
+ LogUtil.error(logger, "订单明细为空。orderId=" + orderId);
|
|
|
+ throw new ServiceException("订单明细为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分配卡密
|
|
|
+ List<UserDeliverOrderItemCard> userDeliverOrderItemCardList = new ArrayList<>();
|
|
|
+ for (UserDeliverOrderItem userDeliverOrderItem : userDeliverOrderItemList) {
|
|
|
+ List<GoodsCard> goodsCardList = goodsCardService.list(new QueryWrapper<GoodsCard>()
|
|
|
+ .eq("goods", userDeliverOrderItem.getGoodsId())
|
|
|
+ .eq("is_use", 0)
|
|
|
+ .orderByAsc("rand()")
|
|
|
+ .last("limit " + userDeliverOrderItem.getGoodsNum()));
|
|
|
+ if (CollectionUtils.isEmpty(goodsCardList) || goodsCardList.size() < userDeliverOrderItem.getGoodsNum()) {
|
|
|
+ LogUtil.error(logger,"卡密不足,无法发货。orderId:{0},itemId:{1},goodsId:{2}",userDeliverOrderItem.getOrderId(),
|
|
|
+ userDeliverOrderItem.getItemId(), userDeliverOrderItem.getGoodsId());
|
|
|
+ throw new ServiceException("卡密不足,无法发货。goodsId=" + userDeliverOrderItem.getGoodsId());
|
|
|
+ }
|
|
|
+
|
|
|
+ for (GoodsCard goodsCard : goodsCardList) {
|
|
|
+ boolean rtn = goodsCardService.update(new LambdaUpdateWrapper<GoodsCard>()
|
|
|
+ .set(GoodsCard::getIsUse, 1)
|
|
|
+ .eq(GoodsCard::getId, goodsCard)
|
|
|
+ .eq(GoodsCard::getIsUse, 0)
|
|
|
+ );
|
|
|
+ if (!rtn) {
|
|
|
+ LogUtil.error(logger, "卡密分配失败。orderId={0},itemId={1},goodsId={2}",userDeliverOrderItem.getOrderId(),
|
|
|
+ userDeliverOrderItem.getItemId(), userDeliverOrderItem.getGoodsId());
|
|
|
+ throw new ServiceException("卡密分配并发失败,稍后重试,goodsId=" + userDeliverOrderItem.getGoodsId());
|
|
|
+ }
|
|
|
+ UserDeliverOrderItemCard userDeliverOrderItemCard = new UserDeliverOrderItemCard();
|
|
|
+ userDeliverOrderItemCard.setItemId(userDeliverOrderItem.getItemId());
|
|
|
+ userDeliverOrderItemCard.setCardId(goodsCard.getId());
|
|
|
+ userDeliverOrderItemCardList.add(userDeliverOrderItemCard);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean rtn = userDeliverOrderItemCardService.saveBatch(userDeliverOrderItemCardList);
|
|
|
+ if (!rtn) {
|
|
|
+ throw new ServiceException("分配卡密保存失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新订单信息
|
|
|
+ boolean res = userDeliverOrderService.update(new LambdaUpdateWrapper<UserDeliverOrder>()
|
|
|
+ .set(UserDeliverOrder::getStatus, DeliverOrderStatusEnum.FINISHED)
|
|
|
+ .set(UserDeliverOrder::getDeliveryTime, new Date())
|
|
|
+ .set(UserDeliverOrder::getConfirmTime, new Date())
|
|
|
+ .eq(UserDeliverOrder::getOrderId, orderId)
|
|
|
+ .eq(UserDeliverOrder::getStatus, DeliverOrderStatusEnum.NOT_DELIVER)
|
|
|
+ );
|
|
|
+ if (!res) {
|
|
|
+ LogUtil.error(logger, "卡密商品发货更新订单信息失败,orderId: {0}", orderId);
|
|
|
+ throw new ServiceException("卡密商品发货更新订单信息失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|