Browse Source

[x] 修复中奖人数大于奖品数问题

master
luoning 8 years ago
parent
commit
f01cbe77ec
  1. 2
      run.py
  2. 1
      src/lottery.db
  3. 17
      src/lottery.py
  4. 4
      src/random_selector.py

2
run.py

@ -2,4 +2,4 @@ @@ -2,4 +2,4 @@
# -*- coding:utf-8 -*-
from src import main
main.run('0.0.0.0', 8080, True)
main.run('127.0.0.1', 8080, True)

1
src/lottery.db

File diff suppressed because one or more lines are too long

17
src/lottery.py

@ -61,8 +61,6 @@ def award(id): @@ -61,8 +61,6 @@ def award(id):
def update(uid, award_id):
# t_users.clear_cache()
# t_awards.clear_cache()
if not t_awards.get(d.Query().award_id == award_id):
return server_resp(500, "不存在此奖品")
if len(t_users.update({'award_id': award_id}, d.Query().uid == uid)) == 0:
@ -122,21 +120,22 @@ def run(): @@ -122,21 +120,22 @@ def run():
def draw_lottery(award_id):
t_awards.clear_cache()
if not start_time:
return server_resp(402, "尚未开始抽奖")
return server_resp(503, "尚未开始抽奖")
award = t_awards.get(d.where('award_id') == award_id)
if not award:
return server_resp(500, "不存在此奖项")
t_users.clear_cache()
user = d.Query()
luckies = random_selector.randomselect(current_ms() - start_time, t_users.search(
user['award_id'] == None), award['award_capacity'])
if award['award_size'] <= 0:
return server_resp(504, "该奖项已经抽完")
luckies = random_selector.randomselect(current_ms() - start_time,
luckless_users()['data'], award['award_capacity'])
for lucky in luckies:
update(lucky['uid'], award_id)
lucky.update({'award_id': award_id})
t_awards.update({'award_size': award['award_capacity'] - len(luckies)},
doc_ids=[award.doc_id])
return server_resp(200, "success", luckies)

4
src/random_selector.py

@ -13,8 +13,10 @@ class RandomSelector(object): @@ -13,8 +13,10 @@ class RandomSelector(object):
def randselect(self, items, num):
_items = items.copy()
self._selector.shuffle(_items)
return [_items.pop(self._selector.randrange(len(_items))) for _ in range(num)]
return [_items.pop(self._selector.randrange(len(_items))) for _ in range(min(num, len(_items)))]
def randomselect(elapsed_ms, items, select_num):
if len(items) == 0:
return items
return RandomSelector(elapsed_ms).randselect(items, select_num)

Loading…
Cancel
Save