航班定位实现

This commit is contained in:
zhouyuejun
2019-02-14 14:45:40 +08:00
parent 33a685e4ce
commit 107494c097
18 changed files with 412 additions and 1573 deletions
+141 -106
View File
@@ -1,7 +1,5 @@
import { Component, OnInit, ViewChild, Renderer2 } from '@angular/core';
import { NavigationEnd, Router } from '@angular/router';
import { WebWorkerService } from 'ngx-web-worker';
import { ToastService } from '../../components/toast/toast.service';
import { ToastConfig, ToastType } from '../../components/toast/toast-model';
@@ -10,28 +8,23 @@ import { BasicDataService } from '../../services/basic-data-service';
import { OperateSpinServiceService } from '../../services/operate-spin-service.service';
import { WebsocketService } from '../../services/websocket.service';
import { DynamicFlightOrder } from '../../utils/dynamic-flight-order';
import { FlightOrder } from '../../utils/flight-order';
import { FlightsDataHandle } from '../../utils/flights-data-handle';
import { CellColorHandle } from '../../utils/cell-color-handle';
import { AlertMessageHandle } from '../../utils/alert-message-handle';
import { Utils } from '../../utils/utils';
import dateFormatter from '../../utils/date-formatter';
import webWorkerHandle from '../../utils/web-worker-handle';
import { filter } from 'rxjs/operators';
import * as $ from 'jquery';
@Component({
selector: 'app-main',
templateUrl: './main.component.html',
styleUrls: ['./main.component.scss'],
providers: [WebWorkerService]
styleUrls: ['./main.component.scss']
})
export class MainComponent implements OnInit {
constructor(
private router: Router,
private renderer2: Renderer2,
private webWorkerService: WebWorkerService,
private basicDataService: BasicDataService,
private operateSpinServiceService: OperateSpinServiceService,
private httpCilent: HttpClientService,
@@ -64,10 +57,11 @@ export class MainComponent implements OnInit {
// }
// )
}
public orderHandle = new DynamicFlightOrder();
public orderHandle = new FlightOrder();
public dataHandle = new FlightsDataHandle();
public cellColorHandle = new CellColorHandle();
public alertMessageHandle = new AlertMessageHandle();
public utils = new Utils();
public tabClose: boolean = true;
@@ -268,10 +262,9 @@ export class MainComponent implements OnInit {
})
//计算可视区域高度,渲染数据
this.calcVisibleCount()
this.wait_render_data = combined_data;
this.selectedFilterData = combined_data;
this.render_data = this.wait_render_data.slice(this.start, this.end);
this.calcVisibleCount()
//默认选中第一条
if (this.render_data.length > 0) {
@@ -354,6 +347,8 @@ export class MainComponent implements OnInit {
*/
refresh() {
this.operateSpinServiceService.showSpin();
this.positionedArray = []; //定位数组为清空
this.positionArrayIndex = 0; //定位元素Index归零
this.canHandleDynamicMessage = false;
this.canHandleDynamicAlert = false;
this.SEARCH = ''; //手动输入条件
@@ -369,8 +364,6 @@ export class MainComponent implements OnInit {
FTSS: '', //运营状态
TRML: '', //航站楼
Abnormal_state: '', //异常状态
// Start_time: '9',
// End_time: '9',
FHAG: '', //机坪代理
MHAG: '', //维护代理
PHAG: '', //旅客代理
@@ -541,11 +534,11 @@ export class MainComponent implements OnInit {
if (this.FLT_POS === 1) {
this.LAST_SEL_COL = this.SEL_COL;
this.LASTSEARCH = this.SEARCH;
// this.selectChange('filter')
// this.selectChange('filter');
this.operateSpinServiceService.showSpin();
this.inputFilter(this.selectedFilterData);
} else {
this.inputPosition(this.render_data)
this.inputPosition(this.wait_render_data)
}
}
@@ -554,6 +547,8 @@ export class MainComponent implements OnInit {
*/
selectChange(type) {
if (type === 'filter') {
this.positionedArray = [];
this.positionArrayIndex = 0;
this.operateSpinServiceService.showSpin();
}
@@ -814,64 +809,150 @@ export class MainComponent implements OnInit {
positionArrayIndex: number = 0;
inputPosition(filterData) {
let transArray = []
let hasSearchData: boolean = false;
let hasPositionedEle: boolean = false;
if (this.SEL_COL) {
let sel_col = this.SEL_COL;
filterData.forEach(element => {
if (element['renderFlight'][sel_col]) {
if (element['renderFlight'][sel_col].toString().match(new RegExp(this.SEARCH, 'i'))) {
transArray.push(element);
for (let i = 0; i < filterData.length; i++) {
if (i === filterData.length - 1) {
this.positionedArray = [];
this.positionArrayIndex = 0;
}
let fliterElement = filterData[i];
if (fliterElement['renderFlight'][sel_col]) {
if (fliterElement['renderFlight'][sel_col].toString().match(new RegExp(this.SEARCH, 'i'))) {
let hasThisEle: boolean = false;
hasSearchData = true;
for (let k = 0; k < this.positionedArray.length; k++) {
let positionedElement = this.positionedArray[k];
let diffResult = this.utils.diff(positionedElement, fliterElement);
if (diffResult) {
hasThisEle = true;
break;
} else {
continue;
}
};
if (!hasThisEle) {
hasPositionedEle = true;
this.row_state = fliterElement;
this.positionArrayIndex = i;
this.positionedArray.push(fliterElement);
break;
}
} else {
continue;
}
} else {
if (!this.SEARCH) {
transArray.push(element);
let hasThisEle: boolean = false;
hasSearchData = true;
for (let k = 0; k < this.positionedArray.length; k++) {
let positionedElement = this.positionedArray[k];
let diffResult = this.utils.diff(positionedElement, fliterElement);
if (diffResult) {
hasThisEle = true;
break;
} else {
continue;
}
};
if (!hasThisEle) {
hasPositionedEle = true;
this.row_state = fliterElement;
this.positionArrayIndex = i;
this.positionedArray.push(fliterElement);
break;
}
} else {
continue;
}
}
});
}
} else {
filterData.forEach(element => {
let cols = this.col_lists;
for (let i = 0; i < cols.length; i++) {
if (element['renderFlight'][cols[i]['COL_CODE']]) {
if (element['renderFlight'][cols[i]['COL_CODE']].toString().match(new RegExp(this.SEARCH, 'i'))) {
transArray.push(element)
let cols = this.render_col_lists;
for (let i = 0; i < filterData.length; i++) {
if (i === filterData.length - 1) {
this.positionedArray = [];
this.positionArrayIndex = 0;
}
let positionIsOk: boolean = false;
let filterElement = filterData[i];
for (let j = 0; j < cols.length; j++) {
let elementCol = cols[j];
if (filterElement['renderFlight'][elementCol['COL_CODE']]) {
if (filterElement['renderFlight'][elementCol['COL_CODE']].toString().match(new RegExp(this.SEARCH, 'i'))) {
let hasThisEle: boolean = false;
hasSearchData = true;
for (let k = 0; k < this.positionedArray.length; k++) {
let positionedElement = this.positionedArray[k];
let diffResult = this.utils.diff(positionedElement, filterElement);
if (diffResult) {
hasThisEle = true;
break;
} else {
continue;
}
};
if (!hasThisEle) {
hasPositionedEle = true;
positionIsOk = true;
this.row_state = filterElement;
this.positionArrayIndex = i;
this.positionedArray.push(filterElement);
}
break;
} else {
continue;
}
} else {
if (this.SEARCH) {
continue;
} else {
transArray.push(element)
if (!this.SEARCH) {
let hasThisEle: boolean = false;
hasSearchData = true;
for (let k = 0; k < this.positionedArray.length; k++) {
let positionedElement = this.positionedArray[k];
let diffResult = this.utils.diff(positionedElement, filterElement);
if (diffResult) {
hasThisEle = true;
break;
} else {
continue;
}
};
if (!hasThisEle) {
hasPositionedEle = true;
positionIsOk = true;
this.row_state = filterElement;
this.positionArrayIndex = i;
this.positionedArray.push(filterElement);
}
break;
} else {
continue;
}
}
}
});
}
if (transArray.length > 0) {
if (transArray.toString() == this.positionedArray.toString()) {
this.positionArrayIndex++;
if (this.positionArrayIndex === this.positionedArray.length) {
this.positionArrayIndex = 0;
if (positionIsOk) {
break;
}
this.row_state = this.positionedArray[this.positionArrayIndex];
} else {
this.positionedArray = transArray;
this.positionArrayIndex = 0;
this.row_state = this.positionedArray[this.positionArrayIndex];
}
} else {
alert('没有搜索到相关数据');
}
let tr = $(".selected");
let objTr = tr[0];
if (objTr) {
$("#table-container").animate({ scrollTop: objTr.offsetTop - 42 }, "slow");
if (!hasSearchData) {
alert("没有搜索到相关数据");
}
if (hasPositionedEle) {
const scrollTop = this.positionArrayIndex * this.trItemHeight
this.tableBody.nativeElement.scrollTop = scrollTop;
}
}
/**
* 重置定位数组
*/
resetPositionArray() {
this.positionedArray = [];
this.positionArrayIndex = 0;
}
/**
@@ -1134,37 +1215,37 @@ export class MainComponent implements OnInit {
getStopoverNotes(flight) {
if (this.orderHandle.isLinked(flight)) {
if (flight['preFlight']['ACTT'] && flight['reaFlight']['ESTT']) {
if (new Date(dateFormatter(flight['reaFlight']['ESTT'])).getTime() - new Date(dateFormatter(flight['preFlight']['ACTT'])).getTime() > 3600000) {
if (new Date(this.utils.dateFormatter(flight['reaFlight']['ESTT'])).getTime() - new Date(this.utils.dateFormatter(flight['preFlight']['ACTT'])).getTime() > 3600000) {
return false;
} else {
return true;
}
} else if (flight['preFlight']['ACTT'] && flight['reaFlight']['SODT']) {
if (new Date(dateFormatter(flight['reaFlight']['SODT'])).getTime() - new Date(dateFormatter(flight['preFlight']['ACTT'])).getTime() > 3600000) {
if (new Date(this.utils.dateFormatter(flight['reaFlight']['SODT'])).getTime() - new Date(this.utils.dateFormatter(flight['preFlight']['ACTT'])).getTime() > 3600000) {
return false;
} else {
return true;
}
} else if (flight['preFlight']['ESTT'] && flight['reaFlight']['ESTT']) {
if (new Date(dateFormatter(flight['reaFlight']['ESTT'])).getTime() - new Date(dateFormatter(flight['preFlight']['ESTT'])).getTime() > 3600000) {
if (new Date(this.utils.dateFormatter(flight['reaFlight']['ESTT'])).getTime() - new Date(this.utils.dateFormatter(flight['preFlight']['ESTT'])).getTime() > 3600000) {
return false;
} else {
return true;
}
} else if (flight['preFlight']['ESTT'] && flight['reaFlight']['SODT']) {
if (new Date(dateFormatter(flight['reaFlight']['SODT'])).getTime() - new Date(dateFormatter(flight['preFlight']['ESTT'])).getTime() > 3600000) {
if (new Date(this.utils.dateFormatter(flight['reaFlight']['SODT'])).getTime() - new Date(this.utils.dateFormatter(flight['preFlight']['ESTT'])).getTime() > 3600000) {
return false;
} else {
return true;
}
} else if (flight['preFlight']['SODT'] && flight['reaFlight']['ESTT']) {
if (new Date(dateFormatter(flight['reaFlight']['ESTT'])).getTime() - new Date(dateFormatter(flight['preFlight']['SODT'])).getTime() > 3600000) {
if (new Date(this.utils.dateFormatter(flight['reaFlight']['ESTT'])).getTime() - new Date(this.utils.dateFormatter(flight['preFlight']['SODT'])).getTime() > 3600000) {
return false;
} else {
return true;
}
} else if (flight['preFlight']['SODT'] && flight['reaFlight']['SODT']) {
if (new Date(dateFormatter(flight['reaFlight']['SODT'])).getTime() - new Date(dateFormatter(flight['preFlight']['SODT'])).getTime() > 3600000) {
if (new Date(this.utils.dateFormatter(flight['reaFlight']['SODT'])).getTime() - new Date(this.utils.dateFormatter(flight['preFlight']['SODT'])).getTime() > 3600000) {
return false;
} else {
return true;
@@ -1200,50 +1281,4 @@ export class MainComponent implements OnInit {
}, 10)
}
}
}
// if (this.SEL_COL) {
// let sel_col = this.SEL_COL;
// for (let i = 0; i < filterData.length; i++) {
// let fliterElement = filterData[i];
// if (fliterElement['renderFlight'][sel_col]) {
// if (fliterElement['renderFlight'][sel_col].toString().match(new RegExp(this.SEARCH, 'i'))) {
// let positionedIsMarry = false;
// for (let k = 0; k < this.positionedArray.length; k++) {
// let positionedElement = this.positionedArray[k];
// if (positionedElement['preFlight'] && !positionedElement['reaFlight']) {
// if (fliterElement['preFlight'] && !fliterElement['reaFlight']) {
// if (positionedElement['preFlight']['FLID'] === fliterElement['preFlight']['FLID']) {
// positionedIsMarry = true;
// break;
// }
// }
// } else if (!positionedElement['preFlight'] && positionedElement['reaFlight']) {
// if (!fliterElement['preFlight'] && fliterElement['reaFlight']) {
// if (positionedElement['reaFlight']['FLID'] === fliterElement['reaFlight']['FLID']) {
// positionedIsMarry = true;
// break;
// }
// }
// } else {
// if (fliterElement['preFlight'] && fliterElement['reaFlight']) {
// if ((positionedElement['preFlight']['FLID'] === fliterElement['preFlight']['FLID']) && (positionedElement['reaFlight']['FLID'] === fliterElement['reaFlight']['FLID'])) {
// positionedIsMarry = true;
// break;
// }
// }
// }
// };
// if(!positionedIsMarry){
// this.row_state = fliterElement;
// this.positionedArray.push(fliterElement);
// break;
// }
// }
// }
// }
// }
}