Esempio n. 1
0
def by_class(request, export=False, *args, **kwargs):
    o, title = _query(request)

    total = {'use_time_total': 0, 'use_count_total': 0}
    if o.exists():
        total['use_time_total'] = o.aggregate(total=Sum('use_time'))['total']
        total['use_count_total'] = o.aggregate(total=Sum('use_count'))['total']

        ret = o.values('town_name', 'school_name', 'grade_name',
                       'class_name').annotate(use_time_total=Sum('use_time'),
                                              use_count_total=Sum('use_count'),
                                              use_days=Count('uuid'))

        for i in ret:

            i['use_time_average'] = '{0:.2f}'.format(i['use_time_total'] *
                                                     1.0 / i['use_days'])
            i['use_count_average'] = '{0:.2f}'.format(i['use_count_total'] *
                                                      1.0 / i['use_days'])

        #ret = []
        #towns = list(set(o.values_list('town_name', flat=True)))
        #schools = list(set(o.values_list('school_name', flat=True)))
        #grades = list(set(o.values_list('grade_name', flat=True)))
        #classes = list(set(o.values_list('class_name', flat=True)))
        #
        # for town in towns:
        #    for school in schools:
        #        for grade in grades:
        #            for cls in classes:
        #                q = o.filter(town_name=town,
        #                             school_name=school,
        #                             grade_name=grade,
        #                             class_name=cls)
        #                if not q.exists():
        #                    continue
        #                ret.append({
        #                    'town_name': town,
        #                    'school_name': school,
        #                    'grade_name': grade,
        #                    'class_name': cls,
        #
        #                    'use_time_average': '{0:.2f}'.format(q.aggregate(avg=Avg('use_time'))['avg']),
        #                    'use_time_total': q.aggregate(total=Sum('use_time'))['total'],
        #                    'use_count_average': '{0:.2f}'.format(q.aggregate(avg=Avg('use_count'))['avg']),
        #                    'use_count_total': q.aggregate(total=Sum('use_count'))['total'],
        #                })
        if export:
            return ret, total, title
        return paginatoooor(request, ret, total=total)
    if export:
        return None, total, title
    # return create_failure_dict(msg='该时间段内无机器使用记录')
    return paginatoooor(request, [], total=total)
Esempio n. 2
0
def by_school(request, export=False, *args, **kwargs):
    o, title = _query(request)

    total = {'use_time_total': 0, 'use_count_total': 0}
    if o.exists():
        total['use_time_total'] = o.aggregate(total=Sum('use_time'))['total']
        total['use_count_total'] = o.aggregate(total=Sum('use_count'))['total']

        ret = o.values('town_name', 'school_name').annotate(
            use_time_total=Sum('use_time'),
            use_count_total=Sum('use_count'),
            use_days=Count('uuid'))

        for i in ret:
            i['use_time_average'] = '{0:.2f}'.format(i['use_time_total'] *
                                                     1.0 / i['use_days'])
            i['use_count_average'] = '{0:.2f}'.format(i['use_count_total'] *
                                                      1.0 / i['use_days'])

            i['class_count'] = o.filter(town_name=i['town_name'],
                                        school_name=i['school_name']).values(
                                            'grade_name',
                                            'class_name').distinct().count()

        #ret = []
        #towns = list(set(o.values_list('town_name', flat=True)))
        #schools = list(set(o.values_list('school_name', flat=True)))
        # for town in towns:
        #    for school in schools:
        #        q = o.filter(town_name=town,
        #                     school_name=school)
        #        if not q.exists():
        #            continue
        #        # 年级-班级
        #        class_names = set(map(lambda i: '%s%s' % (i[0], i[1]), #去重
        #            q.values_list('grade_name', 'class_name', flat=False)))
        #        ret.append({
        #            'town_name': town,
        #            'school_name': school,
        #
        #            'class_count': len(class_names),
        #            'use_time_average': '{0:.2f}'.format(q.aggregate(avg=Avg('use_time'))['avg']),
        #            'use_time_total': q.aggregate(total=Sum('use_time'))['total'],
        #            'use_count_average': '{0:.2f}'.format(q.aggregate(avg=Avg('use_count'))['avg']),
        #            'use_count_total': q.aggregate(total=Sum('use_count'))['total'],
        #        })
        if export:
            return ret, total, title
        return paginatoooor(request, ret, total=total)
    if export:
        return None, total, title
    # return create_failure_dict(msg='该时间段内无机器使用记录')
    return paginatoooor(request, [], total=total)
