Beispiel #1
0
 def get_statistics_list(self,
                         s_type=None,
                         user_id=None,
                         project_id=None,
                         name=None,
                         status=None,
                         search=None,
                         page=1,
                         limit=None,
                         group_by=list(),
                         start_time=None,
                         end_time=None,
                         order_by=list()):
     where = []
     param = dict()
     sql = '''SELECT p.name projectName, s.projectId, s.name, s.id, p.config, s.value 
     FROM t_statistics s JOIN t_projects p ON p.id=s.projectId'''
     if s_type is not None:
         where.append("s.type=%(type)s")
         param['type'] = s_type
     if user_id is not None:
         where.append("s.userId=%(userId)s")
         param['userId'] = user_id
     if project_id is not None:
         where.append("s.projectId=%(projectId)s")
         param['projectId'] = project_id
     if name is not None:
         where.append("s.name=%(name)s")
         param['name'] = name
     if status is not None:
         where.append("s.status=%(status)s")
         param['status'] = status
     if search is not None:
         where.append(
             '(p.name LIKE %(search)s OR p.config LIKE %(search)s)')
         param['search'] = '%{}%'.format(search)
     if start_time and end_time:
         where.append(
             "s.createTime BETWEEN '{} 00:00:00' AND '{} 23:59:59'".format(
                 start_time, end_time))
     if where:
         sql += " WHERE {}".format(' AND '.join(where))
     if group_by:
         sql += ' GROUP BY {}'.format(','.join(group_by))
     count_sql = "SELECT COUNT(*) count FROM ({}) as tmp".format(sql)
     if order_by:
         sql += ' ORDER BY {}'.format(','.join(order_by))
     if limit is not None:
         offset = (page - 1) * limit
         sql += ' LIMIT {},{}'.format(offset, limit)
     try:
         cursor = yield pool.execute(sql, param)
         result = cursor.fetchall()
         cursor = yield pool.execute(count_sql, param)
         total = cursor.fetchone()
         cursor.close()
         return munchify(result), munchify(total).count
     except pymysql.Error as e:
         log.error(e)
         return [], 0
Beispiel #2
0
 def get_users_list(self, page=1, limit=None, status=None, name=None):
     sql = 'SELECT * FROM t_users u'
     sql_count = 'SELECT COUNT(*) count FROM t_users u'
     where = []
     params = dict()
     if name is not None:
         where.append(
             "(u.realname like %(name)s OR u.username like %(name)s OR u.email like %(name)s OR u.profile like %(name)s)"
         )
         params['name'] = '%{}%'.format(name)
     if status is not None:
         where.append("u.status=%(status)s")
         params['status'] = status
     if where:
         where = ' WHERE {}'.format(' AND '.join(where))
         sql += where
         sql_count += where
     sql += ' ORDER BY u.role'
     if limit is not None:
         offset = (page - 1) * limit
         sql += ' LIMIT {},{}'.format(offset, limit)
     try:
         cursor = yield pool.execute(sql, params)
         result = cursor.fetchall()
         cursor = yield pool.execute(sql_count, params)
         total = cursor.fetchone()
         cursor.close()
         return munchify(result), munchify(total).count
     except pymysql.Error as e:
         log.error(e)
         return [], 0
Beispiel #3
0
 def get_options_list(self, o_type=None, name=None, status=None):
     where = []
     param = dict()
     if o_type is not None:
         where.append("o.type=%(type)s")
         param['type'] = o_type
     if name is not None:
         where.append("o.name=%(name)s")
         param['name'] = name
     if status is not None:
         where.append("o.status=%(status)s")
         param['status'] = status
     try:
         if where:
             sql = "SELECT * FROM t_options o WHERE {}".format(
                 ' AND '.join(where))
             cursor = yield pool.execute(sql, param)
         else:
             sql = "SELECT * FROM t_options"
             cursor = yield pool.execute(sql)
         result = cursor.fetchall()
         cursor.close()
         return munchify(result)
     except pymysql.Error as e:
         log.error(e)
         return []
