Files
ylt_diy/lib/field_mapping.py

271 lines
8.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 '未知原因'