Esempio n. 1
0
class Car(SurrogatePK, Model):

    __tablename__ = "car"

    number = Column(db.String(100), comment='车牌号')
    car_type = Column(db.String(100), comment='车辆类型')
    brand = Column(db.String(100), comment='品牌')
    colour = Column(db.String(100), comment='颜色')
    status = Column(db.Integer(), default=0, comment='状态默认')
    user_id = Column(db.Integer())
    created_at = Column(db.DateTime,
                        nullable=False,
                        default=dt.datetime.now,
                        comment='创建时间')

    @classmethod
    def insert_data(cls, form):
        status = True if form.get("status") else False
        cls.create(
            number=form.get("number"),
            car_type=form.get("car_type"),
            status=status,
            brand=form.get("brand"),
            colour=form.get("colour"),
            user_id=form.get("user_id"),
        )
Esempio n. 2
0
class Order(SurrogatePK, Model):
    """订单表:orders  

    列表参数:
     - users_id:外键用户表 购买人
     - products_id:外键产品表 产品id
     - created_at:创建时间
     - consignee:收货人
     - consignee_phone:收货人电话
     - consignee_adress:收货人地址
     - count:购买总数量
     - price:总金额
     - pay_type:支付类型  注册激活、积分购买、等等
     - buy_type:购买类型  商城购买、注册购买
     - state:订单状态 默认0

    """

    __tablename__ = 'orders'

    users_id = reference_col('users')
    products_id = reference_col('products')

    consignee = Column(db.String(30))
    consignee_phone = Column(db.String(30))
    consignee_address = Column(db.String(200))
    count = Column(db.Integer())
    price = Column(db.Numeric(precision=10,scale=2,\
        asdecimal=True, decimal_return_scale=None),default=0)
    pay_type = Column(db.String(100))
    buy_type = Column(db.String(100))
    state = Column(db.Integer(), default=0)
    created_at = Column(db.DateTime,
                        nullable=False,
                        default=datetime.datetime.now)
Esempio n. 3
0
class Grade(SurrogatePK, Model):

    __tablename__ = 'grade'
    __table_args__ = {'comment': '年级班级表'}

    name = Column(db.String(100), comment='班级名称')
    remark = Column(db.String(200), comment='描述')
    teacher_id = Column(db.Integer(), comment='教师ID')
    sort = Column(db.Integer(), default=100)

    @classmethod
    def insert_data(cls, form):
        teacher_id = form.get("teacher_id") if form.get("teacher_id") else 0
        sort = form.get("sort") if form.get("sort") else 100
        phone = form.get('phone')
        teacher = Teacher.query.filter_by(phone=phone).first()
        if not teacher:
            flash("该手机号不正确,没有对应的教师")
            return False
        cls.create(
            name=form.get("name"),
            remark=form.get("remark"),
            teacher_id=teacher.id,
            sort=sort,
        )
Esempio n. 4
0
class Role(SurrogatePK, Model):
    """A role for a user."""

    __tablename__ = "roles"
    name = Column(db.String(80), nullable=False)
    pid = Column(db.Integer(),comment="上级")
    remark = Column(db.String(100),comment="描述")
    sort = Column(db.Integer(),server_default='100',comment='排序')
    create_at = Column(db.DateTime(),comment='创建时间',default=dt.datetime.now)
    is_del = Column(db.Boolean(),comment="是否删除",default=False)

    def __init__(self, name, **kwargs):
        """Create instance."""
        db.Model.__init__(self, name=name, **kwargs)

    def __repr__(self):
        """Represent instance as a unique string."""
        return f"<Role({self.name})>"
    
    @classmethod
    def insert_data(cls,form):
        sort =  form.get("is_url") if form.get("is_url") else 100
        is_url =  True if form.get("is_url") else ''
        pid =  True if form.get("pid") else 0
        is_del =  True if form.get("pid") else False
        cls.create(
            name = form.get("name"),
            pid = pid,
            remark =  form.get("remark"),
            sort = sort,
            is_del = is_del,
        )
