⚡新增 ISIM 电费查缴系统
This commit is contained in:
140
router/isim/model.py
Normal file
140
router/isim/model.py
Normal file
@@ -0,0 +1,140 @@
|
||||
from typing import List, Optional
|
||||
from pydantic import BaseModel, Field
|
||||
from provider.aufe.isim.model import (
|
||||
BuildingInfo,
|
||||
FloorInfo,
|
||||
RoomInfo,
|
||||
RoomBindingInfo,
|
||||
ElectricityInfo,
|
||||
PaymentInfo
|
||||
)
|
||||
from router.common_model import BaseResponse
|
||||
|
||||
|
||||
# ==================== 请求模型 ====================
|
||||
|
||||
class AuthmeRequest(BaseModel):
|
||||
"""认证请求基类"""
|
||||
authme_token: str = Field(..., description="认证令牌")
|
||||
|
||||
|
||||
class SetBuildingRequest(AuthmeRequest):
|
||||
"""设置楼栋请求"""
|
||||
building_code: str = Field(..., description="楼栋代码")
|
||||
|
||||
|
||||
class SetFloorRequest(AuthmeRequest):
|
||||
"""设置楼层请求"""
|
||||
floor_code: str = Field(..., description="楼层代码")
|
||||
|
||||
|
||||
class SetRoomRequest(AuthmeRequest):
|
||||
"""设置房间请求"""
|
||||
building_code: str = Field(..., description="楼栋代码")
|
||||
floor_code: str = Field(..., description="楼层代码")
|
||||
room_code: str = Field(..., description="房间代码")
|
||||
|
||||
|
||||
# ==================== 响应模型 ====================
|
||||
|
||||
class BuildingListResponse(BaseResponse):
|
||||
"""楼栋列表响应"""
|
||||
data: Optional[List[BuildingInfo]] = Field(default=None, description="楼栋信息列表")
|
||||
|
||||
@classmethod
|
||||
def from_data(cls, data: List[BuildingInfo], success_message: str, error_message: str):
|
||||
"""根据数据创建响应"""
|
||||
if data and len(data) > 0:
|
||||
# 检查是否是错误数据(第一个楼栋名称为"请求失败")
|
||||
if data[0].name == "请求失败":
|
||||
return cls.error(message=error_message, code=500, data=None)
|
||||
else:
|
||||
return cls.success(data=data, message=success_message)
|
||||
else:
|
||||
return cls.error(message=error_message, code=500, data=None)
|
||||
|
||||
|
||||
class FloorListResponse(BaseResponse):
|
||||
"""楼层列表响应"""
|
||||
data: Optional[List[FloorInfo]] = Field(default=None, description="楼层信息列表")
|
||||
|
||||
@classmethod
|
||||
def from_data(cls, data: List[FloorInfo], success_message: str, error_message: str):
|
||||
"""根据数据创建响应"""
|
||||
if data and len(data) > 0:
|
||||
return cls.success(data=data, message=success_message)
|
||||
else:
|
||||
return cls.error(message=error_message, code=500, data=None)
|
||||
|
||||
|
||||
class RoomListResponse(BaseResponse):
|
||||
"""房间列表响应"""
|
||||
data: Optional[List[RoomInfo]] = Field(default=None, description="房间信息列表")
|
||||
|
||||
@classmethod
|
||||
def from_data(cls, data: List[RoomInfo], success_message: str, error_message: str):
|
||||
"""根据数据创建响应"""
|
||||
if data and len(data) > 0:
|
||||
return cls.success(data=data, message=success_message)
|
||||
else:
|
||||
return cls.error(message=error_message, code=500, data=None)
|
||||
|
||||
|
||||
class RoomBindingResponse(BaseResponse):
|
||||
"""房间绑定响应"""
|
||||
data: Optional[RoomBindingInfo] = Field(default=None, description="房间绑定信息")
|
||||
|
||||
@classmethod
|
||||
def from_data(cls, data: Optional[RoomBindingInfo], success_message: str, error_message: str):
|
||||
"""根据数据创建响应"""
|
||||
if data and hasattr(data, 'building') and data.building.name != "请求失败":
|
||||
return cls.success(data=data, message=success_message)
|
||||
else:
|
||||
return cls.error(message=error_message, code=500, data=None)
|
||||
|
||||
|
||||
class ElectricityInfoResponse(BaseResponse):
|
||||
"""电费信息响应"""
|
||||
data: Optional[ElectricityInfo] = Field(default=None, description="电费信息")
|
||||
|
||||
@classmethod
|
||||
def from_data(cls, data: ElectricityInfo, success_message: str, error_message: str):
|
||||
"""根据数据创建响应"""
|
||||
# 检查是否是错误数据
|
||||
if data.balance.remaining_purchased >= 0 and data.balance.remaining_subsidy >= 0:
|
||||
return cls.success(data=data, message=success_message)
|
||||
elif data.balance.remaining_purchased == -2.0 and data.balance.remaining_subsidy == -2.0:
|
||||
# 未绑定房间的特定错误
|
||||
return cls.error(message="请先绑定宿舍房间后再查询电费信息", code=400, data=None)
|
||||
else:
|
||||
return cls.error(message=error_message, code=500, data=None)
|
||||
|
||||
|
||||
class PaymentInfoResponse(BaseResponse):
|
||||
"""充值信息响应"""
|
||||
data: Optional[PaymentInfo] = Field(default=None, description="充值信息")
|
||||
|
||||
@classmethod
|
||||
def from_data(cls, data: PaymentInfo, success_message: str, error_message: str):
|
||||
"""根据数据创建响应"""
|
||||
# 检查是否是错误数据
|
||||
if data.balance.remaining_purchased >= 0 and data.balance.remaining_subsidy >= 0:
|
||||
return cls.success(data=data, message=success_message)
|
||||
elif data.balance.remaining_purchased == -2.0 and data.balance.remaining_subsidy == -2.0:
|
||||
# 未绑定房间的特定错误
|
||||
return cls.error(message="请先绑定宿舍房间后再查询充值信息", code=400, data=None)
|
||||
else:
|
||||
return cls.error(message=error_message, code=500, data=None)
|
||||
|
||||
|
||||
# ==================== 房间绑定状态相关模型 ====================
|
||||
|
||||
class RoomBindingStatusData(BaseModel):
|
||||
"""房间绑定状态数据"""
|
||||
is_bound: bool = Field(..., description="是否已绑定房间")
|
||||
binding_info: Optional[RoomBindingInfo] = Field(default=None, description="绑定信息(如果已绑定)")
|
||||
|
||||
|
||||
class RoomBindingStatusResponse(BaseResponse):
|
||||
"""房间绑定状态响应"""
|
||||
data: Optional[RoomBindingStatusData] = Field(default=None, description="绑定状态信息")
|
||||
Reference in New Issue
Block a user