def getproblemwithanswerbyid(token, problemid, req): """ 获取题目带答案 """ if checkalltoken(token, req): print(problemid) tnb = gdb.session.query(Settings).filter( Settings.settings_key == "togglenotebook" ).first() if tnb.settings_value == "0": return packinfo(infostatus=3, infomsg="管理员已关闭错题本功能!") temp = gdb.session.query(Problem).filter( Problem.problem_id == problemid ).first() us = gdb.session.query(User).filter( User.user_token == token ).first() if temp: tempdict = temp.todict() answers = list(tempdict["problem_answer"]) answers.sort() answers = "".join(answers) tempdict["problem_answer"] = answers tempscore = gdb.session.query(Score).filter( Score.user_id == us.user_id).order_by(Score.score_id.desc()).first() if len(tempscore.score_timeend.strip()) == 0: return packinfo(infostatus=-1, infomsg="答题中,无法查看错题!") return packinfo(infostatus=1, inforesult=tempdict) else: return packinfo(infostatus=0, infomsg="没有该题目!") else: return packinfo(infostatus=2, infomsg="没有权限!")
def getranklistbypsetid(token, psetid, req): """ 根据题库编号,查询排名 """ if checkalltoken(token, req): scorelist = ProblemsetDAO.getscorelistbypsetid(psetid) return packinfo(infostatus=1, infomsg="查询成功!", inforesult=scorelist) else: return packinfo(infostatus=2, infomsg="没有权限!")
def checkexist(token, problemsetname, req): """ 检查题库是否存在 """ if checkalltoken(token, req): temp = gdb.session.query(ProblemSet).filter( ProblemSet.problemset_title == problemsetname).first() if temp: return packinfo(infostatus=1, infomsg="题库已存在!") else: return packinfo(infostatus=0, infomsg="没有此题库!") else: return packinfo(infostatus=2, infomsg="没有权限!")
def getproblemsets(token, req): """ 返回所有题库 """ if checkalltoken(token, req): try: problemsets = gdb.session.query(ProblemSet).all() except Exception as e: return packinfo(infostatus=0, infomsg="数据库错误!") else: problemlist = [x.todict() for x in problemsets] return packinfo(infostatus=1, inforesult=problemlist) else: return packinfo(infostatus=2, infomsg="没有权限!")
def getpsetidbypsetname(token, psetname, req): """ 根据题库名称,查题库编号 """ if checkalltoken(token, req): pset = gdb.session.query(ProblemSet).filter( ProblemSet.problemset_title == psetname ).first() if pset: return packinfo(infostatus=1, infomsg="查询成功!", inforesult=pset.problemset_id) else: return packinfo(infostatus=3, infomsg="没有此题库!") else: return packinfo(infostatus=2, infomsg="没有权限!")
def getsummarywithanswerbyid(token, problemid, req): """ 获取易错题带答案 """ if checkalltoken(token, req): print(problemid) temp = gdb.session.query(Problem).filter( Problem.problem_id == problemid ).first() if temp: tempdict = temp.todict() answers = list(tempdict["problem_answer"]) answers.sort() answers = "".join(answers) tempdict["problem_answer"] = answers return packinfo(infostatus=1, inforesult=tempdict) else: return packinfo(infostatus=0, infomsg="没有该题目!") else: return packinfo(infostatus=2, infomsg="没有权限!")
def copyproblemset(token, psettitle, newsettitle, req): """ 复制题库,可用于组织考试时清空积分 """ if checkalltoken(token, req): pset = gdb.session.query(ProblemSet).filter( ProblemSet.problemset_title == psettitle ).first() if pset: npset = ProblemSet(newsettitle, pset.problemset_desp, pset.problemset_count, pset.problemset_token, pset.problemset_answercount, pset.problemset_timeperproblem) try: gdb.session.add(npset) gdb.session.commit() except Exception as e: return packinfo(infostatus=4, infomsg="数据库错误!") else: newid = gdb.session.query(ProblemSet).filter( ProblemSet.problemset_title == newsettitle ).first().problemset_id plist = gdb.session.query(Problem).filter( Problem.problemset_id == pset.problemset_id ).all() for p in plist: np = Problem(newid, p.problem_desp, p.problem_picpath, p.problem_choiceA, p.problem_choiceB, p.problem_choiceC, p.problem_choiceD, p.problem_answer) gdb.session.add(np) try: gdb.session.commit() except Exception as e: return packinfo(infostatus=5, infomsg="数据库错误!") else: return packinfo(infostatus=1, infomsg="复制成功!") else: return packinfo(infostatus=3, infomsg="没有此题库!") else: return packinfo(infostatus=2, infomsg="没有权限!")