def get(self, aid): """访问抽奖页面""" account = self.account_manager.get_account_by_aid(aid) if not account: raise HTTPError(404) scratch = self.event_manager.get_event(aid, self.TYPE_SCRATCH) if not scratch: raise HTTPError(404) openid = self.get_argument('i', None) fans = self.fans_manager.get_fans_by_openid(openid) if not fans: raise HTTPError('无效的用户') member = self.card_manager.get_card_member_by_openid(aid, openid) if not member and scratch.member: self.redirect('/card/%s?i=%s&m=%s' % (self.card_manager.get_card_by_aid(aid).cid, openid, u'注册为会员后参与活动')) return num = self.event_manager.get_event_num_by_openid(openid, aid, self.TYPE_SCRATCH) hit_num = self.event_manager.get_hit_event_num_by_openid(openid, aid, self.TYPE_SCRATCH) # 抽奖活动持续总时间 current = int(time.time()) hit = 0 hit_prize = '' sn = 0 _id = 0 if not hit_num and num < scratch.times and scratch.start < current < scratch.end and scratch.active: # 去抽奖 length = scratch.length num_sum = scratch.num_sum # 抽奖间隔 offset = int(length) / int(num_sum) count_start = current - offset since = datetime.datetime.fromtimestamp(count_start) since_hit_num = self.event_manager.hit_num_since_date(aid, since, self.TYPE_SCRATCH) if not since_hit_num: # 之前的没被抽中,中奖 sn = generate_digits(8) num_limit = [scratch.num_1, scratch.num_2, scratch.num_3] for i in range(3, 0, -1): if num_limit[i - 1] > self.event_manager.hit_num_by_pirze(aid, i, self.TYPE_SCRATCH): hit = 1 if i == 3: hit_prize = '三等奖' elif i == 2: hit_prize = '二等奖' elif i == 1: hit_prize = '一等奖' _id = int(self.event_manager.save_event_result(aid, openid, i, sn, self.TYPE_SCRATCH)) break else: self.event_manager.save_event_result(aid, openid, 0, 0, self.TYPE_SCRATCH) if not sn: self.event_manager.save_event_result(aid, openid, 0, 0, self.TYPE_SCRATCH) self.render('event/scratch.html', scratch=scratch, account=account, openid=openid, num=num, hit_num=hit_num, hit=hit, hit_prize=hit_prize, sn=sn, id=_id)
def _process_image_message(self, account, message, path): """接收用户发送的图片消息""" aid = account.aid openid = message['FromUserName'] self.message_manager.receive_image_message(message, aid) auto = self.auto_manager.get_image_auto(aid) if auto: # 回复验证码 code = key_util.generate_digits(8) if self.auto_manager.has_code(aid, openid): content = auto.re_content.split('&&')[2] elif self.auto_manager.count_code_response(aid) >= auto.num: content = auto.re_content.split('&&')[1] else: content = auto.re_content.split('&&')[0].replace('#code#', code) self.auto_manager.save_code_response(openid, aid, code) return message_util.text_response_to_message(content, message, path, account.wei_account)
def post(self, *args, **kwargs): aid = args[0] account = self.account_manager.get_account_by_aid(aid) if not account: self.write({'r': 0, 'e': 'invalid account'}) return openid = self.get_argument('openid', None) fans = self.fans_manager.get_fans_by_openid_aid(openid, args[0]) if not fans: self.write({'r': 0, 'e': 'invalid user'}) return event = self.event_manager.get_event(aid, self.TYPE_LOTTERY) if not event: raise HTTPError(404) hit_num = self.event_manager.get_hit_event_num_by_openid(openid, aid, self.TYPE_LOTTERY) # 抽奖活动持续总时间 current = int(time.time()) hit = 0 hit_class = 0 hit_prize = '' sn = 0 _id = 0 num = self.event_manager.get_event_num_by_openid(openid, aid, self.TYPE_LOTTERY) if hit_num: result = {'r': 0, 'e': u'已经中过奖啦~'} self.write(result) return if num >= event.times: result = {'r': 0, 'e': u'超过次数限制啦~'} self.write(result) return if not hit_num and num < event.times and event.start < current < event.end and event.active: # 去抽奖 length = event.length num_sum = event.num_sum # 抽奖间隔 offset = int(length) / int(num_sum) count_start = current - offset since = datetime.datetime.fromtimestamp(count_start) since_hit_num = self.event_manager.hit_num_since_date(aid, since, self.TYPE_LOTTERY) if not since_hit_num: # 之前的没被抽中,中奖 sn = generate_digits(8) num_limit = [event.num_1, event.num_2, event.num_3] for i in range(3, 0, -1): if num_limit[i - 1] > self.event_manager.hit_num_by_pirze(aid, i, self.TYPE_LOTTERY): hit = 1 if i == 3: hit_prize = '三等奖' hit_class = 3 elif i == 2: hit_prize = '二等奖' hit_class = 2 elif i == 1: hit_prize = '一等奖' hit_class = 1 _id = int(self.event_manager.save_event_result(aid, openid, i, sn, self.TYPE_LOTTERY)) break else: self.event_manager.save_event_result(aid, openid, 0, 0, self.TYPE_LOTTERY) if not sn: self.event_manager.save_event_result(aid, openid, 0, 0, self.TYPE_LOTTERY) result = {'r': 1, 'hit': hit, 'id': _id, 'sn': sn, 'hit_prize': hit_prize, 'hit_num': hit_class} self.write(result)