Example #1
0
    def put(self, request, sid, aid, vid):
        """
        修改考勤记录
        :param request:
        :param sid:
        :param aid:
        :param vid:
        :return:
        """
        logic = AttendanceLogic(self.auth, sid, aid, vid)
        # logic.check(AssociationPermissionEnum.ATTENDANCE)
        params = ParamsParser(request.JSON)
        attendance = logic.attendance

        # 过滤标题
        if params.has('title'):
            title = params.str('title', desc='标题')
            if AssociationAttendance.objects.filter(
                    title=title, association=logic.association).exclude(
                        id=attendance.id).exists():
                raise AttendanceExcept.title_exist()
            attendance.title = title

        with params.diff(attendance):
            attendance.description = params.str('description', desc='描述')
            attendance.place_x = params.float('place_x', desc='考勤纬度')
            attendance.place_y = params.float('place_y', desc='考勤经度')
            attendance.distance = params.float('distance', desc='容错距离')
            attendance.start_time = params.float('start_time', desc='开始时间')
            attendance.end_time = params.float('end_time', desc='结束时间')

        attendance.save()
        return Result(id=vid, association_id=self.auth.get_association_id())
Example #2
0
    def get(self, request, tid):
        """
        获取任务申请列表
        :param request:
        :param tid:
        :return:
        """
        params = ParamsParser(request.GET)
        limit = params.int('limit', desc='每页最大渲染数', require=False, default=10)
        page = params.int('page', desc='当前页数', require=False, default=1)
        logic = TaskLogic(self.auth, tid)

        if logic.task.author != self.auth.get_account() and \
                self.auth.get_account().role != int(AccountRoleEnum.ADMIN):
            raise TaskInfoExcept.no_permission()

        applies = TaskApply.objects.filter(task=logic.task).values(
            'id', 'create_time', 'update_time', 'author', 'author__nickname'
        ).order_by('create_time')

        @slicer(applies, limit=limit, page=page)
        def get_apply_list(obj):
            obj['author'] = {
                'id': obj['author'],
                'nickname': obj['author__nickname']
            }
            del obj['author__nickname']
            return obj
        apply_list, pagination = get_apply_list()
        return SuccessResult(applies=apply_list, pagination=pagination)
Example #3
0
    def post(self, request, sid, aid, vid):
        """
        发起请假
        :param request:
        :param sid:
        :param aid:
        :param vid:
        :return:
        """
        params = ParamsParser(request.JSON)
        alogic = AttendanceLogic(self.auth, sid, aid, vid)
        # if alogic.attendance.end_time < time.time():
        #     raise AttendanceExcept.no_in_place()
        # 获取协会待办事项
        description = params.str('description', desc='请假事由')
        backlog = AssociationBacklog.parse(alogic.association.backlog)
        # key: [人事id][考勤表id] = 请假事由
        _attendance = backlog.attendance()

        if str(vid) in _attendance:
            if str(alogic.account.id) in _attendance[str(vid)]["data"]:
                _attendance[str(vid)]["data"][str(
                    alogic.account.id)]["description"] = description
            else:
                _attendance[str(vid)]["data"][str(alogic.account.id)] = {
                    "name": alogic.account.nickname,
                    "description": description
                }
        else:
            _attendance[str(vid)] = {
                "name": alogic.attendance.title,
                "data": {
                    str(alogic.account.id): {
                        "name": alogic.account.nickname,
                        "description": description
                    }
                }
            }
        """
                {
                    attendance: {
                        "考勤id": {
                            "name": "考勤名字",
                            "data": {
                                "人id": {
                                    "name": "名字",
                                    "description": "请假事由"
                                }
                            }
                        }
                    }
                }
        """

        backlog.attendance = _attendance
        # 更新数据库
        alogic.association.backlog = backlog.dumps()
        alogic.association.save()

        return Result(id=vid, association_id=self.auth.get_association_id())
Example #4
0
    def post(self, request, sid, aid, vid):
        """
        获取考勤情况
        :param request:
        :param sid:
        :param aid:
        :param vid:
        :return:
        """
        logic = AttendanceLogic(self.auth, sid, aid, vid)
        params = ParamsParser(request.JSON)
        _type = params.int('type', desc='考勤类别', default=0,
                           require=False)  # type: int 0-协会 1-部门 2-个人

        data = {}
        if _type == 2:
            data = logic.get_account_sign_info()
        else:
            # logic.check(AssociationPermissionEnum.ATTENDANCE)
            if _type == 0:
                data = logic.get_association_sign_info()
            elif _type == 1:
                data = logic.get_department_sign_info(
                    params.int('department', desc='部门id'))

        return Result(data=data, association_id=self.auth.get_association_id())
