No Description

models.py 11KB

    # -*- coding: utf-8 -*- from django.db import models from django.utils.translation import ugettext_lazy as _ from django_models_ext import BaseModelMixin from jsonfield import JSONField from shortuuidfield import ShortUUIDField from utils.redis.rqrurl import get_qrcode_url class BranchCampusInfo(BaseModelMixin): MAIN = 0 BRANCH = 1 CAMPUS_TYPE = ( (MAIN, '总院'), (BRANCH, '分院'), ) campus_id = ShortUUIDField(_('campus_id'), max_length=32, blank=True, null=True, help_text='分院唯一标识', db_index=True, unique=True) campus_name = models.CharField(_('campus_name'), max_length=255, blank=True, null=True, help_text='分院名称') campus_type = models.IntegerField(_('campus_type'), choices=CAMPUS_TYPE, default=BRANCH, help_text='学院类型', db_index=True) class Meta: verbose_name = _('分院信息') verbose_name_plural = _('分院信息') def __unicode__(self): return '%d' % self.pk @property def data(self): return { 'campus_id': self.campus_id, 'campus_name': self.campus_name, 'campus_type': self.campus_type, } class BranchCampusAdministratorInfo(BaseModelMixin): PENDING = 0 ACTIVATED = 1 DISABLED = 2 DELETED = 3 USER_STATUS_TUPLE = ( (PENDING, '待审核'), (ACTIVATED, '已激活'), (DISABLED, '已禁用'), (DELETED, '已删除'), ) user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户ID', db_index=True, unique=True) admin_id = ShortUUIDField(_('admin_id'), max_length=32, blank=True, null=True, help_text='管理员唯一标识', db_index=True, unique=True) campus_id = models.CharField(_('campus_id'), max_length=32, blank=True, null=True, help_text='分院唯一标识', db_index=True) campus_name = models.CharField(_('campus_name'), max_length=255, blank=True, null=True, help_text='分院名称') name = models.CharField(_('name'), max_length=255, blank=True, null=True, help_text='管理员姓名') phone = models.CharField(_('phone'), max_length=11, blank=True, null=True, help_text='管理员电话', db_index=True) password = models.CharField(_('password'), max_length=255, blank=True, null=True, help_text='管理员密码') encryption = models.CharField(_('encryption'), max_length=255, blank=True, null=True, help_text='管理员密码') user_status = models.IntegerField(_('user_status'), choices=USER_STATUS_TUPLE, default=PENDING, help_text='管理员状态', db_index=True) class Meta: verbose_name = _('分院管理员信息') verbose_name_plural = _('分院管理员信息') def __unicode__(self): return '%d' % self.pk @property def data(self): admin = BranchCampusInfo.objects.get(campus_id=self.campus_id, status=True) return { 'user_id': self.user_id, 'admin_id': self.admin_id, 'campus_id': self.campus_id, 'campus_name': self.campus_name, 'campus_type': admin.campus_type, 'name': self.name, 'phone': self.phone, 'user_status': self.user_status, } class CourseInfo(BaseModelMixin): course_id = ShortUUIDField(_('course_id'), max_length=32, blank=True, null=True, help_text='课程唯一标识', db_index=True, unique=True) course_name = models.CharField(_('course_name'), max_length=255, blank=True, null=True, help_text='课程名称') authorities = JSONField(_('authorities'), default=[], blank=True, null=True, help_text='课程权限列表') class Meta: verbose_name = _('课程信息') verbose_name_plural = _('课程信息') def __unicode__(self): return '%d' % self.pk @property def all_fields(self): fields = CourseRegisterFieldInfo.objects.filter(course_id=self.course_id, status=True) return [field.data for field in fields] @property def data(self): return { 'course_id': self.course_id, 'course_name': self.course_name, 'authorities': self.authorities, 'fields': self.all_fields, } def admindata(self, admin_id): fields = CourseRegisterFieldInfo.objects.filter(course_id=self.course_id, status=True) return { 'course_id': self.course_id, 'course_name': self.course_name, 'authorities': self.authorities, 'fields': [field.qrcodedata(admin_id) for field in fields], } class CourseRegisterFieldPoolInfo(BaseModelMixin): INPUT = 'input' SELECT = 'select' FILE = 'file' FIELD_TYPE_TUPLE = ( (INPUT, 'input'), (SELECT, 'select'), (FILE, 'file'), ) # { # "type": "input", # input, select, file # "name": "", # "options": ["男", "女"], # type=select # } field_type = models.CharField(_('field_type'), max_length=8, choices=FIELD_TYPE_TUPLE, default=INPUT, help_text='字段类型') field_name = models.CharField(_('field_name'), max_length=32, blank=True, null=True, help_text='字段名称') field_key = models.CharField(_('field_key'), max_length=32, blank=True, null=True, help_text='字段键值') field_options = JSONField(_('field_options'), default=[], blank=True, null=True, help_text='字段选择') class Meta: verbose_name = _('课程报名字段池信息') verbose_name_plural = _('课程报名字段池信息') def __unicode__(self): return '%d' % self.pk @property def data(self): return { 'type': self.field_type, 'key': self.field_key, 'name': self.field_name, 'options': self.field_options, } class CourseRegisterFieldInfo(BaseModelMixin): field_id = ShortUUIDField(_('field_id'), max_length=32, blank=True, null=True, help_text='字段唯一标识', db_index=True, unique=True) course_id = models.CharField(_('course_id'), max_length=32, blank=True, null=True, help_text='课程唯一标识', db_index=True) course_name = models.CharField(_('course_name'), max_length=255, blank=True, null=True, help_text='课程名称') # { # "type": "input", # input, select, file # "name": "", # "options": ["男", "女"], # type=select # } fields = JSONField(_('fields'), default=[], blank=True, null=True, help_text='字段列表') limit_scene_qrcode_url = models.CharField(_('limit_scene_qrcode_url'), max_length=255, blank=True, null=True, help_text='字段二维码') class Meta: verbose_name = _('课程报名字段信息') verbose_name_plural = _('课程报名字段信息') def __unicode__(self): return '%d' % self.pk @property def data(self): return { 'field_id': self.field_id, 'course_id': self.course_id, 'course_name': self.course_name, 'fields': self.fields, } def qrcodedata(self, admin_id): # qrcode_url = get_course_field_limit_scene_qrcode_url('{}:{}'.format(self.field_id, admin_id)) qrcode_url = get_qrcode_url('{}:{}'.format(self.field_id, admin_id)) return { 'field_id': self.field_id, 'course_id': self.course_id, 'course_name': self.course_name, 'fields': self.fields, 'qrcode_url': qrcode_url, } class CourseRegisterInfo(BaseModelMixin): campus_id = models.CharField(_('campus_id'), max_length=32, blank=True, null=True, help_text='分院唯一标识', db_index=True) campus_name = models.CharField(_('campus_name'), max_length=255, blank=True, null=True, help_text='分院名称') admin_id = models.CharField(_('admin_id'), max_length=32, blank=True, null=True, help_text='管理员唯一标识', db_index=True) admin_name = models.CharField(_('admin_name'), max_length=255, blank=True, null=True, help_text='管理员名称') user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识', db_index=True) course_id = models.CharField(_('course_id'), max_length=32, blank=True, null=True, help_text='课程唯一标识', db_index=True) course_name = models.CharField(_('course_name'), max_length=255, blank=True, null=True, help_text='课程名称') field_id = models.CharField(_('field_id'), max_length=32, blank=True, null=True, help_text='字段唯一标识', db_index=True) fields = JSONField(_('fields'), default=[], blank=True, null=True, help_text='字段信息') class Meta: verbose_name = _('课程报名信息') verbose_name_plural = _('课程报名信息') unique_together = ( ('user_id', 'course_id', 'field_id'), ) def __unicode__(self): return '%d' % self.pk @property def data(self): return { 'field_id': self.field_id, 'course_id': self.course_id, 'course_name': self.course_name, 'fields': self.fields, } class UserCourseRegisterInfo(BaseModelMixin): INCLASS = 'inclass' GRADUATED = 'graduate' CERTIFICATE = 'certificate' USER_STATUS_TUPLE = ( (INCLASS, '上课中'), (GRADUATED, '已毕业'), (CERTIFICATE, '已发证'), ) campus_id = models.CharField(_('campus_id'), max_length=32, blank=True, null=True, help_text='分院唯一标识', db_index=True) campus_name = models.CharField(_('campus_name'), max_length=255, blank=True, null=True, help_text='分院名称') admin_id = models.CharField(_('admin_id'), max_length=32, blank=True, null=True, help_text='管理员唯一标识', db_index=True) admin_name = models.CharField(_('admin_name'), max_length=255, blank=True, null=True, help_text='管理员名称') user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识', db_index=True) course_id = models.CharField(_('course_id'), max_length=32, blank=True, null=True, help_text='课程唯一标识', db_index=True) course_name = models.CharField(_('course_name'), max_length=255, blank=True, null=True, help_text='课程名称') user_status = models.CharField(_('user_status'), max_length=32, choices=USER_STATUS_TUPLE, default=INCLASS, help_text='用户状态') # { # 'field_id': '', # 'fields': [] # } fields = JSONField(_('fields'), default=[], blank=True, null=True, help_text='字段信息') class Meta: verbose_name = _('用户课程报名信息') verbose_name_plural = _('用户课程报名信息') unique_together = ( ('user_id', 'course_id'), ) def __unicode__(self): return '%d' % self.pk @property def data(self): return { 'course_id': self.course_id, 'course_name': self.course_name, 'campus_id': self.campus_id, 'campus_name': self.campus_name, 'admin_id': self.admin_id, 'admin_name': self.admin_name, 'user_status': self.user_status, 'user_id': self.user_id, 'fields': self.fields, }