warehouse_root.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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 warehouse_room_id_get_warehouse_room_info(db,id):
  23. query = db.query(ResourceProvisionWarehouseRoomInfo)
  24. query = query.filter_by(id = id,del_flag = '0')
  25. return query.first()
  26. def warehouse_id_get_warehouse_info(db,id):
  27. query = db.query(ResourceProvisionWarehouseInfo)
  28. query = query.filter_by(warehouse_id = id,del_flag = '0')
  29. # query = query.filter(ResourceProvisionWarehouseInfo.warehouse_id== id)
  30. # query = query.filter(ResourceProvisionWarehouseInfo.del_flag != '2')
  31. return query.first()
  32. @router.post("/create")
  33. async def create_pattern(
  34. user_id=Depends(valid_access_token),
  35. body = Depends(remove_xss_json),
  36. db: Session = Depends(get_db)
  37. ):
  38. try:
  39. new_type = ResourceProvisionWarehouseRoomInfo(
  40. id = new_guid(),
  41. room_name=body['room_name'],
  42. warehouse=body['warehouse_id'],
  43. room_area=body['room_area'],
  44. available_area=body['available_area'],
  45. height=body['height'],
  46. room_volume=body['room_volume'],
  47. available_volume=body['available_volume'],
  48. storage_type=body['storage_type'],
  49. level=body['level'],
  50. storage_type_code=body['storage_type_code'],
  51. last_inventory_time=body['last_inventory_time'],
  52. create_by = user_id
  53. )
  54. db.add(new_type)
  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_pattern(
  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. info = warehouse_room_id_get_warehouse_room_info(db,id)
  69. if not info:
  70. return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse room not found"})
  71. info.room_name = body['room_name']
  72. info.warehouse = body['warehouse_id']
  73. info.room_area = body['room_area']
  74. info.available_area = body['available_area']
  75. info.height = body['height']
  76. info.room_volume = body['room_volume']
  77. info.available_volume = body['available_volume']
  78. info.storage_type = body['storage_type']
  79. info.level = body['level']
  80. info.storage_type_code = body['storage_type_code']
  81. info.last_inventory_time = body['last_inventory_time']
  82. info.update_by = user_id
  83. db.commit()
  84. return {"code": 200, "msg": "更新成功"}
  85. except Exception as e:
  86. traceback.print_exc()
  87. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  88. @router.get("/info/{id}")
  89. async def get_pattern_info(
  90. id: str,
  91. db: Session = Depends(get_db)
  92. ):
  93. try:
  94. info = warehouse_room_id_get_warehouse_room_info(db,id)
  95. if not info:
  96. return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse room not found"})
  97. warehouse_info = warehouse_id_get_warehouse_info(db,info.warehouse)
  98. print(info.warehouse,warehouse_info)
  99. if warehouse_info:
  100. warehouse_name = warehouse_info.warehouse_name
  101. else:
  102. warehouse_name = None
  103. data = {
  104. "id":info.id,
  105. "warehouse_id": info.warehouse,
  106. "warehouse_name": warehouse_name,
  107. "room_name": info.room_name,
  108. "room_area": info.room_area,
  109. "available_area": info.available_area,
  110. "height": info.height,
  111. "room_volume": info.room_volume,
  112. "available_volume": info.available_volume,
  113. "storage_type": info.storage_type,
  114. "level": info.level,
  115. "storage_type_code": info.storage_type_code,
  116. "last_inventory_time": info.last_inventory_time,
  117. "create_time":info.create_time}
  118. return {"code": 200, "msg": "获取成功", "data": data}
  119. except Exception as e:
  120. traceback.print_exc()
  121. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  122. @router.get("/list")
  123. async def get_pattern_list(
  124. warehouse_id: str = Query(None, description='名称'),
  125. page: int = Query(1, gt=0, description='页码'),
  126. pageSize: int = Query(100, gt=0, description='每页条目数量'),
  127. db: Session = Depends(get_db)
  128. ):
  129. try:
  130. query = db.query(ResourceProvisionWarehouseRoomInfo)
  131. query = query.filter_by(del_flag='0')
  132. if warehouse_id:
  133. query = query.filter(ResourceProvisionWarehouseInfo.warehouse_id==warehouse_id)
  134. total_items = query.count()
  135. # 排序
  136. query = query.order_by(ResourceProvisionWarehouseRoomInfo.create_time.desc())
  137. # 执行分页查询
  138. lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
  139. data = []
  140. for info in lists:
  141. warehouse_info = warehouse_id_get_warehouse_info(db, info.warehouse)
  142. if warehouse_info:
  143. warehouse_name = warehouse_info.warehouse_name
  144. else:
  145. warehouse_name = None
  146. data.append({
  147. "id":info.id,
  148. "warehouse_id": info.warehouse,
  149. "warehouse_name": warehouse_name,
  150. "room_name": info.room_name,
  151. "room_area": info.room_area,
  152. "available_area": info.available_area,
  153. "height": info.height,
  154. "room_volume": info.room_volume,
  155. "available_volume": info.available_volume,
  156. "storage_type": info.storage_type,
  157. "level": info.level,
  158. "storage_type_code": info.storage_type_code,
  159. "last_inventory_time": info.last_inventory_time,
  160. "create_time":info.create_time} )
  161. return {"code": 200, "msg": "查询成功", "data": data,
  162. "total": total_items,
  163. "page": page,
  164. "pageSize": pageSize,
  165. "totalPages": (total_items + pageSize - 1) // pageSize
  166. }
  167. except Exception as e:
  168. traceback.print_exc()
  169. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  170. @router.delete("/delete/{id}")
  171. async def delete_pattern(
  172. id: str,
  173. db: Session = Depends(get_db)
  174. ):
  175. try:
  176. # 检查图案是否存在
  177. info = warehouse_room_id_get_warehouse_room_info(db, id)
  178. if not info:
  179. return JSONResponse(status_code=404, content={"code": 404, "msg": "warehouse room not found"})
  180. info.del_flag='2'
  181. db.commit()
  182. return {"code": 200, "msg": "删除成功"}
  183. except Exception as e:
  184. traceback.print_exc()
  185. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")