#!/usr/bin/env python3 # -*- coding: utf-8 -*- from fastapi import APIRouter, Request, Depends, Query, HTTPException, status,WebSocket,WebSocketDisconnect from common.security import valid_access_token,valid_websocket_token from fastapi.responses import JSONResponse from sqlalchemy.orm import Session from sqlalchemy.sql import func from common.auth_user import * from sqlalchemy import text from pydantic import BaseModel from common.BigDataCenterAPI import * from database import get_db from typing import List from models import * from utils import * from utils.spatial import * from utils.ry_system_util import * from utils.resource_provision_util import * from common.websocketManager import * import json import pandas as pd import traceback router = APIRouter() @router.post("/create") async def create_pattern( user_id=Depends(valid_access_token), body = Depends(remove_xss_json), db: Session = Depends(get_db) ): try: room_id = body['room_id'] warehouse_info = warehouse_room_id_get_warehouse_room_info(db,room_id) warehouse_id = '' if warehouse_info: warehouse_id = warehouse_info.warehouse new_outbound = ResourceProvisionOutboundBasic( # id = new_guid(), warehouse_id=warehouse_id,#body['warehouse_id'], room_id= room_id, total_volume=body['total_volume'], total_weight=body['total_weight'], total_shipping_volume=body['total_shipping_volume'], total_shipping_weight=body['total_shipping_weight'], total_quantity=body['total_quantity'], shipping_time=body['shipping_time'], disaster_type=body['disaster_type'], dispatching_agency=body['dispatching_agency'], shipper_name=body['shipper_name'], shipper_mobile=body['shipper_mobile'], shipper_address=body['shipper_address'], shipper_remark=body['shipper_remark'], receiver_name=body['receiver_name'], receiver_mobile=body['receiver_mobile'], receiver_address=body['receiver_address'], create_by = user_id ) db.add(new_outbound) db.commit() new_outbound.outbound_number= f'{time.strftime("%Y%m%d", time.localtime())}0{str(new_outbound.id).zfill(7)}' filePath = f'/data/upload/mergefile/uploads/{body["filename"]}' movementData = pd.read_excel(filePath).to_dict(orient='records') status_1 = create_movement(db, movementData, new_outbound.outbound_number, 'O', user_id,warehouse_id,room_id) if status_1 != "成功": new_outbound.del_flag = '2' db.commit() return JSONResponse(status_code=500, content={"code": 200, "msg": status_1, "data": None}) return {"code": 200, "msg": "创建成功", "data": None} except Exception as e: traceback.print_exc() db.rollback() raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}") # @router.put("/update/{id}") # async def update_pattern( # id :str , # user_id=Depends(valid_access_token), # body=Depends(remove_xss_json), # db: Session = Depends(get_db) # ): # try: # info = warehouse_room_id_get_warehouse_room_info(db,id) # if not info: # return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse room not found"}) # info.room_name = body['room_name'] # info.warehouse = body['warehouse_id'] # info.room_area = body['room_area'] # info.available_area = body['available_area'] # info.height = body['height'] # info.room_volume = body['room_volume'] # info.available_volume = body['available_volume'] # info.storage_type = body['storage_type'] # info.level = body['level'] # info.storage_type_code = body['storage_type_code'] # info.last_inventory_time = body['last_inventory_time'] # info.update_by = user_id # db.commit() # return {"code": 200, "msg": "更新成功"} # except Exception as e: # traceback.print_exc() # raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}") @router.get("/info/{id}") async def get_pattern_info( id: str, user_id=Depends(valid_access_token), db: Session = Depends(get_db) ): try: info = outbound_id_get_outbound_info(db,id) if not info: return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse room not found"}) warehouse_info = warehouse_id_get_warehouse_info(db,info.warehouse_id) if warehouse_info: warehouse_name = warehouse_info.warehouse_name else: warehouse_name = None room_info = warehouse_room_id_get_warehouse_room_info(db, info.room_id) if room_info: room_name = room_info.room_name else: room_name = None data = { "id":info.id, "warehouse_id": info.warehouse_id, "warehouse_name": warehouse_name, "room_id": info.room_id, "room_name": room_name, "outbound_number": info.outbound_number, "total_volume": info.total_volume, "total_weight": info.total_weight, "total_shipping_volume": info.total_shipping_volume, "total_shipping_weight": info.total_shipping_weight, "total_quantity": info.total_quantity, "shipping_time": info.shipping_time, "disaster_type": info.disaster_type, "dispatching_agency": info.dispatching_agency, "shipper_name": info.shipper_name, "shipper_mobile": info.shipper_mobile, "shipper_address": info.shipper_address, "shipper_remark": info.shipper_remark, "receiver_name": info.receiver_name, "receiver_mobile": info.receiver_mobile, "receiver_address":info.receiver_address, "create_time":info.create_time} return {"code": 200, "msg": "获取成功", "data": data} except Exception as e: traceback.print_exc() raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}") @router.get("/list") async def get_pattern_list( # warehouse_id: str = Query(None, description='名称'), user_id=Depends(valid_access_token), page: int = Query(1, gt=0, description='页码'), pageSize: int = Query(100, gt=0, description='每页条目数量'), db: Session = Depends(get_db) ): try: query = db.query(ResourceProvisionOutboundBasic) query = query.filter_by(del_flag='0') # if warehouse_id: # query = query.filter(ResourceProvisionWarehouseInfo.warehouse_id==warehouse_id) total_items = query.count() # 排序 query = query.order_by(ResourceProvisionOutboundBasic.create_time.desc()) # 执行分页查询 lists = query.offset((page - 1) * pageSize).limit(pageSize).all() data = [] for info in lists: warehouse_info = warehouse_id_get_warehouse_info(db, info.warehouse_id) if warehouse_info: warehouse_name = warehouse_info.warehouse_name else: warehouse_name = None room_info = warehouse_room_id_get_warehouse_room_info(db, info.room_id) if room_info: room_name = room_info.room_name else: room_name = None data.append({ "id":info.id, "warehouse_id": info.warehouse_id, "warehouse_name": warehouse_name, "room_id": info.room_id, "room_name": room_name, "outbound_number": info.outbound_number, "total_volume": info.total_volume, "total_weight": info.total_weight, "total_shipping_volume": info.total_shipping_volume, "total_shipping_weight": info.total_shipping_weight, "total_quantity": info.total_quantity, "shipping_time": info.shipping_time, "disaster_type": info.disaster_type, "dispatching_agency": info.dispatching_agency, "shipper_name": info.shipper_name, "shipper_mobile": info.shipper_mobile, "shipper_address": info.shipper_address, "shipper_remark": info.shipper_remark, "receiver_name": info.receiver_name, "receiver_mobile": info.receiver_mobile, "receiver_address":info.receiver_address, "create_time":info.create_time}) return {"code": 200, "msg": "查询成功", "data": data, "total": total_items, "page": page, "pageSize": pageSize, "totalPages": (total_items + pageSize - 1) // pageSize } except Exception as e: traceback.print_exc() raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}") # @router.delete("/delete/{id}") # async def delete_pattern( # id: str, # db: Session = Depends(get_db) # ): # try: # # 检查图案是否存在 # info = warehouse_room_id_get_warehouse_room_info(db, id) # if not info: # return JSONResponse(status_code=404, content={"code": 404, "msg": "warehouse room not found"}) # info.del_flag='2' # db.commit() # return {"code": 200, "msg": "删除成功"} # except Exception as e: # traceback.print_exc() # raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")