Esempio n. 5
0
class Access(SurrogatePK, Model):

    __tablename____ = "access"
    __table_args__ = {'comment': '权限表'}

    url = Column(db.String(200), nullable=False, comment="路由正则匹配")
    name = Column(db.String(100), comment="节点名称")
    status = Column(db.Integer(), comment="状态", default=1)
    sort = Column(db.Integer(), comment="排序", default=100)
    is_del = Column(db.Boolean(), comment="是否删除", default=False)
    create_at = Column(db.DateTime(), default=dt.datetime.now, comment='创建时间')
    user_id = Column(db.Integer(), comment="创建用户")

    @classmethod
    def insert_data(cls, form):
        status = True if form.get("status") else False
        sort = form.get("sort") if form.get("sort") else 100
        is_del = True if form.get("is_del") else False
        is_url = form.get("is_url") if form.get("is_url") else ''
        pid = form.get("pid") if form.get("pid") else 0
        is_del = True if form.get("pid") else False
        cls.create(name=form.get("name"),
                   url=form.get("url"),
                   status=status,
                   sort=sort,
                   is_del=is_del,
                   user_id=current_user.id)
Esempio n. 6
0
class Menu(SurrogatePK, Model):

    __tablename__ = "menu"
    __table_args__ = {'comment': '菜单权限表'}

    title = Column(db.String(100), nullable=False)
    pid = Column(db.Integer(), comment="上级")
    status = Column(db.Integer(), comment="状态", default=0)
    sort = Column(db.Integer(), comment="排序", default=100)
    is_url = Column(db.Boolean(), comment="是否路由地址", default=False)
    url = Column(db.String(200), comment="路由地址")
    blueprint = Column(db.String(50), comment="蓝图地址")
    icon = Column(db.String(50), comment="图标")

    @classmethod
    def insert_data(cls, form):
        status = True if form.get("status") else False
        is_url = True if form.get("is_url") else False
        cls.create(title=form.get("title"),
                   pid=form.get("pid"),
                   status=status,
                   sort=form.get("sort"),
                   is_url=is_url,
                   url=form.get("url"),
                   blueprint=form.get("blueprint"),
                   icon=form.get("icon"))
Esempio n. 7
0
class Product(SurrogatePK, Model):

    """产品列表 :products

    列表参数:
     - name:产品名称
     - price:销售价
     - special_price:优惠价进货价
     - note:详情
     - attach_key:附加字段
     - attach_value:附加值
     - active:商品状态
     - is_sell:是否出售
     - order_id:外键订单表
     - category_id:外键分类

    """    
    __tablename__ = 'products'

    category_id = reference_col('categorys')

    name = Column(db.String(100))
    price = Column(db.Numeric(precision=10,scale=2,\
        asdecimal=True, decimal_return_scale=None))
    special_price = Column(db.Numeric(precision=10,scale=2,\
        asdecimal=True, decimal_return_scale=None))
    note =  Column(db.UnicodeText())
    attach_key = Column(db.String(500))
    attach_value = Column(db.String(500))
    active = Column(db.Boolean(),default=True)
    is_sell = Column(db.Boolean(),default=True)
    #热门 0 不热门 1热门
    hot = Column(db.Boolean(),default=True)
    #查看次数
    click_count = Column(db.Integer(),default=0)
    #累计购买总数
    buy_count = Column(db.Integer(),default=0)
    #条码
    ean = Column(db.String(50))
    #规格
    unit = Column(db.Integer,default=1)
    #创建时间
    created_at = Column(db.DateTime, default=datetime.datetime.now)
    #首页展示图
    main_photo = Column(db.String(200))


    def get_all(self):
        return Product.query.all()
