template.py 8.1 KB

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