warehouse.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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 utils.resource_provision_util import *
  19. from common.websocketManager import *
  20. import json
  21. import traceback
  22. router = APIRouter()
  23. @router.post("/create")
  24. async def create_pattern(
  25. user_id=Depends(valid_access_token),
  26. body = Depends(remove_xss_json),
  27. db: Session = Depends(get_db)
  28. ):
  29. try:
  30. new_type = ResourceProvisionWarehouseInfo(
  31. warehouse_id = new_guid(),
  32. warehouse_name=body['warehouse_name'],
  33. status=body['status'],
  34. contact_person=body['contact_person'],
  35. contact_phone=body['contact_phone'],
  36. address=body['address'],
  37. type=body['type'],
  38. level=body['level'],
  39. storage_dept_id=body['storage_dept_id'],
  40. storage_dept_name='', #body['storage_dept_name']
  41. area_name=body['area_name'],
  42. longitude=body['longitude'],
  43. latitude=body['latitude'],
  44. area =body['area'],
  45. remark=body['remark'],
  46. create_by = user_id
  47. )
  48. db.add(new_type)
  49. db.commit()
  50. return {"code": 200, "msg": "创建成功", "data": None}
  51. except Exception as e:
  52. traceback.print_exc()
  53. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  54. @router.put("/update/{id}")
  55. async def update_pattern(
  56. id :str ,
  57. user_id=Depends(valid_access_token),
  58. body=Depends(remove_xss_json),
  59. db: Session = Depends(get_db)
  60. ):
  61. try:
  62. update_warehouse = warehouse_id_get_warehouse_info(db,id)
  63. if not update_warehouse:
  64. return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse not found"})
  65. update_warehouse.warehouse_name = body['warehouse_name']
  66. update_warehouse.status = body['status']
  67. update_warehouse.contact_person = body['contact_person']
  68. update_warehouse.contact_phone = body['contact_phone']
  69. update_warehouse.address = body['address']
  70. update_warehouse.type = body['type']
  71. update_warehouse.level = body['level']
  72. update_warehouse.storage_dept_id = body['storage_dept_id']
  73. update_warehouse.storage_dept_name = body['storage_dept_name']
  74. update_warehouse.area_name = body['area_name']
  75. update_warehouse.longitude = body['longitude']
  76. update_warehouse.latitude = body['latitude']
  77. update_warehouse.area = body['area']
  78. update_warehouse.remark = body['remark']
  79. update_warehouse.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. user_id=Depends(valid_access_token),
  89. db: Session = Depends(get_db)
  90. ):
  91. try:
  92. info = warehouse_id_get_warehouse_info(db,id)
  93. if not info:
  94. return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse not found"})
  95. dept_info = dept_id_get_dept_info(db,info.storage_dept_id)
  96. data = {"warehouse_id": info.warehouse_id,
  97. "warehouse_name": info.warehouse_name,
  98. "status": info.status,
  99. "contact_person": info.contact_person,
  100. "contact_phone": info.contact_phone,
  101. "address": info.address,
  102. "remark": info.remark,
  103. "type": info.type,
  104. "level": info.level,
  105. "storage_dept_id": info.storage_dept_id,
  106. "storage_dept_name": dept_info.dept_name,
  107. "area_name": info.area_name,
  108. "longitude": info.longitude,
  109. "latitude": info.latitude,
  110. "create_by": info.create_by,
  111. "area":info.area,
  112. "create_time":info.create_time}
  113. return {"code": 200, "msg": "获取成功", "data": data}
  114. except Exception as e:
  115. traceback.print_exc()
  116. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  117. @router.get("/list")
  118. async def get_pattern_list(
  119. # name: str = Query(None, description='名称'),
  120. user_id=Depends(valid_access_token),
  121. page: int = Query(1, gt=0, description='页码'),
  122. pageSize: int = Query(None, gt=0, description='每页条目数量'),
  123. db: Session = Depends(get_db)
  124. ):
  125. try:
  126. query = db.query(ResourceProvisionWarehouseInfo)
  127. query = query.filter_by(del_flag='0')
  128. # if name:
  129. # query = query.filter(ResourceProvisionWarehouseInfo.material_category_name.like(f'%{name}%'))
  130. total_items = query.count()
  131. if pageSize is None:
  132. pageSize=total_items
  133. # 排序
  134. query = query.order_by(ResourceProvisionWarehouseInfo.create_time.desc())
  135. # 执行分页查询
  136. lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
  137. data = [ ]
  138. for info in lists:
  139. dept_info = dept_id_get_dept_info(db, info.storage_dept_id)
  140. data.append({"warehouse_id": info.warehouse_id,
  141. "warehouse_name": info.warehouse_name,
  142. "status": info.status,
  143. "contact_person": info.contact_person,
  144. "contact_phone": info.contact_phone,
  145. "address": info.address,
  146. "remark": info.remark,
  147. "type": info.type,
  148. "level": info.level,
  149. "storage_dept_id": info.storage_dept_id,
  150. "storage_dept_name": dept_info.dept_name,
  151. "area_name": info.area_name,
  152. "longitude": info.longitude,
  153. "latitude": info.latitude,
  154. "create_by": info.create_by,
  155. "area":info.area,
  156. "create_time":info.create_time})
  157. return {"code": 200, "msg": "查询成功", "data": data,
  158. "total": total_items,
  159. "page": page,
  160. "pageSize": pageSize,
  161. "totalPages": (total_items + pageSize - 1) // pageSize
  162. }
  163. except Exception as e:
  164. traceback.print_exc()
  165. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  166. @router.delete("/delete/{id}")
  167. async def delete_pattern(
  168. id: str,
  169. user_id=Depends(valid_access_token),
  170. db: Session = Depends(get_db)
  171. ):
  172. try:
  173. # 检查图案是否存在
  174. info = warehouse_id_get_warehouse_info(db, id)
  175. if not info:
  176. return JSONResponse(status_code=404, content={"code": 404, "msg": "warehouse not found"})
  177. info.del_flag='2'
  178. db.commit()
  179. return {"code": 200, "msg": "删除成功"}
  180. except Exception as e:
  181. traceback.print_exc()
  182. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")