Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
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
Ejemplo n.º 12
0
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
Ejemplo n.º 13
0
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
Ejemplo n.º 14
0
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
Ejemplo n.º 15
0
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
Ejemplo n.º 16
0
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
Ejemplo n.º 17
0
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
Ejemplo n.º 18
0
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
Ejemplo n.º 19
0
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
Ejemplo n.º 20
0
def do_image(path):
    "图片地址转成绝对地址"
    if not path:
        return ''
    return get_absurl(path)
Ejemplo n.º 21
0
def format_ziyuan_url(url):
    """
    文件url 添加前缀2天之内的用江西的前缀,否则河南的前缀
    zsn
    """
    return get_absurl(url)
Ejemplo n.º 22
0
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
Ejemplo n.º 23
0
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
Ejemplo n.º 24
0
 def border(self):
     "获取头像边框"
     if self.profile:
         return get_absurl(self.profile.border)
     return ""
Ejemplo n.º 25
0
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