#!/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_inbound = ResourceProvisionInboundBasic( # id = new_guid(), warehouse_id=warehouse_id, #body['warehouse_id'], purchase_order_number=body['purchase_order_number'], is_donation=body['is_donation'], transport_order_number=body['transport_order_number'], donator_phone=body['donator_phone'], donator_name=body['donator_name'], reviewer=body['reviewer'], enterprise_name=body['enterprise_name'], enterprise_code=body['enterprise_code'], grading_info=body['grading_info'], type=body['type'], supplier_name=body['supplier_name'], remark=body['remark'], supplier_code=body['supplier_code'], completion_time=body['completion_time'], planned_completion_time=body['planned_completion_time'], room_id=body['room_id'], # inbound_order_number=body['inbound_order_number'], create_by = user_id ) db.add(new_inbound) db.commit() new_inbound.inbound_order_number= f'{time.strftime("%Y%m%d", time.localtime())}1{str(new_inbound.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_inbound.inbound_order_number, 'I', user_id,warehouse_id,room_id) if status_1!="成功": new_inbound.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 = inbound_id_get_inbound_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, "purchase_order_number": info.purchase_order_number, "is_donation": info.is_donation, "transport_order_number": info.transport_order_number, "donator_phone": info.donator_phone, "donator_name": info.donator_name, "reviewer": info.reviewer, "grading_info": info.grading_info, "enterprise_name": info.enterprise_name, "enterprise_code": info.enterprise_code, "type": info.type, "supplier_name": info.supplier_name, "creation_time": info.creation_time, "planned_completion_time":info.planned_completion_time, "remark": info.remark, "supplier_code": info.supplier_code, "completion_time": info.completion_time, "inbound_order_number":info.inbound_order_number, "new_time":info.new_time, "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(ResourceProvisionInboundBasic) 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(ResourceProvisionInboundBasic.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, "purchase_order_number": info.purchase_order_number, "is_donation": info.is_donation, "transport_order_number": info.transport_order_number, "donator_phone": info.donator_phone, "donator_name": info.donator_name, "reviewer": info.reviewer, "grading_info": info.grading_info, "enterprise_name": info.enterprise_name, "enterprise_code": info.enterprise_code, "type": info.type, "supplier_name": info.supplier_name, "creation_time": info.creation_time, "planned_completion_time":info.planned_completion_time, "remark": info.remark, "supplier_code": info.supplier_code, "completion_time": info.completion_time, "inbound_order_number":info.inbound_order_number, "new_time":info.new_time, "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)}")