update methods for get serviceInstances 44/71444/1
authorguochuyicmri <guochuyi@chinamobile.com>
Tue, 30 Oct 2018 09:37:35 +0000 (17:37 +0800)
committerguochuyicmri <guochuyi@chinamobile.com>
Tue, 30 Oct 2018 09:37:45 +0000 (17:37 +0800)
Change-Id: Icbd7b4ab0e982fcc7b9e296fb0663b91decb09f7
Issue-ID: USECASEUI-168
Signed-off-by: guochuyicmri <guochuyi@chinamobile.com>
server/src/main/java/org/onap/usecaseui/server/controller/lcm/PackageDistributionController.java
server/src/main/java/org/onap/usecaseui/server/controller/lcm/ServiceInstanceController.java
server/src/main/java/org/onap/usecaseui/server/service/lcm/PackageDistributionService.java
server/src/main/java/org/onap/usecaseui/server/service/lcm/domain/aai/bean/nsServiceRsp.java [new file with mode: 0644]
server/src/main/java/org/onap/usecaseui/server/service/lcm/domain/vfc/VfcService.java
server/src/main/java/org/onap/usecaseui/server/service/lcm/impl/DefaultPackageDistributionService.java
server/src/main/java/org/onap/usecaseui/server/service/lcm/impl/DefaultServiceInstanceService.java

index ac1085b..f580a9f 100644 (file)
  */
 package org.onap.usecaseui.server.controller.lcm;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
+import org.onap.usecaseui.server.bean.ServiceBean;
 import org.onap.usecaseui.server.bean.lcm.VfNsPackageInfo;
 import org.onap.usecaseui.server.service.lcm.PackageDistributionService;
+import org.onap.usecaseui.server.service.lcm.ServiceLcmService;
 import org.onap.usecaseui.server.service.lcm.domain.sdc.bean.SDCServiceTemplate;
 import org.onap.usecaseui.server.service.lcm.domain.sdc.bean.Vnf;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.beans.Csar;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.beans.DistributionResult;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.beans.Job;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.beans.JobStatus;
+import org.onap.usecaseui.server.util.UuiCommonUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.EnableAspectJAutoProxy;
@@ -39,6 +43,9 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
 @RestController
 @org.springframework.context.annotation.Configuration
 @EnableAspectJAutoProxy
