websocketManager.py 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, Query, HTTPException, status,WebSocket,WebSocketDisconnect
  4. from sqlalchemy.orm import Session
  5. from models import *
  6. from utils import *
  7. from utils.ry_system_util import *
  8. class ConnectionManager:
  9. def __init__(self):
  10. self.active_connections = {} #: List[WebSocket]
  11. async def connect(self, websocket: WebSocket,pattern_id:str,db: Session):
  12. await websocket.accept()
  13. if pattern_id not in self.active_connections:
  14. self.active_connections[pattern_id] = []
  15. # else:
  16. self.active_connections[pattern_id].append(websocket)
  17. print('连接成功',len(self.active_connections[pattern_id]))
  18. # data = pattern_id_get_tp_pattern_ws_list(pattern_id, db)
  19. # message = []
  20. # for info in data:
  21. # user = user_id_get_user_info(db, info.create_by)
  22. # dept = dept_id_get_dept_info(db, user.dept_id)
  23. # message.append({"id": info.id,
  24. # "name": info.name,
  25. # "pattern_id": info.pattern_id,
  26. # "content": info.content,
  27. # "visible": info.visible,
  28. # "user_id": info.create_by,
  29. # "nick_name": user.nick_name,
  30. # "dept_name": dept.dept_name})
  31. # message = json.dumps(message)
  32. # await websocket.send_text(message)
  33. # await websocket.send_text('连接成功')
  34. def disconnect(self, websocket: WebSocket,pattern_id:str):
  35. # await websocket.send_text('已断开')
  36. print('已断开')
  37. self.active_connections[pattern_id].remove(websocket)
  38. if not self.active_connections[pattern_id]:
  39. del self.active_connections[pattern_id]
  40. async def broadcast(self,pattern_id:str,db: Session, websocket: WebSocket):#, message: str
  41. query = db.query(TpPatternWSGroupList)
  42. query = query.filter(TpPatternWSGroupList.del_flag != '2')
  43. query = query.filter(TpPatternWSGroupList.pattern_id == pattern_id)
  44. query = query.filter(TpPatternWSGroupList.visible == '1')
  45. query = query.order_by(TpPatternWSGroupList.create_time.desc())
  46. group_list= query.all()
  47. if len(group_list)>1:
  48. data = pattern_id_get_tp_pattern_ws_list(pattern_id,db)
  49. elif len(group_list)==1:
  50. data = pattern_id_get_tp_pattern_ws_list(group_list[0].group_id, db)
  51. else:
  52. data=[]
  53. message = []
  54. for info in data:
  55. user= user_id_get_user_info(db,info.create_by)
  56. dept = dept_id_get_dept_info(db,user.dept_id)
  57. message.append({"id":info.id,
  58. "name":info.name,
  59. "pattern_id":info.pattern_id,
  60. "content":info.content,
  61. "visible":info.visible,
  62. "user_id":info.create_by,
  63. "nick_name":user.nick_name,
  64. "dept_name":dept.dept_name})
  65. message = json.dumps(message)
  66. for connection in self.active_connections[pattern_id]:
  67. if connection!=websocket:
  68. await connection.send_text(message)
  69. async def ownmessage(self,websocket: WebSocket,pattern_id:str,db: Session):#, message: str
  70. data = pattern_id_get_tp_pattern_ws_list(pattern_id,db)
  71. message = []
  72. for info in data:
  73. user= user_id_get_user_info(db,info.create_by)
  74. dept = dept_id_get_dept_info(db,user.dept_id)
  75. message.append({"id":info.id,
  76. "name":info.name,
  77. "pattern_id":info.pattern_id,
  78. "content":info.content,
  79. "visible":info.visible,
  80. "user_id":info.create_by,
  81. "nick_name":user.nick_name,
  82. "dept_name":dept.dept_name})
  83. message = json.dumps(message)
  84. await websocket.send_text(message)
  85. manager = ConnectionManager()
  86. def user_id_and_pattern_id_get_tp_pattern_ws_info(user_id:str,pattern_id:str,db: Session):
  87. query = db.query(TpPatternWSList)
  88. query = query.filter(TpPatternWSList.del_flag != '2')
  89. query = query.filter(TpPatternWSList.pattern_id == pattern_id)
  90. query = query.filter(TpPatternWSList.create_by == user_id)
  91. query = query.order_by(TpPatternWSList.create_time.desc())
  92. return query.first()
  93. def pattern_id_get_tp_pattern_ws_users(pattern_id:str,db: Session):
  94. query = db.query(TpPatternWSList)
  95. query = query.filter(TpPatternWSList.del_flag != '2')
  96. query = query.filter(TpPatternWSList.pattern_id == pattern_id)
  97. query = query.group_by(TpPatternWSList.create_by)
  98. return query.all()
  99. def pattern_id_get_tp_pattern_ws_list(pattern_id:str,db: Session):
  100. query = db.query(TpPatternWSList)
  101. query = query.filter(TpPatternWSList.del_flag != '2')
  102. query = query.filter(TpPatternWSList.pattern_id == pattern_id)
  103. query = query.order_by(TpPatternWSList.create_time)
  104. # query = query.group_by(TpPatternWSList.create_id)
  105. return query.all()
  106. def pattern_id_get_tp_pattern_ws_count(pattern_id:str,db: Session):
  107. query = db.query(TpPatternWSList)
  108. query = query.filter(TpPatternWSList.del_flag != '2')
  109. query = query.filter(TpPatternWSList.pattern_id == pattern_id)
  110. return query.count()
  111. def pattern_id_get_tp_pattern_ws_max_time(pattern_id:str,db: Session):
  112. query = db.query(TpPatternWSList.update_time)
  113. query = query.filter(TpPatternWSList.del_flag != '2')
  114. query = query.filter(TpPatternWSList.pattern_id == pattern_id)
  115. query = query.order_by(TpPatternWSUserList.update_time.desc())
  116. return query.first()
  117. def pattern_id_get_tp_pattern_ws_user_list(pattern_id:str,db: Session):
  118. query = db.query(TpPatternWSUserList)
  119. query = query.filter(TpPatternWSUserList.del_flag != '2')
  120. query = query.filter(TpPatternWSUserList.pattern_id == pattern_id)
  121. query = query.order_by(TpPatternWSUserList.create_time.desc())
  122. return query.all()
  123. def pattern_id_get_tp_pattern_ws_group_def_info(pattern_id:str,db: Session):
  124. query = db.query(TpPatternWSGroupList)
  125. query = query.filter(TpPatternWSGroupList.del_flag != '2')
  126. query = query.filter(TpPatternWSGroupList.pattern_id == pattern_id)
  127. query = query.order_by(TpPatternWSGroupList.create_time.desc())
  128. return query.first()
  129. def user_id_get_tp_pattern_ws_user_list(user_id:str,db: Session):
  130. query = db.query(TpPatternWSUserList)
  131. query = query.filter(TpPatternWSUserList.del_flag != '2')
  132. query = query.filter(TpPatternWSUserList.user_id == user_id)
  133. query = query.order_by(TpPatternWSUserList.create_time.desc())
  134. return query.all()
  135. def user_id_and_pattern_id_get_tp_pattern_ws_user_info(user_id:str,pattern_id:str,db: Session):
  136. query = db.query(TpPatternWSUserList)
  137. query = query.filter(TpPatternWSUserList.del_flag != '2')
  138. query = query.filter(TpPatternWSUserList.user_id == user_id)
  139. query = query.filter(TpPatternWSUserList.pattern_id == pattern_id)
  140. query = query.order_by(TpPatternWSUserList.create_time.desc())
  141. return query.first()
  142. def pattern_id_get_tp_pattern_ws_group_list(pattern_id:str,db: Session):
  143. query = db.query(TpPatternWSGroupList)
  144. query = query.filter(TpPatternWSGroupList.del_flag != '2')
  145. query = query.filter(TpPatternWSGroupList.pattern_id == pattern_id)
  146. query = query.order_by(TpPatternWSGroupList.create_time.desc())
  147. return query.all()
  148. def group_id_get_tp_pattern_ws_group_info(group_id:str,db: Session):
  149. query = db.query(TpPatternWSGroupList)
  150. query = query.filter(TpPatternWSGroupList.del_flag != '2')
  151. query = query.filter(TpPatternWSGroupList.group_id == group_id)
  152. query = query.order_by(TpPatternWSGroupList.create_time.desc())
  153. return query.first()