Pārlūkot izejas kodu

代码格式化

cup 2 gadi atpakaļ
vecāks
revīzija
83bf34815b

+ 199 - 198
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketOrderController.java

@@ -36,6 +36,7 @@ import com.qs.mp.utils.SecurityUtils;
 import com.qs.mp.web.controller.common.BaseApiController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
 import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
@@ -61,224 +62,224 @@ import org.springframework.web.bind.annotation.RestController;
 public class UserTicketOrderController extends BaseApiController {
 
 
-  @Autowired
-  private ITicketBoxService ticketBoxService;
+    @Autowired
+    private ITicketBoxService ticketBoxService;
 
-  @Autowired
-  private IUserTicketOrderService userTicketOrderService;
+    @Autowired
+    private IUserTicketOrderService userTicketOrderService;
 
-  @Autowired
-  private ITicketService ticketService;
+    @Autowired
+    private ITicketService ticketService;
 
-  @Autowired
-  private IUserCouponService userCouponService;
+    @Autowired
+    private IUserCouponService userCouponService;
 
-  @Autowired
-  private IWalletService walletService;
+    @Autowired
+    private IWalletService walletService;
 
-  @Autowired
-  private ISysUserService sysUserService;
+    @Autowired
+    private ISysUserService sysUserService;
 
-  @Autowired
-  private MapperFacade mapperFacade;
+    @Autowired
+    private MapperFacade mapperFacade;
 
-  @Autowired
-  private RedisCache redisCache;
+    @Autowired
+    private RedisCache redisCache;
 
-  @Autowired
-  private PulsarClientService pulsarClientService;
+    @Autowired
+    private PulsarClientService pulsarClientService;
 
-  @Autowired
-  private ITicketPackageService ticketPackageService;
+    @Autowired
+    private ITicketPackageService ticketPackageService;
 
 
-  /**
-   * 订单结算,每次更换优惠券时需重新请求此接口
-   */
-  @PostMapping("/order/settle")
-  @ApiOperation(value = "订单结算" , notes = "单个盲票商品上点立即购买")
-  public AjaxResult settle(@Valid @RequestBody TicketOrderParam param) {
-    if (StringUtils.isBlank(param.getTicketId()) && StringUtils.isBlank(param.getBoxId())) {
-      return AjaxResult.error("参数缺失");
-    }
-    Long userId = SecurityUtils.getLoginUser().getUserId();
-
-    TicketOrderSettleVO orderSettleVO = new TicketOrderSettleVO();
-
-
-    // 订单金额计算
-    Integer orderAmt = 0;
-    Integer discountAmt = 0;
-    TicketBox ticketBox;
-    if (StringUtils.isNotBlank(param.getTicketId())) {
-      // 线下扫码购票
-      Ticket ticket = ticketService.getById(param.getTicketId());
-      ticketBox = ticketBoxService.getById(ticket.getBoxId());
-      orderAmt = ticketBox.getSalePrice();
-
-      // 预付票设置金额为0
-      TicketPackage ticketPackage =  ticketPackageService.getById(ticket.getPkgId());
-      if (ticketPackage.getIsPre() == 1) {
-        orderAmt = 0;
-      }
-    } else {
-      // 线上购票
-      ticketBox = ticketBoxService.getById(param.getBoxId());
-      orderAmt = ticketBox.getSalePrice() * param.getOrderNum();
-    }
+    /**
+     * 订单结算,每次更换优惠券时需重新请求此接口
+     */
+    @PostMapping("/order/settle")
+    @ApiOperation(value = "订单结算", notes = "单个盲票商品上点立即购买")
+    public AjaxResult settle(@Valid @RequestBody TicketOrderParam param) {
+        if (StringUtils.isBlank(param.getTicketId()) && StringUtils.isBlank(param.getBoxId())) {
+            return AjaxResult.error("参数缺失");
+        }
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+
+        TicketOrderSettleVO orderSettleVO = new TicketOrderSettleVO();
+
+
+        // 订单金额计算
+        Integer orderAmt = 0;
+        Integer discountAmt = 0;
+        TicketBox ticketBox;
+        if (StringUtils.isNotBlank(param.getTicketId())) {
+            // 线下扫码购票
+            Ticket ticket = ticketService.getById(param.getTicketId());
+            ticketBox = ticketBoxService.getById(ticket.getBoxId());
+            orderAmt = ticketBox.getSalePrice();
+
+            // 预付票设置金额为0
+            TicketPackage ticketPackage = ticketPackageService.getById(ticket.getPkgId());
+            if (ticketPackage.getIsPre() == 1) {
+                orderAmt = 0;
+            }
+        } else {
+            // 线上购票
+            ticketBox = ticketBoxService.getById(param.getBoxId());
+            orderAmt = ticketBox.getSalePrice() * param.getOrderNum();
+        }
 
-    if (param.getAutoCoupon() == 1) {
-      List<UserCouponVO> userCouponVOList = userCouponService.queryUserCouponList(userId, orderAmt, ticketBox);
-      if (!CollectionUtils.isEmpty(userCouponVOList)) {
-        // 只考虑使用单张券
-        orderSettleVO.getCouponList().add(mapperFacade.map(userCouponVOList.get(0), UserCoupon4OrderVO.class));
-        discountAmt = userCouponVOList.get(0).getDiscount();
-      }
-    } else if (!CollectionUtils.isEmpty(param.getUserCouponIds())){
-      // 查询指定券
-      List<UserCouponVO> userCouponVOList = userCouponService.listTicketOrderCouponByIds(param.getUserCouponIds());
-      if (!CollectionUtils.isEmpty(userCouponVOList)) {
-        // 只考虑使用单张券
-        orderSettleVO.getCouponList().add(mapperFacade.map(userCouponVOList.get(0), UserCoupon4OrderVO.class));
-        discountAmt = userCouponVOList.get(0).getDiscount();
-      }
-    }
+        if (param.getAutoCoupon() == 1) {
+            List<UserCouponVO> userCouponVOList = userCouponService.queryUserCouponList(userId, orderAmt, ticketBox);
+            if (!CollectionUtils.isEmpty(userCouponVOList)) {
+                // 只考虑使用单张券
+                orderSettleVO.getCouponList().add(mapperFacade.map(userCouponVOList.get(0), UserCoupon4OrderVO.class));
+                discountAmt = userCouponVOList.get(0).getDiscount();
+            }
+        } else if (!CollectionUtils.isEmpty(param.getUserCouponIds())) {
+            // 查询指定券
+            List<UserCouponVO> userCouponVOList = userCouponService.listTicketOrderCouponByIds(param.getUserCouponIds());
+            if (!CollectionUtils.isEmpty(userCouponVOList)) {
+                // 只考虑使用单张券
+                orderSettleVO.getCouponList().add(mapperFacade.map(userCouponVOList.get(0), UserCoupon4OrderVO.class));
+                discountAmt = userCouponVOList.get(0).getDiscount();
+            }
+        }
 
-    orderSettleVO.setOrderAmt(orderAmt);
-    orderSettleVO.setDiscountAmt(discountAmt);
-    // 当前没有运费和优惠,实付金额=订单金额
-    orderSettleVO.setPayAmt(orderAmt - discountAmt);
-    orderSettleVO.setOrderNum(param.getOrderNum());
-    orderSettleVO.setBoxId(ticketBox.getBoxId());
-    orderSettleVO.setTicketId(param.getTicketId());
-    orderSettleVO.setPicUrl(ticketBox.getPicUrl());
-    orderSettleVO.setTitle(ticketBox.getTitle());
-
-    // 缓存订单结算对象
-    redisCache.setCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId), orderSettleVO, 10, TimeUnit.MINUTES);
-    return AjaxResult.success(orderSettleVO);
-  }
-
-  /**
-   * 提交订单
-   */
-  @PostMapping("/order/submit")
-  @ApiOperation(value = "提交订单" , notes = "在订单确认页面提交")
-  public AjaxResult submit(@RequestBody UserShareVO userShareVO) {
-    Long userId = SecurityUtils.getLoginUser().getUserId();
-    TicketOrderSettleVO orderSettleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
-    if (null == orderSettleVO) {
-      return AjaxResult.error("订单已过期,请重新下单");
-    }
-    String orderId = userTicketOrderService.submitOrder(userId, orderSettleVO, userShareVO);
-    JSONObject jsonObject = new JSONObject();
-    jsonObject.put("orderId", orderId);
-    if (orderSettleVO.getPayAmt() > 0) {
-      jsonObject.put("needPay", 1);
-    } else {
-      jsonObject.put("needPay", 0);
-    }
-    // 清除缓存的订单
-    redisCache.deleteObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
-
-    return AjaxResult.success(jsonObject);
-  }
-
-
-  /**
-   * 取消订单
-   */
-  @PostMapping("/order/cancel")
-  @ApiOperation(value = "取消订单" , notes = "在订单列表页面取消")
-  public AjaxResult cancel(@RequestBody ChannelOrder order) {
-    userTicketOrderService.cancelOrder(order.getOrderId());
-    return AjaxResult.success("取消成功");
-  }
-
-  /**
-   * 订单支付
-   */
-  @PostMapping("/order/pay")
-  @ApiOperation(value = "订单支付" , notes = "在盲票页面支付")
-  public AjaxResult pay(@Valid @RequestBody OrderPayParam param) {
-    Long userId = SecurityUtils.getLoginUser().getUserId();
-    SysUser sysUser = sysUserService.selectUserById(userId);
-    if (StringUtils.isBlank(sysUser.getOpenId())) {
-      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1005);
+        orderSettleVO.setOrderAmt(orderAmt);
+        orderSettleVO.setDiscountAmt(discountAmt);
+        // 当前没有运费和优惠,实付金额=订单金额
+        orderSettleVO.setPayAmt(orderAmt - discountAmt);
+        orderSettleVO.setOrderNum(param.getOrderNum());
+        orderSettleVO.setBoxId(ticketBox.getBoxId());
+        orderSettleVO.setTicketId(param.getTicketId());
+        orderSettleVO.setPicUrl(ticketBox.getPicUrl());
+        orderSettleVO.setTitle(ticketBox.getTitle());
+
+        // 缓存订单结算对象
+        redisCache.setCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId), orderSettleVO, 10, TimeUnit.MINUTES);
+        return AjaxResult.success(orderSettleVO);
     }
