diff --git a/src/app/system-management/condition-monitoring/condition-monitoring.component.html b/src/app/system-management/condition-monitoring/condition-monitoring.component.html index 5b1845d..adcfddb 100644 --- a/src/app/system-management/condition-monitoring/condition-monitoring.component.html +++ b/src/app/system-management/condition-monitoring/condition-monitoring.component.html @@ -62,6 +62,10 @@ [nzLoading]="loading == 'primary'" (click)="sendRequest('UpdateMonitors')"> 更新监控程序 + diff --git a/src/app/system-management/condition-monitoring/condition-monitoring.component.ts b/src/app/system-management/condition-monitoring/condition-monitoring.component.ts index 3c7d9fb..8578673 100644 --- a/src/app/system-management/condition-monitoring/condition-monitoring.component.ts +++ b/src/app/system-management/condition-monitoring/condition-monitoring.component.ts @@ -4,6 +4,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { NzMessageService } from 'ng-zorro-antd/message'; import { NzModalService } from 'ng-zorro-antd/modal'; import { TreeService } from 'src/app/service/tree.service'; +import { FileComponent } from './file/file.component'; import { ModelComponent } from './model/model.component'; @Component({ selector: 'app-condition-monitoring', @@ -78,7 +79,7 @@ export class ConditionMonitoringComponent implements OnInit { OrganizationId: this.defaultOrId, PageNumber: this.PageNumber, PageSize: 10, - HubConnectionState:this.validateForm.value.state + HubConnectionState: this.validateForm.value.state } this.isLoading = true this.http.get('/api/EdgeDevices/Statuses', { params: params }).subscribe( @@ -167,10 +168,8 @@ export class ConditionMonitoringComponent implements OnInit { } }) } else { - - const modal = this.modal.create({ - nzTitle: '选择更细模型类型', + nzTitle: '选择更新模型类型', nzContent: ModelComponent, nzViewContainerRef: this.viewContainerRef, nzWidth: 288, @@ -212,8 +211,59 @@ export class ConditionMonitoringComponent implements OnInit { } }); const instance = modal.getContentComponent(); - } } + + file() { + const requestData = this.listOfData.filter(data => this.setOfCheckedId.has(data.id)); + let strArr = [] + requestData.forEach(element => { + strArr.push(element.id) + }); + const modal = this.modal.create({ + nzTitle: '配置文件', + nzContent: FileComponent, + nzViewContainerRef: this.viewContainerRef, + nzWidth: 388, + nzComponentParams: {}, + nzOnOk: async () => { + if (instance.validateForm.valid) { + let body = { + edgeDeviceIds: strArr, + scheme: instance.validateForm.value.scheme, + host: instance.validateForm.value.host, + port: instance.validateForm.value.port + } + await new Promise(resolve => { + this.loading = 'file' + this.http.patch('/api/EdgeDevices/Commands/PushMonitorSettingsJson', body).subscribe({ + next: (data: any) => { + this.message.create('success', '通知边缘盒子成功,请过一段时间手动刷新尝试!'); + // console.log(data) + if (data.failedItems.length != 0) { + data.failedItems.forEach(element => { + this.message.create('info', element.detail); + }); + } + this.setOfCheckedId.clear(); + this.refreshCheckedStatus(); + + this.getConditionMonitoring() + this.loading = null; + }, + error: (err) => { + this.loading = null; + } + }) + }) + } else { + this.message.create('warning', '请填写完整!'); + return false + } + } + }); + const instance = modal.getContentComponent(); + + } } diff --git a/src/app/system-management/condition-monitoring/file/file.component.html b/src/app/system-management/condition-monitoring/file/file.component.html new file mode 100644 index 0000000..0418d1c --- /dev/null +++ b/src/app/system-management/condition-monitoring/file/file.component.html @@ -0,0 +1,28 @@ +
+
+ + 协议 + + + + + + + + 主机/ip + + + + + + + + 端口 + + + + + + +
+
\ No newline at end of file diff --git a/src/app/system-management/condition-monitoring/file/file.component.scss b/src/app/system-management/condition-monitoring/file/file.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/system-management/condition-monitoring/file/file.component.ts b/src/app/system-management/condition-monitoring/file/file.component.ts new file mode 100644 index 0000000..b9786cb --- /dev/null +++ b/src/app/system-management/condition-monitoring/file/file.component.ts @@ -0,0 +1,26 @@ +import { Component, OnInit } from '@angular/core'; +import { NzModalRef } from 'ng-zorro-antd/modal'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { HttpClient } from '@angular/common/http'; + +@Component({ + selector: 'app-file', + templateUrl: './file.component.html', + styleUrls: ['./file.component.scss'] +}) +export class FileComponent implements OnInit { + + validateForm!: FormGroup; + constructor(private modal: NzModalRef, private fb: FormBuilder, private http: HttpClient) { } + + ngOnInit(): void { + this.validateForm = this.fb.group({ + scheme: [null, [Validators.required]], + host: [null, [Validators.required]], + port: [null, [Validators.required]] + }); + } + destroyModal(): void { + this.modal.destroy({ data: 'this the result data' }); + } +} diff --git a/src/app/system-management/host-config/host-config.component.ts b/src/app/system-management/host-config/host-config.component.ts index f1f84a0..794d967 100644 --- a/src/app/system-management/host-config/host-config.component.ts +++ b/src/app/system-management/host-config/host-config.component.ts @@ -441,7 +441,7 @@ tracker: analytics: config: 'config/config_nvdsanalytics.txt' - + peoplenet: enable: true apply_on: -1 diff --git a/src/app/system-management/kafka/kafka.component.html b/src/app/system-management/kafka/kafka.component.html new file mode 100644 index 0000000..5bfa2d8 --- /dev/null +++ b/src/app/system-management/kafka/kafka.component.html @@ -0,0 +1 @@ +

kafka works!

diff --git a/src/app/system-management/kafka/kafka.component.scss b/src/app/system-management/kafka/kafka.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/system-management/kafka/kafka.component.ts b/src/app/system-management/kafka/kafka.component.ts new file mode 100644 index 0000000..394c064 --- /dev/null +++ b/src/app/system-management/kafka/kafka.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-kafka', + templateUrl: './kafka.component.html', + styleUrls: ['./kafka.component.scss'] +}) +export class KafkaComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/system-management/navigation/navigation.component.html b/src/app/system-management/navigation/navigation.component.html index e736fa5..6534a33 100644 --- a/src/app/system-management/navigation/navigation.component.html +++ b/src/app/system-management/navigation/navigation.component.html @@ -13,9 +13,16 @@ @@ -35,4 +42,4 @@ - + \ No newline at end of file diff --git a/src/app/system-management/status-monitoring/status-monitoring.component.html b/src/app/system-management/status-monitoring/status-monitoring.component.html new file mode 100644 index 0000000..974b104 --- /dev/null +++ b/src/app/system-management/status-monitoring/status-monitoring.component.html @@ -0,0 +1,92 @@ +
+
+ + +
+ + + + + + ip地址 + 所属油站 + 设备状态 + + + + + + {{ data.hostIPAddress }} + {{ data.gasStationName }} + + + 离线 + + + 在线 + + + + + + +
\ No newline at end of file diff --git a/src/app/system-management/status-monitoring/status-monitoring.component.scss b/src/app/system-management/status-monitoring/status-monitoring.component.scss new file mode 100644 index 0000000..727b74a --- /dev/null +++ b/src/app/system-management/status-monitoring/status-monitoring.component.scss @@ -0,0 +1,17 @@ +.topbox { + form { + display: flex; + + nz-form-item { + margin-right: 6px; + } + + button { + margin-right: 6px; + } + } + + .searchParams { + width: 250px; + } +} diff --git a/src/app/system-management/status-monitoring/status-monitoring.component.ts b/src/app/system-management/status-monitoring/status-monitoring.component.ts new file mode 100644 index 0000000..5afd2a9 --- /dev/null +++ b/src/app/system-management/status-monitoring/status-monitoring.component.ts @@ -0,0 +1,171 @@ +import { HttpClient } from '@angular/common/http'; +import { Component, OnInit, ViewContainerRef } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { NzMessageService } from 'ng-zorro-antd/message'; +import { NzModalService } from 'ng-zorro-antd/modal'; +import { TreeService } from 'src/app/service/tree.service'; + +@Component({ + selector: 'app-status-monitoring', + templateUrl: './status-monitoring.component.html', + styleUrls: ['./status-monitoring.component.scss'] +}) +export class StatusMonitoringComponent implements OnInit { + + constructor(private http: HttpClient, private fb: FormBuilder, private toTree: TreeService, private message: NzMessageService, private modal: NzModalService, private viewContainerRef: ViewContainerRef) { } + validateForm!: FormGroup; + ngOnInit(): void { + this.validateForm = this.fb.group({ + organization: [null], + state: [null] + }); + this.getAllOrganization() + + } + //获取所有组织机构 + nodes: any = [] + defaultOrId: string + defaultExpandedKeys = []; + getAllOrganization() { + let params = { + ContainsChildren: true, + pageSize: 9999 + } + this.http.get('/api/Organizations', { + params: params + }).subscribe((data: any) => { + console.log('组织机构列表', data) + data.items.forEach(element => { + element.key = element.id + element.title = element.name + // element.selectable = false + }); + this.nodes = [...this.toTree.toTree(data.items)] + this.defaultOrId = this.nodes[0].id + this.validateForm.value.organization = this.defaultOrId + this.getConditionMonitoring() + }) + } + + submitForm(): void { + for (const i in this.validateForm.controls) { + this.validateForm.controls[i].markAsDirty(); + this.validateForm.controls[i].updateValueAndValidity(); + } + this.getConditionMonitoring() + } + resetForm(e: MouseEvent): void { + e.preventDefault(); + this.validateForm.reset(); + for (const key in this.validateForm.controls) { + this.validateForm.controls[key].markAsPristine(); + this.validateForm.controls[key].updateValueAndValidity(); + } + this.validateForm.patchValue({ + organization: this.nodes[0].id, + }); + this.PageNumber = 1 + this.getConditionMonitoring() + } + listOfData: any + num: string + PageNumber: number = 1 + isLoading = false + //获取盒子状态 + getConditionMonitoring() { + let params = { + ContainsChildren: true, + OrganizationId: this.defaultOrId, + PageNumber: this.PageNumber, + PageSize: 10, + HubConnectionState: this.validateForm.value.state + } + this.isLoading = true + this.http.get('/api/EdgeDevices/Statuses', { params: params }).subscribe( + (data: any) => { + console.log(data) + this.isLoading = false + this.listOfData = data.items + this.num = data.totalCount + }, err => { + + } + ) + } + pageChange($event) { + this.PageNumber = $event + this.getConditionMonitoring() + } + + + checked = false; + loading + indeterminate = false; + listOfCurrentPageData: readonly any[] = []; + setOfCheckedId = new Set(); + updateCheckedSet(id: number, checked: boolean): void { + if (checked) { + this.setOfCheckedId.add(id); + } else { + this.setOfCheckedId.delete(id); + } + } + + onCurrentPageDataChange(listOfCurrentPageData: readonly any[]): void { + this.listOfCurrentPageData = listOfCurrentPageData; + this.refreshCheckedStatus(); + } + + refreshCheckedStatus(): void { + const listOfEnabledData = this.listOfCurrentPageData.filter(({ disabled }) => !disabled); + this.checked = listOfEnabledData.every(({ id }) => this.setOfCheckedId.has(id)); + this.indeterminate = listOfEnabledData.some(({ id }) => this.setOfCheckedId.has(id)) && !this.checked; + } + + onItemChecked(id: number, checked: boolean): void { + this.updateCheckedSet(id, checked); + this.refreshCheckedStatus(); + } + + onAllChecked(checked: boolean): void { + this.listOfCurrentPageData + .filter(({ disabled }) => !disabled) + .forEach(({ id }) => this.updateCheckedSet(id, checked)); + this.refreshCheckedStatus(); + } + + sendRequest(type): void { + + const requestData = this.listOfData.filter(data => this.setOfCheckedId.has(data.id)); + + let strArr = [] + requestData.forEach(element => { + strArr.push(element.id) + }); + let body + this.loading = type; + body = { + edgeDeviceIds: strArr + } + this.http.patch('/api/EdgeDevices/Commands', body, { params: { command: type } }).subscribe({ + next: (data: any) => { + this.message.create('success', '通知边缘盒子成功,请过一段时间手动刷新尝试!'); + console.log(data) + if (data.failedItems.length != 0) { + data.failedItems.forEach(element => { + this.message.create('info', element.detail); + }); + } + this.setOfCheckedId.clear(); + this.refreshCheckedStatus(); + this.loading = null; + this.getConditionMonitoring() + }, + error: (err) => { + this.loading = null; + } + }) + + + } +} diff --git a/src/app/system-management/system-management-routing.module.ts b/src/app/system-management/system-management-routing.module.ts index 93b6a4d..5aaf31a 100644 --- a/src/app/system-management/system-management-routing.module.ts +++ b/src/app/system-management/system-management-routing.module.ts @@ -8,6 +8,8 @@ import { PlottingImageComponent } from './plotting-image/plotting-image.componen import { ImageLabel2Component } from './image-label2/image-label2.component'; import { ConfigFormComponent } from './config-form/config-form.component'; import { ConditionMonitoringComponent } from './condition-monitoring/condition-monitoring.component'; +import { KafkaComponent } from './kafka/kafka.component'; +import { StatusMonitoringComponent } from './status-monitoring/status-monitoring.component'; const routes: Routes = [ @@ -19,6 +21,8 @@ const routes: Routes = [ { path: 'host/camera/configForm', component: ConfigFormComponent }, { path: 'plottingImage', component: PlottingImageComponent }, { path: 'conditionMonitoring', component: ConditionMonitoringComponent }, + { path: 'statusMonitoring', component: StatusMonitoringComponent }, + { path: 'kafka', component: KafkaComponent } ]; @NgModule({ diff --git a/src/app/system-management/system-management.module.ts b/src/app/system-management/system-management.module.ts index 0cb057b..aea5713 100644 --- a/src/app/system-management/system-management.module.ts +++ b/src/app/system-management/system-management.module.ts @@ -39,8 +39,11 @@ import { NzTabsModule } from 'ng-zorro-antd/tabs'; import { ConditionMonitoringComponent } from './condition-monitoring/condition-monitoring.component'; import { SendFileComponent } from './host-config/send-file/send-file.component'; import { ModelComponent } from './condition-monitoring/model/model.component'; +import { KafkaComponent } from './kafka/kafka.component'; +import { StatusMonitoringComponent } from './status-monitoring/status-monitoring.component'; +import { FileComponent } from './condition-monitoring/file/file.component'; @NgModule({ - declarations: [OrganizationComponent, NavigationComponent, AddorComponent, EditorComponent, AnalysisOfTheHostComponent, AddhostComponent, EdithostComponent, AddcameraComponent, EditcameraComponent, HostConfigComponent, ImageListComponent, ImageLabelComponent, PlottingImageComponent, cameraType, ImageLabel2Component, ConfigFormComponent, ConditionMonitoringComponent, SendFileComponent, ModelComponent], + declarations: [OrganizationComponent, NavigationComponent, AddorComponent, EditorComponent, AnalysisOfTheHostComponent, AddhostComponent, EdithostComponent, AddcameraComponent, EditcameraComponent, HostConfigComponent, ImageListComponent, ImageLabelComponent, PlottingImageComponent, cameraType, ImageLabel2Component, ConfigFormComponent, ConditionMonitoringComponent, SendFileComponent, ModelComponent, KafkaComponent, StatusMonitoringComponent, FileComponent], imports: [ CommonModule, SystemRoutingModule, @@ -65,7 +68,7 @@ import { ModelComponent } from './condition-monitoring/model/model.component'; NzTabsModule, NzPopconfirmModule ], - entryComponents: [AddorComponent, EditorComponent, AddhostComponent, EdithostComponent, AddcameraComponent, EditcameraComponent, SendFileComponent, ModelComponent] + entryComponents: [AddorComponent, EditorComponent, AddhostComponent, EdithostComponent, AddcameraComponent, EditcameraComponent, SendFileComponent, ModelComponent, FileComponent] }) export class SystemManagementModule { }