瀏覽代碼

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

Dev

See merge request quanshu/mp-server!559
jiang hao 2 年之前
父節點
當前提交
9027ebd525
共有 18 個文件被更改,包括 366 次插入15 次删除
  1. 12 3
      mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/GoodsMgrController.java
  2. 49 0
      mp-common/src/main/java/com/qs/mp/common/enums/DeliverOrderResourceEnum.java
  3. 2 1
      mp-common/src/main/java/com/qs/mp/common/enums/PrizeStorageStatusEnum.java
  4. 5 0
      mp-service/src/main/java/com/qs/mp/admin/domain/Goods.java
  5. 5 0
      mp-service/src/main/java/com/qs/mp/admin/domain/GoodsSku.java
  6. 128 0
      mp-service/src/main/java/com/qs/mp/admin/domain/PrizeRecovery.java
  7. 4 0
      mp-service/src/main/java/com/qs/mp/admin/domain/TicketAwards.java
  8. 4 0
      mp-service/src/main/java/com/qs/mp/admin/domain/TicketBox.java
  9. 4 0
      mp-service/src/main/java/com/qs/mp/admin/domain/param/GoodsParam.java
  10. 5 0
      mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketAwardsParam.java
  11. 3 0
      mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxCreateParam.java
  12. 3 0
      mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxUpdateParam.java
  13. 13 0
      mp-service/src/main/java/com/qs/mp/admin/mapper/PrizeRecoveryMapper.java
  14. 16 0
      mp-service/src/main/java/com/qs/mp/admin/service/IPrizeRecoveryService.java
  15. 20 0
      mp-service/src/main/java/com/qs/mp/admin/service/impl/PrizeRecoveryServiceImpl.java
  16. 59 11
      mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxServiceImpl.java
  17. 7 0
      mp-service/src/main/java/com/qs/mp/user/domain/UserDeliverOrder.java
  18. 27 0
      mp-service/src/main/resources/mapper/admin/PrizeRecoveryMapper.xml

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

