소스 검색

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

Mp server test

See merge request quanshu/mp-server!885
zhong chunping 2 년 전
부모
커밋
e6201d57fd
38개의 변경된 파일788개의 추가작업 그리고 28개의 파일을 삭제
  1. 9 0
      mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java
  2. 30 1
      mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/UserDeliverOrderMgrController.java
  3. 30 0
      mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/UserTicketOrderMgrController.java
  4. 27 0
      mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketController.java
  5. 22 0
      mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketOrderController.java
  6. 11 7
      mp-common/src/main/java/com/qs/mp/common/enums/PayTypeEnum.java
  7. 2 1
      mp-common/src/main/java/com/qs/mp/common/enums/PrizeStorageInTypeEnum.java
  8. 2 1
      mp-framework/src/main/java/com/qs/mp/framework/config/SecurityConfig.java
  9. 120 5
      mp-quartz/src/main/java/com/qs/mp/quartz/task/DayStatTask.java
  10. 1 1
      mp-service/src/main/java/com/qs/mp/admin/domain/Goods.java
  11. 89 0
      mp-service/src/main/java/com/qs/mp/admin/domain/TicketBoxGoods.java
  12. 3 0
      mp-service/src/main/java/com/qs/mp/admin/domain/excel/UserTicketOrderExcel.java
  13. 1 1
      mp-service/src/main/java/com/qs/mp/admin/domain/param/GoodsQueryParam.java
  14. 5 1
      mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxCreateParam.java
  15. 30 0
      mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxGoodsQueryParam.java
  16. 5 1
      mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxUpdateParam.java
  17. 3 0
      mp-service/src/main/java/com/qs/mp/admin/domain/param/UserDeliverOrderQueryParam.java
  18. 3 0
      mp-service/src/main/java/com/qs/mp/admin/domain/param/UserTicketOrderQueryParam.java
  19. 115 0
      mp-service/src/main/java/com/qs/mp/admin/domain/vo/TicketBoxGoodsListVO.java
  20. 20 0
      mp-service/src/main/java/com/qs/mp/admin/domain/vo/TicketBoxGoodsVO.java
  21. 8 4
      mp-service/src/main/java/com/qs/mp/admin/domain/vo/TicketBoxVO.java
  22. 3 0
      mp-service/src/main/java/com/qs/mp/admin/domain/vo/UserTicketOrderDetailVO.java
  23. 3 0
      mp-service/src/main/java/com/qs/mp/admin/domain/vo/UserTicketOrderListVO.java
  24. 24 0
      mp-service/src/main/java/com/qs/mp/admin/mapper/TicketBoxGoodsMapper.java
  25. 9 0
      mp-service/src/main/java/com/qs/mp/admin/mapper/TicketBoxMapper.java
  26. 25 0
      mp-service/src/main/java/com/qs/mp/admin/service/ITicketBoxGoodsService.java
  27. 8 0
      mp-service/src/main/java/com/qs/mp/admin/service/ITicketBoxService.java
  28. 28 0
      mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxGoodsServiceImpl.java
  29. 46 0
      mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxServiceImpl.java
  30. 1 1
      mp-service/src/main/java/com/qs/mp/user/domain/UserPrizeStorage.java
  31. 3 0
      mp-service/src/main/java/com/qs/mp/user/domain/excel/DeliverOrderExcel.java
  32. 7 1
      mp-service/src/main/java/com/qs/mp/user/domain/vo/TicketOrderSettleVO.java
  33. 8 0
      mp-service/src/main/java/com/qs/mp/user/domain/vo/UserPrizeStorageVO.java
  34. 32 0
      mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderServiceImpl.java
  35. 32 0
      mp-service/src/main/resources/mapper/admin/TicketBoxGoodsMapper.xml
  36. 11 0
      mp-service/src/main/resources/mapper/admin/TicketBoxMapper.xml
  37. 10 3
      mp-service/src/main/resources/mapper/user/UserPrizeStorageMapper.xml
  38. 2 0
      mp-service/src/main/resources/mapper/user/UserTicketOrderMapper.xml

+ 9 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java

