Explorar el Código

Merge branch 'dev' of http://113.31.163.91:7777/quanshu/mp-server.git into dev

Liugl hace 3 años
padre
commit
a78f66661a
Se han modificado 22 ficheros con 427 adiciones y 53 borrados
  1. 10 10
      mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/GoodsMgrController.java
  2. 8 6
      mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java
  3. 2 2
      mp-quartz/src/main/java/com/qs/mp/quartz/task/ChannelOrderTask.java
  4. 77 0
      mp-quartz/src/main/java/com/qs/mp/quartz/task/TicketOrderTask.java
  5. 1 1
      mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelOrderServiceImpl.java
  6. 59 0
      mp-service/src/main/java/com/qs/mp/common/domain/DeliveryCompany.java
  7. 13 0
      mp-service/src/main/java/com/qs/mp/common/mapper/DeliveryCompanyMapper.java
  8. 16 0
      mp-service/src/main/java/com/qs/mp/common/service/IDeliveryCompanyService.java
  9. 20 0
      mp-service/src/main/java/com/qs/mp/common/service/impl/DeliveryCompanyServiceImpl.java
  10. 0 12
      mp-service/src/main/java/com/qs/mp/user/domain/UserDeliverOrder.java
  11. 65 0
      mp-service/src/main/java/com/qs/mp/user/domain/UserDeliverOrderDetail.java
  12. 6 0
      mp-service/src/main/java/com/qs/mp/user/domain/UserDeliverOrderItem.java
  13. 13 0
      mp-service/src/main/java/com/qs/mp/user/mapper/UserDeliverOrderDetailMapper.java
  14. 16 0
      mp-service/src/main/java/com/qs/mp/user/service/IUserDeliverOrderDetailService.java
  15. 9 0
      mp-service/src/main/java/com/qs/mp/user/service/IUserTicketOrderService.java
  16. 20 0
      mp-service/src/main/java/com/qs/mp/user/service/impl/UserDeliverOrderDetailServiceImpl.java
  17. 2 0
      mp-service/src/main/java/com/qs/mp/user/service/impl/UserExchangeOrderServiceImpl.java
  18. 45 17
      mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderServiceImpl.java
  19. 20 0
      mp-service/src/main/resources/mapper/common/DeliveryCompanyMapper.xml
  20. 21 0
      mp-service/src/main/resources/mapper/user/UserDeliverOrderDetailMapper.xml
  21. 3 2
      mp-service/src/main/resources/mapper/user/UserDeliverOrderItemMapper.xml
  22. 1 3
      mp-service/src/main/resources/mapper/user/UserDeliverOrderMapper.xml

+ 10 - 10
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/GoodsMgrController.java

