Ejemplo n.º 1
0
def pop_up(user, pop_type, user_city):
    """
    获取是否弹框提示
    每周只弹一次
    :param user:
    :param pop_type:
    :return: 
    """
    info = Struct()
    info.status = 0
    unit = user.unit
    if not unit or unit.grade_id > 6:
        return info
    key = (user.id, pop_type, get_weekend_stamp())
    data = cache.hd_full_pop_up.get(key)
    if not data:
        cache.hd_full_pop_up.set(key, '1')
        if pop_type == "home":
            data = pk_pop(user.id, user_city)
            return data
        if pop_type == "click":
            user_grade(user.id)
        info.status = 1
    if pop_type == "info":
        key = (user.id, "click", get_weekend_stamp())
        data = cache.hd_full_pop_up.get(key)
        if not data:
            info.status = 1
    return info
Ejemplo n.º 2
0
def p_version(request):
    """
    @api {get} /system/version [系统]检查版本
    @apiGroup system
    @apiParamExample {json} 请求示例
        {"type":客户端类型, "api":客户端当前内部版本号}

        type客户端类型:
        9安卓学生 10安卓教师 11苹果学生 12苹果教师 13 H5学生 14 H5教师 15 H5活动 16 H5学测评学生 17 H5学测评教师
    @apiSuccessExample {json} 成功返回
    {
        "message": "",
        "next": "",
        "data": {
            "title": "同步课堂手机客户端",
            "last_version": "2.3.12",
            "release_date": "2016-06-27 10:55:04",
            "update": 2,  # 0:不更新  1:选择性更新  2:强制更新
            "content": "2.2.3巫妖王",
            "download": "http://file.tbkt.cn/upload_media/apk/tbkt_stu_android/tbkt_stu_android-release-16.apk"
        },
        "response": "ok",
        "error": ""
    }
    @apiSuccessExample {json} 失败返回
    {
        "message": "找不到该类型的版本信息",
        "next": "",
        "data": "",
        "response": "fail",
        "error": ""
    }
    """
    args = request.QUERY.casts(type=int, api=int)
    type = args.type or 0
    user_api = args.api or 0

    version = db.slave.system_version.filter(type=type).order_by(
        'api', 'release_date').last()

    if not version:
        return ajax.jsonp_fail(request, message="找不到该类型的版本信息")

    data = Struct()
    data.last_version = version.version
    data.release_date = version.release_date
    data.title = version.title
    data.content = version.content
    data.download = version.download
    data.update = 0  # 0:不更新  1:选择性更新  2:强制更新
    min_version = db.slave.system_version.filter(type=type, must=1).order_by(
        'api', 'release_date').last()  # 最低版本
    if min_version and user_api < min_version.api:
        data.update = 2  # 用户版本小于系统设置最低版本则强制更新
    elif user_api < version.api:  # 小于最新版本
        data.update = 2 if version.must else 1  # 根据最新版本设置返回是否需要强制更新

    return ajax.jsonp_ok(request, data)
Ejemplo n.º 3
0
def r_info(request):
    """
    @api /huodong/sx/normal/com/info [数学常态活动]积分信息 
    @apiGroup math_normal
    @apiSuccessExample {json} 成功返回
    {
        "message": "",
        "next": "",
        "data": {
            "score": 0,   # 用户积分
            "num": 0,
            "top": 0
        },
        "response": "ok",
        "error": ""
    }
    """
    user, active_id = base(request)
    out = Struct()
    out.open_add = -1
    if user.type == 1:
        out.open_add = common.stu_open_add_score(user)

    info = common.get_user_score(user, active_id)
    out.score = info.score
    cost = TEA_LOTTERY_COST if user.is_teacher else STU_LOTTERY_COST
    out.num = info.score/cost
    out.top = info.rank_no
    out.user_id=user.id
    out.is_teacher = user.is_teacher
    return ajax_json.jsonp_ok(request, out)