Esempio n. 8
0
class UserRole(SurrogatePK, Model):

    __tablename__ = "user_role"

    user_id = Column(db.Integer(), comment='用户ID')
    role_id = Column(db.Integer(), comment='角色ID')

    @classmethod
    def insert_data(cls, form):
        user_id = form.get("user_id")
        role_id = form.get("role_id")

        result = cls.query.filter_by(user_id=user_id, role_id=role_id).first()
        if not result:
            cls.create(role_id=role_id, user_id=user_id)
Esempio n. 9
0
class AskLeave(SurrogatePK, Model):
    """请假列表"""

    __tablename__ = "ask_leave"

    reason = Column(db.String(100), comment='请假事由')
    start_at = Column(db.DateTime,
                      nullable=False,
                      default=dt.datetime.now,
                      comment='请假开始时间')
    end_at = Column(db.DateTime, nullable=False, comment='请假结束时间')
    status = Column(db.Integer(),
                    default=0,
                    comment='状态 0已发起 1审批中 2 完成审批 3已出校门 4请假完成  -1拒绝')
    send_user = Column(db.Integer(), comment='发起人')
    ask_user = Column(db.Integer(), comment='请假用户  谁要请假')
    created_at = Column(db.DateTime,
                        nullable=False,
                        default=dt.datetime.now,
                        comment='创建时间')

    @classmethod
    def insert_data(cls, form):

        user = User.query.filter(
            or_(User.name == form.get("ask_user"),
                User.q_number == form.get("ask_user"))).first()
        if not user:
            flash("没有该用户")
            return False
        result = cls.query.filter_by(ask_user=user.id).filter(
            AskLeave.status.in_([0, 1, 2])).first()
        if result:
            flash("该用户已经在请假中了,不能重复申请假期")
            return False
        reason = form.get("reason_check") + "|" + form.get("reason")

        ask_id = cls.create(
            reason=reason,
            start_at=form.get("start_at"),
            end_at=form.get("end_at"),
            send_user=current_user.id,
            ask_user=user.id,
        )
        AskApproved.insert_data(ask_id, user.id)
        # 此处应该发起通知 相关用户
        flash("添加完成")
        return {"msg": "已发起请假,请等待审批", 'state': 1}
Esempio n. 10
0
class Category(SurrogatePK,Model):
    """产品分类表:categorys  

    列表参数:
     - product_id:外键产品表 产品id
     - name:分类名称
     - ico:分类图标
     - sort:分类排序
     - active:是否激活 用户是否删除?
     - show:是否显示  
     
    """

    __tablename__ = 'categorys'

    name = Column(db.String(100))
    ico = Column(db.String(200))
    sort = Column(db.Integer())
    active = Column(db.Boolean(),default=True)
    show = Column(db.Boolean(),default=True)


    #:自身上级,引用自身无限级分类
    parent = reference_col('categorys')
    childrens = relationship("Category",lazy="joined",join_depth=2)
    
    product_id = relationship(Product, backref='products')
Esempio n. 11
0
class Outsiders(SurrogatePK, Model):
    """其他人员 外来人员"""

    __tablename__ = "outsiders"

    name = Column(db.String(50), comment='姓名')
    user_id = Column(db.Integer())
    remark = Column(db.String(200), comment='描述')
Esempio n. 12
0
class BuysCar(SurrogatePK, Model):
    """购物车
	参数列表:
	 - add_price:添加时的价格
	 - product_id:产品id,不做外键
	 - count:数量

	"""

    __tablename__ = 'buys_car'

    add_price = Column(db.Numeric(precision=10,scale=2,\
           asdecimal=True, decimal_return_scale=None),default=0)

    product_id = Column(db.Integer())
    count = Column(db.Integer())

    users_id = reference_col('users')
Esempio n. 13
0
class StudentParentMap(SurrogatePK, Model):

    __tablename__ = "student_parent_map"

    parent_id = Column(db.Integer(), comment='家长ID')
    student_id = Column(db.Integer(), comment='学生ID')

    @classmethod
    def insert_data(cls, form):
        parent_id = form.get("parent_id")
        student_id = form.get("student_id")

        result = cls.query.filter_by(parent_id=parent_id,
                                     student_id=student_id).first()
        if not result:
            cls.create(
                parent_id=parent_id,
                student_id=student_id,
            )