Esempio n. 3
0
def list_current(request, *args, **kwargs):
    """年级班级管理>班班通电脑教室>显示电脑教室"""
    terms = models.Term.objects.filter(deleted=False)
    q = models.Class.objects.filter(grade__term__in=terms, grade__number=13)
    uuids = q.values_list('uuid', flat=True)
    cc = models.ComputerClass.objects.filter(
        class_bind_to__in=uuids).order_by('class_bind_to__number')
    ret = []
    for i in cc:
        d = {}
        d['uuid'] = i.class_bind_to.uuid
        d['computerclass_uuid'] = i.uuid
        d['mac'] = i.class_bind_to.mac()
        d['school_year'] = i.class_bind_to.grade.term.school_year
        d['term_type'] = i.class_bind_to.grade.term.term_type
        d['name'] = i.class_bind_to.name
        d['number'] = i.class_bind_to.number
        d['client_number'] = i.client_number
        d['lesson_range'] = [
            list(j)
            for j in i.lesson_range.values_list('uuid', 'name', flat=False)
        ]
        d['grade_name'] = i.class_bind_to.grade.name
        ret.append(d)

    return paginatoooor(request, ret)
Esempio n. 4
0
def terminal_boot_by_town(request, export=False, *args, **kwargs):
    """教学点终端开机统计>按乡镇街道"""
    o, m, title, days = _query(request)
    total = {
        'boot_time_total': _aggregate(o, m)['boot_time'],
        'boot_count_total': _aggregate(o, m)['boot_count']
    }
    ret = []
    if o.exists():
        towns = list(set(o.values_list('town_name', flat=True)))
        for town in towns:
            p = o.filter(town_name=town)
            if not p.exists():
                continue
            d = _aggregate(p, m, True)
            ret.append({
                'town_name':
                town,
                'room_count':
                d['room_count'],
                'boot_time_total':
                d['boot_time'],
                'boot_count_total':
                d['boot_count'],
                'boot_time_average':
                '%.2f' % (d['boot_time'] * 1.0 / days),
                'boot_count_average':
                '%.2f' % (d['boot_count'] * 1.0 / days),
            })
    if export:
        return ret, total, title
    return paginatoooor(request, ret, total=total, days=days)
Esempio n. 5
0
def resource_type(request):
    q = models.ResourceType.objects.all()
    if models.Setting.getvalue('server_type') == 'school':
        q = q.values()
    else:
        q = q.values('uuid', 'value', 'remark').distinct()
    return paginatoooor(request, q)
Esempio n. 6
0
def computerclass_realtime(request, *args, **kwargs):
    """实时概况>电脑教室桌面预览"""
    node = request.GET.get('uuid', None)
    if not node:
        return create_failure_dict(msg='未获取到获取节点信息')

    only_computerclass = True
    is_ok, records = _get_globalpreviews(node, only_computerclass)
    if is_ok:
        return paginatoooor(request, records)

    return create_failure_dict(msg=records)
Esempio n. 7
0
def terminal_time_used_log(request, export=False, *args, **kwargs):
    try:
        grade_name = request.GET.get('grade_name', None)
        class_name = request.GET.get('class_name', None)
        o, title = _query(request)

        total = {'use_time_total': 0, 'use_count_total': 0}
        if o.exists():
            if grade_name:
                o = o.filter(grade_name=grade_name)

            if class_name:
                o = o.filter(class_name=class_name)
            total['use_time_total'] = o.aggregate(
                total=Sum('use_time'))['total']
            total['use_count_total'] = o.aggregate(
                total=Sum('use_count'))['total']
            ret = []
            for i in o:
                ret.append({
                    'town_name': i.town_name,
                    'school_name': i.school_name,
                    'grade_name': i.grade_name,
                    'class_name': i.class_name,
                    'mac': i.mac,
                    'create_time': str(i.create_time)[:10],
                    'use_time': i.use_time,
                    'use_count': i.use_count
                })
            if export:
                return ret, total, title
            return paginatoooor(request, ret, total=total)
        if export:
            return None, total, title
        return paginatoooor(request, [], total=total)
    except:
        if settings.DEBUG:
            traceback.print_exc()
        return paginatoooor(request, [], total=total)