Beispiel #4
0
 def get_settings_list(self,
                       pid=None,
                       name=None,
                       s_type=None,
                       user=None,
                       status=None,
                       pj_status=None,
                       page=1,
                       limit=10):
     sql = """
         SELECT s.id, s.project project_id, s.type, s.name, s.value, s.status, p.name project_name, s.sort
         FROM t_settings s JOIN t_projects p ON s.project=p.id
         """
     sql_count = 'SELECT COUNT(*) count FROM t_settings s JOIN t_projects p ON s.project=p.id'
     where = []
     param = dict()
     if pid is not None:
         where.append('s.project=%(pid)s')
         param['pid'] = pid
     if name is not None:
         where.append("s.name=%(name)s")
         param['name'] = name
     if s_type is not None:
         where.append("s.type=%(s_type)s")
         param['s_type'] = s_type
     if user is not None:
         where.append("p.user LIKE %(user)s")
         param['user'] = '******'.format(user)
     if status is not None:
         where.append('s.status=%(status)s')
         param['status'] = status
     if pj_status is not None:
         where.append('p.status=%(pj_status)s')
         param['pj_status'] = pj_status
     if where:
         sql += ' WHERE {}'.format(' AND '.join(where))
         sql_count += ' WHERE {}'.format(' AND '.join(where))
     if s_type == 'report':
         sql += ' ORDER BY s.name DESC'
     elif s_type == 'job':
         sql += ' ORDER BY s.sort, s.status, s.name DESC'
     elif s_type == 'host':
         sql += ' ORDER BY s.project DESC, s.name DESC, s.value, s.status'
     else:
         sql += ' ORDER BY s.sort, s.status, s.project DESC, s.name DESC, s.value'
     if limit is not None:
         offset = (page - 1) * limit
         sql += ' LIMIT {},{}'.format(offset, limit)
     cursor = yield pool.execute(sql, param)
     result = cursor.fetchall()
     cursor = yield pool.execute(sql_count, param)
     total = cursor.fetchone()
     cursor.close()
     return munchify(result), munchify(total).count
Beispiel #5
0
 def get_message(self, m_type=None, user_id=None, mid=None, status=None):
     where = []
     param = dict()
     if m_type is not None:
         where.append("m.type=%(type)s")
         param['type'] = m_type
     if user_id is not None:
         where.append("m.userId=%(userId)s")
         param['userId'] = user_id
     if mid is not None:
         where.append("m.id=%(mid)s")
         param['mid'] = mid
     if status is not None:
         where.append("m.status=%(status)s")
         param['status'] = status
     if where:
         try:
             sql = "SELECT m.*,u.username,u.realname,u.email,u.`profile`,u.role,u.`status` as userStatus,u.registerTime FROM t_messages m JOIN t_users u on u.id=m.userId WHERE {}".format(
                 ' AND '.join(where))
             cursor = yield pool.execute(sql, param)
             result = cursor.fetchone()
             cursor.close()
             return munchify(result)
         except pymysql.Error as e:
             log.error(e)
             return None
     else:
         log.error('参数不对, 获取动态消息失败')
         return None
Beispiel #6
0
 def get_settings_by_range(self,
                           pid,
                           s_type,
                           sort,
                           range_col='name',
                           start='',
                           end=''):
     sql = """
         SELECT s.id, s.project project_id, s.type, s.name, s.value, s.status, p.name project_name, s.sort
         FROM t_settings s JOIN t_projects p ON s.project=p.id
         """
     where = []
     param = dict()
     if pid is not None:
         where.append('s.project=%(pid)s')
         param['pid'] = pid
     if s_type is not None:
         where.append("s.type=%(s_type)s")
         param['s_type'] = s_type
     if sort is not None:
         where.append("s.sort=%(sort)s")
         param['sort'] = sort
     if range_col == 'name':
         where.append('s.name BETWEEN %(start)s AND %(end)s')
     else:
         where.append('s.value BETWEEN %(start)s AND %(end)s')
     param['start'] = start
     param['end'] = end
     if where:
         sql += ' WHERE {}'.format(' AND '.join(where))
     cursor = yield pool.execute(sql, param)
     result = cursor.fetchall()
     cursor.close()
     return munchify(result)
Beispiel #7
0
 def get_users_list(self, page=1, limit=10, status=None):
     sql = 'SELECT * FROM t_users u'
     sql_count = 'SELECT COUNT(*) count FROM t_users u'
     if status is not None:
         sql += ' WHERE u.status=%(status)s'
         sql_count += ' WHERE u.status=%(status)s'
     sql += ' ORDER BY u.role'
     if limit is not None:
         offset = (page - 1) * limit
         sql += ' LIMIT {},{}'.format(offset, limit)
     cursor = yield pool.execute(sql, dict(status=status))
     result = cursor.fetchall()
     cursor = yield pool.execute(sql_count, dict(status=status))
     total = cursor.fetchone()
     cursor.close()
     return munchify(result), munchify(total).count
