from django.core.management.base import BaseCommand from university.models import UserLessonLearnHistory, User, Course from pingcap_cookie_sso.models import SingleSignOnRecord users = [{'name': 'vita', 'sso_id': '99609768-b43d-11ea-974a-1866da9ce92b'}, {'name': 'CESHI', 'sso_id': 'f20b6dea-2179-11ea-a9b7-1866da9ce92b'}, {'name': '穆永贞', 'sso_id': 'e4d3677c-f950-11ea-bc6a-1866da9ce92b'}, {'name': '虞曜曾晖', 'sso_id': '7b92300a-f96d-11ea-87cf-1866da9ce92b'}, {'name': 'jet ypa', 'sso_id': '0a012770-f97c-11ea-ae72-1866da9ce92b'}, {'name': 'yi chen', 'sso_id': '40255cea-f97c-11ea-8dad-1866da9ce92b'}, {'name': '郑增权', 'sso_id': '1e88b770-f97d-11ea-bc6a-1866da9ce92b'}, {'name': '孙祚龙', 'sso_id': 'ac9334cc-f97e-11ea-be3e-1866da9ce92b'}, {'name': '宓祥康', 'sso_id': '2c9852c4-f97f-11ea-9efa-1866da9ce92b'}, {'name': '曹庆芳', 'sso_id': 'e93dccc4-f97f-11ea-98d2-1866da9ce92b'}, {'name': '陈宇', 'sso_id': '0bc5783c-f980-11ea-be3e-1866da9ce92b'}, {'name': '王福祥', 'sso_id': '16b69456-f980-11ea-be3e-1866da9ce92b'}, {'name': '姚嵩', 'sso_id': '01d2fa66-f980-11ea-be3e-1866da9ce92b'}, {'name': '苗振兴·', 'sso_id': '409f312a-f989-11ea-a668-1866da9ce92b'}, {'name': '苏永军', 'sso_id': '6ab8697c-f9b1-11ea-be3e-1866da9ce92b'}, {'name': '林靖华', 'sso_id': '480829c0-fa43-11ea-858d-1866da9ce92b'}, {'name': '张栋', 'sso_id': '530aca32-faf5-11ea-af06-1866da9ce92b'}, {'name': '陆建勇', 'sso_id': '252d10da-fbbc-11ea-be3e-1866da9ce92b'}, {'name': '叶浩然', 'sso_id': '0aecdad0-0061-11eb-9465-1866da9ce92b'}, {'name': '兰鹏举', 'sso_id': 'f98f4f2c-1126-11ea-8a9c-1866da9ce92b'}, {'name': '郭克飞', 'sso_id': '3059f7e2-0167-11eb-ba84-1866da9ce92b'}, {'name': '栾宗憶', 'sso_id': '59c73eb4-0167-11eb-ba84-1866da9ce92b'}, {'name': '孙亚飞', 'sso_id': '92f4c382-0167-11eb-bf02-1866da9ce92b'}, {'name': '杨海', 'sso_id': '882b26a2-0168-11eb-b18d-1866da9ce92b'}, {'name': '赵艳志', 'sso_id': '77de7442-0169-11eb-86b4-1866da9ce92b'}, {'name': '赵晶', 'sso_id': 'faa1bbe0-016a-11eb-9846-1866da9ce92b'}, {'name': '赵建勋', 'sso_id': '322cbf08-016e-11eb-a179-1866da9ce92b'}, {'name': '范友成', 'sso_id': '3d0560c8-016f-11eb-a010-1866da9ce92b'}, {'name': '王顺', 'sso_id': '0e3c8dca-0197-11eb-a5aa-1866da9ce92b'}, {'name': '石瑨琨', 'sso_id': 'b3f15c60-9a49-11ea-a847-1866da9ce92b'}, {'name': '陈启明', 'sso_id': '6a182802-0200-11eb-a179-1866da9ce92b'}, {'name': '金伟', 'sso_id': '3d2918a0-0206-11eb-b6c9-1866da9ce92b'}, {'name': '刘开洋', 'sso_id': 'a3f329c8-020f-11eb-b332-1866da9ce92b'}, {'name': '张伟', 'sso_id': '971776d4-0212-11eb-abad-1866da9ce92b'}, {'name': '李帅', 'sso_id': 'f968e108-0215-11eb-b6c9-1866da9ce92b'}, {'name': '余振兴', 'sso_id': 'fe32562a-f94f-11ea-9ebf-1866da9ce92b'}, {'name': '王雨晨', 'sso_id': '9fc1b68c-0226-11eb-8b05-1866da9ce92b'}, {'name': '翟硕', 'sso_id': '32b26612-022c-11eb-922a-1866da9ce92b'}, {'name': '沈泽宁', 'sso_id': '7525ce74-022e-11eb-bd7c-1866da9ce92b'}, {'name': '王子宇', 'sso_id': '7f88c2ae-022e-11eb-b9f6-1866da9ce92b'}, {'name': '郭恩洋', 'sso_id': '702a4408-022f-11eb-b332-1866da9ce92b'}, {'name': '许川', 'sso_id': 'a532c60c-022f-11eb-bd7c-1866da9ce92b'}, {'name': '曹瑞', 'sso_id': 'f53412fa-1126-11ea-8a9c-1866da9ce92b'}, {'name': '刘波', 'sso_id': 'c89449f8-0230-11eb-9ac5-1866da9ce92b'}, {'name': '徐宇新', 'sso_id': '95ac723a-0231-11eb-b6c9-1866da9ce92b'}, {'name': '孙爱军', 'sso_id': '48f5962e-0231-11eb-8b05-1866da9ce92b'}, {'name': '陈其武', 'sso_id': 'a0f3ec4a-0231-11eb-bd7c-1866da9ce92b'}, {'name': '杨珍', 'sso_id': 'b33b618a-0231-11eb-b9f6-1866da9ce92b'}, {'name': '盛小飞', 'sso_id': 'e444fce6-0231-11eb-92ca-1866da9ce92b'}, {'name': '唐磊', 'sso_id': 'f012db7e-0231-11eb-a690-1866da9ce92b'}, {'name': '付亮', 'sso_id': '366700a0-0232-11eb-abad-1866da9ce92b'}, {'name': '孙婷婷', 'sso_id': '139d0c18-0232-11eb-922a-1866da9ce92b'}, {'name': '韩伟华', 'sso_id': '0fb1ea92-0232-11eb-b9f6-1866da9ce92b'}, {'name': '刘仟元', 'sso_id': '3c681aac-0232-11eb-b9f6-1866da9ce92b'}, {'name': '赵志童', 'sso_id': '1d662b3a-0232-11eb-b332-1866da9ce92b'}, {'name': '吕伟康', 'sso_id': '9c1a97cc-0232-11eb-b9f6-1866da9ce92b'}, {'name': '李涛', 'sso_id': '845f5776-0232-11eb-abad-1866da9ce92b'}, {'name': '孙欢', 'sso_id': '83f74e88-0232-11eb-b332-1866da9ce92b'}, {'name': '张正鹏', 'sso_id': 'e938ed10-0232-11eb-bd7c-1866da9ce92b'}, {'name': '陈波', 'sso_id': '535eda3e-0232-11eb-bd7c-1866da9ce92b'}, {'name': '杨顶宇', 'sso_id': '1b39c406-0233-11eb-bd7c-1866da9ce92b'}, {'name': '缪杨', 'sso_id': 'a23f1a88-0232-11eb-8b05-1866da9ce92b'}, {'name': '程立塬', 'sso_id': 'b10cf76e-0233-11eb-ab9e-1866da9ce92b'}, {'name': '欧阳伟', 'sso_id': 'e0b122fa-0234-11eb-a806-1866da9ce92b'}, {'name': '王焱渤', 'sso_id': 'f5d8e57c-0235-11eb-b9f6-1866da9ce92b'}, {'name': '吕豪', 'sso_id': 'acf1f162-0237-11eb-bd7c-1866da9ce92b'}, {'name': '孔珺峰', 'sso_id': '46190e8a-0232-11eb-b332-1866da9ce92b'}, {'name': '王海鹏', 'sso_id': '46f26f44-0238-11eb-b9f6-1866da9ce92b'}, {'name': '彭松波', 'sso_id': '97c0d1c2-0238-11eb-9ac5-1866da9ce92b'}, {'name': '张伟', 'sso_id': '9a6e50f0-023a-11eb-8b05-1866da9ce92b'}, {'name': '张文东', 'sso_id': 'c59efc6e-023c-11eb-8b05-1866da9ce92b'}, {'name': '董银河', 'sso_id': 'c10c337c-0248-11eb-abad-1866da9ce92b'}, {'name': '李明', 'sso_id': '558c3694-025a-11eb-92ca-1866da9ce92b'}, {'name': '潘为', 'sso_id': 'c8104194-025d-11eb-8fb7-1866da9ce92b'}, {'name': '方李明', 'sso_id': '308d598a-0233-11eb-a690-1866da9ce92b'}, {'name': '罗大伟', 'sso_id': '65ef9eac-02bb-11eb-95fd-1866da9ce92b'}, {'name': '邵申耀', 'sso_id': '2dec68ea-02bc-11eb-8fb7-1866da9ce92b'}, {'name': '陈伟杰', 'sso_id': '628a26c0-0233-11eb-9ac5-1866da9ce92b'}, {'name': '李全心', 'sso_id': 'd4228c10-02c8-11eb-9ac5-1866da9ce92b'}, {'name': '张岩', 'sso_id': '7ec9d894-02c9-11eb-bd7c-1866da9ce92b'}, {'name': '许登峰', 'sso_id': '36dfe162-02f2-11eb-8212-1866da9ce92b'}, {'name': '李霞', 'sso_id': '943e81ca-0300-11eb-80bf-1866da9ce92b'}, {'name': '刘涛', 'sso_id': '68df2d8a-0329-11eb-8b19-1866da9ce92b'}, {'name': '左心怡', 'sso_id': 'a39ce4b6-032f-11eb-8072-1866da9ce92b'}, {'name': '李飞', 'sso_id': '169423b8-0334-11eb-8072-1866da9ce92b'}, {'name': '徐松涛', 'sso_id': '50461812-0331-11eb-b1db-1866da9ce92b'}] class Command(BaseCommand): def handle(self, *args, **options): pcta = Course.objects.get(pk=1) pctp = Course.objects.get(pk=2) pcta_lessons = [] pctp_lessons = [] for chapter in pcta.chapter_set.all().order_by('sequence'): for lesson in chapter.lesson_set.all().order_by('sequence'): pcta_lessons.append(lesson) for chapter in pctp.chapter_set.all().order_by('sequence'): for lesson in chapter.lesson_set.all().order_by('sequence'): pctp_lessons.append(lesson) data = [] for u_l in users: try: user = SingleSignOnRecord.objects.get(external_id=u_l['sso_id']).user except Exception: continue pcta_learn_history = [] pctp_learn_history = [] for pcta_l in pcta_lessons: has_learn = False if UserLessonLearnHistory.objects.filter(user=user, lesson=pcta_l).exists(): has_learn = True pcta_learn_history.append(has_learn) for pctp_l in pctp_lessons: has_learn = False if UserLessonLearnHistory.objects.filter(user=user, lesson=pctp_l).exists(): has_learn = True pctp_learn_history.append(has_learn) total_learned_count = sum(pcta_learn_history + pctp_learn_history) pcta_learned_count = sum(pcta_learn_history) pctp_learned_count = sum(pctp_learn_history) data.append([u_l['name'], user.username, total_learned_count, pcta_learned_count, pctp_learned_count, pcta_learn_history, pctp_learn_history]) with open('learned_history.csv', 'w') as f: header = ['姓名', '用户名', '学习课程数', '已学习 PCTA 课程', '已学习 PCTP 课程'] for pcta_l in pcta_lessons: header.append('pcta-{}.{}'.format(pcta_l.chapter.sequence, pcta_l.sequence)) for pctp_l in pctp_lessons: header.append('pctp-{}.{}'.format(pctp_l.chapter.sequence, pctp_l.sequence)) f.write(','.join(header) + '\n') for d in data: line = d[:5] for _pcta_history in d[5]: if _pcta_history: line.append('✅') else: line.append('') for _pctp_history in d[6]: if _pctp_history: line.append('✅') else: line.append('') f.write(','.join(map(lambda x: str(x), line)) + '\n')