Ejemplo n.º 4
0
def get_status(user):
    """
    是否可以参加活动领金币
    :param user_id:
    :return:
    """

    # 三门峡用户不参加此次活动
    data = Struct()
    sid = user.subject_id
    data.status = 0
    num = db.tbkt_active.active_score_gift.select("end_num").get(active_id=14)
    data.num = num.end_num
    region = db.ketang_slave.mobile_order_region.get(user_id=user.id)

    if region and region.city == "411200":
        return u"三门峡用户不参与此次活动"
    # 教师所在班级人数不足,不能参加活动
    unit_ids = [u.id for u in user.units]
    if sid == 21 and sx_task_info(user, unit_ids):
        data.status = 1
    if sid == 51 and yw_task_info(user, unit_ids):
        data.status = 1
    if sid == 91 and yy_task_info(user, unit_ids):
        data.status = 1
    if num.end_num == 0:
        data.status = 0
    user_coin = db.default.score_user_detail.get(user_id=user.id, app_id=7, remark=u"教师发作业赢金豆")
    if user_coin:
        data.status = 2
    return data
Ejemplo n.º 5
0
def get_qg_tiyan_day(user, subject_ids):
    if not user:
        return {}
    third = db.user_slave.third_user.select('third_id').get(user_id=user.id, platform_id=6)
    ord_province = user.get_mobile_order_region().select('province').order_by('-add_date').get(user_id=user.id)
    province = db.user_slave.third_common_provincecity.select('third_cityid').get(cityid=ord_province.province,
                                                                                  platform_id=6)
    if not third or not ord_province or not province:
        return {}

    hub = tbktapi.Hub()
    url = '/api/getopentotal/'
    data = dict(
        third_id=third.third_id,
        province_id=province.third_cityid,
        from_type=4,
        platform_id=6
    )
    r = hub.qg.post(url, data)
    if not r:
        return {}
    if r.respones == 'fail':
        return {}
    try:
        logging.info(r.data)
        data = r.data.get('productInfos', '')

        if not data:
            r = hub.qg.post(url, data)
            data = r.data.get('productInfos', '')
        if not data:
            return {}

        data = map(Struct, data)
        out = []
        for i in data:
            arg = Struct()
            produce_id = int(i.productId)
            sid = PRODUCT.get(produce_id, 0)
            if int(sid) != int(subject_ids):
                continue
            else:
                arg.sid = sid
                arg.status, arg.tiyan_day = get_qg_tiyan_range(i, user)
            out.append(arg)
        return out
    except Exception as e:
        logging.error('/api/getopentotal/ ERROR %s' % e)
    return []
Ejemplo n.º 6
0
def pk_num(user_id, week_id):
    """
    竞技用户第几回合 剩余机会
    :param user_id:
    :param week_id:
    :return:
    """
    data = Struct()
    test_num = db.tbkt_active.full_score_test.select("score", "week_id", "text") \
        .filter(user_id=user_id, week_id=week_id, type=3, status=1, grade_id=user_grade(user_id)).count()
    data.num = test_num + 1
    data.have_chance = 2 - test_num
    if data.have_chance <= 0:
        data.have_chance = 0
    return data
Ejemplo n.º 7
0
def test_result(user_id, week_id):
    """
    测试结果页
    :param user_id:
    :param week_id:
    :return:
    """
    grade_id = user_grade(user_id)
    question = get_knowledge_question(week_id, grade_id)
    out = Struct()
    out.info = question
    out.wrong_name = []
    # 用户的答题记录 取出用户答案
    test = db.tbkt_active.full_score_test.select("text").get(user_id=user_id,
                                                             week_id=week_id,
                                                             grade_id=grade_id,
                                                             status=1,
                                                             type=2)
    if not test:
        return out

    text = map(Struct, json.loads(test.text))
    wrong_kids = []
    test_map = {}
    for i in text:
        if i.display_type == 2:
            # 填空题类型 将答案格式化成数组
            i.result = i.result.split(',')
        if i.is_right == 0:
            wrong_kids.append(i.kid)
        # {kid: 对应用户答案}
        test_map[i.kid] = i.result
    # 取出知识点视频
    know_info = get_source(week_id, grade_id)
    know_map = {i.id: i for i in know_info}
    wrong_name = []
    for i in out.info:
        k = know_map.get(i.knowledge_id)
        i.video_url = k.video_url
        i.name = k.name
        user_answer = test_map.get(i.knowledge_id)
        if i.display_type == 2:
            i.content = filling(i.content, user_answer, i.answer)
        i.user_answer = user_answer
        if i.knowledge_id in wrong_kids:
            wrong_name.append(i.name)
    out.wrong_name = wrong_name
    return out