Beispiel #8
0
 def statistics(self,
                s_type=None,
                p_type=None,
                user_id=None,
                project_id=None,
                name=None,
                fields=list(),
                status=None,
                group_by=list(),
                start_time=None,
                end_time=None,
                order_by=list(),
                join='LEFT'):
     where = []
     param = dict()
     if s_type is not None:
         where.append("s.type=%(s_type)s")
         param['s_type'] = s_type
     if p_type is not None:
         where.append("p.type=%(p_type)s")
         param['p_type'] = p_type
     if user_id is not None:
         where.append("s.userId=%(userId)s")
         param['userId'] = user_id
     if project_id is not None:
         where.append("s.projectId=%(projectId)s")
         param['projectId'] = project_id
     if name is not None:
         where.append("s.name=%(name)s")
         param['name'] = name
     if status is not None:
         where.append("s.status=%(status)s")
         where.append("p.status=%(status)s")
         param['status'] = status
     if start_time and end_time:
         where.append(
             "s.createTime BETWEEN '{} 00:00:00' AND '{} 23:59:59'".format(
                 start_time, end_time))
     if where:
         if fields:
             sql = "SELECT {} FROM t_statistics s {} JOIN t_projects p ON p.id=s.projectId LEFT JOIN t_users u on u.id=s.userId WHERE {}".format(
                 ', '.join(fields), join, ' AND '.join(where))
         else:
             sql = "SELECT p.id pid, p.`name` projectName,s.id sid, s.type,s.`name`, s.createTime, u.id uid, u.realname, count(s.id) count FROM t_statistics s {} JOIN t_projects p ON p.id=s.projectId LEFT JOIN t_users u on u.id=s.userId WHERE {}".format(
                 join, ' AND '.join(where))
         if group_by:
             sql += ' GROUP BY {}'.format(','.join(group_by))
         if order_by:
             sql += ' ORDER BY {}'.format(','.join(order_by))
         try:
             cursor = yield pool.execute(sql, param)
             result = cursor.fetchall()
             cursor.close()
             return munchify(result)
         except pymysql.Error as e:
             log.error(e)
             return []
     else:
         log.error('参数不对, 数据统计失败')
         return []
Beispiel #9
0
 def get_option(self, o_type=None, name=None, oid=None, status=None):
     where = []
     param = dict()
     if o_type is not None:
         where.append("o.type=%(type)s")
         param['type'] = o_type
     if name is not None and oid is None:
         where.append("o.name=%(name)s")
         param['name'] = name
     if oid is not None:
         where.append("o.id=%(oid)s")
         param['oid'] = oid
     if status is not None:
         where.append("o.status=%(status)s")
         param['status'] = status
     if where:
         try:
             sql = "SELECT * FROM t_options o WHERE {}".format(
                 ' AND '.join(where))
             cursor = yield pool.execute(sql, param)
             result = cursor.fetchone()
             cursor.close()
             return munchify(result)
         except pymysql.Error as e:
             log.error(e)
             return None
     else:
         log.error('参数不对, 获取系统配置失败')
         return None
Beispiel #10
0
 def get_projects_list(self, page=1, limit=10, status=None):
     sql = 'SELECT * FROM t_projects p'
     param = dict()
     if status is not None:
         sql += ' WHERE p.status=%(status)s'
         param['status'] = status
     sql += ' ORDER BY p.id DESC'
     if limit is not None:
         offset = (page - 1) * limit
         sql += ' LIMIT {},{}'.format(offset, limit)
     cursor = yield pool.execute(sql, param)
     result = cursor.fetchall()
     cursor = yield pool.execute('SELECT COUNT(*) count FROM t_projects')
     total = cursor.fetchone()
     cursor.close()
     return munchify(result), munchify(total).count