Esempio n. 8
0
def realtime(request, *args, **kwargs):
    """实时概况>班班通桌面预览"""
    node = request.GET.get('uuid', None)
    if not node:
        return create_failure_dict(msg='未获取到获取节点信息')

    only_computerclass = False
    is_ok, records = _get_globalpreviews(node, only_computerclass)
    if is_ok:
        return paginatoooor(request, records)

    return create_failure_dict(msg=records,
                               data={'page_count': 1, 'page': 1,
                                     'page_size': 4, 'record_count': 0,
                                     'records': []})
Esempio n. 9
0
def terminal_use(request, *args, **kwargs):
    """教师授课>教学点终端使用日志"""
    o, total = _query(request)
    ret = []
    if o.exists():
        ret = map(lambda i: {
            'town_name': i.town_name,
            'point_name': i.point_name,
            'number': i.number,
            'use_time': i.use_time,
            'boot_time': i.boot_time,
            'date': i.create_time,
            'to_class_time': '{0:.2f}'.format(i.use_time / 45.0),
        }, o)
    return paginatoooor(request, ret, total=total)
Esempio n. 10
0
def terminal_boot(request, *args, **kwargs):
    """教师授课>教学点终端开机日志"""
    ret = []
    o, total = _query2(request)
    if o.exists():
        for i in o:
            ret.append({'town_name': i.town_name,
                        'point_name': i.point_name,
                        'number': i.number,
                        'create_time': datetime.datetime.strftime(i.create_time, '%Y-%m-%d'),
                        #'use_time': i.use_time,
                        'boot_time': i.boot_time,
                        #'use_count': i.use_count
                        'boot_count': i.boot_count
                        })
    return paginatoooor(request, ret, total=total)
Esempio n. 11
0
def classroom_use_by_town(request, export=False, *args, **kwargs):
    """教学点教室使用统计>按乡镇街道"""
    edu_objs, timeused_objs, title, days = _query(request)
    total = _aggregate(edu_objs, timeused_objs)
    ret = []
    if edu_objs.exists():
        towns = list(set(edu_objs.values_list('town_name', flat=True)))
        for town in towns:
            p = edu_objs.filter(town_name=town)
            if not p.exists():
                continue
            d = _aggregate(p, timeused_objs, True)
            d['town_name'] = town
            ret.append(d)
    if export:
        return ret, total, title
    return paginatoooor(request, ret, total=total)
Esempio n. 12
0
def classroom_use_by_unit_class(request, export=False, *args, **kwargs):
    """教学点教室使用统计>按教学点教室"""
    edu_objs, timeused_objs, title, days = _query(request)
    total = _aggregate(edu_objs, timeused_objs)
    ret = []
    if edu_objs.exists():
        rooms = models.EduPointDetail.objects.none()
        for i in edu_objs:
            rooms |= i.edupointdetail_set.filter(type='room')
        for i in rooms:
            d = _aggregate(i, timeused_objs)
            d['town_name'] = i.edupoint.town_name
            d['point_name'] = i.edupoint.point_name
            d['name'] = i.name
            ret.append(d)

    if export:
        return ret, total, title
    return paginatoooor(request, ret, total=total)
Esempio n. 13
0
def terminal_boot_by_unit_class(request, export=False, *args, **kwargs):
    """教学点终端开机统计>按教学点教室"""
    o, m, title, days = _query(request)
    total = {
        'boot_time_total': _aggregate(o, m)['boot_time'],
        'boot_count_total': _aggregate(o, m)['boot_count']
    }
    ret = []
    if o.exists():
        towns = list(set(o.values_list('town_name', flat=True)))
        for town in towns:
            p = o.filter(town_name=town)
            if not p.exists():
                continue
            points = list(set(p.values_list('point_name', flat=True)))
            for point in points:
                q = p.filter(point_name=point)
                if not q.exists():
                    continue
                # d = _aggregate(q, m)
                lst = map(
                    lambda i: {
                        'town_name':
                        town,
                        'point_name':
                        point,
                        'number':
                        i.number,
                        'boot_time_total':
                        _aggregate(i, m)['boot_time'],
                        'boot_count_total':
                        _aggregate(i, m)['boot_count'],
                        'boot_time_average':
                        '%.2f' % (_aggregate(i, m)['boot_time'] * 1.0 / days),
                        'boot_count_average':
                        '%.2f' % (_aggregate(i, m)['boot_count'] * 1.0 / days),
                    }, q)
                ret.extend(lst)

    if export:
        return ret, total, title
    return paginatoooor(request, ret, total=total)