@@ -72,13 +72,13 @@ public class GoodsMgrController extends BaseApiController {
 
 	@Autowired
 	private IGoodsService goodsService;
-	
+
 	@Autowired
 	private IGoodsSkuService goodsSkuService;
-	
+
 	@Autowired
 	private IGoodsCategoryService goodsCategoryService;
-	
+
 	@Autowired
 	private ISysUserService sysUserService;
 
@@ -113,7 +113,7 @@ public class GoodsMgrController extends BaseApiController {
 		res.setRows(goodsList);
 		return res;
 	}
-	
+
 	/**
 	 * 获取商品详情信息
 	 *
@@ -170,7 +170,7 @@ public class GoodsMgrController extends BaseApiController {
 		goods.setStatus(GoodsStatusEnum.PUT_INIT);
 		// 多SKU
 		List<GoodsSku> skuList = goodsParam.getSkuList();
-		if(goods.getMultiSku() == 1) { // 
+		if(goods.getMultiSku() == 1) { //
 			if((null == skuList || skuList.size() == 0)) {
 				return AjaxResult.error("商品" + goods.getTitle() + "不满足多SKU条件!");
 			}else {
@@ -253,14 +253,14 @@ public class GoodsMgrController extends BaseApiController {
 		return AjaxResult.success("商品'" + goods.getTitle() + "'新增成功");
 	}
 
-	
-	
+
+
 	/**
 	 * 停用、启用商品
 	 * @param
 	 * @return
 	 */
-	@ApiOperation(value = "停用、启用代金券信息", notes = "代金券管理编辑代金券")
+	@ApiOperation(value = "停用、启用商品", notes = "停用、启用商品")
 	@PostMapping("/status")
 	public AjaxResult goodsStatus(@RequestBody Goods goods) {
 		String goodsId = (null != goods && StringUtils.isNotBlank(goods.getGoodsId()))?goods.getGoodsId():"";
@@ -277,8 +277,8 @@ public class GoodsMgrController extends BaseApiController {
 		}
 		return AjaxResult.success("操作成功");
 	}
-	
-	
+
+
 	/**
 	 * 删除商品(假删)
 	 *

+ 8 - 6
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java

@@ -141,7 +141,9 @@ public class TicketBoxMgrController extends BaseApiController {
 			if (ticketBox.getStatus() != TicketBoxStatusEnum.PUT_ON) {
 				return AjaxResult.error("当前状态不是已上架,不能下架");
 			}
-			ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getStatus, TicketBoxStatusEnum.PUT_OFF)
+			ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>()
+					.set(TicketBox::getStatus, TicketBoxStatusEnum.PUT_OFF)
+					.set(TicketBox::getManualOff, 1)
 					.eq(TicketBox::getBoxId, ticketBox.getBoxId()));
 		} else if (param.getStatus() == TicketBoxStatusEnum.PUT_ON) {
 			if (ticketBox.getStatus() != TicketBoxStatusEnum.PUT_OFF && ticketBox.getStatus() != TicketBoxStatusEnum.DONE) {
@@ -258,8 +260,8 @@ public class TicketBoxMgrController extends BaseApiController {
 			return AjaxResult.error("导入失败,请联系管理员");
 		}
 	}
-	
-	
+
+
 	@Log(title = "导出印刷", businessType = BusinessType.EXPORT)
 	@PostMapping("/exportDraw")
 	public AjaxResult exportDraw(@RequestBody BathIdParam ids) {
@@ -315,8 +317,8 @@ public class TicketBoxMgrController extends BaseApiController {
 		ExcelUtil<TicketExcel> util = new ExcelUtil<TicketExcel>(TicketExcel.class);
 		return util.exportExcel(excelList, ticketBox.getTitle(), false);
 	}
-	
-	
+
+
 	/**
 	 * 导出印刷格式化
 	 * @param drawNum
@@ -344,7 +346,7 @@ public class TicketBoxMgrController extends BaseApiController {
 			}
 		}
 		return "";
-		
+
 	}
 
 

+ 2 - 2
mp-quartz/src/main/java/com/qs/mp/quartz/task/ChannelOrderTask.java

@@ -23,7 +23,7 @@ public class ChannelOrderTask {
   @Autowired
   private IChannelOrderService channelOrderService;
 
-  private final int PAGE_SIZE = 1000;
+  private final int PAGE_SIZE = 500;
 
   /**
    * 订单取消到期任务
@@ -36,7 +36,7 @@ public class ChannelOrderTask {
       List<ChannelOrder> channelOrderList = channelOrderService.list(new LambdaQueryWrapper<ChannelOrder>().eq(ChannelOrder::getStatus,
               ChannelOrderStatusEnum.NOT_PAY)
           .lt(ChannelOrder::getCreatedTime, DateUtils.addMinutes(DateUtils.getNowDate(), -30))
-          .last("limt " + PAGE_SIZE));
+          .last("limit " + PAGE_SIZE));
       total = channelOrderList.size();
       for (ChannelOrder channelOrder : channelOrderList) {
         try {

+ 77 - 0
mp-quartz/src/main/java/com/qs/mp/quartz/task/TicketOrderTask.java

@@ -0,0 +1,77 @@
+package com.qs.mp.quartz.task;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qs.mp.common.enums.TicketTypeEnum;
+import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
+import com.qs.mp.common.utils.DateUtils;
+import com.qs.mp.common.utils.LogUtil;
+import com.qs.mp.user.domain.UserTicketOrder;
+import com.qs.mp.user.service.IUserTicketOrderService;
+import java.util.List;
+import java.util.stream.Collectors;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhongcp
+ * @Date 2022/3/17
+ */
+@Component("ticketOrderTask")
+public class TicketOrderTask {
+
+  protected final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
+
+  @Autowired
+  private IUserTicketOrderService userTicketOrderService;
+
+  private final int PAGE_SIZE = 500;
+
+  /**
+   * 订单取消到期任务
+   */
+  public void cancel() {
+    LogUtil.info(logger, "...盲票购买未支付订单定时取消任务开始...");
+    int total = PAGE_SIZE;
+    while (total == PAGE_SIZE) {
+      // 捞取30分钟前未支付在线盲票购买订单
+      List<UserTicketOrder> ticketOrderList = userTicketOrderService.list(
+          new QueryWrapper<UserTicketOrder>()
+              .select("distinct box_id")
+              .lambda().eq(UserTicketOrder::getResource, TicketTypeEnum.ONLINE)
+              .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.NOT_PAY)
+              .lt(UserTicketOrder::getCreatedTime,
+                  DateUtils.addMinutes(DateUtils.getNowDate(), -30))
+              .last("limit " + PAGE_SIZE));
+      total = ticketOrderList.size();
+      // 按票组分批次取消
+      for (UserTicketOrder ticketOrder : ticketOrderList) {
+        int boxTotal = 10;
+        while (boxTotal == 10) {
+          List<UserTicketOrder> orderList = userTicketOrderService.list(
+              new QueryWrapper<UserTicketOrder>()
+                  .select("order_id")
+                  .lambda().eq(UserTicketOrder::getBoxId, ticketOrder.getBoxId())
+                  .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.NOT_PAY)
+                  .lt(UserTicketOrder::getCreatedTime,
+                      DateUtils.addMinutes(DateUtils.getNowDate(), -30))
+                  .last("limit " + 10));
+          boxTotal = orderList.size();
+          try {
+            userTicketOrderService.batchCancelOrder(ticketOrder.getBoxId(),
+                orderList.stream().map(UserTicketOrder::getOrderId).collect(
+                    Collectors.toList()));
+          } catch (Exception e) {
+            LogUtil.error(logger, e, "定时取消未支付盲票购买订单异常。boxId:{0}, orderList:{1}",
+                ticketOrder.getBoxId(),
+                JSONObject.toJSONString(orderList));
+          }
+
+        }
+      }
+    }
+    LogUtil.info(logger, "...盲票购买未支付订单定时取消任务结束...");
+  }
+}

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