Beispiel #11
0
 def edit_user(self,
               email,
               password=None,
               username=None,
               realname=None,
               last_login_time=None,
               role=None,
               status=None):
     user = yield self.get_user_info(email)
     if user:
         update = []
         param = dict(email=user.email)
         if password is not None:
             update.append("password=%(password)s")
             param['password'] = self.common_func.encode_password(password)
         if username is not None:
             sql = "SELECT username FROM t_users u WHERE u.email != %(email)s AND u.username = %(username)s"
             param['username'] = username
             cursor = yield pool.execute(sql, param)
             user_info = cursor.fetchone()
             if user_info:
                 log.error('用户名 {} 已存在'.format(username))
                 return False, '用户名 {} 已存在'.format(username)
             else:
                 update.append("username=%(username)s")
         if realname is not None:
             update.append("realname=%(realname)s")
             param['realname'] = realname
         if last_login_time is not None:
             update.append("lastLoginTime=%(lastLoginTime)s")
             param['lastLoginTime'] = last_login_time
         if role is not None:
             update.append('role=%(role)s')
             param['role'] = role
         if status is not None:
             update.append('status=%(status)s')
             param['status'] = status
         if update:
             sql = "UPDATE t_users SET {} WHERE email=%(email)s".format(
                 ', '.join(update))
             tx = yield pool.begin()
             try:
                 yield tx.execute(sql, param)
             except pymysql.Error as e:
                 yield tx.rollback()
                 log.error('编辑用户失败#{}'.format(e))
                 flag, msg = False, '用户 {} 资料修改失败'.format(email)
             else:
                 yield tx.commit()
                 log.info('用户 {} 资料修改成功'.format(email))
                 flag, msg = True, '用户 {} 资料修改成功'.format(email)
             return flag, msg
         else:
             log.error('没有可更新的项')
             return False, '没有可更新的项'
     else:
         log.error('没有可编辑的用户#{}'.format(email))
         return False, '没有可编辑的用户#{}'.format(email)
Beispiel #12
0
 def get_setting_by_id(self, sid):
     sql = """
         SELECT s.id, s.project project_id, s.type, s.name, s.value, s.status, p.name project_name, s.sort
         FROM t_settings s JOIN t_projects p ON s.project=p.id WHERE s.id=%(sid)s
         """
     cursor = yield pool.execute(sql, dict(sid=sid))
     result = cursor.fetchone()
     cursor.close()
     return munchify(result)
Beispiel #13
0
 def register_user(self,
                   email,
                   password,
                   username=None,
                   real_name=None,
                   profile=None,
                   role=1,
                   status=1):
     register_time = time.strftime('%Y-%m-%d %H:%M:%S')
     password = self.common_func.encode_password(password)
     try:
         cursor = yield pool.execute('SELECT COUNT(*) count FROM t_users')
         total = munchify(cursor.fetchone())
         if total.count == 0:
             role = 0
             status = 2
     except pymysql.Error as e:
         log.error(e)
     username = username or '{}_{}'.format(
         email.split('@')[0], str(int(time.time() * 1000)))
     sql = """
     INSERT INTO t_users (username, email, password, realname, profile, registerTime, lastLoginTime, role, status)
     VALUE(%(username)s, %(email)s, %(password)s, %(realname)s, %(profile)s, %(registerTime)s, %(lastLoginTime)s, %(role)s, %(status)s)
     """
     user = yield self.get_user_info(email_or_username=email)
     if not user:
         with (yield pool.Connection()) as conn:
             with conn.cursor() as cursor:
                 try:
                     yield cursor.execute(
                         sql,
                         dict(
                             username=username,
                             email=email,
                             password=password,
                             realname=real_name or '',
                             registerTime=register_time,
                             lastLoginTime=register_time,
                             profile=json.dumps(profile, ensure_ascii=False)
                             or '',
                             role=role,
                             status=status))
                 except pymysql.Error as e:
                     yield conn.rollback()
                     log.error('注册用户 {} 失败#{}'.format(email, e))
                     flag, msg = False, '注册用户 {} 失败#{}'.format(email, e)
                 else:
                     yield conn.commit()
                     log.info('注册用户 {} 成功'.format(email))
                     flag, msg = munchify(
                         dict(id=cursor.lastrowid, status=status,
                              role=role)), '注册用户成功!'
     else:
         log.error('该邮箱已注册!')
         flag, msg = False, '该邮箱已注册!'
     return flag, msg
