|
@@ -4,12 +4,16 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
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.domain.param.ChannelOrderCancelParam;
|
|
|
import com.qs.mp.admin.service.ITicketBoxService;
|
|
|
import com.qs.mp.admin.service.ITicketPackageService;
|
|
|
+import com.qs.mp.pay.service.IPayOrderService;
|
|
|
+import com.qs.mp.pay.service.IWalletService;
|
|
|
import com.qs.mp.user.domain.UserAddr;
|
|
|
import com.qs.mp.channel.domain.ChannelOrder;
|
|
|
import com.qs.mp.channel.domain.ChannelOrderDetail;
|
|
@@ -32,6 +36,7 @@ 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.Objects;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
@@ -75,6 +80,12 @@ public class ChannelOrderServiceImpl extends
|
|
|
@Autowired
|
|
|
private IChannelOrderDetailService channelOrderDetailervice;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IWalletService walletService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPayOrderService payOrderService;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public String submitOrder(Long channelId, String memo, ChannelOrderSettleVO orderSettleVO) {
|
|
@@ -188,7 +199,55 @@ public class ChannelOrderServiceImpl extends
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean cancelOrder(ChannelOrderCancelParam param) {
|
|
|
+ ChannelOrder channelOrder = this.getById(param.getOrderId());
|
|
|
+ if (Objects.isNull(channelOrder)) {
|
|
|
+ throw new ServiceException("订单不存在");
|
|
|
+ }
|
|
|
+ if (!ChannelOrderStatusEnum.NOT_DELIVER.equals(channelOrder.getStatus())) {
|
|
|
+ throw new ServiceException("订单状态异常,不能取消");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新订单状态
|
|
|
+ ChannelOrder channelOrderParam = new ChannelOrder();
|
|
|
+ channelOrderParam.setOrderId(channelOrder.getOrderId());
|
|
|
+ channelOrderParam.setStatus(ChannelOrderStatusEnum.CANCELED);
|
|
|
+ this.updateById(channelOrderParam);
|
|
|
+
|
|
|
+ // 更新销量
|
|
|
+ List<ChannelOrderItem> list = channelOrderItemService.list(new LambdaQueryWrapper<ChannelOrderItem>().eq(ChannelOrderItem::getOrderId, param.getOrderId()));
|
|
|
+ if (CollectionUtils.isEmpty(list)) {
|
|
|
+ throw new ServiceException("订单商品不存在");
|
|
|
+ }
|
|
|
+ for (ChannelOrderItem channelOrderItem : list) {
|
|
|
+ TicketBox ticketBox = ticketBoxService.getById(channelOrderItem.getBoxId());
|
|
|
+ // 回滚销量
|
|
|
+ int salePkgQty = ticketBox.getSalePkgQty() - channelOrderItem.getOrderNum();
|
|
|
+ boolean flag = ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>()
|
|
|
+ .set(TicketBox::getSalePkgQty, salePkgQty)
|
|
|
+ .eq(TicketBox::getBoxId, ticketBox.getBoxId())
|
|
|
+ .eq(TicketBox::getSalePkgQty, ticketBox.getSalePkgQty()));
|
|
|
+ if (!flag) {
|
|
|
+ throw new ServiceException("操作繁忙,请稍后再试!");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取支付订单号
|
|
|
+ PayOrder payOrder = payOrderService.getOne(new LambdaQueryWrapper<PayOrder>().eq(PayOrder::getBizId, channelOrder.getOrderId()));
|
|
|
+ if (Objects.isNull(payOrder)) {
|
|
|
+ throw new ServiceException("支付订单不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 退款
|
|
|
+ walletService.refundByChannel(payOrder.getOrderId(), channelOrder.getPayAmt(),"经销商取消订单");
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public void paySuccess(PayOrder payOrder) {
|
|
|
ChannelOrder channelOrder = getById(payOrder.getBizId());
|
|
|
if (null == channelOrder || channelOrder.getStatus() != ChannelOrderStatusEnum.NOT_PAY) {
|