m_count.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, Query, HTTPException, status,WebSocket,WebSocketDisconnect
  4. from common.security import valid_access_token,valid_websocket_token
  5. from fastapi.responses import JSONResponse
  6. from sqlalchemy.orm import Session
  7. from sqlalchemy.sql import func
  8. from common.auth_user import *
  9. from sqlalchemy import text
  10. from pydantic import BaseModel
  11. from common.BigDataCenterAPI import *
  12. from database import get_db
  13. from typing import List
  14. from models import *
  15. from utils import *
  16. from utils.spatial import *
  17. from utils.ry_system_util import *
  18. from common.websocketManager import *
  19. import json
  20. import traceback
  21. router = APIRouter()
  22. def count_warehouse(db):
  23. query = db.query(ResourceProvisionWarehouseInfo)
  24. query = query.filter_by(del_flag = '0')
  25. return query.count()
  26. def count_material(db):
  27. query = db.query(func.sum(ResourceProvisionMaterialInfo.inventory).label('warehouse_num'))
  28. query = query.filter_by(del_flag = '0')
  29. result = query.first()
  30. warehouse_num = result.warehouse_num if result else 0
  31. return warehouse_num
  32. def count_area_material(db):
  33. query = db.query(
  34. ResourceProvisionWarehouseInfo.area_name.label('name'),
  35. func.sum(ResourceProvisionMaterialInfo.inventory).label('value')
  36. ).select_from(
  37. ResourceProvisionMaterialInfo
  38. ).join(
  39. ResourceProvisionWarehouseInfo,
  40. ResourceProvisionMaterialInfo.warehouse_id == ResourceProvisionWarehouseInfo.warehouse_id
  41. ).filter(
  42. ResourceProvisionMaterialInfo.del_flag == '0',
  43. ResourceProvisionWarehouseInfo.del_flag == '0'
  44. ).group_by(
  45. ResourceProvisionWarehouseInfo.area_name
  46. )
  47. # 执行查询并获取结果
  48. results = query.all()
  49. data = {"茂南区":0,"电白区":0,"高州市":0,"化州市":0,"信宜市":0,"高新区":0,"滨海新区":0}
  50. # 打印结果
  51. for result in results:
  52. data[result.name]=result.value
  53. return [{"name": key, "value": value} for key, value in data.items()]
  54. def count_warehouse_material(db):
  55. query = db.query(
  56. ResourceProvisionWarehouseInfo.warehouse_name.label('name'),
  57. func.sum(ResourceProvisionMaterialInfo.inventory).label('value')
  58. ).select_from(
  59. ResourceProvisionMaterialInfo
  60. ).join(
  61. ResourceProvisionWarehouseInfo,
  62. ResourceProvisionMaterialInfo.warehouse_id == ResourceProvisionWarehouseInfo.warehouse_id
  63. ).filter(
  64. ResourceProvisionMaterialInfo.del_flag == '0',
  65. ResourceProvisionWarehouseInfo.del_flag == '0'
  66. ).group_by(
  67. ResourceProvisionWarehouseInfo.warehouse_name
  68. )
  69. # 执行查询并获取结果
  70. results = query.all()
  71. data = []
  72. # 打印结果
  73. for result in results:
  74. data.append({"name":result.name,"value":result.value})
  75. return data
  76. def count_type_material(db):
  77. query = db.query(
  78. ResourceProvisionMaterialType.material_category_name.label('name'),
  79. func.sum(ResourceProvisionMaterialInfo.inventory).label('value')
  80. ).select_from(
  81. ResourceProvisionMaterialInfo
  82. ).join(
  83. ResourceProvisionMaterialType,
  84. ResourceProvisionMaterialInfo.material_type == ResourceProvisionMaterialType.id
  85. ).filter(
  86. ResourceProvisionMaterialInfo.del_flag == '0',
  87. ResourceProvisionMaterialType.del_flag == '0'
  88. ).group_by(
  89. ResourceProvisionMaterialType.material_category_name
  90. )
  91. # 执行查询并获取结果
  92. results = query.all()
  93. data = []
  94. # 打印结果
  95. for result in results:
  96. data.append({"name":result.name,"value":result.value})
  97. return data
  98. def count_room_material(db,warehouseId):
  99. room_list = db.query(ResourceProvisionWarehouseRoomInfo)\
  100. .filter(ResourceProvisionWarehouseRoomInfo.del_flag == '0',
  101. ResourceProvisionWarehouseRoomInfo.warehouse == warehouseId).all()
  102. data = []
  103. for room in room_list:
  104. inventory = db.query(func.sum(ResourceProvisionMaterialInfo.inventory).label('value'))\
  105. .filter( ResourceProvisionMaterialInfo.del_flag == '0',
  106. ResourceProvisionMaterialInfo.room_id ==room.id).first()
  107. value = 0
  108. if inventory.value:
  109. value = inventory.value
  110. data.append({"name":room.room_name,"value":value})
  111. # query = db.query(
  112. # ResourceProvisionWarehouseRoomInfo.room_name.label('name'),
  113. # func.coalesce(func.sum(ResourceProvisionMaterialInfo.inventory), 0).label('value')
  114. # ).select_from(
  115. # ResourceProvisionWarehouseRoomInfo
  116. # ).outerjoin(
  117. # ResourceProvisionMaterialInfo,
  118. # ResourceProvisionMaterialInfo.room_id == ResourceProvisionWarehouseRoomInfo.id
  119. # ).filter(
  120. # ResourceProvisionMaterialInfo.del_flag == '0',
  121. # ResourceProvisionWarehouseRoomInfo.del_flag == '0',
  122. # ResourceProvisionWarehouseRoomInfo.warehouse == warehouseId
  123. # ).group_by(
  124. # ResourceProvisionWarehouseRoomInfo.room_name
  125. # )
  126. # 执行查询并获取结果
  127. # print(str(query))
  128. # results = query.all()
  129. # 打印结果
  130. # for result in results:
  131. # data.append({"name":result.name,"value":result.value})
  132. return data
  133. @router.get("/data")
  134. async def get_count_info(
  135. db: Session = Depends(get_db)
  136. ):
  137. try:
  138. data = {"warehouse_num": count_warehouse(db),
  139. "material_num": count_material(db),
  140. "area_material_count": count_area_material(db),
  141. "warehouse_material_count": count_warehouse_material(db),
  142. "type_material_count": count_type_material(db)}
  143. return {"code": 200, "msg": "获取成功", "data": data}
  144. except Exception as e:
  145. traceback.print_exc()
  146. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  147. @router.get("/count_room_material")
  148. async def get_count_info(
  149. warehouseId:str = Query(None),
  150. db: Session = Depends(get_db)
  151. ):
  152. try:
  153. data = count_room_material(db,warehouseId)
  154. return {"code": 200, "msg": "获取成功", "data": data}
  155. except Exception as e:
  156. traceback.print_exc()
  157. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")