Browse Source

销售订单盲票导出

cup 2 years ago
parent
commit
522e901e11

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

@@ -3,20 +3,25 @@ package com.qs.mp.web.controller.api.admin;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.qs.mp.admin.domain.excel.UserTicketOrderExcel;
+import com.qs.mp.admin.domain.excel.UserTicketOrderItemExcel;
 import com.qs.mp.admin.domain.param.UserTicketOrderQueryParam;
 import com.qs.mp.admin.domain.vo.UserTicketOrderDetailVO;
+import com.qs.mp.admin.domain.vo.UserTicketOrderItemVO;
 import com.qs.mp.admin.domain.vo.UserTicketOrderListVO;
 import com.qs.mp.common.annotation.Log;
 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.TicketPrizeTypeEnum;
 import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
 import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.user.domain.UserTicketOrder;
+import com.qs.mp.user.domain.UserTicketOrderItem;
 import com.qs.mp.user.domain.excel.DeliverOrderExcel;
 import com.qs.mp.user.domain.vo.UserDeliverOrderItemVO;
 import com.qs.mp.user.domain.vo.UserDeliverOrderVO;
+import com.qs.mp.user.service.IUserTicketOrderItemService;
 import com.qs.mp.user.service.IUserTicketOrderService;
 import com.qs.mp.utils.ExcelUtil;
 import com.qs.mp.web.controller.common.BaseApiController;
