feat(core): 重构主应用启动逻辑并改进WITS数据发送

- 将主应用改为同时启动MQTT订阅入库和WITS数据发送两个服务
- 实现WITS发送器的自动重连机制和连接状态管理
- 添加日志记录到log/app.log和错误日志到log/error.log
- 更新WITS通道映射定义并支持字符串类型的日期时间字段
- 修改数据入库逻辑以支持空值处理和类型转换容错
- 移除命令行子命令模式,改为配置文件驱动的参数设置
- 添加.vscode和log目录到.gitignore忽略列表
This commit is contained in:
2026-03-12 13:32:27 +08:00
parent 6557479a2f
commit 0a123ba210
7 changed files with 314 additions and 159 deletions

View File

@@ -1,4 +1,5 @@
import re
import logging
import re
from model import DrillingRealtimeData
@@ -88,14 +89,34 @@ class DrillingRealtimeORM:
table_name = sanitize_identifier(f"drilling_realtime_{equipment_code}", "drilling_realtime_default")
values = []
for column in DB_COLUMNS:
raw = getattr(entity, column)
raw = getattr(entity, column, None)
if raw is None:
logging.debug("Column %s is None, default=0", column)
if column in INT_COLUMNS or column == "ts":
values.append(str(int(raw)))
values.append(str(to_int(raw)))
else:
values.append(str(float(raw)))
values.append(str(to_float(raw)))
columns_sql = ", ".join([f"`{column}`" for column in DB_COLUMNS])
values_sql = ", ".join(values)
return (
f"INSERT INTO `{self.database}`.`{table_name}` USING `{self.database}`.`{self.stable}` "
f"TAGS ({sql_quote(equipment_code)}) ({columns_sql}) VALUES ({values_sql})"
)
def to_int(value, default=0):
try:
if value is None or value == "":
return default
return int(value)
except Exception:
return default
def to_float(value, default=0.0):
try:
if value is None or value == "":
return default
return float(value)
except Exception:
return default