From 8554d2db9752a882d2bf32ecc4fa87594e440693 Mon Sep 17 00:00:00 2001 From: Huarch Date: Tue, 21 Jul 2026 15:20:14 +0800 Subject: [PATCH] Refine prediction workbook summary note --- app/prediction.py | 24 +++++++++++++++++++++--- tests/test_prediction.py | 11 +++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/prediction.py b/app/prediction.py index 410815e..83b8352 100644 --- a/app/prediction.py +++ b/app/prediction.py @@ -56,9 +56,13 @@ FEATURES = [ ID_COLUMN = "管道编号" PIPE_AGE_COLUMN = "管龄(年)" -REMAINING_LIFE_COLUMN = ( - "预计剩余寿命(年)(管道健康状态 ≥0.5 的剩余年数;" - "如管道健康状态在73年内均高于0.5,则为73减去当前管龄)" +REMAINING_LIFE_COLUMN = "剩余寿命(年)" +REMAINING_LIFE_NOTE = ( + "注:\n" + "剩余寿命计算方法为:\n" + "1)管道健康状态 ≥0.5 的剩余年数;\n" + "2)如管道健康状态在73年内均高于0.5(目前收集到模型数据管龄最大为73年)," + "那么管道剩余寿命为73减去当前管龄。" ) LEGACY_PIPE_AGE_COLUMN = "管龄" COLUMN_ALIASES = { @@ -549,6 +553,8 @@ def write_prediction_workbook( ] with pd.ExcelWriter(excel_path, engine="openpyxl") as writer: + from openpyxl.styles import Alignment + summary_df = pd.DataFrame( summary_sheet_rows, columns=[ID_COLUMN, PIPE_AGE_COLUMN, "当前健康状态", "健康等级", REMAINING_LIFE_COLUMN], @@ -564,6 +570,18 @@ def write_prediction_workbook( summary_worksheet = writer.book["结果摘要"] for cell in summary_worksheet["C"][1:]: cell.number_format = "0.00" + note_row = summary_worksheet.max_row + 2 + summary_worksheet.merge_cells( + start_row=note_row, + start_column=1, + end_row=note_row + 3, + end_column=5, + ) + note_cell = summary_worksheet.cell(note_row, 1) + note_cell.value = REMAINING_LIFE_NOTE + note_cell.alignment = Alignment(wrap_text=True, vertical="top") + for row_index in range(note_row, note_row + 4): + summary_worksheet.row_dimensions[row_index].height = 28 sample_worksheet.freeze_panes = "A2" sample_worksheet.auto_filter.ref = sample_worksheet.dimensions sample_worksheet.column_dimensions["A"].width = 12 diff --git a/tests/test_prediction.py b/tests/test_prediction.py index 2482d8c..da9f641 100644 --- a/tests/test_prediction.py +++ b/tests/test_prediction.py @@ -212,8 +212,9 @@ class PredictionHelpersTest(unittest.TestCase): summary_data.columns.tolist(), [ID_COLUMN, PIPE_AGE_COLUMN, "当前健康状态", "健康等级", REMAINING_LIFE_COLUMN], ) - self.assertEqual(summary_data[PIPE_AGE_COLUMN].tolist(), [10, 12]) - self.assertEqual(summary_data[REMAINING_LIFE_COLUMN].tolist(), [63, 61]) + summary_records = summary_data[summary_data[PIPE_AGE_COLUMN].notna()] + self.assertEqual(summary_records[PIPE_AGE_COLUMN].tolist(), [10, 12]) + self.assertEqual(summary_records[REMAINING_LIFE_COLUMN].tolist(), [63, 61]) sample_data = pd.read_excel(output_path, sheet_name="样本数据") self.assertEqual(sample_data.columns.tolist(), ["管龄(年)", "P001", "P002"]) @@ -229,8 +230,10 @@ class PredictionHelpersTest(unittest.TestCase): self.assertEqual(sample_worksheet.auto_filter.ref, "A1:C3") self.assertEqual(summary_worksheet["C2"].number_format, "0.00") self.assertEqual(sample_worksheet["B2"].number_format, "0.00") - self.assertIn("73减去当前管龄", summary_worksheet["E1"].value) - self.assertNotIn("73 - 当前管龄", summary_worksheet["E1"].value) + self.assertEqual(summary_worksheet["E1"].value, "剩余寿命(年)") + self.assertIn("A5:E8", [str(range_) for range_ in summary_worksheet.merged_cells.ranges]) + self.assertIn("73减去当前管龄", summary_worksheet["A5"].value) + self.assertIn("目前收集到模型数据管龄最大为73年", summary_worksheet["A5"].value) def test_prediction_workbook_writes_pipe_ids_as_excel_text(self) -> None: predictions = [dummy_prediction("00123", [1], [0.9], 10, 0.9)]