Ejemplo n.º 8
0
def get_cities(province='410000', child=0):
    """
    获得地市列表
    -------------------------
    王晨光     2016-12-06
    -------------------------
    @param province     默认河南省410000
    @param child        1附带县区数据
    @return [{id:县区行政编码, name:县区名, child:[]}]
    """
    qs = db.slave.common_provincecity.filter(fatherId=province).select(
        'id', 'cityId', 'name')
    cities = [
        Struct({
            'id': city.cityId,
            'name': city.name,
            'child': []
        }) for city in qs
    ]

    # 地市数据
    if child:
        cityd = {c.id: c for c in cities}
        city_ids = [c.id for c in cities]
        counties = db.slave.common_provincecity.filter(
            fatherId__in=city_ids).select('fatherId', 'cityId', 'name')[:]
        for county in counties:
            city = cityd[county.fatherId]
            county_data = {'id': county.cityId, 'name': county.name}
            city.child.append(county_data)
    return cities
Ejemplo n.º 9
0
    def get(self, path, params=None, **kwargs):
        """Sends a GET request.

        :param path: 接口路径(比如 "/account/profile")
        :param params: (optional) Dictionary or bytes to be sent in the query string.
        :param json: (optional) json data to send in the body.
        :param kwargs: 可选参数, 比如timeout, cookies, headers...
        :return: 成功返回同步课堂ajax格式的字典, 比如:
            {
                "message": "",
                "next": "",
                "data": {},
                "response": "ok",
                "error": ""
            }
        """
        url = self.urlroot + path
        if self.headers:
            if 'headers' in kwargs:
                headers = self.headers.copy()
                headers.update(kwargs['headers'])
            else:
                headers = self.headers
            kwargs['headers'] = headers
        if self.cookies:
            if 'cookies' in kwargs:
                cookies = self.cookies.copy()
                cookies.update(kwargs['cookies'])
            else:
                cookies = self.cookies
            kwargs['cookies'] = cookies
        r = requests.get(url, params, **kwargs)
        assert r.status_code == 200, r.status_code
        return Struct(r.json())
Ejemplo n.º 10
0
def index(user, app_id):
    """
    :param user:
    :return:
    """

    data = Struct()
    # 未参加用户默认排名为0分数为0
    data['score'] = 0
    data['rank_no'] = 0
    score_user = db.default.score_user.select('score').get(user_id=user.id, app_id=app_id)
    if not score_user:
        return data
    else:
        sql = '''
        SELECT
        s.user_id,s.score
        FROM
        (SELECT user_id,MAX(add_date) AS add_date FROM score_user_detail WHERE app_id=37 GROUP BY user_id) AS p 
        INNER JOIN
        score_user s
        ON s.user_id=p.user_id AND s.app_id=37 
        ORDER BY -s.score,p.add_date;
        '''
        score_user = db.default.fetchall_dict(sql)
        for su in score_user:
            data['rank_no'] += 1
            if su.user_id == user.id:
                data['score'] = su.score
                return data
Ejemplo n.º 11
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.º 12
0
def get_my_things(user_id):
    # 获取用户道具 奖品 积分记录

    #道具
    data = Struct()
    props = db.tbkt_active.winter_tools.select('tools').get(user_id=user_id)
    data['props'] = decode_json_get_value(props.tools)

    #奖品
    awards = db.tbkt_active.winter_user_award.select(
        'award_id', 'add_time').filter(user_id=user_id)[:]
    # [{award_id = 1},{}]
    if not awards:
        data['awards'] = []
    else:
        award_id = []
        for award in awards:
            award_id.append(award.award_id)
        award_names = db.tbkt_active.winter_award.select('name').filter(
            id__in=award_id)[:]
        for i in range(len(awards)):
            awards[i]['name'] = award_names[i]['name']
            awards[i]['add_time'] = get_day(awards[i]['add_time'])
            awards[i]['add_month'] = get_month(awards[i]['add_time'])
        data['awards'] = awards

    return data
