| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | from mysql_db import MysqlDBfrom itertools import groupbyclass 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
 |