@@ -217,7 +217,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 {
@@ -226,13 +226,17 @@ public class GoodsMgrController extends BaseApiController {
         goods.setExchangePrice(firstGoodsSku.getExchangePrice());
         goods.setValue(firstGoodsSku.getValue());
         goods.setCost(firstGoodsSku.getCost());
+        goods.setDiscountRate(firstGoodsSku.getDiscountRate());
         // 累计库存
         int totalQuantity = skuList.stream().mapToInt(GoodsSku::getQuantity).sum();
         goods.setQuantity(totalQuantity);
       }
     }
     if (null == goods.getOriginPrice()) {
-      goods.setOriginPrice(goods.getExchangePrice());
+      goods.setOriginPrice(goodsParam.getExchangePrice());
+    }
+    if (null == goods.getDiscountRate()) {
+      goods.setDiscountRate(goodsParam.getDiscountRate());
     }
     // 3.插入数据
     try {
@@ -287,10 +291,15 @@ public class GoodsMgrController extends BaseApiController {
         goods.setValue(firstGoodsSku.getValue());
         goods.setCost(firstGoodsSku.getCost());
         if (null == firstGoodsSku.getOriginPrice()) {
-          goods.setOriginPrice(firstGoodsSku.getExchangePrice());
+          goods.setOriginPrice(goodsParam.getExchangePrice());
         } else {
           goods.setOriginPrice(firstGoodsSku.getOriginPrice());
         }
+        if (null == firstGoodsSku.getDiscountRate()) {
+          goods.setDiscountRate(goodsParam.getDiscountRate());
+        } else {
+          goods.setDiscountRate(firstGoodsSku.getDiscountRate());
+        }
         // 累计库存
         int totalQuantity = skuList.stream().mapToInt(GoodsSku::getQuantity).sum();
         goods.setQuantity(totalQuantity);

+ 49 - 0
mp-common/src/main/java/com/qs/mp/common/enums/DeliverOrderResourceEnum.java

@@ -0,0 +1,49 @@
+package com.qs.mp.common.enums;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONType;
+import com.baomidou.mybatisplus.annotation.IEnum;
+import com.qs.mp.common.json.EnumValueDeserializer;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 提货订单来源枚举类
+ *
+ * @author Cup
+ * @date 2022/5/23
+ */
+@ApiModel("提货订单来源枚举类")
+@JSONType(deserializer = EnumValueDeserializer.class)
+public enum DeliverOrderResourceEnum implements IEnum<Integer> {
+
+    DELIVER(1, "提货订单"),
+    PAYMENT(2, "现金购买");
+
+    private final int value;
+    private final String desc;
+
+
+    DeliverOrderResourceEnum(int value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+
+    @Override
+    public Integer getValue() {
+        return value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+
+    @Override
+    public String toString() {
+        JSONObject object = new JSONObject();
+        object.put("value", value);
+        object.put("desc", desc);
+        return object.toString();
+    }
+}

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

@@ -11,7 +11,8 @@ import com.baomidou.mybatisplus.annotation.IEnum;
 public enum PrizeStorageStatusEnum implements IEnum<Integer> {
 
   NOT_DISTRIBUTED(1, "待提货"),
-  HAS_DISTRIBUTED(2, "已提货");
+  HAS_DISTRIBUTED(2, "已提货"),
+  RECOVERY(3,"已回收");
 
 
   private final int value;

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

@@ -12,6 +12,7 @@ import com.qs.mp.common.enums.GoodsStatusEnum;
 
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -103,6 +104,10 @@ public class Goods implements Serializable {
   @TableField("cost")
   private Integer cost;
 
+  @ApiModelProperty("回收折扣")
+  @TableField("discount_rate")
+  private BigDecimal discountRate;
+
   /**
    * 库存数量
    */

+ 5 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/GoodsSku.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 import io.swagger.annotations.ApiModel;
@@ -90,6 +91,10 @@ public class GoodsSku implements Serializable {
   @TableField("cost")
   private Integer cost;
 
+  @ApiModelProperty("回收折扣")
+  @TableField("discount_rate")
+  private BigDecimal discountRate;
+
   /**
    * 库存数
    */

+ 128 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/PrizeRecovery.java

@@ -0,0 +1,128 @@
+package com.qs.mp.admin.domain;
+
+import java.math.BigDecimal;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @describe 奖品回收表实体类
+ * @auther quanshu
+ * @create 2022-05-23 14:18:27
+ */
+@TableName("mp_prize_recovery")
+@Data
+@ApiModel("奖品回收表实体类")
+public class PrizeRecovery implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.INPUT)
+    private Long id;
+
+    /**
+     * 关联奖品库id
+     */
+    @ApiModelProperty("关联奖品库id")
+    @TableField("storage_id")
+    private String storageId;
+
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户id")
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 标题
+     */
+    @ApiModelProperty("标题")
+    @TableField("title")
+    private String title;
+
+    /**
+     * 图片
+     */
+    @ApiModelProperty("图片")
+    @TableField("pic_url")
+    private String picUrl;
+
+    /**
+     * 数量
+     */
+    @ApiModelProperty("数量")
+    @TableField("num")
+    private Integer num;
+
+    /**
+     * 奖品ID(GOODS_ID或TEMPL_ID)
+     */
+    @ApiModelProperty("奖品ID(GOODS_ID或TEMPL_ID)")
+    @TableField("ref_id")
+    private String refId;
+
+    /**
+     * 奖品类型 goods 实物商品 coupon优惠券 coin平台代币 coupon_pkg券包
+     */
+    @ApiModelProperty("奖品类型 goods 实物商品 coupon优惠券 coin平台代币 coupon_pkg券包")
+    @TableField("prize_type")
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+    private String prizeType;
+
+    /**
+     * 回收折扣比例
+     */
+    @ApiModelProperty("回收折扣比例")
+    @TableField("discount_rate")
+    private BigDecimal discountRate;
+
+    /**
+     * 返回盲豆数
+     */
+    @ApiModelProperty("返还盲豆数")
+    @TableField("return_coin")
+    private Integer returnCoin;
+
+    /**
+     * 逻辑删除标识
+     */
+    @ApiModelProperty("逻辑删除标识")
+    @TableField("is_deleted")
+    @TableLogic
+    private Integer isDeleted;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    @TableField("created_time")
+    private Date createdTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    @TableField("updated_time")
+    private Date updatedTime;
+
+
+}

+ 4 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/TicketAwards.java

@@ -45,6 +45,10 @@ public class TicketAwards implements Serializable {
   @TableField("name")
   private String name;
 
+  @ApiModelProperty("奖级标签")
+  @TableField("awards_label")
+  private String awardsLabel;
+
   /**
    * 奖项顺序
    */

+ 4 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/TicketBox.java

@@ -128,6 +128,10 @@ public class TicketBox implements Serializable {
   @TableField("sale_pkg_qty")
   private Integer salePkgQty;
 
+  @ApiModelProperty("原价")
+  @TableField("origin_price")
+  private Integer originPrice;
+
   /**
    * 盲票票面价格
    */

+ 4 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/GoodsParam.java

@@ -9,6 +9,7 @@ import com.qs.mp.common.enums.GoodsStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 import javax.validation.constraints.NotNull;
@@ -76,6 +77,9 @@ public class GoodsParam {
 	@ApiModelProperty(value = "商品成本", required = false)
 	private Integer cost;
 
+	@ApiModelProperty("回收折扣")
+	private BigDecimal discountRate;
+
 	/**
 	 * 库存数量
 	 */

+ 5 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketAwardsParam.java

@@ -3,6 +3,7 @@ package com.qs.mp.admin.domain.param;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import java.util.List;
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import lombok.Data;
@@ -26,6 +27,10 @@ public class TicketAwardsParam {
   @ApiModelProperty(value = "奖级名称",required=true)
   private String name;
 
+  @NotBlank(message = "奖级标签不能为空")
+  @ApiModelProperty("奖级标签")
+  private String awardsLabel;
+
   @NotNull(message = "奖级数量不能为空")
   @ApiModelProperty(value = "奖级数量",required=true)
   private Integer quantity;

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

@@ -31,6 +31,9 @@ public class TicketBoxCreateParam {
 	@ApiModelProperty("渠道商id列表")
 	private List<Long> channelIdList;
 
+	@ApiModelProperty(value = "原价", required = false)
+	private Integer originPrice;
+
 	@NotNull(message = "面值不能为空")
 	@ApiModelProperty(value = "面值",required=true)
 	private Integer facePrice;

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

@@ -32,6 +32,9 @@ public class TicketBoxUpdateParam {
     @ApiModelProperty(value = "售价",required=true)
     private Integer salePrice;
 
+    @ApiModelProperty(value = "原价", required = false)
+    private Integer originPrice;
+
     @ApiModelProperty("销售渠道类型  1 所有渠道 2 指定渠道")
     private Integer saleChannelType;
 

+ 13 - 0
mp-service/src/main/java/com/qs/mp/admin/mapper/PrizeRecoveryMapper.java

@@ -0,0 +1,13 @@
+package com.qs.mp.admin.mapper;
+
+import com.qs.mp.admin.domain.PrizeRecovery;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @auther quanshu
+ * @create 2022-05-23 14:18:27
+ * @describe 奖品回收表mapper类
+ */
+public interface PrizeRecoveryMapper extends BaseMapper<PrizeRecovery> {
+
+}

+ 16 - 0
mp-service/src/main/java/com/qs/mp/admin/service/IPrizeRecoveryService.java

@@ -0,0 +1,16 @@
+package com.qs.mp.admin.service;
+
+import com.qs.mp.admin.domain.PrizeRecovery;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 奖品回收表 服务类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2022-05-23
+ */
+public interface IPrizeRecoveryService extends IService<PrizeRecovery> {
+
+}

+ 20 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/PrizeRecoveryServiceImpl.java

@@ -0,0 +1,20 @@
+package com.qs.mp.admin.service.impl;
+
+import com.qs.mp.admin.domain.PrizeRecovery;
+import com.qs.mp.admin.mapper.PrizeRecoveryMapper;
+import com.qs.mp.admin.service.IPrizeRecoveryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 奖品回收表 服务实现类
+ * </p>
+ *
+ * @author quanshu
+ * @since 2022-05-23
+ */
+@Service
+public class PrizeRecoveryServiceImpl extends ServiceImpl<PrizeRecoveryMapper, PrizeRecovery> implements IPrizeRecoveryService {
+
+}

+ 59 - 11
mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxServiceImpl.java

@@ -26,14 +26,7 @@ import com.qs.mp.system.service.id.BizIdGenerator;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import lombok.Data;
@@ -109,12 +102,17 @@ public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox
       throw new ServiceException("盲票组ID不能为空");
     }
     // 设置更新盲票基本信息
-    TicketBox ticketBox = new TicketBox();
+    TicketBox ticketBox = this.getById(param.getBoxId());
+    if (Objects.isNull(ticketBox)) {
+      throw new ServiceException("盲票信息不存在");
+    }
+
     ticketBox.setBoxId(param.getBoxId());
     ticketBox.setTitle(param.getTitle());
     ticketBox.setPicUrl(param.getPicUrl());
     ticketBox.setSalePrice(param.getSalePrice());
     ticketBox.setPkgSalePrice(param.getPkgSalePrice());
+    ticketBox.setOriginPrice(param.getOriginPrice());
     ticketBox.setSaleCommRate(param.getSaleCommRate());
     ticketBox.setSaleChannelType(param.getSaleChannelType());
     this.updateById(ticketBox);
@@ -169,6 +167,15 @@ public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox
         throw new ServiceException("奖品列表不能为空");
        }
 
+      // 线上票需要判断商品数量合法性
+      if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
+        int quantity = ticketAwardsParam.getPrizeList().stream().mapToInt(TicketAwardsPrizeParam::getQuantity).sum();
+        if (quantity != ticketAwardsParam.getQuantity()) {
+          throw new ServiceException("奖品总数值不相同");
+        }
+      }
+
+
        List<TicketAwardsPrize> ticketAwardsPrizeList = new ArrayList<>();
       List<String> prizeIdList = ticketAwardsParam.getPrizeList().stream().map(ticketAwardsPrizeParam -> {
         // 奖品id为空则封装要新增的奖品
@@ -205,14 +212,46 @@ public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox
           }
           ticketAwardsPrizeList.add(awardsPrize);
         } else {
-          // 更新排序权重字段
-          ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>().set(TicketAwardsPrize::getSortWeight, ticketAwardsPrizeParam.getSortWeight()).eq(TicketAwardsPrize::getPrizeId, ticketAwardsPrizeParam.getPrizeId()));
+          boolean rtn = true;
+          if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
+            TicketAwardsPrize ticketAwardsPrize = ticketAwardsPrizeService.getById(ticketAwardsPrizeParam.getPrizeId());
+            // 校验奖品数量不能少于已兑奖数量
+            if (ticketAwardsPrizeParam.getQuantity() < ticketAwardsPrize.getCashedQty()) {
+              throw new ServiceException("奖品数量不能少于已兑奖数量");
+            }
+            // 更新奖级信息等
+            rtn = ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>()
+                    .set(TicketAwardsPrize::getSortWeight, ticketAwardsPrizeParam.getSortWeight())
+                    .set(TicketAwardsPrize::getQuantity, ticketAwardsPrizeParam.getQuantity())
+                    .set(TicketAwardsPrize::getRemainQty, ticketAwardsPrizeParam.getQuantity() - ticketAwardsPrize.getCashedQty())
+                    .eq(TicketAwardsPrize::getPrizeId, ticketAwardsPrizeParam.getPrizeId())
+                    .eq(TicketAwardsPrize::getRemainQty, ticketAwardsPrize.getRemainQty()));
+
+          } else {
+            // 更新排序权重字段
+            rtn = ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>()
+                    .set(TicketAwardsPrize::getSortWeight, ticketAwardsPrizeParam.getSortWeight())
+                    .eq(TicketAwardsPrize::getPrizeId, ticketAwardsPrizeParam.getPrizeId()));
+          }
+          if (!rtn) {
+            throw new ServiceException("操作盲票频繁,请重试");
+          }
+
         }
         return ticketAwardsPrizeParam.getPrizeId();
       }).collect(Collectors.toList());
 
       // 如果新的奖品id为空,则清除原来的所有奖品
       if (CollectionUtils.isEmpty(prizeIdList)) {
+        if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
+          int cashedCount = ticketAwardsPrizeService.count(new LambdaQueryWrapper<TicketAwardsPrize>()
+                  .eq(TicketAwardsPrize::getAwardsId, ticketAwardsParam.getAwardsId())
+                  .ne(TicketAwardsPrize::getCashedQty, 0));
+          if (cashedCount != 0) {
+            throw new ServiceException("包含已兑奖记录的奖品不能从奖级中删除");
+          }
+        }
+
         ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>().set(TicketAwardsPrize::getIsDeleted, 1).eq(TicketAwardsPrize::getAwardsId, ticketAwardsParam.getAwardsId()));
       } else {
         // 去重后,清除原来的奖品
@@ -229,6 +268,15 @@ public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox
         oldPrizeIdList.removeAll(prizeIdList);
 
         if (CollectionUtils.isNotEmpty(oldPrizeIdList)) {
+          if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
+            int cashedCount = ticketAwardsPrizeService.count(new LambdaQueryWrapper<TicketAwardsPrize>()
+                    .in(TicketAwardsPrize::getPrizeId, oldPrizeIdList)
+                    .ne(TicketAwardsPrize::getCashedQty, 0));
+            if (cashedCount != 0) {
+              throw new ServiceException("包含已兑奖记录的奖品不能从奖级中删除");
+            }
+          }
+
           // 删除原来的奖品信息
           ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>().set(TicketAwardsPrize::getIsDeleted, 1).in(TicketAwardsPrize::getPrizeId, oldPrizeIdList));
         }

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

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.Version;
+import com.qs.mp.common.enums.DeliverOrderResourceEnum;
 import com.qs.mp.common.enums.DeliverOrderStatusEnum;
 import java.io.Serializable;
 import java.util.Date;