Ejemplo n.º 13
0
    def draw_award(self, award_sort=None, once=1, default_award=None):
        """
        抽奖
        :param award_sort:[{award_type:1,rate:0.001,total:3,day_num:1, is_award: 1}]
                    award_type:几等奖,rate:中奖比例,total: 奖品总量,day_num: 单日奖品发放量,-1 为不限量
                    is_award: 1 是奖品,0 谢谢参与
        :param once : 同一个奖品,用户是否只能中奖一次,默认是
        :param default_award:  重复中奖/超出日发奖范围/超出总数 后  改为中奖默认值,
        """
        able, why = self.award_able
        if not able:
            return False, why
        deduct = self._deduct_score()
        if not deduct:
            return False, u'扣分失败'
        # 获取奖品名称
        award_sort = self.add_award_detail(award_sort)
        if not default_award:
            default_award = Struct(name=u'谢谢参与',
                                   award_type=len(award_sort) + 1,
                                   status=1,
                                   rate=1,
                                   total=-1,
                                   day_num=-1,
                                   is_award=0)

        award = self._probability(award_sort, default_award, once)
        result = self._draw(award, default_award)
        return True, result
Ejemplo n.º 14
0
def user_pk_index(user_id, week_id, grade_id, user_city):
    """
    获取用户分数下标 取前后排名用户
    :param user_id:
    :param week_id:
    :param user_city:
    :param grade_id:
    :return:
    """
    data = Struct()
    data.score = 0
    # 获取用户周竞技提交分数 判断所有分数是否在同一地市
    submit_score = db.tbkt_active.full_score_test.select(
        "user_id", "city").filter(week_id=week_id,
                                  type=3,
                                  status=1,
                                  user_id=user_id,
                                  grade_id=grade_id)[:]

    if not submit_score:
        return []
    for i in submit_score:
        if i.city != user_city:
            db.tbkt_active.full_score_test.filter(
                user_id=user_id, week_id=week_id, grade_id=grade_id,
                type=3).update(city=user_city)

    score = db.tbkt_active.full_score_test.select(
        "user_id", "score",
        "city").filter(week_id=week_id,
                       type=3,
                       status=1,
                       grade_id=grade_id,
                       city=user_city).order_by('-score', "id")[:]
    temp = []
    user_rank = []
    for s in score:
        if s.user_id in temp:
            continue
        else:
            user_rank.append(s)
            temp.append(s.user_id)
    for i, k in enumerate(user_rank):
        if k.user_id == user_id:
            user_index_info = i
            user_info = k
            return user_index_info, user_info
Ejemplo n.º 15
0
def get_pk_question(user_id, week_id):
    """
    获取周竞技题目信息
    :param user_id:
    :param week_id:
    :return:
    """
    grade_id = user_grade(user_id)
    info = db.tbkt_active.full_score_week_detail.get(week_id=week_id,
                                                     grade_id=grade_id)
    if not info:
        return
    pk_qid = info.week_qid.split(',')
    data = Struct()
    out = get_question_info(pk_qid)
    data.out = out
    data.num = pk_num(user_id, week_id).num
    pk_score = db.tbkt_active.full_score_test.select("score", "week_id", "text", "use_time") \
        .filter(user_id=user_id, week_id=week_id, type=3, grade_id=grade_id, status=0).last()
    if not pk_score:
        return data
    out_map = map(Struct, json.loads(pk_score.text))
    # data.q_info = out_map
    data.use_time = pk_score.use_time
    if pk_score.use_time == 0:
        data.use_time = 300
    added_aid = [i.aid for i in out_map]
    un_finish = []
    for i in out:
        if i.id in added_aid:
            continue
        un_finish.append(i)
    data.out = un_finish
    return data
Ejemplo n.º 16
0
def get_rank(user_id, week_id, user_city):
    """
    周末排行
    :return:
    """
    data = Struct()
    data.user_rank = []
    data.my_rank = []
    # 取出地市所有用户排名
    user_rank = rank_user_id(user_id, week_id, user_city)
    if not user_rank:
        return data
    for i, v in enumerate(user_rank):
        v.rank = i + 1

    user_ids = [i.user_id for i in user_rank]
    user = users_info(user_ids)
    user_map = {i["user_id"]: i for i in user}
    for i in user_rank:
        info = user_map.get(i.user_id)
        i.portrait = info["portrait"]
        i.school_name = info["school_name"]
        i.unit_name = info["unit_name"]
        i.border_url = info["border_url"]
        i.real_name = info["real_name"]
        if i.user_id == user_id:
            data.my_rank = i
    data.user_rank = user_rank
    if not data.my_rank:
        data.my_rank = my_rank_info(user_id, week_id, user_city)
    return data
