#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 字段映射配置 将数据库字段名映射为中文显示名 """ # 字段映射(根据实际数据库表结构) FIELD_MAPPING = { # 基础信息 'id': '订单ID', 'order_no': '订单号', 'platform_order_no': '平台订单号', 'order_type': '订单类型', 'order_time': '订单时间', 'state': '订单状态', 'operate_state': '操作状态', # 用户信息 'user_id': '用户ID', 'user_card_no': '用户卡号', 'company_id': '企业ID', 'charge_plate_no': '车牌号', 'charge_vin': 'VIN码', # 充电站信息 'station_id': '充电站ID', 'equipment_id': '设备ID', 'connector_id': '连接器ID', # 充电时间 'charge_begin_time': '充电开始时间', 'charge_end_time': '充电结束时间', 'charge_duration': '充电时长(秒)', # 充电电量 'charge_begin_degree': '开始电量', 'charge_end_degree': '结束电量', 'charge_degree': '充电电量(kWh)', 'charge_ah': '充电安时', # 充电SOC 'charge_begin_soc': '开始SOC', 'charge_end_soc': '结束SOC', 'charge_cur_soc': '当前SOC', # 充电费用(应收) 'receivable_electric_fee': '应收电费(元)', 'receivable_service_fee': '应收服务费(元)', 'receivable_total_fee': '应收总费用(元)', # 充电费用(实际) 'charge_elecfee_amount': '电费金额(元)', 'charge_elecfee_cost_amount': '电费成本(元)', 'charge_service_amount': '服务费金额(元)', 'charging_amt': '充电金额(元)', # 支付信息 'actual_pay_amount': '实际支付金额(元)', 'pay_amount': '支付金额(元)', 'pay_order_no': '支付订单号', 'pay_method': '支付方式', 'pay_status': '支付状态', 'pay_time': '支付时间', # 单价信息 'charge_unit_price': '单价(元/度)', 'charge_unit_cost': '单位成本', 'charge_unit_service_fee': '单位服务费', # 结算信息 'charge_settle_type': '结算类型', 'settle_electric_fee': '结算电费(元)', 'settle_service_fee': '结算服务费(元)', 'settle_fee': '结算费用(元)', 'settle_method': '结算方式', 'settle_status': '结算状态', 'settle_coupon_amount': '结算优惠券金额', # 优惠券信息 'user_coupon_id': '优惠券ID', 'coupon_name': '优惠券名称', 'coupon_type': '优惠券类型', 'coupon_amount': '优惠券金额', 'coupon_total_amount': '优惠券总金额', 'elecfee_coupon_amount': '电费优惠券金额', 'servicefee_coupon_amount': '服务费优惠券金额', # 发票信息 'invoice_id': '发票ID', 'invoice_fee': '发票金额', 'ticket_status': '开票状态', # 活动信息 'activity_electric_fee': '活动电费', 'activity_service_fee': '活动服务费', 'activity_name': '活动名称', 'activity_total_fee': '活动总费用', # 企业活动信息 'company_activity_id': '企业活动ID', 'company_activity_name': '企业活动名称', 'company_activity_total_fee': '企业活动总费用', 'company_activity_service_fee': '企业活动服务费', 'company_activity_electric_fee': '企业活动电费', # 补贴信息 'subsidy_degree': '补贴电量', 'subsidy_fee': '补贴费用', # 运营商信息 'operator_id': '运营商ID', 'operator_income': '运营商收入', 'plat_service_fee': '平台服务费', # 佣金信息 'com_service_fee': '佣金服务费', 'com_electric_fee': '佣金电费', 'com_total_fee': '佣金总费用', 'com_charge_discount_type': '佣金折扣类型', 'com_charge_discount': '佣金折扣', # 报告信息 'report_time': '上报时间', 'has_shallow_report': '是否有浅层报告', 'has_deep_report': '是否有深层报告', 'shallow_report_is_received': '浅层报告是否接收', # 订单完成信息 'finish_type': '完成类型', 'finish_code': '完成代码', 'finish_msg': '结束原因', 'finish_time': '完成时间', # 取消信息 'cancel_type': '取消类型', 'cancel_code': '取消代码', 'cancel_msg': '取消消息', 'cancel_time': '取消时间', # 异常信息 'exception_flag': '异常标志', 'exception_msg': '异常消息', 'is_exception': '是否异常', # 其他信息 'platform_sale_type': '平台销售类型', 'platform_driver_id': '平台司机ID', 'platform_phone': '平台电话', 'charge_strategy': '充电策略', 'charge_strategy_param': '充电策略参数', 'boot_mode': '启动模式', 'settlement_type': '结算类型', 'is_parking_coupon': '是否停车优惠券', 'control_source': '控制来源', 'charge_market_id': '充电市场ID', 'charge_times_degree': '充电次数电量', 'special_channel_order_source': '特殊渠道订单来源', # 时间戳 'create_time': '创建时间', 'update_time': '更新时间', # 分时段电量(从detail表计算) 'sharp_electricity': '尖时电量(kWh)', 'peak_electricity': '峰时电量(kWh)', 'flat_electricity': '平时电量(kWh)', 'valley_electricity': '谷时电量(kWh)', # 数据来源 'data_source': '数据来源', # 自定义计算字段(虚拟字段) 'custom_service_fee': '自定义服务费(元)', 'custom_total_amount': '自定义实收总金额(元)', # 车辆信息(从 t_car 表关联) 'car_bus_path': '公交线路', 'car_sn': '车辆编码', # 充电卡信息(从 t_user_card 表关联) 'user_card_memo': '充电卡备注', } # 获取字段中文名称 def get_field_name(field_key): """获取字段的中文名称""" return FIELD_MAPPING.get(field_key, field_key) # 获取字段显示名称(别名) def get_field_display_name(field_key): """获取字段的中文显示名称""" return FIELD_MAPPING.get(field_key, field_key) # 获取所有字段选项 def get_all_fields(): """获取所有字段选项""" return [{'key': k, 'name': v} for k, v in FIELD_MAPPING.items()] # 获取所有字段(带显示名称) 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', 'company_id', 'user_id', 'charge_begin_time', 'charge_end_time', 'charge_degree', 'receivable_total_fee', 'actual_pay_amount', '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 '未知原因'