增加项目的各个功能
This commit is contained in:
109
app/api/dao/userDao.py
Normal file
109
app/api/dao/userDao.py
Normal file
@@ -0,0 +1,109 @@
|
||||
# encoding: UTF-8
|
||||
from datetime import datetime
|
||||
|
||||
from ..model.userModel import User, UserRole
|
||||
from logger import logger
|
||||
|
||||
|
||||
class UserDao(object):
|
||||
@staticmethod
|
||||
def create(session, model_cls, add_info):
|
||||
obj = model_cls(**add_info)
|
||||
session.add(obj)
|
||||
err = session.done(close=False)
|
||||
if err:
|
||||
logger.warning(f'{model_cls.__name__}新增失败!{err}')
|
||||
return 0, f'新增失败!{err}'
|
||||
return obj.id, ''
|
||||
|
||||
@staticmethod
|
||||
def update_by_id(session, model_cls, obj_id, update_info, soft_delete=True):
|
||||
filters = [model_cls.id == int(obj_id)]
|
||||
if soft_delete and hasattr(model_cls, 'is_delete'):
|
||||
filters.append(model_cls.is_delete == 0)
|
||||
update_res = session.query(model_cls).filter(*filters).update(update_info)
|
||||
err = session.done(close=False)
|
||||
if err:
|
||||
logger.error(f'{model_cls.__name__}更新失败!id: {obj_id}, err: {err}')
|
||||
return 0, f'更新失败!{err}'
|
||||
if not update_res:
|
||||
return 0, '未查询到对应记录!'
|
||||
return int(obj_id), ''
|
||||
|
||||
@staticmethod
|
||||
def get_by_id(session, model_cls, obj_id, soft_delete=True):
|
||||
filters = [model_cls.id == int(obj_id)]
|
||||
if soft_delete and hasattr(model_cls, 'is_delete'):
|
||||
filters.append(model_cls.is_delete == 0)
|
||||
return session.query(model_cls).filter(*filters).first()
|
||||
|
||||
@staticmethod
|
||||
def list_by_filters(session, model_cls, filter_list, page=1, limit=20, order_column=None):
|
||||
query = session.query(model_cls).filter(*filter_list)
|
||||
if hasattr(model_cls, 'is_delete'):
|
||||
query = query.filter(model_cls.is_delete == 0)
|
||||
total = query.count()
|
||||
if order_column is not None:
|
||||
query = query.order_by(order_column.desc())
|
||||
rets = query.offset((int(page) - 1) * int(limit)).limit(int(limit)).all()
|
||||
return rets, total
|
||||
|
||||
@staticmethod
|
||||
def delete_by_id(session, model_cls, obj_id):
|
||||
return UserDao.update_by_id(session, model_cls, obj_id, {'is_delete': 1})
|
||||
|
||||
@staticmethod
|
||||
def get_user_role_ids(session, user_id):
|
||||
items = session.query(UserRole).filter(UserRole.user_id == int(user_id), UserRole.is_delete == 0).all()
|
||||
return [item.role_id for item in items]
|
||||
|
||||
@staticmethod
|
||||
def replace_user_roles(session, user_id, role_ids):
|
||||
user_id = int(user_id)
|
||||
role_ids = [int(role_id) for role_id in role_ids]
|
||||
session.query(UserRole).filter(UserRole.user_id == user_id, UserRole.is_delete == 0).update({'is_delete': 1})
|
||||
existing_items = session.query(UserRole).filter(UserRole.user_id == user_id).all()
|
||||
existing_map = {item.role_id: item for item in existing_items}
|
||||
for role_id in role_ids:
|
||||
existing_item = existing_map.get(role_id)
|
||||
if existing_item:
|
||||
existing_item.is_delete = 0
|
||||
else:
|
||||
session.add(UserRole(user_id=user_id, role_id=role_id, is_delete=0))
|
||||
err = session.done(close=False)
|
||||
if err:
|
||||
return 0, f'分配角色失败!{err}'
|
||||
return user_id, ''
|
||||
|
||||
@staticmethod
|
||||
def get_user_roles(session, user_ids):
|
||||
if not user_ids:
|
||||
return {}
|
||||
items = session.query(UserRole).filter(UserRole.user_id.in_(user_ids), UserRole.is_delete == 0).all()
|
||||
ret = {}
|
||||
for item in items:
|
||||
ret.setdefault(item.user_id, []).append(item.role_id)
|
||||
return ret
|
||||
|
||||
@staticmethod
|
||||
def get_by_username(session, username):
|
||||
return session.query(User).filter(User.username == username, User.is_delete == 0).first()
|
||||
|
||||
@staticmethod
|
||||
def update_last_login_time(session, user_id):
|
||||
session.query(User).filter(User.id == int(user_id), User.is_delete == 0).update({'last_login_time': datetime.now()})
|
||||
err = session.done(close=False)
|
||||
if err:
|
||||
return 0, f'更新登录时间失败!{err}'
|
||||
return int(user_id), ''
|
||||
|
||||
@staticmethod
|
||||
def user_model():
|
||||
return User
|
||||
|
||||
@staticmethod
|
||||
def get_user_info_map(session, user_ids):
|
||||
if not user_ids:
|
||||
return {}
|
||||
items = session.query(User).filter(User.id.in_(user_ids), User.is_delete == 0).all()
|
||||
return {item.id: {'username': item.username, 'real_name': item.real_name} for item in items}
|
||||
Reference in New Issue
Block a user