user.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import base64
  2. from datetime import datetime
  3. from app.api import pwd_context
  4. from app.config.config import settings
  5. from app.models import RoleModel, GroupModel
  6. from app.models.user_model import UserModel
  7. from app.Log import logger
  8. from app.service.bisheng import BishengService
  9. from app.service.ragflow import RagflowService
  10. async def get_user_list(db, page_size: int, page_index: int, keyword: str):
  11. query = db.query(UserModel)
  12. if keyword:
  13. query = query.filter(UserModel.group_name.like('%{}%'.format(keyword)))
  14. users = query.order_by(UserModel.id.desc()).limit(page_size).offset(
  15. (page_index - 1) * page_size).all()
  16. return {"total": query.count(), "rows": [user.to_json() for user in users]}
  17. async def edit_user_status(db, status: str, user_id: int):
  18. try:
  19. db.query(UserModel).filter(UserModel.id == user_id).update({"status":status})
  20. db.commit()
  21. except Exception as e:
  22. logger.error(e)
  23. db.rollback()
  24. return False
  25. return True
  26. async def delete_user_data(db, user_id: str):
  27. try:
  28. db.query(UserModel).filter(UserModel.id == user_id).delete()
  29. db.commit()
  30. except Exception as e:
  31. logger.error(e)
  32. db.rollback()
  33. return False
  34. return True
  35. async def create_user(db, user_name, email, phone, login_name, password, roles, groups):
  36. try:
  37. bisheng_service = BishengService(settings.sgb_base_url)
  38. ragflow_service = RagflowService(settings.fwr_base_url)
  39. # 注册到毕昇
  40. try:
  41. bisheng_info = await bisheng_service.register(user_name, password)
  42. except Exception as e:
  43. logger.error(f"Failed to register with Bisheng: {str(e)}")
  44. return False
  45. # 注册到ragflow
  46. try:
  47. ragflow_info = await ragflow_service.register(user_name, password)
  48. except Exception as e:
  49. logger.error(f"Failed to register with Ragflow: {str(e)}")
  50. return False
  51. # 存储用户信息
  52. hashed_password = pwd_context.hash(password)
  53. user_model = UserModel(username=user_name, hashed_password=hashed_password, email=email,ragflow_id=ragflow_info.get("id"),bisheng_id=bisheng_info.get("user_id"),
  54. phone=phone,login_name=login_name)
  55. user_model.roles = [db.get(RoleModel, roleId) for roleId in roles]
  56. if groups:
  57. user_model.groups = [db.get(GroupModel, groupId) for groupId in groups]
  58. db.add(user_model)
  59. db.commit()
  60. db.refresh(user_model)
  61. except Exception as e:
  62. logger.error(e)
  63. db.rollback()
  64. return False
  65. return True
  66. async def edit_user_data(db, user_id, email, phone, login_name, roles, groups):
  67. try:
  68. user = db.query(UserModel).filter(UserModel.id == user_id).first()
  69. user.email = email
  70. user.phone = phone
  71. user.login_name = login_name
  72. user.email = email
  73. user.updated_at = datetime.now()
  74. user.roles = [db.get(RoleModel, roleId) for roleId in roles]
  75. user.groups = [db.get(GroupModel, groupId) for groupId in groups]
  76. db.commit()
  77. except Exception as e:
  78. logger.error(e)
  79. db.rollback()
  80. return False
  81. return True
  82. async def edit_user_pwd(db, user_id, password="000000"):
  83. try:
  84. #TODO
  85. hashed_password = pwd_context.hash(password)
  86. user = db.query(UserModel).filter(UserModel.id == user_id).first()
  87. user.hashed_password = hashed_password
  88. db.commit()
  89. except Exception as e:
  90. logger.error(e)
  91. db.rollback()
  92. return False
  93. return True
  94. async def get_user_info(db, page_size: int, page_index: int, keyword: str):
  95. query = db.query(UserModel)
  96. if keyword:
  97. query = query.filter(UserModel.group_name.like('%{}%'.format(keyword)))
  98. users = query.order_by(UserModel.id.desc()).limit(page_size).offset(
  99. (page_index - 1) * page_size).all()
  100. return {"total": query.count(), "rows": [user.to_json() for user in users]}