123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- #!/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 common.websocketManager import *
- import json
- import traceback
- router = APIRouter()
- def count_warehouse(db):
- query = db.query(ResourceProvisionWarehouseInfo)
- query = query.filter_by(del_flag = '0')
- return query.count()
- def count_material(db):
- query = db.query(func.sum(ResourceProvisionMaterialInfo.inventory).label('warehouse_num'))
- query = query.filter_by(del_flag = '0')
- result = query.first()
- warehouse_num = result.warehouse_num if result else 0
- return warehouse_num
- def count_area_material(db):
- query = db.query(
- ResourceProvisionWarehouseInfo.area_name.label('name'),
- func.sum(ResourceProvisionMaterialInfo.inventory).label('value')
- ).select_from(
- ResourceProvisionMaterialInfo
- ).join(
- ResourceProvisionWarehouseInfo,
- ResourceProvisionMaterialInfo.warehouse_id == ResourceProvisionWarehouseInfo.warehouse_id
- ).filter(
- ResourceProvisionMaterialInfo.del_flag == '0',
- ResourceProvisionWarehouseInfo.del_flag == '0'
- ).group_by(
- ResourceProvisionWarehouseInfo.area_name
- )
- # 执行查询并获取结果
- results = query.all()
- data = {"茂南区":0,"电白区":0,"高州市":0,"化州市":0,"信宜市":0,"高新区":0,"滨海新区":0}
- # 打印结果
- for result in results:
- data[result.name]=result.value
- return [{"name": key, "value": value} for key, value in data.items()]
- def count_warehouse_material(db):
- query = db.query(
- ResourceProvisionWarehouseInfo.warehouse_name.label('name'),
- func.sum(ResourceProvisionMaterialInfo.inventory).label('value')
- ).select_from(
- ResourceProvisionMaterialInfo
- ).join(
- ResourceProvisionWarehouseInfo,
- ResourceProvisionMaterialInfo.warehouse_id == ResourceProvisionWarehouseInfo.warehouse_id
- ).filter(
- ResourceProvisionMaterialInfo.del_flag == '0',
- ResourceProvisionWarehouseInfo.del_flag == '0'
- ).group_by(
- ResourceProvisionWarehouseInfo.warehouse_name
- )
- # 执行查询并获取结果
- results = query.all()
- data = []
- # 打印结果
- for result in results:
- data.append({"name":result.name,"value":result.value})
- return data
- def count_type_material(db):
- query = db.query(
- ResourceProvisionMaterialType.material_category_name.label('name'),
- func.sum(ResourceProvisionMaterialInfo.inventory).label('value')
- ).select_from(
- ResourceProvisionMaterialInfo
- ).join(
- ResourceProvisionMaterialType,
- ResourceProvisionMaterialInfo.material_type == ResourceProvisionMaterialType.id
- ).filter(
- ResourceProvisionMaterialInfo.del_flag == '0',
- ResourceProvisionMaterialType.del_flag == '0'
- ).group_by(
- ResourceProvisionMaterialType.material_category_name
- )
- # 执行查询并获取结果
- results = query.all()
- data = []
- # 打印结果
- for result in results:
- data.append({"name":result.name,"value":result.value})
- return data
- def count_room_material(db,warehouseId):
- room_list = db.query(ResourceProvisionWarehouseRoomInfo)\
- .filter(ResourceProvisionWarehouseRoomInfo.del_flag == '0',
- ResourceProvisionWarehouseRoomInfo.warehouse == warehouseId).all()
- data = []
- for room in room_list:
- inventory = db.query(func.sum(ResourceProvisionMaterialInfo.inventory).label('value'))\
- .filter( ResourceProvisionMaterialInfo.del_flag == '0',
- ResourceProvisionMaterialInfo.room_id ==room.id).first()
- value = 0
- if inventory.value:
- value = inventory.value
- data.append({"name":room.room_name,"value":value})
- # query = db.query(
- # ResourceProvisionWarehouseRoomInfo.room_name.label('name'),
- # func.coalesce(func.sum(ResourceProvisionMaterialInfo.inventory), 0).label('value')
- # ).select_from(
- # ResourceProvisionWarehouseRoomInfo
- # ).outerjoin(
- # ResourceProvisionMaterialInfo,
- # ResourceProvisionMaterialInfo.room_id == ResourceProvisionWarehouseRoomInfo.id
- # ).filter(
- # ResourceProvisionMaterialInfo.del_flag == '0',
- # ResourceProvisionWarehouseRoomInfo.del_flag == '0',
- # ResourceProvisionWarehouseRoomInfo.warehouse == warehouseId
- # ).group_by(
- # ResourceProvisionWarehouseRoomInfo.room_name
- # )
- # 执行查询并获取结果
- # print(str(query))
- # results = query.all()
- # 打印结果
- # for result in results:
- # data.append({"name":result.name,"value":result.value})
- return data
- @router.get("/data")
- async def get_count_info(
- db: Session = Depends(get_db)
- ):
- try:
- data = {"warehouse_num": count_warehouse(db),
- "material_num": count_material(db),
- "area_material_count": count_area_material(db),
- "warehouse_material_count": count_warehouse_material(db),
- "type_material_count": count_type_material(db)}
- 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("/count_room_material")
- async def get_count_info(
- warehouseId:str = Query(None),
- db: Session = Depends(get_db)
- ):
- try:
- data = count_room_material(db,warehouseId)
- 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)}")
|