import {environment} from '../../../../environments/environment';
|
import {DateService} from '../../../business/services/util/date.service';
|
import {NzMessageService, NzModalService} from 'ng-zorro-antd';
|
import {Component, OnInit, Inject} from '@angular/core';
|
import {HttpClient} from '@angular/common/http';
|
import {ITokenService, DA_SERVICE_TOKEN} from '@delon/auth';
|
import {CascaderOption} from 'ng-zorro-antd/src/cascader/nz-cascader.component';
|
import {AreacodeService} from '@business/services/http/areacode.service';
|
import {NzTreeComponent} from 'ng-tree-antd';
|
import {Subject} from 'rxjs/Subject';
|
|
@Component({
|
selector: 'app-excel',
|
templateUrl: './excel.component.html',
|
styles: []
|
})
|
export class ExcelComponent implements OnInit {
|
[x: string]: any;
|
public query: any = {};
|
public sensorOptions = [];
|
public monitorPointOptions = [];
|
public deviceOptions = [];
|
public typeOptions = [
|
{value: 'year', label: '年', format: 'YYYY'},
|
{value: 'month', label: '月', format: 'YYYY-MM'},
|
{value: 'day', label: '日', format: 'YYYY-MM-DD'},
|
{value: 'hour', label: '时', format: 'YYYY-MM-DD HH'}
|
];
|
public professionOptions = [];
|
|
private treeClickStream: Subject<any> = new Subject<any>();
|
private _sensors: {[key: string]: string} = {};
|
private _sensorNames: string;
|
get sensorNames(): string {
|
return this._sensorNames;
|
}
|
|
constructor(
|
public http: HttpClient,
|
public dateSrv: DateService,
|
public msgSrv: NzMessageService,
|
private areacodeService: AreacodeService,
|
@Inject(DA_SERVICE_TOKEN) public tokenService: ITokenService
|
) {
|
this.timeType = this.typeOptions[1];
|
}
|
|
ngOnInit() {
|
this.query.time = null;
|
this.query.timeb = null;
|
this.http.get(environment.SERVER_BASH_URL + 'sensor/all').subscribe((res: any) => {
|
if (res.code === 0) {
|
this.msgSrv.error(res.message);
|
} else {
|
this.sensorOptions.push({id: -1, name: '全部', isExpanded: true, children: res.data});
|
}
|
});
|
this.http.get(environment.SERVER_BASH_URL + 'mobile/profession').subscribe((res: any) => {
|
if (res.errno !== 0) {
|
this.msgSrv.error(res.message);
|
} else {
|
this.professionOptions = res.data;
|
}
|
});
|
}
|
|
public onTreeClickSelect(event): void {
|
this.treeClickStream.next(event);
|
}
|
|
public onSensorSelect(event): void {
|
const data = event.node.data;
|
if (data.id === -1 && data.halfChecked === false) {
|
if (!!data.checked) {
|
this.sensorOptions[0].children.forEach(
|
sensor => {
|
this._sensors[sensor.id] = sensor.sensorKey + '-' + sensor.name + '-' + sensor.unit;
|
}
|
);
|
} else {
|
this._sensors = {};
|
}
|
} else {
|
if (!!data.checked) {
|
this._sensors[data.id] = data.sensorKey + '-' + data.name + '-' + data.unit;
|
} else {
|
delete this._sensors[data.id];
|
}
|
}
|
this.reloadSensorNames();
|
|
}
|
private reloadSensorNames(): void {
|
// 异步提升展现速度
|
setTimeout(() => {
|
this._sensorNames = '';
|
const sensorNameList = Object.keys(this._sensors).map(
|
id => {
|
const sensor = this.sensorOptions[0].children.find(item => {
|
return Number(id) === Number(item.id);
|
});
|
return sensor.name;
|
}
|
);
|
this._sensorNames = sensorNameList.join(', ');
|
}, 1);
|
}
|
|
public areaLazyLoad(event: {option: CascaderOption, index: number, resolve: (children: CascaderOption[]) => void, reject: () => void}) {
|
const index = event['index'];
|
const option = event.option;
|
switch (index) {
|
case -1:
|
this.areacodeService.getProvinces().subscribe(
|
(res: {label: string, value: string}[]) => {
|
event.resolve(res);
|
}
|
); break;
|
case 0:
|
this.areacodeService.getCities(option.value).subscribe(
|
(res: {label: string, value: string}[]) => {
|
event.resolve(res);
|
}
|
); break;
|
case 1:
|
this.areacodeService.getAreas(option.value).subscribe(
|
(res: {label: string, value: string}[]) => {
|
event.resolve(res);
|
}
|
); break;
|
}
|
}
|
|
public regionChange(event: {option: CascaderOption, index: number}) {
|
let name = '';
|
const option = event.option;
|
this.query.areaCode = null;
|
this.query.monitorPointId = null;
|
switch (event.index) {
|
case 0:
|
name = 'provinceCode';
|
this.query.provinceCode = option.value;
|
this.query.cityCode = null;
|
break;
|
case 1:
|
name = 'cityCode';
|
this.query.cityCode = option.value;
|
break;
|
case 2:
|
name = 'areaCode';
|
this.query.areaCode = option.value;
|
break;
|
}
|
this.http.get(environment.SERVER_BASH_URL + 'monitor-point/list/region', {params: {name: name, value: option.value}}).subscribe((res: any) => {
|
if (res.code === 0) {
|
this.msgSrv.error(res.message);
|
} else {
|
this.monitorPointOptions = res.data;
|
}
|
});
|
this.getDevices();
|
|
}
|
|
getDevices() {
|
this.query.mac = null;
|
return this.http.get(environment.SERVER_BASH_URL + 'device/professionId', {params: this.query}).subscribe((res: any) => {
|
if (res.code === 0) {
|
this.msgSrv.error(res.message);
|
} else {
|
this.deviceOptions = res.data;
|
}
|
});
|
}
|
|
reportQuery() {
|
const query = this.query;
|
if (this.monitorPointOptions.length > 0 && query.time) {
|
query.time = this.dateSrv.date_format(query.time, this.timeType.format);
|
if (query.timeb) {
|
query.timeb = this.dateSrv.date_format(query.timeb, this.timeType.format);
|
}
|
query.type = this.timeType.value;
|
delete query.sensors;
|
if (this._sensors) {
|
const sensors = [];
|
for (const key in this._sensors) {
|
sensors.push(this._sensors[key]);
|
}
|
if (sensors.length > 0) {
|
query.sensors = JSON.stringify(sensors);
|
}
|
}
|
|
let url = environment.SERVER_BASH_URL + 'report/excel?';
|
for (const a in query) {
|
if (query[a]) {
|
url += encodeURI(a) + '=' + encodeURI(query[a]) + '&';
|
}
|
}
|
window.location.href = url + '_token=' + this.tokenService.get().token;
|
} else {
|
this.msgSrv.error('开始时间为空或者所选区域没有监控站点数据!');
|
}
|
}
|
}
|