Ejemplo n.º 1
0
    def get(self, request):
        """
        获取队伍列表
        :param request:
        :return:
        """
        params = ParamsParser(request.GET)
        limit = params.int('limit', desc='每页最大渲染数', require=False, default=10)
        page = params.int('page', desc='当前页数', require=False, default=1)

        teams = Team.objects.values('id', 'nickname', 'full', 'public',
                                    'leader', 'leader__nickname',
                                    'update_time')
        if params.has('nickname'):
            teams = teams.filter(
                nickname__contains=params.str('nickname', desc='队伍名称'))
        if params.has('full'):
            teams = teams.filter(full=params.bool('full', desc='是否满员'))
        if params.has('public'):
            teams = teams.filter(public=params.bool('public', desc='是否公开'))

        @slicer(teams, limit=limit, page=page)
        def get_team_list(obj):
            obj['leader'] = {
                'nickname': obj.get('leader__nickname', ''),
                'id': obj.get('leader')
            }
            if 'leader__nickname' in obj: del obj['leader__nickname']
            return obj

        team_list, pagination = get_team_list()
        return SuccessResult(teams=team_list, pagination=pagination)
Ejemplo n.º 2
0
    def put(self, request, aid, eid):
        """
        修改用户作品信息
        :param request:
        :param aid:
        :param eid:
        :return:
        """
        params = ParamsParser(request.JSON)

        logic = ExhibitionLogic(self.auth, eid)
        exhibition = logic.exhibition

        with params.diff(exhibition):
            exhibition.title = params.str('title', desc='标题')
            exhibition.content = params.str('content', desc='正文')
            exhibition.show = params.bool('show', desc='是否展示')

        # 关联资源元数据
        if params.has('resources'):
            meta_list = {ResourceLogic.decode_token(token) for token in params.list('resources', desc='资源信息')}
            try:
                meta_list.remove(None)
            except:
                pass
            exhibition.resource.set(list(meta_list))
            exhibition.save()

        return SuccessResult(id=eid)
Ejemplo n.º 3
0
    def post(self, request, aid):
        """
        创建个人作品展示
        :param request:
        :param aid:
        :return:
        """
        params = ParamsParser(request.JSON)

        with transaction.atomic():
            exhibition = AccountExhibition.objects.create(
                account=self.auth.get_account(),
                title=params.str('title', desc='标题'),
                content=params.str('content', desc='正文'),
                show=params.bool('show', desc='是否展示', default=True, require=False)
            )
        # 关联资源元数据
        if params.has('resources'):
            meta_list = {ResourceLogic.decode_token(token) for token in params.list('resources', desc='资源信息')}
            try:
                meta_list.remove(None)
            except:
                pass
            exhibition.resource.set(list(meta_list))
            exhibition.save()
        return SuccessResult(id=exhibition.id)
Ejemplo n.º 4
0
    def get(self, request, sid, aid):
        """
        获取协会用户列表
        :param request:
        :param sid:
        :param aid:
        :return:
        """
        # 自动权限检查
        logic = AssociationLogic(self.auth, sid, aid)
        params = ParamsParser(request.GET)
        limit = params.int('limit', desc='每页最大渲染数', require=False, default=10)
        page = params.int('page', desc='当前页数', require=False, default=1)

        accounts = AssociationAccount.objects.values(
            'id', 'update_time').filter(association__id=aid)

        if params.has('key'):
            accounts = accounts.filter(
                nickname__contains=params.str('key', desc='关键字'))
        if params.has('role'):
            accounts = accounts.filter(role=params.int('role', desc='身份'))
        if params.has('retire'):
            accounts = accounts.filter(
                retire=params.bool('retire', desc='退休与否'))
        if params.has('department'):
            accounts = accounts.filter(
                department__id=params.int('department', desc='部门id'))

        accounts, pagination = slicer(accounts, limit=limit, page=page)()()
        return Result(accounts=accounts,
                      pagination=pagination,
                      association_id=self.auth.get_association_id())
Ejemplo n.º 5
0
    def get(self, request):
        """
        获取记录列表
        :param request:
        :return:
        """
        params = ParamsParser(request.GET)
        limit = params.int('limit', desc='每页最大渲染数', require=False, default=10)
        page = params.int('page', desc='当前页数', require=False, default=1)

        if self.auth.get_account().role == int(AccountRoleEnum.ADMIN) and \
            params.has('account'):
            _account = FaceUAccount.objects.get_once(
                pk=params.int('account', desc="用户id"))
        else:
            _account = self.auth.get_account()

        record = FaceUDistinguishRecord.objects.filter(author=_account)\
            .values('id', 'update_time', 'group_id').order_by('-create_time')
        if params.has('group'):
            record = record.filter(group_id=params.int('group', desc='分组id'))
        if params.has('start_time'):
            record = record.filter(
                create_time__gte=params.float('start_time', desc='开始时间'))
        if params.has('end_time'):
            record = record.filter(
                create_time__lte=params.float('end_time', desc='结束时间'))
        if params.has('overall'):
            record = record.filter(
                group__isnull=params.bool('overall', desc='全局与否'))
        record_list, pagination = slicer(record, limit=limit, page=page)()()
        return SuccessResult(records=record_list, pagination=pagination)
