|
@@ -0,0 +1,170 @@
|
|
|
+#!/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)}")
|