Light12306/Web12306/js/otn/orderprocess.js
2014-07-11 18:34:59 +08:00

229 lines
8.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

define(function (require, exports, module) {
var ajax = require("../platform/webRequest.js");
var parser = require("../platform/parser.js");
var submitToken;
var formData;
var submitData;
window.test=function(token, data) {
submitToken = token;
submitData = data;
}
exports.formatJson = function(data) {
return data.replace(/'/g, '"');
};
exports.prepareOrder = function (train, profile) {
var purposeCode = profile.studentTicket ? "0X00" : "ADULT";
var data = "secretStr" + "=" + train.secureStr + "&train_date=" + train.date + "&back_train_date" + "=" + (profile.resign ? profile.resignDate : train.date) + "&tour_flag" + "=" + (profile.resign ? "gc" : "dc") + "&" +
"purpose_codes" + "=" + purposeCode + "&" +
"query_from_station_name" + "=" + profile.fromText + "&" +
"query_to_station_name" + "=" + profile.toText + "&" + (ajax.userAtts ? "_json_att=" + ajax.userAtts : "undefined");
var def = new $.Deferred();
ajax.sendPost("leftTicket/submitOrderRequest", "leftTicket/init", data, "json", function (data) {
if (!data.status) {
def.reject({ msg: parser.getError(data).message });
} else {
ajax.sendPost(profile.resign ? "confirmPassenger/initGc" : "confirmPassenger/initDc", "leftTicket/init", null, "text", function (html) {
parseFields(html);
var token = /var\s*globalRepeatSubmitToken\s*=\s*['"]([^'"]+)["']/i.exec(html) && RegExp.$1;
if (token) {
submitToken = token;
def.resolve({ token: token });
} else {
submitToken = null;
def.reject({ msg: "12306返回的信息无法识别请重试..." });
}
}, function () {
def.reject({ msg: "12306不给力唷请尽快重试..." });
}, true);
}
}, function () {
def.reject({ msg: "12306不给力唷请尽快重试..." });
});
var parseFields = function (html) {
var reg = /(init_seatTypes|defaultTicketTypes|ticket_seat_codeMap|init_cardTypes|ticketInfoForPassengerForm|orderRequestDTO|oldTicketDTOs)\s*=\s*([^;]+);/gi;
var m;
formData = {};
while (m = reg.exec(html)) {
formData[m[1]] = m[2];
}
submitData = JSON.parse(exports.formatJson(formData["ticketInfoForPassengerForm"] || "{}"));
};
return def;
};
exports.fastPrepareOrder = function(train, profile) {
};
exports.fastSubmitOrder = function (train, profile, passenger, randcode) {
};
exports.submitOrder = function (train, profile, passenger, randcode) {
var def = new $.Deferred();
var pas1 = [];
var pas2 = [];
var page = profile.resign ? "confirmPassenger/initGc" : "confirmPassenger/initDc";
var resign = profile.resign;
passenger.forEach(function (e) {
pas1.push(e.seat + "," + "1" + "," + e.passenger_type + "," + e.passenger_name + "," + e.passenger_id_type_code + "," + e.passenger_id_no + "," + e.mobile_no + "," + (profile.resign ? "Y" : "N"));
if (e.passenger_type === "2")
pas2.push(" ");
else pas2.push(e.passenger_name + "," + e.passenger_id_type_code + "," + e.passenger_id_no + "," + e.passenger_type);
});
pas1 = pas1.join("_");
pas2 = pas2.join("_") + "_";
var doneHmd;
var isCheckOrderInfo;
var checkOrderInfo = function () {
def.notify({ msg: "正在检测订单信息..." });
var data = "cancel_flag=2&" +
"bed_level_order_num=000000000000000000000000000000&" +
"passengerTicketStr=" + pas1 + "&" +
"oldPassengerStr=" + pas2 + "&" +
"tour_flag=" + (profile.resign ? "gc" : "dc") +
"&randCode=" + randcode +
"&_json_att=" + ajax.userAtts +
"&REPEAT_SUBMIT_TOKEN=" + submitToken;
ajax.sendPost("confirmPassenger/checkOrderInfo", page, data, "json", function (json) {
if (!json || !json.status || !json.data) {
def.reject({ msg: parser.getError(json) });
} else if (json.data.isRelogin) {
def.reject({ msg: "登录状态异常,请重新登录。" });
} else if (!json.data.submitStatus || json.data.get608Msg) {
def.reject({ msg: json.data.errMsg || json.data.get608Msg || parser.getError(json) });
} else {
isCheckOrderInfo = json.data.isCheckOrderInfo;
doneHmd = json.data.doneHMD;
checkQueueInfo();
}
}, function (json) {
def.reject({ msg: "12306不给力啊唉。出现网络错误了请重试.." });
});
};
var checkQueueInfo = function () {
def.notify({ msg: "正在检测排队信息..." });
var data = {
train_date: new Date(train.date) + '',
train_no: train.id,
stationTrainCode: train.code,
seatType: passenger[0].seat,
fromStationTelecode: train.from.code,
toStationTelecode: train.to.code,
leftTicket: submitData["leftTicketStr"],
purpose_codes: profile.studentTicket ? "0X00" : "00",
_json_att: ajax.userAtts,
REPEAT_SUBMIT_TOKEN: submitToken
};
if (isCheckOrderInfo)
data.isCheckOrderInfo = isCheckOrderInfo;
ajax.sendPost("confirmPassenger/getQueueCount", page, data, "json", function (json) {
if (!json || !json.status || !json.data) {
def.reject({ msg: (parser.getError(json)|| {message:"未知错误"}).message });
} else if (json.data.isRelogin) {
def.reject({ msg: "登录状态异常,请重新登录。" });
} else if (json.data.op_2 === "true") {
def.reject({ msg: "排队人数过多,不允许提交订单。排队人数=" + json.data.countT });
} else {
submitOrder();
}
}, function () {
def.reject({ msg: "12306不给力啊唉。出现网络错误了请重试.." });
});
};
var submitOrder = function () {
def.notify({ msg: "正在提交订单..." });
var url = resign ? "confirmPassenger/confirmResignForQueue" : "confirmPassenger/confirmSingleForQueue";
var data = {
passengerTicketStr: pas1,
oldPassengerStr: pas2,
randCode: randcode,
purpose_codes: profile.studentTicket ? "0X00" : "00",
key_check_isChange: submitData["key_check_isChange"],
leftTicketStr: submitData["leftTicketStr"],
train_location: submitData["train_location"],
_json_att: ajax.userAtts,
REPEAT_SUBMIT_TOKEN: submitToken
}
ajax.sendPost(url, page, data, "json", function (json) {
if (!json || !json.status || !json.data) {
def.reject({ msg: parser.getError(json) });
} else if (!json.data.submitStatus) {
def.reject({ msg: json.data.errMsg || "提交订单错误,错误原因未知..." });
} else {
waitQueueToComplete();
}
}, function () {
def.reject({ msg: "12306不给力啊唉。出现网络错误了请重试.." });
});
};
var waitQueueToComplete = function () {
def.notify({ msg: "正在等待订单处理..." });
var url = "confirmPassenger/queryOrderWaitTime?random=" + Math.random() + "&tourFlag=" + (resign ? "dc" : "gc") + "&_json_att=" + ajax.userAtts + "&REPEAT_SUBMIT_TOKEN=" + submitToken;
var callback = function (json) {
if (!json || !json.status || !json.data) {
def.notify({ msg: "检查队列时出现错误,重试中..." });
setTimeout(sendRequest, 2000);
} else if (!json.data.queryOrderWaitTimeStatus) {
def.reject({ msg: (parser.getError(json) || { message: "检查队列时出现错误,请重试..." }).message });
} else if (json.data.waitTime === -1) {
def.resolve({ orderId: json.data.orderId });
} else if (json.data.waitTime < 0) {
def.reject({ msg: json.data.msg || "出票失败..." });
} else {
def.notify({ msg: "等待订单处理(预计 " + formatSeconds(json.data.waitTime) + " 完成,排队 " + json.data.waitCount + " 人)..." });
setTimeout(sendRequest, 2000);
}
};
var sendRequest = function () {
ajax.sendGet(url, page, null, "json", callback, function () {
def.notify({ msg: "检查队列时出现错误,重试中..." });
setTimeout(sendRequest, 2000);
});
};
var formatSeconds = function (num) {
if (num < 60)
return num + "秒";
var str = (num % 60) + "秒";
num = Math.round(num / 60);
str = (num % 60) + "分" + str;
if (num >= 60) {
num = Math.round(num / 60);
str = num + "时" + str;
}
return str;
};
sendRequest();
};
checkOrderInfo();
return def;
};
});