SCLP
This commit is contained in:
101
SCLP/routers/space_manage.py
Normal file
101
SCLP/routers/space_manage.py
Normal file
@@ -0,0 +1,101 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
@Author : xuxingchen
|
||||
@Contact : xuxingchen@sinochem.com
|
||||
@Desc : 通行空间映射界面控制逻辑
|
||||
"""
|
||||
import os.path
|
||||
from io import BytesIO
|
||||
|
||||
from fastapi import APIRouter, Request, Header, BackgroundTasks, UploadFile, File
|
||||
from fastapi.responses import FileResponse
|
||||
|
||||
from models.brands import BrandsTable, UpdateBrand
|
||||
from models.spaces import SpacesTable
|
||||
from routers.login import authenticate_token
|
||||
from utils import logger
|
||||
from utils.logger import TOKEN_ERROR
|
||||
from utils.database import get_table_handler
|
||||
from utils.misc import InvalidException, valid_xls
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post("/updateSubSystemPlatformName", summary="更新当前使用的可视对讲厂家")
|
||||
async def update_sub_system_platform_name(request: Request, item: UpdateBrand, token: str = Header(...)):
|
||||
"""更新当前使用的可视对讲厂家"""
|
||||
if not authenticate_token(token):
|
||||
raise InvalidException(TOKEN_ERROR)
|
||||
th = get_table_handler()
|
||||
resp = BrandsTable.update_checked_factory(th, item.name)
|
||||
logger.Logger.debug(f"{request.url.path} {resp}")
|
||||
return resp
|
||||
|
||||
|
||||
@router.get("/getSubSystemPlatformName", summary="查询当前使用的可视对讲厂家")
|
||||
async def get_sub_system_platform_name(request: Request, token: str = Header(...)):
|
||||
"""获取当前启用的可视对讲厂家"""
|
||||
if not authenticate_token(token):
|
||||
raise InvalidException(TOKEN_ERROR)
|
||||
th = get_table_handler()
|
||||
resp = BrandsTable.get_checked_factory(th)
|
||||
logger.Logger.debug(f"{request.url.path} {resp}")
|
||||
return resp
|
||||
|
||||
|
||||
@router.get("/exportAiotPlatformData", summary="导出AIOT平台空间数据")
|
||||
async def export_aiot_platform_data(request: Request, background_tasks: BackgroundTasks, token: str = Header(...)):
|
||||
"""导出AIOT平台空间数据"""
|
||||
if not authenticate_token(token):
|
||||
raise InvalidException(TOKEN_ERROR)
|
||||
th = get_table_handler()
|
||||
file_path = SpacesTable.get_aiot_platform_data(th)
|
||||
background_tasks.add_task(os.remove, file_path)
|
||||
logger.Logger.debug(f"{request.url.path} 完成AIOT平台空间数据导出")
|
||||
return FileResponse(path=file_path,
|
||||
filename=os.path.basename(file_path),
|
||||
media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
||||
|
||||
|
||||
@router.get("/exportSubSystemData", summary="导出子系统空间结构数据表")
|
||||
async def export_aiot_platform_data(request: Request, background_tasks: BackgroundTasks, token: str = Header(...)):
|
||||
"""导出子系统空间结构数据表"""
|
||||
if not authenticate_token(token):
|
||||
raise InvalidException(TOKEN_ERROR)
|
||||
th = get_table_handler()
|
||||
file_path = SpacesTable.get_sub_system_data(th)
|
||||
background_tasks.add_task(os.remove, file_path)
|
||||
logger.Logger.debug(f"{request.url.path} 完成子系统空间数据导出")
|
||||
return FileResponse(path=file_path,
|
||||
filename=os.path.basename(file_path),
|
||||
media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
||||
|
||||
|
||||
@router.post("/importIdMapData", summary="导入空间映射表")
|
||||
async def import_id_map_data(request: Request,
|
||||
xls_file: UploadFile = File(...),
|
||||
token: str = Header(...)):
|
||||
"""接收空间映射表xls表格上传、校验并更新对应映射信息"""
|
||||
if not authenticate_token(token):
|
||||
raise InvalidException(TOKEN_ERROR)
|
||||
# 检查文件类型是否为xls
|
||||
if xls_file.content_type not in ["application/vnd.ms-excel",
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]:
|
||||
resp = {"status": False, "message": "仅支持上传xls文件"}
|
||||
else:
|
||||
file_content = await xls_file.read()
|
||||
max_size_mb = 10 # 设置最大允许的文件大小为 10MB
|
||||
if xls_file.file.seek(0, os.SEEK_END) > max_size_mb * 1024 * 1024:
|
||||
resp = {"status": False, "message": f"文件大小不得超过 {max_size_mb}MB"}
|
||||
else:
|
||||
# 解析xls,校验数据格式是否符合标准
|
||||
required_columns = ["房屋id", "子系统id", "子系统空间名称"]
|
||||
_callback, message, data = valid_xls(BytesIO(file_content), required_columns)
|
||||
if _callback:
|
||||
th = get_table_handler()
|
||||
SpacesTable.update(th, data)
|
||||
resp = {"status": True}
|
||||
else:
|
||||
raise InvalidException(message)
|
||||
logger.Logger.debug(f"{request.url.path} {resp}")
|
||||
return resp
|
||||
Reference in New Issue
Block a user