Пример #1
0
def list_current(request, *args, **kwargs):
    """资产管理>资产维修管理"""
    # TODO 2015-03-23
    # 添加字段
    # 所属位置
    # 修改API文档
    if request.method == 'GET':
        page_info = get_page_info(request)
        cache.set('asset_repair_list', json.dumps(request.GET))
        title, q = list_query(request.GET)
        paginator = Paginator(q, page_info['page_size'])
        records = list(paginator.page(page_info['page_num']).object_list)
        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': records,
            })
Пример #2
0
def get_teacherloginlog(request):
    client = _get_conn()
    if not client:
        return
    table = client.banbantong.teacherloginlog
    try:
        page_info = get_page_info(request)
        start_date = request.GET.get('start_date')
        end_date = request.GET.get('end_date')
        lesson_period = request.GET.get('lesson_period')
        country_name = request.GET.get('country_name')
        town_name = request.GET.get('town_name')
        school_name = request.GET.get('school_name')
        grade_name = request.GET.get('grade_name')
        class_name = request.GET.get('class_name')
        lesson_name = request.GET.get('lesson_name')
        teacher_name = request.GET.get('teacher_name')

        cond = {}
        if start_date:
            s = datetime.datetime.combine(parse_date(start_date),
                                          datetime.time.min)
            cond['created_at'] = {'$gte': s}
        if end_date:
            e = datetime.datetime.combine(parse_date(end_date),
                                          datetime.time.max)
            if 'created_at' not in cond:
                cond['created_at'] = {}
            cond['created_at']['$lte'] = e
        if lesson_period:
            cond['lesson_period_sequence'] = lesson_period
        if country_name:
            cond['country_name'] = country_name
        if town_name:
            cond['town_name'] = town_name
        if school_name:
            cond['school_name'] = school_name
        if grade_name:
            cond['grade_name'] = grade_name
        if class_name:
            cond['class_name'] = class_name
        if lesson_name:
            cond['lesson_name'] = {'$regex': lesson_name}
        if teacher_name:
            cond['teacher_name'] = {'$regex': teacher_name}

        fields = [
            'uuid', 'province_name', 'city_name', 'country_name', 'town_name',
            'school_name', 'grade_name', 'class_name', 'teacher_name',
            'lesson_period_sequence', 'lesson_name', 'created_at', 'time_used'
        ]
        proj = {}
        for i in fields:
            proj[i] = True
        proj['_id'] = False
        skip = (page_info['page_num'] - 1) * page_info['page_size']
        limit = page_info['page_size']
        cursor = table.find(spec=cond,
                            fields=proj,
                            skip=skip,
                            limit=limit,
                            sort=[('created_at', pymongo.DESCENDING)])
        record_count = cursor.count()
        page_count = (record_count + limit - 1) / limit
        records = []
        for row in cursor:
            records.append(row)
        cursor.close()
        client.close()
        return create_success_dict(
            data={
                'records': records,
                'page': page_info['page_num'],
                'page_size': page_info['page_size'],
                'record_count': record_count,
                'page_count': page_count,
            })
    except:
        logger.exception('')
        return create_failure_dict(msg='系统错误')
