summaryrefslogtreecommitdiffstats
path: root/usecaseui-portal/src/app/views/services/slicing-management/slicing-resource-management/slicing-business-management/slicing-business-table/slicing-business-table.component.ts
blob: 2dd1f0c8da89a93bd8d81b861649d7df9370268e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
import {Component, OnInit, ViewChild} from '@angular/core';
import {SlicingTaskServices} from '.././../../../../../core/services/slicingTaskServices';
import {BUSINESS_STATUS} from '../../../../../../../constants/constants';
import { NzModalService,NzMessageService } from 'ng-zorro-antd';
import { SlicingBusinessModelComponent } from '../slicing-business-model/slicing-business-model.component';
@Component({
    selector: 'app-slicing-business-table',
    templateUrl: './slicing-business-table.component.html',
    styleUrls: ['./slicing-business-table.component.less']
})
export class SlicingBusinessTableComponent implements OnInit {

    constructor(
        private myhttp: SlicingTaskServices,
        private modalService: NzModalService,
        private message: NzMessageService
        ) {
    }

    ngOnInit() {
        this.getBusinessList()
    }
    ngOnDestroy() {
        this.progressingTimer.forEach((item) => {
            clearInterval(item.timer);
        })
        this.progressingTimer = [];
    }
    selectedValue:string = BUSINESS_STATUS[0];
    listOfData: any[] = [];
    pageIndex: number = 1;
    pageSize: number = 10;
    total: number = 0;
    loading = false;
    isSelect: boolean = false;
    statusOptions: any[] = BUSINESS_STATUS;
    progressingTimer :any[] = [];
    terminateStart :boolean = false;
    @ViewChild('notification') notification1: any;

