api-datamanager/Modules/Questionnaire/Questionnairelmpl.py

287 lines
9.7 KiB
Python

import time
from DBHelper.MongoHelperInstance import DB_TEST
from Modules.Indicators.Tags.TagsImpl import TagsImpl
from Modules.Questionnaire.QuestionnaireObj import QuestionnaireObj
from Modules.Questionnaire.QuestionnaireUtils import QuestionnaireUtils
class QuestionnaireImpl(object):
"""问卷类"""
@staticmethod
def new_questionnaire(**kwargs):
"""新建问卷"""
data = kwargs['data']
quest = QuestionnaireObj()
quest.questionnaire_id = QuestionnaireUtils.make_new_cid()
quest.questionnaire_name = data['questionnaire_name']
quest.questionnaire_score = data['questionnaire_score']
quest.author = data['author']
quest.date = time.strftime('%Y-%m-%d', time.localtime())
quest.tags = list()
for tag in data['tags']:
tags = quest.Tags()
tags.tag_name = tag['tag_name']
tags.tag_id = tag['tag_id']
quest.tags.append(tags)
quest.section = list()
for section_ in data['section']:
section = quest.Section()
section.section_name = section_['section_name']
section.total = section_['total']
section.section_content = list()
for content_ in section_['section_content']:
content = section.Content()
content.topic = content_['topic']
content.version = content_['version']
content.question_id = content_['question_id']
content.weight = content_['weight']
section.section_content.append(content)
quest.section.append(section)
DB_TEST.upsert_single_data(
'模型数据',
'问卷数据',
{'问卷名称': data['questionnaire_name']},
quest.fields_toggle()
)
func_data = quest.fields_toggle()
impl = TagsImpl()
parameter = {
"associate_id": func_data['问卷ID'],
"associate_name": func_data['问卷名称'],
"associate_type": "questionnaire",
"tags_id": [item['标签ID'] for item in func_data['标签']]
}
impl.associate_tags(data=parameter)
return '新建成功'
@staticmethod
def check_questionnaire(**kwargs):
"""校验问卷"""
data = kwargs['data']
quest = QuestionnaireObj()
quest.questionnaire_name = data['questionnaire_name']
quest.questionnaire_score = data['questionnaire_score']
quest.section = list()
for section_ in data['section']:
section = quest.Section()
section.section_name = section_['section_name']
section.total = section_['total']
section.section_content = list()
for content_ in section_['section_content']:
content = section.Content()
content.topic = content_['topic']
content.version = content_['version']
content.question_id = content_['question_id']
content.weight = content_['weight']
section.section_content.append(content)
quest.section.append(section)
quest_data = quest.fields_toggle()
total = 0
for sec in quest_data['小节']:
sec_total = 0
for item in sec['小节内容']:
sec_total += item['权重']
if sec_total != sec['合计']:
return '小节分数合计与预设合计不同'
else:
total += sec_total
if total == quest_data['问卷分值']:
return '校验成功'
else:
return '校验失败,小节合计与预设合计不同'
@staticmethod
def search_questionnaire(**kwargs):
"""查询问卷"""
def make_search_body(param):
body = dict()
search_keys = list(param.keys())
if 'questionnaire_name' in search_keys:
body['问卷名称'] = {"$regex": param['questionnaire_name']}
if 'author' in search_keys:
body['作者'] = param['author']
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['questionnaire_id'] = record['问卷ID']
return_dict['questionnaire_name'] = 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_questionnaire(**kwargs):
"""查看问卷"""
qid = kwargs['qid']
record = DB_TEST.find_single_data(
'模型数据',
'问卷数据',
{'问卷ID': qid},
['问卷ID', '问卷名称', '问卷分值', '标签', '小节', '日期', '作者']
)
return_dict = dict()
if record:
return_dict['questionnaire_id'] = record['问卷ID']
return_dict['questionnaire_name'] = record['问卷名称']
return_dict['questionnaire_score'] = record['问卷分值']
return_dict['tags'] = list()
for tag in record['标签']:
tag_dict = dict()
tag_dict['tag_name'] = tag['标签名称']
tag_dict['tag_id'] = tag['标签ID']
return_dict['tags'].append(tag_dict)
return_dict['date'] = record['日期']
return_dict['author'] = record['作者']
return_dict['section'] = list()
for section in record['小节']:
section_ = dict()
section_['section_name'] = section['小节名称']
section_['total'] = section['合计']
section_['section_content'] = list()
for content in section['小节内容']:
content_ = dict()
content_['topic'] = content['题目']
content_['version'] = content['题型']
content_['question_id'] = content['问题ID']
content_['weight'] = content['权重']
section_['section_content'].append(content_)
return_dict['section'].append(section_)
return return_dict
@staticmethod
def edit_questionnaire(**kwargs):
"""编辑问卷"""
data = kwargs['data']
question_name = DB_TEST.find_single_column(
'模型数据',
'问卷数据',
{'问卷ID': data['questionnaire_id']},
'问卷名称'
)
if not question_name:
return '问卷不存在'
quest = QuestionnaireObj()
quest.questionnaire_id = data['questionnaire_id']
quest.questionnaire_name = data['questionnaire_name']
quest.questionnaire_score = data['questionnaire_score']
quest.author = data['author']
quest.date = time.strftime('%Y-%m-%d', time.localtime())
quest.tags = data['tags']
quest.section = list()
for section_ in data['section']:
section = quest.Section()
section.section_name = section_['section_name']
section.total = section_['total']
section.section_content = list()
for content_ in section_['section_content']:
content = section.Content()
content.topic = content_['topic']
content.version = content_['version']
content.question_id = content_['question_id']
content.weight = content_['weight']
section.section_content.append(content)
quest.section.append(section)
DB_TEST.update_single_data(
'模型数据',
'问卷数据',
{'问卷ID': data['questionnaire_id']},
quest.fields_toggle()
)
return '编辑成功'
@staticmethod
def delete_questionnaire(**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 '操作成功'