-    UserTicketOrder ticketOrder = userTicketOrderService.getById(param.getOrderId());
-    JSONObject jsonObject;
-    try {
-      jsonObject = walletService.pay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), sysUser.getOpenId(), ticketOrder.getPayAmt(), ticketOrder.getTitle());
-    }catch (ServiceException e) {
-      LogUtil.error(logger, e, "根据盲票购买订单创建支付单失败。userId:{0},orderId:{1}", new Object[]{userId, param.getOrderId()});
-      return AjaxResult.error(e.getMessage());
+
+    /**
+     * 提交订单
+     */
+    @PostMapping("/order/submit")
+    @ApiOperation(value = "提交订单", notes = "在订单确认页面提交")
+    public AjaxResult submit(@RequestBody UserShareVO userShareVO) {
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+        TicketOrderSettleVO orderSettleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
+        if (null == orderSettleVO) {
+            return AjaxResult.error("订单已过期,请重新下单");
+        }
+        String orderId = userTicketOrderService.submitOrder(userId, orderSettleVO, userShareVO);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("orderId", orderId);
+        if (orderSettleVO.getPayAmt() > 0) {
+            jsonObject.put("needPay", 1);
+        } else {
+            jsonObject.put("needPay", 0);
+        }
+        // 清除缓存的订单
+        redisCache.deleteObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
+
+        return AjaxResult.success(jsonObject);
     }
-    return AjaxResult.success(jsonObject);
-  }
-
-  /**
-   * 可用优惠券列表
-   */
-  @PostMapping("/order/coupon/list")
-  @ApiOperation(value = "查询可用优惠券" , notes = "在下单页面选择")
-  @ApiResponses(
-          @ApiResponse(code = 200, message = "成功", response = UserCouponVO.class)
-  )
-  public AjaxResult listCoupon(@RequestBody TicketOrderParam param) {
-    Long userId = SecurityUtils.getUserId();
-    TicketOrderSettleVO orderSettleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
-    if (null == orderSettleVO) {
-      return AjaxResult.error("订单已过期,请重新下单");
+
+
+    /**
+     * 取消订单
+     */
+    @PostMapping("/order/cancel")
+    @ApiOperation(value = "取消订单", notes = "在订单列表页面取消")
+    public AjaxResult cancel(@RequestBody ChannelOrder order) {
+        userTicketOrderService.cancelOrder(order.getOrderId());
+        return AjaxResult.success("取消成功");
     }
-    TicketBox ticketBox = ticketBoxService.getById(orderSettleVO.getBoxId());
-    List<UserCouponVO> userCouponVOList = userCouponService.queryUserCouponList(userId, orderSettleVO.getOrderAmt(), ticketBox);
-
-    // 设置选中状态
-    for (UserCouponVO userCouponVO : userCouponVOList) {
-      if (!CollectionUtils.isEmpty(orderSettleVO.getCouponList())) {
-        for (UserCoupon4OrderVO userCoupon4OrderVO : orderSettleVO.getCouponList()) {
-          if (userCoupon4OrderVO.getId().equals(userCouponVO.getId())) {
-            userCouponVO.setChecked(true);
-            break;
-          }
+
+    /**
+     * 订单支付
+     */
+    @PostMapping("/order/pay")
+    @ApiOperation(value = "订单支付", notes = "在盲票页面支付")
+    public AjaxResult pay(@Valid @RequestBody OrderPayParam param) {
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+        SysUser sysUser = sysUserService.selectUserById(userId);
+        if (StringUtils.isBlank(sysUser.getOpenId())) {
+            return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1005);
+        }
+        UserTicketOrder ticketOrder = userTicketOrderService.getById(param.getOrderId());
+        JSONObject jsonObject;
+        try {
+            jsonObject = walletService.pay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), sysUser.getOpenId(), ticketOrder.getPayAmt(), ticketOrder.getTitle());
+        } catch (ServiceException e) {
+            LogUtil.error(logger, e, "根据盲票购买订单创建支付单失败。userId:{0},orderId:{1}", new Object[]{userId, param.getOrderId()});
+            return AjaxResult.error(e.getMessage());
         }
-      }
+        return AjaxResult.success(jsonObject);
     }
-    return AjaxResult.success(userCouponVOList);
-  }
-
-
-  @PostMapping("/order/coupon/listPage")
-  @ApiOperation(value = "查询可用优惠券,分页" , notes = "在下单页面选择")
-  @ApiResponses(
-          @ApiResponse(code = 200, message = "成功", response = UserCouponVO.class)
-  )
-  public TableDataInfo listPageCoupon(@RequestBody TicketOrderParam param) {
-    Long userId = SecurityUtils.getUserId();
-    TicketOrderSettleVO orderSettleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
-    if (null == orderSettleVO) {
-      return getErrorDataTable("订单已过期,请重新下单");
+
+    /**
+     * 可用优惠券列表
+     */
+    @PostMapping("/order/coupon/list")
+    @ApiOperation(value = "查询可用优惠券", notes = "在下单页面选择")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "成功", response = UserCouponVO.class)
+    )
+    public AjaxResult listCoupon(@RequestBody TicketOrderParam param) {
+        Long userId = SecurityUtils.getUserId();
+        TicketOrderSettleVO orderSettleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
+        if (null == orderSettleVO) {
+            return AjaxResult.error("订单已过期,请重新下单");
+        }
+        TicketBox ticketBox = ticketBoxService.getById(orderSettleVO.getBoxId());
+        List<UserCouponVO> userCouponVOList = userCouponService.queryUserCouponList(userId, orderSettleVO.getOrderAmt(), ticketBox);
+
+        // 设置选中状态
+        for (UserCouponVO userCouponVO : userCouponVOList) {
+            if (!CollectionUtils.isEmpty(orderSettleVO.getCouponList())) {
+                for (UserCoupon4OrderVO userCoupon4OrderVO : orderSettleVO.getCouponList()) {
+                    if (userCoupon4OrderVO.getId().equals(userCouponVO.getId())) {
+                        userCouponVO.setChecked(true);
+                        break;
+                    }
+                }
+            }
+        }
+        return AjaxResult.success(userCouponVOList);
     }
-    TicketBox ticketBox = ticketBoxService.getById(orderSettleVO.getBoxId());
-    startPage();
-    List<UserCouponVO> userCouponVOList = userCouponService.queryUserCouponList(userId, orderSettleVO.getOrderAmt(), ticketBox);
-
-    // 设置选中状态
-    for (UserCouponVO userCouponVO : userCouponVOList) {
-      if (!CollectionUtils.isEmpty(orderSettleVO.getCouponList())) {
-        for (UserCoupon4OrderVO userCoupon4OrderVO : orderSettleVO.getCouponList()) {
-          if (userCoupon4OrderVO.getId().equals(userCouponVO.getId())) {
-            userCouponVO.setChecked(true);
-            break;
-          }
+
+
+    @PostMapping("/order/coupon/listPage")
+    @ApiOperation(value = "查询可用优惠券,分页", notes = "在下单页面选择")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "成功", response = UserCouponVO.class)
+    )
+    public TableDataInfo listPageCoupon(@RequestBody TicketOrderParam param) {
+        Long userId = SecurityUtils.getUserId();
+        TicketOrderSettleVO orderSettleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
+        if (null == orderSettleVO) {
+            return getErrorDataTable("订单已过期,请重新下单");
+        }
+        TicketBox ticketBox = ticketBoxService.getById(orderSettleVO.getBoxId());
+        startPage();
+        List<UserCouponVO> userCouponVOList = userCouponService.queryUserCouponList(userId, orderSettleVO.getOrderAmt(), ticketBox);
+
+        // 设置选中状态
+        for (UserCouponVO userCouponVO : userCouponVOList) {
+            if (!CollectionUtils.isEmpty(orderSettleVO.getCouponList())) {
+                for (UserCoupon4OrderVO userCoupon4OrderVO : orderSettleVO.getCouponList()) {
+                    if (userCoupon4OrderVO.getId().equals(userCouponVO.getId())) {
+                        userCouponVO.setChecked(true);
+                        break;
+                    }
+                }
+            }
         }
-      }
+        List<UserCouponVO> countUserCouponVOList = userCouponService.queryUserCouponList(userId, orderSettleVO.getOrderAmt(), ticketBox);
+        TableDataInfo dataTable = getDataTable(userCouponVOList);
+        dataTable.setTotal(countUserCouponVOList.size());
+        return dataTable;
     }
-    List<UserCouponVO> countUserCouponVOList = userCouponService.queryUserCouponList(userId, orderSettleVO.getOrderAmt(), ticketBox);
-    TableDataInfo dataTable = getDataTable(userCouponVOList);
-    dataTable.setTotal(countUserCouponVOList.size());
-    return dataTable;
-  }
 
 }

+ 499 - 497
mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderServiceImpl.java