Ejemplo n.º 17
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
Ejemplo n.º 18
0
def get_ask_explain(ask_id, paper_id):
    """
    :param ask_id: 
    :param paper_id: 
    :return: 
    """
    sql = """
    select a.subject a_subject, a.content a_content, a.image_url a_image_url, 
    q.subject q_subject, q.content q_content, q.image_url q_image_url
    from sx2_question_ask a, sx2_question q
    where a.id = %s and a.question_id = q.id
    """ % ask_id
    row = db.ziyuan_slave.fetchone_dict(sql)
    if not row:
        return []
    paper_number = get_paper_number(paper_id)
    out = Struct()
    num = paper_number.get(ask_id) if paper_number else ""
    out.q_num = num.q_num if num else ''
    out.a_num = num.a_num if num else ''
    out.big_subject = parse_subject(
        row.q_subject) if row.q_subject else parse_new_subject(
            row.q_content, row.q_image)
    out.small_subject = parse_subject(
        row.a_subject) if row.a_subject else parse_new_subject(
            row.a_content, row.a_image)
    out.ask_id = ask_id
    return out
Ejemplo n.º 19
0
 def openstatus(self, subject_id):
     """获取指定科目开通状态"""
     hub = tbktapi.Hub(self.request)
     param = dict(subject_id=subject_id, platform_id=self.platform_id)
     r = hub.bank.get('/status', param)
     if not r:
         return 0
     data = Struct(r.data[0])
     return data.status
Ejemplo n.º 20
0
def get_user_props(user_id):
    """返回用户道具数量"""
    user_props = db.tbkt_active.active_user_props.filter(
        active_id=ACTIVE_ID, user_id=user_id).select('item_no', 'name',
                                                     'num')[:]
    user_props_map = {i.item_no: i for i in user_props}

    prop_rank = {'hat': 1, 'clothes': 2, 'shoe': 3, 'glove': 4, 'bag': 5}
    props = user_props_map.values()
    for k in PROPS_REMARK.keys():
        if k not in user_props_map:
            o = Struct()
            o.item_no = k
            o.name = PROPS_REMARK[k]
            o.num = 0
            props.append(o)
    props.sort(key=lambda x: prop_rank.get(x.item_no))
    return props
Ejemplo n.º 21
0
def r_stu_test_info(request):
    """
    @api {post} /huodong/terminal/yw/test/info [期末提分试卷]语文学生做题
    @apiGroup terminal
    @apiParamExample {json} 请求示例
    {"task_id": 作业id}
    @apiSuccessExample {json} 成功返回
    {
        "message": "",
        "next": "",
        "data": {
            "total": 10,                   # 全部试题                    
            "wrong": 2,                    # 错题数
            "title": "期末提分试卷-(二)",   # 试卷标题 
        },
        "response": "ok",
        "error": ""
    }
    """
    out = Struct()
    out.total = 0
    out.wrong = 0
    out.title = ""
    args = request.QUERY.casts(task_id=int, test_id=int)
    task_id = args.task_id
    test_id = args.test_id
    if not task_id and not test_id:
        return ajax.jsonp_fail(request, message="缺少作业id")
    if task_id:
        user_id = request.user_id
        detail = db.tbkt_yuwen.yw_test_detail_new.get(task_id=task_id,
                                                      user_id=user_id)
    else:
        test = db.tbkt_yuwen.yw_test_new.get(id=test_id)
        task_id = test.task_id
        detail = db.tbkt_yuwen.yw_test_detail_new.get(task_id=test.task_id,
                                                      user_id=test.user_id)

    if not detail or detail.status == 0:
        return ajax.jsonp_ok(request, out)
    sql = """
    select t.title, d.question_id from yw_task_new t, yw_task_detail_new d
    where t.id = d.task_id and t.id = %s
    """ % task_id
    task = db.tbkt_yuwen.fetchone_dict(sql)
    if not task or not task.question_id:
        return ajax.jsonp_ok(request, out)
    question_ids = map(int, task.question_id.split(","))
    text = map(Struct, json.loads(
        detail.text)) if detail and detail.text else []
    out.total = len(question_ids)
    out.wrong = len(set(i.qid for i in text if i.result == 0))
    out.title = task.title
    return ajax.jsonp_ok(request, out)