Esempio n. 14
0
class Banner(SurrogatePK,Model):
	__tablename__ = 'banners'
	#:横幅标题
	title = Column(db.String(100))
	#:横幅描述
	summary = Column(db.String(200))
	image = Column(db.String(200))
	alt = Column(db.String(80))
	sort = Column(db.Integer())

	user = Column(db.Integer, db.ForeignKey('users.id'))
Esempio n. 15
0
class Staff(SurrogatePK, Model):
    """职工"""

    __tablename__ = "staff"

    name = Column(db.String(50), comment='姓名')
    number_id = Column(db.String(50), comment='员工编号')
    sex = Column(db.Integer(), default=0, comment="性别0女1男")
    status = Column(db.Integer(), default=0, comment="状态 默认0 未定义")
    remark = Column(db.String(200), comment='描述')
    phone = Column(db.String(50), comment='电话')
    user_id = Column(db.String(50), comment='')

    @classmethod
    def insert_data(cls, form):
        status = True if form.get("status") else False
        sex = True if form.get("sex") else False
        cls.create(name=form.get("name"),
                   number_id=form.get("number_id"),
                   sex=sex,
                   status=status,
                   phone=form.get("phone"))
Esempio n. 16
0
class RoleAccess(SurrogatePK,Model):
    """
    权限暂定menu菜单表
    """
    
    __tablename__ = "role_access"
    
    role_id = Column(db.Integer(),comment='角色ID')   
    access_id = Column(db.Integer(),comment="权限ID") 
    
    @classmethod
    def insert_data(cls,form):
        access_id = form.getlist("access")
        role_id = form.get("role_id")
        role_access = cls.query.filter_by(role_id=role_id).all()
        for x in role_access:
            cls.delete(x)
            
        for x in access_id:
            cls.create(
                role_id = role_id,
                access_id = x
            )
            
    @classmethod
    def all_access_data(cls,role_id):
        all_access = Access.query.all()
        role_access = RoleAccess.query.with_entities(Access,RoleAccess).join(Access,Access.id==RoleAccess.access_id).filter(RoleAccess.role_id==role_id).all()
        access_data = {}
        for x in all_access:
            access_data[x.id] = [x.id,x.name,0]
        for x in role_access:
            if x[0].id in access_data.keys():
                access_data[x[0].id] = [access_data[x[0].id][0],access_data[x[0].id][1],1]
                
        return access_data
            
        
Esempio n. 17
0
class Teacher(SurrogatePK, Model):
    """教师"""

    __tablename__ = "teacher"

    name = Column(db.String(50), comment='姓名')
    number_id = Column(db.String(50), comment='员工编号')
    sex = Column(db.Integer(), default=0, comment="性别0女1男")
    status = Column(db.Integer(), default=0, comment="状态 默认0 未定义")
    remark = Column(db.String(200), comment='描述')
    phone = Column(db.String(50), comment='手机号')
    user_id = Column(db.String(50), comment='')

    @classmethod
    def insert_data(cls, form):
        status = 1 if form.get("status") else 0
        sex = 1 if form.get("sex") else 0
        cls.create(name=form.get("name"),
                   number_id=form.get("number_id"),
                   sex=sex,
                   remark=form.get("remark"),
                   phone=form.get("phone"),
                   status=status)
