예제 #1
0
    def examine(self, request, pk):

        statu = request.data.get('status')
        remark = request.data.get('remark')
        report_result_id = request.data.get('report_result_id')
        unit_report = VirtualclassUnitReport.objects.filter(id=pk).first()

        user = request.session.get('user')

        unit_report_audit_url = 'http://' + settings.JAVA_DOMAIN + settings.UNIT_REPORT_AUDIT_URL

        params = {
            'auditUserId': user.get('id'),
            'auditUserName': user.get('realname'),
            # 'createTime': timezone.now(),
            # 'updateTime': timezone.now(),
            'remark': remark,
            'status': statu,
            'unitReportId': unit_report.id
        }
        if report_result_id:
            params['id'] = report_result_id

        result = fetch_put_api(unit_report_audit_url, params, user_id=user.get('id'))
        if not result:
            return JsonResponse(code=1, msg='服务器错误', status=status.HTTP_200_OK)

        if result.get('code') != 200:
            return JsonResponse(code=1, msg=result.get('message'), status=status.HTTP_200_OK)

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #2
0
    def remove_class_member(self, request, pk):

        student_id = request.data.get('student_id')

        remove_class_student_url = 'http://' + settings.JAVA_DOMAIN + settings.STUDNT_SIGN_OUT_CLASS.format(
            class_id=pk, student_user_id=student_id)

        headers = {'content-type': 'application/json'}

        result = requests.delete(remove_class_student_url, headers=headers)

        result = result.json()

        if result.get('code') != 200:
            logger.debug(result)
            return JsonResponse(code=1,
                                msg='移出失败, {}'.format(result.get(
                                    'message', '')),
                                status=status.HTTP_200_OK)
        try:
            user = request.session.get('user')
            logger.debug('{} 移出班级成员, class_id: {}, student_id: {}'.format(
                user.get('id'), pk, student_id))
        except Exception as e:
            pass
        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #3
0
    def finish_virtualclass(self, request, pk):

        virtualclass_info = VirtualclassInfo.objects.get(id=pk)

        finish_virtualclass_info = settings.FINISH_VIRTUALCLASS.format(
            virtualclass_id=virtualclass_info.id,
            tutor_user_id=virtualclass_info.tutor_user_id)

        finish_virtualclass_url = 'http://' + settings.JAVA_DOMAIN + finish_virtualclass_info

        params = {'reason': 0, 'remark': '数据修复'}
        user = request.session.get('user')

        result = fetch_put_api(finish_virtualclass_url,
                               params,
                               user_id=user.get('id'))

        if not result:
            return JsonResponse(code=1, msg='服务器错误', status=status.HTTP_200_OK)

        if result.get('code') != 200:
            return JsonResponse(code=1,
                                msg=result.get('message'),
                                status=status.HTTP_200_OK)

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #4
0
    def change_appointment_tutor(self, request):
        start_time = request.data.get('start_time')
        tutor_user_id = request.data.get('tutor_user_id')
        absent_tutor_user_id = request.data.get('absent_tutor_user_id')

        change_appointment_tutor_url = 'http://' + settings.JAVA_DOMAIN + settings.CHANGE_APPOINTMENTED_TUTOR.format(
            tutor_user_id=tutor_user_id,
            absent_tutor_user_id=absent_tutor_user_id,
            start_time=start_time)

        result = utils.fetch_post_api(change_appointment_tutor_url)

        if result.get('code') != 200:
            return JsonResponse(code=1,
                                msg='{}'.format(result.get('message', '')),
                                status=status.HTTP_200_OK)

        try:
            user = request.session.get('user')
            logger.debug(
                'change appointment tutor , user={}, tutor_user_id={}, absent_tutor_user_id={}'
                .format(user.get('id'), tutor_user_id,
                        change_appointment_tutor_url))
        except Exception as e:
            logger.debug('change appointment tutor fail, error='.format(e))

        return JsonResponse(code=0,
                            msg='{}'.format(result.get('message', '')),
                            status=status.HTTP_200_OK)
