2025-10-31 14:30:42 +08:00
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
from typing import Optional, Dict, Any, List
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
|
class LoginRequest:
|
|
|
|
|
|
"""登录请求模型"""
|
|
|
|
|
|
Program: int
|
|
|
|
|
|
SC: str
|
|
|
|
|
|
loginName: str
|
|
|
|
|
|
password: str
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
|
class LoginResponse:
|
|
|
|
|
|
"""登录响应模型"""
|
|
|
|
|
|
Code: int
|
|
|
|
|
|
Message: Optional[str]
|
|
|
|
|
|
Data: Optional[Dict[str, Any]]
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def app_id(self) -> Optional[str]:
|
|
|
|
|
|
"""获取AppID"""
|
|
|
|
|
|
return self.Data.get('AppID') if self.Data else None
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def expire_time(self) -> Optional[str]:
|
|
|
|
|
|
"""获取过期时间"""
|
|
|
|
|
|
return self.Data.get('ExpireTime') if self.Data else None
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def sign_token(self) -> Optional[str]:
|
|
|
|
|
|
"""获取SignToken"""
|
|
|
|
|
|
return self.Data.get('SignToken') if self.Data else None
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def zr_jwt(self) -> Optional[str]:
|
|
|
|
|
|
"""获取ZrJwt"""
|
|
|
|
|
|
return self.Data.get('ZrJwt') if self.Data else None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
|
class ArtifactInfo:
|
2026-02-09 11:36:37 +08:00
|
|
|
|
"""管片信息基础模型"""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#管片编号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
ArtifactID: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#管片ID
|
2026-02-09 11:36:37 +08:00
|
|
|
|
ArtifactActionID: int = 0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#管片副标识1
|
2026-02-09 11:36:37 +08:00
|
|
|
|
ArtifactIDVice1: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#产品环号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
ProduceRingNumber: int = 0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#模具编号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
MouldCode: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#骨架ID
|
2026-02-09 11:36:37 +08:00
|
|
|
|
SkeletonID: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#环类型编码
|
2026-02-09 11:36:37 +08:00
|
|
|
|
RingTypeCode: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#尺寸规格
|
2026-02-09 11:36:37 +08:00
|
|
|
|
SizeSpecification: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#埋深
|
2026-02-09 11:36:37 +08:00
|
|
|
|
BuriedDepth: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#块号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
BlockNumber: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#环号标记
|
2026-02-09 11:36:37 +08:00
|
|
|
|
HoleRingMarking: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#出管标记
|
2026-02-09 11:36:37 +08:00
|
|
|
|
GroutingPipeMarking: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#聚丙烯纤维标记
|
2026-02-09 11:36:37 +08:00
|
|
|
|
PolypropyleneFiberMarking: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
# 浇筑方量
|
2026-02-09 11:36:37 +08:00
|
|
|
|
BetonVolume: float = 0.0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
# 任务单号(混凝土)
|
2026-02-09 11:36:37 +08:00
|
|
|
|
BetonTaskID: str = ""
|
|
|
|
|
|
#接口中的字段
|
|
|
|
|
|
ProductionProcessCode: int = 0
|
|
|
|
|
|
|
2025-10-31 14:30:42 +08:00
|
|
|
|
|
|
|
|
|
|
@dataclass
|
2026-02-09 11:36:37 +08:00
|
|
|
|
class ArtifactInfoModel(ArtifactInfo):
|
2025-10-31 14:30:42 +08:00
|
|
|
|
"""管片表模型"""
|
2026-02-09 11:36:37 +08:00
|
|
|
|
# 继承基础模型的所有字段
|
|
|
|
|
|
ID: int = 0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#FK_PDID
|
2026-02-09 11:36:37 +08:00
|
|
|
|
FK_PDID: int = 0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#状态
|
2026-02-09 11:36:37 +08:00
|
|
|
|
Status: int = 1
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#开始时间
|
2026-02-09 11:36:37 +08:00
|
|
|
|
BeginTime: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#结束时间
|
2026-02-09 11:36:37 +08:00
|
|
|
|
EndTime: str = ""
|
|
|
|
|
|
#生产中状态(1正常、2警告、3异常)
|
|
|
|
|
|
PStatus: int = 1
|
|
|
|
|
|
#数据来源(1 api 2离线RFID)
|
|
|
|
|
|
Source: int = 1
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#FBetonVolume
|
2026-02-09 11:36:37 +08:00
|
|
|
|
FBetonVolume: float = 0.0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#OptTime
|
2026-02-09 11:36:37 +08:00
|
|
|
|
OptTime: str = ""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
|
class ArtifactResponse:
|
|
|
|
|
|
"""管片信息响应模型"""
|
|
|
|
|
|
Code: int
|
|
|
|
|
|
Message: Optional[str]
|
|
|
|
|
|
Data: Optional[ArtifactInfo]
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
|
def from_dict(cls, data: Dict[str, Any]) -> 'ArtifactResponse':
|
|
|
|
|
|
"""
|
|
|
|
|
|
从字典创建响应对象
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
|
data: 响应数据字典
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
ArtifactResponse: 响应对象
|
|
|
|
|
|
"""
|
|
|
|
|
|
response_data = data.get('Data')
|
|
|
|
|
|
artifact_info = None
|
|
|
|
|
|
if response_data:
|
|
|
|
|
|
artifact_info = ArtifactInfo(**response_data)
|
|
|
|
|
|
|
|
|
|
|
|
return cls(
|
|
|
|
|
|
Code=data.get('Code'),
|
|
|
|
|
|
Message=data.get('Message'),
|
|
|
|
|
|
Data=artifact_info
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
|
class TaskInfo:
|
|
|
|
|
|
"""任务单信息模型"""
|
|
|
|
|
|
#任务单ID
|
2026-02-09 11:36:37 +08:00
|
|
|
|
TaskID: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#任务单状态
|
2026-02-09 11:36:37 +08:00
|
|
|
|
TaskStatus: int=0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#任务单状态文本
|
2026-02-09 11:36:37 +08:00
|
|
|
|
TaskStatusText: str=""
|
|
|
|
|
|
# #计划生产数量
|
|
|
|
|
|
# TaskCount: int=0
|
|
|
|
|
|
# #已生产数量
|
|
|
|
|
|
# AlreadyProduceCount: int=0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#生产进度
|
2026-02-09 11:36:37 +08:00
|
|
|
|
# Progress: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#工程名称
|
2026-02-09 11:36:37 +08:00
|
|
|
|
ProjectName: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#计划生产日期
|
2026-02-09 11:36:37 +08:00
|
|
|
|
# TaskPlanDateText: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#强度等级
|
2026-02-09 11:36:37 +08:00
|
|
|
|
BetonGrade: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#设计配合比编号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
MixID: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#生产配合比编号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
ProduceMixID: str=""
|
|
|
|
|
|
# #计划方量
|
|
|
|
|
|
PlannedVolume: float=0.0
|
|
|
|
|
|
# #已供方量
|
|
|
|
|
|
# ProducedVolume: float=0.0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#出洞环标记
|
2026-02-09 11:36:37 +08:00
|
|
|
|
# HoleRingMarking: str=""
|
|
|
|
|
|
# #注浆管标记
|
|
|
|
|
|
# GroutingPipeMarking: str=""
|
|
|
|
|
|
# #聚丙烯纤维标记
|
|
|
|
|
|
# PolypropyleneFiberMarking: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#生产日期
|
2026-02-09 11:36:37 +08:00
|
|
|
|
# TaskDateText: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#盘数
|
2026-02-09 11:36:37 +08:00
|
|
|
|
# PlateCount: int=0
|
|
|
|
|
|
# #任务单下发状态
|
|
|
|
|
|
# SendStatus: int=0
|
|
|
|
|
|
# #任务单下发状态
|
|
|
|
|
|
# SendStatusText: str=""
|
|
|
|
|
|
# #配合比下发状态
|
|
|
|
|
|
# MixSendStatus: int=0
|
|
|
|
|
|
# #配合比下发状态
|
|
|
|
|
|
# MixSendStatusText: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
|
class TaskResponse:
|
|
|
|
|
|
"""任务单响应模型"""
|
|
|
|
|
|
Code: int
|
|
|
|
|
|
Message: Optional[str]
|
|
|
|
|
|
Data: Optional[TaskInfo]
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
|
def from_dict(cls, data: Dict[str, Any]) -> 'TaskResponse':
|
|
|
|
|
|
"""
|
|
|
|
|
|
从字典创建响应对象
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
|
data: 响应数据字典
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
TaskResponse: 响应对象
|
|
|
|
|
|
"""
|
|
|
|
|
|
response_data = data.get('Data')
|
|
|
|
|
|
task_info = None
|
|
|
|
|
|
if response_data:
|
|
|
|
|
|
task_info = TaskInfo(**response_data)
|
|
|
|
|
|
|
|
|
|
|
|
return cls(
|
|
|
|
|
|
Code=data.get('Code'),
|
|
|
|
|
|
Message=data.get('Message'),
|
|
|
|
|
|
Data=task_info
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
|
class NotPourArtifactResponse:
|
|
|
|
|
|
"""未浇筑管片列表响应模型"""
|
|
|
|
|
|
Code: int
|
|
|
|
|
|
Message: Optional[str]
|
|
|
|
|
|
Data: Optional[List[ArtifactInfo]]
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
|
def from_dict(cls, data: Dict[str, Any]) -> 'NotPourArtifactResponse':
|
|
|
|
|
|
"""
|
|
|
|
|
|
从字典创建响应对象
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
|
data: 响应数据字典
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
NotPourArtifactResponse: 响应对象
|
|
|
|
|
|
"""
|
|
|
|
|
|
response_data = data.get('Data')
|
|
|
|
|
|
artifacts = None
|
|
|
|
|
|
if response_data:
|
|
|
|
|
|
artifacts = [ArtifactInfo(**item) for item in response_data]
|
|
|
|
|
|
|
|
|
|
|
|
return cls(
|
|
|
|
|
|
Code=data.get('Code'),
|
|
|
|
|
|
Message=data.get('Message'),
|
|
|
|
|
|
Data=artifacts
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
|
class PDRecordModel:
|
2026-02-09 11:36:37 +08:00
|
|
|
|
# def __init__(self):
|
|
|
|
|
|
# pass
|
2025-10-31 14:30:42 +08:00
|
|
|
|
"""管片表模型"""
|
2026-02-09 11:36:37 +08:00
|
|
|
|
ID: int=0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#派单编号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
ArtifactID: str=""
|
|
|
|
|
|
|
|
|
|
|
|
ArtifactActionID: int=0
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#任务单号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
TaskID: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#工程名称
|
2026-02-09 11:36:37 +08:00
|
|
|
|
ProjectName: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#生产配合比编号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
ProduceMixID: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#派单方量
|
2026-02-09 11:36:37 +08:00
|
|
|
|
BetonVolume: float=0.0
|
|
|
|
|
|
#实际派单方量
|
|
|
|
|
|
FBetonVolume: float=0.0
|
|
|
|
|
|
#实际派单方量
|
|
|
|
|
|
PlannedVolume: float=0.0
|
|
|
|
|
|
#强度等级
|
|
|
|
|
|
BetonGrade: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#模具编号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
MouldCode: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#骨架编号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
SkeletonID: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#环类型编码
|
2026-02-09 11:36:37 +08:00
|
|
|
|
RingTypeCode: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#尺寸规格
|
2026-02-09 11:36:37 +08:00
|
|
|
|
SizeSpecification: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#埋深
|
2026-02-09 11:36:37 +08:00
|
|
|
|
BuriedDepth: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#块号
|
2026-02-09 11:36:37 +08:00
|
|
|
|
BlockNumber: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
# 派单模式(1自动派单 2手动派单0未知 )
|
|
|
|
|
|
Mode: int=0
|
2026-03-13 21:04:19 +08:00
|
|
|
|
# 派单状态((1计划中2已下发0未知 3已超时 4未扫码)),默认1
|
2025-10-31 14:30:42 +08:00
|
|
|
|
Status: int=1
|
2026-03-13 21:04:19 +08:00
|
|
|
|
#搅拌生产状态(搅拌生产状态(1未进行生产,2正在生产3生产完毕,4生产中断5已插入搅拌系统6已取消)
|
2025-10-31 14:30:42 +08:00
|
|
|
|
GStatus: int=0
|
|
|
|
|
|
#数据来源(1 api 2离线)
|
|
|
|
|
|
Source: int=1
|
|
|
|
|
|
#创建时间
|
|
|
|
|
|
CreateTime: str=""
|
2026-02-09 11:36:37 +08:00
|
|
|
|
#创建时间
|
|
|
|
|
|
EndTime: str=""
|
2025-10-31 14:30:42 +08:00
|
|
|
|
#派单时间(下发)
|
|
|
|
|
|
OptTime: str=""
|
2025-11-21 14:55:52 +08:00
|
|
|
|
|
2026-03-13 21:04:19 +08:00
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
|
class FreqRecordModel:
|
|
|
|
|
|
"""频率记录"""
|
|
|
|
|
|
ID: int=0
|
|
|
|
|
|
#模具编号
|
|
|
|
|
|
ArtifactID: str=""
|
|
|
|
|
|
#模具ID
|
|
|
|
|
|
ArtifactActionID: int=0
|
|
|
|
|
|
#模具编号
|
|
|
|
|
|
MouldCode: str=""
|
|
|
|
|
|
#骨架编号
|
|
|
|
|
|
Freq: float=0.0
|
|
|
|
|
|
#是否已同步 0否 1是
|
|
|
|
|
|
IsSync: int=0
|
|
|
|
|
|
#记录时间
|
|
|
|
|
|
OptTime: str=""
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-21 14:55:52 +08:00
|
|
|
|
@dataclass
|
|
|
|
|
|
class LEDInfo:
|
|
|
|
|
|
"""LED信息模型"""
|
|
|
|
|
|
# 任务单号
|
|
|
|
|
|
TaskID: str
|
|
|
|
|
|
# 盘方量
|
|
|
|
|
|
PlateVolume: str
|
|
|
|
|
|
# 模具编号
|
|
|
|
|
|
MouldCode: str
|
|
|
|
|
|
# 生产投料时间
|
|
|
|
|
|
ProduceStartTime: str
|
|
|
|
|
|
# 管片编号
|
|
|
|
|
|
ArtifactID: str
|
|
|
|
|
|
# 环类型编码(无)
|
|
|
|
|
|
RingTypeCode: str
|
|
|
|
|
|
# 累计盘次
|
|
|
|
|
|
PlateIDSerial: str
|
|
|
|
|
|
# 检验结果
|
|
|
|
|
|
CheckResult: str
|
|
|
|
|
|
# 高斗称值(无)
|
|
|
|
|
|
UpperWeight:float
|
|
|
|
|
|
# 砼出料温度温度
|
|
|
|
|
|
Temper: str
|
|
|
|
|
|
# 车间温度
|
|
|
|
|
|
WorkshopTemperature: str
|
|
|
|
|
|
# 低桶称量值
|
|
|
|
|
|
LowBucketWeighingValue: str
|
|
|
|
|
|
# 振动频率
|
|
|
|
|
|
VibrationFrequency: str
|
|
|
|
|
|
# 总计量
|
|
|
|
|
|
TotMete: str
|
|
|
|
|
|
# 已浇筑方量
|
|
|
|
|
|
BetonVolumeAlready: str
|
|
|
|
|
|
# 水温
|
|
|
|
|
|
WaterTemperature: str
|
|
|
|
|
|
# 配方比例
|
2025-12-12 18:00:14 +08:00
|
|
|
|
FormulaProportion: str
|
|
|
|
|
|
# 白班拆模强度文本描述
|
|
|
|
|
|
DayStrengthValue: str
|
|
|
|
|
|
# 夜班拆模强度文本描述
|
|
|
|
|
|
NihtStrengthValue: str
|