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)
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)
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)
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())
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)
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())
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)
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())