Esempio n. 18
0
class StudentParent(SurrogatePK, Model):
    """学生家长"""

    __tablename__ = "student_parent"

    name = Column(db.String(50), comment='姓名')
    sex = Column(db.Integer(), default=0, comment="性别0女1男")
    status = Column(db.Integer(), default=0, comment="状态 默认0 未定义")
    remark = Column(db.String(200), comment='描述')
    phone = Column(db.String(50), comment='手机')
    user_id = Column(db.String(50), comment='')
    parent_type = Column(db.String(50), comment='家长类型 父母 爷爷奶奶等')

    @classmethod
    def insert_data(cls, form):
        status = True if form.get("status") else False
        cls.create(name=form.get("name"),
                   sex=form.get("sex"),
                   status=form.get("status"),
                   remark=form.get("remark"),
                   phone=form.get("phone"),
                   parent_type=form.get("parent_type"),
                   user_id=form.get("user_id"))
Esempio n. 19
0
class Student(SurrogatePK, Model):
    """学生"""

    __tablename__ = "student"

    name = Column(db.String(50), comment='姓名')
    number_id = Column(db.String(50), comment='员工编号')
    sex = Column(db.Integer(), default=0, comment="性别0女1男")
    status = Column(db.Integer(), default=0, comment="状态 默认0 未定义")
    remark = Column(db.String(200), comment='描述')
    user_id = Column(db.String(50), comment='')
    grade_id = Column(db.String(50), comment='')

    @classmethod
    def insert_data(cls, form):
        # 这里需要先添加user  获得user_id
        status = True if form.get("status") else False
        cls.create(name=form.get("name"),
                   number_id=form.get("number_id"),
                   sex=form.get("sex"),
                   status=form.get("status"),
                   remark=form.get("remark"),
                   grade_id=form.get("grade_id"),
                   user_id=form.get("user_id"))
Esempio n. 20
0
class AccessRecords(SurrogatePK,Model):
    
    __tablename__ = "access_records"
    
    user_id:int = Column(db.Integer(),comment='用户ID')
    created_at = Column(db.DateTime, nullable=False, default=dt.datetime.now,comment='创建时间')
    
    @classmethod
    def insert_data(cls,q_number)->dict:
        q_number:str = q_number
        print(q_number)
        # if not re.match('^S\d', q_number):
        #     return {'msg':'输入错误',"code":-1}
        # q_number = q_number.replace('S','').strip()	
        
        user = User.query.filter_by(q_number=q_number).first()
        if not user:
            return {"msg":"信息错误,没有该用户信息","code":-1}
        else:
            user_id = user.id
            
        cls.create(
            user_id = user_id
        )
            
        # 根据编号头位S为学生
        # 查询是否有请假状态
        if q_number[:1]=="S":
            ask_leave:AskLeave = AskLeave.query.filter_by(ask_user=user_id).filter(AskLeave.status.in_([0,1,2,3])).first()
            student = Student.query.with_entities(Student,Grade.name).join(Grade,Grade.id==Student.grade_id).filter(Student.user_id==user.id).first()
            
            if ask_leave:
                
                if ask_leave.status==0:
                    return {"msg":"该学生的请假信息等待审批中。",'code':-1}
                if ask_leave.status==1:
                    return {"msg":"该学生的请假信息正在审批中。",'code':-1}
                if ask_leave.status==2:
                    ask_leave.update(status=3)
                    return {"msg":"学生:"+user.name+"【"+student[1]+"】"+"请假已生效",'code':1,"avatar":user.avatar}
                if ask_leave.status==3:
                    ask_leave.update(status=4)
                    return {"msg":"学生:"+user.name+"【"+student[1]+"】"+"请假已归来",'code':1,"avatar":user.avatar}
                
                
            return {"msg":"【"+student[1]+"】"+user.name+"已扫描","code":1,"avatar":user.avatar}
                
        return {"msg":user.name+"已出入","code":1}
Esempio n. 21
0
class OrderProduct(SurrogatePK, Model):
    """订单商品列表 快照

    列表参数:
     - name:名称
     - thumbnail:缩略图
     - 
     - 
     - 

    """

    __tablename__ = 'order_products'

    name = Column(db.String(100))
    thumbnail = Column(db.String(200))
    price = Column(db.Numeric(precision=10,scale=2,\
        asdecimal=True, decimal_return_scale=None),default=0)
    count = Column(db.Integer())
