抢购业务模块(redis+mysql)
- 作者: 精中罩38C
- 来源: 51数据库
- 2022-08-12
class CatchCouponService(object):
"""
抢券活动操作
"""
def __init__(self):
self.redis_clt = Context.inst().coupon_redis
def new(self, coupon_id, total, expire=None):
"""
新建抢券活动
:param coupon_id: 优惠券id
:param total: 总数
:param expire: 超时 sec or timedelta
:return: code
"""
key = self.key(coupon_id)
self.redis_clt.set(key, total, ex=expire)
logging.warning("create new coupon activity: key(%s) count(%s) expire(%s)",
key, total, expire)
return E_SUCC
@classmethod
def key(cls, coupon_id):
"""
获取key
:param coupon_id: 优惠券id
:return: key
"""
return "coupon:%s" % coupon_id
def is_success(self, coupon_id):
"""
判断是否抢购成功
:param coupon_id:
:return: boolean, 剩余数量
"""
key = self.key(coupon_id)
count = self.redis_clt.decr(key)
if count >= 0:
return E_SUCC, count
else:
self.redis_clt.delete(key)
logging.warning("delete coupon activity: cid(%s)", key)
return E_COUPON_ACTIVITY_DONE, 0
def update(self, coupon_id, params):
"""
更新抢券活动
:param coupon_id: 优惠券id
:param params: 更新内容
:return: code
"""
key = self.key(coupon_id)
if "total" in params:
self.redis_clt.set(key, params["total"])
logging.warning("update coupon activity: total(%s)", params["total"])
if "expire" in params:
self.redis_clt.expire(key, params["expire"])
logging.warning("update coupon activity: expire(%s)", params["expire"])
return E_SUCC, None
def delete(self, coupon_id):
"""
删除
:param coupon_id: 优惠券id
:return: boolean
"""
logging.warning("delete coupon activity: key(%s)", self.key(coupon_id))
self.redis_clt.delete(self.key(coupon_id))
return E_SUCC, None
def query(self, coupon_list):
"""
查询余数
:param coupon_list: 优惠券id列表
:return: {优惠券id: 优惠券余数}
"""
# return self.redis_clt.get(self.key(coupon_id)) or 0
result = {}
key = [self.key(i) for i in coupon_list]
values = self.redis_clt.mget(key)
for i in range(len(key)):
result[coupon_list[i]] = values[i] or 0
return result
推荐阅读
热点文章
Discord.py(重写)on_member_update 无法正常工作
0
Discord.py 在 vc 中获取用户分钟数
0
discord.py 重写 |为我的命令出错
0
Discord.py rewrite 如何 DM 命令?
0
播放音频时,最后一部分被切断.如何解决这个问题?(discord.py)
0
在消息删除消息 Discord.py
0
如何使 discord.py 机器人私人/直接消息不是作者的人?
0
(Discord.py) 如何获取整个嵌入内容?
0
Discord bot 尽管获得了许可,但不能提及所有人
0
Discord.py discord.NotFound 异常
0
