332 lines
13 KiB
Python
332 lines
13 KiB
Python
|
import time
|
||
|
|
||
|
from DBHelper.MongoHelperInstance import DB_TEST
|
||
|
from Modules.Questions.QuestionsObj import QuestionObj
|
||
|
|
||
|
|
||
|
class QuestionImpl(object):
|
||
|
|
||
|
@staticmethod
|
||
|
def new_question(**kwargs):
|
||
|
"""新建问题"""
|
||
|
data = kwargs['data']
|
||
|
|
||
|
case = DB_TEST.find_single_column(
|
||
|
"模型数据",
|
||
|
"问题数据",
|
||
|
{"问题ID": data['question_id']},
|
||
|
"问题ID"
|
||
|
)
|
||
|
if case:
|
||
|
return '问题ID已存在'
|
||
|
|
||
|
quest = QuestionObj()
|
||
|
quest.question_id = data['question_id']
|
||
|
quest.question_name = data['question_name']
|
||
|
quest.describe = data['describe']
|
||
|
quest.author = data['author']
|
||
|
quest.date = time.strftime('%Y-%m-%d', time.localtime())
|
||
|
quest.tags = data['tags']
|
||
|
quest.question_type = data['question_type']
|
||
|
|
||
|
question_type = data['question_type']
|
||
|
|
||
|
if question_type == '单选题-多解' or question_type == '多选题-多解':
|
||
|
quest.options = list()
|
||
|
for option in data['options']:
|
||
|
options = quest.Options()
|
||
|
options.percentage = option['percentage']
|
||
|
options.describe = option['describe']
|
||
|
quest.options.append(options)
|
||
|
elif question_type == '单选题-单解' or question_type == '多选题-单解':
|
||
|
quest.options = list()
|
||
|
for option in data['options']:
|
||
|
options = quest.Options()
|
||
|
options.correct = option['correct']
|
||
|
options.describe = option['describe']
|
||
|
quest.options.append(options)
|
||
|
elif question_type == '填空题-单解':
|
||
|
decision = data['decision_setting']
|
||
|
setting = quest.DecisionSetting()
|
||
|
setting.answer = decision['answer']
|
||
|
quest.decision_setting = setting
|
||
|
elif question_type == '填空题-包含多解':
|
||
|
decision = data['decision_setting']
|
||
|
setting = quest.DecisionSetting()
|
||
|
setting.contain = decision['contain']
|
||
|
setting.score = decision['score']
|
||
|
quest.decision_setting = setting
|
||
|
elif question_type == '填空题-档位多解':
|
||
|
decision = data['decision_setting']
|
||
|
setting = quest.DecisionSetting()
|
||
|
setting.interval = decision['interval']
|
||
|
setting.score = decision['score']
|
||
|
quest.decision_setting = setting
|
||
|
elif question_type == '填空题-指定处理':
|
||
|
decision = data['decision_setting']
|
||
|
setting = quest.DecisionSetting()
|
||
|
setting.assigned = decision['assigned']
|
||
|
quest.decision_setting = setting
|
||
|
elif question_type == '自定义问题':
|
||
|
input_setting = data['input_setting']
|
||
|
quest.input_setting = list()
|
||
|
for input_ in input_setting:
|
||
|
input_set = quest.InputSetting()
|
||
|
input_set.input = input_['input']
|
||
|
input_set.type = input_['type']
|
||
|
input_set.mark = input_['mark']
|
||
|
quest.input_setting.append(input_set)
|
||
|
decision = data['decision_setting']
|
||
|
setting = quest.DecisionSetting()
|
||
|
setting.assigned = decision['assigned']
|
||
|
quest.decision_setting = setting
|
||
|
|
||
|
DB_TEST.upsert_single_data(
|
||
|
'模型数据',
|
||
|
'问题数据',
|
||
|
{'问题名称': data['question_name']},
|
||
|
quest.fields_toggle()
|
||
|
)
|
||
|
|
||
|
return '新建成功'
|
||
|
|
||
|
@staticmethod
|
||
|
def search_question(**kwargs):
|
||
|
"""查询问题"""
|
||
|
|
||
|
def make_search_body(param):
|
||
|
body = dict()
|
||
|
search_keys = list(param.keys())
|
||
|
if 'question_name' in search_keys:
|
||
|
body['问题名称'] = {"$regex": param['question_name']}
|
||
|
|
||
|
if 'author' in search_keys:
|
||
|
body['作者'] = param['author']
|
||
|
|
||
|
if 'question_type' in search_keys:
|
||
|
body['问题类型'] = {"$regex": param['question_type']}
|
||
|
|
||
|
if 'tags' in search_keys:
|
||
|
body['标签'] = {"$in": param['tags']}
|
||
|
|
||
|
return body
|
||
|
|
||
|
def make_sort_body(param):
|
||
|
if param == 'asc':
|
||
|
body = {"日期": 1}
|
||
|
else:
|
||
|
body = {"日期": -1}
|
||
|
|
||
|
return body
|
||
|
|
||
|
data = kwargs['data']
|
||
|
sort = data['sort']
|
||
|
page_size = int(data['page_size'])
|
||
|
page_no = int(data['page_no'])
|
||
|
search_body = make_search_body(data)
|
||
|
sort_body = make_sort_body(sort)
|
||
|
page_size = 10 if page_size > 10 else page_size
|
||
|
|
||
|
total = DB_TEST.find_all_data_with_count(
|
||
|
'模型数据',
|
||
|
'问题数据',
|
||
|
search_body
|
||
|
)
|
||
|
|
||
|
records = DB_TEST.find_data_by_page_with_sort(
|
||
|
'模型数据',
|
||
|
'问题数据',
|
||
|
search_body,
|
||
|
['问题ID', '问题名称', '问题类型', '题目描述', '作者', '日期', '标签'],
|
||
|
sort_body,
|
||
|
page_size,
|
||
|
page_no
|
||
|
)
|
||
|
|
||
|
return_list = list()
|
||
|
if records:
|
||
|
for record in records:
|
||
|
return_dict = dict()
|
||
|
return_dict['question_id'] = record['问题ID']
|
||
|
return_dict['question_name'] = record['问题名称']
|
||
|
return_dict['question_type'] = record['问题类型']
|
||
|
return_dict['describe'] = record['题目描述']
|
||
|
return_dict['author'] = record['作者']
|
||
|
return_dict['date'] = record['日期']
|
||
|
return_dict['tags'] = record['标签']
|
||
|
return_list.append(return_dict)
|
||
|
|
||
|
result = {
|
||
|
"total": total,
|
||
|
"records": return_list
|
||
|
}
|
||
|
|
||
|
return result
|
||
|
|
||
|
@staticmethod
|
||
|
def view_question(**kwargs):
|
||
|
qid = kwargs['qid']
|
||
|
record = DB_TEST.find_single_data(
|
||
|
'模型数据',
|
||
|
'问题数据',
|
||
|
{'问题ID': qid},
|
||
|
['问题ID', '问题名称', '问题类型', '作者', '题目描述', '题目选项', '判定设置', '输入设置', '日期', '标签']
|
||
|
)
|
||
|
|
||
|
return_dict = dict()
|
||
|
if record:
|
||
|
return_dict['question_id'] = record['问题ID']
|
||
|
return_dict['question_name'] = record['问题名称']
|
||
|
return_dict['question_type'] = record['问题类型']
|
||
|
return_dict['author'] = record['作者']
|
||
|
return_dict['date'] = record['日期']
|
||
|
return_dict['tags'] = record['标签']
|
||
|
|
||
|
if return_dict['question_type'] == '单选题-多解' or return_dict['question_type'] == '多选题-多解':
|
||
|
return_dict['options'] = list()
|
||
|
for option in record['题目选项']:
|
||
|
option_ = dict()
|
||
|
option_['percentage'] = option['得分比']
|
||
|
option_['describe'] = option['描述']
|
||
|
return_dict['options'].append(option_)
|
||
|
elif return_dict['question_type'] == '单选题-单解' or return_dict['question_type'] == '多选题-单解':
|
||
|
return_dict['options'] = list()
|
||
|
for option in record['题目选项']:
|
||
|
option_ = dict()
|
||
|
option_['correct'] = option['正确']
|
||
|
option_['describe'] = option['描述']
|
||
|
return_dict['options'].append(option_)
|
||
|
elif return_dict['question_type'] == '填空题-单解':
|
||
|
return_dict['decision_setting'] = dict()
|
||
|
return_dict['decision_setting']['answer'] = record['判定设置']['正确答案']
|
||
|
elif return_dict['question_type'] == '填空题-包含多解':
|
||
|
return_dict['decision_setting'] = dict()
|
||
|
return_dict['decision_setting']['contain'] = record['判定设置']['包含']
|
||
|
return_dict['decision_setting']['score'] = record['判定设置']['得分比']
|
||
|
elif return_dict['question_type'] == '填空题-档位多解':
|
||
|
return_dict['decision_setting'] = dict()
|
||
|
return_dict['decision_setting']['interval'] = record['判定设置']['区间']
|
||
|
return_dict['decision_setting']['score'] = record['判定设置']['得分比']
|
||
|
elif return_dict['question_type'] == '填空题-指定处理':
|
||
|
return_dict['decision_setting'] = dict()
|
||
|
return_dict['decision_setting']['assigned'] = record['判定设置']['指定处理']
|
||
|
elif return_dict['question_type'] == '自定义问题':
|
||
|
return_dict['decision_setting'] = dict()
|
||
|
return_dict['decision_setting']['assigned'] = record['判定设置']['指定处理']
|
||
|
return_dict['input_setting'] = list()
|
||
|
for input_ in record['输入设置']:
|
||
|
_input = dict()
|
||
|
_input['input'] = input_['输入']
|
||
|
_input['type'] = input_['类型']
|
||
|
_input['mark'] = input_['备注']
|
||
|
return_dict['input_setting'].append(_input)
|
||
|
|
||
|
return return_dict
|
||
|
|
||
|
@staticmethod
|
||
|
def edit_question(**kwargs):
|
||
|
"""编辑问题"""
|
||
|
data = kwargs['data']
|
||
|
question_type = DB_TEST.find_single_column(
|
||
|
'模型数据',
|
||
|
'问题数据',
|
||
|
{'问题ID': data['question_id']},
|
||
|
'问题类型'
|
||
|
)
|
||
|
if not question_type:
|
||
|
return '该问题不存在'
|
||
|
|
||
|
quest = QuestionObj()
|
||
|
quest.question_id = data['question_id']
|
||
|
quest.question_name = data['question_name']
|
||
|
quest.describe = data['describe']
|
||
|
quest.date = time.strftime('%Y-%m-%d', time.localtime())
|
||
|
quest.tags = data['tags']
|
||
|
quest.question_type = question_type
|
||
|
if question_type == '单选题-多解' or question_type == '多选题-多解':
|
||
|
quest.options = list()
|
||
|
for option in data['options']:
|
||
|
options = quest.Options()
|
||
|
options.percentage = option['percentage']
|
||
|
options.describe = option['describe']
|
||
|
quest.options.append(options)
|
||
|
elif question_type == '单选题-单解' or question_type == '多选题-单解':
|
||
|
quest.options = list()
|
||
|
for option in data['options']:
|
||
|
options = quest.Options()
|
||
|
options.correct = option['correct']
|
||
|
options.describe = option['describe']
|
||
|
quest.options.append(options)
|
||
|
elif question_type == '填空题-单解':
|
||
|
decision = data['decision_setting']
|
||
|
setting = quest.DecisionSetting()
|
||
|
setting.answer = decision['answer']
|
||
|
quest.decision_setting = setting
|
||
|
elif question_type == '填空题-包含多解':
|
||
|
decision = data['decision_setting']
|
||
|
setting = quest.DecisionSetting()
|
||
|
setting.contain = decision['contain']
|
||
|
setting.score = decision['score']
|
||
|
quest.decision_setting = setting
|
||
|
elif question_type == '填空题-档位多解':
|
||
|
decision = data['decision_setting']
|
||
|
setting = quest.DecisionSetting()
|
||
|
setting.contain = decision['interval']
|
||
|
setting.score = decision['score']
|
||
|
quest.decision_setting = setting
|
||
|
elif question_type == '填空题-指定处理':
|
||
|
decision = data['decision_setting']
|
||
|
setting = quest.DecisionSetting()
|
||
|
setting.assigned = decision['assigned']
|
||
|
quest.decision_setting = setting
|
||
|
elif question_type == '自定义问题':
|
||
|
input_setting = data['input_setting']
|
||
|
quest.input_setting = list()
|
||
|
for input_ in input_setting:
|
||
|
input_set = quest.InputSetting()
|
||
|
input_set.input = input_['input']
|
||
|
input_set.type = input_['type']
|
||
|
input_set.mark = input_['mark']
|
||
|
quest.input_setting.append(input_set)
|
||
|
decision = data['decision_setting']
|
||
|
setting = quest.DecisionSetting()
|
||
|
setting.assigned = decision['assigned']
|
||
|
quest.decision_setting = setting
|
||
|
|
||
|
DB_TEST.upsert_single_data(
|
||
|
'模型数据',
|
||
|
'问题数据',
|
||
|
{'问题ID': data['question_id']},
|
||
|
quest.fields_toggle()
|
||
|
)
|
||
|
|
||
|
return '编辑成功'
|
||
|
|
||
|
@staticmethod
|
||
|
def delete_question(**kwargs):
|
||
|
"""删除问题"""
|
||
|
qid = kwargs['qid']
|
||
|
|
||
|
tags = DB_TEST.find_single_column(
|
||
|
'模型数据',
|
||
|
'问题数据',
|
||
|
{'问题ID': qid},
|
||
|
'标签'
|
||
|
)
|
||
|
# 删除标签关联的问题
|
||
|
for tag in tags:
|
||
|
DB_TEST.update_single_data_by_pull(
|
||
|
'模型数据',
|
||
|
'标签数据',
|
||
|
{'标签名称': tag},
|
||
|
{"关联函数": {"标签ID": qid}}
|
||
|
)
|
||
|
# 删除问题
|
||
|
DB_TEST.delete_single_data(
|
||
|
'模型数据',
|
||
|
'标签数据',
|
||
|
{'问题ID': qid}
|
||
|
)
|
||
|
|
||
|
return '操作成功'
|