From e8ba97bc9d33dc989f1d7d4ad1021e64d0107c4e Mon Sep 17 00:00:00 2001 From: haoslm <6083297@qq.com> Date: Fri, 24 Jul 2026 13:49:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=89=B9=E6=9D=A5=E7=94=B5?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E7=9A=84=E7=BB=93=E6=9D=9F=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/field_mapping.py | 53 +++++++++++++++++++++++++++++++++++++++++ lib/report_generator.py | 10 ++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/lib/field_mapping.py b/lib/field_mapping.py index e02b746..ad5693b 100644 --- a/lib/field_mapping.py +++ b/lib/field_mapping.py @@ -195,6 +195,34 @@ def get_all_fields_with_display(): """获取所有字段,包含key和显示名称""" return [{'key': k, 'display': v} for k, v in FIELD_MAPPING.items()] +# 结束原因映射(finish_type + finish_code -> 中文原因) +# finish_type: 1=正常结束, 2=补单结束 +FINISH_REASON_MAPPING = { + (1, 0): '正常结束', + (1, 1): '充电异常', + (1, 2): '用户取消', + (1, 3): '设备故障', + (1, 4): '网络异常', + (1, 5): '超时', + (1, 6): '过温保护', + (1, 7): '过流保护', + (1, 8): '欠压保护', + (1, 9): '过压保护', + (1, 10): '接地故障', + (1, 11): '绝缘故障', + (1, 12): '通信故障', + (1, 13): '计费异常', + (1, 14): '结算异常', + (1, 15): '卡异常', + (1, 16): '授权失败', + (1, 17): '余额不足', + (1, 18): '功率受限', + (1, 19): '充电中断', + (1, 20): '自动充满', + (2, 0): '补单结束', +} + + # 默认字段列表(常用字段) DEFAULT_FIELDS = [ 'order_no', @@ -208,3 +236,28 @@ DEFAULT_FIELDS = [ 'state', 'report_time' ] + + +# 获取结束原因 +def get_finish_reason(finish_type, finish_code, finish_msg): + """ + 根据finish_type和finish_code获取中文结束原因 + + Args: + finish_type: 完成类型 + finish_code: 完成代码 + finish_msg: 原始结束消息(作为后备) + + Returns: + str: 中文结束原因 + """ + key = (finish_type, finish_code) + if key in FINISH_REASON_MAPPING: + return FINISH_REASON_MAPPING[key] + + # 如果finish_msg有效,直接使用 + if finish_msg and finish_msg not in ('停止原因无效', '未知原因', 'None'): + return finish_msg + + # 默认返回 + return '未知原因' diff --git a/lib/report_generator.py b/lib/report_generator.py index 65e539e..fb51e20 100644 --- a/lib/report_generator.py +++ b/lib/report_generator.py @@ -9,7 +9,7 @@ from openpyxl.styles import Font, Alignment, PatternFill import pytz from lib.db import execute_query, execute_insert, execute_update -from lib.field_mapping import get_field_display_name +from lib.field_mapping import get_field_display_name, get_finish_reason from lib.logger import log_info, log_error, log_warning @@ -391,9 +391,15 @@ def generate_daily_report(config_id, start_time=None, end_time=None): log_info(f"[日报生成] 驿来特查询到 {len(orders)} 条订单", 'report') - # 添加数据来源标记 + # 添加数据来源标记并转换结束原因 for order in orders: order['data_source'] = '驿来特' + # 转换结束原因 + finish_type = order.get('finish_type') + finish_code = order.get('finish_code') + finish_msg = order.get('finish_msg') + if finish_type is not None: + order['finish_msg'] = get_finish_reason(finish_type, finish_code, finish_msg) # 检查是否有补单记录(finish_type = 2 表示补单结束) has_supplement = any(order.get('finish_type') == 2 for order in orders)