From b0d01cbc0ed2aa62a1eb795eaa5a0c45723e9fe9 Mon Sep 17 00:00:00 2001 From: user9994793890 <3722323274763196-user9994793890@noreply.coze.cn> Date: Fri, 10 Jul 2026 15:05:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=86=E6=97=B6?= =?UTF-8?q?=E6=AE=B5=E7=94=B5=E9=87=8F=E5=AD=97=E6=AE=B5=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9A=84SQL=E6=9F=A5=E8=AF=A2=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Coze-Commit-Type: user Coze-User-ID: 3722323274763196 Coze-Conversation-ID: 9894087 --- assets/image_20260710150426596.png | Bin 0 -> 32449 bytes lib/report_generator.py | 12 ++++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 assets/image_20260710150426596.png diff --git a/assets/image_20260710150426596.png b/assets/image_20260710150426596.png new file mode 100644 index 0000000000000000000000000000000000000000..f8abf380a9121ab7a25be53d543eae2de58d3cc1 GIT binary patch literal 32449 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 literal 0 HcmV?d00001 diff --git a/lib/report_generator.py b/lib/report_generator.py index 6d61e29..16003f1 100644 --- a/lib/report_generator.py +++ b/lib/report_generator.py @@ -205,8 +205,16 @@ def generate_daily_report(config_id, start_time=None, end_time=None): print(f" 时间范围: {start_time_str} 至 {end_time_str}") print(f" 选择字段: {len(selected_fields)} 个") - # 构建查询SQL - fields_str = ', '.join(selected_fields) + # 构建查询SQL - 过滤掉虚拟字段(时段电量等) + # 虚拟字段不是数据库表中的实际字段,需要动态计算 + TIME_PERIOD_FIELDS = {'sharp_electricity', 'peak_electricity', 'flat_electricity', 'valley_electricity'} + db_fields = [f for f in selected_fields if f not in TIME_PERIOD_FIELDS] + + # 确保至少有 order_no 字段用于关联分时数据 + if 'order_no' not in db_fields: + db_fields.append('order_no') + + fields_str = ', '.join(db_fields) # 检查是否为多选值(逗号分隔) split_values = [v.strip() for v in config['split_value'].split(',') if v.strip()]