Ejemplo n.º 6
0
    def get(self, request, sid, aid):
        """
        获取任务列表
        :param request:
        :param sid:
        :param aid:
        :return:
        """
        logic = TaskLogic(self.auth, sid, aid)
        params = ParamsParser(request.GET)
        limit = params.int('limit', desc='每页最大渲染数', require=False, default=10)
        page = params.int('page', desc='当前页数', require=False, default=1)
        
        tasks = AssociationTask.objects.values('id', 'update_time').filter(association_id=aid)
        if params.has('key'):
            key = params.str('key', desc='关键字 标题 内容')
            tasks = tasks.filter(
                Q(title__contains=key) |
                Q(content__contains=key)
            )

        if params.has('working'):
            tasks = tasks.filter(working=params.bool('working', desc='是否以被接任务'))

        if params.has('start_time'):
            tasks = tasks.filter(start_time__gte=params.float('start_time', desc='开始时间'))

        if params.has('end_time'):
            tasks = tasks.filter(end_time__lte=params.float('end_time', desc='结束时间'))

        if params.has('department'):
            tasks = tasks.fiter(department_id=params.int('department', desc='部门id'))

        @slicer(tasks, limit=limit, page=page)
        def get_tasks_list(obj):
            return obj

        tasks, pagination = get_tasks_list()
        return Result(tasks=tasks, pagination=pagination, association_id=self.auth.get_association_id())
Ejemplo n.º 7
0
    def get(self, request, tid):
        """
        获取队伍成员列表
        :param request:
        :param tid:
        :return:
        """
        logic = TeamLogic(self.auth, tid)
        params = ParamsParser(request.GET)
        limit = params.int('limit', desc='每页最大渲染数', require=False, default=10)
        page = params.int('page', desc='当前页数', require=False, default=1)

        accounts = AccountTeam.objects.filter(team=logic.team).values(
            'id',
            'role',
            'account',
            'account__nickname',
            'free',
            'update_time',
        )
        if params.has('role'):
            accounts = accounts.filter(role=params.int('role', desc='角色'))
        if params.has('free'):
            accounts = accounts.filter(free=params.bool('free', desc='空闲与否'))
        if params.has('key'):
            accounts.filter(
                account__nickname__contains=params.str('key', desc='关键字'))

        @slicer(accounts, limit=limit, page=page)
        def get_accounts_list(obj):
            obj['account'] = {
                'id': obj.get('account', ''),
                'nickname': obj.get('account__nickname', '')
            }
            if 'account__nickname' in obj: del obj['account__nickname']
            return obj

        account_list, pagination = get_accounts_list()
        return SuccessResult(accounts=account_list, pagination=pagination)
Ejemplo n.º 8
0
    def put(self, request, sid, aid, acid=""):
        """
        修改用户信息
        :param request:
        :param sid:
        :param aid:
        :param acid:
        :return:
        """
        params = ParamsParser(request.JSON)
        alogic = AssociationAccountLogic(self.auth, sid, aid, acid)

        if acid != "":
            # alogic.check(AssociationPermissionEnum.ASSOCIATION)
            account = alogic.other_account
            # 角色修改
            if params.has('role'):
                # 缺少权限判断 输入过滤
                role = params.int('role', desc='用户角色')
                # 若是部长 则需添加部门id信息
                if role == int(RoleEnum.MINISTER):
                    department_id = params.int('department_id', desc='部门id')
                    department = AssociationDepartment.objects.get_once(
                        pk=department_id)
                    # 过滤部门不存在或非该协会部门
                    if department is None or department.association_id != account.association_id:
                        raise AssociationExcept.department_not_exist()
                    # 更新数据库信息
                    account.department_id = department_id
                    department.manager.add(account)
                    department.save()
                # 若此前是部长但现在不是则清除部门部长信息
                elif account.role == int(RoleEnum.MINISTER):
                    # 查询quertset对象 因为反正都会被修改所以没必要使用filter_cache 性能反而不如filter
                    department = AssociationDepartment.objects.filter(
                        association_id=aid, manager__id=account.id)
                    # 去除管理员关联(部长)
                    if department.exists():
                        department = department[0]
                        department.manager.remove(account)
                        department.save()
                    account.department = None
                account.role = role
            # 权限修改
            if params.has('permissions'):
                permissions = AssociationPermissionsEntity.parse(
                    account.permissions)
                permissions.update(params.dict('permissions', desc='权限'))
                account.permissions = permissions.dumps()
            # 部门修改
            if params.has('department'):
                # 过滤为本协会部门
                department = AssociationDepartment.objects.get_once(
                    pk=params.int('department', desc='部门id'))
                if department is not None and department.association_id == alogic.association.id:
                    account.department = department
            # 退休换届
            if params.has('retire'):
                account.retire = params.bool('retire', desc='退休换届与否')
        else:
            account = alogic.account

        with params.diff(account):
            account.nickname = params.str('nickname', desc='协会内昵称')

        account.save()
        return Result(id=acid, association_id=self.auth.get_association_id())