Ejemplo n.º 22
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
Ejemplo n.º 23
0
def pk_week_rank(user_id, week_id, user_city):
    """
    1-5 6-7 排行
    :param user_id:
    :param week_id:
    :param user_city:
    :return:
    """
    # 获取当前时间 周一至周五top 周末实时
    data = Struct()
    data.user_rank = []
    data.my_rank = []
    week_day = datetime.date.today().weekday()
    if week_day in (0, 1, 2, 3, 4):
        data = week_rank(user_id, week_id, user_city)
        return data
    if week_day in (5, 6):
        data = get_rank(user_id, week_id, user_city)
    return data
Ejemplo n.º 24
0
def parse_option(op_content):
    """解析选项内容

    :returns: {'content':内容, 'image':{'url':图片地址, 'align':''}, 'option':'A', 'is_right':1或0}
    """
    if not op_content:
        return {}
    option = json.loads(op_content) or {}
    option = Struct(option)
    option["content"] = replace_symbol(option.get("content", ""))
    images = option.pop("images", [])
    if images:
        image = images[0]
        image['url'] = format_url(image['url'])
    else:
        image = {}
    option['image'] = image
    option['is_right'] = int(option.get('is_right') or 0)
    return option
Ejemplo n.º 25
0
def get_knowledge_list(user_id, week_id):
    """
    获取知识训练场列表数据
    :param user_id: 
    :param week_id: 
    :return: 
    """
    grade_id = user_grade(user_id)  # 获取用户设置教材id
    out = Struct()
    out.info = []  # 视频信息列表
    out.test_status = test_info(user_id, week_id, grade_id)  # 测试完成状态
    out.finish_status = 0  # 视频完成状态
    out.q_num = 0
    source = get_source(week_id, grade_id)  # 获取课程资源
    if not source:
        return out

    test = db.tbkt_active.full_score_test.select("text").get(user_id=user_id,
                                                             week_id=week_id,
                                                             grade_id=grade_id,
                                                             type=1)
    out.finish_status = 1 if test else 0

    for i, v in enumerate(source):
        if not test:
            if i == 0:
                status = 0
            else:
                status = -1
        else:
            text = test.text.split(",")
            if i == 0:
                if str(v.id) in text:
                    status = 1
                else:
                    status = 0
            else:
                if str(source[i - 1].id) in text:
                    status = 0
                    if str(source[i].id) in text:
                        status = 1
                else:
                    status = -1
        v.status = status
    out.info = source
    out.q_num = len(out.info)
    return out
Ejemplo n.º 26
0
def get_type(user_id):
    # 看下一场参加啥项目 单数参加成语 双数参加唐诗
    type = db.tbkt_active.winter_pk_record_new.select('id').filter(
        user_id=user_id, type=3).count()
    if type % 2 == 0:
        type = 1
    else:
        type = 2
    data = Struct()
    data['type'] = type
    return data
