示例#1
0
def user_index(user_id):
    """
    正式第一周 rc测试
    """
    # c = config()  # 读取测试环境配置信息, rc环境替换为程序配置
    grade_id = user_grade(user_id)
    out = Struct()
    out.know_status = -1  # 知识训练场
    out.wrong_status = -1  # 高频错题
    out.pk_status = -1  # 每周竞技
    out.month_status = -1  # 每月竞技
    out.is_open = 0  # 是否在开放日期里
    out.once_open = 1  # 往期回顾是否开放
    out.once_week = []
    out.id = 0
    week_day = datetime.date.today().weekday()
    week_info = db.tbkt_active.full_score_week_list.select(
        "id", "name", "begin_time", "end_time").order_by("begin_time")
    b_time, e_time = time_stamp()
    for i in week_info:
        if b_time <= i.begin_time < e_time:
            # 如果开始在本周之内,则算是本周课程
            out.name = i.name
            out.id = i.id
            i.open_time = i.begin_time + 9 * 3600
            out.open_time = time.strftime("%m月%d日 %H点",
                                          time.localtime(i.open_time))
            out.chance_over = pk_num(user_id, i.id).have_chance
            if week_day in (5, 6):
                # 在开课天里,返回状态关闭往期回顾
                out.once_open = 1
            if int(time.time()) >= i.open_time:
                # 达到开课时间点
                out.is_open = 1
                out.once_open = 0
                out.know_status, out.wrong_status, out.pk_status = user_knowledge_info(
                    user_id, i.id, grade_id)
                if out.pk_status == 1 and out.chance_over > 0:
                    out.pk_status = 0
        if i.begin_time < b_time:
            # 如果开始时间小于本周开始时间,则算是往期课程
            out.once_week.append(dict(id=i.id, name=i.name))
        out.once_week = sorted(out.once_week, key=lambda x: (-x["id"]))
    return out
示例#2
0
def get_user_details(user_id, way, pageno, pagesz=10):
    """
    获取用户积分明细
    -----------------------
    王晨光     2016-12-07
    -----------------------
    :param user_id: 用户ID
    :param way: 明细分类(1收入 2支出 0全部)
    :param pageno: 页号
    :param pagesz: 每页条数
    :return: {balance:余额, pagecount:总页数, details:[detail]}
    """
    us = db.slave.score_user.get(app_id=APPID, user_id=user_id)
    balance = us.score if us else 0

    details = db.slave.score_user_detail.filter(app_id=APPID, user_id=user_id)
    if way == 1:
        details = details.filter(item_no='tea_voucher_bak')
    elif way == 2:
        details = details.filter(item_no='tea_voucher')

    n = details.count()
    pagecount = int(math.ceil(1.0 * n / pagesz))
    details = details.order_by('-id')[(pageno - 1) * pagesz:pageno * pagesz]
    rows = []
    for d in details:
        item_no = d.item_no
        score = d.score
        theway = 0  # 0收入 1支出
        if item_no == 'tea_voucher':
            title = u"支出%s金豆" % score
            theway = 1
        elif item_no == 'tea_voucher_bak':
            title = u"收入%s金豆" % score
        row = Struct()
        row.id = d.id
        row.item_no = d.item_no
        row.way = theway
        row.title = title
        row.score = score
        row.remark = d.remark
        row.add_date = from_unixtime(d.add_date).strftime('%Y-%m-%d %H:%M')
        rows.append(row)
    out = {
        'balance': balance,
        'pageno': pageno,
        'pagecount': pagecount,
        'details': rows
    }
    return out
示例#3
0
def get_or_creat_test(user_id, paper_Id):
    """创建测试记录"""
    test = db.tbkt_web.active_test.get(active_id=ACTIVE_ID,
                                       object_Id=paper_Id,
                                       user_id=user_id)
    if test:
        return test
    paper = db.ziyuan.sx_paper.get(id=paper_Id)
    test_id = db.tbkt_web.active_test.create(active_id=ACTIVE_ID,
                                             object_Id=paper_Id,
                                             user_id=user_id,
                                             title=paper.name,
                                             status=-1,
                                             add_time=int(time.time()))
    test = Struct()
    test.id = test_id
    test.status = 0
    test.title = paper.name
    return test
示例#4
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
示例#5
0
def get_unit_students(request, unit_id):
    """
    获取班级学生信息
    :param request: 
    :param unit_id: 
    :return: 
    """
    url = '/class/students'
    args = dict(unit_id=unit_id)
    hub = tbktapi.Hub(request)
    r = hub.com.post(url, args)
    out = []
    if r.response == 'ok':
        stu = map(Struct, r.data.get('students'))
        for i in stu:
            info = Struct()
            info.phone = i.phone_number
            info.id = int(i.user_id)
            info.is_open = 1 if i.status in (2, 9) else 0
            info.user_name = i.user_name
            info.portrait = i.portrait  # i.units
            out.append(info)
    return out
