目前运销平台的券分为通用券和非通用券.
通用券就是说,每张券可以重复使用. 非通用券就是说只能使用一次的券.
举个非通用券的例子:
给了100张券,没张券使用1次. 一个订单可以有1~9个乘机人,那么分配给订单时,就给订单从10张中抽取(1~9)张券就好了.这个很好理解.
举个通用券的例子:
给了9种通用券,每种券可以使用100次,那么一个带有5个乘机人的订单来了,那么应该从9种券里取5种券返回给订单.同时,把这5种券的库存-1.
本次优化的主要是通用券.
目前取券的逻辑是:
接到订单请求后,去数据库里查询可用的通用券,查询sql如下:
SELECT * FROM activity_common_voucher a1 WHERE reuse_count>=1 AND DATEDIFF(publish_date, NOW())=0 AND act_id = #actId# ORDER BY reuse_count DESC LIMIT #size#
上面的reuse_count就是通用券的库存.
activity_common_voucher 表的索引如下:
primary:id
act_publish_idx: act_id,publish_date,voucher_code