1 import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2 import { NzMessageService } from 'ng-zorro-antd';
3 import { SlicingTaskServices } from '../../../../../core/services/slicingTaskServices';
6 selector: 'app-slicing-task-model',
7 templateUrl: './slicing-task-model.component.html',
8 styleUrls: ['./slicing-task-model.component.less']
10 export class SlicingTaskModelComponent implements OnInit {
11 @Input() showDetail: boolean;
12 @Input() moduleTitle: string;
13 @Input() taskId: string;
14 @Output() cancel = new EventEmitter<boolean>();
15 @ViewChild('notification') notification1: any;
17 constructor(private http: SlicingTaskServices, private message: NzMessageService) { }
20 checkDetail: any[] = [{}];
22 businessRequirement: any[] = [];
24 NSTinfo: object[] = [{}];
26 selectedServiceId: string;
27 selectedServiceName: string;
28 slicingInstances: any;
29 loading: boolean = false;
31 slicingSubnet: any[] = [
69 isDisabled: boolean = true;
71 isShowParams: boolean;
80 if (this.showDetail) {
83 this.isDisabled = true;
87 getautidInfo(): void {
88 this.http.getAuditInfo(this.taskId).subscribe( res => {
89 const { result_header: { result_code } } = res;
90 if (+result_code === 200) {
97 nst_info, nsi_nssi_info,
98 business_demand_info: { service_snssai }
104 an_suggest_nssi_name,
106 tn_suggest_nssi_name,
108 cn_suggest_nssi_name,
111 an_coverage_area_ta_list,
115 cn_resource_sharing_level,
116 cn_ue_mobility_level,
118 cn_max_number_of_ues,
122 cn_area_traffic_cap_dl,
123 cn_area_traffic_cap_ul
126 this.checkDetail = [{ task_id, task_name, create_time, processing_status, service_snssai }];
128 this.businessRequirement = [business_demand_info];
130 this.NSTinfo = [nst_info];
132 this.selectedServiceId = suggest_nsi_id;
133 this.selectedServiceName = suggest_nsi_name;
134 this.slicingInstances = {
141 service_instance_id: this.selectedServiceId,
142 service_instance_name: this.selectedServiceName
146 let subnetData = { an_suggest_nssi_id, an_suggest_nssi_name, tn_suggest_nssi_id, tn_suggest_nssi_name, cn_suggest_nssi_id, cn_suggest_nssi_name};
147 this.subnetDataFormatting(subnetData, 0);
148 this.slicingSubnet[0].params = { an_latency, an_5qi, an_coverage_area_ta_list }
149 this.slicingSubnet[1].params = { tn_latency, tn_bandwidth };
150 this.slicingSubnet[2].params = {
152 cn_resource_sharing_level,
153 cn_ue_mobility_level,
155 cn_max_number_of_ues,
159 cn_area_traffic_cap_dl,
160 cn_area_traffic_cap_ul
166 openSlicingInstance ( bool: boolean): void {
167 const { total, currentPage, pageSize} = this.slicingInstances;
168 if (bool && !total) {
169 this.slicingInstances.list = [];
170 this.getSlicingInstances(currentPage, pageSize)
174 getNextPageData ():void {
175 const { total, currentPage, pageSize} = this.slicingInstances;
176 if (total - (+currentPage * +pageSize) > 0 ) {
177 if (this.slicingInstances.flag) return;
178 this.slicingInstances.isLoading = true;
179 this.slicingInstances.flag = true
181 this.getSlicingInstances(currentPage, pageSize)
183 this.slicingInstances.currentPage ++ ;
187 getSlicingInstances(pageNo: string, pageSize: string): void {
188 this.http.getSlicingInstance(pageNo, pageSize).subscribe ( res => {
189 const { result_header: { result_code }, result_body } = res;
190 if (+result_code === 200) {
191 const { nsi_service_instances, record_number } = result_body;
192 this.slicingInstances.total = record_number;
193 this.slicingInstances.list.push(...nsi_service_instances);
195 this.message.error('Failed to get slicing instance ID')
197 this.slicingInstances.isLoading = false;
198 this.slicingInstances.flag = false;
204 slicingInstanceChange ():void {
205 this.isDisabled = true;
207 this.http.getSlicingSubnetInstance(this.selectedServiceId).subscribe( res => {
208 const { result_header: { result_code }, result_body, record_number} = res;
209 if (+result_code === 200) {
210 this.subnetDataFormatting(result_body, record_number)
212 this.message.error('Failed to get slicing subnet instance ID')
215 this.slicingInstances.list.forEach (item => {
216 if (item.service_instance_id === this.selectedServiceId) {
217 this.selectedServiceName = item.service_instance_name;
222 subnetDataFormatting ( subnetData: any, total: number): void{
223 const { an_suggest_nssi_id, an_suggest_nssi_name, tn_suggest_nssi_id, tn_suggest_nssi_name, cn_suggest_nssi_id, cn_suggest_nssi_name } = subnetData;
224 this.slicingSubnet[0].slicingId = an_suggest_nssi_id;
225 this.slicingSubnet[0].slicingName = an_suggest_nssi_name;
226 this.slicingSubnet[0].total = total;
227 this.slicingSubnet[0].currentPage = '1';
228 this.slicingSubnet[0].instances = [{
229 service_instance_id: an_suggest_nssi_id,
230 service_instance_name: an_suggest_nssi_name
233 this.slicingSubnet[1].slicingId = tn_suggest_nssi_id;
234 this.slicingSubnet[1].slicingName = tn_suggest_nssi_name;
235 this.slicingSubnet[1].total = total;
236 this.slicingSubnet[1].currentPage = '1';
237 this.slicingSubnet[1].instances = [{
238 service_instance_id: tn_suggest_nssi_id,
239 service_instance_name: tn_suggest_nssi_name
242 this.slicingSubnet[2].slicingId = cn_suggest_nssi_id;
243 this.slicingSubnet[2].slicingName = cn_suggest_nssi_name;
244 this.slicingSubnet[2].total = total;
245 this.slicingSubnet[2].currentPage = '1';
246 this.slicingSubnet[2].instances = [{
247 service_instance_id: cn_suggest_nssi_id,
248 service_instance_name: cn_suggest_nssi_name
252 resetSlicingInstance (): void {
253 this.selectedServiceId = '';
254 this.selectedServiceName = '';
255 this.slicingSubnet.map( item => {
257 item.slicingName = '';
259 this.isDisabled = false;
262 openSubnetInstances (bool: boolean, instance: any): void {
263 if(bool && !instance.total) {
264 instance.instances = []
265 this.getSubnetInstances(instance)
269 getNextPageSubnet (instance: any): void{
270 const { total, currentPage, pageSize} = instance;
271 if(total - (+currentPage * +pageSize) > 0 ){
272 if (instance.flag) return;
273 instance.isLoading = true;
274 instance.flag = true;
276 this.getSubnetInstances(instance);
278 instance.currentPage ++;
282 getSubnetInstances (instance: any): void {
283 const { context, currentPage, pageSize } = instance;
284 this.http.getSubnetInContext(context, currentPage, pageSize).subscribe( res => {
285 const { result_header: { result_code }, result_body } = res;
286 if (+result_code === 200) {
287 const { nssi_service_instances, record_number } = result_body;
288 this.slicingSubnet.map (item => {
289 if (item.context === context) {
290 item.total = record_number;
291 item.instances.push(...nssi_service_instances);
292 item.isLoading = false;
297 this.message.error('Failed to get slicing subnet instance ID');
302 slicingSubnetChange (instance: any): void {
303 instance.instances.forEach( item => {
304 if (instance.slicingId === item.service_instance_id) {
305 instance.slicingName = item.service_instance_name;
310 restSubnetInstance (instance: any): void {
311 instance.slicingId = '';
312 instance.slicingName = '';
315 showParamsModel (item: any): void {
316 this.isShowParams = true;
317 this.paramsTitle = item.title;
318 this.params = item.params
321 changeParams (params: any): void {
322 const index = this.paramsTitle === '无线域' ? 0 : (this.paramsTitle === '传输域' ? 1 : 2);
323 this.slicingSubnet[index].params = params
327 this.showDetail = false;
328 this.cancel.emit(this.showDetail);
331 const { selectedServiceId, selectedServiceName, slicingSubnet, checkDetail, businessRequirement, NSTinfo } = this;
332 const nsi_nssi_info: object = {
333 suggest_nsi_id: selectedServiceId,
334 suggest_nsi_name: selectedServiceName,
335 an_suggest_nssi_id: slicingSubnet[0].slicingId,
336 an_suggest_nssi_name: slicingSubnet[0].slicingName,
337 ...slicingSubnet[0].params,
338 tn_suggest_nssi_id: slicingSubnet[1].slicingId,
339 tn_suggest_nssi_name: slicingSubnet[1].slicingName,
340 ...slicingSubnet[1].params,
341 cn_suggest_nssi_id: slicingSubnet[2].slicingId,
342 cn_suggest_nssi_name: slicingSubnet[2].slicingName,
343 ...slicingSubnet[2].params,
345 let reqBody = {...checkDetail[0], business_demand_info: businessRequirement[0], nst_info: NSTinfo[0], nsi_nssi_info};
346 delete reqBody.service_snssai;
347 this.notification1.notificationStart('Task', 'Sumbit', this.taskId)
348 this.http.submitSlicing(reqBody).subscribe (res => {
349 const { result_header: { result_code } } = res;
350 if (+result_code === 200) {
352 this.notification1.notificationSuccess('Task', 'Sumbit', this.taskId)
354 this.notification1.notificationFailed('Task', 'Sumbit', this.taskId)