예제 #5
0
    def change_tutor(self, request):

        class_timetable_ids = request.data.get('class_timetable_ids')

        tutor_user_id = request.data.get('tutor_user_id')

        class_timetables = ScheduleClassTimeTable.objects.filter(
            id__in=class_timetable_ids,
            status=ScheduleClassTimeTable.SUCCESS_APPOINTMENT).all()

        end_times = []
        start_times = []
        class_id = None
        class_type_id = None

        user = request.session.get('user')

        for class_timetable in class_timetables:
            start_times.append(class_timetable.start_time)
            end_times.append(class_timetable.end_time)
            class_id = class_timetable.class_field_id
            class_type_id = class_timetable.class_field.class_type_id

        if start_times:
            change_tutor_url = 'http://' + settings.JAVA_DOMAIN + settings.SCHEDULE_CHANGE_TUTOR

            data = {
                "classId": class_id,
                "classTypeId": class_type_id,
                "endTimes": end_times,
                "startTimes": start_times,
                "tutorUserId": tutor_user_id
            }

            result = utils.fetch_post_api(change_tutor_url,
                                          data,
                                          user_id=user.get('id'))

            if result.get('code') != 200:
                return JsonResponse(code=1,
                                    msg='更换老师失败, {}'.format(
                                        result.get('message', '')),
                                    status=status.HTTP_200_OK)

        for class_timetable in class_timetables:
            virtual_class = VirtualclassInfo.objects.filter(
                class_field_id=class_timetable.class_field_id,
                start_time=class_timetable.start_time,
                status=VirtualclassInfo.NOT_START).first()
            class_timetable.virtual_class = virtual_class
            class_timetable.status = ScheduleClassTimeTable.SUCCESS_APPOINTMENT
            class_timetable.appoint_user_id = user.get('id')
            class_timetable.appoint_user_name = user.get('realname')
            class_timetable.save()
        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #6
0
    def subscribe(self, request):

        class_timetable_ids = request.data.get('class_timetable_ids')
        tutor_user_id = request.data.get('tutor_user_id')

        class_timetables = ScheduleClassTimeTable.objects.filter(
            id__in=class_timetable_ids).all()

        start_times, end_times = [], []
        class_id = None
        class_type_id = None
        for class_timetable in class_timetables:
            start_times.append(class_timetable.start_time)
            end_times.append(class_timetable.end_time)
            class_id = class_timetable.class_field_id
            class_type_id = class_timetable.class_field.class_type_id

        subscribe_url = 'http://' + settings.JAVA_DOMAIN + settings.SCHEDULE_SUBSCRIBE

        user = request.session.get('user')

        data = {
            "classId": class_id,
            "classTypeId": class_type_id,
            "endTimes": end_times,
            "opType": 1,  # 1:预约时间;2:取消预约
            "startTimes": start_times,
            "tutorUserId": tutor_user_id,
            "opUserId": user.get('id')
        }

        result = utils.fetch_post_api(subscribe_url,
                                      data,
                                      user_id=user.get('id'))

        if result.get('code') != 200:
            return JsonResponse(code=1,
                                msg='约课失败, {}'.format(result.get(
                                    'message', '')),
                                data=result.get('data', []),
                                status=status.HTTP_200_OK)

        for class_timetable in class_timetables:
            virtual_class = VirtualclassInfo.objects.filter(
                class_field_id=class_timetable.class_field_id,
                start_time=class_timetable.start_time,
                status=VirtualclassInfo.NOT_START).first()
            class_timetable.virtual_class = virtual_class
            class_timetable.status = ScheduleClassTimeTable.SUCCESS_APPOINTMENT
            class_timetable.appoint_user_id = user.get('id')
            class_timetable.appoint_user_name = user.get('realname')
            class_timetable.save()

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #7
0
    def timetable(self, request, pk):
        start_time = request.query_params.get('start_time')
        end_time = request.query_params.get('end_time')

        timetable_url = 'http://' + settings.JAVA_DOMAIN + settings.TUTOR_TIME_TABLE.format(tutor_user_id=pk, start_time=start_time, end_time=end_time)

        result = utils.fetch_get_api(timetable_url)

        if result.get('code') != 200:
            return JsonResponse(code=1, msg='获取教师列表失败,{}'.format(result.get('message', '')), status=status.HTTP_200_OK)
        return JsonResponse(code=0, msg='success', data=result.get('data'), status=status.HTTP_200_OK)