示例#6
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
示例#7
0
def yw_paper_list(user, subject_id):
    """
    语文试卷列表
    :param user: 
    :param subject_id: 
    :return: 
    """
    from apps.terminal2018.common import p_yw_user_book
    book_info = p_yw_user_book(user.id)
    if not book_info:
        return []
    book_id = book_info.id
    paper_ids = BOOK_PAPER.get(book_id)
    if not paper_ids:
        return []
    sql = """
    select t.object_id, count(DISTINCT unit_class_id) num 
    from yw_task_new t, yw_task_class_new c
    where t.id = c.task_id and t.type = %s and t.add_user = %s and c.status > -1
    and t.object_id in %s and c.unit_class_id in (%s) group by t.object_id
    """ % (YW_TASK_TYPE, user.id, str(paper_ids), ",".join(
        str(i.id) for i in user.units))
    data = db.tbkt_yuwen.fetchall_dict(sql)
    unit_num = len(user.units) if user.units else 0

    paper_map = {i.object_id: i.num for i in data}
    out = []
    for i in paper_ids:
        d = Struct()
        name = PAPER.get(i)
        d.id = i
        d.name = name
        send_num = paper_map.get(i, 0)
        d.status = 1 if send_num >= unit_num else 0
        out.append(d)
    return out
示例#8
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
示例#9
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
示例#10
0
def p_tags(request):
    """
        @api {post} /video/tags [视频]视频踩顶
        @apiGroup video
        @apiParamExample {json} 请求示例
            {
            "object_id": 6723             # 视频ID或知识点ID
            "type": 1                     # 1: 视频ID 2: 知识点ID
            "status":                     # 1: 顶 0: 踩
            }
        @apiSuccessExample {json} 成功返回
            {"message": "", "error": "",
               "data": {
                    "agree_num": 1,
                    "status": 0,
                    "dis_agree_num": 1
                },
              "response": "ok", "next": ""}
        @apiSuccessExample {json} 失败返回
            {"message": "", "error": "", "data": "", "response": "fail", "next": ""}
        """
    """
    功能说明:                视频踩顶
    -----------------------------------------------
    修改人                    修改时间
    -----------------------------------------------
    张帅男                    2017-6-29
    """
    user_id = request.user_id
    data = Struct()
    object_id = int(request.POST.get("object_id", 0))
    v_type = int(request.POST.get("type", 0))
    status = int(request.POST.get("status", -1))  # 0 踩 1 赞
    if user_id:
        if v_type == 1:
            video_evaluation = db.slave.evaluation.select(
                'id', 'agree_num', 'dis_agree_num').filter(video_id=object_id)
        else:
            video_evaluation = db.slave.evaluation.select(
                'id', 'agree_num',
                'dis_agree_num').filter(knowledge_id=object_id)
        if video_evaluation:
            video_evaluation = video_evaluation[0]
        else:
            if v_type == 1:
                video_evaluation_id = db.default.evaluation.create(
                    video_id=object_id, add_time=time.time())
            else:
                video_evaluation_id = db.default.evaluation.create(
                    knowledge_id=object_id, add_time=time.time())
            video_evaluation = Struct()
            video_evaluation.id = video_evaluation_id
            video_evaluation.agree_num = 0
            video_evaluation.dis_agree_num = 0
        evaluation_detail = db.slave.evaluation_detail.select('status').filter(
            evaluation_id=video_evaluation.id, user_id=user_id).first()
        if evaluation_detail:
            if status > -1 and evaluation_detail.status != status:
                if status == 1:
                    video_evaluation.agree_num += 1
                    video_evaluation.dis_agree_num -= 1
                elif status == 0:
                    video_evaluation.agree_num -= 1
                    video_evaluation.dis_agree_num += 1
                db.default.evaluation_detail.filter(
                    evaluation_id=video_evaluation.id,
                    user_id=user_id).update(status=status)
                db.default.evaluation.filter(id=video_evaluation.id).update(
                    agree_num=video_evaluation.agree_num,
                    dis_agree_num=video_evaluation.dis_agree_num)
            else:
                status = evaluation_detail.status
        elif status > -1:
            if status == 1:
                video_evaluation.agree_num += 1
            elif status == 0:
                video_evaluation.dis_agree_num += 1
            db.default.evaluation_detail.create(
                evaluation_id=video_evaluation.id,
                user_id=user_id,
                status=status)
            db.default.evaluation.filter(id=video_evaluation.id).update(
                agree_num=video_evaluation.agree_num,
                dis_agree_num=video_evaluation.dis_agree_num)
        agree_num = video_evaluation.agree_num
        dis_agree_num = video_evaluation.dis_agree_num
    data.agree_num = agree_num
    data.dis_agree_num = dis_agree_num
    data.status = status
    return ajax.jsonp_ok(request, data)