Esempio n. 14
0
def leest(request, *args, **kwargs):
    """系统设置>服务器管理>教学点教室终端管理>列表显示"""
    server_type = Setting.getvalue('server_type')
    if server_type != 'country':
        return create_failure_dict(msg='错误的服务器级别')

    o = list(_query(request))
    ret = map(
        lambda i: {
            'uuid': i['pk'],
            'school_year': i['edupoint__school_year'],
            'term_type': i['edupoint__term_type'],
            'town_name': i['edupoint__town_name'],
            'point_name': i['edupoint__point_name'],
            'key': i['communicate_key'],
            'status': i['cpuID'] and i['cpuID'] and '已申报' or '未申报',
            'number': i['name'],
            'last_active_time': i['last_active_time'],
            'last_upload_time': i['last_upload_time'],
        }, o)
    return paginatoooor(request, ret)
Esempio n. 15
0
def list_current(request, *args, **kwargs):
    if request.method == 'GET':
        q = models.Role.objects.all()
        q = q.values('uuid', 'name', 'remark')

        return paginatoooor(request, q)
Esempio n. 16
0
def get_node_info(request, *args, **kwargs):
    """班班通桌面使用日志,用于返回请求的节点辖区的信息"""
    school_year = request.GET.get('school_year', None)
    term_type = request.GET.get('term_type', None)
    lesson_period_sequence = request.GET.get('lesson_period_sequence', None)
    uu = request.GET.get('uuid', None)
    server_type = models.Setting.getvalue('server_type')
    root_name = models.Setting.getvalue(server_type)

    if uu:
        try:
            node = models.Group.objects.get(uuid=uu)
        except:
            return create_failure_dict(msg='错误的UUID')

    else:
        server_type = models.Setting.getvalue('server_type')
        node = models.Group.objects.get(group_type=server_type)

    if school_year and term_type and node:
        if node.group_type in ['city', 'country']:
            info = _get_school_class_count(node, school_year, term_type)

        elif node.group_type == 'town':
            info = _get_class_count(node, school_year, term_type)

        elif node.group_type == 'school':
            # 学校详细时,先分页,一页6个统计
            # q 所有班级(已排序) s开始时间 e结束时间
            q, s, e = _get_pic_count(node, school_year, term_type)
            # 分页处理
            page_info = get_page_info(request)
            paginator = Paginator(q, 6)  # 一页6个
            try:
                records = list(
                    paginator.page(page_info['page_num']).object_list)
            except EmptyPage:
                # If page is out of range (e.g. 9999), deliver last page of results.
                records = list(paginator.page(paginator.num_pages).object_list)
            # 每一个班级的详细数据
            r = []
            for c in records:
                class_uuid = c['uuid']
                class_name = c['grade__name'] + u'年级' + c['name'] + u'班'
                pic = models.DesktopPicInfo.objects.filter(
                    class_uuid=class_uuid)
                pic = pic.filter(created_at__range=(s, e))

                if lesson_period_sequence:
                    pic = pic.filter(
                        lesson_period_sequence=lesson_period_sequence)
                r.append({
                    'uuid': class_uuid,
                    'name': class_name,
                    'group_type': 'class',
                    'pic_count': pic.count()
                })

            return create_success_dict(
                data={
                    'page': page_info['page_num'],
                    'page_count': paginator.num_pages,
                    'page_size': page_info['page_size'],
                    'record_count': paginator.count,
                    'records': r,
                })
        else:
            return create_failure_dict(msg='错误的节点类型')

        return paginatoooor(request, info, root_name=root_name)

    return create_failure_dict(msg='获取参数失败!')