Beispiel #14
0
 def get_user_info(self, email_or_username, status=None):
     sql = "SELECT * FROM t_users u WHERE (u.email=%(user)s OR u.username=%(user)s)"
     param = dict(user=email_or_username)
     if status is not None:
         sql += ' AND u.status=%(status)s'
         param['status'] = status
     cursor = yield pool.execute(sql, param)
     result = cursor.fetchone()
     cursor.close()
     return munchify(result)
Beispiel #15
0
 def get_setting(self,
                 pid=None,
                 name=None,
                 s_type=None,
                 project=None,
                 status=None,
                 pj_status=None,
                 team_id=None,
                 create_time=None):
     sql = """
         SELECT s.id, s.projectId project_id, s.type, s.name, s.value, s.status, p.name project_name, p.teamId team_id, s.sort, s.createTime, o.value team
         FROM t_settings s JOIN t_projects p ON s.projectId=p.id LEFT JOIN t_options o ON o.id=p.teamId
         """
     where = []
     param = dict()
     if pid is not None:
         if isinstance(pid, list):
             pid = ','.join([str(p) for p in pid])
         where.append('s.projectId IN ({})'.format(pid))
     if project is not None:
         where.append("p.type='project' AND p.name=%(project)s")
         param['project'] = project
     if name is not None:
         where.append("s.name=%(name)s")
         param['name'] = name
     if create_time is not None:
         where.append('s.createTime LIKE %(createTime)s')
         param['createTime'] = '%{}%'.format(create_time)
     if s_type is not None:
         if isinstance(s_type, list):
             s_type = ', '.join(["'{}'".format(t) for t in s_type])
         else:
             s_type = "'{}'".format(s_type)
         where.append('s.type IN ({})'.format(s_type))
     if status is not None:
         if isinstance(status, list):
             status = ','.join([str(s) for s in status])
         where.append('s.status IN ({})'.format(status))
     if team_id is not None:
         if isinstance(team_id, list):
             team_id = ','.join([str(t) for t in team_id])
         where.append('p.teamId IN ({})'.format(team_id))
     if pj_status is not None:
         where.append('p.status=%(pj_status)s')
         param['pj_status'] = pj_status
     if where:
         sql += ' WHERE {}'.format(' AND '.join(where))
     try:
         cursor = yield pool.execute(sql, param)
         result = cursor.fetchone()
         cursor.close()
         return munchify(result)
     except pymysql.Error as e:
         log.error(e)
         return None
Beispiel #16
0
 def get_projects_by_user(self, user, status=None):
     sql = "SELECT * FROM t_projects p WHERE p.user LIKE %(user)s"
     param = dict(user='******'.format(user))
     if status is not None:
         sql += ' AND p.status=%(status)s'
         param['status'] = status
     sql += ' ORDER BY p.id DESC'
     cursor = yield pool.execute(sql, param)
     result = cursor.fetchall()
     cursor.close()
     return munchify(result)
Beispiel #17
0
 def custom_statistics(self, sql=''):
     if sql:
         try:
             cursor = yield pool.execute(sql)
             result = cursor.fetchall()
             cursor.close()
             return munchify(result)
         except pymysql.Error as e:
             log.error(e)
             return []
     else:
         log.error('参数不对, 数据统计失败')
         return []
Beispiel #18
0
 def get_messages_list(self,
                       m_type=None,
                       user_id=None,
                       status=None,
                       offset=0,
                       limit=5):
     where = []
     param = dict(offset=offset, limit=limit)
     if m_type is not None:
         if isinstance(m_type, list):
             m_type = ', '.join(["'{}'".format(t) for t in m_type])
         else:
             m_type = "'{}'".format(m_type)
         where.append('m.type IN ({})'.format(m_type))
     if user_id is not None:
         where.append("m.userId=%(userId)s")
         param['userId'] = user_id
     if status is not None:
         if isinstance(status, list):
             status = ','.join([str(s) for s in status])
         where.append('m.status IN ({})'.format(status))
     try:
         if where:
             sql = "SELECT m.*,u.username,u.realname,u.email,u.`profile`,u.role,u.`status` as userStatus,u.registerTime FROM t_messages m JOIN t_users u on u.id=m.userId WHERE {} ORDER BY m.createTime DESC LIMIT %(offset)s,%(limit)s".format(
                 ' AND '.join(where))
             cursor = yield pool.execute(sql, param)
         else:
             sql = "SELECT m.*,u.username,u.realname,u.email,u.`profile`,u.role,u.`status` as userStatus,u.registerTime FROM t_messages m JOIN t_users u on u.id=m.userId ORDER BY m.createTime DESC LIMIT %(offset)s,%(limit)s"
             cursor = yield pool.execute(sql)
         result = cursor.fetchall()
         cursor = yield pool.execute(
             'SELECT COUNT(*) count FROM t_messages')
         total = cursor.fetchone()
         cursor.close()
         return munchify(result), munchify(total).count
     except pymysql.Error as e:
         log.error(e)
         return [], 0
