__init__.py 26 KB

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