Explorar o código

Merge branch 'dev' into 'mp-server-test'

取消订单优化

See merge request quanshu/mp-server!443
zhong chunping %!s(int64=3) %!d(string=hai) anos
pai
achega
37cdbff924

+ 1 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/ChannelOrderMgrController.java

@@ -115,7 +115,7 @@ public class ChannelOrderMgrController extends BaseApiController {
   @PreAuthorize("@ss.hasPermi('order:channel:edit')")
   @ApiOperation("经销商订单取消")
   public AjaxResult cancelOrder(@Validated @RequestBody ChannelOrderCancelParam param) {
-	  return AjaxResult.success(channelOrderService.cancelOrder(param));
+	  return AjaxResult.success(channelOrderService.cancelOrderByAdmin(param));
   }
 
   /**

+ 2 - 2
mp-service/src/main/java/com/qs/mp/channel/service/IChannelOrderService.java

@@ -76,9 +76,9 @@ public interface IChannelOrderService extends IService<ChannelOrder> {
 	int selectChannelOrderCount(Wrapper<ChannelOrder> wrapper);
 
 	/**
-	 * 经销商取消订单
+	 * 后台经销商取消订单
 	 * @param param
 	 * @return
 	 */
-    boolean cancelOrder(ChannelOrderCancelParam param);
+    boolean cancelOrderByAdmin(ChannelOrderCancelParam param);
 }

+ 24 - 19
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelOrderServiceImpl.java

@@ -160,7 +160,7 @@ public class ChannelOrderServiceImpl extends
   }
 
   @Override
-  @Transactional
+  @Transactional(rollbackFor = Exception.class)
   public boolean cancelOrder(Long channelId, String orderId) {
     ChannelOrder channelOrder = channelOrderService.getOne(new LambdaQueryWrapper<ChannelOrder>()
         .eq(ChannelOrder::getChannelId, channelId).eq(ChannelOrder::getOrderId, orderId));
@@ -174,15 +174,8 @@ public class ChannelOrderServiceImpl extends
     for (ChannelOrderItem orderItem : orderItemList) {
       TicketBox ticketBox = ticketBoxService.getById(orderItem.getBoxId());
       // 恢复盲票组的已销售数和状态,乐观锁
-      boolean rst = ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>()
-          .set(
-              ticketBox.getStatus() == TicketBoxStatusEnum.PUT_OFF && ticketBox.getManualOff() != 1,
-              TicketBox::getStatus,
-              TicketBoxStatusEnum.PUT_ON)
-          .set(TicketBox::getSalePkgQty, ticketBox.getSalePkgQty() - orderItem.getOrderNum())
-          .eq(TicketBox::getSalePkgQty, ticketBox.getSalePkgQty())
-          .eq(TicketBox::getBoxId, ticketBox.getBoxId()));
-      if (!rst) {
+        boolean rst = rollbackTicketStatusAndSalePkgQty(orderItem, ticketBox);
+        if (!rst) {
         LogUtil.error(logger, "渠道采购票组订单取消时,更新盲票组销量失败。boxId:{0}, saleQty:{1}",
             ticketBox.getBoxId(), ticketBox.getSaleQty());
         throw new ServiceException("渠道采购票组订单取消时,更新盲票组销量失败");
@@ -202,7 +195,7 @@ public class ChannelOrderServiceImpl extends
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean cancelOrder(ChannelOrderCancelParam param) {
+    public boolean cancelOrderByAdmin(ChannelOrderCancelParam param) {
         ChannelOrder channelOrder = this.getById(param.getOrderId());
         if (Objects.isNull(channelOrder)) {
             throw new ServiceException("订单不存在");
@@ -224,16 +217,11 @@ public class ChannelOrderServiceImpl extends
         }
         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) {
+
+            boolean rst = this.rollbackTicketStatusAndSalePkgQty(channelOrderItem, ticketBox);
+            if (!rst) {
                 throw new ServiceException("操作繁忙,请稍后再试!");
             }
-
         }
 
         // 获取支付订单号
@@ -254,6 +242,23 @@ public class ChannelOrderServiceImpl extends
         return true;
     }
 
+    /**
+     * 回滚盲票组销量和状态
+     * @param orderItem
+     * @param ticketBox
+     * @return
+     */
+    private boolean rollbackTicketStatusAndSalePkgQty(ChannelOrderItem orderItem, TicketBox ticketBox) {
+        return ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>()
+                .set(
+                        ticketBox.getStatus() == TicketBoxStatusEnum.PUT_OFF && ticketBox.getManualOff() != 1,
+                        TicketBox::getStatus,
+                        TicketBoxStatusEnum.PUT_ON)
+                .set(TicketBox::getSalePkgQty, ticketBox.getSalePkgQty() - orderItem.getOrderNum())
+                .eq(TicketBox::getSalePkgQty, ticketBox.getSalePkgQty())
+                .eq(TicketBox::getBoxId, ticketBox.getBoxId()));
+    }
+
     @Override
   public void paySuccess(PayOrder payOrder) {
     ChannelOrder channelOrder = getById(payOrder.getBizId());