Beispiel #19
0
 def get_users_info_by_id(self, uid, status=None):
     if isinstance(uid, list):
         uid = ','.join([str(u) for u in uid])
     sql = 'SELECT * FROM t_users u WHERE u.id in ({})'.format(uid)
     param = dict()
     if status is not None:
         sql += ' AND status=%(status)s'
         param['status'] = status
     sql += ' ORDER BY u.role'
     try:
         cursor = yield pool.execute(sql, param)
         result = cursor.fetchall()
         cursor.close()
         return munchify(result)
     except pymysql.Error as e:
         log.error(e)
         return []
Beispiel #20
0
 def get_settings_by_ids(self, sids):
     if sids and isinstance(sids, list):
         param = dict()
         ins = ''
         for i in range(len(sids)):
             param['id{}'.format(i)] = sids[i]
             ins += '%(id{})s,'.format(i)
         sql = """
             SELECT s.id, s.project project_id, s.type, s.name, s.value, s.status, p.name project_name, s.sort
             FROM t_settings s JOIN t_projects p ON s.project=p.id WHERE s.id in ({}) ORDER BY s.sort
             """.format(ins[:-1])
         cursor = yield pool.execute(sql, param)
         result = cursor.fetchall()
         cursor.close()
         return munchify(result)
     else:
         return []
Beispiel #21
0
 def get_users_info_by_ids(self, ids, status=None):
     if ids and isinstance(ids, list):
         param = dict()
         ins = ''
         for i in range(len(ids)):
             param['id{}'.format(i)] = ids[i]
             ins += '%(id{})s,'.format(i)
         sql = 'SELECT * FROM t_users u WHERE u.id in ({})'.format(ins[:-1])
         if status is not None:
             sql += ' AND status=%(status)s'
             param['status'] = status
         sql += ' ORDER BY u.role'
         cursor = yield pool.execute(sql, param)
         result = cursor.fetchall()
         cursor.close()
         return munchify(result)
     else:
         return []
Beispiel #22
0
 def get_option(self, name=None, oid=None):
     where = []
     param = dict()
     if name is not None:
         where.append("o.name=%(name)s")
         param['name'] = name
     if oid is not None:
         where.append("o.id=%(oid)s")
         param['oid'] = oid
     if where:
         sql = "SELECT * FROM t_options o WHERE {}".format(
             ' AND '.join(where))
         cursor = yield pool.execute(sql, param)
         result = cursor.fetchone()
         cursor.close()
         return munchify(result)
     else:
         log.error('参数不对, 获取系统配置失败')
         return None
Beispiel #23
0
 def get_settings_by_id(self, sid, order_by=list()):
     if isinstance(sid, list):
         sid = ','.join([str(s) for s in sid])
     if sid:
         sql = """
             SELECT s.id, s.projectId project_id, s.type, s.name, s.value, s.status, p.name project_name, p.teamId team_id, s.sort, s.createTime, o.value team
             FROM t_settings s JOIN t_projects p ON s.projectId=p.id LEFT JOIN t_options o ON o.id=p.teamId WHERE s.id IN ({})
             """.format(sid)
         if order_by:
             sql += ' ORDER BY {}'.format(','.join(order_by))
         try:
             cursor = yield pool.execute(sql)
             result = cursor.fetchall()
             cursor.close()
             return munchify(result)
         except pymysql.Error as e:
             log.error(e)
             return []
     else:
         return []