@@ -89,7 +89,7 @@ public class ChannelOrderServiceImpl extends
       title.append(ticketBox.getTitle()).append(",");
       // 更新盲票组的已销售数和状态,乐观锁
       boolean rst = ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>()
-          .set(ticketBox.getPkgSalePrice() + channelCartVO.getOrderNum() == ticketBox.getPkgQty(),
+          .set(ticketBox.getSalePkgQty() + channelCartVO.getOrderNum() == ticketBox.getPkgQty(),
               TicketBox::getStatus,
               TicketBoxStatusEnum.PUT_OFF)
           .set(TicketBox::getSalePkgQty, ticketBox.getSalePkgQty() + channelCartVO.getOrderNum())

+ 59 - 0
mp-service/src/main/java/com/qs/mp/common/domain/DeliveryCompany.java

@@ -0,0 +1,59 @@
+package com.qs.mp.common.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * @describe 物流公司实体类
+ * @auther quanshu
+ * @create 2022-03-17 22:02:15
+ */
+@TableName("mp_delivery_company")
+@Data
+public class DeliveryCompany implements Serializable {
+
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * ID
+   */
+  @TableId(value = "delivery_id", type = IdType.AUTO)
+  private Long deliveryId;
+
+  /**
+   * 物流公司名称
+   */
+  @TableField("company_name")
+  private String companyName;
+
+  /**
+   * 公司主页
+   */
+  @TableField("company_home_url")
+  private String companyHomeUrl;
+
+  /**
+   * 物流查询接口
+   */
+  @TableField("query_url")
+  private String queryUrl;
+
+  /**
+   * 创建时间
+   */
+  @TableField("created_time")
+  private Date createdTime;
+
+  /**
+   * 更新时间
+   */
+  @TableField("updated_time")
+  private Date updatedTime;
+
+
+}

+ 13 - 0
mp-service/src/main/java/com/qs/mp/common/mapper/DeliveryCompanyMapper.java

@@ -0,0 +1,13 @@
+package com.qs.mp.common.mapper;
+
+import com.qs.mp.common.domain.DeliveryCompany;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @auther quanshu
+ * @create 2022-03-17 22:02:15
+ * @describe 物流公司mapper类
+ */
+public interface DeliveryCompanyMapper extends BaseMapper<DeliveryCompany> {
+
+}

+ 16 - 0
mp-service/src/main/java/com/qs/mp/common/service/IDeliveryCompanyService.java

@@ -0,0 +1,16 @@
+package com.qs.mp.common.service;
+
+import com.qs.mp.common.domain.DeliveryCompany;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 物流公司 服务类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2022-03-17
+ */
+public interface IDeliveryCompanyService extends IService<DeliveryCompany> {
+
+}

+ 20 - 0
mp-service/src/main/java/com/qs/mp/common/service/impl/DeliveryCompanyServiceImpl.java

@@ -0,0 +1,20 @@
+package com.qs.mp.common.service.impl;
+
+import com.qs.mp.common.domain.DeliveryCompany;
+import com.qs.mp.common.mapper.DeliveryCompanyMapper;
+import com.qs.mp.common.service.IDeliveryCompanyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 物流公司 服务实现类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2022-03-17
+ */
+@Service
+public class DeliveryCompanyServiceImpl extends ServiceImpl<DeliveryCompanyMapper, DeliveryCompany> implements IDeliveryCompanyService {
+
+}

+ 0 - 12
mp-service/src/main/java/com/qs/mp/user/domain/UserDeliverOrder.java

@@ -95,18 +95,6 @@ public class UserDeliverOrder implements Serializable {
   @TableField("memo")
   private String memo;
 
-  /**
-   * 物流ID
-   */
-  @TableField("delivery_id")
-  private String deliveryId;
-
-  /**
-   * 物流单号
-   */
-  @TableField("delivery_flow_id")
-  private String deliveryFlowId;
-
   /**
    * 订单状态;-1 已取消 0:待付款 1:待发货 2:待收货 3:已完成
    */

+ 65 - 0
mp-service/src/main/java/com/qs/mp/user/domain/UserDeliverOrderDetail.java

@@ -0,0 +1,65 @@
+package com.qs.mp.user.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * @describe 提货订单发货详情实体类
+ * @auther quanshu
+ * @create 2022-03-17 21:45:51
+ */
+@TableName("mp_user_deliver_order_detail")
+@Data
+public class UserDeliverOrderDetail implements Serializable {
+
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * 主键
+   */
+  @TableId(value = "detail_id", type = IdType.INPUT)
+  private String detailId;
+
+  /**
+   * 订单ID
+   */
+  @TableField("order_id")
+  private String orderId;
+
+  /**
+   * 用户ID
+   */
+  @TableField("user_id")
+  private Long userId;
+
+  /**
+   * 物流ID
+   */
+  @TableField("delivery_id")
+  private String deliveryId;
+
+  /**
+   * 物流单号
+   */
+  @TableField("delivery_flow_id")
+  private String deliveryFlowId;
+
+  /**
+   * 创建时间
+   */
+  @TableField("created_time")
+  private Date createdTime;
+
+  /**
+   * 更新时间
+   */
+  @TableField("updated_time")
+  private Date updatedTime;
+
+
+}

+ 6 - 0
mp-service/src/main/java/com/qs/mp/user/domain/UserDeliverOrderItem.java

@@ -73,6 +73,12 @@ public class UserDeliverOrderItem implements Serializable {
   @TableField("goods_num")
   private Integer goodsNum;
 
+  /**
+   * 发货详情ID
+   */
+  @TableField("detail_id")
+  private String detailId;
+
   /**
    * 创建时间
    */

+ 13 - 0
mp-service/src/main/java/com/qs/mp/user/mapper/UserDeliverOrderDetailMapper.java

@@ -0,0 +1,13 @@
+package com.qs.mp.user.mapper;
+
+import com.qs.mp.user.domain.UserDeliverOrderDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @auther quanshu
+ * @create 2022-03-17 21:45:51
+ * @describe 提货订单发货详情mapper类
+ */
+public interface UserDeliverOrderDetailMapper extends BaseMapper<UserDeliverOrderDetail> {
+
+}

+ 16 - 0
mp-service/src/main/java/com/qs/mp/user/service/IUserDeliverOrderDetailService.java

@@ -0,0 +1,16 @@
+package com.qs.mp.user.service;
+
+import com.qs.mp.user.domain.UserDeliverOrderDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 提货订单发货详情 服务类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2022-03-17
+ */
+public interface IUserDeliverOrderDetailService extends IService<UserDeliverOrderDetail> {
+
+}

+ 9 - 0
mp-service/src/main/java/com/qs/mp/user/service/IUserTicketOrderService.java

@@ -4,6 +4,7 @@ import com.qs.mp.pay.domain.PayOrder;
 import com.qs.mp.user.domain.UserTicketOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.user.domain.vo.TicketOrderSettleVO;
+import java.util.List;
 
 /**
  * <p>
@@ -23,6 +24,14 @@ public interface IUserTicketOrderService extends IService<UserTicketOrder> {
    */
   String submitOrder(Long userId, TicketOrderSettleVO orderSettleVO);
 
+  /**
+   * 批量取消一个票组(线上)的订单(恢复优惠券、票组销量)
+   * @param boxId
+   * @param orderIds
+   * @return
+   */
+  boolean batchCancelOrder(String boxId, List<String> orderIds);
+
   /**
    * 取消订单(恢复优惠券、票组销量)
    * @param orderId

+ 20 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserDeliverOrderDetailServiceImpl.java

@@ -0,0 +1,20 @@
+package com.qs.mp.user.service.impl;
+
+import com.qs.mp.user.domain.UserDeliverOrderDetail;
+import com.qs.mp.user.mapper.UserDeliverOrderDetailMapper;
+import com.qs.mp.user.service.IUserDeliverOrderDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 提货订单发货详情 服务实现类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2022-03-17
+ */
+@Service
+public class UserDeliverOrderDetailServiceImpl extends ServiceImpl<UserDeliverOrderDetailMapper, UserDeliverOrderDetail> implements IUserDeliverOrderDetailService {
+
+}

+ 2 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserExchangeOrderServiceImpl.java

@@ -6,6 +6,7 @@ import com.qs.mp.admin.domain.GoodsSku;
 import com.qs.mp.admin.service.IGoodsService;
 import com.qs.mp.admin.service.IGoodsSkuService;
 import com.qs.mp.common.enums.ErrorCodeEnum;
+import com.qs.mp.common.enums.GoodsStatusEnum;
 import com.qs.mp.common.enums.PrizeStorageInTypeEnum;
 import com.qs.mp.common.enums.PrizeStorageStatusEnum;
 import com.qs.mp.common.exception.ServiceException;
@@ -113,6 +114,7 @@ public class UserExchangeOrderServiceImpl extends ServiceImpl<UserExchangeOrderM
       Assert.isTrue(updateSku, "兑换商品更新SKU库存失败。goodsId:" + goodsId + ",skuId:" + skuId);
     }
     boolean updateGoods = goodsService.update(new LambdaUpdateWrapper<Goods>()
+            .set(goods.getQuantity() - orderNum == 0, Goods::getStatus, GoodsStatusEnum.PUT_OFF)
         .set(Goods::getQuantity, goods.getQuantity() - orderNum)
         .set(Goods::getExchangedQty, goods.getExchangedQty() + orderNum)
         .eq(Goods::getGoodsId, goodsId).eq(Goods::getQuantity, goods.getQuantity()).eq(Goods::getExchangedQty, goods.getExchangedQty()));

+ 45 - 17
mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderServiceImpl.java

@@ -239,13 +239,54 @@ public class UserTicketOrderServiceImpl extends
     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);
+  }
+
   @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;