@@ -111,6 +112,12 @@ public class UserDeliverOrder implements Serializable {
   @TableField("memo")
   private String memo;
 
+
+  @ApiModelProperty("订单来源:1提货订单,2现金购买")
+  @TableField("resource")
+  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+  private DeliverOrderResourceEnum resource;
+
   /**
    * 订单状态;-1 已取消 0:待付款 1:待发货 2:待收货 3:已完成
    */

+ 27 - 0
mp-service/src/main/resources/mapper/admin/PrizeRecoveryMapper.xml

@@ -0,0 +1,27 @@
+<?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.PrizeRecoveryMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.qs.mp.admin.domain.PrizeRecovery">
+        <id column="id" property="id" />
+        <result column="storage_id" property="storageId" />
+        <result column="user_id" property="userId" />
+        <result column="title" property="title" />
+        <result column="pic_url" property="picUrl" />
+        <result column="num" property="num" />
+        <result column="ref_id" property="refId" />
+        <result column="prize_type" property="prizeType" />
+        <result column="discount_rate" property="discountRate" />
+        <result column="return_coin" property="returnCoin" />
+        <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, storage_id, user_id, title, pic_url, num, ref_id, prize_type, discount_rate, return_coin, is_deleted, created_time, updated_time
+    </sql>
+
+</mapper>