2014-06-20 20:55:14 +08:00
|
|
|
|
define(function (require, exports, module) {
|
|
|
|
|
var ajax = require("../platform/webRequest.js");
|
2014-06-26 22:24:54 +08:00
|
|
|
|
var param = require("../data.js");
|
2014-07-01 20:07:44 +08:00
|
|
|
|
var parser = require("../platform/parser.js");
|
2014-06-20 20:55:14 +08:00
|
|
|
|
|
|
|
|
|
var getTicketInfo = function (v) {
|
2014-06-26 22:24:54 +08:00
|
|
|
|
var data = [], info = v.indexOf("#") === -1 ? v : /getSelected\(['"](.*?)['"]\)/i.exec(v)[1].split('#')[11],
|
2014-06-20 20:55:14 +08:00
|
|
|
|
match = info.match(/([A-Z\d])0*?([\*\d]{5})0*?(\d{4})/gi);
|
|
|
|
|
|
|
|
|
|
for (var j in match) {
|
|
|
|
|
var m = /([A-Z\d])0*?([\*\d]{5})0*?(\d{4})/i.exec(match[j]);
|
|
|
|
|
var sc = m[1];
|
|
|
|
|
var sp = m[2][0] == '*' ? null : parseInt(m[2], 10);
|
|
|
|
|
var st = parseInt(m[3], 10);
|
2014-06-26 22:24:54 +08:00
|
|
|
|
var seat = { code: sc, name: param.toSeatTypeName(sc), price: sp };
|
2014-06-20 20:55:14 +08:00
|
|
|
|
if (st < 3000) {
|
2014-06-26 22:24:54 +08:00
|
|
|
|
seat.count = st;
|
2014-06-20 20:55:14 +08:00
|
|
|
|
|
2014-06-26 22:24:54 +08:00
|
|
|
|
//TODO 二等软座提交是否和二等座一样都用的MO?
|
2014-06-20 20:55:14 +08:00
|
|
|
|
//一等软座 7, 二等软座 8
|
2014-06-26 22:24:54 +08:00
|
|
|
|
if (sc === "7") {
|
|
|
|
|
data.push({ code: 'M', name: param.toSeatTypeName('M'), price: sp, count: st });
|
2014-06-20 20:55:14 +08:00
|
|
|
|
}
|
2014-06-26 22:24:54 +08:00
|
|
|
|
else if (sc === "8") {
|
|
|
|
|
data.push({ code: 'O', name: param.toSeatTypeName('O'), price: sp, count: st });
|
|
|
|
|
} else {
|
|
|
|
|
data.push(seat);
|
2014-06-20 20:55:14 +08:00
|
|
|
|
}
|
|
|
|
|
} else {
|
2014-06-26 22:24:54 +08:00
|
|
|
|
seat.count = st - 3000;
|
|
|
|
|
seat.code = '0';
|
|
|
|
|
seat.name = "无座";
|
|
|
|
|
data.push(seat);
|
2014-06-20 20:55:14 +08:00
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
return data;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var transferData = function (data) {
|
|
|
|
|
var result = data;
|
|
|
|
|
if (!Array.isArray(result.data) || !result.data.length || !result.data[0].queryLeftNewDTO) return null;
|
|
|
|
|
|
|
|
|
|
var trainData = { raw: result, rawTrainMap: {}, trainMap: {}, auto: null, nextTime: null };
|
|
|
|
|
|
|
|
|
|
_.each(result.data, function (t) {
|
|
|
|
|
var train = {
|
|
|
|
|
id: t.queryLeftNewDTO.train_no,
|
|
|
|
|
code: t.queryLeftNewDTO.station_train_code,
|
|
|
|
|
available: t.queryLeftNewDTO.canWebBuy === 'Y' ? 1 : 0,
|
|
|
|
|
start: {
|
|
|
|
|
code: t.queryLeftNewDTO.start_station_telecode,
|
|
|
|
|
name: t.queryLeftNewDTO.start_station_name,
|
|
|
|
|
},
|
|
|
|
|
from: {
|
|
|
|
|
code: t.queryLeftNewDTO.from_station_telecode,
|
|
|
|
|
fromStationNo: t.queryLeftNewDTO.from_station_no,
|
|
|
|
|
name: t.queryLeftNewDTO.from_station_name,
|
|
|
|
|
endpoint: t.queryLeftNewDTO.from_station_telecode == t.queryLeftNewDTO.start_station_telecode,
|
|
|
|
|
time: t.queryLeftNewDTO.start_time
|
|
|
|
|
},
|
|
|
|
|
to: {
|
|
|
|
|
code: t.queryLeftNewDTO.to_station_telecode,
|
|
|
|
|
toStationNo: t.queryLeftNewDTO.to_station_no,
|
|
|
|
|
name: t.queryLeftNewDTO.to_station_name,
|
|
|
|
|
endpoint: t.queryLeftNewDTO.end_station_telecode == t.queryLeftNewDTO.to_station_telecode,
|
|
|
|
|
time: t.queryLeftNewDTO.arrive_time
|
|
|
|
|
},
|
|
|
|
|
elapsedTime: {
|
|
|
|
|
days: t.queryLeftNewDTO.day_difference,
|
|
|
|
|
total: t.queryLeftNewDTO.lishi
|
|
|
|
|
},
|
|
|
|
|
end: {
|
|
|
|
|
code: t.queryLeftNewDTO.end_station_telecode,
|
|
|
|
|
name: t.queryLeftNewDTO.end_station_name,
|
|
|
|
|
},
|
|
|
|
|
ypinfo: t.queryLeftNewDTO.yp_info,
|
|
|
|
|
ypinfo_ex: t.queryLeftNewDTO.yp_ex,
|
|
|
|
|
locationCode: t.queryLeftNewDTO.location_code,
|
|
|
|
|
controlDay: t.queryLeftNewDTO.control_day,
|
|
|
|
|
supportCard: t.queryLeftNewDTO.is_support_card,
|
|
|
|
|
saleTime: t.queryLeftNewDTO.sale_time,
|
|
|
|
|
secureStr: t.secretStr,
|
2014-06-27 22:25:42 +08:00
|
|
|
|
selltime: null,
|
|
|
|
|
date: t.queryLeftNewDTO.start_train_date.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3")
|
2014-06-20 20:55:14 +08:00
|
|
|
|
};
|
2014-06-26 22:24:54 +08:00
|
|
|
|
var kp = getTicketInfo(t.queryLeftNewDTO.yp_info);
|
|
|
|
|
train.tickets = kp;
|
|
|
|
|
train.ticketMap = _.mapObject(kp, function (e) { return e.code; });
|
2014-06-20 20:55:14 +08:00
|
|
|
|
|
|
|
|
|
//起售时间
|
|
|
|
|
var selltimem = /(0*(\d+)月0*(\d+)日)?(\d+)\s*点\s*((\d+)分)?\s*起售/i.exec(t.buttonTextInfo.replace(/<.*?>/g, ''));
|
|
|
|
|
if (selltimem) {
|
|
|
|
|
train.available = -1;
|
|
|
|
|
train.selltime = new Date();
|
|
|
|
|
train.selltime.setHours(parseInt(selltimem[4]));
|
|
|
|
|
train.selltime.setMinutes(parseInt(selltimem[6] || "0", 10));
|
|
|
|
|
train.selltime.setSeconds(0);
|
|
|
|
|
if (selltimem[1]) {
|
|
|
|
|
//带日期
|
|
|
|
|
train.selltime.setMonth(parseInt(selltimem[2]) - 1);
|
|
|
|
|
train.selltime.setDate(parseInt(selltimem[3]));
|
|
|
|
|
if (train.selltime.getMonth() < new Date().getMonth()) {
|
|
|
|
|
train.selltime.setFullYear(train.selltime.getFullYear() + 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
trainData.rawTrainMap[train.id] = t;
|
|
|
|
|
trainData.trainMap[train.id] = train;
|
|
|
|
|
});
|
|
|
|
|
trainData.original = _.values(trainData.trainMap);
|
|
|
|
|
trainData.available = trainData.original;
|
|
|
|
|
trainData.trainCodes = _.pluck(trainData.original, "code");
|
|
|
|
|
trainData.filtered = [];
|
|
|
|
|
trainData.include = trainData.available;
|
|
|
|
|
|
|
|
|
|
//执行车次预过滤。过滤内容:出发地,目标地,时间
|
|
|
|
|
$(document).trigger("filterTrains", trainData);
|
|
|
|
|
//处理车次
|
|
|
|
|
$(document).trigger("processTrains", trainData);
|
|
|
|
|
|
|
|
|
|
//过滤数据
|
|
|
|
|
if (trainData.filtered && trainData.filtered.length) {
|
|
|
|
|
//从原始数据中删除
|
|
|
|
|
var orgMap = _.toMap(result.data, function (e) {
|
|
|
|
|
return e.queryLeftNewDTO.train_no;
|
|
|
|
|
});
|
|
|
|
|
var filtered = _.map(trainData.filtered, function (t) {
|
|
|
|
|
return orgMap[t.id];
|
|
|
|
|
});
|
|
|
|
|
trainData.rawDataFiltered = _.without.apply(null, [result.data].concat(filtered));
|
|
|
|
|
result.data = trainData.rawDataFiltered;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return trainData;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
exports.queryTicket = function (from, to, date, student) {
|
|
|
|
|
var def = new $.Deferred();
|
|
|
|
|
|
|
|
|
|
ajax.sendGet("leftTicket/query", "leftTicket/init", {
|
|
|
|
|
"leftTicketDTO.train_date": date,
|
|
|
|
|
"leftTicketDTO.from_station": from,
|
|
|
|
|
"leftTicketDTO.to_station": to,
|
2014-07-02 18:43:28 +08:00
|
|
|
|
"purpose_codes": student ? "0X00" : "ADULT"
|
2014-06-20 20:55:14 +08:00
|
|
|
|
}, "json", function () {
|
|
|
|
|
var data = transferData(this.model);
|
|
|
|
|
def.resolveWith(data);
|
|
|
|
|
}, function () {
|
|
|
|
|
def.reject();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return def;
|
|
|
|
|
};
|
2014-07-01 20:07:44 +08:00
|
|
|
|
|
|
|
|
|
exports.queryTrainStop = function (id, from, to, date) {
|
|
|
|
|
var data = {
|
|
|
|
|
train_no: id,
|
|
|
|
|
from_station_telecode: from,
|
|
|
|
|
to_station_telecode: to,
|
|
|
|
|
depart_date: date
|
|
|
|
|
};
|
|
|
|
|
var def = new $.Deferred();
|
|
|
|
|
ajax.sendGet("czxx/queryByTrainNo", "leftTicket/init", data, "json", function (json) {
|
|
|
|
|
if (!json || !json.data || !json.data.data) {
|
|
|
|
|
def.reject((parser.getError(json) || { message: "查询失败" }).message);
|
|
|
|
|
} else {
|
|
|
|
|
def.resolve(json.data.data);
|
|
|
|
|
}
|
|
|
|
|
}, function () {
|
|
|
|
|
def.reject("网络错误");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return def;
|
|
|
|
|
};
|
2014-06-20 20:55:14 +08:00
|
|
|
|
});
|