warehouse_root.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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 = ResourceProvisionWarehouseRoomInfo(
  31. id = new_guid(),
  32. room_name=body['room_name'],
  33. warehouse=body['warehouse_id'],
  34. room_area=body['room_area'],
  35. available_area=body['available_area'],
  36. height=body['height'],
  37. room_volume=body['room_volume'],
  38. available_volume=body['available_volume'],
  39. storage_type=body['storage_type'],
  40. level=body['level'],
  41. storage_type_code=body['storage_type_code'],
  42. last_inventory_time=body['last_inventory_time'],
  43. create_by = user_id
  44. )
  45. db.add(new_type)
  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_pattern(
  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. info = warehouse_room_id_get_warehouse_room_info(db,id)
  60. if not info:
  61. return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse room not found"})
  62. info.room_name = body['room_name']
  63. info.warehouse = body['warehouse_id']
  64. info.room_area = body['room_area']
  65. info.available_area = body['available_area']
  66. info.height = body['height']
  67. info.room_volume = body['room_volume']
  68. info.available_volume = body['available_volume']
  69. info.storage_type = body['storage_type']
  70. info.level = body['level']
  71. info.storage_type_code = body['storage_type_code']
  72. info.last_inventory_time = body['last_inventory_time']
  73. info.update_by = user_id
  74. db.commit()
  75. return {"code": 200, "msg": "更新成功"}
  76. except Exception as e:
  77. traceback.print_exc()
  78. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  79. @router.get("/info/{id}")
  80. async def get_pattern_info(
  81. id: str,
  82. user_id=Depends(valid_access_token),
  83. db: Session = Depends(get_db)
  84. ):
  85. try:
  86. info = warehouse_room_id_get_warehouse_room_info(db,id)
  87. if not info:
  88. return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse room not found"})
  89. warehouse_info = warehouse_id_get_warehouse_info(db,info.warehouse)
  90. print(info.warehouse,warehouse_info)
  91. if warehouse_info:
  92. warehouse_name = warehouse_info.warehouse_name
  93. else:
  94. warehouse_name = None
  95. data = {
  96. "id":info.id,
  97. "warehouse_id": info.warehouse,
  98. "warehouse_name": warehouse_name,
  99. "room_name": info.room_name,
  100. "room_area": info.room_area,
  101. "available_area": info.available_area,
  102. "height": info.height,
  103. "room_volume": info.room_volume,
  104. "available_volume": info.available_volume,
  105. "storage_type": info.storage_type,
  106. "level": info.level,
  107. "storage_type_code": info.storage_type_code,
  108. "last_inventory_time": info.last_inventory_time,
  109. "create_time":info.create_time}
  110. return {"code": 200, "msg": "获取成功", "data": data}
  111. except Exception as e:
  112. traceback.print_exc()
  113. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  114. @router.get("/list")
  115. async def get_pattern_list(
  116. user_id=Depends(valid_access_token),
  117. warehouse_id: str = Query(None, description='名称'),
  118. page: int = Query(1, gt=0, description='页码'),
  119. pageSize: int = Query(100, gt=0, description='每页条目数量'),
  120. db: Session = Depends(get_db)
  121. ):
  122. try:
  123. query = db.query(ResourceProvisionWarehouseRoomInfo)
  124. query = query.filter_by(del_flag='0')
  125. if warehouse_id:
  126. query = query.filter(ResourceProvisionWarehouseInfo.warehouse_id==warehouse_id)
  127. total_items = query.count()
  128. # 排序
  129. query = query.order_by(ResourceProvisionWarehouseRoomInfo.create_time.desc())
  130. # 执行分页查询
  131. lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
  132. data = []
  133. for info in lists:
  134. warehouse_info = warehouse_id_get_warehouse_info(db, info.warehouse)
  135. if warehouse_info:
  136. warehouse_name = warehouse_info.warehouse_name
  137. else:
  138. warehouse_name = None
  139. data.append({
  140. "id":info.id,
  141. "warehouse_id": info.warehouse,
  142. "warehouse_name": warehouse_name,
  143. "room_name": info.room_name,
  144. "room_area": info.room_area,
  145. "available_area": info.available_area,
  146. "height": info.height,
  147. "room_volume": info.room_volume,
  148. "available_volume": info.available_volume,
  149. "storage_type": info.storage_type,
  150. "level": info.level,
  151. "storage_type_code": info.storage_type_code,
  152. "last_inventory_time": info.last_inventory_time,
  153. "create_time":info.create_time} )
  154. return {"code": 200, "msg": "查询成功", "data": data,
  155. "total": total_items,
  156. "page": page,
  157. "pageSize": pageSize,
  158. "totalPages": (total_items + pageSize - 1) // pageSize
  159. }
  160. except Exception as e:
  161. traceback.print_exc()
  162. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  163. @router.delete("/delete/{id}")
  164. async def delete_pattern(
  165. id: str,
  166. user_id=Depends(valid_access_token),
  167. db: Session = Depends(get_db)
  168. ):
  169. try:
  170. # 检查图案是否存在
  171. info = warehouse_room_id_get_warehouse_room_info(db, id)
  172. if not info:
  173. return JSONResponse(status_code=404, content={"code": 404, "msg": "warehouse room not found"})
  174. info.del_flag='2'
  175. db.commit()
  176. return {"code": 200, "msg": "删除成功"}
  177. except Exception as e:
  178. traceback.print_exc()
  179. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  180. @router.get('/treeselect')
  181. async def gettreeselect(request: Request,room_name: str = Query(None, description='名称'),material_type_name: str = Query(None, description='名称'),db: Session = Depends(get_db), user_id: int = Depends(valid_access_token)):
  182. query = db.query(ResourceProvisionWarehouseInfo)
  183. query = query.filter_by(del_flag='0')
  184. query = query.filter_by(status='1')
  185. query = query.order_by(ResourceProvisionWarehouseInfo.create_time.desc())
  186. lists = query.all()
  187. data = []
  188. for info in lists:
  189. data_info = {"id": info.warehouse_id,
  190. "label": info.warehouse_name,
  191. "isWarehouse": True}
  192. # material_list = warehouse_id_get_material_list(db,info.warehouse_id)
  193. query1 = db.query(ResourceProvisionWarehouseRoomInfo)
  194. query1 = query1.filter_by(warehouse=info.warehouse_id, del_flag='0')
  195. if room_name:
  196. query1 = query1.filter(ResourceProvisionWarehouseRoomInfo.room_name.like(f'%{room_name}%'))
  197. room_list= query1.all()
  198. if room_list:
  199. data_info['children'] = []
  200. for room in room_list:
  201. data_info['children'].append({"id": room.id,
  202. "label": room.room_name,
  203. "warehouse_id": info.warehouse_id,
  204. "warehouse_name":info.warehouse_name,
  205. "isWarehouse": False})
  206. data.append(data_info)
  207. return {
  208. "code": 200,
  209. "msg": "操作成功",
  210. "data": data
  211. }