Пример #3
0
def list_current(request, *args, **kwargs):
    page_info = get_page_info(request)
    edu_background = request.GET.get('edu_background')
    sex = request.GET.get('sex')
    status = request.GET.get('status')
    start_date = request.GET.get('start_date')
    end_date = request.GET.get('end_date')
    teacher_name = request.GET.get('teacher_name')
    title = request.GET.get('title')
    trans_2_pinyin = request.GET.get('trans2pinyin', False)
    terms = models.Term.objects.filter(deleted=False)
    q = models.Teacher.objects.filter(deleted=False)
    if edu_background:
        q = q.filter(edu_background=edu_background)
    if sex:
        if sex == u'男':
            sex = 'male'
        else:
            sex = 'female'
        q = q.filter(sex=sex)

    recount_status = False
    if status:
        if status == u'授课':
            q = q.annotate(status_count=Count('lessonteacher')).filter(
                lessonteacher__class_uuid__grade__term__in=terms)
        else:
            if terms:
                q = q.annotate(status_count=Count('lessonteacher')).exclude(
                    lessonteacher__class_uuid__grade__term__in=terms)
                recount_status = True
            else:
                q = q.annotate(status_count=Count('lessonteacher'))
                recount_status = True
    else:
        q = q.annotate(status_count=Count('lessonteacher'))
        recount_status = True

    if start_date and end_date:
        s = parse_date(start_date)
        e = parse_date(end_date)
        s = datetime.datetime.combine(s, datetime.time.min)
        e = datetime.datetime.combine(e, datetime.time.max)
        q = q.filter(register_at__range=(s, e))
    if teacher_name:
        q = q.filter(name__contains=teacher_name)
    if title:
        q = q.filter(title=title)
    q = q.values('uuid', 'sequence', 'name', 'sex', 'edu_background',
                 'birthday', 'title', 'register_at', 'mobile', 'qq',
                 'status_count', 'remark')

    if recount_status:
        q = list(q)
        for one in q:
            if one['status_count'] > 0:
                obj = models.Teacher.objects.get(uuid=one['uuid'])
                if not obj.lessonteacher_set.filter(
                        class_uuid__grade__term__in=terms):
                    one['status_count'] = 0
    if trans_2_pinyin == 'true':
        q = list(q)
        for o in q:
            o.update(trans2pinyin(o['name']))

    page_data = db_utils.pagination(q, **page_info)

    return create_success_dict(
        data={
            'records': model_list_to_dict(page_data['records']),
            'page': page_data['page_num'],
            'page_size': page_data['page_size'],
            'record_count': page_data['record_count'],
            'page_count': page_data['page_count'],
        })
Пример #4
0
def resource_store(request, *args, **kwargs):
    """资源使用>卫星资源接收日志"""
    school_year = request.GET.get('school_year')
    term_type = request.GET.get('term_type')
    start_date = request.GET.get('start_date')
    end_date = request.GET.get('end_date')
    town_name = request.GET.get('town_name')
    point_name = request.GET.get('point_name')

    q = models.EduPointResourceReceLog.objects.all().order_by('-rece_time')
    if school_year:
        q = q.filter(school_year=school_year)
    if term_type:
        q = q.filter(term_type=term_type)
    if town_name:
        q = q.filter(town_name=town_name)
    if point_name:
        q = q.filter(point_name=point_name)

    if start_date and end_date:
        # 按自然日期查询
        s = parse_date(start_date)
        e = parse_date(end_date)
        s = datetime.datetime.combine(s, datetime.time.min)
        e = datetime.datetime.combine(e, datetime.time.max)
        q = q.filter(rece_time__range=(s, e))

    page_info = get_page_info(request)

    total_resource_size = q.aggregate(total=Sum('rece_size')).get('total', 0)

    total_resource_count = q.aggregate(total=Sum('rece_count')).get('total', 0)

    q = q.values('id', 'school_year', 'term_type', 'town_name', 'point_name', 'rece_time', 'rece_count', 'rece_size', 'rece_type').distinct()

    # 添加一个uuid,与id是一样的
    map(lambda x: x.setdefault('uuid', x['id']), q)

    paginator = Paginator(q, page_info['page_size'])
    records = paginator.page(page_info['page_num']).object_list

    # 每条卫星接收日志的详细信息是一起返回
    for record in records:
        obj = models.EduPointResourceReceLog.objects.get(id=record['uuid'])
        details = obj.edupointresourcerecelogdetail_set.all()
        d_len = details.count()

        # 资源文件详细
        details = details.values('type', 'size', 'count')
        # 按资源文件最多排序, 相同数量比较大小
        details = sorted(details, key=lambda x: (x['count'], x['size']), reverse=True)

        # 每个种类的详细情况
        if d_len <= 5:
            record['details'] = details
        else:
            record['details'] = details[:5]
            # 余下的全部整个'其他'
            other_type_count = reduce(lambda x, y: x + y, map(lambda x: x['count'], details[5:]))
            other_type_size = reduce(lambda x, y: x + y, map(lambda x: x['size'], details[5:]))

            record['details'].append({'type': u'其他', 'count': other_type_count, 'size': other_type_size})

    ret = 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': model_list_to_dict(records),
        'total_resource_size': total_resource_size,
        'total_resource_count': total_resource_count,
    })

    return ret