+  }
+
+  private boolean rollbackOrder(UserTicketOrder userTicketOrder) {
     if (userTicketOrder.getStatus() != UserTicketOrderStatusEnum.NOT_PAY) {
       LogUtil.warn(logger, "取消购票订单时,订单状态不是待支付,忽略。orderId:{0}, status:{1}",
-          orderId, userTicketOrder.getStatus());
+          userTicketOrder.getOrderId(), userTicketOrder.getStatus());
       return false;
     }
 
@@ -256,28 +297,15 @@ public class UserTicketOrderServiceImpl extends
           .set(UserCoupon::getStatus, UserCouponStatusEnum.UNUSED)
           .set(UserCoupon::getVerifyTime, null)
           .in(UserCoupon::getId, userCouponIds));
-      Assert.isTrue(rst, "盲票购买订单取消时,反核销优惠券失败。orderId:" + orderId + "userCouponIds:"
+      Assert.isTrue(rst, "盲票购买订单取消时,反核销优惠券失败。orderId:" + userTicketOrder.getOrderId() + "userCouponIds:"
           + userTicketOrder.getCouponInfo());
     }
-    if (userTicketOrder.getResource() == TicketTypeEnum.ONLINE) {
-      // TODO 线上票库存回滚,此处需要按票组累计起来回滚
-      TicketBox ticketBox = ticketBoxService.getById(userTicketOrder.getBoxId());
-      ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getSaleQty,
-              ticketBox.getSaleQty() - userTicketOrder.getTicketNum())
-          .set(
-              ticketBox.getStatus() == TicketBoxStatusEnum.PUT_OFF && ticketBox.getManualOff() != 1,
-              TicketBox::getStatus, TicketBoxStatusEnum.PUT_ON)
-          .eq(TicketBox::getBoxId, ticketBox.getBoxId())
-          .eq(TicketBox::getSaleQty, ticketBox.getSaleQty()));
-
-    }
 
     boolean rst = update(new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getStatus,
             UserTicketOrderStatusEnum.CANCELED)
