### 营销活动--优惠券 #### 商城应用 在商城的首页中,用户可以通过`领优惠券`进入到商城的领券中心。 ![1566281562821](..\img\小程序-首页-领券中心.png) 或者可以通过用户中心可进入查看到用户所领取的优惠券列表。 ![1566281878019](..\img\小程序-用户中心-优惠券.png) ![1566282035858](..\img\小程序-用户优惠券列表2.png) 用户在提交订单时候,可以对领取可用的优惠劵进行使用 ![1566282208226](..\img\小程序-优惠券使用.png) 在后台中,商家可以操作优惠券活动 ![1566282532390](..\img\后台-添加优惠券活动.png) #### 数据库设计 整体实体类关系如下图: ![1566284592886](..\img\优惠券数据关系设计2.png) Model 实体类 优惠券表中: ```java @Data @TableName("tz_coupon") public class Coupon implements Serializable { private static final long serialVersionUID = 8018312153820119913L; /** * 优惠券ID */ @TableId private Long couponId; /** * 店铺ID */ private Long shopId; /** * 优惠券名称 */ private String couponName; /** * 副标题 */ private String subTitle; /** * 优惠类型 1:代金券 2:折扣券 */ private Integer couponType; /** * 使用条件 */ private Double cashCondition; /** * 减免金额 */ private Double reduceAmount; /** * 折扣额度 */ private Double couponDiscount; /** * 生效时间 1:固定时间 2:领取后生效 */ private Integer validTimeType; /** * 开始时间 */ private Date startTime; /** * 结束时间 */ private Date endTime; /** * 领券后X天起生效 */ private Integer afterReceiveDays; /** * 有效天数 */ private Integer validDays; /** * 库存 */ private Integer stocks; /** * 适用商品类型 0全部商品参与 1指定商品参与 2指定商品不参与 */ private Integer suitableProdType; /** * 每个用户领券上限,如不填则默认为1 */ private Integer limitNum; /** * 版本号 */ private Integer version; /** * 优惠券过期状态 0:过期 1:未过期 */ private Integer overdueStatus; /** * 优惠券投放状态 0:未投放 1:投放 */ private Integer putonStatus; } ``` - `couponId` ,分组编号,自增唯一 - `shopId` ,店铺id - `couponName` ,优惠券名称 - `subTitle`,优惠券副标题 - `couponType`,优惠券类型,优惠券类型分为两种类型,代金券和折扣券 - `reduceAmount` 减免金额,会根据优惠券的类型发生改变,如果为代金券则为减免的金额,如果是折扣券则为商品的折扣。 - `cashCondition` ,使用条件,满多少金额优惠券可用 - `validTimeType` , 生效类型,可分为固定时间生效或者在用户领取后生效 固定时间生效 ![1566285471868](..\img\固定时间生效.png) 领取后生效 ![1566285583884](..\img\领取后生效.png) - `stocks` ,投放优惠券数量 - `suitableProdType` ,适用商品类型分为全部商品参与 、指定商品参与 、指定商品不参与 - `limitNum` ,限制每个用户可以领取的个数 - `version`,版本号,用于乐观锁,在高并发的时候防止冲突 - `overdueStatus`,优惠券过期状态分为过期和未过期 - `putonStatus`,优惠券投放状态可分为未投放和投放 绑定优惠券商品表 ```java @Data @TableName("tz_coupon_prod") public class CouponProd implements Serializable { /** * 优惠券商品ID */ @TableId private Long couponProdId; /** * 优惠券ID */ private Long couponId; /** * 商品ID */ private Long prodId; } ``` - `couponProdId` ,优惠券商品ID - `couponId`,优惠券商品ID - `prodId`,商品ID 用户优惠券领取表 ```java @Data @TableName("tz_coupon_user") public class CouponUser implements Serializable { private static final long serialVersionUID = 129965893236674626L; /** * 优惠券用户ID */ @TableId private Long couponUserId; /** * 优惠券ID */ private Long couponId; /** * 用户ID */ private String userId; /** * 领券时间 */ private Date receiveTime; /** * 优惠券状态 1:未使用 2:使用过 3:已失效 */ private Integer status; /** * 开始时间 */ private Date userStartTime; /** * 结束时间 */ private Date userEndTime; /** * 是否删除 */ private Integer isDelete; } ``` - `couponUserId` ,唯一自增 - `couponId`,优惠券id - `userId`,用户ID - `receiveTime` , 领取时间 - `status`,优惠券的状态(0:失效 1:有效 2:使用过 3:已失效) - `userStartTime`,用户可以使用该券的开始时间 - `userEndTime` ,用户可以使用该券的结束时间 - `isDelete` 用户是否对优惠券进行删除 用户优惠券使用记录 ```java @Data @TableName("tz_coupon_use_record") public class CouponUseRecord implements Serializable { private static final long serialVersionUID = 1L; /** * 优惠券使用id */ @TableId private Long couponUseRecordId; /** * 用户优惠券id */ private Long couponUserId; /** * 用户id */ private String userId; /** * 订单编号 */ private String orderNumber; /** * 金额 */ private Double amount; /** * 使用时间 */ private Date useTime; /** * 使用状态 */ private Integer status; } ``` - `couponUseRecordId` ,优惠券使用id - `couponUserId` ,用户优惠券id - `orderNumber`, 订单编号 - `amount`,优惠券金额 - `status` 状态