From 18d9200095de14a20a37c6963a8bdf580f1a83f8 Mon Sep 17 00:00:00 2001 From: iFish Date: Mon, 14 Jul 2014 17:58:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=AF=E7=94=A8=E5=BF=AB=E9=80=9F=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E6=A8=A1=E5=BC=8F=EF=BC=88=E4=BB=85=E5=B8=B8=E8=A7=84?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Web12306/js/otn/orderprocess.js | 172 +++++++++++++++++++++- Web12306/js/ui/ui-order-submit-process.js | 7 +- Web12306/js/ui/ui-submit-order.js | 4 +- 3 files changed, 171 insertions(+), 12 deletions(-) diff --git a/Web12306/js/otn/orderprocess.js b/Web12306/js/otn/orderprocess.js index 9e3febd..5e6513d 100644 --- a/Web12306/js/otn/orderprocess.js +++ b/Web12306/js/otn/orderprocess.js @@ -6,12 +6,7 @@ var formData; var submitData; - window.test=function(token, data) { - submitToken = token; - submitData = data; - } - - exports.formatJson = function(data) { + exports.formatJson = function (data) { return data.replace(/'/g, '"'); }; @@ -61,12 +56,173 @@ return def; }; - exports.fastPrepareOrder = function(train, profile) { + exports.fastPrepareOrder = function (train, profile, passenger) { + var purposeCode = profile.studentTicket ? "0X00" : "ADULT"; + var pas1 = []; + var pas2 = []; + 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 data = "secretStr" + "=" + train.secureStr + "&train_date=" + 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") + + "&cancel_flag=2&bed_level_order_num=000000000000000000000000000000&" + + "passengerTicketStr=" + pas1 + "&" + + "oldPassengerStr=" + pas2 + ; + + var def = new $.Deferred(); + + var autoSubmitRequest = function () { + ajax.sendPost("confirmPassenger/autoSubmitOrderRequest", "leftTicket/init", data, "json", function (json) { + if (!json.status || !json.data) { + def.reject({ msg: parser.getError(json).message || "12306返回了未知的状态信息,请刷新重试。" }); + } else if (json.data.isRelogin) { + def.reject({ msg: "请重新登录" }); + } else if (json.data.errMsg) { + def.reject({ msg: "无法提交订单:" + json.data.errMsg }); + } else { + var arr = json.data.result.split('#'); + submitData = { + key_check_isChange: arr[1], + leftTicketStr: arr[2], + train_location: arr[0], + async: arr[3] + }; + checkQueueInfo(); + } + }, function () { + def.reject({ msg: "12306不给力唷,请尽快重试..." }); + }); + }; + var checkQueueInfo = function () { + def.notify({ msg: "正在检测排队信息..." }); + + + ajax.sendPost("confirmPassenger/getQueueCountAsync", "leftTicket/init", { + 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" : "ADULT", + _json_att: ajax.userAtts + }, "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 { + def.resolve({ success: true }); + } + }, function () { + def.reject({ msg: "12306不给力啊,唉。出现网络错误了,请重试.." }); + }); + }; + autoSubmitRequest(); + + return def; }; exports.fastSubmitOrder = function (train, profile, passenger, randcode) { + var def = new $.Deferred(); + var pas1 = []; + var pas2 = []; + + 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 submitOrder = function () { + def.notify({ msg: "正在提交订单..." }); + + var url = "confirmPassenger/confirmSingleForQueueAsys"; + var data = { + passengerTicketStr: pas1, + oldPassengerStr: pas2, + randCode: randcode, + purpose_codes: profile.studentTicket ? "0X00" : "ADULT", + key_check_isChange: submitData["key_check_isChange"], + leftTicketStr: submitData["leftTicketStr"], + train_location: submitData["train_location"], + _json_att: ajax.userAtts + } + + ajax.sendPost(url, "leftTicket/init", 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=" + "dc" + "&_json_att=" + ajax.userAtts; + 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, "leftTicket/init", 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(); + }; + submitOrder(); + + return def; }; exports.submitOrder = function (train, profile, passenger, randcode) { @@ -137,7 +293,7 @@ ajax.sendPost("confirmPassenger/getQueueCount", page, data, "json", function (json) { if (!json || !json.status || !json.data) { - def.reject({ msg: (parser.getError(json)|| {message:"未知错误"}).message }); + def.reject({ msg: (parser.getError(json) || { message: "未知错误" }).message }); } else if (json.data.isRelogin) { def.reject({ msg: "登录状态异常,请重新登录。" }); } else if (json.data.op_2 === "true") { diff --git a/Web12306/js/ui/ui-order-submit-process.js b/Web12306/js/ui/ui-order-submit-process.js index 0723ae9..596f9fa 100644 --- a/Web12306/js/ui/ui-order-submit-process.js +++ b/Web12306/js/ui/ui-order-submit-process.js @@ -20,8 +20,8 @@ pPassengers = ps.selectedPassenger; exports.prepareOrder().done(function () { exports.showConfirmOrderUi(); }); }); - so.on("requireResubmitOrder", function() { - exports.prepareOrder().done(function() { exports.showConfirmOrderUi(); }); + so.on("requireResubmitOrder", function () { + exports.prepareOrder().done(function () { exports.showConfirmOrderUi(); }); }); }; @@ -65,7 +65,8 @@ exports.prepareOrder = function () { var tip = new mp.MessagePopup("loading", "正在准备提交订单,请稍等..."); tip.show(); - var def = op.prepareOrder(pTrain, pProfile); + + var def = pProfile.resign ? op.prepareOrder(pTrain, pProfile) : op.fastPrepareOrder(pTrain, pProfile, pPassengers); def.done(function () { tip.close(); diff --git a/Web12306/js/ui/ui-submit-order.js b/Web12306/js/ui/ui-submit-order.js index 69a26a8..1421b73 100644 --- a/Web12306/js/ui/ui-submit-order.js +++ b/Web12306/js/ui/ui-submit-order.js @@ -60,6 +60,8 @@ } $("#ticket-submit-info").find(">section").hide().first().show().find(":text").val("")[0].select(); submitProgress.hide(); + + $("#ticket-submit-info .ticket-submit-vc").attr("data-target", profile.resign ? "order" : "login"); if (!vc_inited) { vc_inited = true; vc.load($("#ticket-submit-info .ticket-submit-vc")); @@ -84,7 +86,7 @@ submitBtn[0].disabled = true; submitProgress.removeClass().addClass("ticket-submit-status ticket-submit-status-loading").show().find("span").html("正在提交订单中..."); - submitDef = op.submitOrder(pTrain, pProfile, pPassengers, randCode); + submitDef = pProfile.resign ? op.submitOrder(pTrain, pProfile, pPassengers, randCode) : op.fastSubmitOrder(pTrain, pProfile, pPassengers, randCode); submitDef.done(function (data) { that.fireEvent("orderSuccess", data); var dom = $("#ticket-submit-info").find("section.ticket-submit-info-vc").hide().end().find("section.ticket-submit-info-status-ok").show();