Example #5
0
    def post(self, request, sid, aid):
        """
        批量获取协会考勤信息
        :param request:
        :param sid:
        :param aid:
        :return:  -1-尚未开始 0-已经结束 1-正在进行
        """
        redis = AttendanceRedisFactory()
        params = ParamsParser(request.JSON)
        logic = AttendanceLogic(self.auth, sid, aid)
        ids = params.list('ids', desc='考勤表id')

        data = list()
        attendances = AssociationAttendance.objects.get_many(ids=ids)
        _deparment_id = "-1" if logic.account.department is None else logic.account.department_id
        _aid = logic.account.id
        for attendance in attendances:
            logic.attendance = attendance
            try:
                info = logic.get_attendance_info()
                _status = redis.hget(
                    logic.build_key(logic.attendance.id, _deparment_id), _aid)
                if _status is None:
                    _status = -1
                info["attendance_status"] = _status
                data.append(info)
            except:
                pass

        return Result(data=data, association_id=self.auth.get_association_id())
Example #6
0
    def post(self, request, sid, cid, aid):
        """
        批量导入学生信息
        :param request:
        :param sid:
        :param cid:
        :param aid:
        :return:
        """
        logic = ArrangementLogic(self.auth, sid, cid, aid)
        slogic = StudentUserLogic(self.auth, sid)
        params = ParamsParser(request.JSON)
        studentuser_data = params.list('data', desc='导入学生信息')

        arrangement = logic.arrangement
        for data in studentuser_data:
            data_params = ParamsParser(data)
            try:
                studentuser = slogic.create_studentuser(data_params)
                arrangement.students.add(studentuser)
            except:
                pass
        arrangement.save()

        return SuccessResult(id=aid)
Example #7
0
    def post(self, request, sid, aid):
        """
        批量记住通知
        :param request:
        :param sid:
        :param aid:
        :return:
        """
        logic = NoticeLogic(self.auth, sid, aid)

        params = ParamsParser(request.JSON)
        ids = params.list("ids", desc="通知id列表")

        static = {}
        notices = AssociationNotice.objects.get_many(ids=ids)
        for notice in notices:

            logic.notice = notice
            if logic.notice.association_id != logic.association.id:
                _static = -1
            else:
                _static = 1 if logic.remember() else 0
            static[str(notice.id)] = _static

        return Result(static=static)
Example #8
0
    def post(self, request, sid, aid):
        """
        提交评分表
        :param request:
        :param sid:
        :param aid:
        :return:
        """
        logic = AppraisingScoreLogic(self.auth, sid, aid)
        # logic.check(AssociationPermissionEnum.APPRAISING, AssociationPermissionEnum.ASSOCIATION_VIEW_DATA)

        params = ParamsParser(request.JSON)
        target_id = params.int('target_id', desc='填写对象id')
        content = params.dict('content', desc='评分正文')           # type: dict {"number": "answer"}
        # 检查目标用户是否符合标准
        if not AssociationAccount.objects.filter(association=logic.association, id=target_id).exists():
            raise AssociationExcept.not_account()
        # 过滤非发起评优时段提交 或 已填写过
        if AppraisingScore.objects.filter(target_id=target_id, association=logic.association).exists():
            raise AppraisingInfoExcept.no_time_post()

        score = AppraisingScore.objects.create(
            author=logic.account,
            association=logic.association,
            target_id=target_id,
            content=json.dumps(content),
            version=logic.get_version(),
            score=logic.content_to_score(content),
            template_id=logic.get_template_id(),
        )

        return Result(id=score.id, association_id=self.auth.get_association_id())
Example #9
0
    def get(self, request, sid, aid):
        """
        发起招新
        :param request:
        :param sid:
        :param aid:
        :return:
        """
        logic = RegistrationLogic(self.auth, sid, aid)
        # logic.check(AssociationPermissionEnum.INTERVIEW)

        params = ParamsParser(request.GET)
        template_id = params.int('template_id', desc='使用模板id')
        start_time = params.float('start_time', desc='开始时间')
        end_time = params.float('end_time', desc='结束时间')
        # 更新协会配置
        config = AssociationConfigureEntity.parse(logic.association.config)
        interview_version_dict = config.interview_version_dict()

        interview_version_dict[str(config.interview_version() + 1)] = {
            "template_id": template_id,
            "start_time": start_time,
            "end_time": end_time
        }
        config.interview_version = logic.get_interview_version() + 1
        config.interview_version_dict = interview_version_dict

        logic.association.config = config.dumps()
        logic.association.save()

        return Result(association_id=self.auth.get_association_id(),
                      status="success")
