我是一段不羁的公告!
记得给艿艿这 3 个项目加油,添加一个 STAR 噢。
https://github.com/YunaiV/SpringBoot-Labs
https://github.com/YunaiV/onemall
https://github.com/YunaiV/ruoyi-vue-pro

数据库实体设计 —— 营销(4.3)之赠品

艿艿目前正在做一个开源的电商项目,胖友可以 star 下。https://gitee.com/zhijiantianya/onemall

1. 概述

本文主要分享营销模块的 赠品 的数据库实体设计

基于如下信息,逆向猜测数据库实体:

【护脸旁白】
笔者非电商行业出身 && 非有赞工程师,所以有错误或不合理的地方,烦请斧正和探讨。
有赞是个各方面都很 NICE 的公司,推荐

2. 背景了解

参见 《赠品使用操作》 文档。

我们可以看到,赠品功能将商品包装成赠品,提供给其他场景使用,例如:

  1. 满减/送活动
  2. 刮刮卡活动
  3. …. 等等

3. 数据库实体

整体实体类关系如下图:

全部实体在 Github 赠品实体目录 下可见。

3.1 Present

Present ,赠品。

注意,一个赠品只包含一个商品,并且该商品不能带有 SKU 配置。

下面我们分块分享每个字段。

3.1.1 基本信息

/**
* 编号,自增唯一
*/
private Integer id;
/**
* 店铺编号
*/
private Integer shopId;
/**
* 名称
*/
private String name;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;

3.1.2 状态信息

/**
* 状态
*
* 1-未开始
* 2-进行中
* 3-已结束
* 4-已删除
*/
private Integer status;
/**
* 结束类型
*
* 1-活动到期
* 2-手动删除
* 3-手动失效
*/
private Integer endType;
/**
* 活动到期时间
*/
private Date expireTime;
/**
* 设置为失效时间
*/
private Date invalidTime;
/**
* 删除时间
*/
private Date deleteTime;
  • status ,状态。迁移过程如下图:
  • endType ,结束类型。
  • 因为迁移状态比较灵活,所以用多个字段记录时间。
    • expireTime ,活动到期时间。
    • invalidTime ,设置为失效时间。
    • deleteTime ,删除时间。

3.1.3 周期信息

/**
* 开始时间
*/
private Date startTime;
/**
* 结束时间
*/
private Date endTime;
/**
* 领取有效期,单位:天。
*/
private Integer expirationDays;
  • expirationDays ,领取有效期,单位:天。当获得赠品时,需要在有效期内领取。

3.1.4 商品信息

/**
* 领取限制
*/
private Integer limit;
/**
* 商品编号
*/
private Integer itemId;
  • limit ,每个人领取的上限。
  • itemId ,商品编号,指向 Item.id

3.1.5 统计信息

/**
* 当前赠送数量
*/
private Integer givingNum;
/**
* 当前领取数量
*/
private Integer receiveNum;

3.2 PresentGivingRecord

PresentGivingRecord ,赠品赠送记录。

3.2.1 基本信息

/**
* 记录编号,自增唯一
*/
private Integer id;
/**
* 店铺编号
*/
private Integer shopId;
/**
* 赠品编号
*/
private Integer presentId;
/**
* 赠品名
*/
private String presentName;
/**
* 商品编号
*/
private Integer itemId;
/**
* 商品标题
*/
private Integer itemTitle;

3.2.2 状态信息

/**
* 买家编号
*/
private Integer buyerId;
/**
* 状态
*
* 1-待领取
* 2-已领取
* 3-已过期
*/
private Integer status;
/**
* 创建时间(赠送时间)
*/
private Date createTime;
/**
* 领取过期时间
*/
private Date expireTime;
/**
* 领取时间
*/
private Date receiveTime;
  • buyerId ,买家编号。
  • status ,状态。状态流程有【待领取=》已领取】、【待领取=》已过期】。举个例子:
    • 参加【满减/送】活动,PresentGivingRecord 的状态直接为已领取
    • 参加【刮刮卡】活动, PresentGivingRecord 的状态首先为待领取,买家领取后,变成已领取
  • createTime ,创建时间(赠送时间)。
  • expireTime ,创建时间。
  • expireTime ,领取过期时间。
  • receiveTime ,领取时间。

3.2.3 关联信息

/**
* 活动编号
*/
private Integer activityId;
/**
* 活动类型
*
* 【下面枚举的值不一定正确,形式是这样的形式】
* 1-满减/送活动
* 2-刮刮卡活动
*/
private Integer activityType;
/**
* 交易编号 {@link cn.iocoder.doraemon.tradegroup.trade.entity.Trade#id}
*/
private Integer tid;
  • activityId / activityType ,关联买家获得赠品所参与的活动。
  • tid ,关联的交易编号,指向 Trade.id

3.3 TradeOrder

我们需要在 TradeOrder 上,新增 isPresent 字段,标记交易明细对应的商品是否为赠品。

另外,Trade 价格相关的字段值为:

  • totalFee = 0
  • discountFee = 0
  • payment = 0
  • refundedFee = 0

4. API

基于如下整理 API 类。

4.1 PresentAPI

PresentAPI ,赠品 API。

666. 彩蛋

还是老样子,涉及到价格计算和订单上优惠信息的标记,后面单独文章分享。

总访客数 && 总访问量