12306/inter/GetPassengerDTOs.py

124 lines
6.2 KiB
Python
Raw Normal View History

# coding=utf-8
2019-01-12 07:26:02 +00:00
import json
from config.TicketEnmu import ticket
from myException.PassengerUserException import PassengerUserException
2018-09-21 06:40:46 +00:00
import wrapcache
2019-09-01 04:41:25 +00:00
import TickerConfig
class getPassengerDTOs:
"""
获取乘客信息
:return:
"""
2019-01-12 07:26:02 +00:00
def __init__(self, session, ticket_peoples=None, set_type=None, is_more_ticket_num=None):
"""
:param session: 登录实例
:param ticket_peoples: 乘客
:param set_type: 坐席
"""
2019-01-12 07:26:02 +00:00
if ticket_peoples is None:
ticket_peoples = []
self.session = session
self.ticket_peoples = ticket_peoples
2018-09-21 06:40:46 +00:00
self.is_more_ticket_num = is_more_ticket_num
2019-01-12 07:26:02 +00:00
self.set_type = set_type
def sendGetPassengerDTOs(self):
2019-01-12 07:26:02 +00:00
getPassengerDTOsResult = self.session.httpClint.send(self.session.urls["get_passengerDTOs"], json.dumps({"_json_att": ""}))
if getPassengerDTOsResult.get("data", False) and getPassengerDTOsResult["data"].get("normal_passengers", False):
normal_passengers = getPassengerDTOsResult['data']['normal_passengers']
_normal_passenger = [normal_passengers[i] for i in range(len(normal_passengers)) if
normal_passengers[i]["passenger_name"] in self.ticket_peoples]
return _normal_passenger if _normal_passenger else [normal_passengers[0]] # 如果配置乘车人没有在账号,则默认返回第一个用户
else:
if getPassengerDTOsResult.get("data", False) and getPassengerDTOsResult['data'].get("exMsg", False):
print(getPassengerDTOsResult['data'].get("exMsg", False))
elif getPassengerDTOsResult.get('messages', False):
print(getPassengerDTOsResult.get('messages', False))
else:
2019-01-12 07:26:02 +00:00
print(u"警告:您的账号可能买票有问题,获取不到联系人,请测试是否能正常下单,在捡漏或者购票!!!")
print(u"警告:您的账号可能买票有问题,获取不到联系人,请测试是否能正常下单,在捡漏或者购票!!!")
print(u"警告:您的账号可能买票有问题,获取不到联系人,请测试是否能正常下单,在捡漏或者购票!!!")
# raise PassengerUserException(ticket.DTO_NOT_FOUND)
def getPassengerTicketStr(self, set_type):
"""
获取getPassengerTicketStr 提交对应的代号码
:param str: 坐席
:return:
"""
passengerTicketStr = {
'一等座': 'M',
'特等座': 'P',
'二等座': 'O',
'商务座': 9,
'硬座': 1,
'无座': 1,
2019-01-06 04:16:45 +00:00
'软座': 2,
'软卧': 4,
'硬卧': 3,
}
return str(passengerTicketStr[set_type.replace(' ', '')])
2019-09-02 12:19:24 +00:00
def getPassengerTicketStrListAndOldPassengerStr(self, secretStr, secretList):
"""
获取提交车次人内容格式
passengerTicketStr O,0,1,文贤平,1,43052419950223XXXX,15618715583,N_O,0,1,梁敏,1,43052719920118XXXX,,N
oldPassengerStr 文贤平,1,43052719920118XXXX,1_梁敏,1,43052719920118XXXX,1
2018-09-21 06:40:46 +00:00
ps: 如果is_more_ticket打开了的话那就是读取联系人列表里面前符合车次数量的前几个联系人
:return:
"""
passengerTicketStrList = []
oldPassengerStr = []
2019-09-01 04:41:25 +00:00
tickers = []
set_type = ""
2018-09-21 06:40:46 +00:00
if wrapcache.get("user_info"): # 如果缓存中有联系人方式,则读取缓存中的联系人
user_info = wrapcache.get("user_info")
2019-01-16 05:24:56 +00:00
print(u"使用缓存中查找的联系人信息")
2018-09-21 06:40:46 +00:00
else:
user_info = self.sendGetPassengerDTOs()
wrapcache.set("user_info", user_info, timeout=9999999)
if not user_info:
raise PassengerUserException(ticket.DTO_NOT_IN_LIST)
2018-09-21 06:40:46 +00:00
if len(user_info) < self.is_more_ticket_num: # 如果乘车人填错了导致没有这个乘车人的话,可能乘车人数会小于自动乘车人
self.is_more_ticket_num = len(user_info)
2019-09-02 12:19:24 +00:00
if secretStr:
2019-09-01 04:41:25 +00:00
set_type = self.getPassengerTicketStr(self.set_type)
if self.is_more_ticket_num is 1:
passengerTicketStrList.append(
2019-09-01 04:41:25 +00:00
'0,' + user_info[0]['passenger_type'] + "," + user_info[0][
"passenger_name"] + "," +
user_info[0]['passenger_id_type_code'] + "," + user_info[0]['passenger_id_no'] + "," +
user_info[0]['mobile_no'] + ',N,' + user_info[0]["allEncStr"])
oldPassengerStr.append(
2019-09-01 04:41:25 +00:00
user_info[0]['passenger_name'] + "," + user_info[0]['passenger_id_type_code'] + "," +
user_info[0]['passenger_id_no'] + "," + user_info[0]['passenger_type'] + '_')
else:
for i in range(self.is_more_ticket_num):
passengerTicketStrList.append(
'0,' + user_info[i]['passenger_type'] + "," + user_info[i][
"passenger_name"] + "," + user_info[i]['passenger_id_type_code'] + "," + user_info[i][
'passenger_id_no'] + "," + user_info[i]['mobile_no'] + ',N,' + user_info[i]["allEncStr"] + '_' + set_type)
oldPassengerStr.append(
user_info[i]['passenger_name'] + "," + user_info[i]['passenger_id_type_code'] + "," +
user_info[i]['passenger_id_no'] + "," + user_info[i]['passenger_type'] + '_')
2019-09-02 12:19:24 +00:00
elif secretList:
2019-09-01 04:41:25 +00:00
"""
候补订单有多少个联系人就候补多少个联系人了没有优先提交之说
1#XXXX#1#***************77X#bf6ae40d3655ae7eff005ee21d95876b38ab97a8031b464bc2f74a067e3ec957;
"""
for user in user_info:
tickers.append(f"1#{user['passenger_name']}#1#{user['passenger_id_no']}#{user['allEncStr']};")
return {
"passengerTicketStrList": set_type + "," + ",".join(passengerTicketStrList),
2019-09-01 04:41:25 +00:00
"passengerTicketStrByAfterLate": "".join(tickers),
"oldPassengerStr": "".join(oldPassengerStr),
"code": ticket.SUCCESS_CODE,
"set_type": set_type,
"status": True,
"user_info": user_info,
}