classification.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  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. def classification_id_get_classification_info(db,id):
  23. query = db.query(TpPatternClassification)
  24. query = query.filter_by(classification_id = id,del_flag = '0')
  25. return query.first()
  26. def template_id_get_classification_list(db,id):
  27. query = db.query(TpPatternClassification)
  28. query = query.filter_by(template_id = id,del_flag = '0')
  29. query = query.order_by(TpPatternClassification.order_num.asc())
  30. return query.all()
  31. def template_id_get_template_info(db,id):
  32. query = db.query(TpPatternTemplate)
  33. query = query.filter_by(template_id = id,del_flag = '0')
  34. return query.first()
  35. @router.post("/create")
  36. async def create_pattern(
  37. user_id=Depends(valid_access_token),
  38. body = Depends(remove_xss_json),
  39. db: Session = Depends(get_db)
  40. ):
  41. try:
  42. new_classification = TpPatternClassification(
  43. classification_id=new_guid(),
  44. template_id=body['template_id'],
  45. name=body['name'],
  46. value=body['value'],
  47. order_num = body['order_num'],
  48. visible=body['visible'],
  49. image=body['image'],
  50. icon=body['icon'],
  51. size=body['size'],
  52. create_by = user_id
  53. )
  54. db.add(new_classification)
  55. db.commit()
  56. return {"code": 200, "msg": "创建成功", "data": None}
  57. except Exception as e:
  58. traceback.print_exc()
  59. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  60. @router.put("/update/{id}")
  61. async def update_classification(
  62. id :str ,
  63. user_id=Depends(valid_access_token),
  64. body=Depends(remove_xss_json),
  65. db: Session = Depends(get_db)
  66. ):
  67. try:
  68. update_classification = classification_id_get_classification_info(db,id)
  69. if not update_classification:
  70. return JSONResponse(status_code=404,content={"code":404,"msg":"classification not found"})
  71. update_classification.template_id = body['template_id']
  72. update_classification.name = body['name']
  73. update_classification.value=body['value']
  74. update_classification.order_num=body['order_num']
  75. update_classification.visible=body['visible']
  76. update_classification.image=body['image']
  77. update_classification.icon=body['icon']
  78. update_classification.size=body['size']
  79. update_classification.update_by = user_id
  80. db.commit()
  81. return {"code": 200, "msg": "更新成功"}
  82. except Exception as e:
  83. traceback.print_exc()
  84. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  85. @router.get("/info/{id}")
  86. async def get_pattern_info(
  87. id: str,
  88. db: Session = Depends(get_db)
  89. ):
  90. try:
  91. info = classification_id_get_classification_info(db,id)
  92. if not info:
  93. return JSONResponse(status_code=404,content={"code":404,"msg":"classification not found"})
  94. template_info = template_id_get_template_info(db,info.template_id)
  95. data = {"classification_id": info.classification_id,
  96. "template_id": info.template_id,
  97. "template_name":template_info.name,
  98. "name": info.name,
  99. "value": info.value,
  100. "order_num": info.order_num,
  101. "visible": info.visible,
  102. "image": info.image,
  103. "icon": info.icon,
  104. "size": info.size,
  105. "create_time": info.create_time}
  106. return {"code": 200, "msg": "获取成功", "data": data}
  107. except Exception as e:
  108. traceback.print_exc()
  109. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  110. @router.get("/list")
  111. async def get_pattern_list(
  112. name: str = Query(None, description='名称'),
  113. page: int = Query(1, gt=0, description='页码'),
  114. pageSize: int = Query(None, gt=0, description='每页条目数量'),
  115. db: Session = Depends(get_db)
  116. ):
  117. try:
  118. query = db.query(TpPatternClassification)
  119. query = query.filter_by(del_flag='0')
  120. if name:
  121. query = query.filter(TpPatternClassification.name.like(f'%{name}%'))
  122. total_items = query.count()
  123. # 排序
  124. if pageSize is None:
  125. pageSize=total_items
  126. query = query.order_by(TpPatternClassification.order_num.asc())
  127. # 执行分页查询
  128. lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
  129. data = [ ]
  130. for info in lists:
  131. template_info = template_id_get_template_info(db, info.template_id)
  132. data.append({"classification_id": info.classification_id,
  133. "template_id": info.template_id,
  134. "template_name":template_info.name,
  135. "name": info.name,
  136. "value": info.value,
  137. "order_num": info.order_num,
  138. "visible": info.visible,
  139. "image": info.image,
  140. "icon": info.icon,
  141. "size": info.size,
  142. "create_time": info.create_time})
  143. return {"code": 200, "msg": "查询成功", "data": data,
  144. "total": total_items,
  145. "page": page,
  146. "pageSize": pageSize,
  147. "totalPages": (total_items + pageSize - 1) // pageSize
  148. }
  149. except Exception as e:
  150. traceback.print_exc()
  151. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  152. @router.delete("/delete/{id}")
  153. async def delete_pattern(
  154. id: str,
  155. db: Session = Depends(get_db)
  156. ):
  157. try:
  158. # 检查图案是否存在
  159. info = classification_id_get_classification_info(db, id)
  160. if not info:
  161. return JSONResponse(status_code=404, content={"code": 404, "msg": "classification not found"})
  162. info.del_flag='2'
  163. db.commit()
  164. return {"code": 200, "msg": "删除成功"}
  165. except Exception as e:
  166. traceback.print_exc()
  167. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  168. @router.put('/changeVisible')
  169. async def change_classification_visible(
  170. db: Session = Depends(get_db),
  171. body=Depends(remove_xss_json),
  172. user_id=Depends(valid_access_token)
  173. ):
  174. try:
  175. classification_id = body['classification_id']
  176. visible = body['visible']
  177. info = classification_id_get_classification_info(db, classification_id)
  178. if not info:
  179. return JSONResponse(status_code=404, content={"code": 404, "msg": "classification not found"})
  180. info.visible= visible
  181. info.update_by=user_id
  182. db.commit()
  183. return {
  184. "code": 200,
  185. "msg": "操作成功"
  186. }
  187. except Exception as e:
  188. # 处理异常
  189. traceback.print_exc()
  190. raise HTTPException(status_code=500, detail=str(e))
  191. @router.get("/templateTree")
  192. async def get_pattern_list(
  193. # name: str = Query(None, description='名称'),
  194. # page: int = Query(1, gt=0, description='页码'),
  195. # pageSize: int = Query(None, gt=0, description='每页条目数量'),
  196. db: Session = Depends(get_db)
  197. ):
  198. try:
  199. query = db.query(TpPatternTemplate)
  200. query = query.filter_by(del_flag='0')
  201. # if name:
  202. # query = query.filter(TpPatternTemplate.name.like(f'%{name}%'))
  203. # total_items = query.count()
  204. # # 排序
  205. # if pageSize is None:
  206. # pageSize=total_items
  207. query = query.order_by(TpPatternTemplate.order_num.asc())
  208. # 执行分页查询
  209. lists = query.all() # .offset((page - 1) * pageSize).limit(pageSize)
  210. data = []
  211. for info in lists:
  212. classification_list=template_id_get_classification_list(db,info.template_id)
  213. template_info = {"template_id": info.template_id,
  214. "name": info.name,
  215. "value": info.value,
  216. "order_num": info.order_num,
  217. "visible": info.visible,
  218. "create_time": info.create_time}
  219. if classification_list:
  220. template_info['children']=[{"classification_id": classification.classification_id,
  221. "name": classification.name,
  222. "value": classification.value,
  223. "order_num": classification.order_num,
  224. "visible": classification.visible,
  225. "image": classification.image,
  226. "icon": classification.icon,
  227. "size": classification.size,
  228. "create_time": classification.create_time} for classification in classification_list]
  229. data.append(template_info)
  230. return {"code": 200, "msg": "查询成功", "data": data}
  231. except Exception as e:
  232. traceback.print_exc()
  233. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")