Files
my-vault/04_Archive/Projects/Airport/Maintenance.md
T

623 lines
16 KiB
Markdown

sunlogin
id:orkj8471777m7nfe
```password
m2mg2Lh*T9w
```
remote: 795906644
```password
840la5
```
windows password:
```
gzzn@123
```
```
gzzn@123
```
流水号 0026
类型 PLN
报文 ZCZC BTZ0026 060338 QU LLFZP8X . QU LLFZP8X .XIYOC9H 060338 PLN 07MAY 01 9H8313 B1163 XIY0455(07MAY) LLF 02 9H8313 B1163 LLF0755(07MAY) HAK 03 9H8314 B1163 HAK1050(07MAY) LLF 04 9H8314 B1163 LLF1405(07MAY) XIY = NNNN
接收时间 2025-05-07 12:16:32
```
ZCZC
BTZ0026 060338 QU LLFZP8X . QU LLFZP8X .XIYOC9H 060338
PLN 07MAY
01 9H8313 B1163 XIY0455(07MAY) LLF
02 9H8313 B1163 LLF0755(07MAY) HAK
03 9H8314 B1163 HAK1050(07MAY) LLF
04 9H8314 B1163 LLF1405(07MAY) XIY
=
NNNN
```
```groovy
// locations to search for config files that get merged into the main config;
// config files can be ConfigSlurper scripts, Java properties files, or classes
// in the classpath in ConfigSlurper format
// grails.config.locations = [ "classpath:${appName}-config.properties",
// "classpath:${appName}-config.groovy",
// "file:${userHome}/.grails/${appName}-config.properties",
// "file:${userHome}/.grails/${appName}-config.groovy"]
grails.config.locations = [ "file:Quartz-config.groovy"]
// if (System.properties["${appName}.config.location"]) {
// grails.config.locations << "file:" + System.properties["${appName}.config.location"]
// }
grails.project.groupId = appName // change this to alter the default package name and Maven publishing destination
grails.mime.file.extensions = true // enables the parsing of file extensions from URLs into the request format
grails.mime.use.accept.header = false
grails.mime.types = [
all: '*/*',
atom: 'application/atom+xml',
css: 'text/css',
csv: 'text/csv',
form: 'application/x-www-form-urlencoded',
html: ['text/html','application/xhtml+xml'],
js: 'text/javascript',
json: ['application/json', 'text/json'],
multipartForm: 'multipart/form-data',
rss: 'application/rss+xml',
text: 'text/plain',
xml: ['text/xml', 'application/xml']
]
// URL Mapping Cache Max Size, defaults to 5000
//grails.urlmapping.cache.maxsize = 1000
// What URL patterns should be processed by the resources plugin
grails.resources.adhoc.patterns = ['/images/*', '/css/*', '/js/*', '/plugins/*']
// The default codec used to encode data with ${}
grails.views.default.codec = "none" // none, html, base64
grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"
// enable Sitemesh preprocessing of GSP pages
grails.views.gsp.sitemesh.preprocess = true
// scaffolding templates configuration
grails.scaffolding.templates.domainSuffix = 'Instance'
// Set to false to use the new Grails 1.2 JSONBuilder in the render method
grails.json.legacy.builder = false
// enabled native2ascii conversion of i18n properties files
grails.enable.native2ascii = true
// packages to include in Spring bean scanning
grails.spring.bean.packages = []
// whether to disable processing of multi part requests
grails.web.disable.multipart=false
// request parameters to mask when logging exceptions
grails.exceptionresolver.params.exclude = ['password']
// configure auto-caching of queries by default (if false you can cache individual queries with 'cache: true')
grails.hibernate.cache.queries = false
environments {
development {
grails.logging.jul.usebridge = true
}
production {
grails.logging.jul.usebridge = false
// TODO: grails.serverURL = "http://www.changeme.com"
}
}
// log4j configuration
log4j = {
// Example of changing the log pattern for the default console appender:
//
appenders {
// console name:'stdout', layout:pattern(conversionPattern: '%d [%-15.15t] %-5p %-30.30c{1} - %m%n')
appender new org.apache.log4j.DailyRollingFileAppender(
name:"file",
fileName:"logs/telegram.log",
append: true,
datePattern: '\'_\'yyyy-MM-dd',
layout:pattern(conversionPattern: '%d{yy-MM-dd HHmmss}\t%p %-15.15c{1} :: %m%n'))
appender new org.apache.log4j.DailyRollingFileAppender(
name: "telegram",
fileName:"logs/orginal.txt",
append: true,
datePattern: '\'_\'yyyy-MM-dd',
layout:pattern(conversionPattern: '::%d{yyyy-MM-dd HHmmss}:: %m%n'))
console name:'stdout', layout:pattern(conversionPattern: ' %d{yy-MM-dd HH:mm:ss} %-5p> %-15.15c{1} :: %m%n')
}
root {
info 'stdout', 'file'
// additivity = false
}
//trace 'org.hibernate.type'
// info 'grails.app.services',
// 'grails.app.utils.tbia.telegram.parser',
// info 'grails.app.jobs'
// additivity = false
info 'org.grails.plugin'
//debug 'grails.app.utils.tbia.telegram.TcpReader'
// 'grails.app.services'
// 'org.grails.plugin'
// 'grails.app.jobs'
// additivity: false
// info 'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
// info additivity: false,
// telegram : ['grails.app.utils.tbia.telegram.TelegramTextLoggerUtils'],
// info 'org.codehaus.groovy.grails.web.servlet', // controllers
// 'org.hibernate',
// 'org.springframework',
// 'org.codehaus.groovy.grails.orm.hibernate' // hibernate integration
debug telegram: 'grails.app.utils.tbia.telegram.TelegramTextLoggerUtils'
// error 'org.codehaus.groovy.grails.web.servlet', // controllers
error 'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
// 'org.springframework',
'org.hibernate',
'net.sf.ehcache.hibernate',
'grails.app.service.org.grails.plugin'
// additivity: false
}
CIIMS = [
url:'http://192.168.50.39:8082/services/ExchangeService',
user:'ATC',
password:'ATCPASS'
]
localICAO = 'ZGLG'
TBIARoutes = [
estt:'FLOP-ESTT-ATC-ALL',
dely:'FLOP-DELY-ATC-ALL',
pdda:'FLOP-PDDA-ATC-ALL',
actt:'FLOP-ACTT-ATC-ALL',
reno:'FLOP-RENO-ATC-ALL',
schd:'SCHD-NONE-ATC-ALL'
]
SQL {
MAPPING = "SELECT MAPPING_FLIGHT_NUMBER FROM TEL_FLIGHT_MAPPING WHERE OLD_FLIGHT_NUMBER=?"
//GET_FLIGHT_YESTERDAY = "SELECT scheduled_datetime, route_type FROM TEL_FLIGHTSCHD_NEXTDAY_HISTORY WHERE flight_number = ? and arri_or_dept = ? and flight_date >= to_date(?, 'yyyy-mm-dd') order by flight_date desc"
//直接查运营表
GET_FLIGHT_YESTERDAY_OPER = """
SELECT
to_char(scheduled_datetime, 'yyyy-MM-dd HH24MI') as scheduled_datetime,
route_type, start_airport, end_airport,
aircraft_number
FROM
FIMS_FLIGHTSCHD_OPERATION
WHERE
REGEXP_LIKE(FLIGHT_NUMBER, ?)
and arri_or_dept = ?
and flight_date >= to_date(?, 'yyyy-mm-dd')
order by
flight_date asc
"""
GET_FLIGHT_YESTERDAY_HIS = """
SELECT
to_char(scheduled_datetime, 'yyyy-MM-dd HH24MI') as scheduled_datetime,
route_type, start_airport, end_airport,
aircraft_number
FROM
FIMS_FLIGHTSCHD_HST
WHERE
REGEXP_LIKE(FLIGHT_NUMBER, ?)
and arri_or_dept = ?
and flight_date >= to_date(?, 'yyyy-mm-dd')
order by
flight_date asc
"""
// GET_FLIGHT = "SELECT scheduled_datetime, route_type FROM TEL_FLIGHTSCHD_NEXTDAY_HISTORY WHERE flight_number = ? and arri_or_dept = ? and flight_date = to_date(?, 'yyyy-mm-dd') order by flight_date desc"
// 直接查询运营表
GET_FLIGHT = """
SELECT
to_char(scheduled_datetime, 'yyyy-MM-dd HH24MI') as scheduled_datetime,
route_type, start_airport, end_airport,
aircraft_number
FROM
FIMS_FLIGHTSCHD_OPERATION
WHERE
REGEXP_LIKE(FLIGHT_NUMBER, ?)
and arri_or_dept = ?
and flight_date = to_date(?, 'yyyy-mm-dd')
order by
flight_date asc
"""
ICAO = "SELECT airline_code_iata FROM sys_airline WHERE airline_code_icao=?"
COUNT_HIS_ARR_FLT = "SELECT count(*) FROM FIMS_FLIGHTSCHD_HST WHERE flight_number=? and pre_dept_datetime_actual is not null and actual_datetime is not null and arri_or_dept='A' "
GET_HIS_ARR_FLT = """
select * from (
select rownum rn, t.* from (
SELECT
flight_id id,
to_char(pre_dept_datetime_actual, 'yyyy-MM-dd HH24MI') pdda,
to_char(actual_datetime, 'yyyy-MM-dd HH24MI') actt,
flight_date fd
FROM
FIMS_FLIGHTSCHD_HST
WHERE
flight_number = ?
and pre_dept_datetime_actual is not null
and actual_datetime is not null
and arri_or_dept='A'
order by
actt desc
) t
)
where rn <= ?
"""
GET_SEASON_SCHEDULE_FLIGHTS = """
SELECT
FLIGHT_NUMBER,
START_AIRPORT,
END_AIRPORT,
ARRI_OR_DEPT,
to_char(ARRIVAL_TIME, 'HH24MI') as ARRIVAL_TIME,
to_char(DEPARTURE_TIME, 'HH24MI') as DEPARTURE_TIME,
FLYING_TIME,
ROUTE_TYPE,
FLIGHT_TASK,
OPERATION_DAYS
FROM
FIMS_FLIGHTSCHD_SEASON, FIMS_FLIGHTSEASON
WHERE
FIMS_FLIGHTSCHD_SEASON.SEASON_REC_ID = FIMS_FLIGHTSEASON.SEASON_REC_ID
and ACTIVESEASON_FLAG = 1
ORDER by
ARRIVAL_TIME desc, DEPARTURE_TIME desc
"""
GET_AIRCRAFT = """
select AIRCRAFT_TYPE_CODE, AIRCRAFT_NUMBER
from SYS_AIRCRAFT
"""
GET_AIRPORT = """
select
AIRPORT_CODE_IATA as THREE,
AIRPORT_CODE_ICAO as FOUR,
AIRPORT_NAME_CHN as CHN,
SYS_COUNTRY.COUNTRY_ID as COUNTRY
from
SYS_AIRPORT,
SYS_CITY,
SYS_COUNTRY
WHERE
SYS_AIRPORT.CITY_ID = SYS_CITY.CITY_ID
and SYS_CITY.COUNTRY_ID = SYS_COUNTRY.COUNTRY_ID
"""
}
pattern =[
/**
* 上航(FM)解析
* 解析参考
*W/Z FM9134 B2688 1/1ILS (00) TSN0100 SHA
*W/Z FM9133 B2688 1/1ILS (00) SHA0340 TSN
*/
FM:[
fields:[0:'task',1:'flightNumber',2:'registerNumber'],
min:7,
airway:5,
company:"FM"
],
/**
* 解析厦航(MF)计划
*01) MF8193 B5595 ILS(8) HGH1100 1305TSN
*02) MF8194 B5595 ILS(8) TSN1355 1550HGH
*/
MF:[
fields:[1:'flightNumber', 2:'registerNumber'],
min:6,
airway:4,
company:"MF"
],
/**
* 解析奥凯(8X)计划
* 计划参考:
*L1: 29OCT BK2735 B2863 ILS IS (3/6) TSN2350(28OCT) HAK
*L2: 29OCT BK2735 B2863 ILS IS (3/6) HAK0435 NKG
*/
"8X":[
fields:[1:'flightDate',2:'flightNumber',3:'registerNumber'],
min: 9,
airway : 7,
company : "8X(BK)"
],
/**
* 解析海航(HU)计划
* 计划参考
*L04 W/Z HU7204 B5637 (9) SZX/0500 TSN
*L05 W/Z HU7205 B5406 (9) TSN/2355(30OCT) PVG
* 1) JD5195 B6727 ILS I(9) SYX/0800 1135/TSN
*
*L07 W/Z GS6571 B3155 (7) XIY/0025 TSN/0245 CGQ
*/
HU:[
fields:[1:'task',2:'flightNumber',3:'registerNumber'],
min: 5,
airway : 5,
company : "HU"
],
/**
* 1) JD5195 B6727 ILS I(9) SYX/0800 1135/TSN
*/
JD: [
fields:[1:'flightNumber', 2:'registerNumber'],
min:7,
airway : 5,
company:"JD"
],
/**
* 解析天津航空(GS)公司计划
* 解析参考
*
*L01 W/Z GS6503 B3122 (7) TSN/0730 DLC
*L04 W/Z GS6516 B3192 (8) URC/0555 DSN/0920 TSN
*L03 W/Z GS6515 B3183 (8) TSN/2320(30OCT) DSN/0145 URC
*L55 CNL GS6601 TSN TYN
*L44 W/Z GS7533 B3156 (7) XIY/0415 TSN/0645 CGQ
*L45 W/Z GS7534 B3156 (7) CGQ/0905 TSN/1145 XIY
*
* changde
* 01 GS7635 B3193 XIY0020(16APR) CGD
*/
GS: [
//fields:[1:'task',2:'flightNumber', 3:'registerNumber'],
fields:[1:'flightNumber', 2:'registerNumber'],
min:4,
airway : 3,
company:"GS"
],
/**
* 杨子快运(Y8)
*01 Y87969 B2119 XMN 1540 HGH
*13 Y87444 B2578 ICN 0235 TSN
*/
Y8: [
fields:[1:'flightNumber', 2:'registerNumber'],
min:6,
airway : 3,
company:"Y8"
],
/**
* 四川航空 (3U)
* 01) 31OCT 3U8863 B6598 CAT1 (10) CKG0010 0235TSN
*/
"3U":[
fields:[1:'flightDate',2:'flightNumber', 3:'registerNumber'],
min:8,
airway : 6,
company:"3U"
],
/**
* 中国货运 (CK)
*01)H/Z CK261 B2076 PVG1535(30OCT) 1705TPE
*/
CK:[
fields:[0:'task',1:'flightNumber', 2:'registerNumber'],
min:4,
airway : 3,
company:"CK"
],
/**
* 华夏航空 (G5)
*L01 W/Z G52665 B7762 (6) CKG/0725 CIH/0940 TSN
* 01 G52653 B7762 (6) CKG0015(03FEB) LLF
*/
G5:[
fields:[1:'flightNumber', 2:'registerNumber'],
min:4,
airway : 3,
company:"G5"
],
/**
* 春秋航空 (9C)
*31OCT W/Z 9C8884 B6573 ILS1/1 (06) TSN0650 SYX
*/
"9C":[
fields:[0:'flightDate', 1:'task',2:'flightNumber', 3:'registerNumber'],
min:8,
airway : 6,
company:"9C"
],
/**
* 深圳航空 (ZH)
*204) W/Z 31OCT ZH9783 B5670 CAT1 (10) SZX0045 0355TSN
*/
ZH:[
fields:[2:'flightDate', 1:'task',3:'flightNumber', 4:'registerNumber'],
min:9,
airway : 7,
company:"ZH"
],
/**
* 翔鹏航空 (8L)
*L59 W/Z 8L9976 B6959 TSN/0510 CTU/0855 KMG
*/
"8L":[
fields:[1:'task',2:'flightNumber', 3:'registerNumber'],
min:6,
airway : 4,
company:"8L"
],
/**
* 山东航空 (SC)
*(1) SC4717 B3080 CRJ7 ILS I (6) TAO/2350 TSN
*/
SC:[
fields:[1:'flightNumber', 2:'registerNumber'],
min:9,
airway : 7,
company:"SC"
],
/**
* 西部航空 (PN)
*21) PN6237 B6763 ILS I(9) CKG/0000 0220/TSN
*23) PN6235 B6763 ILS I(9) CKG/0905 1025/WUH/1100 1225/WNZ
*/
PN:[
fields:[1:'flightNumber', 2:'registerNumber'],
min:7,
airway : 5,
company:"PN"
],
/**
* 南方航空 (CZ)
*
*83. CZ3301/2 B2823 B752 CAN0135 TSN0535 CAN
*02. CZ6973/4 B5239 B737 YIN0235 URC0425 PVG0940 URC1545 YIN
*/
CZ: [
fields:[1:'flightNumber', 2:'registerNumber', 3:'aircraftType'],
min:6,
airway : 4,
company:"CZ"
],
//124) 14NOV W/Z HO1245 B6966 ILS(8) SHA0005 0255CKG
//LLF new:
//174 Ho1019 B6984 PVG0635(03FEB) LLF
HO: [
//fields:[1:'flightDate', 2:'task', 3:'flightNumber', 4:'registerNumber'],
fields:[1:'flightNumber', 2:'registerNumber'],
//min:7,
min:4,
airway: 3,
company: "HO"
],
//05) 14NOV N/M NS3230 B3188 ILS(2) TSN2200 2240SJW
NS: [
fields:[1:'flightDate', 2:'task', 3:'flightNumber', 4:'registerNumber'],
min:7,
airway: 6,
company: "NS"
],
//38)W/Z 27NOV EU2748 B6900 CAT1 (8) TSN0800 1055CTU
EU: [
fields:[0:'task', 1:'flightDate', 2:'flightNumber', 3:'registerNumber'],
min:7,
airway: 6,
company: "EU"
],
//01 9H8313 B1163 XIY0455(07MAY) LLF
"9H": [
fields:[1:'flightNumber', 2:'registerNumber'],
min:4,
airway: 3,
company: "9H"
],
]
flightType = [
H:["H/G", "H/Y"], //货机
O:["U/H"], //公务
B:["J/B"] //专机
]
// 17点定时发送计划
Plan17Cron = "0 50 16 * * ?"
// 18点定时发送计划
Plan18Cron = "0 50 17 * * ?"
//对于三字码相同的航空公司,使一部分不实用的机场失效
//如果机场真有相同三字码的航空公司,需要修改查询接口,支持多个航空公司
disabledAirport = [
// 曼谷航空
OKA:'PG'
]
// 针对航空公司二字码相同,三字码不同的情况,追加电报本地映射
MyAirports = [
//内蒙古航空,二字码对应国航的CA
CNM:"CA"
]
//针对航班补班的情况,允许在航班号后面加1,2个字母
flightNumberPattern = '[A-Z]{0,2}'
//yyyy-MM-dd 制定具体日期(系统测试)
//now 取系统当前时间
// operDate="2012-10-30"
operDate="now"
// 检查过夜航班配置, 值是4表示在4点之前,如果电报中不包含DOF,则检查今天和昨天航班
checkHour = 4
// 计算飞行时长的历史航班数,30表示最近的30次历史飞行的平均值
hisFlyTime = 30
localThree="LLF"
//中国ID,用于判断是否是国内航班
countryChinaID = 142
//socket = [server:"172.28.0.3", port:5555]
socket = [server:"127.0.0.1", port:7000]
socketCheckStatus = true
serial = [baudRate:1200, dataBits:8, stopBits:1, parity:0]
// windows 默认端口: COM1
serialPort = "/Users/windy/Dev/tmp/ttys0"
//工作模式:
//串口:serial, TCP: tcp
serviceMode = "tcp"
//测试模式,当为true的时候,查运营航班数据的时候可以查询历史表(优先查历史表)
testMode = false
```
ParsePLN.groovy
```groovy
static def NORMAL = [
'9H' //长安航空
]
```