Esempio n. 17
0
def screenshot_node_info(request, *args, **kwargs):
    """教师授课>教学点桌面使用日志>节点信息获取"""
    f = lambda x: x == 'country' and 'town' or x
    server_type = Setting.getvalue('server_type')
    root_name = Setting.getvalue(server_type)
    if server_type == 'school':
        return create_failure_dict(msg=u'错误的服务器级别.')
    node_type = request.GET.get('node_type', f(server_type))

    o, pic, conditions = _query(request, node_type)
    q = models.EduPointDetail.objects.none()
    for i in o:
        q |= i.edupointdetail_set.filter(type='room')

    for i in ('province', 'city', 'country', 'town', 'unit', 'room'):
        if node_type == i:
            break
        name = '%s_name' % (i != 'unit' and i or 'point')
        if not conditions[name]:
            return create_failure_dict(msg=u'父级参数不完整(%s)' % name)
    for i in conditions.keys():
        if not conditions[i]:
            del conditions[i]

    ret = []
    if node_type == 'province':
        provinces = list(set(o.values_list('province_name', flat=True)))
        for province_name in provinces:
            oo = o.filter(province_name=province_name)
            # qq = q.filter(edupoint__province_name=province_name)
            pp = pic.filter(edupoint__province_name=province_name)
            ret.append({
                'parent_name': province_name,
                'node_type': 'province',
                'child_type': 'city',
                'unit_count': oo.count(),
                'room_count': oo.aggregate(n=Sum('number'))['n'],
                'pic_count': pp.count(),
            })
        conditions['parent_key'] = 'province_name'
    elif node_type == 'city':
        citys = list(set(o.values_list('city_name', flat=True)))
        for city_name in citys:
            oo = o.filter(city_name=city_name)
            # qq = q.filter(edupoint__city_name=city_name)
            pp = pic.filter(edupoint__city_name=city_name)
            ret.append({
                'parent_name': city_name,
                'node_type': 'city',
                'child_type': 'country',
                'unit_count': oo.count(),
                'room_count': oo.aggregate(n=Sum('number'))['n'],
                'pic_count': pp.count(),
            })
        conditions['parent_key'] = 'city_name'
    elif node_type == 'country':
        countrys = list(set(o.values_list('country_name', flat=True)))
        for country_name in countrys:
            oo = o.filter(country_name=country_name)
            # qq = q.filter(edupoint__country_name=country_name)
            pp = pic.filter(edupoint__country_name=country_name)
            ret.append({
                'parent_name': country_name,
                'node_type': 'country',
                'child_type': 'town',
                'unit_count': oo.count(),
                'room_count': oo.aggregate(n=Sum('number'))['n'],
                'pic_count': pp.count(),
            })
        conditions['parent_key'] = 'country_name'
    elif node_type == 'town':
        towns = list(set(o.values_list('town_name', flat=True)))
        for town_name in towns:
            oo = o.filter(town_name=town_name)
            # qq = q.filter(edupoint__town_name=town_name)
            pp = pic.filter(edupoint__town_name=town_name)
            ret.append({
                'parent_name': town_name,
                'node_type': 'town',
                'child_type': 'unit',
                'unit_count': oo.count(),
                'room_count': oo.aggregate(n=Sum('number'))['n'],
                'pic_count': pp.count(),
            })
        conditions['parent_key'] = 'town_name'
    elif node_type == 'unit':
        points = list(set(o.values_list('point_name', flat=True)))
        for point_name in points:
            oo = o.filter(point_name=point_name)
            # qq = q.filter(edupoint__point_name=point_name)
            pp = pic.filter(edupoint__point_name=point_name)
            ret.append({
                'parent_name': point_name,
                'node_type': 'unit',
                'child_type': 'room',
                'unit_count': oo.count(),
                'room_count': oo.aggregate(n=Sum('number'))['n'],
                'pic_count': pp.count(),
            })
        conditions['parent_key'] = 'point_name'
    elif node_type == 'room':
        ret = map(
            lambda i: {
                'parent_name': i.name,
                'node_type': 'room',
                'child_type': 'none',
                'unit_count': 1,
                'room_count': 1,
                'point_id': i.edupoint.pk,
                'room_id': i.pk,
                'pic_count': pic.filter(edupointdetail=i).count(),
            }, q)
        conditions['parent_key'] = 'room_name'
    return paginatoooor(request,
                        ret,
                        conditions=conditions,
                        root_name=root_name)