Ejemplo n.º 27
0
def get_wrong_question(user_id, week_id, grade_id):
    """
    获取高频试题资源
    :param week_id: 
    :param grade_id:
    :param user_id: 
    :return: 
    """
    # 获取题目信息
    data = get_wrong_source(week_id, grade_id)
    if not data:
        return []
    test = db.tbkt_active.full_score_test.select('text').get(user_id=user_id,
                                                             week_id=week_id,
                                                             grade_id=grade_id, type=WRONG_TYPE)

    if test and test.status == 1:
        # 用户已完成当前练习
        return []
    text = json.loads(test.text) if test and test.text else []
    text_map = defaultdict(dict)
    for i in text:
        temp = Struct(i)
        text_map[str(temp.qid)].update({temp.aid: (temp.option, temp.result)})

    qids = [str(i.get("qid")).strip() for i in text]
    qid_map = {str(i.get("qid")).strip(): (i.get("count"), i.get("ratio", "75%")) for i in data if i.get("qid")}
    source_qids = [str(i.get("qid")).strip() for i in data]
    r = Hub().sx.get("/sx/questions", dict(qid=join(source_qids)))
    if not r or r.response != "ok":
        return []
    questions = map(Struct, r.data)
    questions = [i for i in questions if i not in qids]
    print [i.id for i in questions]
    out = []
    for i in questions:
        q = text_map.get(str(i.id))
        asks = map(Struct, i.asks)
        if q and len(asks) == len(q):
            continue
        if not qid_map.get(str(i.id)):
            continue
        i.count, i.ratio = qid_map.get(str(i.id))
        temp = int(i.ratio.replace("%", ""))

        i.ratio = "%s%%" % (temp + 20) if temp <= 55 else i.ratio
        i.count = random.randint(217, 500) + i.count
        for ask in asks:
            option, result = q.get(ask.id, ("", "")) if q else ("", "")
            ask.user_answer = option
            ask.user_result = result
        i.asks = asks
        out.append(i)
    return out
Ejemplo n.º 28
0
def get_user_score(user, active_id):
    """
    获取用户积分
    ——————————————————
    王世成  2017.9.12
    ——————————————————
    :param user:  用户对象
    :param active_id:  对应活动id
    :return: 
    """
    rank = Struct(get_user_rank(active_id, user.id))
    return rank
Ejemplo n.º 29
0
def knowledge_qid_info(user_id, week_id):
    """
    获取知识训练场知识点题目信息
    :param user_id:
    :param week_id: 获取题目的week_id
    :return:
    """
    grade_id = user_grade(user_id)
    out = Struct()
    questions = get_knowledge_question(week_id, grade_id)
    # return questions
    out.q_num = len(questions)
    out.info = questions
    test = db.tbkt_active.full_score_test.get(user_id=user_id,
                                              week_id=week_id,
                                              grade_id=grade_id,
                                              type=2)
    if not test:
        return out

    if test and test.status == 1:
        out.info = []
        return out

    txt = json.loads(test.text) if test.text else []
    qid = [i.get("qid") for i in txt]
    out.info = [i for i in out.info if i.id not in qid]
    return out
Ejemplo n.º 30
0
def post_pk_details(user_id, add_time, right_num, user_time, score,
                    user_object, pk_user, result, school_id, province_id,
                    class_id, is_type, pk_id):
    """

    :param user_id: 用户id
    :param add_time: pk开始时间
    :param right_num: 答对题数
    :param user_time: 时长
    :param score: 总数
    :param user_object: 用户的信息:头像路径、姓名、user_id、学校名称
    :param pk_user: 挑战对象的信息:头像路径、姓名、user_id
    :param result: 结果1.赢了,2.输了
    :param school_id: 学校id
    :param province_id: 省份id
    :param class_id: 班级id
    :param is_type: 1.诗词大战pk,2.成语游戏pk
    :return:
    """
    # 增加用户对战记录,增加用户积分以及道具,增加积分明细和道具明细
    add_time = int(time.time())
    pk_record_id = db.tbkt_active.winter_pk_record_new.create(
        type=is_type,
        user_id=user_id,
        right_num=right_num,
        user_time=user_time,
        score=score,
        user_object=json.dumps(user_object),
        pk_user=json.dumps(pk_user),
        result=result,
        add_time=add_time,
        school_id=school_id,
        class_id=class_id,
        province_id=province_id)
    if result == 1:
        score = score + 5
        # 胜利随机给1个道具增加与记录增加
        add_type = random.randint(1, 6)
        props_dict = {add_type: 1}
        operate_props(user_id, 1, props_dict, add_time, 2)
    else:
        add_type = 0

    # 积分增加与记录增加
    if pk_id:
        db.tbkt_active.winter_user_score_detail.filter(id=pk_id).delete()
    coin_id = operate_coin(user_id, 1, score, add_time, 2)
    data = Struct()
    data['add_type'] = add_type
    coin_id.append(pk_record_id)
    data['ids'] = coin_id
    return data