PCM_Report/test_full_conversion_flow.py

179 lines
7.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
测试完整的数据转换和 SQL Server 写入流程
"""
import json
from convert_table_to_sqlserver_format import convert_temperature_table_to_sqlserver
# 实际的脚本返回数据
script_data = {
"tables": [{
"token": "scriptTable1",
"startRow": 0,
"startCol": 0,
"cells": [
{"row": 4, "col": 0, "value": "14.0"},
{"row": 4, "col": 1, "value": "14.2"},
{"row": 4, "col": 2, "value": "14.2"},
{"row": 4, "col": 3, "value": "14.3"},
{"row": 4, "col": 4, "value": "14.1"},
{"row": 4, "col": 5, "value": "13.9"},
{"row": 4, "col": 6, "value": ""},
{"row": 5, "col": 0, "value": "13.7"},
{"row": 5, "col": 1, "value": "13.9"},
{"row": 5, "col": 2, "value": "13.9"},
{"row": 5, "col": 3, "value": "13.9"},
{"row": 5, "col": 4, "value": "13.7"},
{"row": 5, "col": 5, "value": "13.6"},
{"row": 5, "col": 6, "value": ""},
{"row": 6, "col": 0, "value": "14.5"},
{"row": 6, "col": 1, "value": "14.7"},
{"row": 6, "col": 2, "value": "14.8"},
{"row": 6, "col": 3, "value": "14.8"},
{"row": 6, "col": 4, "value": "14.8"},
{"row": 6, "col": 5, "value": "14.7"},
{"row": 6, "col": 6, "value": ""},
{"row": 7, "col": 0, "value": "13.9"},
{"row": 7, "col": 1, "value": "14.1"},
{"row": 7, "col": 2, "value": "14.2"},
{"row": 7, "col": 3, "value": "14.3"},
{"row": 7, "col": 4, "value": "14.2"},
{"row": 7, "col": 5, "value": "14.1"},
{"row": 7, "col": 6, "value": ""},
{"row": 9, "col": 0, "value": "13.8"},
{"row": 9, "col": 1, "value": "13.9"},
{"row": 9, "col": 2, "value": "14.0"},
{"row": 9, "col": 3, "value": "14.0"},
{"row": 9, "col": 4, "value": "13.9"},
{"row": 9, "col": 5, "value": "13.9"},
{"row": 9, "col": 6, "value": ""},
{"row": 10, "col": 0, "value": "13.8"},
{"row": 10, "col": 1, "value": "14.0"},
{"row": 10, "col": 2, "value": "14.1"},
{"row": 10, "col": 3, "value": "14.2"},
{"row": 10, "col": 4, "value": "14.1"},
{"row": 10, "col": 5, "value": "14.0"},
{"row": 10, "col": 6, "value": ""},
{"row": 11, "col": 0, "value": "12.5"},
{"row": 11, "col": 1, "value": "12.7"},
{"row": 11, "col": 2, "value": "12.8"},
{"row": 11, "col": 3, "value": "12.9"},
{"row": 11, "col": 4, "value": "12.8"},
{"row": 11, "col": 5, "value": "12.7"},
{"row": 11, "col": 6, "value": ""},
{"row": 12, "col": 0, "value": "14.0"},
{"row": 12, "col": 1, "value": "14.2"},
{"row": 12, "col": 2, "value": "14.3"},
{"row": 12, "col": 3, "value": "14.4"},
{"row": 12, "col": 4, "value": "14.3"},
{"row": 12, "col": 5, "value": "14.2"},
{"row": 12, "col": 6, "value": ""},
{"row": 13, "col": 0, "value": "13.5"},
{"row": 13, "col": 1, "value": "13.7"},
{"row": 13, "col": 2, "value": "13.7"},
{"row": 13, "col": 3, "value": "13.8"},
{"row": 13, "col": 4, "value": "13.7"},
{"row": 13, "col": 5, "value": "13.5"},
{"row": 13, "col": 6, "value": ""},
{"row": 14, "col": 0, "value": "13.4"},
{"row": 14, "col": 1, "value": "13.5"},
{"row": 14, "col": 2, "value": "13.5"},
{"row": 14, "col": 3, "value": "13.6"},
{"row": 14, "col": 4, "value": "13.5"},
{"row": 14, "col": 5, "value": "13.4"},
{"row": 14, "col": 6, "value": ""},
{"row": 15, "col": 0, "value": "14.8"},
{"row": 15, "col": 1, "value": "15.0"},
{"row": 15, "col": 2, "value": "15.1"},
{"row": 15, "col": 3, "value": "15.2"},
{"row": 15, "col": 4, "value": "15.1"},
{"row": 15, "col": 5, "value": "15.0"},
{"row": 15, "col": 6, "value": ""},
{"row": 1, "col": 1, "value": "2025-12-05 14:00:00"},
{"row": 1, "col": 3, "value": "2025-12-05 17:30:00"},
{"row": 0, "col": 1, "value": "13.4"}
]
}]
}
work_order_no = "W2001150.001"
print("=" * 80)
print("完整数据转换流程测试")
print("=" * 80)
# 步骤1: 转换数据
print("\n步骤1: 转换表格数据为 SQL Server 格式")
print("-" * 80)
converted_data = convert_temperature_table_to_sqlserver(script_data, work_order_no)
print(f"✅ 转换完成,共 {len(converted_data)} 个字段")
print(f" - 工单号: {converted_data.get('order_no')}")
print(f" - 环境温度: {converted_data.get('ambient_temp_c')}°C")
print(f" - 开始时间: {converted_data.get('start_time')}")
print(f" - 结束时间: {converted_data.get('end_time')}")
# 统计温度字段
temp_fields = [k for k in converted_data.keys() if k.startswith('temp_')]
print(f" - 温度字段: {len(temp_fields)}")
# 步骤2: 验证数据完整性
print("\n步骤2: 验证数据完整性")
print("-" * 80)
# 检查必填字段
required_fields = ['order_no']
missing_required = [f for f in required_fields if f not in converted_data or not converted_data[f]]
if missing_required:
print(f"❌ 缺少必填字段: {', '.join(missing_required)}")
else:
print("✅ 所有必填字段都存在")
# 检查温度数据
expected_parts = [
'main_1', 'main_2', 'main_3', 'main_4',
'crosshead_1', 'crosshead_2', 'crosshead_3',
'gbox_small_1', 'gbox_small_2',
'gbox_big_3', 'gbox_big_4'
]
expected_times = ['t05', 't10', 't15', 't20', 't25', 't30'] # 只检查有数据的时间点
total_expected = len(expected_parts) * len(expected_times)
actual_temp_fields = len(temp_fields)
print(f"✅ 温度字段: {actual_temp_fields}/{total_expected} (预期有数据的字段)")
# 步骤3: 模拟 SQL Server 写入
print("\n步骤3: 模拟 SQL Server 写入")
print("-" * 80)
print("准备写入的数据示例:")
print(json.dumps({
"order_no": converted_data.get('order_no'),
"ambient_temp_c": converted_data.get('ambient_temp_c'),
"start_time": converted_data.get('start_time'),
"end_time": converted_data.get('end_time'),
"temp_main_1_t05": converted_data.get('temp_main_1_t05'),
"temp_main_1_t10": converted_data.get('temp_main_1_t10'),
"...": "... (其他 64 个温度字段)"
}, ensure_ascii=False, indent=2))
print("\n✅ 数据格式正确,可以写入 SQL Server")
# 步骤4: 显示完整数据(用于调试)
print("\n步骤4: 完整转换数据JSON格式")
print("-" * 80)
print(json.dumps(converted_data, ensure_ascii=False, indent=2))
print("\n" + "=" * 80)
print("测试完成")
print("=" * 80)
print("\n总结:")
print(f" - 数据转换: ✅ 成功")
print(f" - 字段数量: {len(converted_data)}")
print(f" - 温度字段: {len(temp_fields)}")
print(f" - 可以写入 SQL Server: ✅ 是")