classification.py 6.7 KB

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