import requests
import json
from datetime import datetime
from 获取div中所有p标签 import get_order_manage_detail
from 手机号 import get_passenger_mobile
def get_cancelled_orders(driver_name=None, cookie_path='cookie1.txt'):
"""
查询指定司机的取消订单
参数:
driver_name: str - 司机姓名(可选),不传则查询所有司机
cookie_path: str - cookie文件路径,默认为'cookie.txt'
返回:
list - 格式化后的取消订单信息列表
"""
def get_cookie_value(cookies, cookie_name):
"""从cookie列表中提取指定cookie的值"""
for cookie in cookies:
if cookie['name'] == cookie_name:
return cookie['value']
return None
def parse_order_detail(order_detail_data):
"""
解析订单详情数据,提取关键信息
参数:
order_detail_data: dict - 订单详情数据
返回:
str - 格式化后的订单信息
"""
try:
if 'error' in order_detail_data:
return f"获取订单详情失败: {order_detail_data['error']}"
if order_detail_data.get('code') != 1:
return f"API返回错误: {order_detail_data.get('msg', '未知错误')}"
data = order_detail_data.get('data', {})
if not data:
return "订单详情数据为空"
# 提取基本信息
order_base = data.get('orderBaseInfoVO', {})
order_price = data.get('orderPriceVO', {})
states = data.get('states', [])
# 司机信息
driver_name = "未知司机"
plate_no = "无车牌"
driver_mobile = "未知"
if states:
latest_state = states[-1] # 获取最新状态
driver_name = latest_state.get('driverName', '未知司机')
plate_no = latest_state.get('plateNo', '无车牌').replace('*', '')
driver_mobile = latest_state.get('driverMobile', '未知')
# 乘客信息
passenger_mobile = order_base.get('passengerMobile', '未知')
agent_passenger_mobile = order_base.get('agentPassengerMobile', '未知')
# 时间信息
create_time = order_base.get('passengerCreateDate', 0)
if create_time:
from datetime import datetime
create_datetime = datetime.fromtimestamp(create_time / 1000)
date_str = create_datetime.strftime('%Y-%m-%d')
time_str = create_datetime.strftime('%H:%M:%S')
else:
date_str = "未知日期"
time_str = "未知时间"
# 车型信息
car_type = order_base.get('orderCategoryTypeName', '未知车型')
standard_type = order_base.get('standardUseCarTypeName', '')
if standard_type:
car_type = f"{car_type}-{standard_type}"
# 地址信息
start_point = order_base.get('orderStartPoint', {})
end_point = order_base.get('orderEndPoint', {})
start_address = start_point.get('address', '未知起点').replace('*******', '')
end_address = end_point.get('address', '未知终点').replace('*******', '')
# 价格信息
trip_price = order_price.get('tripPrice', '0.00')
estimate_price = order_price.get('estimatePrice', 0)
# 里程和时长
estimate_mileage = order_base.get('estimateMileage', 0) / 1000 # 转换为公里
estimate_duration = order_base.get('estimateDuration', 0)
# 渠道信息
channel = order_base.get('standardSourceName', '未知渠道')
# 获取orderId
order_id = order_base.get('orderId') or order_base.get('etravelOrderId')
# 获取driverId
driver_id = order_base.get('driverId')
# 如果两个值都存在,添加到结果列表
if order_id and driver_id:
p = get_passenger_mobile("cookie1.txt", driver_id, order_id)
# return f"""司机:{driver}({plate})
s = p
# 格式化输出
result = f"""司机:{driver_name}({plate_no})
暗号:{s}
用车时间:{date_str}
{time_str}
用车车型:{car_type}
起点:{start_address}
终点:{end_address}
特惠一口价:{trip_price}元
预估价格:{estimate_price}元
预估里程:{estimate_mileage}km
预估时长:{estimate_duration}分钟
该笔订单来自{channel}"""
return result
except Exception as e:
return f"解析订单详情时发生错误: {str(e)}"
# def format_order(order,cookie_name):
# # 司机信息
# driver = order.get('userDriverName') or order.get('driverName') or '未知司机'
# plate = (order.get('plateNo') or '无车牌').replace('*', '')
# # 联系方式
# caller = order.get('agentPassengerMobile') or order.get('passengerMobile') or '未知'
# passenger = order.get('passengerMobile') or '未知'
# # 时间处理
# create_time = order.get('passCreateDateStr', '').split(' ')
# date_part = create_time[0] if create_time else '未知日期'
# time_part = create_time[1] if len(create_time) > 1 else '未知时间'
# # 车型
# car_type = order.get('orderCategoryTypeName') or '未知车型'
# standard_type = order.get('standardUseCarTypeName') or ''
# if standard_type:
# car_type = f"{car_type}-{standard_type}"
# # 地址
# start = (order.get('startAddress') or '未知起点').replace('*******', '')
# end = (order.get('endAddress') or '未知终点').replace('*******', '')
# # 价格信息 - 确保数值不为None
# price = order.get('tripPrice') or 0.0
# # estimate_price = order.get('estimatePrice') or 0.0
# # mileage = order.get('estimateMileage') or order.get('factMileage') or 0.0
# # duration = order.get('estimateDuration') or order.get('factDuration') or 0.0
# # 订单状态
# status = order.get('orderStateName') or '未知状态'
# # 渠道
# channel = order.get('standardSourceName') or '未知渠道'
# if channel== "高德渠道":
# # 获取orderId
# order_id = order.get('orderId') or order.get('etravelOrderId')
# # 获取driverId
# driver_id = order.get('driverId')
# # 如果两个值都存在,添加到结果列表
# if order_id and driver_id:
# passenger = get_passenger_mobile(cookie_name, driver_id, order_id)
# 手机号:{passenger}
# 用车时间:{date_part}
# {time_part}
# 用车车型:{car_type}
# 起点:{start}
# 终点:{end}
# 特惠一口价:{price:.2f}元
# 订单状态:{status}
# 渠道:{channel}"""
try:
# 读取cookie文件
with open(cookie_path, 'r', encoding='utf-8') as f:
cookies = json.load(f)
# 准备请求
url = "https://admin.yueyuechuxing.cn/bos/admin/v2/order/queryDetail"
now = int(datetime.now().timestamp() * 1000)
day_ago = now - 1 * 120000000 # 3天前,扩大时间范围
headers = {
"Content-Type": "application/json",
"Content-Encoding": "gzip",
"Referer": "https://admin.yueyuechuxing.cn/order/newOrder/newList",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
"_admin_tk": get_cookie_value(cookies, 'stk') or '',
"_admin_ts": str(int(datetime.now().timestamp())),
"_admin_eid": get_cookie_value(cookies, '_assets_tenant_id') or '',
"_admin_resource_key": "newOrderList",
"_admin_current_page": "/order/newOrder/newList",
"_admin_session_eid": get_cookie_value(cookies, '_assets_tenant_id') or ''
}
data = {
"driverName": driver_name ,
"pageNum": 1,
"pageSize": 1,
"passCreateEndDate": now,
"passCreateStartDate": day_ago,
"showEtravelCancelOrderFlag": 0,
"specialOrderFlag": 0
}
# 发送请求
response = requests.post(
url,
cookies={c['name']: c['value'] for c in cookies},
headers=headers,
json=data,
timeout=15
)
if response.status_code != 200:
return [f"请求失败,状态码: {response.status_code}"]
result = response.json()
if result['code'] != 1:
return [result.get('msg', '请求失败')]
if not result.get('data', {}).get('items'):
return [f"未查到[{driver_name}]进行中的订单"]
# 获取第一个订单的ID
items = result.get('data', {}).get('items', [])
if not items:
return [f"未查到[{driver_name}]进行中的订单"]
order_id = items[0].get('orderId') or items[0].get('etravelOrderId')
if order_id:
order_detail = get_order_manage_detail(cookie_path, order_id)
if isinstance(order_detail, dict) and 'error' not in order_detail and items[0].get("orderStateName")!="付款完成":
return [parse_order_detail(order_detail)]
else:
return [f"获取订单详情失败: {order_detail}"]
return [f"未查到[{driver_name}]进行中的订单"]
except Exception as e:
return [f"发生错误: {str(e)}"]
# 使用示例
if __name__ == "__main__":
# 查询特定司机
import time
# 记录开始时间
start_time = time.time()
orders = get_cancelled_orders(driver_name="吴勇")
# 这里是你的代码
time.sleep(1) # 模拟耗时操作
# 计算并打印耗时
elapsed_time = time.time() - start_time
print(f"代码运行耗时: {elapsed_time:.4f} 秒")
if not orders:
print("未找到取消订单")
else:
for i, order in enumerate(orders, 1):
# print(f"\n取消订单 {i}:")
print(order)
print("-" * 60) json解析出错
最新发布