d9c1ec34bc5664644dbbda1acf555b4e84ae7a72
[usecase-ui.git] /
1 import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2 import { SlicingTaskServices } from '../../../../../core/services/slicingTaskServices';
3 import { BUSINESS_REQUIREMENT } from '../../../../../../constants/constants';
4
5 @Component({
6   selector: 'app-slicing-task-model',
7   templateUrl: './slicing-task-model.component.html',
8   styleUrls: ['./slicing-task-model.component.less']
9 })
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
16   constructor(private http: SlicingTaskServices) { }
17
18   // 业务需求列表
19   businessList: object[] = BUSINESS_REQUIREMENT;
20   // 配置审核详情
21   checkDetail: any[] = [{}];
22   //业务需求信息
23   businessRequirement: any[] = [];
24   //匹配NST信息 
25   NSTinfo: object[] = [{}];
26   // 共享切片实例
27   selectedServiceId: string;
28   selectedServiceName: string;
29   slicingInstances: any[];
30   loading: boolean = false;
31   // 子网实例
32   slicingSubnet: any[] =  [
33     {
34       title: '无线域',
35       context: 'an',
36       slicingId: '',
37       slicingName: '',
38       instances: []
39     },
40     {
41       title: '传输域',
42       context: 'tn',
43       slicingId: '',
44       slicingName: '',
45       instances: []
46     },
47     {
48       title: '核心域',
49       context: 'cn',
50       slicingId: '',
51       slicingName: '',
52       instances: []
53     }
54   ]
55   // 子网参数
56   isShowParams: boolean;
57   paramsTitle: string;
58   params: any;
59   isDisabled: boolean = true;
60
61   ngOnInit() { }
62   
63   ngOnChanges() {
64     if (this.showDetail) {
65       this.getautidInfo();
66     }
67   }
68
69   getautidInfo(): void {
70     this.http.getAuditInfo(this.taskId).subscribe( res => {
71       const { result_header: { result_code } } = res;
72       if (+result_code === 200) {
73         const { 
74           task_id, 
75           task_name, 
76           create_time, 
77           processing_status, 
78           business_demand_info, 
79           nst_info, nsi_nssi_info, 
80           business_demand_info: { service_snssai } 
81         } = res.result_body;
82         const { 
83           suggest_nsi_id, 
84           suggest_nsi_name, 
85           an_suggest_nssi_id, 
86           an_suggest_nssi_name, 
87           tn_suggest_nssi_id, 
88           tn_suggest_nssi_name, 
89           cn_suggest_nssi_id, 
90           cn_suggest_nssi_name,
91           an_latency,
92           an_5qi,
93           an_coverage_area_ta_list, 
94           tn_latency,
95           tn_bandwidth,
96           cn_service_snssai,
97           cn_resource_sharing_level,
98           cn_ue_mobility_level,
99           cn_latency,
100           cn_max_number_of_ues,
101           cn_activity_factor,
102           cn_exp_data_rate_dl,
103           cn_exp_data_rate_ul,
104           cn_area_traffic_cap_dl,
105           cn_area_traffic_cap_ul
106         } = nsi_nssi_info;
107         // 处理配置审核详情数据
108         this.checkDetail = [{ task_id, task_name, create_time, processing_status, service_snssai }];
109         // 业务需求信息数据
110         this.businessRequirement = [business_demand_info];
111         // 匹配NST信息
112         this.NSTinfo = [nst_info];
113         // 共享切片实例
114         this.selectedServiceId = suggest_nsi_id;
115         this.selectedServiceName = suggest_nsi_name;
116         this.slicingInstances = [{
117           service_instance_id: this.selectedServiceId,
118           service_instance_name: this.selectedServiceName
119         }];
120         // 子网实例
121         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};
122         this.subnetDataFormatting(subnetData);
123         this.slicingSubnet[0].params = { an_latency, an_5qi, an_coverage_area_ta_list } 
124         this.slicingSubnet[1].params = { tn_latency, tn_bandwidth };
125         this.slicingSubnet[2].params = { 
126           cn_service_snssai,
127           cn_resource_sharing_level,
128           cn_ue_mobility_level,
129           cn_latency,
130           cn_max_number_of_ues,
131           cn_activity_factor,
132           cn_exp_data_rate_dl,
133           cn_exp_data_rate_ul,
134           cn_area_traffic_cap_dl,
135           cn_area_traffic_cap_ul 
136         };
137       }
138     })
139   }
140
141   getSlicingData ( bool: boolean): void {
142     this.loading = true;
143     if (bool && this.slicingInstances.length === 1) {
144       this.http.getSlicingInstance('1', '10').subscribe ( res => {
145         this.loading = false;
146         const { result_header: { result_code }, result_body: { nsi_service_instances } } = res
147         if (+result_code === 200) {
148           this.slicingInstances = nsi_service_instances;
149         }
150       })
151     }
152   }
153
154   slicingInstanceChange ():void {
155     this.isDisabled = true;
156     // 获取切片子网实例数据
157     this.http.getSlicingSubnetInstance(this.selectedServiceId).subscribe( res => {
158       const { result_header: { result_code }, result_body} = res;
159       if (+result_code === 200) {
160         this.subnetDataFormatting(result_body)
161       }
162     }) 
163     this.slicingInstances.forEach (item => {
164       if (item.service_instance_id === this.selectedServiceId) {
165         this.selectedServiceName = item.service_instance_name;
166       }
167     })
168   }
169
170   subnetDataFormatting ( subnetData: any): void{
171     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;
172     this.slicingSubnet[0].slicingId = an_suggest_nssi_id;
173     this.slicingSubnet[0].slicingName = an_suggest_nssi_name;
174     this.slicingSubnet[0].instances = [{
175       service_instance_id: an_suggest_nssi_id,
176       service_instance_name: an_suggest_nssi_name
177     }];
178
179     this.slicingSubnet[1].slicingId = tn_suggest_nssi_id;
180     this.slicingSubnet[1].slicingName = tn_suggest_nssi_name;
181     this.slicingSubnet[1].instances = [{
182       service_instance_id: tn_suggest_nssi_id,
183       service_instance_name: tn_suggest_nssi_name
184     }]; 
185
186     this.slicingSubnet[2].slicingId = cn_suggest_nssi_id;
187     this.slicingSubnet[2].slicingName = cn_suggest_nssi_name;
188     this.slicingSubnet[2].instances = [{
189       service_instance_id: cn_suggest_nssi_id,
190       service_instance_name: cn_suggest_nssi_name
191     }];
192   }
193
194   resetSlicingInstance (): void {
195     this.selectedServiceId = '';
196     this.selectedServiceName = '';
197     this.slicingSubnet.map( item => {
198       item.slicingId = '';
199       item.slicingName = '';
200     })
201     this.isDisabled = false;
202   }
203
204   getSubnetInstances (bool: boolean, instance: any): void {
205     if(bool && instance.instances.length === 1) {
206       this.http.getSubnetInContext(instance.context, '1', '10').subscribe( res => {
207         const { result_header: { result_code }, result_body } = res;
208         if (+result_code === 200) {
209           this.slicingSubnet.map (item => {
210             if (item.context === instance.context) {
211               item.instances = result_body.nssi_service_instances;
212             }
213           })
214         }
215       })
216     }
217   }
218
219   slicingSubnetChange (instance: any): void {
220     instance.instances.forEach( item => {
221       if (instance.slicingId === item.service_instance_id) {
222         instance.slicingName = item.service_instance_name; 
223       }
224     })
225   }
226
227   restSubnetInstance (instance: any): void {
228     instance.slicingId = '';
229     instance.slicingName = '';
230   }
231
232   showParamsModel (item: any): void {
233     this.isShowParams = true;
234     this.paramsTitle = item.title;
235     this.params = item.params
236   }
237
238   changeParams (params: any): void {
239     const index = this.paramsTitle === '无线域' ? 0 : (this.paramsTitle === '传输域' ? 1 : 2);
240     this.slicingSubnet[index].params = params
241   }
242
243   handleCancel() {
244     this.showDetail = false;
245     this.cancel.emit(this.showDetail);
246   }
247   handleOk() {
248     const { selectedServiceId, selectedServiceName, slicingSubnet, checkDetail, businessRequirement, NSTinfo } = this;
249     const nsi_nssi_info: object = {
250       suggest_nsi_id:  selectedServiceId,
251       suggest_nsi_name: selectedServiceName,
252       an_suggest_nssi_id: slicingSubnet[0].slicingId,
253       an_suggest_nssi_name: slicingSubnet[0].slicingName,
254       ...slicingSubnet[0].params,
255       tn_suggest_nssi_id: slicingSubnet[1].slicingId,
256       tn_suggest_nssi_name: slicingSubnet[1].slicingName,
257       ...slicingSubnet[1].params,
258       cn_suggest_nssi_id: slicingSubnet[2].slicingId,
259       cn_suggest_nssi_name: slicingSubnet[2].slicingName,
260       ...slicingSubnet[2].params,
261     }
262     let reqBody = {...checkDetail[0], business_demand_info: businessRequirement[0], nst_info: NSTinfo[0], nsi_nssi_info};
263     delete reqBody.service_snssai;
264     this.http.submitSlicing(reqBody).subscribe (res => {
265       const { result_header: { result_code } } = res;
266       if (+result_code === 200) {
267         console.log('成功提交')
268         this.handleCancel();
269       }
270     })
271   }
272 }