classification.py 8.8 KB

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