feat: 添加合并特来电平台数据功能
Coze-Commit-Type: user Coze-User-ID: 3722323274763196 Coze-Conversation-ID: 9894087
This commit is contained in:
@@ -166,6 +166,9 @@ FIELD_MAPPING = {
|
||||
'peak_electricity': '峰时电量(kWh)',
|
||||
'flat_electricity': '平时电量(kWh)',
|
||||
'valley_electricity': '谷时电量(kWh)',
|
||||
|
||||
# 数据来源
|
||||
'data_source': '数据来源',
|
||||
}
|
||||
|
||||
# 获取字段中文名称
|
||||
|
||||
@@ -23,6 +23,94 @@ ID_TO_NAME_MAPPING = {
|
||||
}
|
||||
|
||||
|
||||
# 特来电表字段映射到报表字段
|
||||
# t_hlht_tld 字段 → 报表字段
|
||||
TELECOM_FIELD_MAPPING = {
|
||||
'order_id': 'order_no', # 订单号
|
||||
'station_id': 'station_id', # 场站ID
|
||||
'station_name': 'station_name', # 场站名称
|
||||
'charge_start_time': 'charge_begin_time', # 开始充电时间
|
||||
'charge_end_time': 'charge_end_time', # 结束充电时间
|
||||
'total_power': 'charge_degree', # 总电量
|
||||
'start_soc': 'charge_begin_soc', # 开始SOC
|
||||
'end_soc': 'charge_end_soc', # 结束SOC
|
||||
'elec_money': 'charge_elecfee_amount', # 电费
|
||||
'service_money': 'charge_service_amount', # 服务费
|
||||
'total_money': 'total_money', # 总金额
|
||||
'sharp_power': 'sharp_electricity', # 尖时段电量
|
||||
'peak_power': 'peak_electricity', # 峰时段电量
|
||||
'flat_power': 'flat_electricity', # 平时段电量
|
||||
'valley_power': 'valley_electricity', # 谷时段电量
|
||||
'vehicle_self_no': 'company_name', # 车量自编号 → 企业名称
|
||||
}
|
||||
|
||||
|
||||
def query_telecom_orders(vehicle_self_nos, start_time_str, end_time_str):
|
||||
"""
|
||||
查询特来电平台的订单数据
|
||||
|
||||
Args:
|
||||
vehicle_self_nos: 车量自编号列表(对应企业名称)
|
||||
start_time_str: 开始时间字符串
|
||||
end_time_str: 结束时间字符串
|
||||
|
||||
Returns:
|
||||
list: 转换后的订单数据,字段映射为报表字段
|
||||
"""
|
||||
if not vehicle_self_nos:
|
||||
return []
|
||||
|
||||
# 构建查询条件
|
||||
placeholders = ', '.join(['%s'] * len(vehicle_self_nos))
|
||||
sql = f"""
|
||||
SELECT
|
||||
order_id,
|
||||
station_id,
|
||||
station_name,
|
||||
charge_start_time,
|
||||
charge_end_time,
|
||||
total_power,
|
||||
start_soc,
|
||||
end_soc,
|
||||
elec_money,
|
||||
service_money,
|
||||
total_money,
|
||||
sharp_power,
|
||||
peak_power,
|
||||
flat_power,
|
||||
valley_power,
|
||||
vehicle_self_no
|
||||
FROM t_hlht_tld
|
||||
WHERE vehicle_self_no IN ({placeholders})
|
||||
AND second_source != '驿来特'
|
||||
AND charge_end_time >= %s
|
||||
AND charge_end_time < %s
|
||||
ORDER BY charge_end_time DESC
|
||||
"""
|
||||
|
||||
params = tuple(vehicle_self_nos) + (start_time_str, end_time_str)
|
||||
|
||||
try:
|
||||
results = execute_query(sql, params)
|
||||
print(f"[特来电] 查询到 {len(results)} 条订单")
|
||||
except Exception as e:
|
||||
print(f"[特来电] 查询失败: {e}")
|
||||
return []
|
||||
|
||||
# 转换字段名
|
||||
converted_orders = []
|
||||
for row in results:
|
||||
converted = {}
|
||||
for telecom_field, report_field in TELECOM_FIELD_MAPPING.items():
|
||||
if telecom_field in row:
|
||||
converted[report_field] = row[telecom_field]
|
||||
# 添加数据来源标记
|
||||
converted['data_source'] = '特来电'
|
||||
converted_orders.append(converted)
|
||||
|
||||
return converted_orders
|
||||
|
||||
|
||||
def build_id_to_name_map(orders, selected_fields):
|
||||
"""
|
||||
构建ID到名称的映射字典
|
||||
@@ -248,7 +336,26 @@ def generate_daily_report(config_id, start_time=None, end_time=None):
|
||||
# 执行查询
|
||||
orders = execute_query(sql, tuple(params))
|
||||
|
||||
print(f"[日报生成] 查询到 {len(orders)} 条订单")
|
||||
print(f"[日报生成] 驿来特查询到 {len(orders)} 条订单")
|
||||
|
||||
# 添加数据来源标记
|
||||
for order in orders:
|
||||
order['data_source'] = '驿来特'
|
||||
|
||||
# 检查是否需要合并特来电数据
|
||||
merge_telecom = config.get('merge_telecom', 0)
|
||||
telecom_vehicle_no = config.get('telecom_vehicle_no', '')
|
||||
|
||||
if merge_telecom and config['split_type'] == 'company_id' and telecom_vehicle_no:
|
||||
# 解析车量自编号(支持逗号分隔的多个)
|
||||
vehicle_nos = [v.strip() for v in telecom_vehicle_no.split(',') if v.strip()]
|
||||
if vehicle_nos:
|
||||
print(f"[日报生成] 开始合并特来电数据,车量自编号: {vehicle_nos}")
|
||||
telecom_orders = query_telecom_orders(vehicle_nos, start_time_str, end_time_str)
|
||||
if telecom_orders:
|
||||
# 将特来电数据添加到订单列表
|
||||
orders.extend(telecom_orders)
|
||||
print(f"[日报生成] 合并后总订单数: {len(orders)}")
|
||||
|
||||
if not orders:
|
||||
# 即使没有数据,也保存一条失败记录
|
||||
|
||||
Reference in New Issue
Block a user