define(function (require, exports, module) { var ajax = require("../platform/webRequest.js"); var param = require("../data.js"); var parser = require("../platform/parser.js"); var getTicketInfo = function (v) { var data = [], info = v.indexOf("#") === -1 ? v : /getSelected\(['"](.*?)['"]\)/i.exec(v)[1].split('#')[11], 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); var seat = { code: sc, name: param.toSeatTypeName(sc), price: sp }; if (st < 3000) { seat.count = st; //TODO 二等软座提交是否和二等座一样都用的MO? //一等软座 7, 二等软座 8 if (sc === "7") { data.push({ code: 'M', name: param.toSeatTypeName('M'), price: sp, count: st }); } else if (sc === "8") { data.push({ code: 'O', name: param.toSeatTypeName('O'), price: sp, count: st }); } else { data.push(seat); } } else { seat.count = st - 3000; seat.code = '0'; seat.name = "无座"; data.push(seat); } }; 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, selltime: null, date: t.queryLeftNewDTO.start_train_date.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3") }; var kp = getTicketInfo(t.queryLeftNewDTO.yp_info); train.tickets = kp; train.ticketMap = _.mapObject(kp, function (e) { return e.code; }); //起售时间 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 = _.mapObject(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, "purpose_codes": student ? "0X00" : "ADULT" }, "json", function () { var data = transferData(this.model); def.resolveWith(data); }, function () { def.reject(); }); return def; }; 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; }; });