Exemple #1
0
class RenRate(db.Document):
    """ 留存率比率 """
    t = db.FloatField(db_field='t')
    r = db.FloatField(db_field='r', default=1.0)
    s = db.StringField(db_field='s', default='app_1')

    @classmethod
    def get_r(cls, t, s):
        try:
            ret = cls.query.filter(cls.t == t, cls.s == s).first()
            if ret:
                return ret.r
            return 1.0
        except:
            return 1.0

    @classmethod
    def change_r(cls, t, r, s='app_1'):
        try:
            ret = cls.query.filter(cls.t == t, cls.s == s).first()
            if ret:
                ret.r = r
                ret.s = s
                ret.save()
                return True
            ret = cls()
            ret.s = s
            ret.t = t
            ret.r = r
            ret.save()
        except:
            return False
        return True
Exemple #2
0
class CCount(db.Document):
    """ 综合统计 """
    # 时间
    t = db.FloatField(db_field='t')
    # 服务器
    s = db.StringField(db_field='s')
    # 创号人数
    create = db.IntField(db_field='c', allow_none=True, required=False)
    # 登录人数
    login = db.IntField(db_field='l', allow_none=True, required=False)
    # 最大在线
    max_online = db.IntField(db_field='m', allow_none=True, required=False)
    # 平均在线
    avg_online = db.IntField(db_field='a', allow_none=True, required=False)
    # 充值金额
    pay = db.IntField(db_field='p', allow_none=True, required=False)
    # 充值笔数
    paynums = db.IntField(db_field='n', allow_none=True, required=False)
    # 充值人数
    payusers = db.IntField(db_field='u', allow_none=True, required=False)
    # 新增充值人数
    newnums = db.IntField(db_field='w', allow_none=True, required=False)
    # 最大登录数pid
    max_login_pid = db.IntField(db_field='lp', allow_none=True, required=False)
    # 最大登录数uid
    max_login_uid = db.IntField(db_field='lu', allow_none=True, required=False)
    #平台
    platform = db.IntField(db_field='pf')
Exemple #3
0
class UserLog(db.Document):
    """ 用户登录,GM LOG """
    # 用户帐号
    u = db.StringField(db_field='u')
    # 类型:1=登录, 2=GM操作
    ty = db.IntField(db_field='ty')
    # 详细
    i = db.StringField(db_field='i', required=False, allow_none=True)
    # 时间
    t = db.FloatField(db_field='t')
    # 服务器id
    st = db.StringField(db_field='st', default='zl')
Exemple #4
0
class AdminUser(db.Document):
    # 角色,待激活会员
    UNACTIVE = 1
    # 角色,普通会员
    MEMBER = 100
    # 角色,网站编辑
    MODERATOR = 200
    # 角色, 测试帐号
    TEST = 210
    # 角色, 客服帐号
    CUSTOMER = 220
    # 角色,管理员
    ADMIN = 300
    # other
    OTHER = 400

    query_class = UserQuery

    username_index = Index().ascending('u').unique(drop_dups=True)

    # 登录帐号
    username = db.StringField(db_field='u', required=True, allow_none=False)
    # 密码
    _pwd = db.StringField(db_field='p', required=True, allow_none=False)
    # 昵称
    nickname = db.StringField(db_field='n',
                              required=False,
                              allow_none=True,
                              default=None)
    # 注册时间
    regdate = db.FloatField(db_field='g',
                            required=False,
                            allow_none=True,
                            default=time())
    # 最后一次登录时间
    lastlogin = db.FloatField(db_field='l',
                              required=False,
                              allow_none=True,
                              default=time())
    # 是否已经禁用
    ban = db.BoolField(db_field='b', required=False, default=False)
    # 角色
    role = db.IntField(db_field='r', required=False, default=MODERATOR)
    # 权限, index = 0:基础数据查看,1:基础数据修改,2:用户数据查看
    # 3:用户数据修发, 4:服务器备份恢复, 5:GM管理,6:角色查询, 7:数据统计
    right = db.ListField(db.IntField(),
                         db_field='i',
                         required=False,
                         default=[0, 0, 0, 0, 0, 0, 0, 0, 0])
    # 经验值
    value = db.IntField(db_field='v', required=False, default=0)
    # 性别  0:男,1:女
    sex = db.IntField(db_field='s', required=False, default=0)
    # default server
    server = db.ObjectIdField(db_field='sr',
                              required=False,
                              allow_none=True,
                              default=None)
    # 服务器组
    server_group = db.StringField(db_field='sg',
                                  required=True,
                                  allow_none=False,
                                  default="td_res")

    def __init__(self, *args, **kwargs):
        super(AdminUser, self).__init__(*args, **kwargs)

    def new_login(self):
        """ 注意,此方法会自动保存用户数据 """
        self.lastlogin = time()
        self.value += 1
        self.save()

    @cached_property
    def message(self):
        """ 用户信息辅助类 """
        return str(self.mongo_id)

    def new_msg(self, msg, *nickname):
        """ 新信息,可以批量指定用户昵称 """
        for n in nickname:
            u = AdminUser.query.filter(AdminUser.nickname == n).first()
            if u.mongo_id != self.mongo_id:
                self.message.new(u.mongo_id, msg)
        return True

    @cached_property
    def role_name(self):
        if self.role == self.UNACTIVE:
            return u'待激活'
        elif self.role == self.MEMBER:
            return u'普通会员'
        elif self.role == self.MODERATOR:
            return u'编辑'
        elif self.role == self.ADMIN:
            return u'管理员'
        elif self.role == self.OTHER:
            return u'other'
        else:
            return u'未知'

    @cached_property
    def ban_cn(self):
        if self.ban: return u'是'
        else: return u'否'

    @property
    def password(self):
        return self._pwd

    @password.setter
    def password(self, value):
        self._pwd = md5(value)

    @property
    def is_moderator(self):
        """ 是否网站编辑 """
        return self.role >= self.MODERATOR

    @property
    def is_admin(self):
        """ 是否管理员 """
        return self.role >= self.ADMIN

    @property
    def is_other(self):
        """ """
        return self.role >= self.OTHER

    @cached_property
    def provides(self):
        """ 用于登录验证提供 """
        needs = [RoleNeed('authenticated'), UserNeed(self.mongo_id)]
        if self.is_moderator:
            needs.append(RoleNeed('moderator'))
        if self.is_admin:
            needs.append(RoleNeed('admin'))
        if self.is_other:
            needs.append(RoleNeed('other'))
        return needs

    @cached_property
    def usex(self):
        """ 用户的性别-中文显示 """
        if self.sex == 0:
            return u'男'
        else:
            return u'女'

    def check_password(self, password):
        '检查密码是否一致'
        if self.password is None:
            return False
        return self.password == md5(password)
Exemple #5
0
class BaseRetention(db.Document):
    t = db.FloatField(db_field='t')
    # 服务器
    s = db.StringField(db_field='s')
    # 留存率
    r = db.FloatField(db_field='r')