Example #10
0
    def post(self, request):
        """
        开发登陆接口
        :param request:
        :return:
        """
        params = ParamsParser(request.JSON)
        code = params.str('token', desc='验证ID')

        accounts = Account.objects.filter(temp_access_token=code)
        if not accounts.exists():
            try:
                account = Account.objects.create(
                    temp_access_token=code,
                    role=int(RoleEnum.DIRECTOR),
                    permissions=AccountPermissionEntity().dumps(),
                )
            except:
                raise AccountInfoExcept.account_filter_error()
        else:
            account = accounts[0]

        self.auth.set_account(account)

        if self.WEB:
            self.auth.set_session()
            return Result(id=account.id)

        return Result(data={
            "id": account.id,
            "token": self.auth.create_token()
        },
                      association_id=self.auth.get_association_id())
Example #11
0
    def post(self, request, sid, aid):
        """
        加入协会
        :param request:
        :param sid:
        :param aid:
        :return:
        """
        logic = AssociationLogic(self.auth, sid)
        logic.association = logic.get_association(aid)
        account = self.auth.get_account()

        params = ParamsParser(request.JSON)
        choosing_code = params.str('choosing_code')
        if logic.association.choosing_code != choosing_code:
            _status = -1
        else:
            # 判断是否已加入该协会
            _account = AssociationAccount.objects.filter(
                association=logic.association,
                account=account,
            )
            if _account.exists():
                _status = 1
            else:
                ata = AssociationAccount.objects.create(
                    nickname=account.nickname,
                    association=logic.association,
                    account=account,
                )
                _status = 0

        return Result(status=_status,
                      association_id=self.auth.get_association_id())
Example #12
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)
Example #13
0
    def delete(self, request, gid):
        """
        移除成员
        :param request:
        :param gid:
        :return:
        """
        params = ParamsParser(request.JSON)
        logic = FaceUGroupsLogic(self.auth, gid)
        ids = params.list('ids', desc='成员id列表')

        status = {}
        mappings = FaceUFacialMakeupMapping.objects.get_many(ids)
        for mapping in mappings:
            _id = mapping.id
            try:
                if mapping.group_id == logic.group.id:
                    mapping.delete()
                    status[_id] = 1
                else:
                    status[_id] = 0
            except:
                status[_id] = 0

        return SuccessResult(status=status)
