|
@@ -0,0 +1,117 @@
|
|
|
+from mysql_db import MysqlDB
|
|
|
+from itertools import groupby
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+class TestInfo(object):
|
|
|
+ """
|
|
|
+ 测试回收情况
|
|
|
+ """
|
|
|
+ # 获取测试的答题记录情况
|
|
|
+ sql_1 = '''
|
|
|
+ SELECT
|
|
|
+ a.testcase_id,
|
|
|
+ a.title,
|
|
|
+ a.sub_question_id,
|
|
|
+ b.sub_question_content,
|
|
|
+ a.score,
|
|
|
+ b.sub_option_content,
|
|
|
+ count(1)
|
|
|
+ FROM
|
|
|
+ f_t_daren_score_2 a
|
|
|
+ LEFT JOIN d_shangju_tiku_02 b ON a. STATUS = b. STATUS = 1
|
|
|
+ WHERE
|
|
|
+ a.testcase_id = %s and
|
|
|
+ a.testcase_id = b.testcase_id
|
|
|
+ AND a.sub_question_id = b.sub_question_id
|
|
|
+ AND (
|
|
|
+ a.score = b.score
|
|
|
+ OR a.score = b.sub_option_id
|
|
|
+ )
|
|
|
+ GROUP BY
|
|
|
+ a.testcase_id,
|
|
|
+ a.title,
|
|
|
+ a.sub_question_id,
|
|
|
+ b.sub_question_content,
|
|
|
+ a.score,
|
|
|
+ b.sub_option_content
|
|
|
+ '''
|
|
|
+
|
|
|
+ # 获取测试题信息
|
|
|
+ sql_2 = '''
|
|
|
+ SELECT
|
|
|
+ id,
|
|
|
+ group_type,
|
|
|
+ title,
|
|
|
+ house_ids,
|
|
|
+ creator,
|
|
|
+ created,
|
|
|
+ updator,
|
|
|
+ updated
|
|
|
+ FROM
|
|
|
+ bq_testcase
|
|
|
+ WHERE
|
|
|
+ STATUS = 1
|
|
|
+ '''
|
|
|
+
|
|
|
+ # 统计测试完成人数
|
|
|
+ sql_3 = '''
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT uuid)
|
|
|
+ FROM
|
|
|
+ f_t_daren_score_2 a
|
|
|
+ WHERE
|
|
|
+ testcase_id = %s
|
|
|
+ AND is_last = 1
|
|
|
+ '''
|
|
|
+
|
|
|
+ # 统计参与答题人数
|
|
|
+ sql_4 = '''
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT uuid)
|
|
|
+ FROM
|
|
|
+ f_t_daren_score_2 a
|
|
|
+ WHERE
|
|
|
+ testcase_id = 77
|
|
|
+ '''
|
|
|
+
|
|
|
+ def __init__(self):
|
|
|
+ # self.shangju_db = MysqlDB('shangju')
|
|
|
+ self.bi_report_db = MysqlDB('bi_report')
|
|
|
+
|
|
|
+ def test_detail_info(self, testcase_id):
|
|
|
+ """
|
|
|
+ 查看每套测试回收数据的量
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ response = {}
|
|
|
+ try:
|
|
|
+ people = self.bi_report_db.select(self.sql_4, [testcase_id])[0][0]
|
|
|
+ finished = self.bi_report_db.select(self.sql_3, [testcase_id])[0][0]
|
|
|
+ result = self.bi_report_db.select(self.sql_1, [testcase_id])
|
|
|
+ answers = []
|
|
|
+ for index, data in enumerate(result):
|
|
|
+ if index == 0:
|
|
|
+ response['testcase_id'] = data[0]
|
|
|
+ response['title'] = data[1]
|
|
|
+ if people != 0:
|
|
|
+ response['答题完成率'] = float(finished) / float(people)
|
|
|
+ else:
|
|
|
+ response['答题完成率'] = '无法统计'
|
|
|
+ answers.append([data[2], data[3], data[4], data[5], data[6]])
|
|
|
+
|
|
|
+ answers.sort(key=lambda obj: obj[0])
|
|
|
+ sub_question_data = []
|
|
|
+ for sub_question_id, others in groupby(answers, key=lambda obj: obj[0]):
|
|
|
+ sub_question = {}
|
|
|
+ sub_question['id'] = sub_question_id
|
|
|
+ sub_question['题干'] = others[0][1]
|
|
|
+ sub_option = []
|
|
|
+ for th in others:
|
|
|
+ sub_option.append([th[2], th[3], th[4]])
|
|
|
+ sub_question['option'] = sub_option
|
|
|
+ sub_option.append(sub_question)
|
|
|
+ response['答题结果统计'] = sub_question_data
|
|
|
+ except Exception as e:
|
|
|
+ response['error'] = str(e)
|
|
|
+ return response
|