This commit is contained in:
2024-10-24 09:23:39 +08:00
parent 641c34b1b3
commit 16c005556f
36 changed files with 7780 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
# -*- coding:utf-8 -*-
"""
@Author : xuxingchen
@Contact : xuxingchen@sinochem.com
@Desc : 房产信息控制逻辑
"""
from typing import Optional
from fastapi import APIRouter, Header, Request, Query
from pydantic import BaseModel, field_validator, Field
from routers.login import authenticate_token
from utils import logger
from utils.logger import TOKEN_ERROR
from utils.database import get_table_handler
from models.houses import HousesTable
from utils.misc import InvalidException
router = APIRouter()
class ListsReq(BaseModel):
project: str = Field(description="必填项,用于限定项目编号")
area: Optional[str] = Field(None, description="可选项,用于限定区域")
building: Optional[str] = Field(None, description="可选项,用于限定楼栋")
unit: Optional[str] = Field(None, description="可选项,用于限定单元")
floor: Optional[str] = Field(None, description="可选项,用于限定楼层")
target: str = Field(description="必填项用于控制输出结果取值范围area, building, unit, floor, room")
def dict(self, *args, **kwargs):
_dict = self.__dict__.copy()
for key, value in self.__dict__.items():
if value is None:
_dict.pop(key)
_dict.pop("target")
return _dict
@field_validator("target")
def validate_target(cls, value):
if value not in ["area", "building", "unit", "floor", "room"]:
raise InvalidException("请提供正确的请求target [area, building, unit, floor, room]")
else:
return value
@router.get("/projects", summary="获取所有项目列表")
async def get_projects_list(request: Request, token: str = Header(...)):
"""获取项目列表"""
if not authenticate_token(token):
raise InvalidException(TOKEN_ERROR)
th = get_table_handler()
projects_list = HousesTable.get_items_by_dynamic_item(th, "project", {})
resp = {"projects": projects_list}
logger.Logger.debug(f"{request.url.path} {resp}")
return resp
@router.post("/project/lists", summary="动态获取房产信息")
async def get_items(request: Request,
item: ListsReq,
token: str = Header(...)):
"""根据请求获取列表"""
if not authenticate_token(token):
raise InvalidException(TOKEN_ERROR)
th = get_table_handler()
item_list = HousesTable.get_items_by_dynamic_item(th, item.target, item.dict())
resp = {f"{item.target.split('_')[0]}s": item_list}
logger.Logger.debug(f"{request.url.path} {resp}")
return resp
@router.get("/getHouseholderCount", summary="获取房产住户数量")
async def get_householder_count(request: Request,
room_id: str = Query(...),
token: str = Header(...)):
"""根据请求获取对应房屋中当前住户数量"""
if not authenticate_token(token):
raise InvalidException(TOKEN_ERROR)
th = get_table_handler()
count = HousesTable.get_householder_count(th, room_id)
if count is not None:
resp = {"count": count}
else:
raise InvalidException("room_id 不存在")
logger.Logger.debug(f"{request.url.path} {resp}")
return resp