def pk_user_info(user_id, school_id, class_id, province, pk_type): """ :param user_id: :param school_id: :param class_id: :param province: :param pk_type: :return: """ info = get_user_match(user_id, school_id, class_id, province, pk_type) pk_user_id = info.user_id pk_border = db.default.user_border_detail.get(user_id=pk_user_id, status=1) pk_user_profile = db.tbkt_user_slave.auth_profile.select("portrait").get( user_id=pk_user_id) pk_user_img = get_portrait(None, 1, pk_user_profile.portrait) if not pk_border: info['border_url'] = "" else: pk_user_border = db.default.border.get(id=pk_border.border_id) if not pk_user_border: info['border_url'] = "" else: pk_border_url = pk_user_border.border_url info['border_url'] = get_absurl(pk_border_url) user_object = json.loads(info.user_object or {}) user_object["img"] = pk_user_img info.user_object = json.dumps(user_object) return info
def get_ask(question_ids): """ Under the big question ask info :param question_ids :return: {} """ if not isinstance(question_ids, (list, tuple)): return {} sql = """ select a.id, a.question_id, a.content, a.video, a.image, a.parse, if(a.type, a.type, q.type) type, a.question_title, q.category, q.show_parse from yw_question q, yw_question_ask a where q.id = a.question_id and q.id in (%s) order by a.question_number """ % (join(question_ids)) asks = db.tbkt_yw.fetchall_dict(sql) if not asks: return {} ask_id = [i.id for i in asks] options = db.tbkt_yw.yw_question_options.filter(question_id__in=ask_id)[:] options_map = defaultdict(list) for i in options: options_map[i.question_id].append(i) out = defaultdict(list) for i in asks: i.image = get_absurl(i.image).replace("//", "/") i.video = get_absurl(i.video).replace("//", "/") i.content = i.content if i.content not in ("<p><br></p>", "<p><br/></p>") else "" i.question_title = format_question_title(i.question_title) i.parse = format_parse(i.parse) if not i.show_parse: i.parse = "" del i.show_parse del i.sequence del i.question_number out[i.question_id].append(i) for qid, asks in out.iteritems(): ask_len = len(asks) for i, a in enumerate(asks): a.no = "(%s)" % (i + 1) if ask_len > 1 else "" op = options_map.get(a.id) get_options(a, op) del a.category return out
def get_portrait(user, type, portrait=None): """ 功能说明:获取用户头像 ------------------------------------------------------------------------ 修改人 修改时间 修改原因 ------------------------------------------------------------------------ 杜祖永 2010-7-19 """ if portrait: return get_absurl(portrait) elif user and user.profile and user.profile.portrait.strip(): return get_absurl(user.profile.portrait) else: if type == 1: return '%s/user_media/images/profile/default-student.png' % settings.FILE_MEDIA_URLROOT elif type == 2: return '%s/user_media/images/profile/default-parents.png' % settings.FILE_MEDIA_URLROOT elif type == 3: return '%s/user_media/images/profile/default-teacher.png' % settings.FILE_MEDIA_URLROOT elif type == 4: return '%s/user_media/images/profile/default-teacher.png' % settings.FILE_MEDIA_URLROOT
def get_message(user, tid, page): """ :param user: :param tid: :param page: :return: """ # 获取所有用户留言记录 sql = ''' select user_id, content, add_time from yw_reading_message where reading_id = %s order by add_time desc limit %s, 20 ''' % (tid, (page-1)*20) data = db.tbkt_active_slave.fetchall_dict(sql) if not data: return [] # 获取用户头像、边框、姓名和时间显示方式 user_ids = [content.user_id for content in data] user_ids_str = '(' + ','.join(str(i) for i in user_ids) + ')' user_portrait = db.tbkt_user_slave.auth_profile.select('user_id', 'portrait').filter(user_id__in=user_ids) user_portrait_dict = {c.user_id:c.portrait for c in user_portrait} sql = ''' select ud.user_id, b.border_url from user_border_detail ud JOIN border b on b.id=ud.border_id where ud.user_id in %s and b.status = 1 and ud.status=1 ''' % user_ids_str user_border = db.slave.fetchall_dict(sql) user_border_dict = {c.user_id:c.border_url for c in user_border} user_name = db.tbkt_user_slave.auth_user.select('id', 'real_name').filter(id__in=user_ids) user_name_dict = {d.id:d.real_name for d in user_name} for content in data: content['user_border'] = get_absurl(user_border_dict.get(content.user_id, '')) content['user_portrait'] = get_absurl(user_portrait_dict.get(content.user_id, '')) if user_portrait_dict.get(content.user_id, '') else 'http://res-hn-beta.m.jxtbkt.cn/user_media/images/profile/default-student.png' content['add_time'] = get_time_str(content.add_time) content['user_name'] = user_name_dict.get(content.user_id, '') return data
def _get_question(question_ids): """ get question :param question_ids: :return: """ if not isinstance(question_ids, (list, tuple)): return [] questions = db.tbkt_yw.yw_question.select( "content", "video", "image", "type", "show_parse", "category", "id", "article_text").filter(id__in=question_ids)[:] if not questions: return [] out = [] ask_map = get_ask(question_ids) for k, i in enumerate(questions): d = Struct() d.article_title = "" d.article_text = "" d.content = "" if i.type == 8: # 阅读理解 d.article_title = format_content(i.content) d.article_text = i.article_text else: # 不是阅读理解 d.content = i.content d.video = get_absurl(i.video).replace("//", "/") d.image = get_absurl(i.image).replace("//", "/") d.type = i.type d.category = i.category d.no = num_to_ch(k + 1) d.num = k + 1 d.asks = ask_map.get(i.id, []) d.id = i.id out.append(d) return out
def pk_pop(user_id, user_city): """ 用户pk弹框 :param user_id: :param user_city: :return: """ # 本周一的时间戳 with db.default as dd: data = Struct() data.status = 0 data.border_url = "" data.border_id = 0 # 获取上周前100名的用户id b_time, _ = time_stamp() week = db.tbkt_active.full_score_week_list.select("id").filter(begin_time__lt=b_time)\ .order_by("-begin_time").first() if not week: return data rank_id = rank_user_id(user_id, week.id, user_city) if not rank_id: return data user_ids = [i.user_id for i in rank_id] if user_id in user_ids: # 获取竞技边框信息 border = dd.border.get(remark="竞技", status=1) if not border: return data # 竞技边框 id border_id = border.id # 竞技边框url border_url = get_absurl(border.border_url) # 保存前100名用户获取竞技头像之前的边框 user_border = dd.user_border_detail.get(user_id=user_id, status=1) if user_border: # 如果用户用使用中的边框,则更新上次使用状态改为1 dd.user_border_detail.filter(id=user_border.id).update( once_border_id=1) get_pk_border = dd.user_border_detail.get(user_id=user_id, border_id=border_id) if get_pk_border: return data dd.user_border_detail.create(user_id=user_id, border_id=border_id, add_time=int(time.time())) data.border_url = border_url data.border_id = border_id data.status = 1 return data
def get_user_border(user_id): # 获取用户头像边框url data = Struct() border_id = db.slave.user_border_detail.select('border_id').get( user_id=user_id, status=1) if not border_id: data.url = '' else: border_url = db.slave.border.select('border_url').get( id=border_id.border_id) if border_url: data.url = get_absurl(border_url.border_url) else: data.url = '' return data
def get_gifts(sort, category_id): """ 所有商品的列表 ----------------------- 王晨光 2016-12-06 ----------------------- :param sort: 排序方式(0默认按时间 1按兑换量从高到低 2按兑换量从低到高 3按价格从高到低 4按价格从低到高) category_id 分类 id :return: [礼品列表] """ # 优化 新加分类 # tm= db.slave.score_gift.select("id", "name", "img_url", "score", "gift_detail").filter(app_id=APPID, status=1, category_id=category_id) if category_id: gifts = db.slave.score_gift.select( "id", "name", "img_url", "score", "category_id", "available_date").filter( app_id=APPID, status=1, category_id=category_id).order_by('-id')[:] else: gifts = db.slave.score_gift.select( "id", "name", "img_url", "score", "category_id", "available_date").filter(app_id=APPID, status=1).order_by('-id')[:] gift_ids = [g.id for g in gifts] order_dict = get_order_dict(gift_ids) for gift in gifts: gift.img_url = get_absurl(gift.img_url) # 兑换量 gift.norder = order_dict.get(gift.id) or 0 # 判断是否为新礼品,7天以内算新品 gift.is_new = 0 if int(time.time()) - gift.available_date <= 3600 * 24 * 7: gift.is_new = 1 # 排序 if sort == 1: gifts.sort(key=lambda x: (-x.is_new, -x.norder)) elif sort == 2: gifts.sort(key=lambda x: (-x.is_new, x.norder)) elif sort == 3: gifts.sort(key=lambda x: (-x.is_new, x.norder)) elif sort == 4: gifts.sort(key=lambda x: (-x.is_new, x.voucher, x.point)) else: gifts.sort(key=lambda x: -x.is_new) return gifts
def set_portrait(self, path): """ 更新用户头像 @param path 头像相对地址 @return 头像绝对地址 """ if not path: return '' db.user.auth_profile.filter(user_id=self.id).update(portrait=path) if self.aprofile: self.aprofile.portrait = path cache.auth_profile.set(self.id, self.aprofile) else: cache.auth_profile.delete(self.id) return get_absurl(path)
def users_info_temp(user_ids): """ 获取用户姓名头像边框 :param user_ids:批量获取用户信息id :return: """ sql = """ select a.id, a.real_name, p.portrait from auth_user a, auth_profile p where a.id = p.user_id and user_id in (%s) """ % join(user_ids) user_info = db.tbkt_user.fetchall_dict(sql) user_map = {i.id: i for i in user_info} user_ids = [i.id for i in user_info] school_info = db.ketang.mobile_order_region.select( 'school_name', 'user_id', 'unit_class_id unit_id').filter( user_id__in=user_ids).group_by('user_id')[:] school_map = {i.user_id: i for i in school_info} unit_ids = [i.unit_id for i in school_info] unit_names = db.default.school_unit_class.filter(id__in=unit_ids).select( "unit_name", "id")[:] unit_map = {i.id: i.unit_name for i in unit_names} user_borders = db.default.user_border_detail.filter(user_id__in=user_ids, status=1)[:] border_map = {i.user_id: i.border_id for i in user_borders} users = [] for i in user_info: user = user_map.get(i.id) region = school_map.get(i.id, Struct()) border_id = border_map.get(i.id, 0) border_url = "" if border_id != 0: border_info = db.default.border.get(id=border_id) if border_info: border_url = border_info.border_url if not region: continue users.append( dict(user_id=i["id"], real_name=user.real_name, portrait=math_com.get_portrait(user.portrait, 1), school_name=region.school_name, unit_name=unit_map.get(region.unit_id), border_url=get_absurl(border_url))) out = {i["user_id"]: i for i in users} return out
def invite(user, subject_id, phase): one_day_after_nowt = int(time.time()) - 86400 subject_id = subject_id # 班级里的学生 all_students = db.ketang_slave.mobile_order_region.select( 'user_id').filter(user_type=1, unit_class_id=user.unit.unit_class_id)[:] all_students = [s.user_id for s in all_students] # 已参与学生 if phase == 1: all_join_student = db.tbkt_active.summer2018_stu_open_box.select( 'user_id').filter(unit_id=user.unit.unit_class_id, subject_id=subject_id)[:] else: all_join_student = db.tbkt_active.summer2018_stu_open_box.select( 'user_id').filter(unit_id=user.unit.unit_class_id, add_time__gt=PHASE_2_START_TIME, subject_id=subject_id)[:] all_join_student = [s.user_id for s in all_join_student] print all_join_student # 24小时内已被邀请学生 had_invited_stu = db.tbkt_active.summer2018_stu_invited.select( 'invited_user_id').filter(unit_id=user.unit.unit_class_id, add_time__gt=one_day_after_nowt, subject_id=subject_id)[:] had_invited_stu = [s.invited_user_id for s in had_invited_stu] # 可邀请学生的用户姓名 求差集 can_invited_stu = list( set(all_students).difference(set(all_join_student + had_invited_stu))) user_names = db.tbkt_user_slave.auth_user.select( 'id', 'real_name').filter(id__in=can_invited_stu)[:] user_id_name_dict = {s.id: s.real_name for s in user_names} # 可邀请学生的用户头像 user_portrait = db.tbkt_user_slave.auth_profile.select( 'user_id', 'portrait').filter(user_id__in=can_invited_stu)[:] for s in user_portrait: s.real_name = user_id_name_dict.get(s.user_id, '') s.portrait = get_absurl( s.portrait ) if s.portrait else "http://res-hn.m.jxtbkt.cn/user_media/images/profile/default-student.png" return user_portrait
def get_unit_student(user): # 班级下所有学生 all_students = db.ketang_slave.mobile_order_region.select( 'user_id').filter(user_type=1, unit_class_id=user.unit.unit_class_id)[:] all_students = [s.user_id for s in all_students] # 获取用户真实姓名 user_names = db.tbkt_user_slave.auth_user.select( 'id', 'real_name').filter(id__in=all_students)[:] user_id_name_dict = {s.id: s.real_name for s in user_names} # 获取所有学生的头像 user_portrait = db.tbkt_user_slave.auth_profile.select( 'user_id', 'portrait').filter(user_id__in=all_students)[:] for s in user_portrait: s.real_name = user_id_name_dict.get(s.user_id, '') s.portrait = get_absurl( s.portrait ) if s.portrait else "http://res-hn.m.jxtbkt.cn/user_media/images/profile/default-student.png" return user_portrait
def base_option(options): """ 选项基础数据 :param options: :return: """ if not options: return [] option = [] for i in options: d = Struct() d.id = i.id d.content = i.content d.image = get_absurl(i.image) d.is_right = i.is_right d.option = i.option d.ask_id = i.question_id d.link_id = i.link_id option.append(d) return option
def get_portrait(portrait, type): """ 功能说明:获取用户头像 ------------------------------------------------------------------------ 修改人 修改时间 修改原因 ------------------------------------------------------------------------ 杜祖永 2010-7-19 """ portrait = portrait.strip() if portrait else None if portrait: return get_absurl(portrait) else: if type == 1: return '%s/user_media/images/profile/default-student.png' % settings.USER_WEB_DJ_URLROOT elif type == 2: return '%s/user_media/images/profile/default-parents.png' % settings.USER_WEB_DJ_URLROOT elif type == 3: return '%s/user_media/images/profile/default-teacher.png' % settings.USER_WEB_DJ_URLROOT elif type == 4: return '%s/user_media/images/profile/default-teacher.png' % settings.USER_WEB_DJ_URLROOT
def get_borders(user_id): user_borders = db.default.user_border_detail.filter(user_id=user_id).select('border_id').flat('border_id')[:] if not user_borders: default_border = db.slave.border.select('id', 'border_url').get(remark=u'默认') give_default = db.slave.user_border_detail.get(user_id=user_id, border_id=default_border.id) if not give_default: db.slave.user_border_detail.create(user_id=user_id, border_id=default_border.id, add_time=int(time.time())) borders = db.slave.border.filter(status=1).select('id', 'border_url')[:] border_default = db.slave.border.get(remark=u'默认') for b in borders: b.is_able = 0 b.border_url = get_absurl(b.border_url) # b.border_url = "" if b.id in user_borders: b.is_able = 1 if b.id == border_default.id: b.is_able = 1 borders = sorted(borders, key=lambda x: (-x["is_able"])) return borders
def last_month_winning(): """返回上个月获奖信息""" time_range = get_last_month_range(time.time()) active_info = db.tbkt_active.excita_config.filter(end_time__range=time_range ).select('id', 'url').order_by('end_time')[:] if not active_info: return [] winning_list = db.tbkt_active.excita_draw.select('excita_id', 'real_name', 'school_name', 'phone').filter(excita_id__in=[a.id for a in active_info])[:] active_winner = {} for winner in winning_list: winner.phone = process_phone_num(winner['phone']) winner.real_name = winner['real_name'][0] + u'教师' active_winner.setdefault(winner.excita_id, []).append(winner) for a in active_info: a.url = get_absurl(a.url) a.winner = active_winner.get(a.id, []) a.winner.sort(key=lambda x: x.add_time) return active_info
def get_user_orders(user_id, pageno, pagesz): """ 获取用户订单明细 ----------------------- 王晨光 2016-12-07 ----------------------- :param user_id: 用户ID :param pageno: 页号 :param pagesz: 每页条数 :return: {pagecount:总页数, orders:[订单列表]} """ orders = db.slave.score_gift_order.filter(app_id=APPID, user_id=user_id) n = orders.count() pagecount = int(math.ceil(1.0 * n / pagesz)) orders = orders.order_by('-id')[(pageno - 1) * pagesz:pageno * pagesz] gift_ids = [o.gift_id for o in orders] gifts = db.slave.score_gift.filter(id__in=gift_ids) giftdict = {g.id: g for g in gifts} rows = [] for o in orders: gift = giftdict.get(o.gift_id) r = Struct() r.id = o.id r.order_number = o.order_number r.gift_id = gift.id if gift else 0 r.gift_name = gift.name if gift else u'' r.gift_img = get_absurl(gift.img_url) if gift else '' r.num = o.num r.score = o.score r.status = o.status r.add_time = from_unixtime(o.add_date).strftime('%Y-%m-%d %H:%M') r.update_time = from_unixtime(o.update_date).strftime('%Y-%m-%d %H:%M') r.express = o.express rows.append(r) data = {'pagecount': pagecount, 'orders': rows} return data
def get_activeity_list(): activity_info = db.tbkt_active.excita_config.select('id', 'url', 'open_person', 'start_time', 'lottery_join_num', 'end_time', 'sign_gold', 'name', 'original_price', 'type').filter(status=1).order_by('-start_time', '-end_time')[:] active_ids = [a.id for a in activity_info] # 参与人数 tea_num = {} if active_ids: sql = """ select count(1) num,excita_id from excita_sign_up where excita_id in (%s) and batch_id=0 group by excita_id """ % ','.join(str(i) for i in active_ids) rows = db.tbkt_active_slave.fetchall_dict(sql) tea_num = {i.excita_id: i.num for i in rows} for activity in activity_info: activity["strat_time_month"], activity["start_time_date"] = get_month_date(activity.start_time) activity["end_time_month"], activity["end_time_date"] = get_month_date(activity.end_time) activity.url = get_absurl(activity.url) activity["strat_time_year"] = get_year(activity.start_time) activity["end_time_year"] = get_year(activity.end_time) activity['tea_num'] = tea_num.get(activity['id'], 0) return activity_info
def get_gift(id): """ 单个商品详情 ----------------------- 王晨光 2016-12-06 ----------------------- :param id: 礼品ID :return: {id:礼品ID, } """ if not id: return gift = db.slave.score_gift.get(id=id) if not gift: return data = Struct() data.id = gift.id data.name = gift.name data.category_id = gift.category_id data.status = gift.status data.num = gift.num data.img_url = get_absurl(gift.img_url) data.score = gift.score data.gift_detail = gift.gift_detail return data
def do_image(path): "图片地址转成绝对地址" if not path: return '' return get_absurl(path)
def format_ziyuan_url(url): """ 文件url 添加前缀2天之内的用江西的前缀,否则河南的前缀 zsn """ return get_absurl(url)
def get_student_messages(user, sids, types, page, psize): """ 获取学生消息列表 -------------------- 王晨光 2017-6-7 -------------------- :param user: User :param sids: [学科ID] :param types: [消息类型], 空是全部消息 :param page: 页号 :param psize: 每页条数 :return: [消息], 总数 """ unit = user.unit if not unit: return [], 0 type_cond = "" if types: type_cond = "and m.type in (%s)" % ','.join(str(i) for i in types) subject_cond = "" if sids: subject_cond = "and m.subject_id in (%s)" % ','.join( str(i) for i in sids) nowt = int(time.time()) sql = """ select m.id, m.type, m.subject_id, m.object_id, m.add_user, m.title, m.content, m.add_time, m.end_time endtime, m.images, m.begin_time from message m inner join message_class c on c.message_id=m.id and c.unit_class_id=%s and (c.student_ids='' or c.student_ids like '%%|%s|%%') where m.status=1 AND m.begin_time <= %s %s %s order by m.begin_time desc,m.add_time desc, m.object_id desc limit %s, %s """ % (unit.id, user.id, nowt, subject_cond, type_cond, (page - 1) * psize, psize) messages = db.slave.fetchall_dict(sql) for m in messages: if m.type == 1 and m.images: # 格式化图片 m.images = map(lambda x: get_absurl(x), json.loads(m.images)) else: m.images = [] m.units = [{'id': unit.id, 'name': unit.name}] m.add_time = from_unixtime(m.add_time) m.end_time = from_unixtime(m.endtime) m.begin_time = from_unixtime(m.begin_time) m.is_active = 0 # 补充完成状态 task_messages = [m for m in messages if m.type in (2, 7, 8, 9, 101)] groups = itertools.groupby(task_messages, lambda x: x.subject_id) status_d = {} for subject_id, msgs in groups: task_ids = [m.object_id for m in msgs] d = get_task_status(user.id, subject_id, task_ids) for task_id, status in d.items(): status_d[(subject_id, task_id)] = status msg_ids = [m.id for m in messages if m.type == 10] outside_status = get_outside_task_status(user.id, msg_ids) for m in messages: if m.type == 10: # 判断课外作业状态 m.test_status = 1 if m.id in outside_status else 0 if int(time.time()) > m.endtime: # 如果用户没有提交, 到结束时间用户将不能提交 m.test_status = 1 else: test_status = status_d.get((m.subject_id, m.object_id)) or 0 if test_status != 1 and int(time.time()) > m.endtime: test_status = 3 m.test_status = test_status # 计算总数 sql = """ select count(distinct m.id) n from message m inner join message_class c on c.message_id=m.id and c.unit_class_id=%s and (c.student_ids='' or c.student_ids like '%%|%s|%%') where m.status=1 and m.begin_time <= %s %s %s """ % (unit.id, user.id, nowt, subject_cond, type_cond) row = db.slave.fetchone(sql) total = row[0] if row else 0 return messages, total
def get_teacher_messages(user, sids, types, page, psize): """ 获取教师消息列表 -------------------- 王晨光 2017-6-7 -------------------- :param user: User :param sids: [学科ID], 空是全部消息 :param types: [消息类型], 空是全部消息 :param page: 页号 :param psize: 每页条数 :return: [消息], 总数 """ units = user.units unit_ids = [u.id for u in units] if not unit_ids: return [], 0 unit_ids_s = ','.join(str(i) for i in unit_ids) unitd = {u.id: u for u in units} type_cond = "" if types: type_cond = "and m.type in (%s)" % ','.join(str(i) for i in types) subject_cond = "" nowt = int(time.time()) if sids: subject_cond = "and m.subject_id in (%s)" % ','.join( str(i) for i in sids) sql = """ select m.id, m.type, m.subject_id, m.object_id, m.add_user, m.title, m.content, m.add_time, group_concat(c.unit_class_id) unit_ids, m.images from message m inner join message_class c on c.message_id=m.id and c.unit_class_id in (%s) where m.status=1 and m.begin_time <= %s and m.add_user=%s %s %s group by m.begin_time desc limit %s, %s """ % (unit_ids_s, nowt, user.id, subject_cond, type_cond, (page - 1) * psize, psize) messages = db.slave.fetchall_dict(sql) for m in messages: if m.type == 1 and m.images: # 格式化图片 m.images = map(lambda x: get_absurl(x), json.loads(m.images)) else: m.images = [] class_ids = m.pop('unit_ids', '') class_ids = [int(i) for i in class_ids.split(',') if i] classes = [] for i in class_ids: unit = unitd.get(i) if unit: classes.append({'id': unit.id, 'name': unit.name}) m.units = classes m.add_time = from_unixtime(m.add_time) # 计算总数 sql = """ select count(distinct m.id) n from message m inner join message_class c on c.message_id=m.id and c.unit_class_id in (%s) where m.status=1 and m.begin_time <= %s and m.add_user=%s %s %s """ % (unit_ids_s, nowt, user.id, subject_cond, type_cond) row = db.slave.fetchone(sql) total = row[0] if row else 0 return messages, total
def border(self): "获取头像边框" if self.profile: return get_absurl(self.profile.border) return ""
def get_user_info(user_id): ''' 获取活动入口所需数据 ''' nowt = time.time() nowday = get_day(nowt) # 获取开通科目数量 0 1 2 3 open_status = get_user_open_status(user_id) # 获取连续登录日期, 并增加积分与道具 login_info = db.tbkt_active.winter_user_sign.select( 'num', 'update_time', 'had_receive').get(user_id=user_id) # 头一次登录,增加道具信息,积分信息与登录信息 if not login_info: db.tbkt_active.winter_user_sign.create( user_id=user_id, num=1, update_time=nowt, ) login_day = 1 had_receive = 0 # 首次登录增加道具信息, 但不增加道具 add_stage_property_and_score(login_day, user_id, nowt) # 连续登录增加道具 else: login_info_update_time = get_day(login_info['update_time']) if login_info_update_time == 31: login_info_update_time = 0 if login_info_update_time < nowday: # 判断是否连续登录 更新连续登录日期 添加道具与积分 if nowday - login_info_update_time == 1: # 开通用户每日头一次登录每种道具送一个 if open_status: operate_props(user_id, 1, { 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1 }, nowt, 0) # 连续登录增加道具 login_day = login_info['num'] + 1 add_stage_property_and_score(login_day, user_id, nowt) if login_day == 8: # 第八天要还原成上个周期来赠送道具和积分 也就是第九天登录按第二天计算 login_day = 1 db.tbkt_active.winter_user_sign.filter( user_id=user_id).update(num=login_day, update_time=nowt) login_day = 8 else: db.tbkt_active.winter_user_sign.filter( user_id=user_id).update(num=login_day, update_time=nowt) else: db.tbkt_active.winter_user_sign.filter(user_id=user_id).update( num=1, update_time=nowt) login_day = 1 elif login_info_update_time == nowday: # 今天登陆过 不增加道具 login_day = login_info['num'] else: db.tbkt_active.winter_user_sign.filter(user_id=user_id).update( update_time=nowt) login_day = 1 had_receive = login_info['had_receive'] # 获取能量值 data = db.tbkt_active.winter_user_score.select('score').get( user_id=user_id, type=2, day=nowday) if not data: score = 5 if open_status > 0 else 3 db.tbkt_active.winter_user_score.create( user_id=user_id, type=2, day=nowday, add_time=nowt, score=score, ) db.tbkt_active.winter_user_score_detail.create( user_id=user_id, score=score, type=2, remark='%s月%s日登陆获取<span style="color:#e42a39">%s个能量值</span>' % (get_month(nowt), nowday, score), item_no='energy', add_time=nowt, ) data = db.tbkt_active.winter_user_score.select('score').get( user_id=user_id, type=2, day=nowday) data['power_num'] = data.score # 判断是否领取过大礼包 if open_status - had_receive > 0: take_a_big_gift = open_status - had_receive for i in range(take_a_big_gift): get_a_big_gift(user_id, nowt) db.tbkt_active.winter_user_sign.filter(user_id=user_id).update( had_receive=open_status) # 获取领取大礼包后的能量值 data = db.tbkt_active.winter_user_score.select('score').get( user_id=user_id, type=2, day=nowday) data['power_num'] = data.score else: take_a_big_gift = 0 # 获奖通知 notice = db.tbkt_active.winter_user_award.select('award_id', 'day').get( user_id=user_id, notice_status=0) if notice: award_day = notice['day'] notice = notice['award_id'] db.tbkt_active.winter_user_award.filter( user_id=user_id, notice_status=0).update(notice_status=1) else: award_day = 0 notice = 0 # 获取积分 score = db.tbkt_active.winter_user_score.select('score').get( user_id=user_id, type=1) if not score: db.tbkt_active.winter_user_score.create(user_id=user_id, type=1, day=0, add_time=nowt, score=0) score = 0 else: score = score.score # 获取奖品列表 award_info = db.tbkt_active.winter_award.select( 'id', 'name', 'image_url').filter(status=1).order_by('seq')[:] for award in award_info: award['image_url'] = get_absurl(award['image_url']) # 获取排名 range_num = db.tbkt_active.winter_user_score.select('id').filter( score__gt=score, type=1) range_num = range_num.count() + 1 data['notice'] = notice data['range_num'] = range_num data['award_info'] = award_info data['login_day'] = login_day data['open_status'] = open_status data['score'] = score data['take_a_big_gift'] = take_a_big_gift data['award_day'] = award_day return data