|
@@ -3,26 +3,35 @@ package com.qs.mp.channel.service.impl;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.qs.mp.admin.domain.TicketBox;
|
|
|
+import com.qs.mp.admin.domain.TicketPackage;
|
|
|
import com.qs.mp.admin.service.ITicketBoxService;
|
|
|
+import com.qs.mp.admin.service.ITicketPackageService;
|
|
|
import com.qs.mp.user.domain.UserAddr;
|
|
|
import com.qs.mp.channel.domain.ChannelOrder;
|
|
|
+import com.qs.mp.channel.domain.ChannelOrderDetail;
|
|
|
import com.qs.mp.channel.domain.ChannelOrderItem;
|
|
|
import com.qs.mp.channel.domain.vo.ChannelCartVO;
|
|
|
import com.qs.mp.channel.domain.vo.ChannelOrderSettleVO;
|
|
|
import com.qs.mp.channel.mapper.ChannelOrderMapper;
|
|
|
import com.qs.mp.channel.service.IChannelCartService;
|
|
|
+import com.qs.mp.channel.service.IChannelOrderDetailService;
|
|
|
import com.qs.mp.channel.service.IChannelOrderItemService;
|
|
|
import com.qs.mp.channel.service.IChannelOrderService;
|
|
|
+import com.qs.mp.common.core.domain.AjaxResult;
|
|
|
import com.qs.mp.common.enums.ChannelOrderStatusEnum;
|
|
|
import com.qs.mp.common.enums.TicketBoxStatusEnum;
|
|
|
+import com.qs.mp.common.enums.TicketPkgStatusEnum;
|
|
|
import com.qs.mp.common.exception.ServiceException;
|
|
|
import com.qs.mp.common.utils.LogUtil;
|
|
|
import com.qs.mp.pay.domain.PayOrder;
|
|
|
import com.qs.mp.system.service.id.BizIdGenerator;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -57,6 +66,12 @@ public class ChannelOrderServiceImpl extends
|
|
|
|
|
|
@Autowired
|
|
|
private IChannelCartService channelCartService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ITicketPackageService ticketPackageService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IChannelOrderDetailService channelOrderDetailervice;
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -190,4 +205,74 @@ public class ChannelOrderServiceImpl extends
|
|
|
throw new ServiceException("渠道采购票组订单支付成功时,更新订单状态失败");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public boolean channelOrderShip(String orderId, List<String> pkgIdList) {
|
|
|
+ ChannelOrder channelOrder = getById(orderId);
|
|
|
+ if(null == channelOrder || StringUtils.isBlank(channelOrder.getOrderId())) {
|
|
|
+ throw new ServiceException("发货订单异常,发货失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<TicketPackage> ticketPkgList = new ArrayList<TicketPackage>();
|
|
|
+ if(null != pkgIdList && pkgIdList.size() > 0) {
|
|
|
+ LambdaQueryWrapper<TicketPackage> queryWrapper = new LambdaQueryWrapper<TicketPackage>();
|
|
|
+ queryWrapper.eq(TicketPackage::getStatus, TicketPkgStatusEnum.FOR_SALE);
|
|
|
+ queryWrapper.in(TicketPackage::getPkgId, pkgIdList);
|
|
|
+ ticketPkgList = ticketPackageService.list(queryWrapper);
|
|
|
+ if(null == ticketPkgList || ticketPkgList.size() == 0
|
|
|
+ || ticketPkgList.size() != pkgIdList.size()) {
|
|
|
+ throw new ServiceException("发货票包状态异常,发货失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<ChannelOrderItem> orderItemList = channelOrderItemService.list(
|
|
|
+ new LambdaQueryWrapper<ChannelOrderItem>()
|
|
|
+ .eq(ChannelOrderItem::getOrderId, orderId));
|
|
|
+ // 验证发货的盲票包是否与订单中的盲票包数量一致
|
|
|
+ if(null == orderItemList || orderItemList.size() == 0 ) {
|
|
|
+ throw new ServiceException("订单明细查询异常, 发货失败");
|
|
|
+ }
|
|
|
+ List<ChannelOrderDetail> detailList = new ArrayList<ChannelOrderDetail>();
|
|
|
+ // 验证是否为本订单盲票
|
|
|
+ for(TicketPackage ticketPackage:ticketPkgList) {
|
|
|
+ if(null != ticketPackage && StringUtils.isNotBlank(ticketPackage.getBoxId())) {
|
|
|
+ long num = orderItemList.stream().filter(channelOrderItem -> channelOrderItem.getBoxId().equals(ticketPackage.getBoxId())).count();
|
|
|
+ if(num < 1) {
|
|
|
+ String msg = "票包"+ticketPackage.getStartSn()+"-" + ticketPackage.getEndSn() +"非本订单盲票";
|
|
|
+ throw new ServiceException(msg);
|
|
|
+ }
|
|
|
+ ChannelOrderDetail channelOrderDetail = new ChannelOrderDetail();
|
|
|
+ channelOrderDetail.setBoxId(ticketPackage.getBoxId());
|
|
|
+ channelOrderDetail.setPkgId(ticketPackage.getPkgId());
|
|
|
+ channelOrderDetail.setOrderId(orderId);
|
|
|
+ channelOrderDetail.setStartSn(ticketPackage.getStartSn());
|
|
|
+ channelOrderDetail.setEndSn(ticketPackage.getEndSn());
|
|
|
+ channelOrderDetail.setChannelId(channelOrder.getChannelId());
|
|
|
+ detailList.add(channelOrderDetail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 校验数量是否一致
|
|
|
+ for(ChannelOrderItem orderItem:orderItemList) {
|
|
|
+ if(null != orderItem && StringUtils.isNotBlank(orderItem.getBoxId()) ) {
|
|
|
+ long totalNum = ticketPkgList.stream().filter(TicketPackage -> TicketPackage.getBoxId().equals(orderItem.getBoxId())).count();
|
|
|
+ if(totalNum != orderItem.getOrderNum()) {
|
|
|
+ String msg = "票组"+orderItem.getTitle()+"盲票包" + (totalNum > orderItem.getOrderNum()?"少于":"已超出")+"订单购买的盲票包数量";
|
|
|
+ throw new ServiceException(msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean res = channelOrderDetailervice.saveBatch(detailList);
|
|
|
+ if(res) {
|
|
|
+ // 修改票包已销售状态
|
|
|
+ LambdaUpdateWrapper<TicketPackage> updateWrapper = new LambdaUpdateWrapper<TicketPackage>();
|
|
|
+ updateWrapper.set(TicketPackage::getStatus, TicketPkgStatusEnum.SOLD);
|
|
|
+ updateWrapper.in(TicketPackage::getPkgId, pkgIdList);
|
|
|
+ return ticketPackageService.update(updateWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|