-        .eq(UserTicketOrder::getOrderId, orderId)
+        .eq(UserTicketOrder::getOrderId, userTicketOrder.getOrderId())
         .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.NOT_PAY));
-    Assert.isTrue(rst, "盲票购买订单取消时,更新订单状态失败。orderId:" + orderId);
-
+    Assert.isTrue(rst, "盲票购买订单取消时,更新订单状态失败。orderId:" + userTicketOrder.getOrderId());
     return true;
   }
 

+ 20 - 0
mp-service/src/main/resources/mapper/common/DeliveryCompanyMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.qs.mp.common.mapper.DeliveryCompanyMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.qs.mp.common.domain.DeliveryCompany">
+        <id column="delivery_id" property="deliveryId" />
+        <result column="company_name" property="companyName" />
+        <result column="company_home_url" property="companyHomeUrl" />
+        <result column="query_url" property="queryUrl" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_time" property="updatedTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        delivery_id, company_name, company_home_url, query_url, created_time, updated_time
+    </sql>
+
+</mapper>

+ 21 - 0
mp-service/src/main/resources/mapper/user/UserDeliverOrderDetailMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.qs.mp.user.mapper.UserDeliverOrderDetailMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.qs.mp.user.domain.UserDeliverOrderDetail">
+        <id column="detail_id" property="detailId" />
+        <result column="order_id" property="orderId" />
+        <result column="user_id" property="userId" />
+        <result column="delivery_id" property="deliveryId" />
+        <result column="delivery_flow_id" property="deliveryFlowId" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_time" property="updatedTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        detail_id, order_id, user_id, delivery_id, delivery_flow_id, created_time, updated_time
+    </sql>
+
+</mapper>