@@ -87,6 +87,9 @@ public class TicketBoxMgrController extends BaseApiController {
 	@Autowired
 	private IChannelService channelService;
 
+	@Autowired
+	private ITicketBoxGoodsService ticketBoxGoodsService;
+
 	@Value("${mp.exportUrl}")
 	private String exportUrl;
 
@@ -159,6 +162,12 @@ public class TicketBoxMgrController extends BaseApiController {
 		}
 		TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
 		TicketBoxVO ticketBoxVO = mapperFacade.map(ticketBox, TicketBoxVO.class);
+
+		// 设置关联商品信息
+		QueryWrapper<TicketBoxGoods> ticketBoxGoodsQueryWrapper = new QueryWrapper<>();
+		ticketBoxGoodsQueryWrapper.eq("t1.box_id", param.getBoxId());
+		ticketBoxVO.setGoodsList(ticketBoxGoodsService.listByQueryWrapper(ticketBoxGoodsQueryWrapper));
+
 		// 设置经销商信息
 		if (TicketBoxSaleChannelTypeEnum.PART.getValue().equals(ticketBox.getSaleChannelType())) {
 			List<TicketBoxChannel> ticketBoxChannelList = ticketBoxChannelService.list(new LambdaQueryWrapper<TicketBoxChannel>().eq(TicketBoxChannel::getBoxId, ticketBox.getBoxId()));

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

@@ -15,10 +15,12 @@ import com.qs.mp.common.enums.BusinessType;
 import com.qs.mp.common.enums.DeliverOrderStatusEnum;
 import com.qs.mp.common.enums.DeliverTypeEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
+import com.qs.mp.common.enums.PayTypeEnum;
 import com.qs.mp.common.jsms.JSMSUtils;
 import com.qs.mp.common.utils.DateUtils;
 import com.qs.mp.user.domain.UserDeliverOrder;
 import com.qs.mp.user.domain.UserDeliverOrderItem;
+import com.qs.mp.user.domain.UserTicketOrder;
 import com.qs.mp.user.domain.excel.DeliverOrderExcel;
 import com.qs.mp.user.domain.vo.OrderDeliverItemVO;
 import com.qs.mp.user.domain.vo.UserDeliverOrderItemVO;
@@ -107,6 +109,16 @@ public class UserDeliverOrderMgrController extends BaseApiController {
 		queryWrapper.eq(null != queryParam && null != queryParam.getSupplierId(), "t3.supplier_id", queryParam.getSupplierId());
 		queryWrapper.like(null != queryParam && StringUtils.isNotBlank(queryParam.getNickName()), "t2.nick_name", queryParam.getNickName());
 		queryWrapper.like(null != queryParam && StringUtils.isNotBlank(queryParam.getTitle()), "t3.title", queryParam.getTitle());
+
+		if (StringUtils.isNotBlank(queryParam.getPayType())) {
+			if (PayTypeEnum.ALIPAY.getValue().equals(queryParam.getPayType())) {
+				// 1是支付宝,10支付宝直连
+				queryWrapper.in("t1.pay_type",PayTypeEnum.ALIPAY.getValue(),"10");
+			} else if (PayTypeEnum.WXPAY.getValue().equals(queryParam.getPayType())) {
+				// 2是微信
+				queryWrapper.eq("t1.pay_type", PayTypeEnum.WXPAY.getValue());
+			}
+		}
 		queryWrapper.orderByDesc("t1.order_id");
 		List<UserDeliverOrderVO> userDeliverOrderVOList = userDeliverOrderService.selectUserDeliverOrderVoList(queryWrapper);
 		for (UserDeliverOrderVO userDeliverOrderVO : userDeliverOrderVOList) {
@@ -307,6 +319,17 @@ public class UserDeliverOrderMgrController extends BaseApiController {
 		queryWrapper.le(null != queryParam && null != queryParam.getEndTime(), "t1.created_time", queryParam.getEndTime());
 		queryWrapper.like(null != queryParam && StringUtils.isNotBlank(queryParam.getNickName()), "t2.nick_name", queryParam.getNickName());
 		queryWrapper.like(null != queryParam && StringUtils.isNotBlank(queryParam.getTitle()), "t3.title", queryParam.getTitle());
+
+		if (StringUtils.isNotBlank(queryParam.getPayType())) {
+			if (PayTypeEnum.ALIPAY.getValue().equals(queryParam.getPayType())) {
+				// 1是支付宝,10支付宝直连
+				queryWrapper.in("t1.pay_type",PayTypeEnum.ALIPAY.getValue(),"10");
+			} else if (PayTypeEnum.WXPAY.getValue().equals(queryParam.getPayType())) {
+				// 2是微信
+				queryWrapper.eq("t1.pay_type", PayTypeEnum.WXPAY.getValue());
+			}
+		}
+
 		queryWrapper.orderByDesc("t1.order_id");
 		int totalSize = userDeliverOrderService.selectUserDeliverOrderCount(queryWrapper);
 		if (totalSize == 0) {
@@ -377,7 +400,13 @@ public class UserDeliverOrderMgrController extends BaseApiController {
 							deliverOrderExcel.setTel(deliverOrder.getTel());
 							deliverOrderExcel.setDeliveryFlowId(userDeliverOrderItem.getDeliveryFlowId());
 							deliverOrderExcel.setCompanyName(userDeliverOrderItem.getCompanyName());
-
+							if (StringUtils.isNotBlank(deliverOrder.getPayType())) {
+								if (PayTypeEnum.WXPAY.getValue().equals(deliverOrder.getPayType())) {
+									deliverOrderExcel.setPayType(PayTypeEnum.WXPAY.getDesc());
+								}else if (PayTypeEnum.ALIPAY.getValue().equals(deliverOrder.getPayType()) || "10".equals(deliverOrder.getPayType())){
+									deliverOrderExcel.setPayType(PayTypeEnum.ALIPAY.getDesc());
+								}
+							}
 
 							int cost = 0;
 							Integer skuCost = userDeliverOrderItem.getSkuCost();

+ 30 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/UserTicketOrderMgrController.java

@@ -16,6 +16,7 @@ import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.enums.BusinessType;
 import com.qs.mp.common.enums.PayOrderStatusEnum;
+import com.qs.mp.common.enums.PayTypeEnum;
 import com.qs.mp.common.enums.TicketPrizeTypeEnum;
 import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
 import com.qs.mp.common.utils.DateUtils;
@@ -100,6 +101,16 @@ public class UserTicketOrderMgrController extends BaseApiController {
             }
         }
 
+        if (StringUtils.isNotBlank(userTicketOrderQueryParam.getPayType())) {
+            if (PayTypeEnum.ALIPAY.getValue().equals(userTicketOrderQueryParam.getPayType())) {
+                // 1是支付宝,10支付宝直连
+                userTicketOrderLambdaQueryWrapper.in(UserTicketOrder::getPayType,PayTypeEnum.ALIPAY.getValue(),"10");
+            } else if (PayTypeEnum.WXPAY.getValue().equals(userTicketOrderQueryParam.getPayType())) {
+                // 2是微信
+                userTicketOrderLambdaQueryWrapper.eq(UserTicketOrder::getPayType, PayTypeEnum.WXPAY.getValue());
+            }
+        }
+
         if (Objects.nonNull(userTicketOrderQueryParam.getBoxType())) {
             List<TicketBox> ticketBoxList = ticketBoxService.list(new LambdaQueryWrapper<TicketBox>().eq(TicketBox::getType, userTicketOrderQueryParam.getBoxType()));
             if (CollectionUtils.isNotEmpty(ticketBoxList)) {
@@ -185,6 +196,16 @@ public class UserTicketOrderMgrController extends BaseApiController {
             }
         }
 
+        if (StringUtils.isNotBlank(userTicketOrderQueryParam.getPayType())) {
+            if (PayTypeEnum.ALIPAY.getValue().equals(userTicketOrderQueryParam.getPayType())) {
+                // 1是支付宝,10支付宝直连
+                userTicketOrderLambdaQueryWrapper.in(UserTicketOrder::getPayType,PayTypeEnum.ALIPAY.getValue(),"10");
+            } else if (PayTypeEnum.WXPAY.getValue().equals(userTicketOrderQueryParam.getPayType())) {
+                // 2是微信
+                userTicketOrderLambdaQueryWrapper.eq(UserTicketOrder::getPayType, PayTypeEnum.WXPAY.getValue());
+            }
+        }
+
         userTicketOrderLambdaQueryWrapper.orderByDesc(UserTicketOrder::getCreatedTime);
 
         int totalSize = userTicketOrderService.count(userTicketOrderLambdaQueryWrapper);
@@ -238,6 +259,15 @@ public class UserTicketOrderMgrController extends BaseApiController {
             if (Objects.nonNull(userTicketOrderListVO.getBoxType())){
                 userTicketOrderExcel.setBoxType(userTicketOrderListVO.getBoxType().getDesc());
             }
+
+            if (StringUtils.isNotBlank(userTicketOrderListVO.getPayType())) {
+                if (PayTypeEnum.WXPAY.getValue().equals(userTicketOrderListVO.getPayType())) {
+                    userTicketOrderExcel.setPayType(PayTypeEnum.WXPAY.getDesc());
+                }else if (PayTypeEnum.ALIPAY.getValue().equals(userTicketOrderListVO.getPayType()) || "10".equals(userTicketOrderListVO.getPayType())){
+                    userTicketOrderExcel.setPayType(PayTypeEnum.ALIPAY.getDesc());
+                }
+            }
+
             return userTicketOrderExcel;
         }).collect(Collectors.toList());
 

+ 27 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketController.java

@@ -9,6 +9,7 @@ import com.github.xiaoymin.knife4j.annotations.DynamicParameter;
 import com.github.xiaoymin.knife4j.annotations.DynamicResponseParameters;
 import com.qs.mp.admin.domain.*;
 import com.qs.mp.admin.domain.dto.TicketDrawNumDTO;
+import com.qs.mp.admin.domain.param.TicketBoxGoodsQueryParam;
 import com.qs.mp.admin.domain.param.TicketBoxParam;
 import com.qs.mp.admin.domain.param.TicketParam;
 import com.qs.mp.admin.domain.vo.*;
@@ -104,6 +105,32 @@ public class UserTicketController extends BaseApiController {
     return AjaxResult.success(true);
   }
 
+  @PostMapping("/mall/ticket/goods/list")
+  @ApiOperation("盲票关联商品列表")
+  @ApiResponses(
+      @ApiResponse(code = 200, message = "成功", response = TicketBoxGoodsVO.class)
+  )
+  public TableDataInfo ticketGoodsList(@RequestBody TicketBoxGoodsQueryParam param) {
+    startPage();
+    QueryWrapper<TicketBoxGoodsListVO> queryWrapper = new QueryWrapper<>();
+    queryWrapper.eq("t1.is_deleted",0);
+    queryWrapper.eq("t1.type",param.getType());
+
+    if (param.getCategoryId() != null && param.getCategoryId() != 0) {
+      queryWrapper.eq("t1.category_id", param.getCategoryId());
+    }
+
+    if (CollectionUtils.isNotEmpty(param.getBoxIds())) {
+      queryWrapper.in("t1.box_id", param.getBoxIds());
+    }
+
+    queryWrapper.eq("t1.status", TicketBoxStatusEnum.PUT_ON);
+    queryWrapper.eq("t2.is_deleted", 0);
+    queryWrapper.orderByDesc("t1.sort_weight");
+    List<TicketBoxGoodsListVO> list = ticketBoxService.listTicketGoodsByQueryWrapper(queryWrapper);
+    return getDataTable(list);
+  }
+
 
   /**
    * 盲票列表

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

@@ -2,9 +2,13 @@ package com.qs.mp.web.controller.api.user;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.admin.domain.Ticket;
 import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.domain.TicketBoxGoods;
 import com.qs.mp.admin.domain.TicketPackage;
+import com.qs.mp.admin.domain.vo.TicketBoxGoodsListVO;
+import com.qs.mp.admin.service.ITicketBoxGoodsService;
 import com.qs.mp.admin.service.ITicketBoxService;
 import com.qs.mp.admin.service.ITicketPackageService;
 import com.qs.mp.admin.service.ITicketService;
@@ -17,6 +21,7 @@ import com.qs.mp.common.enums.AppSourceEnum;
 import com.qs.mp.common.enums.BizTypeEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.common.enums.MqTopicType;
+import com.qs.mp.common.enums.TicketBoxStatusEnum;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.pulsar.PulsarClientService;
 import com.qs.mp.common.utils.LogUtil;
@@ -93,12 +98,18 @@ public class UserTicketOrderController extends BaseApiController {
     @Autowired
     private ITicketPackageService ticketPackageService;
 
+    @Autowired
+    private ITicketBoxGoodsService ticketBoxGoodsService;
+
 
     /**
      * 订单结算,每次更换优惠券时需重新请求此接口
      */
     @PostMapping("/order/settle")
     @ApiOperation(value = "订单结算", notes = "单个盲票商品上点立即购买")
+    @ApiResponses(
+        @ApiResponse(code = 200, message = "OK", response = TicketOrderSettleVO.class)
+    )
     public AjaxResult settle(@Valid @RequestBody TicketOrderParam param) {
         if (StringUtils.isBlank(param.getTicketId()) && StringUtils.isBlank(param.getBoxId())) {
             return AjaxResult.error("参数缺失");
@@ -159,6 +170,17 @@ public class UserTicketOrderController extends BaseApiController {
         AppSourceEnum appSourceEnum = AppSourceEnum.getByValue(param.getAppSource());
         orderSettleVO.setAppId(appSourceEnum.getAppId());
 
+        QueryWrapper<TicketBoxGoodsListVO> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("t1.is_deleted",0);
+        queryWrapper.eq("t2.is_deleted", 0);
+        queryWrapper.eq("t1.box_id",param.getBoxId());
+        List<TicketBoxGoodsListVO> ticketBoxGoodsListVOS = ticketBoxService.listTicketGoodsByQueryWrapper(queryWrapper);
+        if (!CollectionUtils.isEmpty(ticketBoxGoodsListVOS)) {
+            TicketBoxGoodsListVO ticketBoxGoodsListVO = ticketBoxGoodsListVOS.get(0);
+            orderSettleVO.setGoodsPicUrl(ticketBoxGoodsListVO.getPicUrl());
+            orderSettleVO.setGoodsTitle(ticketBoxGoodsListVO.getTitle());
+        }
+
         // 缓存订单结算对象
         redisCache.setCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId), orderSettleVO, 10,
             TimeUnit.MINUTES);

+ 11 - 7
mp-common/src/main/java/com/qs/mp/common/enums/PayTypeEnum.java

@@ -7,23 +7,27 @@ import com.baomidou.mybatisplus.annotation.IEnum;
  * 前端选择的支付类型
  *
  */
-public enum PayTypeEnum implements IEnum<Integer> {
+public enum PayTypeEnum implements IEnum<String> {
 
-  ALIPAY(1, "支付宝"),
-  WXPAY(2, "微信支付"),
-  ACCTPAY(3,"余额支付");
+  ALIPAY("1", "支付宝"),
+  WXPAY("2", "微信"),
+  ACCTPAY("3","余额支付");
 
 
-  private final int value;
+  private final String value;
   private final String desc;
 
-  PayTypeEnum(final int value, final String desc) {
+  PayTypeEnum(final String value, final String desc) {
     this.value = value;
     this.desc = desc;
   }
 
   @Override
-  public Integer getValue() {
+  public String getValue() {
     return value;
   }
+
+  public String getDesc() {
+    return desc;
+  }
 }

+ 2 - 1
mp-common/src/main/java/com/qs/mp/common/enums/PrizeStorageInTypeEnum.java

@@ -13,7 +13,8 @@ public enum PrizeStorageInTypeEnum implements IEnum<Integer> {
 
   TICKET_CASHED(1, "盲票奖品"),
   COIN_EXCHANGE(2, "盲豆兑换"),
-  MARKETING(3, "营销活动");
+  MARKETING(3, "营销活动"),
+  TICKET_GOODS(4, "盲票购买");
 
 
   private final int value;

+ 2 - 1
mp-framework/src/main/java/com/qs/mp/framework/config/SecurityConfig.java

@@ -151,7 +151,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                     "/api/v1/mp/open/link/**",
                     "/api/v1/mp/user/mall/ticket/detail/new",
                     "/api/v1/mp/user/ticket/prize/list/*",
-                    "/api/v1/mp/user/isJump"
+                    "/api/v1/mp/user/isJump",
+                    "/api/v1/mp/user/mall/ticket/goods/list"
                 ).permitAll()
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()

+ 120 - 5
mp-quartz/src/main/java/com/qs/mp/quartz/task/DayStatTask.java

@@ -133,10 +133,29 @@ public class DayStatTask {
     // 线上销售额和汇总
     BigDecimal onlineSumSaleAmt = BigDecimal.ZERO;
     BigDecimal onlineSumAllSaleAmt = BigDecimal.ZERO;
+
+
+    // 线上微信销售额和汇总
+    BigDecimal wxOnlineSumSaleAmt = BigDecimal.ZERO;
+    BigDecimal wxOnlineSumAllSaleAmt = BigDecimal.ZERO;
+
+    // 线上支付宝销售额和汇总
+    BigDecimal aliOnlineSumSaleAmt = BigDecimal.ZERO;
+    BigDecimal aliOnlineSumAllSaleAmt = BigDecimal.ZERO;
+
+
     // 线下销售额和汇总
     BigDecimal offlineSumSaleAmt = BigDecimal.ZERO;
     BigDecimal offlineSumAllSaleAmt = BigDecimal.ZERO;
 
+    // 线下微信销售额和汇总
+    BigDecimal wxOfflineSumSaleAmt = BigDecimal.ZERO;
+    BigDecimal wxOfflineSumAllSaleAmt = BigDecimal.ZERO;
+
+    // 线下支付宝销售额和汇总
+    BigDecimal aliOfflineSumSaleAmt = BigDecimal.ZERO;
+    BigDecimal aliOfflineSumAllSaleAmt = BigDecimal.ZERO;
+
 
     // 预付的金额统计
     BigDecimal sumPreSaleAmt = BigDecimal.ZERO;
@@ -160,6 +179,24 @@ public class DayStatTask {
                 .ge(UserTicketOrder::getPayTime, bizDay)
                 .lt(UserTicketOrder::getPayTime, DateUtils.addDays(bizDay, 1)));
 
+        Map<String, Object> wxOrderMap = userTicketOrderService.getMap(
+            new QueryWrapper<UserTicketOrder>()
+                .select("IFNULL(sum(pay_amt) ,0) as orderAmt")
+                .lambda().eq(UserTicketOrder::getBoxId, ticketBox.getBoxId())
+                .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.FINISHED)
+                .eq(UserTicketOrder::getPayType, PayTypeEnum.WXPAY.getValue())
+                .ge(UserTicketOrder::getPayTime, bizDay)
+                .lt(UserTicketOrder::getPayTime, DateUtils.addDays(bizDay, 1)));
+
+        Map<String, Object> aliOrderMap = userTicketOrderService.getMap(
+            new QueryWrapper<UserTicketOrder>()
+                .select("IFNULL(sum(pay_amt) ,0) as orderAmt")
+                .lambda().eq(UserTicketOrder::getBoxId, ticketBox.getBoxId())
+                .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.FINISHED)
+                .in(UserTicketOrder::getPayType, PayTypeEnum.ALIPAY.getValue(), "10")
+                .ge(UserTicketOrder::getPayTime, bizDay)
+                .lt(UserTicketOrder::getPayTime, DateUtils.addDays(bizDay, 1)));
+
         // 预付的金额统计
         QueryWrapper<ChannelOrder> channelOrderQueryWrapper = new QueryWrapper<>();
         channelOrderQueryWrapper.eq("t2.box_id", ticketBox.getBoxId());
@@ -170,6 +207,68 @@ public class DayStatTask {
         int preSaleAmt = channelOrderService.selectPreSaleAmtByQueryWrapper(channelOrderQueryWrapper);
 
 
+        if (wxOrderMap != null) {
+          BigDecimal orderAmt = new BigDecimal(
+            Integer.valueOf(String.valueOf(wxOrderMap.get("orderAmt")))).divide(new BigDecimal(100),
+            2, RoundingMode.DOWN);
+
+          if (isOnline) {
+            wxOnlineSumSaleAmt = wxOnlineSumSaleAmt.add(orderAmt);
+          } else {
+            wxOfflineSumSaleAmt = wxOfflineSumSaleAmt.add(orderAmt);
+          }
+          Map<String, Object> wxAllOrderMap = userTicketOrderService.getMap(
+              new QueryWrapper<UserTicketOrder>()
+                  .select("IFNULL(sum(pay_amt) ,0) as orderAmt")
+                  .lambda().eq(UserTicketOrder::getBoxId, ticketBox.getBoxId())
+                  .eq(UserTicketOrder::getPayType, PayTypeEnum.WXPAY.getValue())
+                  .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.FINISHED)
+                  .lt(UserTicketOrder::getPayTime, DateUtils.addDays(bizDay, 1)));
+          BigDecimal allOrderAmt = BigDecimal.ZERO;
+          if (Objects.nonNull(wxAllOrderMap)) {
+            allOrderAmt = new BigDecimal(
+                Integer.valueOf(String.valueOf(wxAllOrderMap.get("orderAmt")))).divide(new BigDecimal(100),
+                2, RoundingMode.DOWN);
+            if (isOnline) {
+              wxOnlineSumAllSaleAmt = wxOnlineSumAllSaleAmt.add(allOrderAmt);
+            } else {
+              wxOfflineSumAllSaleAmt = wxOfflineSumAllSaleAmt.add(allOrderAmt);
+            }
+          }
+        }
+
+        if (aliOrderMap != null) {
+          BigDecimal orderAmt = new BigDecimal(
+            Integer.valueOf(String.valueOf(aliOrderMap.get("orderAmt")))).divide(new BigDecimal(100),
+            2, RoundingMode.DOWN);
+
+          if (isOnline) {
+            aliOnlineSumSaleAmt = aliOnlineSumSaleAmt.add(orderAmt);
+          } else {
+            aliOfflineSumSaleAmt = aliOfflineSumSaleAmt.add(orderAmt);
+          }
+
+          Map<String, Object> aliAllOrderMap = userTicketOrderService.getMap(
+              new QueryWrapper<UserTicketOrder>()
+                  .select("IFNULL(sum(pay_amt) ,0) as orderAmt")
+                  .lambda().eq(UserTicketOrder::getBoxId, ticketBox.getBoxId())
+                  .in(UserTicketOrder::getPayType, PayTypeEnum.ALIPAY.getValue(), "10")
+                  .eq(UserTicketOrder::getStatus, UserTicketOrderStatusEnum.FINISHED)
+                  .lt(UserTicketOrder::getPayTime, DateUtils.addDays(bizDay, 1)));
+          BigDecimal allOrderAmt = BigDecimal.ZERO;
+          if (Objects.nonNull(aliAllOrderMap)) {
+            allOrderAmt = new BigDecimal(
+                Integer.valueOf(String.valueOf(aliAllOrderMap.get("orderAmt")))).divide(new BigDecimal(100),
+                2, RoundingMode.DOWN);
+            if (isOnline) {
+              aliOnlineSumAllSaleAmt = aliOnlineSumAllSaleAmt.add(allOrderAmt);
+            } else {
+              aliOfflineSumAllSaleAmt = aliOfflineSumAllSaleAmt.add(allOrderAmt);
+            }
+          }
+
+        }
+
         if (null != orderMap || preSaleAmt > 0) {
           BigDecimal orderAmt = BigDecimal.ZERO;
           if (Objects.nonNull(orderMap)) {
@@ -240,11 +339,27 @@ public class DayStatTask {
         }
       }
     }
-    sumSaleAmt = BigDecimal.ZERO.add(onlineSumSaleAmt).add(offlineSumSaleAmt);
-    sumAllSaleAmt = BigDecimal.ZERO.add(onlineSumAllSaleAmt).add(offlineSumAllSaleAmt);
-    sb.append("累计零售总销售金额:").append(sumAllSaleAmt).append("元,当日:").append(sumSaleAmt).append("元\n");
-    sb.append("线上累计零售销售金额:").append(onlineSumAllSaleAmt).append("元,当日:").append(onlineSumSaleAmt).append("元\n");
-    sb.append("线下累计零售销售金额:").append(offlineSumAllSaleAmt).append("元,当日:").append(offlineSumSaleAmt).append("元,").append("累计预付销售金额:").append(sumAllPreSaleAmt).append("元,当日:").append(sumPreSaleAmt).append("元\n");
+
+    BigDecimal wxSumSaleAmt = BigDecimal.ZERO.add(wxOnlineSumSaleAmt).add(wxOfflineSumSaleAmt);
+    BigDecimal wxSumAllSaleAmt = BigDecimal.ZERO.add(wxOnlineSumAllSaleAmt).add(wxOfflineSumAllSaleAmt);
+
+    BigDecimal aliSumSaleAmt = BigDecimal.ZERO.add(aliOnlineSumSaleAmt).add(aliOfflineSumSaleAmt);
+    BigDecimal aliSumAllSaleAmt = BigDecimal.ZERO.add(aliOnlineSumAllSaleAmt).add(aliOfflineSumAllSaleAmt);
+
+    sb.append("微信累计零售总销售金额:").append(wxSumAllSaleAmt).append("元,当日:").append(wxSumSaleAmt).append("元\n");
+    sb.append("支付宝累计零售总销售金额:").append(aliSumAllSaleAmt).append("元,当日:").append(aliSumSaleAmt).append("元\n");
+    sb.append("微信线上累计零售销售金额:").append(wxOnlineSumAllSaleAmt).append("元,当日:").append(wxOnlineSumSaleAmt).append("元\n");
+    sb.append("支付宝线上累计零售销售金额:").append(aliOnlineSumAllSaleAmt).append("元,当日:").append(aliOnlineSumSaleAmt).append("元\n");
+    sb.append("微信线下累计零售销售金额:").append(wxOfflineSumAllSaleAmt).append("元,当日:").append(wxOfflineSumSaleAmt).append("元,").append("累计预付销售金额:").append(sumAllPreSaleAmt).append("元,当日:").append(sumPreSaleAmt).append("元\n");
+    sb.append("支付宝线下累计零售销售金额:").append(aliOfflineSumAllSaleAmt).append("元,当日:").append(aliOfflineSumSaleAmt).append("元\n");
+
+
+
+//    sumSaleAmt = BigDecimal.ZERO.add(onlineSumSaleAmt).add(offlineSumSaleAmt);
+//    sumAllSaleAmt = BigDecimal.ZERO.add(onlineSumAllSaleAmt).add(offlineSumAllSaleAmt);
+//    sb.append("累计零售总销售金额:").append(sumAllSaleAmt).append("元,当日:").append(sumSaleAmt).append("元\n");
+//    sb.append("线上累计零售销售金额:").append(onlineSumAllSaleAmt).append("元,当日:").append(onlineSumSaleAmt).append("元\n");
+//    sb.append("线下累计零售销售金额:").append(offlineSumAllSaleAmt).append("元,当日:").append(offlineSumSaleAmt).append("元,").append("累计预付销售金额:").append(sumAllPreSaleAmt).append("元,当日:").append(sumPreSaleAmt).append("元\n");
 
 //    sb.append("累计零售销售额:").append(sumAllSaleAmt).append("元,当日:").append(sumSaleAmt).append("元\n");
 //    sb.append("累计预付销售额:").append(sumAllPreSaleAmt).append("元,当日:").append(sumPreSaleAmt).append("元\n");

+ 1 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/Goods.java

@@ -125,7 +125,7 @@ public class Goods implements Serializable {
   /**
    * 兑换大厅是否展示,0不展示,1展示
    */
-  @ApiModelProperty("兑换大厅是否展示,0不展示,1展示")
+  @ApiModelProperty("兑换大厅是否展示,0不展示,1展示,2盲票关联")
   @TableField("exchange_show")
   private Integer exchangeShow;
 

+ 89 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/TicketBoxGoods.java

@@ -0,0 +1,89 @@
+package com.qs.mp.admin.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+/**
+ * @describe 盲票商品关联表实体类
+ * @auther quanshu
+ * @create 2022-07-16 09:41:09
+ */
+@ApiModel("盲票商品关联表")
+@TableName("mp_ticket_box_goods")
+@Data
+public class TicketBoxGoods implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.INPUT)
+    private Long id;
+
+    /**
+     * 盲票组ID
+     */
+    @ApiModelProperty("盲票组ID")
+    @TableField("box_id")
+    private String boxId;
+
+    /**
+     * 商品名称
+     */
+    @ApiModelProperty("商品名称")
+    @TableField("title")
+    private String title;
+
+    /**
+     * 商品图片
+     */
+    @ApiModelProperty("商品图片")
+    @TableField("pic_url")
+    private String picUrl;
+
+    /**
+     * 关联商品id
+     */
+    @ApiModelProperty("关联商品id")
+    @TableField("ref_id")
+    private String refId;
+
+    @ApiModelProperty("商品价值")
+    @TableField("value")
+    private Integer value;
+
+    /**
+     * 逻辑删除标识
+     */
+    @ApiModelProperty("逻辑删除标识")
+    @TableField("is_deleted")
+    @TableLogic
+    private Integer isDeleted;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    @TableField("created_time")
+    private Date createdTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    @TableField("updated_time")
+    private Date updatedTime;
+
+
+}

+ 3 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/excel/UserTicketOrderExcel.java

@@ -47,6 +47,9 @@ public class UserTicketOrderExcel {
     @Excel(name = "实付金额")
     private BigDecimal payAmt;
 
+    @Excel(name = "付款方式")
+    private String payType;
+
     @Excel(name = "用户昵称")
     private String nickName;
 

+ 1 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/param/GoodsQueryParam.java

@@ -76,7 +76,7 @@ public class GoodsQueryParam {
     /**
      * 兑换大厅是否展示,0不展示,1展示
      */
-    @ApiModelProperty(value = "兑换大厅是否展示", required = false)
+    @ApiModelProperty(value = "兑换大厅是否展示0不展示,1展示, 2盲票关联", required = false)
     private Integer exchangeShow;
 
     /**

+ 5 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxCreateParam.java

@@ -1,5 +1,6 @@
 package com.qs.mp.admin.domain.param;
 
+import com.qs.mp.admin.domain.TicketBoxGoods;
 import com.qs.mp.common.enums.TicketTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -62,5 +63,8 @@ public class TicketBoxCreateParam {
 
 	@NotEmpty(message = "奖级列表不能为空")
 	@ApiModelProperty(value = "奖级列表",required=true)
-	List<TicketAwardsParam> awardsList;
+	private List<TicketAwardsParam> awardsList;
+
+	@ApiModelProperty("关联商品列表")
+	private List<TicketBoxGoods> goodsList;
 }

+ 30 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxGoodsQueryParam.java

@@ -0,0 +1,30 @@
+package com.qs.mp.admin.domain.param;
+
+import com.qs.mp.common.enums.TicketTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * 盲票票组和关联商品列表查询参数
+ * @author Cup
+ * @date 2022/7/18
+ */
+@ApiModel("盲票票组和关联商品列表查询参数")
+@Data
+public class TicketBoxGoodsQueryParam {
+
+    @ApiModelProperty(value = "盲票组ID列表",required=false)
+    private List<String> boxIds;
+
+    @ApiModelProperty(value = "分类ID",required=false)
+    private Long categoryId;
+
+    @NotNull(message = "盲票类型不能为空")
+    @ApiModelProperty(value = "盲票类型",required=true)
+    private TicketTypeEnum type;
+
+
+}

+ 5 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxUpdateParam.java

@@ -1,5 +1,6 @@
 package com.qs.mp.admin.domain.param;
 
+import com.qs.mp.admin.domain.TicketBoxGoods;
 import com.qs.mp.common.enums.TicketTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -51,5 +52,8 @@ public class TicketBoxUpdateParam {
     private BigDecimal saleCommRate;
 
     @ApiModelProperty(value = "奖级列表")
-    List<TicketAwardsParam> awardsList;
+    private List<TicketAwardsParam> awardsList;
+
+    @ApiModelProperty("关联商品列表")
+    private List<TicketBoxGoods> goodsList;
 }

+ 3 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/UserDeliverOrderQueryParam.java

@@ -50,4 +50,7 @@ public class UserDeliverOrderQueryParam {
 	@ApiModelProperty("订单来源:1提货订单,2现金购买")
 	private DeliverOrderResourceEnum resource;
 
+	@ApiModelProperty("支付类型1支付宝,2微信")
+	private String payType;
+
 }

+ 3 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/UserTicketOrderQueryParam.java

@@ -41,4 +41,7 @@ public class UserTicketOrderQueryParam {
 
     @ApiModelProperty("结束时间")
     private Date endTime;
+
+    @ApiModelProperty("支付类型1支付宝,2微信")
+    private String payType;
 }

+ 115 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/TicketBoxGoodsListVO.java

@@ -0,0 +1,115 @@
+package com.qs.mp.admin.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 盲票关联商品出参类
+ * @author Cup
+ * @date 2022/7/18
+ */
+@ApiModel("盲票关联商品出参类")
+@Data
+public class TicketBoxGoodsListVO {
+
+    @ApiModelProperty("关联商品id")
+    private String refId;
+
+    @ApiModelProperty("盲票组id")
+    private String boxId;
+    /**
+     * 盲票组标题
+     */
+    @ApiModelProperty("商品标题")
+    private String title;
+    /**
+     * 主图url
+     */
+    @ApiModelProperty("主图Url")
+    private String picUrl;
+
+    /**
+     * 盲票张数
+     */
+    @ApiModelProperty("盲票张数")
+    private Integer quantity;
+
+    /**
+     * 已售盲票张数
+     */
+    @ApiModelProperty("已售盲票张数")
+    private Integer saleQty;
+
+    /**
+     * 盲票包原价
+     */
+    @ApiModelProperty("盲票包原价")
+    private Integer pkgPrice;
+
+    /**
+     * 盲票包售价
+     */
+    @ApiModelProperty("盲票包售价")
+    private Integer pkgSalePrice;
+
+    /**
+     * 每包盲票张数
+     */
+    @ApiModelProperty("每包盲票张数")
+    private Integer pkgUnit;
+
+    /**
+     * 盲票包数
+     */
+    @ApiModelProperty("盲票包数")
+    private Integer pkgQty;
+
+    /**
+     * 已销售包数
+     */
+    @ApiModelProperty("已销售包数")
+    private Integer salePkgQty;
+
+    /**
+     * 盲票票面价格
+     */
+    @ApiModelProperty("盲票票面价格")
+    private Integer facePrice;
+
+    @ApiModelProperty("盲票原价")
+    private Integer originPrice;
+
+    /**
+     * 盲票销售价格
+     */
+    @ApiModelProperty("盲票销售价格")
+    private Integer salePrice;
+
+    @ApiModelProperty("盲票预购价")
+    private Integer prePrice;
+
+    @ApiModelProperty("盲票包预购价")
+    private Integer pkgPrePrice;
+
+    /**
+     * 分佣的销售额百分比
+     */
+    @ApiModelProperty("分佣的销售额百分比")
+    private BigDecimal saleCommRate;
+
+    /**
+     * 规格属性
+     */
+    @ApiModelProperty("规格属性")
+    private String properties;
+
+    /**
+     * 上架时间
+     */
+    @ApiModelProperty("上架时间")
+    private Date onTime;
+
+}

+ 20 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/TicketBoxGoodsVO.java

@@ -0,0 +1,20 @@
+package com.qs.mp.admin.domain.vo;
+
+import com.qs.mp.admin.domain.TicketBoxGoods;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 盲票关联商品出参类
+ * @author Cup
+ * @date 2022/7/16
+ */
+@ApiModel("盲票关联商品出参类")
+@Data
+public class TicketBoxGoodsVO extends TicketBoxGoods {
+
+    @ApiModelProperty("商品成本")
+    private Integer cost;
+
+}

+ 8 - 4
mp-service/src/main/java/com/qs/mp/admin/domain/vo/TicketBoxVO.java

@@ -2,6 +2,7 @@ package com.qs.mp.admin.domain.vo;
 
 import com.qs.mp.admin.domain.TicketBox;
 
+import com.qs.mp.admin.domain.TicketBoxGoods;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.List;
@@ -24,18 +25,21 @@ import lombok.Data;
 public class TicketBoxVO extends TicketBox {
 
   @ApiModelProperty("经销商信息")
-  List<Channel> channelList;
+  private List<Channel> channelList;
 
   @ApiModelProperty("奖级标签信息列表")
-  List<TicketAwardsLabelVO> ticketAwardsLabelList;
+  private List<TicketAwardsLabelVO> ticketAwardsLabelList;
 
   // 奖品列表(小程序端显示)
   @ApiModelProperty("奖品列表(小程序端显示)")
-  List<TicketAwardsPrizeVO> prizeList;
+  private List<TicketAwardsPrizeVO> prizeList;
 
   // 奖级列表(后台显示)
   @ApiModelProperty("奖级列表(后台显示)")
-  List<TicketAwardsVO> awardsList;
+  private List<TicketAwardsVO> awardsList;
+
+  @ApiModelProperty("关联商品列表")
+  private List<TicketBoxGoodsVO> goodsList;
 
   @ApiModelProperty("经销商分佣百分比")
   private BigDecimal channelCommRate;

+ 3 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/UserTicketOrderDetailVO.java

@@ -35,6 +35,9 @@ public class UserTicketOrderDetailVO {
     @ApiModelProperty("实付金额")
     private Integer payAmt;
 
+    @ApiModelProperty("支付类型1支付宝,2微信,10支付宝直连")
+    private String payType;
+
     @ApiModelProperty("用户昵称")
     private String nickName;
 

+ 3 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/UserTicketOrderListVO.java

@@ -41,6 +41,9 @@ public class UserTicketOrderListVO {
     @ApiModelProperty("盲票数量")
     private Integer ticketNum;
 
+    @ApiModelProperty("支付类型:1支付宝,2微信,10支付宝直连")
+    private String payType;
+
     @ApiModelProperty("实付金额")
     private Integer payAmt;
 

+ 24 - 0
mp-service/src/main/java/com/qs/mp/admin/mapper/TicketBoxGoodsMapper.java

@@ -0,0 +1,24 @@
+package com.qs.mp.admin.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.qs.mp.admin.domain.TicketBoxGoods;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qs.mp.admin.domain.vo.TicketBoxGoodsVO;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @auther quanshu
+ * @create 2022-07-16 09:41:09
+ * @describe 盲票商品关联表mapper类
+ */
+public interface TicketBoxGoodsMapper extends BaseMapper<TicketBoxGoods> {
+
+    /**
+     * 根据条件查询盲票商品关信息
+     * @param queryWrapper
+     * @return
+     */
+    List<TicketBoxGoodsVO> listByQueryWrapper(@Param(Constants.WRAPPER) QueryWrapper<TicketBoxGoods> queryWrapper);
+}

+ 9 - 0
mp-service/src/main/java/com/qs/mp/admin/mapper/TicketBoxMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.qs.mp.admin.domain.TicketBox;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qs.mp.admin.domain.vo.TicketBoxGoodsListVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -21,4 +22,12 @@ public interface TicketBoxMapper extends BaseMapper<TicketBox> {
      * @return
      */
     List<TicketBox> listBySaleChannel(@Param(Constants.WRAPPER) QueryWrapper<TicketBox> queryWrapper);
+
+    /**
+     * 根据条件查询盲票组合关联的商品列表
+     * @param queryWrapper
+     * @return
+     */
+    List<TicketBoxGoodsListVO> listTicketGoodsByQueryWrapper(@Param(Constants.WRAPPER) QueryWrapper<TicketBoxGoodsListVO> queryWrapper);
+
 }

+ 25 - 0
mp-service/src/main/java/com/qs/mp/admin/service/ITicketBoxGoodsService.java

@@ -0,0 +1,25 @@
+package com.qs.mp.admin.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qs.mp.admin.domain.TicketBoxGoods;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.admin.domain.vo.TicketBoxGoodsVO;
+import java.util.List;
+
+/**
+ * <p>
+ * 盲票商品关联表 服务类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2022-07-16
+ */
+public interface ITicketBoxGoodsService extends IService<TicketBoxGoods> {
+
+    /**
+     * 根据条件查询盲票商品关信息
+     * @param queryWrapper
+     * @return
+     */
+    List<TicketBoxGoodsVO> listByQueryWrapper(QueryWrapper<TicketBoxGoods> queryWrapper);
+}

+ 8 - 0
mp-service/src/main/java/com/qs/mp/admin/service/ITicketBoxService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.admin.domain.param.TicketBoxCreateParam;
 import com.qs.mp.admin.domain.param.TicketBoxUpdateParam;
 
+import com.qs.mp.admin.domain.vo.TicketBoxGoodsListVO;
 import java.util.List;
 
 /**
@@ -50,4 +51,11 @@ public interface ITicketBoxService extends IService<TicketBox> {
    * @return
    */
   List<TicketBox> listBySaleChannel(QueryWrapper<TicketBox> queryWrapper);
+
+  /**
+   * 根据条件查询盲票组以及关联商品列表
+   * @param queryWrapper
+   * @return
+   */
+  List<TicketBoxGoodsListVO> listTicketGoodsByQueryWrapper(QueryWrapper<TicketBoxGoodsListVO> queryWrapper);
 }

+ 28 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxGoodsServiceImpl.java

@@ -0,0 +1,28 @@
+package com.qs.mp.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qs.mp.admin.domain.TicketBoxGoods;
+import com.qs.mp.admin.domain.vo.TicketBoxGoodsVO;
+import com.qs.mp.admin.mapper.TicketBoxGoodsMapper;
+import com.qs.mp.admin.service.ITicketBoxGoodsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 盲票商品关联表 服务实现类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2022-07-16
+ */
+@Service
+public class TicketBoxGoodsServiceImpl extends ServiceImpl<TicketBoxGoodsMapper, TicketBoxGoods> implements ITicketBoxGoodsService {
+
+    @Override
+    public List<TicketBoxGoodsVO> listByQueryWrapper(QueryWrapper<TicketBoxGoods> queryWrapper) {
+        queryWrapper.eq("t1.is_deleted", 0);
+        return getBaseMapper().listByQueryWrapper(queryWrapper);
+    }
+}

+ 46 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxServiceImpl.java

@@ -12,6 +12,7 @@ import com.qs.mp.admin.domain.param.TicketAwardsParam;
 import com.qs.mp.admin.domain.param.TicketAwardsPrizeParam;
 import com.qs.mp.admin.domain.param.TicketBoxCreateParam;
 import com.qs.mp.admin.domain.param.TicketBoxUpdateParam;
+import com.qs.mp.admin.domain.vo.TicketBoxGoodsListVO;
 import com.qs.mp.admin.mapper.TicketBoxMapper;
 import com.qs.mp.admin.service.*;
 import com.qs.mp.channel.domain.Channel;
@@ -94,6 +95,14 @@ public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox
   @Autowired
   private IAsyncTaskService asyncTaskService;
 
+  @Autowired
+  private ITicketBoxGoodsService ticketBoxGoodsService;
+
+
+  @Override
+  public List<TicketBoxGoodsListVO> listTicketGoodsByQueryWrapper(QueryWrapper<TicketBoxGoodsListVO> queryWrapper) {
+    return getBaseMapper().listTicketGoodsByQueryWrapper(queryWrapper);
+  }
 
   @Override
   public List<TicketBox> listBySaleChannel(QueryWrapper<TicketBox> queryWrapper) {
@@ -125,6 +134,27 @@ public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox
     ticketBox.setSaleChannelType(param.getSaleChannelType());
     this.updateById(ticketBox);
 
+
+    // 清除盲票关联商品
+    ticketBoxGoodsService.remove(new LambdaUpdateWrapper<TicketBoxGoods>().eq(TicketBoxGoods::getBoxId, ticketBox.getBoxId()));
+
+    // 关联商品
+    if (CollectionUtils.isNotEmpty(param.getGoodsList())) {
+      // 设置boxId和商品信息
+      for (TicketBoxGoods ticketBoxGoods : param.getGoodsList()) {
+        ticketBoxGoods.setId(null);
+        ticketBoxGoods.setBoxId(ticketBox.getBoxId());
+        Goods goods = goodsService.getById(ticketBoxGoods.getRefId());
+        if (goods != null) {
+          ticketBoxGoods.setTitle(goods.getTitle());
+          ticketBoxGoods.setPicUrl(goods.getPicUrl());
+          ticketBoxGoods.setValue(goods.getValue());
+        }
+      }
+      ticketBoxGoodsService.saveBatch(param.getGoodsList());
+    }
+
+
     // 清除指定渠道内容
     ticketBoxChannelService.remove(new LambdaUpdateWrapper<TicketBoxChannel>().eq(TicketBoxChannel::getBoxId, ticketBox.getBoxId()));
 
@@ -322,6 +352,22 @@ public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox
     ticketBox.setSaleChannelType(param.getSaleChannelType());
     save(ticketBox);
 
+
+    // 关联商品
+    if (CollectionUtils.isNotEmpty(param.getGoodsList())) {
+      // 设置boxId和商品信息
+      for (TicketBoxGoods ticketBoxGoods : param.getGoodsList()) {
+        ticketBoxGoods.setBoxId(ticketBox.getBoxId());
+        Goods goods = goodsService.getById(ticketBoxGoods.getRefId());
+        if (goods != null) {
+          ticketBoxGoods.setTitle(goods.getTitle());
+          ticketBoxGoods.setPicUrl(goods.getPicUrl());
+          ticketBoxGoods.setValue(goods.getValue());
+        }
+      }
+      ticketBoxGoodsService.saveBatch(param.getGoodsList());
+    }
+
     // 指定渠道
     if (TicketBoxSaleChannelTypeEnum.PART.getValue().equals(param.getSaleChannelType())) {
       List<Long> channelIdList = param.getChannelIdList();

+ 1 - 1
mp-service/src/main/java/com/qs/mp/user/domain/UserPrizeStorage.java

@@ -88,7 +88,7 @@ public class UserPrizeStorage implements Serializable {
    */
   @TableField("in_type")
   @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
-  @ApiModelProperty("入库类型;1盲票兑奖、2盲豆兑换,3营销活动")
+  @ApiModelProperty("入库类型;1盲票兑奖、2盲豆兑换,3营销活动,4盲票购买")
   private PrizeStorageInTypeEnum inType;
 
   /**

+ 3 - 0
mp-service/src/main/java/com/qs/mp/user/domain/excel/DeliverOrderExcel.java

@@ -67,6 +67,9 @@ public class DeliverOrderExcel {
     @Excel(name = "订单类型")
     private String resource;
 
+    @Excel(name = "付款方式")
+    private String payType;
+
     /**
      * 收货人
      */

+ 7 - 1
mp-service/src/main/java/com/qs/mp/user/domain/vo/TicketOrderSettleVO.java

@@ -59,9 +59,15 @@ public class TicketOrderSettleVO {
     /**
      * 盲票标题
      */
-    @ApiModelProperty("盲票图片")
+    @ApiModelProperty("盲票标题")
     private String title;
 
+    @ApiModelProperty("盲票关联商品图片")
+    private String goodsPicUrl;
+
+    @ApiModelProperty("盲票关联商品标题")
+    private String goodsTitle;
+
 
     @ApiModelProperty("小程序appId")
     private String appId;

+ 8 - 0
mp-service/src/main/java/com/qs/mp/user/domain/vo/UserPrizeStorageVO.java

@@ -1,5 +1,9 @@
 package com.qs.mp.user.domain.vo;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.qs.mp.common.enums.TicketTypeEnum;
 import com.qs.mp.user.domain.UserPrizeStorage;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -18,4 +22,8 @@ public class UserPrizeStorageVO extends UserPrizeStorage {
 
     @ApiModelProperty("是否多sku: 0否,1是")
     private Integer isMoreSku;
+
+    @ApiModelProperty("盲票形式(线上或线下)")
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+    private TicketTypeEnum type;
 }

+ 32 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderServiceImpl.java

@@ -5,14 +5,19 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.admin.domain.Goods;
 import com.qs.mp.admin.domain.Ticket;
 import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.domain.TicketBoxGoods;
 import com.qs.mp.admin.domain.TicketPackage;
 import com.qs.mp.admin.domain.param.IndexTicketBoxTopQueryParam;
 import com.qs.mp.admin.domain.param.IndexTicketSiteTopQueryParam;
 import com.qs.mp.admin.domain.param.UserTicketOrderQueryParam;
 import com.qs.mp.admin.domain.vo.*;
+import com.qs.mp.admin.service.IGoodsService;
+import com.qs.mp.admin.service.ITicketBoxGoodsService;
 import com.qs.mp.admin.service.ITicketBoxService;
 import com.qs.mp.admin.service.ITicketPackageService;
 import com.qs.mp.admin.service.ITicketService;
@@ -40,6 +45,7 @@ import com.qs.mp.user.domain.vo.UserCoupon4OrderVO;
 import com.qs.mp.user.domain.vo.UserShareVO;
 import com.qs.mp.user.mapper.UserTicketOrderMapper;
 import com.qs.mp.user.service.IUserCouponService;
+import com.qs.mp.user.service.IUserPrizeStorageService;
 import com.qs.mp.user.service.IUserTicketOrderItemService;
 import com.qs.mp.user.service.IUserTicketOrderService;
 
@@ -127,6 +133,15 @@ public class UserTicketOrderServiceImpl extends
     @Autowired
     private DistributedLocker distributedLocker;
 
+    @Autowired
+    private ITicketBoxGoodsService ticketBoxGoodsService;
+
+    @Autowired
+    private IUserPrizeStorageService userPrizeStorageService;
+
+    @Autowired
+    private IGoodsService goodsService;
+
     @Override
     public String submitOrder(Long userId, TicketOrderSettleVO orderSettleVO,
         UserShareVO userShareVO) {
@@ -482,6 +497,23 @@ public class UserTicketOrderServiceImpl extends
                     .eq(Ticket::getTicketId, ticket.getTicketId()));
             Assert.isTrue(rtn, "支付回调用户购票订单处理,更新盲票状态失败,ticketId:" + ticket.getTicketId());
 
+
+            // 如果为线上票则发送关联商品到用户仓库
+            TicketBox ticketBox = ticketBoxService.getById(ticketOrder.getBoxId());
+            if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
+                List<TicketBoxGoods> ticketBoxGoodsList = ticketBoxGoodsService.list(new LambdaQueryWrapper<TicketBoxGoods>()
+                    .eq(TicketBoxGoods::getBoxId, ticketBox.getBoxId()));
+                if (CollectionUtils.isNotEmpty(ticketBoxGoodsList)) {
+                    for (TicketBoxGoods ticketBoxGoods : ticketBoxGoodsList) {
+                        Goods goods = goodsService.getById(Long.valueOf(ticketBoxGoods.getRefId()));
+
+                        userPrizeStorageService.takeInStorage(orderItem.getUserId(),goods.getTitle(),goods.getPicUrl(),
+                            ticketBoxGoods.getRefId(),PrizeStorageInTypeEnum.TICKET_GOODS,orderItem.getItemId());
+
+                    }
+                }
+            }
+
         }
 
         // 更新订单状态为已完成

+ 32 - 0
mp-service/src/main/resources/mapper/admin/TicketBoxGoodsMapper.xml

@@ -0,0 +1,32 @@
+<?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.admin.mapper.TicketBoxGoodsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.qs.mp.admin.domain.TicketBoxGoods">
+        <id column="id" property="id" />
+        <result column="box_id" property="boxId" />
+        <result column="title" property="title" />
+        <result column="pic_url" property="picUrl" />
+        <result column="ref_id" property="refId" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_time" property="updatedTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, box_id, title, pic_url, ref_id, is_deleted, created_time, updated_time
+    </sql>
+
+    <select id="listByQueryWrapper" resultType="com.qs.mp.admin.domain.vo.TicketBoxGoodsVO">
+        select if(t2.title is not null, t2.title, t1.title)       as title,
+               if(t2.pic_url is not null, t2.pic_url, t1.pic_url) as pic_url,
+               if(t2.value is not null, t2.value, t1.value)       as value,
+               if(t2.cost is not null, t2.cost, 0)                as cost,
+               t1.*
+        from mp_ticket_box_goods t1
+        left join mp_goods t2 on t1.ref_id = t2.goods_id
+            ${ew.customSqlSegment}
+    </select>
+</mapper>

+ 11 - 0
mp-service/src/main/resources/mapper/admin/TicketBoxMapper.xml

@@ -43,4 +43,15 @@
         left join mp_ticket_box_channel t2 on t1.box_id = t2.box_id
         ${ew.customSqlSegment}
     </select>
+
+    <select id="listTicketGoodsByQueryWrapper" resultType="com.qs.mp.admin.domain.vo.TicketBoxGoodsListVO">
+        select if(t3.title is not null, t3.title, t2.title)       as title,
+               if(t3.pic_url is not null, t3.pic_url, t2.pic_url) as pic_url,
+                t2.ref_id,
+               t1.*
+        from mp_ticket_box t1
+             left join mp_ticket_box_goods t2 on t1.box_id = t2.box_id
+             left join mp_goods t3 on t2.ref_id = t3.goods_id
+        ${ew.customSqlSegment}
+  </select>
 </mapper>

+ 10 - 3
mp-service/src/main/resources/mapper/user/UserPrizeStorageMapper.xml

@@ -25,9 +25,16 @@
     </sql>
 
     <select id="listByQueryWrapper" resultType="com.qs.mp.user.domain.vo.UserPrizeStorageVO">
-        select t1.*, t2.multi_sku isMoreSku
-        from mp_user_prize_storage t1
-         left join mp_goods t2 on t1.goods_id = t2.goods_id
+        SELECT
+        t1.*,
+        t2.multi_sku isMoreSku ,
+        t5.type
+        FROM
+        mp_user_prize_storage t1
+        LEFT JOIN mp_goods t2 ON t1.goods_id = t2.goods_id
+        LEFT JOIN mp_user_hit_prize t3 on t1.ref_id = t3.id
+        LEFT JOIN mp_ticket t4 on t3.ticket_id = t4.ticket_id
+        LEFT JOIN mp_ticket_box t5 on t4.box_id = t5.box_id
         ${ew.customSqlSegment}
     </select>
 </mapper>

+ 2 - 0
mp-service/src/main/resources/mapper/user/UserTicketOrderMapper.xml

@@ -138,6 +138,7 @@
 				t1.status,
 				t1.title,
 				t1.sale_price,
+				t1.pay_type,
 				t1.pay_amt,
 				t1.discount_amt,
 				t1.ticket_num,
@@ -160,6 +161,7 @@
 				t1.sale_comm_rate,
 				t1.sale_price,
 				t1.pay_amt,
+				t1.pay_type,
 				t1.created_time,
 				t1.ticket_num,
 				t2.nick_name,