|
@@ -71,9 +71,9 @@ function isBlackScreenFormat(parts) {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 是否使用新增黑屏解析器。
|
|
* 是否使用新增黑屏解析器。
|
|
|
- * - 7/13/14等原逻辑不支持的黑屏字段数直接启用
|
|
|
|
|
- * - 10/11字段若第3列才是日期,原解析会错位,启用
|
|
|
|
|
|
|
+ * - 9/10/11等字段若第2列为舱位、第3列才是日期,原解析会错位,启用
|
|
|
* - 12字段保留原 parseFormat12;仅当扩展字段中出现 T2--、--T2、T1 等航站楼标识时启用
|
|
* - 12字段保留原 parseFormat12;仅当扩展字段中出现 T2--、--T2、T1 等航站楼标识时启用
|
|
|
|
|
+ * - 7/13/14等原逻辑不支持的黑屏字段数直接启用
|
|
|
*/
|
|
*/
|
|
|
function shouldUseBlackScreenParser(parts) {
|
|
function shouldUseBlackScreenParser(parts) {
|
|
|
if (!isBlackScreenFormat(parts)) return false
|
|
if (!isBlackScreenFormat(parts)) return false
|
|
@@ -82,7 +82,7 @@ function shouldUseBlackScreenParser(parts) {
|
|
|
return parts.slice(7).some(isTerminalToken)
|
|
return parts.slice(7).some(isTerminalToken)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return parts.length !== 9
|
|
|
|
|
|
|
+ return true
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -137,6 +137,8 @@ function parseBlackScreenFormat(parts) {
|
|
|
arrivalTime,
|
|
arrivalTime,
|
|
|
terminal: terminalInfo.arrivalTerminal,
|
|
terminal: terminalInfo.arrivalTerminal,
|
|
|
bookingCode: terminalInfo.departureTerminal,
|
|
bookingCode: terminalInfo.departureTerminal,
|
|
|
|
|
+ departureTerminal: terminalInfo.departureTerminal,
|
|
|
|
|
+ arrivalTerminal: terminalInfo.arrivalTerminal,
|
|
|
aircraft,
|
|
aircraft,
|
|
|
duration,
|
|
duration,
|
|
|
plusDays,
|
|
plusDays,
|
|
@@ -144,7 +146,7 @@ function parseBlackScreenFormat(parts) {
|
|
|
statusCode,
|
|
statusCode,
|
|
|
stopCount,
|
|
stopCount,
|
|
|
serviceClass,
|
|
serviceClass,
|
|
|
- sequence,
|
|
|
|
|
|
|
+ sequence: sequence || terminalInfo.terminalSequence,
|
|
|
blackScreenExtras: extras
|
|
blackScreenExtras: extras
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
@@ -156,6 +158,9 @@ function parseBlackScreenFormat(parts) {
|
|
|
function isTerminalToken(value) {
|
|
function isTerminalToken(value) {
|
|
|
return /^T\d+--$/.test(value) ||
|
|
return /^T\d+--$/.test(value) ||
|
|
|
/^--T\d+$/.test(value) ||
|
|
/^--T\d+$/.test(value) ||
|
|
|
|
|
+ /^T\d+--T\d+$/.test(value) ||
|
|
|
|
|
+ /^T\d+-T\d+$/.test(value) ||
|
|
|
|
|
+ /^T\d+\/T\d+$/.test(value) ||
|
|
|
/^T\d+$/.test(value) ||
|
|
/^T\d+$/.test(value) ||
|
|
|
/^T\d+T\d+$/.test(value)
|
|
/^T\d+T\d+$/.test(value)
|
|
|
}
|
|
}
|
|
@@ -163,27 +168,61 @@ function isTerminalToken(value) {
|
|
|
function parseBlackScreenTerminals(extras) {
|
|
function parseBlackScreenTerminals(extras) {
|
|
|
let departureTerminal = ''
|
|
let departureTerminal = ''
|
|
|
let arrivalTerminal = ''
|
|
let arrivalTerminal = ''
|
|
|
|
|
+ let terminalSequence = ''
|
|
|
|
|
|
|
|
extras.forEach(item => {
|
|
extras.forEach(item => {
|
|
|
if (/^T\d+--$/.test(item)) {
|
|
if (/^T\d+--$/.test(item)) {
|
|
|
- departureTerminal = item.replace('--', '')
|
|
|
|
|
|
|
+ departureTerminal = normalizeTerminalCode(item.replace('--', ''))
|
|
|
} else if (/^--T\d+$/.test(item)) {
|
|
} else if (/^--T\d+$/.test(item)) {
|
|
|
- arrivalTerminal = item.replace('--', '')
|
|
|
|
|
|
|
+ arrivalTerminal = normalizeTerminalCode(item.replace('--', ''))
|
|
|
|
|
+ } else if (/^T\d+--T\d+$/.test(item)) {
|
|
|
|
|
+ const terminals = item.split('--')
|
|
|
|
|
+ departureTerminal = normalizeTerminalCode(terminals[0]) || departureTerminal
|
|
|
|
|
+ arrivalTerminal = normalizeTerminalCode(terminals[1]) || arrivalTerminal
|
|
|
|
|
+ } else if (/^T\d+-T\d+$/.test(item)) {
|
|
|
|
|
+ const terminals = item.split('-')
|
|
|
|
|
+ departureTerminal = normalizeTerminalCode(terminals[0]) || departureTerminal
|
|
|
|
|
+ arrivalTerminal = normalizeTerminalCode(terminals[1]) || arrivalTerminal
|
|
|
|
|
+ } else if (/^T\d+\/T\d+$/.test(item)) {
|
|
|
|
|
+ const terminals = item.split('/')
|
|
|
|
|
+ departureTerminal = normalizeTerminalCode(terminals[0]) || departureTerminal
|
|
|
|
|
+ arrivalTerminal = normalizeTerminalCode(terminals[1]) || arrivalTerminal
|
|
|
|
|
+ } else if (/^T\d{2}$/.test(item)) {
|
|
|
|
|
+ arrivalTerminal = normalizeTerminalCode(item.slice(0, 2))
|
|
|
|
|
+ terminalSequence = item.slice(2)
|
|
|
} else if (/^T\d+$/.test(item)) {
|
|
} else if (/^T\d+$/.test(item)) {
|
|
|
- arrivalTerminal = item
|
|
|
|
|
|
|
+ arrivalTerminal = normalizeTerminalCode(item)
|
|
|
} else if (/^T\d+T\d+$/.test(item)) {
|
|
} else if (/^T\d+T\d+$/.test(item)) {
|
|
|
const terminals = item.match(/T\d+/g) || []
|
|
const terminals = item.match(/T\d+/g) || []
|
|
|
- departureTerminal = terminals[0] || departureTerminal
|
|
|
|
|
- arrivalTerminal = terminals[1] || arrivalTerminal
|
|
|
|
|
|
|
+ departureTerminal = normalizeTerminalCode(terminals[0]) || departureTerminal
|
|
|
|
|
+ arrivalTerminal = normalizeTerminalCode(terminals[1]) || arrivalTerminal
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
departureTerminal,
|
|
departureTerminal,
|
|
|
- arrivalTerminal
|
|
|
|
|
|
|
+ arrivalTerminal,
|
|
|
|
|
+ terminalSequence
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+function normalizeTerminalCode(value) {
|
|
|
|
|
+ if (value === undefined || value === null) return ''
|
|
|
|
|
+
|
|
|
|
|
+ const terminal = String(value).trim()
|
|
|
|
|
+ if (!terminal) return ''
|
|
|
|
|
+
|
|
|
|
|
+ if (/^T\d+$/i.test(terminal)) {
|
|
|
|
|
+ return terminal.toUpperCase()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (/^\d+$/.test(terminal)) {
|
|
|
|
|
+ return 'T' + terminal
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return terminal
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 解析9字段格式(最常用)
|
|
* 解析9字段格式(最常用)
|
|
|
* CA878 SA31MAY CPHPEK 1905 1000+1 3 T3 359 08H55M
|
|
* CA878 SA31MAY CPHPEK 1905 1000+1 3 T3 359 08H55M
|
|
@@ -356,9 +395,14 @@ function buildFlightInfo(params) {
|
|
|
const {
|
|
const {
|
|
|
flightNumber, actionCode, dateStr, origin, destination,
|
|
flightNumber, actionCode, dateStr, origin, destination,
|
|
|
departureTime, arrivalTime, terminal, bookingCode, aircraft, duration,
|
|
departureTime, arrivalTime, terminal, bookingCode, aircraft, duration,
|
|
|
- plusDays = 0, cabin, statusCode, stopCount, serviceClass, sequence
|
|
|
|
|
|
|
+ plusDays = 0, cabin, statusCode, stopCount, serviceClass, sequence,
|
|
|
|
|
+ departureTerminal, arrivalTerminal
|
|
|
} = params
|
|
} = params
|
|
|
|
|
|
|
|
|
|
+ const finalDepartureTerminal = normalizeTerminalCode(departureTerminal !== undefined ? departureTerminal : '')
|
|
|
|
|
+ const finalArrivalTerminal = normalizeTerminalCode(arrivalTerminal !== undefined ? arrivalTerminal : terminal)
|
|
|
|
|
+ const finalArriveTerminal = finalArrivalTerminal
|
|
|
|
|
+
|
|
|
// 解析日期
|
|
// 解析日期
|
|
|
const day = parseInt(dateStr.slice(0, 2))
|
|
const day = parseInt(dateStr.slice(0, 2))
|
|
|
const monthStr = dateStr.slice(2)
|
|
const monthStr = dateStr.slice(2)
|
|
@@ -432,6 +476,9 @@ function buildFlightInfo(params) {
|
|
|
formatted: formatTime(arrHour, arrMinute)
|
|
formatted: formatTime(arrHour, arrMinute)
|
|
|
},
|
|
},
|
|
|
terminal: terminal,
|
|
terminal: terminal,
|
|
|
|
|
+ cfhzl: finalDepartureTerminal,
|
|
|
|
|
+ ddhzl: finalArrivalTerminal,
|
|
|
|
|
+ ddTerminal: finalArrivalTerminal,
|
|
|
cabin: cabin,
|
|
cabin: cabin,
|
|
|
statusCode: statusCode,
|
|
statusCode: statusCode,
|
|
|
stopCount: stopCount,
|
|
stopCount: stopCount,
|