first commit

This commit is contained in:
2026-03-12 17:03:56 +08:00
commit aa4d4c7d7c
48 changed files with 10958 additions and 0 deletions

82
ck/data_models.py Normal file
View File

@@ -0,0 +1,82 @@
"""
数据模型定义
定义设备间传输的数据结构
"""
import json
from typing import Optional, Dict, Any
from dataclasses import dataclass, asdict
@dataclass
class StationData:
"""站点数据模型"""
username: str # 用户名
line_name: str # 线路名称
station_no: int # 第几站
def to_bytes(self) -> bytes:
"""转换为字节数据"""
data_dict = asdict(self)
json_str = json.dumps(data_dict, ensure_ascii=False)
return json_str.encode('utf-8')
@staticmethod
def from_bytes(data: bytes) -> Optional['StationData']:
"""从字节数据解析"""
try:
json_str = data.decode('utf-8')
data_dict = json.loads(json_str)
return StationData(
username=data_dict['username'],
line_name=data_dict['line_name'],
station_no=data_dict['station_no']
)
except Exception as e:
print(f"解析数据失败: {e}")
return None
def __str__(self):
"""字符串表示"""
return (f"用户: {self.username}, "
f"线路: {self.line_name}, "
f"站点: 第{self.station_no}")
class ResponseData:
"""设备B统一响应数据格式 {1:"xxxx", 2:"xxxx", 3:"xxxx", ...}"""
@staticmethod
def create_response(station_data: StationData) -> Dict[int, str]:
"""
根据站点数据创建响应字典
Args:
station_data: 接收到的站点数据
Returns:
格式化的响应字典 {1: "用户名", 2: "线路名", 3: "站点号", ...}
"""
return {
1: station_data.username,
2: station_data.line_name,
3: str(station_data.station_no),
4: "已接收",
5: "设备B确认"
}
@staticmethod
def to_bytes(response_dict: Dict[int, str]) -> bytes:
"""将响应字典转换为字节数据"""
json_str = json.dumps(response_dict, ensure_ascii=False)
return json_str.encode('utf-8')
@staticmethod
def from_bytes(data: bytes) -> Optional[Dict[int, Any]]:
"""从字节数据解析响应字典"""
try:
json_str = data.decode('utf-8')
return json.loads(json_str)
except Exception as e:
print(f"解析响应数据失败: {e}")
return None