@@ -49,6 +54,10 @@ public class UserTicketOrderMgrController extends BaseApiController {
     @Autowired
     private IUserTicketOrderService userTicketOrderService;
 
+
+    @Autowired
+    private IUserTicketOrderItemService userTicketOrderItemService;
+
     @PostMapping("/list")
     @PreAuthorize("@ss.hasPermi('order:userTicket:list')")
     @ApiOperation("用户盲票订单列表")
@@ -164,4 +173,83 @@ public class UserTicketOrderMgrController extends BaseApiController {
     }
 
 
+    @Log(title = "销售订单盲票导出", businessType = BusinessType.EXPORT)
+    @PostMapping("/ticket/export")
+    @PreAuthorize("@ss.hasPermi('order:userTicket:ticketExport')")
+    @ApiOperation("销售订单盲票导出")
+    public AjaxResult ticketExport(@RequestBody UserTicketOrderQueryParam userTicketOrderQueryParam) {
+        QueryWrapper<UserTicketOrderItem> queryWrapper = new QueryWrapper<>();
+        if (StringUtils.isNotBlank(userTicketOrderQueryParam.getBoxTitle())) {
+            queryWrapper.like("t2.title", userTicketOrderQueryParam.getBoxTitle());
+        }
+        if (Objects.nonNull(userTicketOrderQueryParam.getBoxType())) {
+            queryWrapper.eq("t2.resource", userTicketOrderQueryParam.getBoxType());
+        }
+        if (StringUtils.isNotBlank(userTicketOrderQueryParam.getPhone())) {
+            queryWrapper.eq("t8.phonenumber", userTicketOrderQueryParam.getPhone());
+        }
+        if (Objects.nonNull(userTicketOrderQueryParam.getStatus())) {
+            queryWrapper.eq("t2.status", userTicketOrderQueryParam.getStatus());
+        }
+        if (Objects.nonNull(userTicketOrderQueryParam.getStartTime()) && Objects.nonNull(userTicketOrderQueryParam.getEndTime())) {
+            queryWrapper.between("t2.created_time", userTicketOrderQueryParam.getStartTime(), userTicketOrderQueryParam.getEndTime());
+        }
+        if (Objects.nonNull(userTicketOrderQueryParam.getChannelId()) && userTicketOrderQueryParam.getChannelId() != 0) {
+            queryWrapper.eq("t2.channel_id", userTicketOrderQueryParam.getChannelId());
+        }
+        queryWrapper.orderByDesc("t2.created_time");
+
+        int totalSize = userTicketOrderItemService.countUserTicketOrderItem(queryWrapper);
+        if (totalSize == 0) {
+            return AjaxResult.error("没有符合条件的用户订单");
+        }
+
+        int pageSize = 2000;
+        List<UserTicketOrderItemVO> userTicketOrderItemVOList = new ArrayList<>();
+        if (totalSize > pageSize) {
+            int totalPage = totalSize % pageSize == 0 ? totalSize / pageSize : totalSize / pageSize + 1;
+            for (int i = 0; i < totalPage; i++) {
+                queryWrapper.last("limit " + (i * pageSize) + ", " + pageSize);
+                List<UserTicketOrderItemVO> list = userTicketOrderItemService.listUserTicketOrderItem(queryWrapper);
+                if (CollectionUtils.isNotEmpty(list)) {
+                    userTicketOrderItemVOList.addAll(list);
+                }
+            }
+        } else {
+            userTicketOrderItemVOList = userTicketOrderItemService.listUserTicketOrderItem(queryWrapper);
+        }
+
+        List<UserTicketOrderItemExcel> excelList = userTicketOrderItemVOList.stream().map(userTicketOrderItemVO -> {
+            UserTicketOrderItemExcel userTicketOrderItemExcel = new UserTicketOrderItemExcel();
+            BeanUtils.copyProperties(userTicketOrderItemVO, userTicketOrderItemExcel);
+            if (Objects.nonNull(userTicketOrderItemVO.getSalePrice())) {
+                userTicketOrderItemExcel.setSalePrice(new BigDecimal(userTicketOrderItemVO.getSalePrice()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
+            }
+            if (Objects.nonNull(userTicketOrderItemVO.getTicketType())) {
+                userTicketOrderItemExcel.setTicketType(userTicketOrderItemVO.getTicketType().getDesc());
+            }
+
+            if (Objects.nonNull(userTicketOrderItemVO.getTicketStatus())) {
+                userTicketOrderItemExcel.setTicketStatus(userTicketOrderItemVO.getTicketStatus().getDesc());
+            }
+
+            if (Objects.nonNull(userTicketOrderItemVO.getOrderStatus())) {
+                userTicketOrderItemExcel.setOrderStatus(userTicketOrderItemVO.getOrderStatus().getDesc());
+            }
+
+            // 如果为盲豆,拼接盲豆数量
+            if (Objects.nonNull(userTicketOrderItemVO.getPrizeType()) && TicketPrizeTypeEnum.COIN.equals(userTicketOrderItemVO.getPrizeType())) {
+                if (StringUtils.isNotBlank(userTicketOrderItemVO.getPrizeName()) && Objects.nonNull(userTicketOrderItemVO.getValue())) {
+                    userTicketOrderItemVO.setPrizeName(userTicketOrderItemVO.getPrizeName() + userTicketOrderItemVO.getValue() + "颗");
+                }
+            }
+            return userTicketOrderItemExcel;
+        }).collect(Collectors.toList());
+
+        ExcelUtil<UserTicketOrderItemExcel> util = new ExcelUtil<>(UserTicketOrderItemExcel.class);
+        return util.exportExcel(excelList, "销售订单盲票导出", false);
+    }
+
+
+
 }

+ 4 - 0
mp-common/src/main/java/com/qs/mp/common/enums/TicketStatusEnum.java

@@ -29,6 +29,10 @@ public enum TicketStatusEnum implements IEnum<Integer> {
     return value;
   }
 
+  public String getDesc() {
+    return desc;
+  }
+
   /**
    * 重写toString,单个转化成json
    * @return

+ 64 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/excel/UserTicketOrderItemExcel.java

@@ -0,0 +1,64 @@
+package com.qs.mp.admin.domain.excel;
+
+import com.qs.mp.common.annotation.Excel;
+import com.qs.mp.common.enums.TicketPrizeTypeEnum;
+import com.qs.mp.common.enums.TicketStatusEnum;
+import com.qs.mp.common.enums.TicketTypeEnum;
+import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 用户盲票相关导出
+ * @author Cup
+ * @date 2022/5/13
+ */
+@ApiModel("用户盲票订单明细相关导出")
+@Data
+public class UserTicketOrderItemExcel {
+
+    @Excel(name = "盲票序列号")
+    private String serialNo;
+
+    @Excel(name = "盲票名称")
+    private String ticketTitle;
+
+    @Excel(name = "盲票类型")
+    private String ticketType;
+
+    @Excel(name = "盲票售价")
+    private BigDecimal salePrice;
+
+    @Excel(name = "佣金系数")
+    private BigDecimal saleCommRate;
+
+    @Excel(name = "盲票状态")
+    private String ticketStatus;
+
+    @Excel(name = "奖级")
+    private String awardsName;
+
+    @Excel(name = "奖品")
+    private String prizeName;
+
+    @Excel(name = "订单编号")
+    private String orderId;
+
+    @Excel(name = "订单状态")
+    private String orderStatus;
+
+    @Excel(name = "下单时间")
+    private Date createdTime;
+
+    @Excel(name = "用户昵称")
+    private String userName;
+
+    @Excel(name = "用户手机号")
+    private String userPhone;
+
+    @Excel(name = "经销商")
+    private String channelName;
+}

+ 71 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/UserTicketOrderItemVO.java

@@ -0,0 +1,71 @@
+package com.qs.mp.admin.domain.vo;
+
+import com.qs.mp.common.enums.TicketPrizeTypeEnum;
+import com.qs.mp.common.enums.TicketStatusEnum;
+import com.qs.mp.common.enums.TicketTypeEnum;
+import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 用户盲票订单明细相关出参类
+ * @author Cup
+ * @date 2022/5/13
+ */
+@ApiModel("用户盲票订单明细相关出参类")
+@Data
+public class UserTicketOrderItemVO {
+
+    @ApiModelProperty("盲票序列号")
+    private String serialNo;
+
+    @ApiModelProperty("盲票名称")
+    private String ticketTitle;
+
+    @ApiModelProperty("盲票类型")
+    private TicketTypeEnum ticketType;
+
+    @ApiModelProperty("盲票售价")
+    private Integer salePrice;
+
+    @ApiModelProperty("佣金系数")
+    private BigDecimal saleCommRate;
+
+    @ApiModelProperty("盲票状态")
+    private TicketStatusEnum ticketStatus;
+
+    @ApiModelProperty("奖级")
+    private String awardsName;
+
+    @ApiModelProperty("奖品")
+    private String prizeName;
+
+    @ApiModelProperty("价值")
+    private Integer value;
+
+    @ApiModelProperty("奖品类型")
+    private TicketPrizeTypeEnum prizeType;
+
+    @ApiModelProperty("订单编号")
+    private String orderId;
+
+    @ApiModelProperty("订单状态")
+    private UserTicketOrderStatusEnum orderStatus;
+
+    @ApiModelProperty("下单时间")
+    private Date createdTime;
+
+    @ApiModelProperty("用户昵称")
+    private String userName;
+
+    @ApiModelProperty("用户手机号")
+    private String userPhone;
+
+    @ApiModelProperty("经销商")
+    private String channelName;
+
+}

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.qs.mp.admin.domain.TicketAwardsPrize;
 import com.qs.mp.admin.domain.vo.TicketAwardsPrizeVO;
 import com.qs.mp.admin.domain.vo.TicketListVO;
+import com.qs.mp.admin.domain.vo.UserTicketOrderItemVO;
 import com.qs.mp.admin.domain.vo.UserTicketOrderTicketDetailVO;
 import com.qs.mp.user.domain.UserTicketOrderItem;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -30,4 +31,19 @@ public interface UserTicketOrderItemMapper extends BaseMapper<UserTicketOrderIte
    * @return
    */
   List<UserTicketOrderTicketDetailVO> listTicketDetailByOrderId(@Param(Constants.WRAPPER) QueryWrapper<UserTicketOrderTicketDetailVO> queryWrapper);
+
+  /**
+   * 根据条件获取用户盲票订单明细相关信息
+   * @param queryWrapper
+   * @return
+   */
+  List<UserTicketOrderItemVO> listUserTicketOrderItem(@Param(Constants.WRAPPER) QueryWrapper<UserTicketOrderItem> queryWrapper);
+
+  /**
+   * 统计用户盲票订单明细相关数量
+   * @param queryWrapper
+   * @return
+   */
+  int countUserTicketOrderItem(@Param(Constants.WRAPPER) QueryWrapper<UserTicketOrderItem> queryWrapper);
+
 }

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

@@ -1,8 +1,10 @@
 package com.qs.mp.user.service;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.qs.mp.admin.domain.vo.TicketListVO;
+import com.qs.mp.admin.domain.vo.UserTicketOrderItemVO;
 import com.qs.mp.admin.domain.vo.UserTicketOrderTicketDetailVO;
 import com.qs.mp.common.enums.TicketStatusEnum;
 import com.qs.mp.user.domain.UserTicketOrderItem;
@@ -56,4 +58,18 @@ public interface IUserTicketOrderItemService extends IService<UserTicketOrderIte
    * @return
    */
   List<UserTicketOrderTicketDetailVO> listTicketDetailByOrderId(String orderId);
+
+  /**
+   * 根据条件获取用户盲票订单明细相关信息
+   * @param queryWrapper
+   * @return
+   */
+  List<UserTicketOrderItemVO> listUserTicketOrderItem(QueryWrapper<UserTicketOrderItem> queryWrapper);
+
+  /**
+   * 统计用户盲票订单明细相关数量
+   * @param queryWrapper
+   * @return
+   */
+  int countUserTicketOrderItem(QueryWrapper<UserTicketOrderItem> queryWrapper);
 }

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