Beispiel #24
0
 def get_statistics(self,
                    s_type=None,
                    user_id=None,
                    project_id=None,
                    name=None,
                    sid=None,
                    status=None):
     where = []
     param = dict()
     if s_type is not None:
         where.append("s.type=%(type)s")
         param['type'] = s_type
     if user_id is not None:
         where.append("s.userId=%(userId)s")
         param['userId'] = user_id
     if sid is not None:
         where.append("s.id=%(sid)s")
         param['sid'] = sid
     if project_id is not None:
         where.append("s.projectId=%(projectId)s")
         param['projectId'] = project_id
     if name is not None:
         where.append("s.name=%(name)s")
         param['name'] = name
     if status is not None:
         where.append("s.status=%(status)s")
         param['status'] = status
     if where:
         try:
             sql = "SELECT * FROM t_statistics s WHERE {}".format(
                 ' AND '.join(where))
             cursor = yield pool.execute(sql, param)
             result = cursor.fetchone()
             cursor.close()
             return munchify(result)
         except pymysql.Error as e:
             log.error(e)
             return None
     else:
         log.error('参数不对, 获取统计信息失败')
         return None
Beispiel #25
0
 def get_project(self,
                 name=None,
                 pid=None,
                 team_id=None,
                 p_type=None,
                 status=None):
     where = []
     param = dict()
     if status is not None:
         where.append("p.status=%(status)s")
         param['status'] = status
     if name is not None:
         where.append("p.name=%(name)s")
         param['name'] = name
     if p_type is not None:
         where.append("p.type=%(type)s")
         param['type'] = p_type
     if pid is not None:
         if isinstance(pid, list):
             pid = ','.join([str(p) for p in pid])
         where.append("p.id IN ({})".format(pid))
     if team_id is not None:
         where.append("p.teamId=%(teamId)s")
         param['teamId'] = team_id
     join_type = 'o.type="cate"' if p_type == 'knowledge.book' else 'o.type="teams" AND o.name="team"'
     sql = 'SELECT p.*, o.`value` team FROM t_projects p LEFT JOIN t_options o ON o.id=p.teamId AND {}'.format(
         join_type)
     if where:
         try:
             sql += ' WHERE {}'.format(' AND '.join(where))
             cursor = yield pool.execute(sql, param)
             result = cursor.fetchone()
             cursor.close()
             return munchify(result)
         except pymysql.Error as e:
             log.error(e)
             return None
     else:
         log.error('参数不对, 获取项目失败')
         return None
Beispiel #26
0
 def register_user(self, email, password):
     register_time = time.strftime('%Y-%m-%d %H:%M:%S')
     password = self.common_func.encode_password(password)
     cursor = yield pool.execute('SELECT COUNT(*) count FROM t_users')
     total = munchify(cursor.fetchone())
     if total.count == 0:
         role = 0
     else:
         role = 2
     username = '******'.format(
         email.split('@')[0], str(int(time.time() * 1000)))
     sql = """
     INSERT INTO t_users (username, email, password, registerTime, lastLoginTime, role)
     VALUE(%(username)s, %(email)s, %(password)s, %(registerTime)s, %(lastLoginTime)s, %(role)s)
     """
     user = yield self.get_user_info(email_or_username=email)
     if not user:
         with (yield pool.Connection()) as conn:
             with conn.cursor() as cursor:
                 try:
                     yield cursor.execute(
                         sql,
                         dict(username=username,
                              email=email,
                              password=password,
                              registerTime=register_time,
                              lastLoginTime=register_time,
                              role=role))
                 except pymysql.Error as e:
                     yield conn.rollback()
                     log.error('注册用户失败#{}'.format(e))
                     flag, msg = False, '注册用户失败#{}'.format(e)
                 else:
                     yield conn.commit()
                     log.info('注册用户成功')
                     flag, msg = cursor.lastrowid, '注册用户成功'
     else:
         log.error('该用户已存在, 请更换注册邮箱')
         flag, msg = False, '该用户已存在, 请更换注册邮箱'
     return flag, msg
Beispiel #27
0
 def get_project(self, name=None, pid=None, status=None):
     where = []
     param = dict()
     if status is not None:
         where.append("p.status=%(status)s")
         param['status'] = status
     if name is not None:
         where.append("p.name=%(name)s")
         param['name'] = name
     elif pid is not None:
         where.append("p.id=%(pid)s")
         param['pid'] = pid
     sql = 'SELECT * FROM t_projects p'
     if where:
         sql += ' WHERE {}'.format(' AND '.join(where))
         cursor = yield pool.execute(sql, param)
         result = cursor.fetchone()
         cursor.close()
         return munchify(result)
     else:
         log.error('参数不对, 获取项目失败')
         return None