예제 #8
0
    def cancle_timetable(self, request):

        class_timetable_ids = request.data.get('class_timetable_ids')

        class_time_tables = ScheduleClassTimeTable.objects.filter(
            id__in=class_timetable_ids).all()

        start_times, end_times = [], []
        class_id = None
        class_type_id = None

        user = request.session.get('user')

        for class_timetable in class_time_tables:

            if class_timetable.status == ScheduleClassTimeTable.SUCCESS_APPOINTMENT:

                start_times.append(class_timetable.start_time)
                end_times.append(class_timetable.end_time)
                class_id = class_timetable.class_field_id
                class_type_id = class_timetable.class_field.class_type_id

        if start_times:
            cancel_url = 'http://' + settings.JAVA_DOMAIN + settings.SCHEDULE_SUBSCRIBE

            data = {
                "classId": class_id,
                "classTypeId": class_type_id,
                "endTimes": end_times,
                "opType": 2,  # 1:预约时间;2:取消预约
                "startTimes": start_times,
                "tutorUserId": 0,
                "opUserId": user.get('id')
            }

            result = utils.fetch_post_api(cancel_url,
                                          data,
                                          user_id=user.get('id'))

            if result.get('code') != 200:
                return JsonResponse(code=1,
                                    msg='取消课程失败, {}'.format(
                                        result.get('message', '')),
                                    data=result.get('data', []),
                                    status=status.HTTP_200_OK)

        for class_timetable in class_time_tables:
            class_timetable.appoint_user_id = user.get('id')
            class_timetable.appoint_user_name = user.get('realname')
            class_timetable.status = ScheduleClassTimeTable.CANCELD_PUBLISHED
            class_timetable.save()

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #9
0
    def edite_class_level(self, request, pk):

        course_edition = request.data.get('course_edition')
        course_level = request.data.get('course_level')
        lesson_no = request.data.get('lesson_no')

        course_info = CourseInfo.objects.filter(
            course_edition_id=course_edition,
            course_level=course_level).first()

        if not course_info:
            return JsonResponse(code=1,
                                msg='未找到匹配的课程信息',
                                status=status.HTTP_200_OK)

        course_lesson = CourseLesson.objects.filter(
            course=course_info,
            lesson_no=lesson_no,
            status=CourseLesson.ACTIVE).first()

        if not course_lesson:
            return JsonResponse(code=1, msg='没有该节课', status=status.HTTP_200_OK)

        # student.course_edition_id = course_edition_id
        # student.course_id = course_info.id
        # student.course_level = course_level
        # student.lesson_id = course_lesson.id
        # student.lesson_no = lesson_no
        # student.save()

        class_level_url = 'http://' + settings.JAVA_DOMAIN + settings.UPDATE_COURSE_LEVEL.format(
            class_id=pk,
            new_edition=course_edition,
            new_level=course_level,
            new_lesson_no=lesson_no)

        result = requests.put(class_level_url)

        result = result.json()

        if result.get('code') != 200:
            return JsonResponse(code=1, msg='修改失败', status=status.HTTP_200_OK)

        try:
            user = request.session.get('user')
            logger.debug(
                'edite class level, user={}, class_id={}, url={}'.format(
                    user.get('id'), pk, class_level_url))
        except Exception as e:
            logger.debug('edite class level, fail, error='.format(e))

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #10
0
    def impose_fine(self, request, pk):

        money = request.data.get('money')
        remark = request.data.get('remark')

        first_report = self.get_object()
        user = request.session.get('user')

        first_report_fine = CourseReportFine()
        first_report_fine.user_id = user.get('id')
        first_report_fine.report_id = first_report.id
        first_report_fine.type = CourseReportFine.FIRST_REPORT
        first_report_fine.money = money
        first_report_fine.remark = remark
        first_report_fine.save()

        now_time = timezone.now()

        rate = ExchangeRate.objects.filter(currency='CNY', valid_start__lte=now_time, valid_end__gt=now_time).first()

        balance_change = BalanceChange()
        balance_change.role = BalanceChange.TEACHER
        balance_change.user_id = first_report.tutor_user.id
        balance_change.reference = first_report.virtual_class.id
        balance_change.amount = 0 - (money/rate.rate)
        balance_change.reason = BalanceChange.NO_SHOW_PENALTY
        balance_change.adviser_user_id = user.get('id')
        balance_change.save()

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #11
0
    def timetable_format_time(self, request):
        queryset = self.filter_queryset(self.get_queryset()).select_related(
            'tutor_user').select_related('class_field').select_related(
                'lesson').select_related('lesson__course').select_related(
                    'lesson__course__course_edition')

        queryset = queryset.only(
            'id', 'start_time', 'lesson_id', 'tutor_user__id',
            'tutor_user__username', 'tutor_user__total_number_of_class',
            'tutor_user__real_name', 'tutor_user__identity_name',
            'class_field__id', 'class_field__class_no',
            'class_field__class_name_zh', 'class_field__class_name',
            'class_field__create_user_name')

        serializer = self.get_serializer(queryset, many=True)
        data = self.add_course_lesson(serializer.data)
        result = {}
        for s in data:
            start_time = s.pop('start_time')
            if start_time in result.keys():
                result[start_time].append(s)
            else:
                result[start_time] = []
                result[start_time].append(s)
        return JsonResponse(code=0,
                            msg='success',
                            data=result,
                            status=status.HTTP_200_OK)
