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
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
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
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_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
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 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
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 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 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)