Beispiel #28
0
 def get_user_info(self, email_or_username=None, uid=None, status=None):
     where = []
     params = dict()
     if uid is not None:
         where.append("u.id=%(uid)s")
         params['uid'] = uid
     if email_or_username is not None:
         where.append("(u.email=%(user)s OR u.username=%(user)s)")
         params['user'] = email_or_username
     if status is not None:
         where.append("u.status=%(status)s")
         params['status'] = status
     sql = "SELECT u.*, (SELECT COUNT(IF(m.`type` IN ('notice', 'message') AND m.`status` NOT IN (0, 2), m.`type`, NULL)) + COUNT(IF(m.`type` IN ('todo') AND m.`status` NOT IN (0, 5), m.`type`, NULL)) FROM t_messages m WHERE m.type <> 'active' AND m.userId=u.id AND m.`status` <> 0) as unreadCount FROM t_users u"
     if where:
         sql += ' WHERE {}'.format(' AND '.join(where))
     try:
         cursor = yield pool.execute(sql, params)
         result = cursor.fetchone()
         cursor.close()
         return munchify(result)
     except pymysql.Error as e:
         log.error(e)
         return None
Beispiel #29
0
 def get_options_list(self):
     sql = "SELECT * FROM t_options"
     cursor = yield pool.execute(sql)
     result = cursor.fetchall()
     cursor.close()
     return munchify(result)
Beispiel #30
0
 def edit_user(self,
               email=None,
               uid=None,
               password=None,
               username=None,
               real_name=None,
               last_login_time=None,
               role=None,
               status=None,
               profile=None):
     user = yield self.get_user_info(
         email_or_username=None if uid else email, uid=uid)
     if user:
         update = []
         param = dict(email=email if email else user.email)
         if password is not None:
             update.append("password=%(password)s")
             param['password'] = self.common_func.encode_password(password)
         if username is not None:
             sql = "SELECT id, username FROM t_users u WHERE u.email != %(email)s AND u.username = %(username)s"
             param['username'] = username
             try:
                 cursor = yield pool.execute(sql, param)
                 user_info = cursor.fetchone()
                 if (user_info and uid
                         and uid != user_info['id']) or (user_info
                                                         and uid is None):
                     log.error('用户名 {} 已存在'.format(username))
                     return False, '用户名 {} 已存在'.format(username)
                 else:
                     update.append("username=%(username)s")
             except pymysql.Error as e:
                 log.error(e)
                 return False, '编辑用户失败#{}'.format(e)
         if email is not None and uid is not None:
             is_exist_user = yield self.get_user_info(email)
             if is_exist_user and is_exist_user.id != uid:
                 log.error('该邮箱 {} 已注册'.format(email))
                 return False, '该邮箱 {} 已注册'.format(email)
             else:
                 update.append("email=%(email)s")
         if real_name is not None:
             update.append("realname=%(realname)s")
             param['realname'] = real_name
         if last_login_time is not None:
             update.append("lastLoginTime=%(lastLoginTime)s")
             param['lastLoginTime'] = last_login_time
         if role is not None:
             update.append('role=%(role)s')
             param['role'] = role
         if profile is not None:
             update.append('profile=%(profile)s')
             param['profile'] = json.dumps(profile, ensure_ascii=False)
         if status is not None:
             update.append('status=%(status)s')
             param['status'] = status
         if update:
             if uid is not None:
                 param['uid'] = uid
                 sql = "UPDATE t_users SET {} WHERE id=%(uid)s".format(
                     ', '.join(update))
             else:
                 sql = "UPDATE t_users SET {} WHERE email=%(email)s".format(
                     ', '.join(update))
             tx = yield pool.begin()
             try:
                 yield tx.execute(sql, param)
             except pymysql.Error as e:
                 yield tx.rollback()
                 log.error('编辑用户失败#{}'.format(e))
                 flag, msg = False, '用户 {} 资料修改失败'.format(user.email)
             else:
                 yield tx.commit()
                 log.info('用户 {} 资料修改成功'.format(user.email))
                 flag, msg = True, '用户 {} 资料修改成功'.format(user.email)
             return flag, msg
         else:
             log.error('没有可更新的项')
             return False, '没有可更新的项'
     else:
         log.error('用户 {} 不存在!'.format(email))
         return False, '用户 {} 不存在!'.format(email)