Example #14
0
    def post(self, request, tid):
        """
        提交任务汇报
        :param request:
        :param tid:
        :return:
        """
        params = ParamsParser(request.JSON)
        logic = TaskLogic(self.auth, tid)

        if logic.task.leader != self.auth.get_account():
            raise TaskReportExcept.no_permission()
        # 每个任务有且仅有一个任务汇报
        if TaskReport.objects.filter(task=logic.task).exists():
            raise TaskReportExcept.report_is_exists()

        with transaction.atomic():
            report = TaskReport.objects.create(
                task=logic.task,
                summary=params.str('summary', 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
            report.resource.set(list(meta_list))
        # 修改任务阶段至结算期
        logic.task.stage = int(TaskStageEnum.SETTLEMENT)

        report.save()
        return SuccessResult(id=report.id)
Example #15
0
    def get(self, request, sid, aid):
        """
        获取考勤列表
        :param request:
        :param sid:
        :param aid:
        :return:
        """
        params = ParamsParser(request.GET)
        limit = params.int('limit', desc='每页最大渲染数', require=False, default=10)
        page = params.int('page', desc='当前页数', require=False, default=1)
        logic = AssociationLogic(self.auth, sid, aid)

        attendances = AssociationAttendance.objects.values(
            'id', 'update_time').filter(association__id=aid).filter(
                Q(department__isnull=True)
                | Q(department=logic.account.department))
        if params.has('title'):
            attendances = attendances.filter(
                title__contains=params.str('title', desc='标题'))
        if params.has('start_time'):
            attendances = attendances.filter(
                start_time__gte=params.float('start_time', desc='开始时间'))
        if params.has('end_time'):
            attendances = attendances.filter(
                end_time__lte=params.float('end_time', desc='结束时间'))

        @slicer(attendances, limit=limit, page=page)
        def get_attendances_list(obj):
            return obj

        attendances, pagination = get_attendances_list()
        return Result(attendances=attendances,
                      pagination=pagination,
                      association_id=self.auth.get_association_id())
Example #16
0
    def post(self, request):
        """
        登录
        :param request:
        :return:
        """
        # TODO: 后续加上人机验证
        params = ParamsParser(request.JSON)
        password = params.str('password',
                              desc='密码',
                              min_length=MIN_PASSWORD_LENGTH,
                              max_length=MAX_PASSWORD_LENGTH)
        username = params.str('username',
                              desc='用户名',
                              max_length=MAX_USERNAME_LENGTH)

        accounts = Account.objects.filter_cache(username=username)
        # 因为得到的是list类型所以直接使用len即可,不会造成多次数据库io操作
        if len(accounts) == 0 or not signatures.compare_password(
                password, accounts[0].password):
            raise AccountInfoExcept.login_error()

        self.auth.set_account(accounts[0])
        self.auth.set_session()
        return SuccessResult(id=accounts[0].id)
Example #17
0
    def post(self, request, sid, cid, aid):
        """
        导入考勤情况
        主要是因为该系统只是一个附属管理系统
        原本应该直接从主系统数据库获取信息
        现在只能做导入操作
        :param request:
        :param sid:
        :param cid:
        :param aid:
        :return:
        """
        params = ParamsParser(request.JSON)
        data = params.list('data', default='考勤信息')
        logic = ArrangementLogic(self.auth, sid, cid, aid)
        students = logic.arrangement.students.all()

        status = {}
        students_info = {student.code: student.id for student in students}
        for info in data:
            try:
                PracticeAttendance.objects.create(school_id=sid,
                                                  course_id=cid,
                                                  arrangement_id=aid,
                                                  student_id=students_info.get(
                                                      info.get('code', ''),
                                                      -1),
                                                  leaver=info.get('leaver', 0),
                                                  absent=info.get('absent', 0),
                                                  late=info.get('late', 0))
                status[info.get('code', '')] = True
            except:
                status[info.get('code', '')] = False
        return SuccessResult(status)
Example #18
0
    def post(self, request, sid, aid):
        """
        批量获通知信息
        :param request:
        :param sid:
        :param aid:
        :return:
        """
        params = ParamsParser(request.JSON)
        logic = NoticeLogic(self.auth, sid, aid)

        ids = params.list('ids', desc='通知id列表')
        notices = AssociationNotice.objects.get_many(ids=ids)

        data = list()
        for notice in notices:
            try:
                logic.notice = notice
                if logic.notice.association_id != logic.association.id:
                    continue
                data.append(logic.get_notice_info())
            except:
                pass

        return Result(data=data, association_id=self.auth.get_association_id())
Example #19
0
    def put(self, request, tid):
        """
        修改成员角色
        :param request:
        :param tid:
        :return:
        """
        logic = TeamLogic(self.auth, tid)
        params = ParamsParser(request.JSON)

        ids = params.list('ids', desc='成员id列表')
        role = params.int('role', desc='角色enum')
        # 过滤错误role
        if not AccountRoleEnum.has_value(role):
            raise TeamInfoExcept.role_error()

        status = dict()
        accounts = AccountTeam.objects.get_many(pks=ids)
        for account in accounts:
            if account.team == logic.team:
                account.role = role
                account.save()
                status[str(account.id)] = 1
            else:
                status[str(account.id)] = 0
        return SuccessResult(status=status)
Example #20
0
    def post(self, request, tid):
        """
        加入队伍
        :param request:
        :param tid:
        :return:
        """
        if AccountTeam.objects.filter(
                account=self.auth.get_account()).exists():
            raise TeamInfoExcept.already_in_team()

        logic = TeamLogic(self.auth, tid)
        params = ParamsParser(request.JSON)
        # 检查入队密码
        password = params.str('password',
                              desc='入队密码',
                              default='',
                              require=False)
        if not logic.team.public and password != logic.team.password:
            raise TeamInfoExcept.password_error()
        # 检查队伍人员是否满员
        if logic.team.full:
            raise TeamInfoExcept.team_is_full()

        with transaction.atomic():
            account = AccountTeam.objects.create(
                team=logic.team,
                account=self.auth.get_account(),
            )
        if AccountTeam.objects.filter(
                team=logic.team).count() >= logic.team.maximum_number:
            logic.team.full = True
            logic.team.save()

        return SuccessResult(id=account.id)
Example #21
0
    def put(self, request, cid):
        """
        修改分类信息
        :param request:
        :param cid:
        :return:
        """
        params = ParamsParser(request.JSON)
        logic = TaskClassificationLogic(self.auth, cid)

        # 环状警告
        # if params.has('parent'):
        #     parent = TaskClassification.objects.get_once(pk=params.int('parent', desc='父节点id'))
        #     if parent is None:
        #         raise TaskClassificationExcept.parent_is_not_exists()

        classification = logic.classification
        with params.diff(classification):
            classification.name = params.str(
                'name', desc='名称', max_length=MAX_CLASSIFICATION_LENGTH)
            classification.description = params.str(
                'description', desc='简介', max_length=MAX_DESCRIPETION_LENGTH)

        # if params.has('parent'):
        #     classification.parent = parent
        classification.save()

        return SuccessResult(id=cid)
Example #22
0
    def post(self, request):
        """
        注册账户 or 登陆账户
        :param request:
        :return:
        """
        params = ParamsParser(request.JSON)
        code = params.str('token', desc='验证ID')
        openid, session = self.get_openid(code)
        client_auth_mode = self.request.META.get(
            'HTTP_HOHO_AUTH_MODEL') == "client"

        accounts = Account.objects.filter_cache(temp_access_token=openid)
        if len(accounts) == 0:
            nickname = params.str('nickname', desc='昵称')
            sex = params.int('sex', desc='性别')
            try:
                account = Account.objects.create(
                    realname=nickname,
                    nickname=nickname,
                    sex=sex,
                    temp_access_token=openid,
                    role=int(RoleEnum.DIRECTOR),
                    permissions=AccountPermissionEntity().dumps(),
                    motto="这个人很懒,什么jb都没有")
                _id = account.id
            except:
                fake = Faker(locale='zh_CN')
                p = fake.profile()
                nickname = p.get('name', "****")
                account = Account.objects.create(
                    realname=nickname,
                    nickname=nickname,
                    sex=sex,
                    temp_access_token=openid,
                    role=int(RoleEnum.DIRECTOR),
                    permissions=AccountPermissionEntity().dumps(),
                    motto="这个人很懒,什么jb都没有")
                _id = account.id
        else:
            account = accounts[0]
            _id = account.id
        # 更新数据
        self.auth.set_account(account)
        # 载入登陆信息
        if client_auth_mode:
            return Result(data={
                "id": _id,
                "token": self.auth.create_token()
            },
                          association_id=self.auth.get_association_id())

        self.auth.set_account(account)
        self.auth.set_session()

        return Result(id=_id)
Example #23
0
    def post(self, request, sid):
        """
        创建协会
        :param request:
        :param sid:
        :return:
        """
        logic = AssociationLogic(self.auth, sid)
        params = ParamsParser(request.JSON)
        account = self.auth.get_account()

        # 权限检查
        # permission_entity = AccountPermissionEntity.parse(self.auth.get_account().permissions)
        # if not permission_entity.create():
        #     raise AssociationExcept.no_permission()

        # 创建协会
        name = params.str('name', desc='名称')
        if Association.objects.values('id').filter(school__id=sid, name=name).exists():
            return Result(status=-1, association_id=self.auth.get_association_id())

        config = AssociationConfigureEntity()
        association = Association.objects.create(
            name=name,
            short_name=params.str('short_name', desc='缩写', require=False, default=''),
            description=params.str('description', desc='简介', require=False, default=''),
            choosing_code=AssociationLogic.elective_code(),
            config=config.dumps(),
            school=logic.school,
        )

        # 创建课表配置
        AssociationCurriculum.objects.create(
            title="{}课表配置".format(association.name),
            association=association,
            content=logic.get_school_curriculum_config().dumps()
        )

        # 创建协会人事关联
        AssociationAccount.objects.create(
            nickname=account.realname,
            account=account,
            association=association,
            role=int(RoleEnum.PRESIDENT),
        )

        # 非系统管理员只拥有一次性创建协会权限
        if self.auth.get_account().role != int(RoleEnum.ADMIN):
            account = self.auth.get_account()
            permissions = AccountPermissionEntity.parse(account.permissions)
            permissions.create = False
            account.permissions = permissions.dumps()
            account.save()

        return Result(status=1, association_id=self.auth.get_association_id())
Example #24
0
    def post(self, request, sid):
        """
        创建课程
        :param request:
        :param sid:
        :return:
        """
        params = ParamsParser(request.JSON)
        logic = SchoolLogic(self.auth, sid)

        try:
            with transaction.atomic():
                course = PracticeCourse.objects.create(
                    school=logic.school,
                    author=self.auth.get_account(),
                    tag_id=params.int('tag', desc='tagid')
                    if params.has('tag') else None,
                    name=params.str('name', desc='课程名称'),
                    description=params.str('description',
                                           desc='描述',
                                           default='',
                                           require=False),
                    start_time=params.float('start_time',
                                            desc='开始时间',
                                            default=0.0,
                                            require=False),
                    end_time=params.float('end_time',
                                          desc='结束时间',
                                          default=0.0,
                                          require=False))
        except Exception as ex:
            raise PracticeCourseInfoExcept.course_create_fail()
        return SuccessResult(id=course.id)
Example #25
0
    def get(self, request, sid, cid):
        """
        获取老师对学生评价列表
        :param request:
        :param sid:
        :param cid:
        :return:
        """
        logic = CourseLogic(self.auth, sid, cid)
        params = ParamsParser(request.GET)
        limit = params.int('limit', desc='每页最大渲染数', require=False, default=10)
        page = params.int('page', desc='当前页数', require=False, default=1)

        evaluates = PracticeEvaluateTeacherToStudent.objects.filter(
            author=logic.course.author).values('id', 'update_time')
        if params.has('star'):
            evaluates = evaluates.filter(star=params.int('star', desc='星级'))
        if params.has('key'):
            key = params.str('key', desc='关键字')
            evaluates = evaluates.filter(
                Q(student__realname__contains=key)
                | Q(student__code__contains=key))

        evaluates_list, pagination = slicer(evaluates, limit=limit,
                                            page=page)()()
        return SuccessResult(evaluates=evaluates_list, pagination=pagination)
Example #26
0
    def post(self, request):
        """
        开发登陆接口
        :param request:
        :return:
        """
        params = ParamsParser(request.JSON)
        token = params.str('token', desc='token')

        accounts = FaceUAccount.objects.filter_cache(temp_access_token=token)

        self.auth.set_account(accounts[0])
        self.auth.set_session()
        return SuccessResult(id=accounts[0].id)
Example #27
0
    def get(self, request, sid, cid):
        """
        获取学生对课程评价列表
        :param request:
        :param sid:
        :param cid:
        :return:
        """
        params = ParamsParser(request.GET)
        limit = params.int('limit', desc='每页最大渲染数', require=False, default=10)
        page = params.int('page', desc='当前页数', require=False, default=1)

        evaluates = PracticeEvaluateStudentToCourse.objects.filter(
            course_id=cid).values('id', 'update_time')
        if params.has('star'):
            evaluates = evaluates.filter(star=params.int('star', desc='星级'))
        if params.has('key'):
            key = params.str('key', desc='关键字关键字(学生真实名称、学号)弱匹配')
            evaluates = evaluates.filter(
                Q(author__realname__contains=key)
                | Q(author__code__contains=key))

        evaluates_list, pagination = slicer(evaluates, limit=limit,
                                            page=page)()()
        return SuccessResult(evaluates=evaluates_list, pagination=pagination)
Example #28
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)
Example #29
0
    def get(self, request, sid, aid):
        """
        获取报名表列表
        :param request:
        :param sid:
        :param aid:
        :return:
        """
        logic = AssociationLogic(self.auth, sid, aid)
        # logic.check(AssociationPermissionEnum.INTERVIEW)
        params = ParamsParser(request.GET)
        limit = params.int('limit', desc='每页最大渲染数', require=False, default=10)
        page = params.int('page', desc='当前页数', require=False, default=1)

        registrations = InterviewRegistration.objects.values(
            'id', 'update_time').filter(association=logic.association)

        if params.has('version'):
            registrations = registrations.filter(
                version=params.int('version', desc='版本号'))
        if params.has('key'):
            key = params.str('key', desc='关键字 报名用户昵称 真实名称')
            registrations = registrations.filter(
                Q(account__nickname__contains=key)
                | Q(account__realname__contains=key))

        registrations, pagination = slicer(registrations,
                                           limit=limit,
                                           page=page)()()
        return Result(registrations=registrations,
                      pagination=pagination,
                      association_id=self.auth.get_association_id())
Example #30
0
    def get(self, request):
        """
        切换学校id
        :param request:
        :return:
        """
        params = ParamsParser(request.GET)
        code = params.int('school_id', desc='协会id')

        try:
            self.auth.update_school_id(code)
        except:
            raise AccountInfoExcept.error()

        return Result(id=code, association_id=code)