瀏覽代碼

241206-1代码。

baoyubo 7 月之前
父節點
當前提交
90c7fc1cd9

+ 2 - 0
routers/api/resourceProvison/MaterialReserveManagement/__init__.py

@@ -7,6 +7,7 @@ from . import material_type
 from . import warehouse
 from . import warehouse_root
 from . import material
+from . import m_count
 
 router = APIRouter()
 
@@ -15,3 +16,4 @@ router.include_router(material_type.router, prefix="/type", tags=["物资种类"
 router.include_router(warehouse.router, prefix="/warehouse", tags=["仓库"])
 router.include_router(warehouse_root.router, prefix="/warehouse_root", tags=["仓库库房"])
 router.include_router(material.router, prefix="/material", tags=["物资"])
+router.include_router(m_count.router, prefix="/count", tags=["物资统计"])

+ 170 - 0
routers/api/resourceProvison/MaterialReserveManagement/m_count.py

@@ -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)}")

+ 34 - 1
routers/api/resourceProvison/MaterialReserveManagement/material_type.py

@@ -26,7 +26,13 @@ def type_id_get_material_type_info(db,id):
     query = db.query(ResourceProvisionMaterialType)
     query = query.filter_by(id = id,del_flag = '0')
     return query.first()
-
+def parent_id_get_type_info(db,parent_id):
+    query = db.query(ResourceProvisionMaterialType)
+    query = query.filter(ResourceProvisionMaterialType.del_flag != '2')
+    query = query.filter(ResourceProvisionMaterialType.parent_id == parent_id)
+    query = query.filter(ResourceProvisionMaterialType.display_status == '1')
+    query = query.order_by(ResourceProvisionMaterialType.sort_order.asc())
+    return query.all()
 
 
 @router.post("/create")
@@ -151,3 +157,30 @@ async def delete_pattern(
     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,db: Session = Depends(get_db), user_id: int = Depends(valid_access_token)):
+    def build_type_tree(menus, parent_dept):
+        type_tree = []
+        for type_info in menus:
+            type_i = {
+                "id": type_info.id,
+                "label": type_info.material_category_name,
+                "level":type_info.material_category_level,
+                "parentId": type_info.parent_id,
+                "weight": type_info.sort_order
+            }
+            # print(dept_info.dept_id)
+            children = parent_id_get_type_info(db, type_info.id)
+            if len(children) > 0:
+                children_types = build_type_tree(children, type_i)
+                type_i["children"] = children_types
+            type_tree.append(type_i)
+        return type_tree
+
+    result = build_type_tree(parent_id_get_type_info(db, 0), None)
+    return {
+        "code": 200,
+        "msg": "操作成功",
+        "data": result
+    }

+ 12 - 6
routers/api/resourceProvison/MaterialReserveManagement/warehouse.py

@@ -46,7 +46,7 @@ async def create_pattern(
             type=body['type'],
             level=body['level'],
             storage_dept_id=body['storage_dept_id'],
-            storage_dept_name=body['storage_dept_name'],
+            storage_dept_name='', #body['storage_dept_name']
             area_name=body['area_name'],
             longitude=body['longitude'],
             latitude=body['latitude'],
@@ -105,6 +105,7 @@ async def get_pattern_info(
         info = warehouse_id_get_warehouse_info(db,id)
         if not info:
             return JSONResponse(status_code=404,content={"code":404,"msg":"warehouse not found"})
+        dept_info = dept_id_get_dept_info(db,info.storage_dept_id)
         data = {"warehouse_id": info.warehouse_id,
                 "warehouse_name": info.warehouse_name,
                 "status": info.status,
@@ -115,7 +116,7 @@ async def get_pattern_info(
                 "type": info.type,
                 "level": info.level,
                 "storage_dept_id": info.storage_dept_id,
-                "storage_dept_name": info.storage_dept_name,
+                "storage_dept_name": dept_info.dept_name,
                 "area_name": info.area_name,
                 "longitude": info.longitude,
                 "latitude": info.latitude,
@@ -131,7 +132,7 @@ async def get_pattern_info(
 async def get_pattern_list(
     # name: str = Query(None, description='名称'),
     page: int = Query(1, gt=0, description='页码'),
-    pageSize: int = Query(100, gt=0, description='每页条目数量'),
+    pageSize: int = Query(None, gt=0, description='每页条目数量'),
     db: Session = Depends(get_db)
 ):
     try:
@@ -140,11 +141,16 @@ async def get_pattern_list(
         # if name:
         #     query = query.filter(ResourceProvisionWarehouseInfo.material_category_name.like(f'%{name}%'))
         total_items = query.count()
+        if pageSize is None:
+            pageSize=total_items
         # 排序
         query = query.order_by(ResourceProvisionWarehouseInfo.create_time.desc())
         # 执行分页查询
         lists = query.offset((page - 1) * pageSize).limit(pageSize).all()
-        data = [{"warehouse_id": info.warehouse_id,
+        data = [ ]
+        for info in lists:
+            dept_info = dept_id_get_dept_info(db, info.storage_dept_id)
+            data.append({"warehouse_id": info.warehouse_id,
                 "warehouse_name": info.warehouse_name,
                 "status": info.status,
                 "contact_person": info.contact_person,
@@ -154,13 +160,13 @@ async def get_pattern_list(
                 "type": info.type,
                 "level": info.level,
                 "storage_dept_id": info.storage_dept_id,
-                "storage_dept_name": info.storage_dept_name,
+                "storage_dept_name": dept_info.dept_name,
                 "area_name": info.area_name,
                 "longitude": info.longitude,
                 "latitude": info.latitude,
                 "create_by": info.create_by,
                 "area":info.area,
-                "create_time":info.create_time} for info in lists]
+                "create_time":info.create_time})
         return {"code": 200, "msg": "查询成功", "data": data,
                 "total": total_items,
                 "page": page,