268 lines
8.0 KiB
Python
268 lines
8.0 KiB
Python
#!/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': '车辆编码',
|
||
}
|
||
|
||
# 获取字段中文名称
|
||
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 '未知原因'
|