예제 #12
0
    def total_data(self, request):
        '''拼团成功:6团 拼团中:12团 奖励已发放:3团  总充值课时:200课时 总充值人数:60人'''
        '''1:启用;2:拼团成功;3:奖励已发放'''
        sql = '''
            select IFNULL(sum(recharge_amount), 0) as recharge_amount_sum, IFNULL(count(parent_user_id), 0) as parent_user_count, agi.status, count(distinct agi.id) as status_count 
                from activity_group_info agi left join activity_group_recharge agr on agi.id=agr.group_id
                group by agi.status           
        '''
        result = {
            'recharge_sum': 0,
            'parent_user_count': 0,
            '1': 0,
            '2': 0,
            '3': 0
        }
        with connections['lingoace'].cursor() as cursor:
            cursor.execute(sql)
            rows = cursor.fetchall()
            for row in rows:
                result['recharge_sum'] = result['recharge_sum'] + row[0]
                result['parent_user_count'] = result['parent_user_count'] + row[1]
                result[row[2]] = row[3]

        grant_count = ActivityGroupInfo.objects.filter(grant_award=ActivityGroupInfo.GRANT).count()

        result['3'] = grant_count

        return JsonResponse(code=0, msg='success', data=result, status=status.HTTP_200_OK)
예제 #13
0
    def exists(self, request):
        lesson_id = request.query_params.get('lesson_id')
        outline_info = HomeworkOutlineInfo.objects.filter(
            lesson_id=lesson_id,
            status=HomeworkOutlineInfo.NOT_FINISH).first()
        exist = 0

        result = {'exist': exist, 'outline_id': ''}

        if outline_info:

            outline_group = HomeworkOutlineGroup.objects.filter(
                outline_id=outline_info.id).first()

            if outline_group:  # 判断outline下面是否有 group 没有归档
                exist = 1
                result['exist'] = exist
                result['outline_id'] = outline_info.id
            else:
                outline_info.status = HomeworkOutlineInfo.DELETED
                outline_info.save()
                result['exist'] = exist
                result['outline_id'] = ''

        return JsonResponse(code=0,
                            msg='success',
                            data=result,
                            status=status.HTTP_200_OK)
예제 #14
0
    def update_outlines(self, request):
        outline_group_ids = request.data.get('outline_group_ids')
        del_outline_group_ids = request.data.get('del_outline_group_ids', [])
        types = request.data.get('types')
        qualitys = request.data.get('qualitys')
        lesson_id = request.data.get('lesson_id')
        outline_info = HomeworkOutlineInfo.objects.filter(
            lesson_id=lesson_id,
            status=HomeworkOutlineInfo.NOT_FINISH).first()
        length = len(outline_group_ids)

        for i in range(length):
            if outline_group_ids[i] == 'add':
                outline_group = HomeworkOutlineGroup()
                outline_group.sort_no = i + 1
                outline_group.quality = qualitys[i]
                outline_group.type = types[i]
                outline_group.lesson_id = lesson_id
                outline_group.outline_id = outline_info.id
                outline_group.save()
            else:
                instance = HomeworkOutlineGroup.objects.filter(
                    id=outline_group_ids[i]).first()
                instance.sort_no = i + 1
                instance.quality = qualitys[i]
                instance.save()
        HomeworkOutlineGroup.objects.filter(
            id__in=del_outline_group_ids).delete()
        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #15