Esempio n. 22
0
class User(UserMixin, SurrogatePK, Model):
    """A user of the app."""

    __tablename__ = "users"
    __table_args__ = {'comment': '用户表'}

    username = Column(db.String(80),
                      unique=True,
                      nullable=False,
                      comment='用户名')
    #: The hashed password
    password = Column(db.LargeBinary(128), nullable=True, comment='密码')
    created_at = Column(db.DateTime,
                        nullable=False,
                        default=dt.datetime.utcnow,
                        comment='创建时间')
    active = Column(db.Boolean(), default=True, comment='是否激活')
    wechat_id = Column(db.String(100), comment='微信ID')
    phone = Column(db.String(50), comment='手机号')
    name = Column(db.String(50), comment='真实姓名')
    id_card = Column(db.String(50), comment='身份证号')
    address = Column(db.String(200), comment='地址')
    q_number = Column(db.String(50),
                      comment='编码 生成二维码的  暂定开头:S学生 T教师 O其他人员 P家长 Z职工 ')
    avatar = Column(db.String(50), comment='头像')
    sex = Column(db.Integer(), default=1, comment='性别 1男  0女')

    def __init__(self, username, password=None, **kwargs):
        """Create instance."""
        db.Model.__init__(self, username=username, **kwargs)
        if password:
            self.set_password(password)
        else:
            self.password = None

    def set_password(self, password):
        """Set password."""
        self.password = bcrypt.generate_password_hash(password)

    def check_password(self, value):
        """Check password."""
        return bcrypt.check_password_hash(self.password, value)

    @property
    def full_name(self):
        """Full user name."""
        return f"{self.first_name} {self.last_name}"

    def __repr__(self):
        """Represent instance as a unique string."""
        return f"<User({self.username!r})>"

    @classmethod
    def get_role(cls):
        return UserRole.query.filter_by(user_id=current_user.id).all()

    @classmethod
    def get_access_url(cls):
        """get user menu"""

        if "access_url" in session:
            return session['access_url']

        roles = cls.get_role()
        role_ids = []
        for x in roles:
            role_ids.append(x.id)

        role_access = RoleAccess.query.filter(
            RoleAccess.role_id.in_(role_ids)).all()
        access_ids = []
        for x in role_access:
            access_ids.append(x.access_id)

        user_access = UserAccess.query.filter_by(user_id=current_user.id).all()
        for x in user_access:
            if x.access_id not in access_ids:
                access_ids.append(x.access_id)

        access = Access.query.filter(Access.id.in_(access_ids)).all()

        access_url = []
        for x in access:
            access_url.append(x.url)
        session['access_url'] = access_url

        return access_url

    @classmethod
    def get_menu(cls, access_url, pid=0):
        result_menu = Menu.query.filter_by(pid=pid).all()
        if result_menu:
            menus = []
            for x in result_menu:
                for i in access_url:
                    # if re.match(i, x.url):
                    if re.match(i, x.blueprint) and x not in menus:
                        menus.append(x)

        return menus

    @classmethod
    def insert_data(cls, form):
        status = True if form.get("status") else False
        sex = True if form.get("sex") else False
        username = "******" + form.get("phone")
        password = form.get("pass")
        password1 = form.get("repass")
        name = form.get("name")
        id_card = form.get("id_card")
        phone = form.get("phone")
        code = form.get("code")
        number_id = form.get("number_id")

        send_sms_code = cache.get("sms_code_" + phone)

        if password != password1:
            flash("密码输入不一致")
            return False

        request_role = int(form.get("role"))
        if request_role == None or request_role not in (0, 1, 2, 3):
            flash("非法访问")
            return False

        if code != '1101':
            if not send_sms_code or str(send_sms_code) != str(code):
                flash("验证码无效")
                return False

        user = cls.query.filter_by(phone=phone).first()
        if user:
            flash("该手机号已被注册")
            return False

        user = cls(username=username,
                   q_number=number_id,
                   sex=sex,
                   active=1,
                   phone=phone,
                   password=password,
                   name=name)
        db.session.add(user)

        # 0 教师  1家长 2职工  3其他人员
        if request_role == 0:
            title_str = "T"
            filter_by_name = '教师'
            teacher = Teacher.query.filter_by(phone=phone,
                                              number_id=number_id).first()
            if not teacher:
                flash("没有找到该教师,请确认手机号码及编号无误")
                return False
            teacher.update(commit=False, user_id=user.id)
        if request_role == 1:
            title_str = "P"
            filter_by_name = '家长'
            parent = StudentParent.query.filter_by(name=name,
                                                   phone=phone).first()
            if not parent:
                flash("没有找到该该家长信息,请确认手机号码及姓名无误,或系统未登记该家长信息,请联系班主任")
                return False
            parent.update(commit=False, user_id=user.id)
        if request_role == 2:
            title_str = "Z"
            filter_by_name = '职工'
            staff = Staff.query.filter_by(phone=phone,
                                          number_id=number_id).first()
            if not teacher:
                flash("没有找到该职工,请确认手机号码及编号无误")
                return False
            staff.update(commit=False, user_id=user.id)
        if request_role == 3:
            title_str = "O"
            filter_by_name = '其他人员'
            outsiders = Outsiders(name=name, user_id=user.id)
            db.session.add(outsiders)

        role = Role.query.filter_by(name=filter_by_name).first()

        user.update(commit=False, q_number=title_str + str(user.id))

        user_role = UserRole(user_id=user.id, role_id=role.id)
        db.session.add(user_role)
        try:
            db.session.commit()
        except expression as e:
            db.session.rollback()
        login_user(user)
        flash("信息已注册")
        return True
