warehouse_movement.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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.get("/list")
  24. async def get_pattern_list(
  25. user_id=Depends(valid_access_token),
  26. material_id: str = Query(None, description='物资id'),
  27. io_number: str = Query(None, description='出入库单号'),
  28. io_flag: str = Query(None, description='出入库标识'),
  29. page: int = Query(1, gt=0, description='页码'),
  30. pageSize: int = Query(None, gt=0, description='每页条目数量'),
  31. db: Session = Depends(get_db)
  32. ):
  33. try:
  34. query = db.query(ResourceProvisionWarehouseMovement)
  35. query = query.filter_by(del_flag='0')
  36. if material_id:
  37. query = query.filter(ResourceProvisionWarehouseMovement.material_id.like(f'%{material_id}%'))
  38. if io_number:
  39. query = query.filter(ResourceProvisionWarehouseMovement.io_number.like(f'%{io_number}%'))
  40. if io_flag:
  41. query = query.filter(ResourceProvisionWarehouseMovement.io_flag==io_flag)
  42. total_items = query.count()
  43. if pageSize is None:
  44. pageSize = total_items
  45. if total_items==0:
  46. pageSize = 1
  47. # 排序
  48. query = query.order_by(ResourceProvisionWarehouseMovement.create_time.desc())
  49. # 执行分页查询
  50. lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
  51. data = [ ]
  52. for info in lists:
  53. warehouse_info = warehouse_id_get_warehouse_info(db,info.warehouse_id)
  54. if warehouse_info:
  55. warehouse_name = warehouse_info.warehouse_name
  56. else:
  57. warehouse_name = None
  58. room_info = warehouse_room_id_get_warehouse_room_info(db, info.room_id)
  59. if room_info:
  60. room_name = room_info.room_name
  61. else:
  62. room_name = None
  63. material_info = material_id_get_material_info(db,info.material_id)
  64. material_name = ''
  65. if material_info:
  66. material_name = material_info.material_name
  67. data.append({"id": info.id,
  68. "product_info": f"ID: {info.material_id}\n{material_name}",
  69. "warehouse_id": info.warehouse_id,
  70. "warehouse_name": warehouse_name,
  71. "room_id": info.room_id,
  72. "room_name": room_name,
  73. "io_number": info.io_number,
  74. "io_flag": info.io_flag,
  75. "changed_stock": info.changed_stock,
  76. "remaining_stock": info.remaining_stock,
  77. "create_time":info.create_time})
  78. return {"code": 200, "msg": "查询成功", "data": data,
  79. "total": total_items,
  80. "page": page,
  81. "pageSize": pageSize,
  82. "totalPages": (total_items + pageSize - 1) // pageSize
  83. }
  84. except Exception as e:
  85. traceback.print_exc()
  86. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")