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

16 KiB

sunlogin id:orkj8471777m7nfe

m2mg2Lh*T9w

remote: 795906644

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
// 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

static def NORMAL = [
'9H' //长安航空
]