initialize_data.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import json
  2. import time
  3. from Log import logger
  4. from app.config.const import DIFY
  5. from app.models import MenuCapacityModel, WebMenuModel, GroupModel, RoleModel, DialogModel, UserModel, UserAppModel, \
  6. cipher_suite
  7. from app.service.auth import UserAppDao
  8. from app.service.bisheng import BishengService
  9. from app.service.difyService import DifyService
  10. from app.service.ragflow import RagflowService
  11. from app.service.service_token import get_new_token
  12. from app.service.v2.app_register import AppRegisterDao
  13. from app.config.config import settings
  14. from app.utils.password_handle import generate_password
  15. async def dialog_menu_sync(db):
  16. menu_list = []
  17. with open("env_conf/menu_conf.json", 'r', encoding='utf-8') as file:
  18. # 加载JSON数据
  19. data = json.load(file)
  20. menu_list = data.get("data", [])
  21. db.query(WebMenuModel).delete()
  22. db.query(MenuCapacityModel).delete()
  23. db.commit()
  24. for menu in menu_list:
  25. # print(menu)
  26. dialog = menu.pop("dialog", [])
  27. for i in dialog:
  28. capacity = MenuCapacityModel(menu_id=menu["id"], capacity_id=i["id"], capacity_type=i["agentType"],
  29. chat_id=i["id"] if not i["chat_id"] else i["chat_id"],
  30. chat_type=i["chat_type"])
  31. db.add(capacity)
  32. menu_obj = WebMenuModel(**menu)
  33. db.add(menu_obj)
  34. db.commit()
  35. async def default_group_sync(db):
  36. group = db.query(GroupModel).filter_by(group_type=2).first()
  37. if not group:
  38. logger.error("未初始默认组, 开始初始化!")
  39. try:
  40. group = GroupModel(group_name="默认用户组", group_description="默认组", group_type=2)
  41. db.add(group)
  42. db.commit()
  43. except Exception as e:
  44. logger.error(e)
  45. async def default_role_sync(db):
  46. role = db.query(RoleModel).filter_by(role_type=2).first()
  47. if not role:
  48. logger.error("未初始默认角色, 开始初始化!")
  49. try:
  50. group = RoleModel(id="morenjuese1234567890", name="默认角色", description="默认角色", role_type=2)
  51. db.add(group)
  52. db.commit()
  53. except Exception as e:
  54. logger.error(e)
  55. async def app_register_sync(db):
  56. app_dict = {}
  57. with open("env_conf/app_register_conf.json", 'r', encoding='utf-8') as file:
  58. # 加载JSON数据
  59. app_dict = json.load(file)
  60. try:
  61. for app_id, status in app_dict.items():
  62. AppRegisterDao(db).update_and_insert_app(app_id, status)
  63. except Exception as e:
  64. logger.error(e)
  65. async def basic_agent_sync(db):
  66. agent_list = []
  67. with open("env_conf/default_agent_conf.json", 'r', encoding='utf-8') as file:
  68. # 加载JSON数据
  69. agent_dict = json.load(file)
  70. agent_list = agent_dict.get("basic", [])
  71. user = db.query(UserModel).filter_by(permission="admin").first()
  72. for agent in agent_list:
  73. dialog = db.query(DialogModel).filter(DialogModel.id == agent["id"]).first()
  74. if dialog:
  75. try:
  76. dialog.name = agent["name"]
  77. dialog.description = agent["description"]
  78. dialog.icon = agent["icon"]
  79. db.commit()
  80. except Exception as e:
  81. logger.error(e)
  82. else:
  83. try:
  84. dialog = DialogModel(id=agent["id"], name=agent["name"], description=agent["description"],
  85. icon=agent["icon"], tenant_id=user.id if user else "", dialog_type="3",
  86. agent_id=agent["id"])
  87. db.add(dialog)
  88. db.commit()
  89. db.refresh(dialog)
  90. except Exception as e:
  91. print(e)
  92. db.rollback()
  93. async def user_update_app(userid, db):
  94. user = db.query(UserModel).filter(UserModel.id == userid).first()
  95. if not user:
  96. raise Exception("User id not found")
  97. app_register = AppRegisterDao(db).get_apps()
  98. register_dict = {}
  99. token = ""
  100. app_password = await generate_password(10)
  101. for app in app_register:
  102. if app["id"] == 'ragflow_app':
  103. user_rag_app = db.query(UserAppModel).filter(UserAppModel.user_id == userid,
  104. UserAppModel.app_type == 'ragflow_app').all()
  105. if not user_rag_app:
  106. service = RagflowService(settings.fwr_base_url)
  107. register_info = await register_app(service, app["id"], app_password, token)
  108. if register_info:
  109. register_dict[app["id"]] = register_info
  110. app_name = register_info.get("name")
  111. app_id = register_info.get("id")
  112. app_email = register_info.get("email")
  113. await save_db(db, app_name, user.password, app_email, user.id, app_id, "ragflow_app")
  114. elif app["id"] == 'bisheng_app':
  115. user_bs_app = db.query(UserAppModel).filter(UserAppModel.user_id == userid,
  116. UserAppModel.app_type == 'bisheng_app').all()
  117. if not user_bs_app:
  118. service = BishengService(settings.sgb_base_url)
  119. register_info = await register_app(service, app["id"], app_password, token)
  120. if register_info:
  121. register_dict[app["id"]] = register_info
  122. app_name = register_info.get("name")
  123. app_id = register_info.get("id")
  124. app_email = register_info.get("email")
  125. await save_db(db, app_name, user.password, app_email, user.id, app_id, "bisheng_app")
  126. elif app["id"] == 'dify_app':
  127. user_df_app = db.query(UserAppModel).filter(UserAppModel.user_id == userid,
  128. UserAppModel.app_type == 'dify_app').all()
  129. if not user_df_app:
  130. admin_user = db.query(UserModel).filter(UserModel.permission == "admin").first()
  131. token = await get_new_token(db, admin_user.id, DIFY)
  132. if not token:
  133. print("用户注册获取dftoken失败!")
  134. service = DifyService(settings.dify_base_url)
  135. register_info = await register_app(service, app["id"], app_password, token)
  136. if register_info:
  137. register_dict[app["id"]] = register_info
  138. app_name = register_info.get("name")
  139. app_id = register_info.get("id")
  140. app_email = register_info.get("email")
  141. df_password = await generate_password(10)
  142. password = cipher_suite.encrypt(df_password.encode("utf-8")).decode("utf-8")
  143. await save_db(db, app_name, password, app_email, user.id, app_id, "dify_app")
  144. else:
  145. raise Exception("未知注册应用---")
  146. async def register_app(service, app_id, app_password, token):
  147. name = app_id + str(int(time.time()))
  148. try:
  149. register_info = await service.register(name, app_password, token)
  150. return {"id": register_info.get("id"), "name": name, "email": register_info.get("email")}
  151. except Exception as e:
  152. print(f"Failed to register with {app_id}: {str(e)}")
  153. return None
  154. async def save_db(db, username, password, email, user_id, app_id, app_type):
  155. user_app_dao = UserAppDao(db)
  156. user_id = await user_app_dao.insert_user_app_data(username, password, email, user_id, app_id, app_type)
  157. if not user_id:
  158. raise Exception("Failed to register with app")
  159. print({"msg": "User registered successfully", "userFlag": user_id})