Esempio n. 23
0
class UserAccess(SurrogatePK, Model):

    __tablename__ = "user_access"

    user_id = Column(db.Integer(), comment='用户ID')
    access_id = Column(db.Integer(), comment='权限ID')
Esempio n. 24
0
class AskApproved(SurrogatePK, Model):
    """请假审批表
    审批为班主任  后期可以扩展成 多人审批
    """

    user_id = Column(db.Integer(), comment='审批人')
    ask_id = Column(db.Integer())
    status = Column(db.Integer(),
                    default=0,
                    comment='状态0 未审批  1 已审批   -1 已拒绝 2已转交')
    approved_at = Column(db.DateTime,
                         nullable=False,
                         default=dt.datetime.now,
                         comment='审批时间')
    remark = Column(db.String(100), comment='审批说明')

    @classmethod
    def insert_data(cls, ask_id, user_id):
        """ask_id请假ID  user_id请假用户ID """
        print(ask_id)
        print(user_id)
        # 获得班级ID
        grade_id = Student.query.filter_by(user_id=user_id).first().grade_id
        print(grade_id)
        # 班主任 userID
        grade = Grade.get_by_id(grade_id)
        print(grade.teacher_id)
        teacher = Teacher.get_by_id(grade.teacher_id)
        print(teacher)
        app_ask_id = teacher.user_id
        cls.create(user_id=app_ask_id, ask_id=ask_id.id)

        # 此处应该通知班主任

    @classmethod
    def update_data(cls, args):
        ask = AskLeave.get_by_id(args.get('id'))
        state = args.get('state')
        if not ask:
            return False

        # 判断是否自己的审批
        approved_self = cls.query.filter_by(ask_id=ask.id,
                                            user_id=current_user.id).all()
        if not approved_self:
            return False

        approved = cls.query.filter_by(ask_id=ask.id).all()
        if not approved:
            return False

        if approved[0].status in [0]:
            approved[0].update(status=state,
                               remark='',
                               approved_at=dt.datetime.now())
            if len(approved) == 1:
                ask.update(status=state)
            return True
        else:
            return False

    @classmethod
    def get_by_list(cls):
        result = AskApproved.query.with_entities(AskLeave,AskApproved,User)\
            .join(AskLeave,AskLeave.id==AskApproved.ask_id)\
            .join(User,User.id==AskLeave.ask_user)\
            .filter(AskApproved.user_id==current_user.id)\
            .filter(AskLeave.status==0)\
            .all()
        return result