    getBusinessList (): void{
        this.loading = true;
        this.isSelect = false;
        let paramsObj = {
            pageNo: this.pageIndex,
            pageSize: this.pageSize
        };
        if(this.selectedValue !== BUSINESS_STATUS[0]){
            paramsObj["businessStatus"] = this.selectedValue;
            this.isSelect = true;
        }
        this.myhttp.getSlicingBusinessList(paramsObj,this.isSelect).subscribe (res => {
            const { result_header: { result_code }, result_body: { slicing_business_list,record_number } } = res;
            if (+result_code === 200) {
                this.total = record_number;
                this.loading = false;
                this.listOfData = slicing_business_list.map((item,index)=>{
                    if(item.last_operation_progress!==null && item.last_operation_progress < 100 && item.last_operation_type!==null){
                        let updata = (prodata) => {
                            item.last_operation_progress = prodata.operation_progress || item.last_operation_progress;
                        };
                        let obj = {
                            serviceId: item.service_instance_id
                        };
                        if(item.last_operation_type === 'delete')this.terminateStart = true;
                        this.queryProgress(obj,item.orchestration_status,index, updata).then((res) => {
                            item.last_operation_progress = 100;
                        })
                    }
                    return item
                });
            }
        })
    }
    getListOfProcessingStatus(){
        this.pageIndex = 1;
        this.pageSize = 10;
        this.progressingTimer.forEach((item) => {
            clearInterval(item.timer);
        });
        this.progressingTimer = [];
        this.getBusinessList();
    }
    searchData(reset: boolean = false) {
        this.progressingTimer.forEach((item) => {
            clearInterval(item.timer);
        });
        this.progressingTimer = [];
        this.getBusinessList();
    }
    switchChange(slicing,i){
        this.modalService.confirm({
            nzTitle: '<i>Do you Want to'+(slicing.orchestration_status === 'activated'?'deactivated':'activated')+ 'slicing business?</i>',
            nzContent: '<b>Name:'+slicing.service_instance_name+'</b>',
            nzOnOk: () => {
                this.notification1.notificationStart('slicing business', slicing.orchestration_status === 'activated'?'deactivate':'activated', slicing.service_instance_id);
                let paramsObj = {
                    serviceId:slicing.service_instance_id
                };
                if(slicing.orchestration_status === 'activated'){
                    this.changeActivate(paramsObj,false,slicing,"deactivate","deactivated",i)
                }else {
                    this.changeActivate(paramsObj,true,slicing,"activate","activated",i);
                }
            },
            nzCancelText: 'No',
            nzOnCancel: () => {
                let singleSlicing = Object.assign({},this.listOfData[i]);
                this.listOfData[i] = singleSlicing;
                this.listOfData = [...this.listOfData];
            }
        });
    }
    changeActivate(paramsObj,isActivate,slicing,activateValue,finished,index){
        this.myhttp.changeActivateSlicingService(paramsObj,isActivate).subscribe (res => {
            const { result_header: { result_code, result_message }, result_body: { operation_id } } = res;
            if (+result_code === 200) {
                this.notification1.notificationSuccess('slicing business', finished, slicing.service_instance_id);
                this.getBusinessList();
            }else {
                let singleSlicing = Object.assign({},this.listOfData[index]);
                this.listOfData[index] = singleSlicing;
                this.listOfData = [...this.listOfData];
                this.notification1.notificationFailed('slicing business', finished, slicing.service_instance_id);
                this.getBusinessList();
            }
            this.getBusinessList();
        },() => {
            let singleSlicing = Object.assign({},this.listOfData[index]);
            this.listOfData[index] = singleSlicing;
            this.listOfData = [...this.listOfData];
            this.notification1.notificationFailed('slicing business', finished, slicing.service_instance_id);
            this.getBusinessList();
        })
    }
    terminate(slicing){
        this.modalService.confirm({
            nzTitle: 'Do you Want to Terminate slicing business?',
            nzContent: '<b>Name:&nbsp;</b>'+slicing.service_instance_name,
            nzOnOk: () => {
                this.notification1.notificationStart('slicing business', 'terminate', slicing.service_instance_id);
                let paramsObj = {
                    serviceId:slicing.service_instance_id
                };
                this.terminateStart = true;
                this.myhttp.terminateSlicingService(paramsObj).subscribe (res => {
                    const { result_header: { result_code, result_message }, result_body: { operation_id } } = res;
                    if (+result_code === 200) {
                        this.getBusinessList();
                    }else {
                        this.notification1.notificationFailed('slicing business', 'terminate', slicing.service_instance_id);
                        this.terminateStart = false;
                    }
                },() => {
                    this.notification1.notificationFailed('slicing business', 'terminate', slicing.service_instance_id);
                    this.terminateStart = false;
                })
            },
            nzCancelText: 'No',
            nzOnCancel: () => {
                console.info('Cancel termination')
            }
        });
    }
    showdetail(data) {
        const BusinessModal = this.modalService.create({
            nzTitle:"Detail",
            nzContent: SlicingBusinessModelComponent,
            nzWidth:"70%",
            nzOkText: null,
            nzCancelText: null,
            nzComponentParams:{
                businessId:data.service_instance_id
            }
        })
    }
    queryProgress(obj,action,index,callback) {
        return new Promise( res => {
            let requery = () => {
                this.myhttp.getSlicingBusinessProgress(obj)
                    .subscribe((data) => {
                        const { result_header: { result_code, result_message }, result_body: { operation_id } } = data;
                        if (+result_code === 200) {
                            if (data.result_body.operation_progress < 100) {
                                callback(data.result_body);
                                let progressSetTimeOut = setTimeout(() => {
                                    requery();
                                }, 5000);
                                this.progressingTimer.push({
                                    id: obj.serviceId,
                                    timer: progressSetTimeOut
                                })
                            } else {
                                this.progressingTimer.forEach((item) => {
                                    if (item.serviceId === obj.serviceId) {
                                        clearInterval(item.timer);
                                    }
                                });
                                res(data.result_body);
                            }
                        }else {
                            this.progressingTimer.forEach((item) => {
                                if (item.serviceId === obj.serviceId) {
                                    clearInterval(item.timer);
                                }
                            });
                            this.getBusinessList();
                            this.message.error(result_message);
                        }
                    },(err) => {
                        this.progressingTimer.forEach((item) => {
                            if (item.serviceId === obj.serviceId) {
                                clearInterval(item.timer);
                            }
                        });
                        this.getBusinessList();
                        this.message.error(err);
                    })
            };
            requery();
        })
    }
}