@@ -42,6 +42,7 @@ import com.qs.mp.user.mapper.UserTicketOrderMapper;
 import com.qs.mp.user.service.IUserCouponService;
 import com.qs.mp.user.service.IUserTicketOrderItemService;
 import com.qs.mp.user.service.IUserTicketOrderService;
+
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.Arrays;
@@ -49,6 +50,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.aop.framework.AopContext;
@@ -68,555 +70,555 @@ import org.springframework.util.Assert;
  */
 @Service
 public class UserTicketOrderServiceImpl extends
-    ServiceImpl<UserTicketOrderMapper, UserTicketOrder> implements IUserTicketOrderService {
+        ServiceImpl<UserTicketOrderMapper, UserTicketOrder> implements IUserTicketOrderService {
 
-  protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 
-  @Autowired
-  private ITicketBoxService ticketBoxService;
+    @Autowired
+    private ITicketBoxService ticketBoxService;
 
-  @Autowired
-  private IUserCouponService userCouponService;
+    @Autowired
+    private IUserCouponService userCouponService;
 
-  @Autowired
-  private IChannelUserRelService channelUserRelService;
+    @Autowired
+    private IChannelUserRelService channelUserRelService;
 
-  @Autowired
-  private IChannelOrderDetailService channelOrderDetailService;
+    @Autowired
+    private IChannelOrderDetailService channelOrderDetailService;
 
-  @Autowired
-  private IUserTicketOrderItemService userTicketOrderItemService;
+    @Autowired
+    private IUserTicketOrderItemService userTicketOrderItemService;
 
-  @Autowired
-  private ITicketService ticketService;
+    @Autowired
+    private ITicketService ticketService;
 
-  @Autowired
-  private IChannelService channelService;
+    @Autowired
+    private IChannelService channelService;
 
-  @Autowired
-  private IChannelCommissionService channelCommissionService;
+    @Autowired
+    private IChannelCommissionService channelCommissionService;
 
-  @Autowired
-  private IChannelMoneyLogService channelMoneyLogService;
+    @Autowired
+    private IChannelMoneyLogService channelMoneyLogService;
 
-  @Autowired
-  private ITicketPackageService ticketPackageService;
+    @Autowired
+    private ITicketPackageService ticketPackageService;
 
-  @Autowired
-  private IChannelOrderService channelOrderService;
+    @Autowired
+    private IChannelOrderService channelOrderService;
 
-  @Autowired
-  private IChannelOrderItemService channelOrderItemService;
+    @Autowired
+    private IChannelOrderItemService channelOrderItemService;
 
-  @Autowired
-  private BizIdGenerator bizIdGenerator;
+    @Autowired
+    private BizIdGenerator bizIdGenerator;
 
-  @Autowired
-  private RedisCache redisCache;
+    @Autowired
+    private RedisCache redisCache;
 
-  @Autowired
-  private IAsyncTaskService asyncTaskService;
+    @Autowired
+    private IAsyncTaskService asyncTaskService;
 
-  @Autowired
-  private DistributedLocker distributedLocker;
+    @Autowired
+    private DistributedLocker distributedLocker;
+
+    @Override
+    public String submitOrder(Long userId, TicketOrderSettleVO orderSettleVO,
+                              UserShareVO userShareVO) {
+        UserTicketOrderServiceImpl proxy = (UserTicketOrderServiceImpl) AopContext.currentProxy();
+        if (StringUtils.isBlank(orderSettleVO.getTicketId())) {
+            String lockKey = RedisLockKey.build(RedisLockKey.CREATED_ONLINE_TICKET_ORDER_KEY, orderSettleVO.getBoxId());
+            if (!distributedLocker.tryLock(lockKey)) {
+                throw new ServiceException("该票太火爆了,请稍后再试!");
+            }
+            try {
+                return proxy.createOnlineOrder(userId, orderSettleVO, userShareVO);
+            } finally {
+                distributedLocker.unlock(lockKey);
+            }
+        }
 
-  @Override
-  public String submitOrder(Long userId, TicketOrderSettleVO orderSettleVO,
-      UserShareVO userShareVO) {
-    UserTicketOrderServiceImpl proxy = (UserTicketOrderServiceImpl) AopContext.currentProxy();
-    if (StringUtils.isBlank(orderSettleVO.getTicketId())) {
-      String lockKey = RedisLockKey.build(RedisLockKey.CREATED_ONLINE_TICKET_ORDER_KEY, orderSettleVO.getBoxId());
-      if (!distributedLocker.tryLock(lockKey)) {
-        throw new ServiceException("该票太火爆了,请稍后再试!");
-      }
-      try {
-        return proxy.createOnlineOrder(userId, orderSettleVO, userShareVO);
-      } finally {
-        distributedLocker.unlock(lockKey);
-      }
+        // 线下票不需锁库存,待付款成功后再更新票组销量
+        return proxy.createOfflineOrder(userId, orderSettleVO);
     }
 
-    // 线下票不需锁库存,待付款成功后再更新票组销量
-    return proxy.createOfflineOrder(userId, orderSettleVO);
-  }
-
-  @Transactional(rollbackFor = Exception.class)
-  public String createOnlineOrder(Long userId, TicketOrderSettleVO orderSettleVO,
-      UserShareVO userShareVO) {
-    // 线上票更新票组销量,防止超卖
-    TicketBox ticketBox = ticketBoxService.getById(orderSettleVO.getBoxId());
-    if (ticketBox.getStatus() == TicketBoxStatusEnum.PUT_OFF
-        || ticketBox.getSaleQty() + orderSettleVO.getOrderNum() > ticketBox.getQuantity()) {
-      LogUtil.error(logger, "库存不足,boxId:{0},qty:{1},saleQty:{2},orderNum:{3}",
-          ticketBox.getBoxId(), ticketBox.getQuantity(), ticketBox.getSaleQty(),
-          orderSettleVO.getOrderNum());
-      throw new ServiceException(ErrorCodeEnum.ERROR_CODE_1020);
+    @Transactional(rollbackFor = Exception.class)
+    public String createOnlineOrder(Long userId, TicketOrderSettleVO orderSettleVO,
+                                    UserShareVO userShareVO) {
+        // 线上票更新票组销量,防止超卖
+        TicketBox ticketBox = ticketBoxService.getById(orderSettleVO.getBoxId());
+        if (ticketBox.getStatus() == TicketBoxStatusEnum.PUT_OFF
+                || ticketBox.getSaleQty() + orderSettleVO.getOrderNum() > ticketBox.getQuantity()) {
+            LogUtil.error(logger, "库存不足,boxId:{0},qty:{1},saleQty:{2},orderNum:{3}",
+                    ticketBox.getBoxId(), ticketBox.getQuantity(), ticketBox.getSaleQty(),
+                    orderSettleVO.getOrderNum());
+            throw new ServiceException(ErrorCodeEnum.ERROR_CODE_1020);
+        }
+        boolean rst = ticketBoxService.update(
+                new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getSaleQty,
+                                ticketBox.getSaleQty() + orderSettleVO.getOrderNum())
+                        .set(ticketBox.getSaleQty() + orderSettleVO.getOrderNum() == ticketBox.getQuantity(),
+                                TicketBox::getStatus, TicketBoxStatusEnum.PUT_OFF)
+                        .eq(TicketBox::getBoxId, ticketBox.getBoxId())
+                        .eq(TicketBox::getSaleQty, ticketBox.getSaleQty()));
+        Assert.isTrue(rst,
+                "盲票购买订单创建时,更新盲票销量失败。boxId:" + ticketBox.getBoxId() + "saleQty:" + ticketBox.getSaleQty());
+
+        // 核销优惠券
+        String couponIds = verifyUserCoupon(orderSettleVO.getCouponList());
+
+        // 创建订单
+        UserTicketOrder userTicketOrder = new UserTicketOrder();
+        userTicketOrder.setOrderId(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
+        userTicketOrder.setUserId(userId);
+        userTicketOrder.setTitle(ticketBox.getTitle());
+        userTicketOrder.setBoxId(orderSettleVO.getBoxId());
+        userTicketOrder.setSalePrice(ticketBox.getSalePrice());
+        userTicketOrder.setSaleCommRate(ticketBox.getSaleCommRate());
+        userTicketOrder.setOrderAmt(orderSettleVO.getOrderAmt());
+        userTicketOrder.setDiscountAmt(orderSettleVO.getDiscountAmt());
+        userTicketOrder.setPayAmt(orderSettleVO.getPayAmt());
+        userTicketOrder.setTicketNum(orderSettleVO.getOrderNum());
+        userTicketOrder.setMemo("");
+        userTicketOrder.setResource(TicketTypeEnum.ONLINE);
+        userTicketOrder.setCouponInfo(couponIds);
+        userTicketOrder.setStatus(UserTicketOrderStatusEnum.NOT_PAY);
+        if (orderSettleVO.getPayAmt() == 0) {
+            userTicketOrder.setCommStatus(CommStatusEnum.YES); // 无需结佣,直接置为已结佣
+        }
+
+        // 查询用户的所属经销商,线上票直接查询
+        ChannelUserRel channelUserRel = channelUserRelService.getOne(
+                new LambdaQueryWrapper<ChannelUserRel>()
+                        .eq(ChannelUserRel::getUserId, userId));
+        if (null != channelUserRel) {
+            userTicketOrder.setChannelId(channelUserRel.getChannelId());
+        } else {
+            // 没被绑定,看有没有分享者
+            if (null != userShareVO.getSuid() && 0 != userShareVO.getSuid()) {
+                if (UserShareVO.SHARE_TYPE_USER.equals(userShareVO.getType())) {
+                    ChannelUserRel channelShareUserRel = channelUserRelService.getOne(
+                            new LambdaQueryWrapper<ChannelUserRel>()
+                                    .eq(ChannelUserRel::getUserId, userShareVO.getSuid()));
+                    if (null != channelShareUserRel) {
+                        userTicketOrder.setChannelId(channelShareUserRel.getChannelId());
+                        userTicketOrder.setShareInfo(JSONObject.toJSONString(userShareVO));
+                    }
+                } else if (UserShareVO.SHARE_TYPE_SITE.equals(userShareVO.getType())) {
+                    Channel channel = channelService.getOne(
+                            new LambdaQueryWrapper<Channel>()
+                                    .eq(Channel::getUserId, userShareVO.getSuid()));
+                    if (null != channel) {
+                        userTicketOrder.setChannelId(channel.getChannelId());
+                        userTicketOrder.setShareInfo(JSONObject.toJSONString(userShareVO));
+                    }
+                }
+            }
+        }
+        save(userTicketOrder);
+
+        for (int i = 0; i < orderSettleVO.getOrderNum(); i++) {
+            UserTicketOrderItem orderItem = new UserTicketOrderItem();
+            orderItem.setItemId(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
+            orderItem.setOrderId(userTicketOrder.getOrderId());
+            orderItem.setUserId(userId);
+            orderItem.setBoxId(ticketBox.getBoxId());
+            orderItem.setTicketId(null); // 付款成功后再分配具体盲票
+            // 保存名称和图片快照
+            orderItem.setTitle(ticketBox.getTitle());
+            orderItem.setPicUrl(ticketBox.getPicUrl());
+            userTicketOrderItemService.save(orderItem);
+        }
+
+        if (orderSettleVO.getPayAmt() == 0) {
+            // 无需支付的,直接置为成功
+            processTicketOrder(userTicketOrder);
+            // 插入付款异步任务
+            Assert.isTrue(asyncTaskService.insertAsyncTask(AsyncTaskTypeEnum.TICKET_PAY, userTicketOrder.getOrderId()), "盲票支付,创建异步任务失败:" + userTicketOrder.getOrderId());
+        }
+
+        return userTicketOrder.getOrderId();
     }
-    boolean rst = ticketBoxService.update(
-        new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getSaleQty,
-                ticketBox.getSaleQty() + orderSettleVO.getOrderNum())
-            .set(ticketBox.getSaleQty() + orderSettleVO.getOrderNum() == ticketBox.getQuantity(),
-                TicketBox::getStatus, TicketBoxStatusEnum.PUT_OFF)
-            .eq(TicketBox::getBoxId, ticketBox.getBoxId())
-            .eq(TicketBox::getSaleQty, ticketBox.getSaleQty()));
-    Assert.isTrue(rst,
-        "盲票购买订单创建时,更新盲票销量失败。boxId:" + ticketBox.getBoxId() + "saleQty:" + ticketBox.getSaleQty());
-
-    // 核销优惠券
-    String couponIds = verifyUserCoupon(orderSettleVO.getCouponList());
-
-    // 创建订单
-    UserTicketOrder userTicketOrder = new UserTicketOrder();
-    userTicketOrder.setOrderId(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
-    userTicketOrder.setUserId(userId);
-    userTicketOrder.setTitle(ticketBox.getTitle());
-    userTicketOrder.setBoxId(orderSettleVO.getBoxId());
-    userTicketOrder.setSalePrice(ticketBox.getSalePrice());
-    userTicketOrder.setSaleCommRate(ticketBox.getSaleCommRate());
-    userTicketOrder.setOrderAmt(orderSettleVO.getOrderAmt());
-    userTicketOrder.setDiscountAmt(orderSettleVO.getDiscountAmt());
-    userTicketOrder.setPayAmt(orderSettleVO.getPayAmt());
-    userTicketOrder.setTicketNum(orderSettleVO.getOrderNum());
-    userTicketOrder.setMemo("");
-    userTicketOrder.setResource(TicketTypeEnum.ONLINE);
-    userTicketOrder.setCouponInfo(couponIds);
-    userTicketOrder.setStatus(UserTicketOrderStatusEnum.NOT_PAY);
-    if (orderSettleVO.getPayAmt() == 0) {
-      userTicketOrder.setCommStatus(CommStatusEnum.YES); // 无需结佣,直接置为已结佣
+
+    @Transactional(rollbackFor = Exception.class)
+    public String createOfflineOrder(Long userId, TicketOrderSettleVO orderSettleVO) {
+        Ticket ticket = ticketService.getById(orderSettleVO.getTicketId());
+        Assert.isTrue(ticket.getStatus() == TicketStatusEnum.NOT_PAY,
+                "盲票已付款,ticketId:" + ticket.getTicketId());
+        if (null != redisCache.getCacheObject(
+                RedisKey.build(RedisKey.OFFLINE_TICKET_ID_KEY, ticket.getTicketId()))) {
+            LogUtil.warn(logger, "线下盲票重复购买,ticketNo:{0}", ticket.getSerialNo());
+            throw new ServiceException("重复购买,请稍后再试");
+        }
+        redisCache.setCacheObject(RedisKey.build(RedisKey.OFFLINE_TICKET_ID_KEY, ticket.getTicketId()),
+                userId, 5, TimeUnit.MINUTES);
+
+        // 核销优惠券
+        String couponIds = verifyUserCoupon(orderSettleVO.getCouponList());
+
+        TicketBox ticketBox = ticketBoxService.getById(ticket.getBoxId());
+
+        UserTicketOrder ticketOrder = new UserTicketOrder();
+        ticketOrder.setOrderId(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
+        ticketOrder.setUserId(userId);
+        ticketOrder.setTitle(ticketBox.getTitle());
+        ticketOrder.setBoxId(ticket.getBoxId());
+        ticketOrder.setSalePrice(ticketBox.getSalePrice());
+        ticketOrder.setSaleCommRate(ticketBox.getSaleCommRate());
+        ticketOrder.setOrderAmt(orderSettleVO.getOrderAmt());
+        ticketOrder.setDiscountAmt(orderSettleVO.getDiscountAmt());
+        ticketOrder.setPayAmt(orderSettleVO.getPayAmt());
+        ticketOrder.setTicketNum(1);
+        ticketOrder.setMemo("");
+        ticketOrder.setResource(TicketTypeEnum.OFFLINE);
+        ticketOrder.setCouponInfo(couponIds);
+        ticketOrder.setStatus(UserTicketOrderStatusEnum.NOT_PAY);
+        if (orderSettleVO.getPayAmt() == 0) {
+            ticketOrder.setCommStatus(CommStatusEnum.YES); // 无需结佣,直接置为已结佣
+        }
+        // 查询用户的所属经销商,线下票根据票包查询
+        ChannelOrderDetail channelOrderDetail = channelOrderDetailService.getOne(
+                new LambdaQueryWrapper<ChannelOrderDetail>()
+                        .eq(ChannelOrderDetail::getPkgId, ticket.getPkgId()));
+        if (null == channelOrderDetail) {
+            LogUtil.error(logger, "线下票,根据票包ID查询购买渠道为空。ticketId:{0}, pkgId{1}",
+                    ticket.getTicketId(), ticket.getPkgId());
+        } else {
+            ticketOrder.setChannelId(channelOrderDetail.getChannelId());
+        }
+        save(ticketOrder);
+
+        UserTicketOrderItem orderItem = new UserTicketOrderItem();
+        orderItem.setItemId(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
+        orderItem.setOrderId(ticketOrder.getOrderId());
+        orderItem.setUserId(userId);
+        orderItem.setBoxId(ticket.getBoxId());
+        orderItem.setTicketId(ticket.getTicketId());
+        // 保存名称和图片快照
+        orderItem.setTitle(orderSettleVO.getTitle());
+        orderItem.setPicUrl(orderSettleVO.getPicUrl());
+        userTicketOrderItemService.save(orderItem);
+
+        if (orderSettleVO.getPayAmt() == 0) {
+            // 无需支付的,直接置为成功
+            processTicketOrder(ticketOrder);
+
+            // 插入付款异步任务
+            Assert.isTrue(asyncTaskService.insertAsyncTask(AsyncTaskTypeEnum.TICKET_PAY, ticketOrder.getOrderId()), "盲票支付,创建异步任务失败:" + ticketOrder.getOrderId());
+
+        }
+        return ticketOrder.getOrderId();
+    }
+
+    private String verifyUserCoupon(List<UserCoupon4OrderVO> userCouponVOList) {
+        StringBuilder sb = new StringBuilder();
+        for (UserCoupon4OrderVO userCouponVO : userCouponVOList) {
+            UserCoupon userCoupon = userCouponService.getById(userCouponVO.getId());
+            userCoupon.setVerifyTime(new Date());
+            userCoupon.setStatus(UserCouponStatusEnum.USED);
+            boolean rst = userCouponService.updateById(userCoupon);
+            Assert.isTrue(rst, "盲票购买订单创建时,核销优惠券失败。userCoupon:" + JSONObject.toJSONString(userCoupon));
+            sb.append(userCouponVO.getId()).append(",");
+        }
+        if (sb.length() > 0) {
+            return sb.substring(0, sb.length() - 1);
+        }
+        return sb.toString();
+    }
+
+    @Override
+    @Transactional
+    public boolean batchCancelOrder(String boxId, List<String> orderIds) {
+        int sumTicket = 0;
+        for (String orderId : orderIds) {
+            UserTicketOrder userTicketOrder = getById(orderId);
+            Assert.isTrue(userTicketOrder.getResource() == TicketTypeEnum.ONLINE,
+                    "非在线盲票不用取消。boxId:" + boxId);
+            if (!rollbackOrder(userTicketOrder)) {
+                return false;
+            }
+            sumTicket += userTicketOrder.getTicketNum();
+        }
+        rollbackBoxQty(boxId, sumTicket);
+        return true;
+    }
+
+    private void rollbackBoxQty(String boxId, int qty) {
+        TicketBox ticketBox = ticketBoxService.getById(boxId);
+        boolean updateBox = ticketBoxService.update(
+                new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getSaleQty,
+                                ticketBox.getSaleQty() - qty)
+                        .set(
+                                ticketBox.getStatus() == TicketBoxStatusEnum.PUT_OFF
+                                        && ticketBox.getManualOff() != 1,
+                                TicketBox::getStatus, TicketBoxStatusEnum.PUT_ON)
+                        .eq(TicketBox::getBoxId, ticketBox.getBoxId())
+                        .eq(TicketBox::getSaleQty, ticketBox.getSaleQty()));
+        Assert.isTrue(updateBox, "取消过期未支付盲票购买订单,恢复票组销量失败。boxId:{0}" + boxId);
     }
 
-    // 查询用户的所属经销商,线上票直接查询
-    ChannelUserRel channelUserRel = channelUserRelService.getOne(
-        new LambdaQueryWrapper<ChannelUserRel>()
-            .eq(ChannelUserRel::getUserId, userId));
-    if (null != channelUserRel) {
-      userTicketOrder.setChannelId(channelUserRel.getChannelId());
-    } else {
-      // 没被绑定,看有没有分享者
-      if (null != userShareVO.getSuid() && 0 != userShareVO.getSuid()) {
-        if (UserShareVO.SHARE_TYPE_USER.equals(userShareVO.getType())) {
-          ChannelUserRel channelShareUserRel = channelUserRelService.getOne(
-              new LambdaQueryWrapper<ChannelUserRel>()
-                  .eq(ChannelUserRel::getUserId, userShareVO.getSuid()));
-          if (null != channelShareUserRel) {
-            userTicketOrder.setChannelId(channelShareUserRel.getChannelId());
-            userTicketOrder.setShareInfo(JSONObject.toJSONString(userShareVO));
-          }
-        } else if (UserShareVO.SHARE_TYPE_SITE.equals(userShareVO.getType())) {
-          Channel channel = channelService.getOne(
-              new LambdaQueryWrapper<Channel>()
-                  .eq(Channel::getUserId, userShareVO.getSuid()));
-          if (null != channel) {
-            userTicketOrder.setChannelId(channel.getChannelId());
-            userTicketOrder.setShareInfo(JSONObject.toJSONString(userShareVO));
-          }
+    @Override
+    @Transactional
+    public boolean cancelOrder(String orderId) {
+        UserTicketOrder userTicketOrder = getById(orderId);
+
+        if (!rollbackOrder(userTicketOrder)) {
+            return false;
+        }
+
+        if (userTicketOrder.getResource() == TicketTypeEnum.ONLINE) {
+            rollbackBoxQty(userTicketOrder.getBoxId(), userTicketOrder.getTicketNum());
         }
-      }
+
+        return true;
     }
-    save(userTicketOrder);
-
-    for (int i = 0; i < orderSettleVO.getOrderNum(); i++) {
-      UserTicketOrderItem orderItem = new UserTicketOrderItem();
-      orderItem.setItemId(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
-      orderItem.setOrderId(userTicketOrder.getOrderId());
-      orderItem.setUserId(userId);
-      orderItem.setBoxId(ticketBox.getBoxId());
-      orderItem.setTicketId(null); // 付款成功后再分配具体盲票
-      // 保存名称和图片快照
-      orderItem.setTitle(ticketBox.getTitle());
-      orderItem.setPicUrl(ticketBox.getPicUrl());
-      userTicketOrderItemService.save(orderItem);
+
+    private boolean rollbackOrder(UserTicketOrder userTicketOrder) {
+        if (userTicketOrder.getStatus() != UserTicketOrderStatusEnum.NOT_PAY) {
+            LogUtil.warn(logger, "取消购票订单时,订单状态不是待支付,忽略。orderId:{0}, status:{1}",
+                    userTicketOrder.getOrderId(), userTicketOrder.getStatus());
+            return false;
+        }
+
+        if (StringUtils.isNotBlank(userTicketOrder.getCouponInfo())) {
+            // 优惠券反核销
+            List<String> userCouponIds = Arrays.asList(userTicketOrder.getCouponInfo().split(","));
+            boolean rst = userCouponService.update(new LambdaUpdateWrapper<UserCoupon>()
+                    .set(UserCoupon::getStatus, UserCouponStatusEnum.UNUSED)
+                    .set(UserCoupon::getVerifyTime, null)
+                    .in(UserCoupon::getId, userCouponIds));
+            Assert.isTrue(rst,
+                    "盲票购买订单取消时,反核销优惠券失败。orderId:" + userTicketOrder.getOrderId() + "userCouponIds:"
+                            + userTicketOrder.getCouponInfo());
+        }
+
+        boolean rst = update(new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getStatus,
+                        UserTicketOrderStatusEnum.CANCELED)
+                .eq(UserTicketOrder::getOrderId, userTicketOrder.getOrderId())
+                .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.NOT_PAY));
+        Assert.isTrue(rst, "盲票购买订单取消时,更新订单状态失败。orderId:" + userTicketOrder.getOrderId());
+        return true;
     }
 
-    if (orderSettleVO.getPayAmt() == 0) {
-      // 无需支付的,直接置为成功
-      processTicketOrder(userTicketOrder);
-      // 插入付款异步任务
-      Assert.isTrue(asyncTaskService.insertAsyncTask(AsyncTaskTypeEnum.TICKET_PAY, userTicketOrder.getOrderId()),"盲票支付,创建异步任务失败:" + userTicketOrder.getOrderId());
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean paySuccess(PayOrder payOrder) {
+        UserTicketOrder ticketOrder = getById(payOrder.getBizId());
+        if (null == ticketOrder || ticketOrder.getStatus() != UserTicketOrderStatusEnum.NOT_PAY) {
+            LogUtil.error(logger, "支付回调用户购票订单处理,订单状态异常,不是待支付。payOrder:{0}, ticketOrder:{1}",
+                    JSONObject.toJSONString(payOrder), JSONObject.toJSONString(ticketOrder));
+            throw new ServiceException("支付回调用户购票订单处理,订单状态异常,不是待支付。orderId:" + payOrder.getBizId());
+        }
+        ticketOrder.setPayTime(DateUtils.parseDate(payOrder.getCompleteDate()));
+
+        // 插入异步任务
+        Assert.isTrue(asyncTaskService.insertAsyncTask(AsyncTaskTypeEnum.TICKET_PAY, payOrder.getBizId()), "创建支付成功异步任务失败. orderId:" + payOrder.getOrderId());
+        return processTicketOrder(ticketOrder);
     }
 
-    return userTicketOrder.getOrderId();
-  }
-
-  @Transactional(rollbackFor = Exception.class)
-  public String createOfflineOrder(Long userId, TicketOrderSettleVO orderSettleVO) {
-    Ticket ticket = ticketService.getById(orderSettleVO.getTicketId());
-    Assert.isTrue(ticket.getStatus() == TicketStatusEnum.NOT_PAY,
-        "盲票已付款,ticketId:" + ticket.getTicketId());
-    if (null != redisCache.getCacheObject(
-        RedisKey.build(RedisKey.OFFLINE_TICKET_ID_KEY, ticket.getTicketId()))) {
-      LogUtil.warn(logger, "线下盲票重复购买,ticketNo:{0}", ticket.getSerialNo());
-      throw new ServiceException("重复购买,请稍后再试");
+    private boolean processTicketOrder(UserTicketOrder ticketOrder) {
+        List<UserTicketOrderItem> orderItemList = userTicketOrderItemService.list(
+                new LambdaQueryWrapper<UserTicketOrderItem>()
+                        .eq(UserTicketOrderItem::getOrderId, ticketOrder.getOrderId()));
+
+        for (UserTicketOrderItem orderItem : orderItemList) {
+            Ticket ticket;
+            if (ticketOrder.getResource() == TicketTypeEnum.ONLINE) {
+                // 线上票,要先分配票ticketId
+                ticket = ticketService.getRandOne(ticketOrder.getBoxId());
+                orderItem.setTicketId(ticket.getTicketId());
+                boolean rst = userTicketOrderItemService.updateById(orderItem);
+                Assert.isTrue(rst, "支付回调用户购票订单处理,更新订单明细的盲票ID失败,itemId:" + orderItem.getItemId());
+            } else {
+                ticket = ticketService.getById(orderItem.getTicketId());
+            }
+
+            // 开幸运数字,更新ticket状态为已激活
+            boolean rtn = ticketService.update(
+                    new LambdaUpdateWrapper<Ticket>().set(Ticket::getPlainLuckyNum,
+                                    Integer.valueOf(RSAUtil.decrypt(ticket.getCipherLuckyNum())))
+                            .set(Ticket::getStatus, TicketStatusEnum.ACTIVATED)
+                            .eq(Ticket::getTicketId, ticket.getTicketId()));
+            Assert.isTrue(rtn, "支付回调用户购票订单处理,更新盲票状态失败,ticketId:" + ticket.getTicketId());
+
+        }
+
+        // 更新订单状态为已完成
+        boolean updateRst = update(
+                new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getStatus,
+                                UserTicketOrderStatusEnum.FINISHED)
+                        .set(UserTicketOrder::getPayTime, ticketOrder.getPayTime())
+                        .eq(UserTicketOrder::getOrderId, ticketOrder.getOrderId())
+                        .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.NOT_PAY));
+        Assert.isTrue(updateRst, "支付回调用户购票订单处理,更新订单状态失败,orderId:" + ticketOrder.getOrderId());
+
+        return true;
     }
-    redisCache.setCacheObject(RedisKey.build(RedisKey.OFFLINE_TICKET_ID_KEY, ticket.getTicketId()),
-        userId, 5, TimeUnit.MINUTES);
-
-    // 核销优惠券
-    String couponIds = verifyUserCoupon(orderSettleVO.getCouponList());
-
-    TicketBox ticketBox = ticketBoxService.getById(ticket.getBoxId());
-
-    UserTicketOrder ticketOrder = new UserTicketOrder();
-    ticketOrder.setOrderId(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
-    ticketOrder.setUserId(userId);
-    ticketOrder.setTitle(ticketBox.getTitle());
-    ticketOrder.setBoxId(ticket.getBoxId());
-    ticketOrder.setSalePrice(ticketBox.getSalePrice());
-    ticketOrder.setSaleCommRate(ticketBox.getSaleCommRate());
-    ticketOrder.setOrderAmt(orderSettleVO.getOrderAmt());
-    ticketOrder.setDiscountAmt(orderSettleVO.getDiscountAmt());
-    ticketOrder.setPayAmt(orderSettleVO.getPayAmt());
-    ticketOrder.setTicketNum(1);
-    ticketOrder.setMemo("");
-    ticketOrder.setResource(TicketTypeEnum.OFFLINE);
-    ticketOrder.setCouponInfo(couponIds);
-    ticketOrder.setStatus(UserTicketOrderStatusEnum.NOT_PAY);
-    if (orderSettleVO.getPayAmt() == 0) {
-      ticketOrder.setCommStatus(CommStatusEnum.YES); // 无需结佣,直接置为已结佣
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean commToChannel(String orderId, Integer resource) {
+        ChannelCommParam channelCommParam = new ChannelCommParam();
+        if (ChannelCommissionResourceEnum.USER.getValue().equals(resource)) {
+            UserTicketOrder ticketOrder = getById(orderId);
+            BeanUtils.copyProperties(ticketOrder, channelCommParam);
+            Assert.isTrue(channelCommParam.getCommStatus() != CommStatusEnum.YES,
+                    "结佣处理,结佣状态异常,不是结佣中或未结佣。orderId=" + orderId);
+        } else {
+            ChannelOrder channelOrder = channelOrderService.getById(orderId);
+            ChannelOrderItem channelOrderItem = channelOrderItemService.getOne(new LambdaQueryWrapper<ChannelOrderItem>()
+                    .eq(ChannelOrderItem::getOrderId, orderId));
+            channelCommParam.setBoxId(channelOrderItem.getBoxId());
+            channelCommParam.setChannelId(channelOrder.getChannelId());
+            channelCommParam.setOrderId(channelOrder.getOrderId());
+            channelCommParam.setPayAmt(channelOrder.getPayAmt());
+        }
+        if (channelCommParam.getPayAmt() == 0) {
+            return true;
+        }
+        if (null != channelCommParam.getChannelId()) {
+            // 线下购票,优先给当前票的经销商渠道分润
+            TicketBox ticketBox = ticketBoxService.getById(channelCommParam.getBoxId());
+            Channel channel = channelService.getById(channelCommParam.getChannelId());
+            ChannelCommission siteCommission = saveSiteCommAmt(channelCommParam, ticketBox, channel);
+            // 经销商账户余额增加
+            changeMoney(channel, siteCommission);
+
+            int sumCommAmt = siteCommission.getCommAmt();
+            // 渠道分润
+            while (channel.getParentId() > 0) {
+                channel = channelService.getById(channel.getParentId());
+                ChannelCommission channelCommission = new ChannelCommission();
+                channelCommission.setChannelId(channel.getChannelId());
+                channelCommission.setOrderId(siteCommission.getOrderId());
+                channelCommission.setResource(resource);
+                channelCommission.setBoxId(siteCommission.getBoxId());
+                channelCommission.setSaleAmt(siteCommission.getSaleAmt());
+                channelCommission.setSaleCommRate(siteCommission.getSaleCommRate());
+                channelCommission.setSaleCommAmt(siteCommission.getSaleCommAmt());
+                channelCommission.setCommRate(channel.getCommRate());
+                channelCommission.setCommAmt(new BigDecimal(channelCommission.getSaleCommAmt()).multiply(
+                                channelCommission.getCommRate()).divide(new BigDecimal(100), 0, RoundingMode.DOWN)
+                        .intValue() - sumCommAmt);
+                channelCommissionService.save(channelCommission);
+                sumCommAmt += channelCommission.getCommAmt();
+            }
+        } else {
+            LogUtil.info(logger, "渠道结佣时,订单对应的渠道不存在,无需结佣。orderId:{0}",
+                    channelCommParam.getOrderId());
+        }
+        if (ChannelCommissionResourceEnum.USER.getValue().equals(resource)) {
+            boolean rst = update(
+                    new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getCommStatus,
+                                    CommStatusEnum.YES)
+                            .eq(UserTicketOrder::getOrderId, orderId)
+                            .in(UserTicketOrder::getCommStatus, CommStatusEnum.DOING, CommStatusEnum.NO));
+            Assert.isTrue(rst, "渠道结佣完成,更新订单状态失败。orderId:" + orderId);
+        }
+        return true;
     }
-    // 查询用户的所属经销商,线下票根据票包查询
-    ChannelOrderDetail channelOrderDetail = channelOrderDetailService.getOne(
-        new LambdaQueryWrapper<ChannelOrderDetail>()
-            .eq(ChannelOrderDetail::getPkgId, ticket.getPkgId()));
-    if (null == channelOrderDetail) {
-      LogUtil.error(logger, "线下票,根据票包ID查询购买渠道为空。ticketId:{0}, pkgId{1}",
-          ticket.getTicketId(), ticket.getPkgId());
-    } else {
-      ticketOrder.setChannelId(channelOrderDetail.getChannelId());
+
+    private void changeMoney(Channel channel, ChannelCommission siteCommission) {
+        ChannelMoneyLog moneyLog = new ChannelMoneyLog();
+        moneyLog.setChannelId(channel.getChannelId());
+        moneyLog.setType(ChannelMoneyEnum.COMMISSION);
+        moneyLog.setLogMoney(siteCommission.getCommAmt());
+        moneyLog.setBizTime(new Date());
+        moneyLog.setRefId(String.valueOf(siteCommission.getId()));
+        channelMoneyLogService.changeMoney(moneyLog);
     }
-    save(ticketOrder);
-
-    UserTicketOrderItem orderItem = new UserTicketOrderItem();
-    orderItem.setItemId(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
-    orderItem.setOrderId(ticketOrder.getOrderId());
-    orderItem.setUserId(userId);
-    orderItem.setBoxId(ticket.getBoxId());
-    orderItem.setTicketId(ticket.getTicketId());
-    // 保存名称和图片快照
-    orderItem.setTitle(orderSettleVO.getTitle());
-    orderItem.setPicUrl(orderSettleVO.getPicUrl());
-    userTicketOrderItemService.save(orderItem);
-
-    if (orderSettleVO.getPayAmt() == 0) {
-      // 无需支付的,直接置为成功
-      processTicketOrder(ticketOrder);
-
-      // 插入付款异步任务
-      Assert.isTrue(asyncTaskService.insertAsyncTask(AsyncTaskTypeEnum.TICKET_PAY, ticketOrder.getOrderId()),"盲票支付,创建异步任务失败:" + ticketOrder.getOrderId());
 
+    private ChannelCommission saveSiteCommAmt(ChannelCommParam channelCommParam, TicketBox ticketBox,
+                                              Channel channel) {
+        ChannelCommission siteCommission = new ChannelCommission();
+        siteCommission.setChannelId(channel.getChannelId());
+        siteCommission.setOrderId(channelCommParam.getOrderId());
+        siteCommission.setBoxId(channelCommParam.getBoxId());
+        siteCommission.setSaleAmt(channelCommParam.getPayAmt());
+        siteCommission.setSaleCommRate(ticketBox.getSaleCommRate());
+        siteCommission.setSaleCommAmt(new BigDecimal(siteCommission.getSaleAmt()).multiply(
+                        siteCommission.getSaleCommRate()).divide(new BigDecimal(100), 0, RoundingMode.DOWN)
+                .intValue());
+        siteCommission.setCommRate(channel.getCommRate());
+        siteCommission.setCommAmt(new BigDecimal(siteCommission.getSaleCommAmt()).multiply(
+                siteCommission.getCommRate()).divide(new BigDecimal(100), 0, RoundingMode.DOWN).intValue());
+        channelCommissionService.save(siteCommission);
+        return siteCommission;
     }
-    return ticketOrder.getOrderId();
-  }
-
-  private String verifyUserCoupon(List<UserCoupon4OrderVO> userCouponVOList) {
-    StringBuilder sb = new StringBuilder();
-    for (UserCoupon4OrderVO userCouponVO : userCouponVOList) {
-      UserCoupon userCoupon = userCouponService.getById(userCouponVO.getId());
-      userCoupon.setVerifyTime(new Date());
-      userCoupon.setStatus(UserCouponStatusEnum.USED);
-      boolean rst = userCouponService.updateById(userCoupon);
-      Assert.isTrue(rst, "盲票购买订单创建时,核销优惠券失败。userCoupon:" + JSONObject.toJSONString(userCoupon));
-      sb.append(userCouponVO.getId()).append(",");
+
+    @Override
+    public List<IndexVO> selectIndexPayAmtList(Wrapper<UserTicketOrder> wrapper) {
+        return getBaseMapper().selectIndexPayAmtList(wrapper);
     }
-    if (sb.length() > 0) {
-      return sb.substring(0, sb.length() - 1);
+
+    @Override
+    public List<IndexVO> selectIndexPayUserCntList(Wrapper<UserTicketOrder> wrapper) {
+        return getBaseMapper().selectIndexPayUserCntList(wrapper);
     }
-    return sb.toString();
-  }
-
-  @Override
-  @Transactional
-  public boolean batchCancelOrder(String boxId, List<String> orderIds) {
-    int sumTicket = 0;
-    for (String orderId : orderIds) {
-      UserTicketOrder userTicketOrder = getById(orderId);
-      Assert.isTrue(userTicketOrder.getResource() == TicketTypeEnum.ONLINE,
-          "非在线盲票不用取消。boxId:" + boxId);
-      if (!rollbackOrder(userTicketOrder)) {
-        return false;
-      }
-      sumTicket += userTicketOrder.getTicketNum();
+
+    @Override
+    public List<IndexVO> selectIndexDailyInfoList(Wrapper<UserTicketOrder> wrapper) {
+        return getBaseMapper().selectIndexDailyInfoList(wrapper);
     }
-    rollbackBoxQty(boxId, sumTicket);
-    return true;
-  }
-
-  private void rollbackBoxQty(String boxId, int qty) {
-    TicketBox ticketBox = ticketBoxService.getById(boxId);
-    boolean updateBox = ticketBoxService.update(
-        new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getSaleQty,
-                ticketBox.getSaleQty() - qty)
-            .set(
-                ticketBox.getStatus() == TicketBoxStatusEnum.PUT_OFF
-                    && ticketBox.getManualOff() != 1,
-                TicketBox::getStatus, TicketBoxStatusEnum.PUT_ON)
-            .eq(TicketBox::getBoxId, ticketBox.getBoxId())
-            .eq(TicketBox::getSaleQty, ticketBox.getSaleQty()));
-    Assert.isTrue(updateBox, "取消过期未支付盲票购买订单,恢复票组销量失败。boxId:{0}" + boxId);
-  }
-
-  @Override
-  @Transactional
-  public boolean cancelOrder(String orderId) {
-    UserTicketOrder userTicketOrder = getById(orderId);
-
-    if (!rollbackOrder(userTicketOrder)) {
-      return false;
+
+    @Override
+    public List<IndexVO> selectIndexTicketBoxTop(Wrapper<UserTicketOrder> wrapper) {
+        return getBaseMapper().selectIndexTicketBoxTop(wrapper);
     }
 
-    if (userTicketOrder.getResource() == TicketTypeEnum.ONLINE) {
-      rollbackBoxQty(userTicketOrder.getBoxId(), userTicketOrder.getTicketNum());
+    @Override
+    public List<IndexVO> selectIndexTicketSiteTop(Wrapper<UserTicketOrder> wrapper) {
+        return getBaseMapper().selectIndexTicketSiteTop(wrapper);
     }
 
-    return true;
-  }
+    @Override
+    public int getChannelTotalTicketNumCnt(String channelNo) {
+        return getBaseMapper().getChannelTotalTicketNumCnt(channelNo);
+    }
 
-  private boolean rollbackOrder(UserTicketOrder userTicketOrder) {
-    if (userTicketOrder.getStatus() != UserTicketOrderStatusEnum.NOT_PAY) {
-      LogUtil.warn(logger, "取消购票订单时,订单状态不是待支付,忽略。orderId:{0}, status:{1}",
-          userTicketOrder.getOrderId(), userTicketOrder.getStatus());
-      return false;
+    @Override
+    public int getSaleSiteTotalTicketNumCnt(Long channelId) {
+        return getBaseMapper().getSaleSiteTotalTicketNumCnt(channelId);
     }
 
-    if (StringUtils.isNotBlank(userTicketOrder.getCouponInfo())) {
-      // 优惠券反核销
-      List<String> userCouponIds = Arrays.asList(userTicketOrder.getCouponInfo().split(","));
-      boolean rst = userCouponService.update(new LambdaUpdateWrapper<UserCoupon>()
-          .set(UserCoupon::getStatus, UserCouponStatusEnum.UNUSED)
-          .set(UserCoupon::getVerifyTime, null)
-          .in(UserCoupon::getId, userCouponIds));
-      Assert.isTrue(rst,
-          "盲票购买订单取消时,反核销优惠券失败。orderId:" + userTicketOrder.getOrderId() + "userCouponIds:"
-              + userTicketOrder.getCouponInfo());
+    @Override
+    public TicketCntVO getTicketSaleCnt(Long channelId) {
+        return getBaseMapper().getTicketSaleCnt(channelId);
     }
 
-    boolean rst = update(new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getStatus,
-            UserTicketOrderStatusEnum.CANCELED)
-        .eq(UserTicketOrder::getOrderId, userTicketOrder.getOrderId())
-        .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.NOT_PAY));
-    Assert.isTrue(rst, "盲票购买订单取消时,更新订单状态失败。orderId:" + userTicketOrder.getOrderId());
-    return true;
-  }
-
-  @Override
-  @Transactional(rollbackFor = Exception.class)
-  public boolean paySuccess(PayOrder payOrder) {
-    UserTicketOrder ticketOrder = getById(payOrder.getBizId());
-    if (null == ticketOrder || ticketOrder.getStatus() != UserTicketOrderStatusEnum.NOT_PAY) {
-      LogUtil.error(logger, "支付回调用户购票订单处理,订单状态异常,不是待支付。payOrder:{0}, ticketOrder:{1}",
-          JSONObject.toJSONString(payOrder), JSONObject.toJSONString(ticketOrder));
-      throw new ServiceException("支付回调用户购票订单处理,订单状态异常,不是待支付。orderId:" + payOrder.getBizId());
+    @Override
+    public List<TicketCntVO> listTicketSaleCnt(Wrapper<UserTicketOrder> queryWrapper) {
+        return getBaseMapper().listTicketSaleCnt(queryWrapper);
     }
-    ticketOrder.setPayTime(DateUtils.parseDate(payOrder.getCompleteDate()));
-
-    // 插入异步任务
-    Assert.isTrue(asyncTaskService.insertAsyncTask(AsyncTaskTypeEnum.TICKET_PAY, payOrder.getBizId()), "创建支付成功异步任务失败. orderId:" + payOrder.getOrderId());
-    return processTicketOrder(ticketOrder);
-  }
-
-  private boolean processTicketOrder(UserTicketOrder ticketOrder) {
-    List<UserTicketOrderItem> orderItemList = userTicketOrderItemService.list(
-        new LambdaQueryWrapper<UserTicketOrderItem>()
-            .eq(UserTicketOrderItem::getOrderId, ticketOrder.getOrderId()));
-
-    for (UserTicketOrderItem orderItem : orderItemList) {
-      Ticket ticket;
-      if (ticketOrder.getResource() == TicketTypeEnum.ONLINE) {
-        // 线上票,要先分配票ticketId
-        ticket = ticketService.getRandOne(ticketOrder.getBoxId());
-        orderItem.setTicketId(ticket.getTicketId());
-        boolean rst = userTicketOrderItemService.updateById(orderItem);
-        Assert.isTrue(rst, "支付回调用户购票订单处理,更新订单明细的盲票ID失败,itemId:" + orderItem.getItemId());
-      } else {
-        ticket = ticketService.getById(orderItem.getTicketId());
-      }
-
-      // 开幸运数字,更新ticket状态为已激活
-      boolean rtn = ticketService.update(
-          new LambdaUpdateWrapper<Ticket>().set(Ticket::getPlainLuckyNum,
-                  Integer.valueOf(RSAUtil.decrypt(ticket.getCipherLuckyNum())))
-              .set(Ticket::getStatus, TicketStatusEnum.ACTIVATED)
-              .eq(Ticket::getTicketId, ticket.getTicketId()));
-      Assert.isTrue(rtn, "支付回调用户购票订单处理,更新盲票状态失败,ticketId:" + ticket.getTicketId());
 
+    @Override
+    public List<UserTicketOrderListVO> listUserTicketOrder(QueryWrapper<UserTicketOrder> queryWrapper) {
+        return getBaseMapper().listUserTicketOrder(queryWrapper);
     }
 
-    // 更新订单状态为已完成
-    boolean updateRst = update(
-        new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getStatus,
-                UserTicketOrderStatusEnum.FINISHED)
-            .set(UserTicketOrder::getPayTime, ticketOrder.getPayTime())
-            .eq(UserTicketOrder::getOrderId, ticketOrder.getOrderId())
-            .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.NOT_PAY));
-    Assert.isTrue(updateRst, "支付回调用户购票订单处理,更新订单状态失败,orderId:" + ticketOrder.getOrderId());
-
-    return true;
-  }
-
-  @Override
-  @Transactional(rollbackFor = Exception.class)
-  public boolean commToChannel(String orderId, Integer resource) {
-    ChannelCommParam channelCommParam = new ChannelCommParam();
-    if (ChannelCommissionResourceEnum.USER.getValue().equals(resource)) {
-      UserTicketOrder ticketOrder = getById(orderId);
-      BeanUtils.copyProperties(ticketOrder, channelCommParam);
-      Assert.isTrue(channelCommParam.getCommStatus() != CommStatusEnum.YES,
-              "结佣处理,结佣状态异常,不是结佣中或未结佣。orderId=" + orderId);
-    } else {
-      ChannelOrder channelOrder = channelOrderService.getById(orderId);
-      ChannelOrderItem channelOrderItem = channelOrderItemService.getOne(new LambdaQueryWrapper<ChannelOrderItem>()
-              .eq(ChannelOrderItem::getOrderId, orderId));
-      channelCommParam.setBoxId(channelOrderItem.getBoxId());
-      channelCommParam.setChannelId(channelOrder.getChannelId());
-      channelCommParam.setOrderId(channelOrder.getOrderId());
-      channelCommParam.setPayAmt(channelOrder.getPayAmt());
+    @Override
+    public int countUserTicketOrder(QueryWrapper<UserTicketOrder> queryWrapper) {
+        return getBaseMapper().countUserTicketOrder(queryWrapper);
     }
-    if (channelCommParam.getPayAmt() == 0) {
-      return true;
+
+    @Override
+    public List<IndexVO> selectIndexTicketBoxTopByTicketOrderAndChannelOrder(IndexTicketBoxTopQueryParam indexTicketBoxTopQueryParam) {
+        return getBaseMapper().selectIndexTicketBoxTopByTicketOrderAndChannelOrder(indexTicketBoxTopQueryParam);
     }
-    if (null != channelCommParam.getChannelId()) {
-      // 线下购票,优先给当前票的经销商渠道分润
-      TicketBox ticketBox = ticketBoxService.getById(channelCommParam.getBoxId());
-      Channel channel = channelService.getById(channelCommParam.getChannelId());
-      ChannelCommission siteCommission = saveSiteCommAmt(channelCommParam, ticketBox, channel);
-      // 经销商账户余额增加
-      changeMoney(channel, siteCommission);
-
-      int sumCommAmt = siteCommission.getCommAmt();
-      // 渠道分润
-      while (channel.getParentId() > 0) {
-        channel = channelService.getById(channel.getParentId());
-        ChannelCommission channelCommission = new ChannelCommission();
-        channelCommission.setChannelId(channel.getChannelId());
-        channelCommission.setOrderId(siteCommission.getOrderId());
-        channelCommission.setResource(resource);
-        channelCommission.setBoxId(siteCommission.getBoxId());
-        channelCommission.setSaleAmt(siteCommission.getSaleAmt());
-        channelCommission.setSaleCommRate(siteCommission.getSaleCommRate());
-        channelCommission.setSaleCommAmt(siteCommission.getSaleCommAmt());
-        channelCommission.setCommRate(channel.getCommRate());
-        channelCommission.setCommAmt(new BigDecimal(channelCommission.getSaleCommAmt()).multiply(
-                channelCommission.getCommRate()).divide(new BigDecimal(100), 0, RoundingMode.DOWN)
-            .intValue() - sumCommAmt);
-        channelCommissionService.save(channelCommission);
-        sumCommAmt += channelCommission.getCommAmt();
-      }
-    } else {
-      LogUtil.info(logger, "渠道结佣时,订单对应的渠道不存在,无需结佣。orderId:{0}",
-          channelCommParam.getOrderId());
+
+    @Override
+    public List<IndexVO> selectIndexTicketSiteTopByTicketOrderAndChannelOrder(IndexTicketSiteTopQueryParam indexTicketSiteTopQueryParam) {
+        return getBaseMapper().selectIndexTicketSiteTopByTicketOrderAndChannelOrder(indexTicketSiteTopQueryParam);
     }
-    if (ChannelCommissionResourceEnum.USER.getValue().equals(resource)) {
-      boolean rst = update(
-              new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getCommStatus,
-                              CommStatusEnum.YES)
-                      .eq(UserTicketOrder::getOrderId, orderId)
-                      .in(UserTicketOrder::getCommStatus, CommStatusEnum.DOING, CommStatusEnum.NO));
-      Assert.isTrue(rst, "渠道结佣完成,更新订单状态失败。orderId:" + orderId);
+
+    @Override
+    public UserTicketOrderDetailVO detail(String orderId) {
+        QueryWrapper<UserTicketOrder> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("t1.order_id", orderId);
+        UserTicketOrderDetailVO userTicketOrderDetailVO = getBaseMapper().selectUserTicketOrderDetail(queryWrapper);
+
+        List<UserTicketOrderTicketDetailVO> list = userTicketOrderItemService.listTicketDetailByOrderId(orderId);
+        userTicketOrderDetailVO.setTicketDetailList(list);
+        return userTicketOrderDetailVO;
     }
-    return true;
-  }
-
-  private void changeMoney(Channel channel, ChannelCommission siteCommission) {
-    ChannelMoneyLog moneyLog = new ChannelMoneyLog();
-    moneyLog.setChannelId(channel.getChannelId());
-    moneyLog.setType(ChannelMoneyEnum.COMMISSION);
-    moneyLog.setLogMoney(siteCommission.getCommAmt());
-    moneyLog.setBizTime(new Date());
-    moneyLog.setRefId(String.valueOf(siteCommission.getId()));
-    channelMoneyLogService.changeMoney(moneyLog);
-  }
-
-  private ChannelCommission saveSiteCommAmt(ChannelCommParam channelCommParam, TicketBox ticketBox,
-      Channel channel) {
-    ChannelCommission siteCommission = new ChannelCommission();
-    siteCommission.setChannelId(channel.getChannelId());
-    siteCommission.setOrderId(channelCommParam.getOrderId());
-    siteCommission.setBoxId(channelCommParam.getBoxId());
-    siteCommission.setSaleAmt(channelCommParam.getPayAmt());
-    siteCommission.setSaleCommRate(ticketBox.getSaleCommRate());
-    siteCommission.setSaleCommAmt(new BigDecimal(siteCommission.getSaleAmt()).multiply(
-            siteCommission.getSaleCommRate()).divide(new BigDecimal(100), 0, RoundingMode.DOWN)
-        .intValue());
-    siteCommission.setCommRate(channel.getCommRate());
-    siteCommission.setCommAmt(new BigDecimal(siteCommission.getSaleCommAmt()).multiply(
-        siteCommission.getCommRate()).divide(new BigDecimal(100), 0, RoundingMode.DOWN).intValue());
-    channelCommissionService.save(siteCommission);
-    return siteCommission;
-  }
-
-  @Override
-  public List<IndexVO> selectIndexPayAmtList(Wrapper<UserTicketOrder> wrapper) {
-    return getBaseMapper().selectIndexPayAmtList(wrapper);
-  }
-
-  @Override
-  public List<IndexVO> selectIndexPayUserCntList(Wrapper<UserTicketOrder> wrapper) {
-    return getBaseMapper().selectIndexPayUserCntList(wrapper);
-  }
-
-  @Override
-  public List<IndexVO> selectIndexDailyInfoList(Wrapper<UserTicketOrder> wrapper) {
-    return getBaseMapper().selectIndexDailyInfoList(wrapper);
-  }
-
-  @Override
-  public List<IndexVO> selectIndexTicketBoxTop(Wrapper<UserTicketOrder> wrapper) {
-    return getBaseMapper().selectIndexTicketBoxTop(wrapper);
-  }
-
-  @Override
-  public List<IndexVO> selectIndexTicketSiteTop(Wrapper<UserTicketOrder> wrapper) {
-    return getBaseMapper().selectIndexTicketSiteTop(wrapper);
-  }
-
-  @Override
-  public int getChannelTotalTicketNumCnt(String channelNo) {
-    return getBaseMapper().getChannelTotalTicketNumCnt(channelNo);
-  }
-
-  @Override
-  public int getSaleSiteTotalTicketNumCnt(Long channelId) {
-    return getBaseMapper().getSaleSiteTotalTicketNumCnt(channelId);
-  }
-
-  @Override
-  public TicketCntVO getTicketSaleCnt(Long channelId) {
-    return getBaseMapper().getTicketSaleCnt(channelId);
-  }
-
-  @Override
-  public List<TicketCntVO> listTicketSaleCnt(Wrapper<UserTicketOrder> queryWrapper) {
-    return getBaseMapper().listTicketSaleCnt(queryWrapper);
-  }
-
-  @Override
-  public List<UserTicketOrderListVO> listUserTicketOrder(QueryWrapper<UserTicketOrder> queryWrapper) {
-    return getBaseMapper().listUserTicketOrder(queryWrapper);
-  }
-
-  @Override
-  public int countUserTicketOrder(QueryWrapper<UserTicketOrder> queryWrapper) {
-    return getBaseMapper().countUserTicketOrder(queryWrapper);
-  }
-
-  @Override
-  public List<IndexVO> selectIndexTicketBoxTopByTicketOrderAndChannelOrder(IndexTicketBoxTopQueryParam indexTicketBoxTopQueryParam ) {
-    return getBaseMapper().selectIndexTicketBoxTopByTicketOrderAndChannelOrder(indexTicketBoxTopQueryParam);
-  }
-
-  @Override
-  public List<IndexVO> selectIndexTicketSiteTopByTicketOrderAndChannelOrder(IndexTicketSiteTopQueryParam indexTicketSiteTopQueryParam) {
-    return getBaseMapper().selectIndexTicketSiteTopByTicketOrderAndChannelOrder(indexTicketSiteTopQueryParam);
-  }
-
-  @Override
-  public UserTicketOrderDetailVO detail(String orderId) {
-    QueryWrapper<UserTicketOrder> queryWrapper = new QueryWrapper<>();
-    queryWrapper.eq("t1.order_id", orderId);
-    UserTicketOrderDetailVO userTicketOrderDetailVO = getBaseMapper().selectUserTicketOrderDetail(queryWrapper);
-
-    List<UserTicketOrderTicketDetailVO> list = userTicketOrderItemService.listTicketDetailByOrderId(orderId);
-    userTicketOrderDetailVO.setTicketDetailList(list);
-    return userTicketOrderDetailVO;
-  }
 }