mirror of https://github.com/testerSunshine/12306
126 lines
5.3 KiB
Python
126 lines
5.3 KiB
Python
# coding=utf-8
|
||
import copy
|
||
import time
|
||
|
||
from config.TicketEnmu import ticket
|
||
from config.emailConf import sendEmail
|
||
from config.serverchanConf import sendServerChan
|
||
from myException.ticketIsExitsException import ticketIsExitsException
|
||
from myException.ticketNumOutException import ticketNumOutException
|
||
|
||
|
||
class queryOrderWaitTime:
|
||
"""
|
||
排队
|
||
"""
|
||
|
||
def __init__(self, session):
|
||
self.session = session
|
||
|
||
def sendQueryOrderWaitTime(self):
|
||
"""
|
||
排队获取订单等待信息,每隔3秒请求一次,最高请求次数为20次!
|
||
:return:
|
||
"""
|
||
num = 1
|
||
while True:
|
||
num += 1
|
||
if num > ticket.OUT_NUM:
|
||
print(ticket.WAIT_OUT_NUM)
|
||
order_id = self.queryMyOrderNoComplete() # 排队失败,自动取消排队订单
|
||
if order_id:
|
||
self.cancelNoCompleteMyOrder(order_id)
|
||
break
|
||
try:
|
||
queryOrderWaitTimeUrl = copy.deepcopy(self.session.urls["queryOrderWaitTimeUrl"])
|
||
queryOrderWaitTimeUrl["req_url"] = queryOrderWaitTimeUrl["req_url"].format(int(round(time.time() * 1000)))
|
||
queryOrderWaitTimeResult = self.session.httpClint.send(queryOrderWaitTimeUrl)
|
||
except ValueError:
|
||
queryOrderWaitTimeResult = {}
|
||
if queryOrderWaitTimeResult:
|
||
if queryOrderWaitTimeResult.get("status", False):
|
||
data = queryOrderWaitTimeResult.get("data", False)
|
||
if data and data.get("orderId", ""):
|
||
sendEmail(ticket.WAIT_ORDER_SUCCESS.format(
|
||
data.get("orderId", "")))
|
||
sendServerChan(ticket.WAIT_ORDER_SUCCESS.format(
|
||
data.get("orderId", "")))
|
||
raise ticketIsExitsException(ticket.WAIT_ORDER_SUCCESS.format(
|
||
data.get("orderId")))
|
||
elif data.get("msg", False):
|
||
print(data.get("msg", ""))
|
||
break
|
||
elif data.get("waitTime", False):
|
||
print(ticket.WAIT_ORDER_CONTINUE.format(0 - data.get("waitTime", False)))
|
||
else:
|
||
pass
|
||
elif queryOrderWaitTimeResult.get("messages", False):
|
||
print(ticket.WAIT_ORDER_FAIL.format(queryOrderWaitTimeResult.get("messages", "")))
|
||
else:
|
||
print(ticket.WAIT_ORDER_NUM.format(num + 1))
|
||
else:
|
||
pass
|
||
time.sleep(2)
|
||
else:
|
||
print(ticketNumOutException(ticket.WAIT_ORDER_SUB_FAIL))
|
||
|
||
def queryMyOrderNoComplete(self):
|
||
"""
|
||
获取订单列表信息
|
||
:return:
|
||
"""
|
||
self.initNoComplete()
|
||
queryMyOrderNoCompleteUrl = self.session.urls["queryMyOrderNoCompleteUrl"]
|
||
data = {"_json_att": ""}
|
||
try:
|
||
queryMyOrderNoCompleteResult = self.session.httpClint.send(queryMyOrderNoCompleteUrl, data)
|
||
except ValueError:
|
||
queryMyOrderNoCompleteResult = {}
|
||
if queryMyOrderNoCompleteResult:
|
||
if queryMyOrderNoCompleteResult.get("data", False) and queryMyOrderNoCompleteResult["data"].get("orderDBList", False):
|
||
return queryMyOrderNoCompleteResult["data"]
|
||
elif queryMyOrderNoCompleteResult.get("data", False) and queryMyOrderNoCompleteResult["data"].get("orderCacheDTO", False):
|
||
if queryMyOrderNoCompleteResult["data"]["orderCacheDTO"].get("message", False):
|
||
print(queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"])
|
||
raise ticketNumOutException(
|
||
queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"])
|
||
else:
|
||
if queryMyOrderNoCompleteResult.get("message", False):
|
||
print(queryMyOrderNoCompleteResult.get("message", False))
|
||
return False
|
||
else:
|
||
return False
|
||
else:
|
||
return False
|
||
|
||
def initNoComplete(self):
|
||
"""
|
||
获取订单前需要进入订单列表页,获取订单列表页session
|
||
:return:
|
||
"""
|
||
initNoCompleteUrl = self.session.urls["initNoCompleteUrl"]
|
||
data = {"_json_att": ""}
|
||
self.session.httpClint.send(initNoCompleteUrl, data)
|
||
|
||
def cancelNoCompleteMyOrder(self, sequence_no):
|
||
"""
|
||
取消订单
|
||
:param sequence_no: 订单编号
|
||
:return:
|
||
"""
|
||
cancelNoCompleteMyOrderUrl = self.session.urls["cancelNoCompleteMyOrder"]
|
||
cancelNoCompleteMyOrderData = {
|
||
"sequence_no": sequence_no,
|
||
"cancel_flag": "cancel_order",
|
||
"_json_att": ""
|
||
}
|
||
cancelNoCompleteMyOrderResult = self.session.httpClint.send(cancelNoCompleteMyOrderUrl,
|
||
cancelNoCompleteMyOrderData)
|
||
if cancelNoCompleteMyOrderResult.get("data", False) and cancelNoCompleteMyOrderResult["data"].get("existError", "N"):
|
||
print(ticket.CANCEL_ORDER_SUCCESS.format(sequence_no))
|
||
time.sleep(2)
|
||
return True
|
||
else:
|
||
print(ticket.CANCEL_ORDER_FAIL.format(sequence_no))
|
||
return False
|