__init__.py 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, Query, HTTPException, status,WebSocket,WebSocketDisconnect
  4. from common.security import valid_access_token,valid_websocket_token
  5. from fastapi.responses import JSONResponse
  6. from sqlalchemy.orm import Session
  7. from sqlalchemy.sql import func
  8. from common.auth_user import *
  9. from sqlalchemy import text
  10. from pydantic import BaseModel
  11. from common.BigDataCenterAPI import *
  12. from database import get_db
  13. from typing import List
  14. from models import *
  15. from utils import *
  16. from utils.spatial import *
  17. from utils.ry_system_util import *
  18. from common.websocketManager import *
  19. import json
  20. import traceback
  21. router = APIRouter()
  22. @router.post("/create")
  23. async def create_pattern(
  24. user_id=Depends(valid_access_token),
  25. body = Depends(remove_xss_json),
  26. db: Session = Depends(get_db)
  27. ):
  28. try:
  29. new_pattern = TpPatternList(
  30. id = new_guid(),
  31. pattern_name=body['pattern_name'],
  32. content=body['content'],
  33. create_dept = user_id
  34. )
  35. db.add(new_pattern)
  36. db.commit()
  37. return {"code": 200, "msg": "创建成功", "data": None}
  38. except Exception as e:
  39. traceback.print_exc()
  40. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  41. @router.put("/update/{pattern_id}")
  42. async def update_pattern(
  43. pattern_id :int ,
  44. user_id=Depends(valid_access_token),
  45. body=Depends(remove_xss_json),
  46. db: Session = Depends(get_db)
  47. ):
  48. try:
  49. query = db.query(TpPatternList)
  50. query = query.filter(TpPatternList.id == pattern_id)
  51. query = query.filter(TpPatternList.del_flag != '2')
  52. update_pattern = query.first()
  53. if not update_pattern:
  54. raise HTTPException(status_code=404, detail="图案不存在")
  55. update_pattern.pattern_name = body['pattern_name']
  56. update_pattern.content = body['content']
  57. update_pattern.create_dept = user_id
  58. db.commit()
  59. return {"code": 200, "msg": "更新成功"}
  60. except Exception as e:
  61. traceback.print_exc()
  62. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  63. @router.get("/info/{pattern_id}")
  64. async def get_pattern_info(
  65. pattern_id: int,
  66. db: Session = Depends(get_db)
  67. ):
  68. try:
  69. query = db.query(TpPatternList)
  70. query = query.filter(TpPatternList.id == pattern_id)
  71. query = query.filter(TpPatternList.del_flag != '2')
  72. pattern = query.first()
  73. # pattern = db.query(TpPatternList).filter(TpPatternList.id == pattern_id).first()
  74. if not pattern:
  75. raise HTTPException(status_code=404, detail="图案不存在")
  76. return {"code": 200, "msg": "获取成功", "data": {"pattern_name": pattern.pattern_name, "content": pattern.content}}
  77. except Exception as e:
  78. traceback.print_exc()
  79. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  80. @router.get("/list")
  81. async def get_pattern_list(
  82. pattern_name: str = Query(None, description='预案名称'),
  83. page: int = Query(1, gt=0, description='页码'),
  84. pageSize: int = Query(5, gt=0, description='每页条目数量'),
  85. db: Session = Depends(get_db)
  86. ):
  87. try:
  88. query = db.query(TpPatternList)
  89. query = query.filter(TpPatternList.del_flag != '2')
  90. if pattern_name:
  91. query = query.filter(TpPatternList.pattern_name.like(f'%{pattern_name}%'))
  92. total_items = query.count()
  93. # 排序
  94. query = query.order_by(TpPatternList.create_time.desc())
  95. # 执行分页查询
  96. patterns = query.offset((page - 1) * pageSize).limit(pageSize).all()
  97. return {"code": 200, "msg": "查询成功", "data": [{"id": p.id, "pattern_name": p.pattern_name, "content": p.content} for p in patterns],
  98. "total": total_items,
  99. "page": page,
  100. "pageSize": pageSize,
  101. "totalPages": (total_items + pageSize - 1) // pageSize
  102. }
  103. except Exception as e:
  104. traceback.print_exc()
  105. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  106. @router.delete("/delete/{pattern_id}")
  107. async def delete_pattern(
  108. pattern_id: int,
  109. db: Session = Depends(get_db)
  110. ):
  111. try:
  112. # 检查图案是否存在
  113. query = db.query(TpPatternList)
  114. query = query.filter(TpPatternList.id == pattern_id)
  115. query = query.filter(TpPatternList.del_flag != '2')
  116. pattern = query.first()
  117. if not pattern:
  118. raise HTTPException(status_code=404, detail="图案不存在")
  119. # 执行删除操作
  120. pattern.del_flag='2'
  121. db.commit()
  122. return {"code": 200, "msg": "删除成功"}
  123. except Exception as e:
  124. traceback.print_exc()
  125. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  126. @router.websocket("/{pattern_id}/ws")
  127. async def websocket_endpoint(pattern_id:str ,websocket: WebSocket,db: Session = Depends(get_db)):
  128. await manager.connect(websocket,pattern_id,db)
  129. print(manager.active_connections.keys(),manager.active_connections[pattern_id])
  130. try:
  131. data = await websocket.receive_text()
  132. user_id = valid_websocket_token(data)
  133. user_list = [ ]
  134. for i in pattern_id_get_tp_pattern_ws_user_list(pattern_id, db):
  135. if i.ws_flag=='true':
  136. user_list.append(i.user_id)
  137. # print(user_id,user_list)
  138. if user_id not in user_list:
  139. await websocket.send_text('{"code":500,"msg":"抱歉,您无权限,请联系系统管理员"}')
  140. # manager.disconnect(websocket, pattern_id)
  141. raise HTTPException(status_code=500, detail="抱歉,您无权限,请联系系统管理员")
  142. await websocket.send_text('{"code":200,"msg":"连接成功"}')
  143. await manager.ownmessage(websocket,pattern_id,db)
  144. # await manager.broadcast(pattern_id, db) # 广播消息给所有连接
  145. while True:
  146. data = await websocket.receive_text()
  147. # print(data)
  148. data = json.loads(data)
  149. if 'operation' in data:
  150. if data['operation'] == 'add':
  151. if 'name' in data and 'content'in data and 'visible' in data:
  152. id = new_guid()
  153. if 'id' in data:
  154. id = data['id']
  155. new_pattern_ws = TpPatternWSList(
  156. id=id,
  157. name=data['name'],
  158. pattern_id=pattern_id,
  159. content=data['content'],
  160. visible=data['visible'],
  161. create_by=user_id
  162. )
  163. db.add(new_pattern_ws)
  164. db.commit()
  165. await websocket.send_text('{"code": 200, "msg": "创建成功", "data": null}')
  166. await manager.broadcast(pattern_id, db,websocket)
  167. else:
  168. await websocket.send_text('{"code": 404, "msg": "新增数据 name/content/visible为必填"}')
  169. elif data['operation'] == 'update' :
  170. if 'id' in data:
  171. id = data['id']
  172. query = db.query(TpPatternWSList)
  173. query = query.filter(TpPatternWSList.del_flag != '2')
  174. query = query.filter(TpPatternWSList.id == id)
  175. info = query.first()
  176. if 'name' in data:
  177. info.name = data['name']
  178. info.update_by = user_id
  179. # if 'pattern_id' in data:
  180. # info.pattern_id = data['pattern_id']
  181. # info.update_by = user_id
  182. if 'content' in data:
  183. info.content = data['content']
  184. info.update_by = user_id
  185. if 'visible' in data:
  186. info.visible = data['visible']
  187. info.update_by = user_id
  188. db.commit()
  189. await websocket.send_text('{"code": 200, "msg": "更新成功", "data": null}')
  190. await manager.broadcast(pattern_id, db,websocket)
  191. elif data['operation'] == 'delete':
  192. if 'id' in data:
  193. id = data['id']
  194. query = db.query(TpPatternWSList)
  195. query = query.filter(TpPatternWSList.del_flag != '2')
  196. query = query.filter(TpPatternWSList.id == id)
  197. info = query.first()
  198. info.del_flag='2'
  199. info.update_by = user_id
  200. db.commit()
  201. await websocket.send_text('{"code": 200, "msg": "更新成功", "data": null}')
  202. await manager.broadcast(pattern_id, db, websocket)
  203. else:
  204. await websocket.send_text('{"code": 404, "msg": "更新数据 id为必填","data":null}')
  205. elif data['operation'] == 'heartCheck':
  206. await websocket.send_text('null')
  207. else:
  208. await websocket.send_text('{"code":404,"msg":"operation入参add or update or delete or heartCheck"}')
  209. else:
  210. await websocket.send_text('{"code":404,"msg":"需包含operation参数"}')
  211. # 广播消息给所有连接
  212. except WebSocketDisconnect:
  213. manager.disconnect(websocket,pattern_id)
  214. @router.post("/ws/bz_add")
  215. async def create_pattern(
  216. user_id=Depends(valid_access_token),
  217. body = Depends(remove_xss_json),
  218. db: Session = Depends(get_db)
  219. ):
  220. try:
  221. new_pattern_ws = TpPatternWSList(
  222. id = new_guid(),
  223. name=body['name'],
  224. pattern_id=body['pattern_id'],
  225. content=body['content'],
  226. visible = body['visible'],
  227. create_by = user_id
  228. )
  229. db.add(new_pattern_ws)
  230. db.commit()
  231. # await manager.broadcast(body['pattern_id'], db)
  232. return {"code": 200, "msg": "创建成功", "data": None}
  233. except Exception as e:
  234. traceback.print_exc()
  235. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  236. @router.put("/ws/bz_update")
  237. async def update_pattern(
  238. user_id=Depends(valid_access_token),
  239. body = Depends(remove_xss_json),
  240. db: Session = Depends(get_db)
  241. ):
  242. try:
  243. id = body['id']
  244. query = db.query(TpPatternWSList)
  245. query = query.filter(TpPatternWSList.del_flag!='2')
  246. query = query.filter(TpPatternWSList.id == id)
  247. info = query.first()
  248. if 'name' in body:
  249. info.name=body['name']
  250. info.update_by=user_id
  251. if 'pattern_id' in body:
  252. info.pattern_id=body['pattern_id']
  253. info.update_by=user_id
  254. if 'content' in body:
  255. info.content=body['content']
  256. info.update_by=user_id
  257. if 'visible' in body:
  258. info.visible=body['visible']
  259. info.update_by=user_id
  260. db.commit()
  261. # print(manager.active_connections.keys())
  262. # print(manager.active_connections)
  263. # await manager.broadcast(body['pattern_id'], db)
  264. return {"code": 200, "msg": "更新成功", "data": None}
  265. except Exception as e:
  266. traceback.print_exc()
  267. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  268. @router.post("/ws/create")
  269. async def create_pattern(
  270. user_id=Depends(valid_access_token),
  271. body = Depends(remove_xss_json),
  272. db: Session = Depends(get_db)
  273. ):
  274. try:
  275. if pattern_id_get_tp_pattern_ws_group_def_info(body['pattern_id'],db):
  276. # return JSONResponse(
  277. # status_code=500, content={"code":500,"msg":"pattern_id已存在"}
  278. # )
  279. body['pattern_id']=new_guid()
  280. user_id_list = body['user_id_list']
  281. if str(user_id) not in user_id_list and user_id not in user_id_list:
  282. print(str(user_id),user_id_list)
  283. user_id_list.append(str(user_id))
  284. for user in user_id_list:
  285. new_pattern_user_ws = TpPatternWSUserList(
  286. id=new_guid(),
  287. pattern_id=body['pattern_id'],
  288. pattern_name=body['pattern_name'],
  289. user_id=user,
  290. create_by=user_id
  291. )
  292. db.add(new_pattern_user_ws)
  293. for bz in body['bz_list']:
  294. # if 'name' in body and 'content' in body and 'visible' in body:
  295. new_pattern_ws = TpPatternWSList(
  296. id = new_guid(),
  297. name=bz['name'],
  298. pattern_id=body['pattern_id'],
  299. content=bz['content'],
  300. visible = bz['visible'],
  301. create_by = user_id
  302. )
  303. db.add(new_pattern_ws)
  304. new_pattern_group_ws = TpPatternWSGroupList(
  305. group_id=body['pattern_id'],
  306. group_name='默认分组',
  307. pattern_id=body['pattern_id'],
  308. pattern_name=body['pattern_name'],
  309. create_by=user_id
  310. )
  311. db.add(new_pattern_group_ws)
  312. db.commit()
  313. return {"code": 200, "msg": "创建成功", "data": None}
  314. except Exception as e:
  315. traceback.print_exc()
  316. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  317. # @router.put("/ws/rollback")
  318. # async def rollback_pattern(
  319. # user_id=Depends(valid_access_token),
  320. # body = Depends(remove_xss_json),
  321. # db: Session = Depends(get_db)
  322. # ):
  323. # try:
  324. # user_list = [i.user_id for i in pattern_id_get_tp_pattern_ws_user_list(body['pattern_id'],db)]
  325. # if str(user_id) not in user_list:
  326. # return JSONResponse(status_code=404, content={
  327. # 'code': 404,
  328. # 'msg': '抱歉,您无权限,请联系系统管理员'
  329. # })
  330. # if pattern_id_get_tp_pattern_ws_count(body['pattern_id'],db)<=1:
  331. # return JSONResponse(status_code=404, content={
  332. # 'code': 404,
  333. # 'msg': '抱歉,已无法回滚'
  334. # })
  335. # data = user_id_and_pattern_id_get_tp_pattern_ws_info(user_id,body['pattern_id'],db)
  336. # data.del_flag='2'
  337. # data.update_by = user_id
  338. # db.commit()
  339. # return {"code": 200, "msg": "回滚成功", "data": None}
  340. # except Exception as e:
  341. # traceback.print_exc()
  342. # raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  343. @router.get("/ws/list")
  344. async def get_pattern_list(
  345. pattern_name: str = Query(None, description='预案名称'),
  346. # page: int = Query(1, gt=0, description='页码'),
  347. # pageSize: int = Query(5, gt=0, description='每页条目数量'),
  348. user_id=Depends(valid_access_token),
  349. db: Session = Depends(get_db)
  350. ):
  351. try:
  352. query = db.query(TpPatternWSUserList)
  353. query = query.filter(TpPatternWSUserList.del_flag != '2')
  354. query = query.filter(TpPatternWSUserList.user_id==user_id)
  355. if pattern_name:
  356. query = query.filter(TpPatternWSUserList.pattern_name.like(f'%{pattern_name}%'))
  357. total_items = query.count()
  358. # 排序
  359. query = query.order_by(TpPatternWSUserList.create_time.desc())
  360. # 执行分页查询
  361. patterns = query.all() # .offset((page - 1) * pageSize).limit(pageSize)
  362. return {"code": 200, "msg": "查询成功", "data": [{"id": p.id,"pattern_id":p.pattern_id, "pattern_name": p.pattern_name} for p in patterns],
  363. # "total": total_items,
  364. # "page": page,
  365. # "pageSize": pageSize,
  366. # "totalPages": (total_items + pageSize - 1) // pageSize
  367. }
  368. except Exception as e:
  369. traceback.print_exc()
  370. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  371. @router.get("/ws/user_list")
  372. async def get_pattern_list(
  373. pattern_id: str = Query(None, description='预案名称'),
  374. page: int = Query(1, gt=0, description='页码'),
  375. pageSize: int = Query(5, gt=0, description='每页条目数量'),
  376. user_id=Depends(valid_access_token),
  377. db: Session = Depends(get_db)
  378. ):
  379. try:
  380. query = db.query(TpPatternWSUserList)
  381. query = query.filter(TpPatternWSUserList.del_flag != '2')
  382. query = query.filter(TpPatternWSUserList.pattern_id==pattern_id)
  383. total_items = query.count()
  384. # 排序
  385. query = query.order_by(TpPatternWSUserList.create_time.desc())
  386. # 执行分页查询
  387. patterns = query.offset((page - 1) * pageSize).limit(pageSize).all()
  388. data = []
  389. for p in patterns:
  390. user = user_id_get_user_info(db, p.user_id)
  391. dept = dept_id_get_dept_info(db, user.dept_id)
  392. data.append({"id": p.id,"pattern_id":p.pattern_id,"ws_flag":p.ws_flag, "pattern_name": p.pattern_name,"nick_name":user.nick_name,"dept_name":dept.dept_name})
  393. return {"code": 200, "msg": "查询成功", "data": data,
  394. "total": total_items,
  395. "page": page,
  396. "pageSize": pageSize,
  397. "totalPages": (total_items + pageSize - 1) // pageSize
  398. }
  399. except Exception as e:
  400. traceback.print_exc()
  401. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  402. @router.put("/ws/delete_user")
  403. async def rollback_pattern(
  404. user_id=Depends(valid_access_token),
  405. body = Depends(remove_xss_json),
  406. db: Session = Depends(get_db)
  407. ):
  408. try:
  409. pattern_info = pattern_id_get_tp_pattern_ws_group_def_info(body['pattern_id'],db)
  410. if pattern_info is None:
  411. return JSONResponse(status_code=404, content={
  412. 'code': 404,
  413. 'msg': '抱歉,pattern_id不存在,请联系系统管理员'
  414. })
  415. if pattern_info.create_by!=user_id:
  416. return JSONResponse(status_code=404, content={
  417. 'code': 404,
  418. 'msg': '抱歉,您无权限,请联系系统管理员'
  419. })
  420. user = user_id_and_pattern_id_get_tp_pattern_ws_user_info(body['user_id'],body['pattern_id'],db)
  421. user.ws_flag='false'
  422. user.update_by = user_id
  423. db.commit()
  424. return {"code": 200, "msg": "关闭协同成功", "data": None}
  425. except Exception as e:
  426. traceback.print_exc()
  427. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  428. @router.put("/ws/delete_all_user")
  429. async def rollback_pattern(
  430. user_id=Depends(valid_access_token),
  431. body = Depends(remove_xss_json),
  432. db: Session = Depends(get_db)
  433. ):
  434. try:
  435. pattern_info = pattern_id_get_tp_pattern_ws_group_def_info(body['pattern_id'],db)
  436. if pattern_info is None:
  437. return JSONResponse(status_code=404, content={
  438. 'code': 404,
  439. 'msg': '抱歉,pattern_id不存在,请联系系统管理员'
  440. })
  441. if pattern_info.create_by!=user_id:
  442. return JSONResponse(status_code=404, content={
  443. 'code': 404,
  444. 'msg': '抱歉,您无权限,请联系系统管理员'
  445. })
  446. users = pattern_id_get_tp_pattern_ws_user_list(body['pattern_id'],db)
  447. for user in users:
  448. user.ws_flag='false'
  449. user.update_by = user_id
  450. db.commit()
  451. return {"code": 200, "msg": "关闭协同成功", "data": None}
  452. except Exception as e:
  453. traceback.print_exc()
  454. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  455. @router.put("/ws/reset_user")
  456. async def rollback_pattern(
  457. user_id=Depends(valid_access_token),
  458. body = Depends(remove_xss_json),
  459. db: Session = Depends(get_db)
  460. ):
  461. try:
  462. pattern_info = pattern_id_get_tp_pattern_ws_group_def_info(body['pattern_id'],db)
  463. if pattern_info is None:
  464. return JSONResponse(status_code=404, content={
  465. 'code': 404,
  466. 'msg': '抱歉,pattern_id不存在,请联系系统管理员'
  467. })
  468. if pattern_info.create_by!=user_id:
  469. return JSONResponse(status_code=404, content={
  470. 'code': 404,
  471. 'msg': '抱歉,您无权限,请联系系统管理员'
  472. })
  473. user = user_id_and_pattern_id_get_tp_pattern_ws_user_info(body['user_id'],body['pattern_id'],db)
  474. user.ws_flag='true'
  475. user.update_by = user_id
  476. db.commit()
  477. return {"code": 200, "msg": "开启协同成功", "data": None}
  478. except Exception as e:
  479. traceback.print_exc()
  480. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  481. @router.put("/ws/reset_all_user")
  482. async def rollback_pattern(
  483. user_id=Depends(valid_access_token),
  484. body = Depends(remove_xss_json),
  485. db: Session = Depends(get_db)
  486. ):
  487. try:
  488. pattern_info = pattern_id_get_tp_pattern_ws_group_def_info(body['pattern_id'],db)
  489. if pattern_info is None:
  490. return JSONResponse(status_code=404, content={
  491. 'code': 404,
  492. 'msg': '抱歉,pattern_id不存在,请联系系统管理员'
  493. })
  494. if pattern_info.create_by!=user_id:
  495. return JSONResponse(status_code=404, content={
  496. 'code': 404,
  497. 'msg': '抱歉,您无权限,请联系系统管理员'
  498. })
  499. users = pattern_id_get_tp_pattern_ws_user_list(body['pattern_id'],db)
  500. for user in users:
  501. user.ws_flag='true'
  502. user.update_by = user_id
  503. db.commit()
  504. return {"code": 200, "msg": "开启协同成功", "data": None}
  505. except Exception as e:
  506. traceback.print_exc()
  507. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  508. @router.post("/ws/add_user")
  509. async def rollback_pattern(
  510. user_id=Depends(valid_access_token),
  511. body = Depends(remove_xss_json),
  512. db: Session = Depends(get_db)
  513. ):
  514. try:
  515. pattern_info = pattern_id_get_tp_pattern_ws_group_def_info(body['pattern_id'],db)
  516. if pattern_info is None:
  517. return JSONResponse(status_code=404, content={
  518. 'code': 404,
  519. 'msg': '抱歉,pattern_id不存在,请联系系统管理员'
  520. })
  521. if pattern_info.create_by!=user_id:
  522. return JSONResponse(status_code=404, content={
  523. 'code': 404,
  524. 'msg': '抱歉,您无权限,请联系系统管理员'
  525. })
  526. user_id_list = body['user_id_list']
  527. if str(user_id) not in user_id_list and user_id not in user_id_list:
  528. # print(str(user_id),user_id_list)
  529. user_id_list.append(str(user_id))
  530. info = pattern_id_get_tp_pattern_ws_group_def_info(body['pattern_id'],db)
  531. user_id_list_1 = [i.user_id for i in pattern_id_get_tp_pattern_ws_user_list(body['pattern_id'], db)] # 已存在的用户列表
  532. for user in user_id_list:
  533. user = int(user)
  534. if user in user_id_list_1:
  535. user_info = user_id_and_pattern_id_get_tp_pattern_ws_user_info(user,body['pattern_id'],db)
  536. user_info.ws_flag='true'
  537. else:
  538. new_pattern_ws = TpPatternWSUserList(
  539. id=new_guid(),
  540. pattern_id=body['pattern_id'],
  541. pattern_name=info.pattern_name,
  542. user_id=user,
  543. create_by=user_id
  544. )
  545. db.add(new_pattern_ws)
  546. db.commit()
  547. return {"code": 200, "msg": "增加协同用户成功", "data": None}
  548. except Exception as e:
  549. traceback.print_exc()
  550. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  551. @router.post("/ws/add_group")
  552. async def add_group_pattern(
  553. user_id=Depends(valid_access_token),
  554. body = Depends(remove_xss_json),
  555. db: Session = Depends(get_db)
  556. ):
  557. try:
  558. pattern_info = pattern_id_get_tp_pattern_ws_group_def_info(body['pattern_id'],db)
  559. if pattern_info is None:
  560. return JSONResponse(status_code=404, content={
  561. 'code': 404,
  562. 'msg': '抱歉,pattern_id不存在,请联系系统管理员'
  563. })
  564. if pattern_info.create_by!=user_id:
  565. return JSONResponse(status_code=404, content={
  566. 'code': 404,
  567. 'msg': '抱歉,您无权限,请联系系统管理员'
  568. })
  569. info = pattern_id_get_tp_pattern_ws_group_def_info(body['pattern_id'], db)
  570. new_pattern_ws_group = TpPatternWSGroupList(
  571. group_id=new_guid(),
  572. group_name = body['group_name'],
  573. pattern_id=body['pattern_id'],
  574. pattern_name=info.pattern_name,
  575. create_by=user_id
  576. )
  577. db.add(new_pattern_ws_group)
  578. db.commit()
  579. return {"code": 200, "msg": "新增分组成功", "data": None}
  580. except Exception as e:
  581. traceback.print_exc()
  582. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  583. @router.put("/ws/update_group")
  584. async def add_group_pattern(
  585. user_id=Depends(valid_access_token),
  586. body = Depends(remove_xss_json),
  587. db: Session = Depends(get_db)
  588. ):
  589. try:
  590. pattern_info = pattern_id_get_tp_pattern_ws_group_def_info(body['pattern_id'],db)
  591. if pattern_info is None:
  592. return JSONResponse(status_code=404, content={
  593. 'code': 404,
  594. 'msg': '抱歉,pattern_id不存在,请联系系统管理员'
  595. })
  596. if pattern_info.create_by!=user_id:
  597. return JSONResponse(status_code=404, content={
  598. 'code': 404,
  599. 'msg': '抱歉,您无权限,请联系系统管理员'
  600. })
  601. query = db.query(TpPatternWSGroupList)
  602. query = query.filter(TpPatternWSGroupList.del_flag!='2')
  603. query = query.filter(TpPatternWSGroupList.group_id==body['gruop_id'])
  604. group = query.first()
  605. if 'group_name' in body:
  606. group.group_name = body['group_name']
  607. group.update_by=user_id
  608. db.commit()
  609. return {"code": 200, "msg": "更新分组成功", "data": None}
  610. except Exception as e:
  611. traceback.print_exc()
  612. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  613. @router.get("/ws/bz_list")
  614. async def get_pattern_list(
  615. pattern_id: str = Query(None, description='预案名称'),
  616. # page: int = Query(1, gt=0, description='页码'),
  617. # pageSize: int = Query(5, gt=0, description='每页条目数量'),
  618. user_id=Depends(valid_access_token),
  619. db: Session = Depends(get_db)
  620. ):
  621. try:
  622. # data = pattern_id_get_tp_pattern_ws_list(pattern_id,db)
  623. group_list = pattern_id_get_tp_pattern_ws_group_list(pattern_id,db)
  624. message = []
  625. for group in group_list:
  626. query = db.query(TpPatternWSList)
  627. query = query.filter(TpPatternWSList.del_flag != '2')
  628. query = query.filter(TpPatternWSList.pattern_id == group.group_id)
  629. # total_items = query.count()
  630. # 排序
  631. query = query.order_by(TpPatternWSList.create_time.desc())
  632. # 执行分页查询
  633. group = {
  634. "group_id":group.group_id,
  635. "group_name":group.group_name,
  636. "pattern_id":group.pattern_id,
  637. "pattern_name":group.pattern_name,
  638. "bz_list":[],
  639. "create_time": group.create_time.strftime('%Y-%m-%d %H:%M:%S')
  640. }
  641. patterns = query.all() # .offset((page - 1) * pageSize).limit(pageSize)
  642. for info in patterns:
  643. user= user_id_get_user_info(db,info.create_by)
  644. dept = dept_id_get_dept_info(db,user.dept_id)
  645. group['bz_list'].append({"id":info.id,
  646. "name":info.name,
  647. "group_id":info.pattern_id,
  648. "content":info.content,
  649. "visible":info.visible,
  650. "user_id":info.create_by,
  651. "nick_name":user.nick_name,
  652. "dept_name":dept.dept_name,
  653. "create_time":info.create_time.strftime('%Y-%m-%d %H:%M:%S')})
  654. message.append(group)
  655. return {"code": 200, "msg": "查询成功", "data": message,
  656. # "total": total_items,
  657. # "page": page,
  658. # "pageSize": pageSize,
  659. # "totalPages": (total_items + pageSize - 1) // pageSize
  660. }
  661. except Exception as e:
  662. traceback.print_exc()
  663. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  664. @router.put('/ws/bz_visible')
  665. async def update_bz_visible(
  666. body = Depends(remove_xss_json),
  667. user_id=Depends(valid_access_token),
  668. db: Session = Depends(get_db)
  669. ):
  670. try:
  671. zb_id_list = body['zb_id_list']
  672. for zb in zb_id_list:
  673. query = db.query(TpPatternWSList)
  674. query = query.filter(TpPatternWSList.del_flag!='2')
  675. query = query.filter(TpPatternWSList.id==zb)
  676. info = query.first()
  677. info.visible=body['visible']
  678. db.commit()
  679. except Exception as e:
  680. traceback.print_exc()
  681. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")