0
    def add_outlines(self, request):
        lesson_id = request.data.get('lesson_id')
        types = request.data.get('types', [])
        qualitys = request.data.get('qualitys', [])

        types_length = len(types)
        sort_no = 1
        outline_info = HomeworkOutlineInfo()
        outline_info.lesson_id = lesson_id
        outline_info.status = HomeworkOutlineInfo.NOT_FINISH
        outline_info.inspection_content = ''
        HomeworkOutlineInfo.objects.filter(
            lesson_id=lesson_id, status=HomeworkOutlineInfo.NOT_FINISH).update(
                status=HomeworkOutlineInfo.DELETED)
        outline_info.save()

        for i in range(types_length):
            outline_group = HomeworkOutlineGroup()
            outline_group.type = types[i]
            outline_group.quality = qualitys[i]
            outline_group.lesson_id = lesson_id
            outline_group.outline_id = outline_info.id
            outline_group.sort_no = sort_no
            outline_group.save()

            sort_no = sort_no + 1

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #16
0
 def details(self, request, pk):
     virtualclass = VirtualclassInfo.objects.filter(id=pk).first()
     serializer = self.get_serializer(virtualclass)
     return JsonResponse(code=0,
                         msg='success',
                         data=serializer.data,
                         status=status.HTTP_200_OK)
예제 #17
0
    def ad_hoc(self, request):
        month_query = request.query_params.get('month_query')
        start_time = request.query_params.get('start_time')
        end_time = request.query_params.get('end_time')
        cms_user_id = request.query_params.get('cms_user_id')

        month_begin = None
        month_end = None
        if month_query == 'this_month':
            month_begin, month_end = utils.getNowMonth()
        elif month_query == 'before_month':
            month_begin, month_end = utils.get_berfore_month_datetime()

        balance_change_sql = """SELECT
            fbc.amount,
            fbc.adviser_user_id,
            fbc.xg_user_id
        FROM
            finance_balance_change fbc
        WHERE
            fbc.reason={}
            AND ( fbc.adviser_user_id IS NOT NULL OR fbc.xg_user_id IS NOT NULL )""".format(
            BalanceChange.AD_HOC)

        if month_begin:
            balance_change_sql = balance_change_sql + " and fbc.create_time>='{}'".format(
                utils.datetime_str(month_begin))
        if month_end:
            balance_change_sql = balance_change_sql + " and fbc.create_time<='{}'".format(
                utils.datetime_str(month_end))
        if start_time:
            start_time = "{} 00:00:00".format(start_time)

            balance_change_sql = balance_change_sql + " and fbc.create_time>='{}'".format(
                start_time)
        if end_time:
            end_time = "{} 23:59:59".format(end_time)
            balance_change_sql = balance_change_sql + " and fbc.create_time<='{}'".format(
                end_time)
        if cms_user_id:
            balance_change_sql = balance_change_sql + " and (fbc.xg_user_id={} or fbc.adviser_user_id={})".format(
                cms_user_id, cms_user_id)
        with connections['lingoace'].cursor() as cursor:
            cursor.execute(balance_change_sql)
            rows = cursor.fetchall()
        new_student_amount = 0
        old_student_amount = 0
        for row in rows:
            if row[2]:
                old_student_amount = old_student_amount + row[0]
            elif row[1]:
                new_student_amount = new_student_amount + row[0]
        data = dict(new_student_amount=new_student_amount,
                    old_student_amount=old_student_amount)
        return JsonResponse(code=0,
                            msg='success',
                            data=data,
                            status=status.HTTP_200_OK)
예제 #18
0
 def lessons(self, request):
     course_id = request.query_params.get('course_id', None)
     course_lessons = CourseLesson.objects.filter(
         course_id=course_id, status=CourseLesson.ACTIVE).all()
     couese_lsesson_serializer = CourseLessonListSerializer(course_lessons,
                                                            many=True)
     return JsonResponse(code=0,
                         msg='success',
                         data=couese_lsesson_serializer.data)
예제 #19
0
    def upload_question_img(self, request):

        file = request.data.get('image_file')
        result = upload_aws.upload_file('hw_content', file)

        return JsonResponse(code=0,
                            msg='success',
                            data=result,
                            status=status.HTTP_200_OK)