@@ -52,7 +59,14 @@ public class PackageDistributionController {
     public void setPackageDistributionService(PackageDistributionService packageDistributionService) {
         this.packageDistributionService = packageDistributionService;
     }
+    
+    @Resource(name="ServiceLcmService")
+    private ServiceLcmService serviceLcmService;
 
+    public void setServiceLcmService(ServiceLcmService serviceLcmService) {
+        this.serviceLcmService = serviceLcmService;
+    }
+    
     @ResponseBody
     @RequestMapping(value = {"/uui-lcm/vf-ns-packages"}, method = RequestMethod.GET , produces = "application/json")
     public VfNsPackageInfo retrievePackageInfo(){
@@ -95,7 +109,14 @@ public class PackageDistributionController {
     public DistributionResult deleteNsPackage(@PathVariable("casrId") String casrId){
         return packageDistributionService.deleteNsPackage(casrId);
     }
-
+    
+    @ResponseBody
+    @RequestMapping(value = {"/uui-lcm/jobs/getNsLcmJobStatus/{jobId}"}, method = RequestMethod.GET , produces = "application/json")
+    public JobStatus getNsLcmJobStatus(@PathVariable(value="jobId") String jobId, HttpServletRequest request){
+        String responseId = request.getParameter("responseId");
+        return packageDistributionService.getNsLcmJobStatus(jobId, responseId);
+    }
+    
     @ResponseBody
     @RequestMapping(value = {"/uui-lcm/vf-packages/{casrId}"}, method = RequestMethod.DELETE , produces = "application/json")
     public Job deleteVfPackage(@PathVariable("casrId") String casrId){
@@ -188,7 +209,7 @@ public class PackageDistributionController {
     }
     
     @RequestMapping(value = {"/uui-lcm/getNetworkServiceInfo}"}, method = RequestMethod.GET , produces = "application/json")
-    public String getNetworkServiceInfo(){
+    public List<String> getNetworkServiceInfo(){
         return packageDistributionService.getNetworkServiceInfo();
     }
     
@@ -203,8 +224,14 @@ public class PackageDistributionController {
     }
     
     @RequestMapping(value = {"/uui-lcm/instantiateNetworkServiceInstance}"}, method = RequestMethod.POST , produces = "application/json")
-    public String instantiateNetworkServiceInstance(HttpServletRequest request,@RequestParam String ns_instance_id){
-        return packageDistributionService.terminateNetworkServiceInstance(request,ns_instance_id);
+    public String instantiateNetworkServiceInstance(HttpServletRequest request){
+       String customerId = request.getParameter("customerId");
+       String serviceType = request.getParameter("serviceType");
+       String serviceDomain = request.getParameter("serviceDomain");
+       String ns_instance_id = request.getParameter("ns_instance_id");
+       ServiceBean serviceBean = new ServiceBean(UuiCommonUtil.getUUID(),ns_instance_id,customerId,serviceType,serviceDomain,null,null,null);
+       serviceLcmService.saveOrUpdateServiceBean(serviceBean);
+        return packageDistributionService.instantiateNetworkServiceInstance(request,ns_instance_id);
     }
     
     @RequestMapping(value = {"/uui-lcm/terminateNetworkServiceInstance}"}, method = RequestMethod.POST , produces = "application/json")
index 2a0befc..fb911b7 100644 (file)
 package org.onap.usecaseui.server.controller.lcm;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
 import org.onap.usecaseui.server.bean.ServiceBean;
+import org.onap.usecaseui.server.service.lcm.PackageDistributionService;
 import org.onap.usecaseui.server.service.lcm.ServiceInstanceService;
 import org.onap.usecaseui.server.service.lcm.ServiceLcmService;
 import org.onap.usecaseui.server.util.UuiCommonUtil;
@@ -49,35 +52,51 @@ public class ServiceInstanceController {
     @Resource(name="ServiceInstanceService")
     private ServiceInstanceService serviceInstanceService;
     
-    @Resource(name="ServiceLcmService")
-    private ServiceLcmService serviceLcmService;
+    @Resource(name="PackageDistributionService")
+    private PackageDistributionService packageDistributionService;
+
+    public void setPackageDistributionService(PackageDistributionService packageDistributionService) {
+        this.packageDistributionService = packageDistributionService;
+    }
 
     public void setServiceInstanceService(ServiceInstanceService serviceInstanceService) {
         this.serviceInstanceService = serviceInstanceService;
     }
 
-       public void setServiceLcmService(ServiceLcmService serviceLcmService) {
-               this.serviceLcmService = serviceLcmService;
-       }
-
        @ResponseBody
     @RequestMapping(value = {"/uui-lcm/service-instances"}, method = RequestMethod.GET , produces = "application/json")
-    public List<String> listServiceInstances(HttpServletRequest request){
-               List<String> result = new ArrayList<String>();
+    public String listServiceInstances(HttpServletRequest request) throws JsonProcessingException{
+               ObjectMapper mapper = new ObjectMapper();
         String customerId = request.getParameter("customerId");
         String serviceType = request.getParameter("serviceType");
         String currentPage = request.getParameter("currentPage");
         String pageSize = request.getParameter("pageSize");
         List<String> serviceInstances =serviceInstanceService.listServiceInstances(customerId, serviceType);
-        if(serviceInstances.size()>0){
-               try {
-                               result = this.parseServiceInstance(serviceInstances,currentPage,pageSize,customerId,serviceType);
-                       } catch (JsonProcessingException e) {
-                               logger.error("exception occurred while performing ServiceInstanceController listServiceInstances. Details:" + e.getMessage());
-                       }
-        }
-        return result;
+        Map<String,Object> map = new HashMap<>();
+        map.put("total", serviceInstances.size());
+        map.put("tableList", UuiCommonUtil.getPageList(serviceInstances, Integer.parseInt(currentPage), Integer.parseInt(pageSize)));
+        return mapper.writeValueAsString(map);
     }
+       
+       @ResponseBody
+    @RequestMapping(value = {"/uui-lcm/service-ns-instances"}, method = RequestMethod.GET , produces = "application/json")
+    public String listNsOrServiceInstances(HttpServletRequest request) throws JsonProcessingException{
+               ObjectMapper mapper = new ObjectMapper();
+        String customerId = request.getParameter("customerId");
+        String serviceType = request.getParameter("serviceType");
+        String currentPage = request.getParameter("currentPage");
+        String pageSize = request.getParameter("pageSize");
+        List<String> serviceInstances =serviceInstanceService.listServiceInstances(customerId, serviceType);
+        List<String> nsServiceInstances = packageDistributionService.getNetworkServiceInfo();
+        List<String> result = new ArrayList<>();
+        result.addAll(serviceInstances);
+        result.addAll(nsServiceInstances);
+        Map<String,Object> map = new HashMap<>();
+        map.put("total", result.size());
+        map.put("tableList", UuiCommonUtil.getPageList(result, Integer.parseInt(currentPage), Integer.parseInt(pageSize)));
+        return mapper.writeValueAsString(map);
+    }
+       
     @ResponseBody
     @RequestMapping(value = {"/uui-lcm/getServiceInstanceById"}, method = RequestMethod.GET , produces = "application/json")
     public String getServiceInstanceById(HttpServletRequest request){
@@ -115,30 +134,4 @@ public class ServiceInstanceController {
                }
         return result.toString() ;
     }
-    
-    @SuppressWarnings("unchecked")
-       private List<String> parseServiceInstance(List<String> list,String currentPage,String pageSize,String customerId,String serviceType) throws JsonProcessingException{
-       ObjectMapper mapper = new ObjectMapper();
-       List<String> result = new ArrayList<>();
-       for(String serviceInstance:list){
-                       JSONObject object =  JSON.parseObject(serviceInstance);
-                       String serviceInstanceId=object.get("service-instance-id").toString();
-                       ServiceBean serviceBean = serviceLcmService.getServiceBeanByServiceInStanceId(serviceInstanceId);
-                       String serviceDomain = serviceBean.getServiceDomain();
-                               object.put("serviceDomain",serviceDomain);
-                               if("SOTN".equals(serviceDomain)||"CCVPN".equals(serviceDomain)||"E2E Service".equals(serviceDomain)||"Network Service".equals(serviceDomain)){
-                                       List<String> parentIds = serviceLcmService.getServiceInstanceIdByParentId(serviceInstanceId);
-                                       List<String> parentServiceInstances = new ArrayList<>();
-                                       if(parentIds.size()>0){
-                                               for(String id:parentIds){
-                                                       String parentServiceInstance=serviceInstanceService.getRelationShipData(customerId, serviceType, id);
-                                                       parentServiceInstances.add(parentServiceInstance);
-                                               }
-                                       }
-                                       object.put("childServiceInstances",mapper.writeValueAsString(parentServiceInstances));
-                                       result.add(mapper.writeValueAsString(object));
-                               }
-       }
-       return UuiCommonUtil.getPageList(result, Integer.parseInt(currentPage), Integer.parseInt(pageSize));
-    }
 }
index 6a0d2d9..cd49038 100644 (file)
@@ -41,6 +41,8 @@ public interface PackageDistributionService {
     Job postVfPackage(Csar csar);
 
     JobStatus getJobStatus(String jobId, String responseId);
+    
+    JobStatus getNsLcmJobStatus(String jobId, String responseId);
 
     DistributionResult deleteNsPackage(String csarId);
 
@@ -80,7 +82,7 @@ public interface PackageDistributionService {
     
     String deletePnfPackage(String pnfdInfoId);
     
-    String getNetworkServiceInfo();
+    List<String> getNetworkServiceInfo();
     
     String createNetworkServiceInstance(HttpServletRequest request);
     
diff --git a/server/src/main/java/org/onap/usecaseui/server/service/lcm/domain/aai/bean/nsServiceRsp.java b/server/src/main/java/org/onap/usecaseui/server/service/lcm/domain/aai/bean/nsServiceRsp.java
new file mode 100644 (file)
index 0000000..5ffdc2b
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2018 CMCC, Inc. and others. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.usecaseui.server.service.lcm.domain.aai.bean;
+
+import java.util.List;
+
+public class nsServiceRsp {
+       
+       public List<String> nsServices;
+
+       public List<String> getNsServices() {
+               return nsServices;
+       }
+
+       public void setNsServices(List<String> nsServices) {
+               this.nsServices = nsServices;
+       }
+       
+}
index da0fabe..9495477 100644 (file)
@@ -15,6 +15,7 @@
  */
 package org.onap.usecaseui.server.service.lcm.domain.vfc;
 
+import org.onap.usecaseui.server.service.lcm.domain.aai.bean.nsServiceRsp;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.beans.Csar;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.beans.DistributionResult;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.beans.Job;
@@ -35,6 +36,9 @@ public interface VfcService {
 
     @GET("/api/catalog/v1/jobs/{jobId}")
     Call<JobStatus> getJobStatus(@Path("jobId") String jobId, @Query("responseId") String responseId);
+    
+    @GET("/api/nslcm/v1/jobs/{job_id}")
+    Call<JobStatus> getNsLcmJobStatus(@Path("jobId") String jobId, @Query("responseId") String responseId);
 
     @DELETE("/api/catalog/v1/nspackages/{csarId}")
     Call<DistributionResult> deleteNsPackage(@Path("csarId") String csarId);
@@ -49,7 +53,7 @@ public interface VfcService {
     Call<ResponseBody> fetchNsTemplateData(@Body RequestBody body);
     
     @GET("/api/nslcm/v1/ns")
-    Call<ResponseBody> getNetworkServiceInfo();
+    Call<nsServiceRsp> getNetworkServiceInfo();
     
     @POST("/api/nslcm/v1/ns")
     Call<ResponseBody> createNetworkServiceInstance(@Body RequestBody body);
index 70b6866..c4c6a20 100644 (file)
  */
 package org.onap.usecaseui.server.service.lcm.impl;
 
+import static org.onap.usecaseui.server.service.lcm.domain.sdc.consts.SDCConsts.CATEGORY_NS;
+import static org.onap.usecaseui.server.service.lcm.domain.sdc.consts.SDCConsts.DISTRIBUTION_STATUS_DISTRIBUTED;
+import static org.onap.usecaseui.server.service.lcm.domain.sdc.consts.SDCConsts.RESOURCETYPE_VF;
+import static org.onap.usecaseui.server.util.RestfulServices.create;
+import static org.onap.usecaseui.server.util.RestfulServices.extractBody;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+import org.onap.usecaseui.server.bean.ServiceBean;
 import org.onap.usecaseui.server.bean.lcm.VfNsPackageInfo;
 import org.onap.usecaseui.server.constant.Constant;
 import org.onap.usecaseui.server.service.lcm.PackageDistributionService;
+import org.onap.usecaseui.server.service.lcm.ServiceLcmService;
+import org.onap.usecaseui.server.service.lcm.domain.aai.bean.nsServiceRsp;
 import org.onap.usecaseui.server.service.lcm.domain.sdc.SDCCatalogService;
 import org.onap.usecaseui.server.service.lcm.domain.sdc.bean.SDCServiceTemplate;
 import org.onap.usecaseui.server.service.lcm.domain.sdc.bean.Vnf;
-import org.onap.usecaseui.server.service.lcm.domain.sdc.exceptions.SDCCatalogException;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.VfcService;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.beans.Csar;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.beans.DistributionResult;
@@ -33,20 +49,13 @@ import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.EnableAspectJAutoProxy;
 import org.springframework.stereotype.Service;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
 import okhttp3.RequestBody;
 import okhttp3.ResponseBody;
 import retrofit2.Response;
 
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import static org.onap.usecaseui.server.service.lcm.domain.sdc.consts.SDCConsts.*;
-import static org.onap.usecaseui.server.util.RestfulServices.create;
-import static org.onap.usecaseui.server.util.RestfulServices.extractBody;
-
 @Service("PackageDistributionService")
 @org.springframework.context.annotation.Configuration
 @EnableAspectJAutoProxy
@@ -57,6 +66,9 @@ public class DefaultPackageDistributionService implements PackageDistributionSer
     private SDCCatalogService sdcCatalogService;
 
     private VfcService vfcService;
+    
+    @Resource(name="ServiceLcmService")
+    private ServiceLcmService serviceLcmService;
 
     public DefaultPackageDistributionService() {
         this(create(SDCCatalogService.class), create(VfcService.class));
@@ -67,6 +79,10 @@ public class DefaultPackageDistributionService implements PackageDistributionSer
         this.vfcService = vfcService;
     }
 
+       public void setServiceLcmService(ServiceLcmService serviceLcmService) {
+               this.serviceLcmService = serviceLcmService;
+       }
+       
     @Override
     public VfNsPackageInfo retrievePackageInfo() {
             List<SDCServiceTemplate> nsTemplate = sdcNsPackageInfo();
@@ -150,7 +166,22 @@ public class DefaultPackageDistributionService implements PackageDistributionSer
             throw new VfcException("VFC service is not available!", e);
         }
     }
-
+    
+    @Override
+    public JobStatus getNsLcmJobStatus(String jobId, String responseId) {
+        try {
+            Response<JobStatus> response = vfcService.getNsLcmJobStatus(jobId, responseId).execute();
+            if (response.isSuccessful()) {
+                return response.body();
+            } else {
+                logger.info(String.format("Can not get Job status[code=%s, message=%s]", response.code(), response.message()));
+                throw new VfcException("VFC service getNsLcmJobStatus is not available!");
+            }
+        } catch (IOException e) {
+            throw new VfcException("VFC service getNsLcmJobStatus is not available!", e);
+        }
+    }
+    
     @Override
     public DistributionResult deleteNsPackage(String csarId) {
         try {
@@ -378,24 +409,33 @@ public class DefaultPackageDistributionService implements PackageDistributionSer
        }
 
        @Override
-       public String getNetworkServiceInfo() {
-
-               String result="";
+       public List<String> getNetworkServiceInfo() {
+               List<String> result = new ArrayList<>();
         try {
                logger.info("vfc getNetworkServiceInfo is starting!");
-            Response<ResponseBody> response = this.vfcService.getNetworkServiceInfo().execute();
+            Response<nsServiceRsp> response = this.vfcService.getNetworkServiceInfo().execute();
             logger.info("vfc getNetworkServiceInfo has finished!");
             if (response.isSuccessful()) {
-               result=new String(response.body().bytes());
+               List<String> nsServices = response.body().nsServices;
+               if(nsServices.size()>0){
+                       for(String nsService:nsServices){
+                               JSONObject object =  JSON.parseObject(nsService);
+                               String serviceInstanceId=object.get("nsInstanceId").toString();
+                               ServiceBean serviceBean = serviceLcmService.getServiceBeanByServiceInStanceId(serviceInstanceId);
+                               object.put("serviceDomain",serviceBean.getServiceDomain());
+                               object.put("childServiceInstances","[]");
+                               result.add(object.toString());
+                       }
+               }
+               return result;
             } else {
                 logger.info(String.format("Can not get getNetworkServiceInfo[code=%s, message=%s]", response.code(), response.message()));
-                result=Constant.CONSTANT_FAILED;;
+                return Collections.emptyList();
             }
         } catch (IOException e) {
             logger.error("getNetworkServiceInfo occur exception:"+e);
-            result=Constant.CONSTANT_FAILED;;
+            return Collections.emptyList();
         }
-        return result;
        
        }
 
@@ -697,5 +737,4 @@ public class DefaultPackageDistributionService implements PackageDistributionSer
         }
         return result;
        }
-
 }
index 477ed25..6405795 100644 (file)
 package org.onap.usecaseui.server.service.lcm.impl;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import javax.annotation.Resource;
+
+import org.onap.usecaseui.server.bean.ServiceBean;
+import org.onap.usecaseui.server.service.lcm.CustomerService;
 import org.onap.usecaseui.server.service.lcm.ServiceInstanceService;
+import org.onap.usecaseui.server.service.lcm.ServiceLcmService;
 import org.onap.usecaseui.server.service.lcm.domain.aai.AAIService;
+import org.onap.usecaseui.server.service.lcm.domain.aai.bean.AAICustomer;
+import org.onap.usecaseui.server.service.lcm.domain.aai.bean.AAIServiceSubscription;
 import org.onap.usecaseui.server.service.lcm.domain.aai.bean.ServiceInstanceRsp;
-import org.onap.usecaseui.server.service.lcm.domain.aai.exceptions.AAIException;
 import org.onap.usecaseui.server.util.RestfulServices;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.EnableAspectJAutoProxy;
 import org.springframework.stereotype.Service;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import okhttp3.ResponseBody;
 import retrofit2.Response;
 
@@ -40,6 +52,20 @@ public class DefaultServiceInstanceService implements ServiceInstanceService {
     private static final Logger logger = LoggerFactory.getLogger(DefaultServiceInstanceService.class);
 
     private AAIService aaiService;
+    
+    @Resource(name="ServiceLcmService")
+    private ServiceLcmService serviceLcmService;
+    
+    @Resource(name="CustomerService")
+    private CustomerService customerService;
+
+    public void setCustomerService(CustomerService customerService) {
+        this.customerService = customerService;
+    }
+    
+       public void setServiceLcmService(ServiceLcmService serviceLcmService) {
+               this.serviceLcmService = serviceLcmService;
+       }
 
     public DefaultServiceInstanceService() {
         this(RestfulServices.create(AAIService.class));
@@ -51,20 +77,50 @@ public class DefaultServiceInstanceService implements ServiceInstanceService {
 
     @Override
     public List<String> listServiceInstances(String customerId, String serviceType) {
+       List<String> result = new ArrayList<>();
         try {
             Response<ServiceInstanceRsp> response = aaiService.listServiceInstances(customerId, serviceType).execute();
             if (response.isSuccessful()) {
-                return response.body().getServiceInstances();
+               List<String> serviceInstances = response.body().getServiceInstances();
+               if(serviceInstances.size()>0){
+                       result=this.parseServiceInstance(serviceInstances, customerId, serviceType);
+               }
+                return result;
             } else {
                 logger.info(String.format("Can not get service instances[code=%s, message=%s]", response.code(), response.message()));
                 return Collections.emptyList();
             }
         } catch (IOException e) {
-            logger.error("list services instances occur exception");
-            throw new AAIException("AAI is not available.", e);
+            logger.error("list services instances occur exception"+e.getMessage());
+            return Collections.emptyList();
         }
     }
-
+    
+       private List<String> parseServiceInstance(List<String> list,String customerId,String serviceType) throws JsonProcessingException{
+       ObjectMapper mapper = new ObjectMapper();
+       List<String> result = new ArrayList<>();
+       for(String serviceInstance:list){
+                       JSONObject object =  JSON.parseObject(serviceInstance);
+                       String serviceInstanceId=object.get("service-instance-id").toString();
+                       ServiceBean serviceBean = serviceLcmService.getServiceBeanByServiceInStanceId(serviceInstanceId);
+                       String serviceDomain = serviceBean.getServiceDomain();
+                               object.put("serviceDomain",serviceDomain);
+                               if("SOTN".equals(serviceDomain)||"CCVPN".equals(serviceDomain)||"E2E Service".equals(serviceDomain)||"Network Service".equals(serviceDomain)){
+                                       List<String> parentIds = serviceLcmService.getServiceInstanceIdByParentId(serviceInstanceId);
+                                       List<String> parentServiceInstances = new ArrayList<>();
+                                       if(parentIds.size()>0){
+                                               for(String id:parentIds){
+                                                       String parentServiceInstance=this.getRelationShipData(customerId, serviceType, id);
+                                                       parentServiceInstances.add(parentServiceInstance);
+                                               }
+                                       }
+                                       object.put("childServiceInstances",mapper.writeValueAsString(parentServiceInstances));
+                                       result.add(object.toString());
+                               }
+       }
+       return result;
+    }
+       
        @Override
        public String getRelationShipData(String customerId, String serviceType, String serviceId) {
         try {
@@ -77,8 +133,25 @@ public class DefaultServiceInstanceService implements ServiceInstanceService {
                 return "";
             }
         } catch (IOException e) {
-            logger.error("list services instances occur exception");
-            throw new AAIException("AAI is not available.", e);
+            logger.error("list services instances occur exception:"+e.getMessage());
+            return "";
         }
        }
+       
+       public String serviceNumByCustomer(){
+               List<AAICustomer> customers = customerService.listCustomer();
+               int total =0;
+               if(customers.size()>0){
+                       for(AAICustomer customer : customers){
+                               List<AAIServiceSubscription> serviceSubscriptions = customerService.listServiceSubscriptions(customer.getGlobalCustomerId());
+                               if(serviceSubscriptions.size()>0){
+                                       for(AAIServiceSubscription serviceSubscription:serviceSubscriptions){
+                                               List<String> serviceInstances =this.listServiceInstances(customer.getGlobalCustomerId(), serviceSubscription.getServiceType());
+                                               total+=serviceInstances.size();
+                                       }
+                               }
+                       }
+               }
+               return null;
+       }
 }