| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 | 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 = %s    '''    sql_5 = '''        SELECT            count(1)        FROM            f_t_daren_score_2        WHERE            testcase_id = %s    '''    sql_6 = '''            SELECT                score,                COUNT(uuid)            FROM                (                    SELECT                        score,                        COUNT(DISTINCT uuid) AS uuid                    FROM                        f_t_daren_score_2                    WHERE                        testcase_id = 86                    AND sub_question_id = 377                    GROUP BY                        uuid                ) a            GROUP BY                a.score    '''    # 支付力占比统计    sql_7 = '''                    SELECT                score,                COUNT(uuid)            FROM                (                    SELECT                        score,                        COUNT(DISTINCT uuid) AS uuid                    FROM                        f_t_daren_score_2                    WHERE                        testcase_id in  (84, 85, 86, 87)                    AND sub_question_id = 376                    GROUP BY                        uuid                ) a            GROUP BY                a.score    '''    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])            count = self.bi_report_db.select(self.sql_5, [testcase_id])            answers = []            for index, data in enumerate(result):                if index == 0:                    response['testcase_id'] = data[0]                    response['title'] = data[1]                    response['答题记录数'] = count[0][0]                    response['答题人数'] = people                    response['完成人数'] = finished                    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]):                others_data = []                for ot in others:                    others_data.append([x for x in ot])                sub_question = {}                sub_question['id'] = sub_question_id                sub_question['题干'] = others_data[0][1]                sub_option = []                for th in others_data:                    sub_option.append([th[2], th[3], th[4]])                sub_question['option'] = sub_option                sub_question_data.append(sub_question)            response['答题结果统计'] = sub_question_data        except Exception as e:            response['error'] = str(e)        return response
 |