예제 #20
0
    def comment(self, request, pk):
        target = request.query_params.get('target')
        if not target or target not in ('Student', 'Tutor'):
            return JsonResponse(code=1, msg='参数错误', status=status.HTTP_200_OK)
        comments = VirtualclassComment.objects.filter(virtual_class_id=pk)
        result = {}
        comment_result = {}
        # 老师反馈
        if target == 'Student':
            valuations = comments.filter(role=VirtualclassComment.TEACHER)
            for valuation in valuations:
                student_name = valuation.student_user.real_name  # 被评论者姓名
                if student_name not in result.keys():
                    result[student_name] = {}
                result[student_name]['rating_le'] = valuation.rating_le
                result[student_name]['rating_id'] = valuation.rating_id
                result[student_name]['rating_pk'] = valuation.rating_pk
                if student_name not in comment_result.keys():
                    comment_result[student_name] = {}
                comment_result[student_name]['comment'] = valuation.comment_zh
                comment_result[student_name][
                    'commentor'] = valuation.tutor_user.__str__()

        elif target == 'Tutor':
            # 学生反馈  以学生姓名做key
            valuations = comments.filter(role=VirtualclassComment.STUDENT)
            for valuation in valuations:
                teacher_name = valuation.tutor_user.__str__()  # 老师姓名
                student_name = valuation.student_user.real_name  # 学生姓名
                if student_name not in result.keys():
                    result[student_name] = {}
                result[student_name]['rating_le'] = valuation.rating_le
                result[student_name]['rating_id'] = valuation.rating_id
                result[student_name]['rating_pk'] = valuation.rating_pk
                result[student_name]['teacher'] = teacher_name
                if student_name not in comment_result.keys():
                    comment_result[student_name] = {}
                comment_result[student_name]['comment'] = valuation.comment_zh
                comment_result[student_name]['teacher'] = teacher_name
        data = {'comment': comment_result, 'valuation': result}
        return JsonResponse(code=0,
                            msg='success',
                            data=data,
                            status=status.HTTP_200_OK)
예제 #21
0
 def edite_class_name(self, request, pk):
     class_info = ClassInfo.objects.get(id=pk)
     class_name_zh = request.data.get('class_name_zh')
     class_name = request.data.get('class_name')
     if class_name_zh:
         class_info.class_name_zh = class_name_zh
     if class_name:
         class_info.class_name = class_name
     class_info.save()
     return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #22
0
    def details(self, request, pk):

        class_info = ClassInfo.objects.get(id=pk)

        serializers = ClassDetailsSerializer(class_info)

        return JsonResponse(code=0,
                            msg='success',
                            data=serializers.data,
                            status=status.HTTP_200_OK)
예제 #23
0
    def schedule_timetable(self, request):

        class_id = request.data.get('class_id')
        start_time_list = request.data.get('start_times')

        class_info = ClassInfo.objects.filter(id=class_id).first()
        if not class_info:
            return JsonResponse(code=1,
                                msg='未找到该班级',
                                status=status.HTTP_200_OK)

        user = request.session.get('user')

        for start_time in start_time_list:

            start_time = timezone.datetime.strptime(
                start_time, '%Y-%m-%d %H:%M:%S').replace(tzinfo=pytz.UTC)
            start_time = start_time - timedelta(hours=8)
            class_time_table = ScheduleClassTimeTable.objects.filter(class_field=class_info, start_time=start_time)\
                .filter(~Q(status=ScheduleClassTimeTable.CANCELD_PUBLISHED)).first()
            if class_time_table:
                continue
            class_time_table = ScheduleClassTimeTable()
            class_time_table.start_time = start_time
            class_time_table.end_time = start_time + timedelta(
                minutes=app_settings.COURSE_DURATION)
            class_time_table.class_field = class_info
            class_time_table.appoint_user_id = user.get('id')
            class_time_table.appoint_user_name = user.get('realname')
            class_time_table.status = ScheduleClassTimeTable.PUBLISHED
            class_time_table.save()

            virtual_class = VirtualclassInfo.objects.filter(
                class_field__id=class_info.id,
                start_time=class_time_table.start_time,
                status=VirtualclassInfo.NOT_START).first()

            if virtual_class:
                class_time_table.status = ScheduleClassTimeTable.SUCCESS_APPOINTMENT
                class_time_table.virtual_class_id = virtual_class.id
                class_time_table.save()

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #24
0
 def add_class_member(self, request, pk):
     student_id = request.data.get('student_id')
     if not student_id:
         return JsonResponse(code=1, msg='参数缺失', status=status.HTTP_200_OK)
     data = {"classId": pk, "userId": student_id}
     url = 'http://' + settings.JAVA_DOMAIN + settings.STUDENT_ADD_CLASS
     result = utils.fetch_post_api(url, data)
     if result.get('code') != 200:
         return JsonResponse(code=1,
                             msg='添加失败,{}'.format(result.get('message',
                                                             '')),
                             data=result.get('data', []),
                             status=status.HTTP_200_OK)
     try:
         user = request.session.get('user')
         logger.debug('{} 添加班级成员, class_id: {}, student_id: {}'.format(
             user.get('id'), pk, student_id))
     except Exception as e:
         pass
     return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #25