@@ -12,6 +12,7 @@ import com.qs.mp.user.domain.UserDeliverOrder;
 import com.qs.mp.user.domain.UserTicketOrder;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.user.domain.UserTicketOrderItem;
 import com.qs.mp.user.domain.vo.TicketOrderSettleVO;
 import com.qs.mp.user.domain.vo.UserShareVO;
 import java.util.List;

+ 11 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderItemServiceImpl.java

@@ -2,6 +2,7 @@ package com.qs.mp.user.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.admin.domain.vo.TicketListVO;
+import com.qs.mp.admin.domain.vo.UserTicketOrderItemVO;
 import com.qs.mp.admin.domain.vo.UserTicketOrderTicketDetailVO;
 import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.common.enums.TicketStatusEnum;
@@ -26,6 +27,16 @@ import org.springframework.util.CollectionUtils;
 @Service
 public class UserTicketOrderItemServiceImpl extends ServiceImpl<UserTicketOrderItemMapper, UserTicketOrderItem> implements IUserTicketOrderItemService {
 
+  @Override
+  public int countUserTicketOrderItem(QueryWrapper<UserTicketOrderItem> queryWrapper) {
+    return getBaseMapper().countUserTicketOrderItem(queryWrapper);
+  }
+
+  @Override
+  public List<UserTicketOrderItemVO> listUserTicketOrderItem(QueryWrapper<UserTicketOrderItem> queryWrapper) {
+    return getBaseMapper().listUserTicketOrderItem(queryWrapper);
+  }
+
   @Override
   public UserTicketOrderItem queryFinishedOrderItem(Long userId, String ticketId) {
     List<UserTicketOrderItem> itemList = getBaseMapper().listTicketOrderItemVO(new QueryWrapper<UserTicketOrderItem>().eq("t1.ticket_id", ticketId)

+ 41 - 0
mp-service/src/main/resources/mapper/user/UserTicketOrderItemMapper.xml

@@ -67,4 +67,45 @@
             left join mp_ticket_awards_prize t5 on t3.prize_id = t5.prize_id
         ${ew.customSqlSegment}
     </select>
+
+    <select id="listUserTicketOrderItem" resultType="com.qs.mp.admin.domain.vo.UserTicketOrderItemVO">
+        select t3.serial_no,
+               t1.title ticketTitle,
+               t2.resource ticketType,
+               t2.sale_price ,
+               t2.sale_comm_rate,
+               t3.status ticketStatus,
+               t5.name awardsName,
+               t6.title prizeName,
+               t6.value,
+               t6.prize_type,
+               t1.order_id,
+               t2.status orderStatus,
+               t2.created_time,
+               t8.user_name,
+               t8.phonenumber userPhone,
+               t7.name channelName
+        from mp_user_ticket_order_item t1
+                 left join mp_user_ticket_order t2 on t1.order_id = t2.order_id
+                 left join mp_ticket t3 on t1.ticket_id = t3.ticket_id
+                 left join mp_user_hit_prize t4 on t1.item_id = t4.order_item_id
+                 left join mp_ticket_awards t5 on t4.awards_id = t5.awards_id
+                 left join mp_ticket_awards_prize t6 on t4.prize_id = t6.prize_id
+                 left join mp_channel t7 on t2.channel_id = t7.channel_id
+                 left join sys_user t8 on t1.user_id = t8.user_id
+        ${ew.customSqlSegment}
+    </select>
+
+    <select id="countUserTicketOrderItem" resultType="int">
+        select count(*)
+        from mp_user_ticket_order_item t1
+            left join mp_user_ticket_order t2 on t1.order_id = t2.order_id
+            left join mp_ticket t3 on t1.ticket_id = t3.ticket_id
+            left join mp_user_hit_prize t4 on t1.item_id = t4.order_item_id
+            left join mp_ticket_awards t5 on t4.awards_id = t5.awards_id
+            left join mp_ticket_awards_prize t6 on t4.prize_id = t6.prize_id
+            left join mp_channel t7 on t2.channel_id = t7.channel_id
+            left join sys_user t8 on t1.user_id = t8.user_id
+        ${ew.customSqlSegment}
+    </select>
 </mapper>