#!/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 traceback import xlrd import os # 目录在文档上传接口写死 UPLOAD_mergefile_PATH = '/data/upload/mergefile' 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: new_type = ResourceProvisionWarehouseRoomInfo( id = new_guid(), room_name=body['room_name'], warehouse=body['warehouse_id'], room_area=body['room_area'], available_area=body['available_area'], height=body['height'], room_volume=body['room_volume'], available_volume=body['available_volume'], storage_type=body['storage_type'], level=body['level'], storage_type_code=body['storage_type_code'], last_inventory_time=body['last_inventory_time'], create_by = user_id ) db.add(new_type) db.commit() return {"code": 200, "msg": "创建成功", "data": None} except Exception as e: traceback.print_exc() 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 = 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"}) warehouse_info = warehouse_id_get_warehouse_info(db,info.warehouse) print(info.warehouse,warehouse_info) if warehouse_info: warehouse_name = warehouse_info.warehouse_name else: warehouse_name = None data = { "id":info.id, "warehouse_id": info.warehouse, "warehouse_name": warehouse_name, "room_name": info.room_name, "room_area": info.room_area, "available_area": info.available_area, "height": info.height, "room_volume": info.room_volume, "available_volume": info.available_volume, "storage_type": info.storage_type, "level": info.level, "storage_type_code": info.storage_type_code, "last_inventory_time": info.last_inventory_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( user_id=Depends(valid_access_token), warehouse_id: str = Query(None, description='名称'), page: int = Query(1, gt=0, description='页码'), pageSize: int = Query(100, gt=0, description='每页条目数量'), db: Session = Depends(get_db) ): try: query = db.query(ResourceProvisionWarehouseRoomInfo) 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(ResourceProvisionWarehouseRoomInfo.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) if warehouse_info: warehouse_name = warehouse_info.warehouse_name else: warehouse_name = None data.append({ "id":info.id, "warehouse_id": info.warehouse, "warehouse_name": warehouse_name, "room_name": info.room_name, "room_area": info.room_area, "available_area": info.available_area, "height": info.height, "room_volume": info.room_volume, "available_volume": info.available_volume, "storage_type": info.storage_type, "level": info.level, "storage_type_code": info.storage_type_code, "last_inventory_time": info.last_inventory_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, user_id=Depends(valid_access_token), 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)}") @router.get('/treeselect') 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)): query = db.query(ResourceProvisionWarehouseInfo) query = query.filter_by(del_flag='0') query = query.filter_by(status='1') query = query.order_by(ResourceProvisionWarehouseInfo.create_time.desc()) lists = query.all() data = [] for info in lists: data_info = {"id": info.warehouse_id, "label": info.warehouse_name, "isWarehouse": True} # material_list = warehouse_id_get_material_list(db,info.warehouse_id) query1 = db.query(ResourceProvisionWarehouseRoomInfo) query1 = query1.filter_by(warehouse=info.warehouse_id, del_flag='0') if room_name: query1 = query1.filter(ResourceProvisionWarehouseRoomInfo.room_name.like(f'%{room_name}%')) room_list= query1.all() if room_list: data_info['children'] = [] for room in room_list: data_info['children'].append({"id": room.id, "label": room.room_name, "warehouse_id": info.warehouse_id, "warehouse_name":info.warehouse_name, "isWarehouse": False}) data.append(data_info) return { "code": 200, "msg": "操作成功", "data": data } # 导入 @router.post('/import') async def import_doc( request: Request, db: Session = Depends(get_db), body = Depends(remove_xss_json), user_id = Depends(valid_access_token) ): # print(body) try: filename = body['filename'] if len(filename) == 0: raise Exception() file = filename[0] url = file['url'] file_path = f"{UPLOAD_mergefile_PATH}/uploads/{url}" file_path = os.path.abspath(file_path) print(file_path) book = xlrd.open_workbook(file_path) sheet = book.sheet_by_index(0) data = [] ''' for i in range(9, sheet.nrows): # 预案名称 plan_name = sheet.cell(i, 0).value # 一级目录 title1 = sheet.cell(i, 1).value # 二级目录 title2 = sheet.cell(i, 2).value # 三级目录 title3 = sheet.cell(i, 3).value # 正文 content = sheet.cell(i, 4).value if len(plan_name) < 1 and len(title1) < 1 and len(title2) < 1 and len(title3) < 1 and len(content) < 1 : break data.append({ 'plan_name': plan_name, 'title1': title1, 'title2': title2, 'title3': title3, 'content': content, }) if len(data) > 0: db.query(EmergencyDoc).filter(EmergencyDoc.plan_id == plan_id).delete() db.commit() title1 = '' content = '' docs = [] for n in data: if n['title1'] != '': if len(docs) > 0: add_doc_1(db, title1, content, docs, plan_id) docs = [] title1 = n['title1'] content = n['content'] if n['title2'] != '': docs.append(n) continue docs.append(n) if len(docs) > 0: add_doc_1(db, title1, content, docs, plan_id) ''' return { 'code': 200, 'msg': '导入成功' } except Exception: traceback.print_exc() return { 'code': 500, 'msg': '导入发生异常' }