+ 3 - 2
mp-service/src/main/resources/mapper/user/UserDeliverOrderItemMapper.xml

@@ -13,13 +13,14 @@
         <result column="title" property="title" />
         <result column="pic_url" property="picUrl" />
         <result column="goods_num" property="goodsNum" />
+        <result column="detail_id" property="detailId" />
         <result column="created_time" property="createdTime" />
         <result column="updated_time" property="updatedTime" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        item_id, order_id, storage_id, goods_id, sku_id, properties, title, pic_url, goods_num, created_time, updated_time
+        item_id, order_id, storage_id, goods_id, sku_id, properties, title, pic_url, goods_num, detail_id, created_time, updated_time
     </sql>
 
-</mapper>
+</mapper>

+ 1 - 3
mp-service/src/main/resources/mapper/user/UserDeliverOrderMapper.xml

@@ -16,8 +16,6 @@
         <result column="pay_amt" property="payAmt" />
         <result column="freight_amt" property="freightAmt" />
         <result column="memo" property="memo" />
-        <result column="delivery_id" property="deliveryId" />
-        <result column="delivery_flow_id" property="deliveryFlowId" />
         <result column="status" property="status" />
         <result column="created_time" property="createdTime" />
         <result column="updated_time" property="updatedTime" />
@@ -25,7 +23,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        order_id, user_id, receiver, tel, province, city, area, address, order_num, pay_amt, freight_amt, memo, delivery_id, delivery_flow_id, status, created_time, updated_time
+        order_id, user_id, receiver, tel, province, city, area, address, order_num, pay_amt, freight_amt, memo, status, created_time, updated_time
     </sql>