0
    def class_members(self, request, pk):
        student_name = request.query_params.get('student_name')
        activity_code = request.query_params.get('user_source')
        try:
            class_info = ClassInfo.objects.get(id=pk)
        except Exception as e:
            logger.debug('查询班级成员出错,class_id={}, error={}'.format(pk, e))
            return JsonResponse(code=1,
                                msg='未查询到班级',
                                status=status.HTTP_200_OK)
        members = ClassMember.objects.filter(
            class_field=class_info,
            role__in=(ClassMember.MONITOR, ClassMember.MEMBER)).all()

        members = members.select_related('student_user').select_related(
            'student_user__parent_user').only(
                'id', 'student_user_id', 'create_time', 'student_user__id',
                'student_user__real_name', 'student_user__gender',
                'student_user__birthday', 'student_user__create_time',
                'student_user__parent_user__id',
                'student_user__parent_user__username',
                'student_user__parent_user__country_of_residence',
                'student_user__parent_user__adviser_user_id')
        members = members.order_by('-create_time')

        if student_name:
            members = members.filter(
                Q(student_user__real_name__icontains=student_name) |
                Q(student_user__parent_user__username__icontains=student_name)
                | Q(student_user__parent_user__email__icontains=student_name)
                | Q(student_user__parent_user__phone__icontains=student_name))

        if activity_code == 'bigclass':
            members = members.filter(
                student_user__parent_user__user_source__activity_code=
                activity_code)
            print(members.query)
        elif activity_code == 'other':
            members = members.filter(
                Q(student_user__parent_user__user_source__isnull=True)
                | ~Q(student_user__parent_user__user_source__activity_code=
                     'bigclass'))

        page = LargeResultsSetPagination()
        page_roles = page.paginate_queryset(queryset=members,
                                            request=request,
                                            view=self)
        members_sreializer = ClassMemberSerializer(instance=page_roles,
                                                   many=True)
        data = self.add_adviser_user_name(members_sreializer.data)
        data = self.add_account_balance(data)
        data = self.add_user_source(data, activity_code)
        # return Response(roles_ser.data)  # 只返回数据
        return page.get_paginated_response(data)  # 返回前后夜url