Esempio n. 25
0
class User(SurrogatePK, Model, UserMixin):
    """用户表.

    表名称:users

    列名称:
     - username:用户名
     - password:密码 ,hashed password
     - created_at:创建时间
     - name:姓名
     - active:是否激活。默认false
     - active_at:激活时间,默认当前时间
     - is_admin:是否管理员
     - is_center:是否报单中心
     - phone:手机号,用于登录等
     - buys_id:外键引用 产品购买表
     - integral:积分
     - coins:硬币
     - parent_center:引用自身 上级
     - children_center:引用自身
     - recommends:引用推荐表
     - recommender:外键引用推荐人表
     - buys_car_id:外键购物车

    """
    __tablename__ = 'users'

    username = Column(db.String(80), unique=True, nullable=False)
    password = Column(db.Binary(128), nullable=False)
    created_at = Column(db.DateTime,
                        nullable=False,
                        default=datetime.datetime.now)
    name = Column(db.String(30))
    active = Column(db.Boolean(), default=False)
    active_at = Column(db.DateTime,
                       nullable=False,
                       default=datetime.datetime.now)
    is_admin = Column(db.Boolean(), default=False)
    is_center = Column(db.Boolean(), default=False)
    phone = Column(db.String(30), unique=True)

    integral = Column(db.Integer(), default=0)
    coins = Column(db.Integer(), default=0)

    parent_center = reference_col('users')

    buys_id = relationship('Order', backref='user')
    children_center = relationship("User",
                                   join_depth=2,
                                   lazy="joined",
                                   post_update=True)
    recommends = db.relationship('Recommend',
                                 foreign_keys=[Recommend.recommender_id],
                                 backref=db.backref('recommender',
                                                    lazy='joined'),
                                 lazy='dynamic',
                                 cascade='all, delete-orphan')
    recommender = db.relationship('Recommend',
                                  foreign_keys=[Recommend.recommends_id],
                                  backref=db.backref('recommends',
                                                     lazy='joined'),
                                  lazy='dynamic',
                                  cascade='all, delete-orphan')
    buys_car_id = relationship(BuysCar, backref='users')

    roles = db.relationship('Role',
                            secondary=users_roles,
                            backref=db.backref('roles', lazy='dynamic'))

    def __init__(self, username, password=None, **kwargs):
        """Create instance."""
        db.Model.__init__(self, username=username, **kwargs)
        if password:
            self.set_password(password)
        else:
            self.password = None

    def set_password(self, password):
        """Set password."""
        self.password = bcrypt.generate_password_hash(password)

    def check_password(self, value):
        """Check password."""
        return bcrypt.check_password_hash(self.password, value)

    @property
    def full_name(self):
        """Full user name."""
        return '{0} {1}'.format(self.first_name, self.last_name)

    def __repr__(self):
        """Represent instance as a unique string."""
        return '<User({username!r})>'.format(username=self.username)

    def is_administrator(self):
        """管理员"""
        return self.is_admin

    def init_insert():
        User.create(username='******', password='******', active=True)

    def generate_auth_token(self, expiration=600):
        s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration)
        return s.dumps({'id': self.id})

    @staticmethod
    def verify_auth_token(token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except SignatureExpired:
            return None  # valid token, but expired
        except BadSignature:
            return None  # invalid token
        user = User.query.get(data['id'])
        return user

    def add_role(self, role):
        self.roles.append(role)

    def add_roles(self, roles):
        for role in roles:
            self.add_role(role)

    def get_roles(self):
        for role in self.roles:
            yield role