예제 #26
0
    def revert(self, request, pk):

        # vc = self.get_object()
        vc = VirtualclassInfo.objects.filter(id=pk).first()
        if vc.status in (VirtualclassInfo.FINISH_NOMAL,
                         VirtualclassInfo.FINISH_ABNOMAL):
            return JsonResponse(code=1, msg='已结束授课', status=status.HTTP_200_OK)
        if vc.virtualclass_type_id == classroom_utils.TK_CLASS_ROOM:
            vc.virtualclass_type_id = classroom_utils.BAIJIAYUN_ROOM
        else:
            vc.virtualclass_type_id = classroom_utils.TK_CLASS_ROOM
        vc.save()

        try:
            user = request.session.get('user')
            logger.debug(
                'revert virtualclass type , user={}, virtualclass_id={}'.
                format(user.get('id'), pk))
        except Exception as e:
            logger.debug('revert virtualclass type fail, error='.format(e))

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #27
0
    def give_out_bonus(self, request, pk):

        group_info = ActivityGroupInfo.objects.get(id=pk)

        if group_info.grant_award == ActivityGroupInfo.GRANT:
            return JsonResponse(code=1, msg='已发放奖励', status=status.HTTP_200_OK)

        group_recharges = ActivityGroupRecharge.objects.filter(group_id=group_info.id).all()

        if len(group_recharges) == 0:
            return JsonResponse(code=1, msg='没有成员,不能发放奖励', status=status.HTTP_200_OK)

        for group_recharge in group_recharges:
            order_no = group_recharge.order_no
            recharge_balance_change = BalanceChange.objects.filter(reference=order_no, parent_user_id=group_recharge.parent_user_id, reason=3).first()
            if not recharge_balance_change:
                logger.debug('not found recharge record where order_no={}, parent_user_id={}'.format(order_no, group_recharge.parent_user_id))
            parent_user = group_recharge.parent_user
            balance_change = BalanceChange()
            balance_change.reason = BalanceChange.BONUS
            balance_change.adviser_user_id = parent_user.adviser_user_id
            balance_change.xg_user_id = parent_user.xg_user_id
            balance_change.amount = group_recharge.bonus_amount
            balance_change.normal_amount = 0
            balance_change.reference = group_recharge.order_no
            balance_change.parent_user_id = group_recharge.parent_user_id
            balance_change.user_id = parent_user.id
            balance_change.role = BalanceChange.PARENT
            balance_change.balance_id = recharge_balance_change.balance_id
            balance_change.save()
            # recharge_order = RechargeOrder.objects.filter(order_no=group_recharge.order_no).first()
            # recharge_order.incentive_amount = group_recharge.bonus_amount
            # recharge_order.save()
        group_info.grant_award = ActivityGroupInfo.GRANT
        group_info.save()
        cms_user = request.session.get('user')
        logger.debug('give out bonus, user_id:{}, group_info_id:{}'.format(cms_user.get('id'), group_info.id))
        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #28
0
    def revert_list(self, request):
        try:
            virtual_class_ids = request.data.get('virtual_class_ids')
            virtual_class_type = int(request.data.get('virtual_class_type'))
        except:
            return JsonResponse(code=1, msg='参数错误', status=status.HTTP_200_OK)

        VirtualclassInfo.objects.filter(
            id__in=virtual_class_ids,
            status__in=(VirtualclassInfo.NOT_START,
                        VirtualclassInfo.STARTED)).update(
                            virtualclass_type_id=virtual_class_type)

        try:
            user = request.session.get('user')
            logger.debug(
                'revert virtualclass type , user={}, virtualclass_ids={}, virtual_class_type={}'
                .format(user.get('id'), ','.join(virtual_class_ids),
                        virtual_class_type))
        except Exception as e:
            logger.debug('revert virtualclass type fail, error='.format(e))

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #29
0
    def edite_class_name(self, request, pk):
        class_info = self.get_object()
        class_name = request.data.get('class_name')
        class_info.class_name = class_name
        class_info.save()

        try:
            user = request.session.get('user')
            logger.debug(
                'edite class name, user={}, class_id={}, class_name={}'.format(
                    user.get('id'), class_info.id, class_name))
        except Exception as e:
            logger.debug('edite class name, fail, error='.format(e))

        return JsonResponse(code=0, msg='success', status=status.HTTP_200_OK)
예제 #30
0
 def course_playback(self, request, pk):
     # vc = self.get_object()
     vc = VirtualclassInfo.objects.filter(id=pk).first()
     if vc.virtualclass_type_id == VirtualclassType.BAIJIAYUN:
         if not vc.bj_class_id:
             return JsonResponse(code=1,
                                 msg='未找到教室',
                                 status=status.HTTP_200_OK)
         bj_class_id = vc.bj_class_id.split(',')[0]
         session_mp4_record = baijiayun.playback(bj_class_id)
     else:
         if not vc.tk_class_id:
             return JsonResponse(code=1,
                                 msg='未找到教室',
                                 status=status.HTTP_200_OK)
         session_mp4_record = classroom_controller.seeze_tk_record(
             vc.tk_class_id)
     return JsonResponse(code=0,
                         msg='success',
                         data={
                             'mp4_url': session_mp4_record,
                             'virtualclass_type': vc.class_type_id
                         },
                         status=status.HTTP_200_OK)