Explorar o código

resdata改为字符串类型

欧阳劲驰 hai 1 mes
pai
achega
0a4d7efc12

+ 115 - 53
src/main/java/com/shkpr/service/alambizplugin/controller/ApiGisSurveyController.java

@@ -1,5 +1,7 @@
 package com.shkpr.service.alambizplugin.controller;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.global.base.log.LogLevelFlag;
 import com.global.base.log.LogPrintMgr;
 import com.shkpr.service.alambizplugin.apiparam.GisSurveyCheckParams;
@@ -69,6 +71,8 @@ public class ApiGisSurveyController {
     private final AtomicInteger mSeqThirdExportGetReq;
     private final AtomicInteger mSeqCadConvertGetReq;
 
+    private final ObjectMapper objectMapper;
+
     private final GisSurveySystemCheckBizService systemCheckBizService;
     private final GisSurveyThirdImportBizService thirdImportBizService;
     private final GisSurveyThirdExportBizService thirdExportBizService;
@@ -76,7 +80,8 @@ public class ApiGisSurveyController {
     private final GisSurveyLayerApplyService layerApplyService;
     private final GisSurveyLayerApplyThirdCopyServiceImpl layerApplyThirdCopyService;
 
-    public ApiGisSurveyController(GisSurveySystemCheckBizService systemCheckBizService
+    public ApiGisSurveyController(ObjectMapper objectMapper
+            , GisSurveySystemCheckBizService systemCheckBizService
             , GisSurveyThirdImportBizService thirdImportBizService
             , GisSurveyThirdExportBizService thirdExportBizService
             , GisSurveyCadConvertBizService cadConvertBizService
@@ -95,6 +100,7 @@ public class ApiGisSurveyController {
         mSeqThirdExportGetReq = new AtomicInteger(0);
         mSeqCadConvertReq = new AtomicInteger(0);
         mSeqCadConvertGetReq = new AtomicInteger(0);
+        this.objectMapper = objectMapper;
         this.systemCheckBizService = systemCheckBizService;
         this.thirdImportBizService = thirdImportBizService;
         this.thirdExportBizService = thirdExportBizService;
@@ -115,7 +121,7 @@ public class ApiGisSurveyController {
      * @throws SelfException selfException
      */
     @PostMapping(value = ApiURI.URI_XXX_SYS_CHECK)
-    public ResponseRes<GisSurveySystemCheckResult> sysCheck(HttpServletRequest request
+    public ResponseRes<String> sysCheck(HttpServletRequest request
             , @RequestHeader(value = ApiURI.HEADER_CLIENT_TYPE, required = false) String strClientType
             , @RequestHeader(value = ApiURI.HEADER_USER_AGENT, required = false) String strUserAgent
             , @RequestBody(required = false) @Validated(value = {CommonParamValidSK.class}) GisSurveyCheckParams oJsonParam
@@ -141,25 +147,32 @@ public class ApiGisSurveyController {
                         , strRunSeq
                         , oJsonParam));
         //构建result
-        ResponseRes<GisSurveySystemCheckResult> resResult = new ResponseRes<>();
+        ResponseRes<String> resResult = new ResponseRes<>();
         resResult.setRescode(ResponseCode.RESULT_SYSTEM_CHECK_FAILED.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_SYSTEM_CHECK_FAILED.toStrMsg());
 
         //执行系统检查
         GisSurveySystemCheckResult result = systemCheckBizService.sysCheckFun(oJsonParam);
+        String resultStr = null;
+        try {
+            if (result != null) resultStr = objectMapper.writeValueAsString(result);
+        } catch (JsonProcessingException e) {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR, mBizType, mStrClassName
+                    , String.format("Json序列化异常: error:%s", e));
+        }
 
         //执行成功
-        if (result != null && !Objects.equals(result.getCheckStatus(), GisSurveyCheckStatusEnum.FAIL.getCode())) {
+        if (resultStr != null && !Objects.equals(result.getCheckStatus(), GisSurveyCheckStatusEnum.FAIL.getCode())) {
             resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_NORMAL.toStrMsg());
-            resResult.setResdata(result);
+            resResult.setResdata(resultStr);
         }
         //执行失败
-        if (result != null && Objects.equals(result.getCheckStatus(), GisSurveyCheckStatusEnum.FAIL.getCode())) {
-            resResult.setResdata(result);
+        if (resultStr != null && Objects.equals(result.getCheckStatus(), GisSurveyCheckStatusEnum.FAIL.getCode())) {
+            resResult.setResdata(resultStr);
         }
         //结果为空
-        if (result == null) {
+        if (resultStr == null) {
             resResult.setRescode(ResponseCode.RESULT_SYSTEM_CHECK_RESULT_NOT_FOUND.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_SYSTEM_CHECK_RESULT_NOT_FOUND.toStrMsg());
         }
@@ -259,7 +272,7 @@ public class ApiGisSurveyController {
      * @return 第三方导入结果
      */
     @PostMapping(value = ApiURI.URI_XXX_THIRD_IMPORT)
-    public ResponseRes<GisSurveyThirdImportResult> thirdImport(HttpServletRequest request
+    public ResponseRes<String> thirdImport(HttpServletRequest request
             , @RequestHeader(value = ApiURI.HEADER_CLIENT_TYPE, required = false) String strClientType
             , @RequestHeader(value = ApiURI.HEADER_USER_AGENT, required = false) String strUserAgent
             , @RequestParam(value = "files", required = false) List<MultipartFile> files
@@ -291,25 +304,32 @@ public class ApiGisSurveyController {
                         , strRunSeq
                         , params));
         //构建result
-        ResponseRes<GisSurveyThirdImportResult> resResult = new ResponseRes<>();
+        ResponseRes<String> resResult = new ResponseRes<>();
         resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrMsg());
 
         //执行第三方导入
         GisSurveyThirdImportResult result = thirdImportBizService.thirdImport(params);
+        String resultStr = null;
+        try {
+            if (result != null) resultStr = objectMapper.writeValueAsString(result);
+        } catch (JsonProcessingException e) {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR, mBizType, mStrClassName
+                    , String.format("Json序列化异常: error:%s", e));
+        }
 
         //执行成功
-        if (result != null && !Objects.equals(result.getImportStatus(), GisSurveyImportStatusEnum.FAIL.getCode())) {
+        if (resultStr != null && !Objects.equals(result.getImportStatus(), GisSurveyImportStatusEnum.FAIL.getCode())) {
             resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_NORMAL.toStrMsg());
-            resResult.setResdata(result);
+            resResult.setResdata(resultStr);
         }
         //执行失败
-        if (result != null && Objects.equals(result.getImportStatus(), GisSurveyImportStatusEnum.FAIL.getCode())) {
-            resResult.setResdata(result);
+        if (resultStr != null && Objects.equals(result.getImportStatus(), GisSurveyImportStatusEnum.FAIL.getCode())) {
+            resResult.setResdata(resultStr);
         }
         //结果为空
-        if (result == null) {
+        if (resultStr == null) {
             resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_NOT_FOUND.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_NOT_FOUND.toStrMsg());
         }
@@ -338,7 +358,7 @@ public class ApiGisSurveyController {
      * @return 第三方导入结果
      */
     @GetMapping(value = ApiURI.URI_XXX_THIRD_IMPORT_GET)
-    public ResponseRes<GisSurveyThirdImportResult> thirdImportGet(HttpServletRequest request
+    public ResponseRes<String> thirdImportGet(HttpServletRequest request
             , @RequestHeader(value = ApiURI.HEADER_CLIENT_TYPE, required = false) String strClientType
             , @RequestHeader(value = ApiURI.HEADER_USER_AGENT, required = false) String strUserAgent
             , @RequestParam(value = "jobId", required = false) String jobId
@@ -368,25 +388,32 @@ public class ApiGisSurveyController {
                         , jobId));
 
         //构建result
-        ResponseRes<GisSurveyThirdImportResult> resResult = new ResponseRes<>();
+        ResponseRes<String> resResult = new ResponseRes<>();
         resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrMsg());
 
         //执行cad转换
         GisSurveyThirdImportResult result = thirdImportBizService.getResult(params);
+        String resultStr = null;
+        try {
+            if (result != null) resultStr = objectMapper.writeValueAsString(result);
+        } catch (JsonProcessingException e) {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR, mBizType, mStrClassName
+                    , String.format("Json序列化异常: error:%s", e));
+        }
 
         //执行成功
-        if (result != null && !Objects.equals(result.getImportStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
+        if (resultStr != null && !Objects.equals(result.getImportStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
             resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_NORMAL.toStrMsg());
-            resResult.setResdata(result);
+            resResult.setResdata(resultStr);
         }
         //执行失败
-        if (result != null && Objects.equals(result.getImportStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
-            resResult.setResdata(result);
+        if (resultStr != null && Objects.equals(result.getImportStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
+            resResult.setResdata(resultStr);
         }
         //不存在
-        if (result == null) {
+        if (resultStr == null) {
             resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_NOT_FOUND.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_NOT_FOUND.toStrMsg());
         }
@@ -480,7 +507,7 @@ public class ApiGisSurveyController {
      * @throws SelfException selfException
      */
     @GetMapping(value = ApiURI.URI_XXX_THIRD_IMPORT_PREVIEW)
-    public ResponseRes<?> previewImport(HttpServletRequest request
+    public ResponseRes<String> previewImport(HttpServletRequest request
             , @RequestHeader(value = ApiURI.HEADER_CLIENT_TYPE, required = false) String strClientType
             , @RequestHeader(value = ApiURI.HEADER_USER_AGENT, required = false) String strUserAgent
             , @RequestParam("jobId") String jobId, @PageableDefault() Pageable pageable) throws Exception {
@@ -507,7 +534,7 @@ public class ApiGisSurveyController {
 
 
         //构建result
-        ResponseRes<PageResponse<GisSurveyLayerApplyThirdCopy>> resResult = new ResponseRes<>();
+        ResponseRes<String> resResult = new ResponseRes<>();
         resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrMsg());
 
@@ -515,7 +542,14 @@ public class ApiGisSurveyController {
         PageResponse<GisSurveyLayerApplyThirdCopy> pageResponse = layerApplyThirdCopyService.findByJobId(jobId, pageable);
         resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_NORMAL.toStrMsg());
-        resResult.setResdata(pageResponse);
+        String pageStr = null;
+        try {
+            if (pageResponse != null) pageStr = objectMapper.writeValueAsString(pageResponse);
+        } catch (JsonProcessingException e) {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR, mBizType, mStrClassName
+                    , String.format("Json序列化异常: error:%s", e));
+        }
+        resResult.setResdata(pageStr);
 
         //end
         resResult.setTimestamp(System.currentTimeMillis());
@@ -569,7 +603,7 @@ public class ApiGisSurveyController {
                         , strRunSeq
                         , jobId));
         //构建result
-        ResponseRes<Boolean> resResult = new ResponseRes<>();
+        ResponseRes<?> resResult = new ResponseRes<>();
         resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrMsg());
 
@@ -605,7 +639,7 @@ public class ApiGisSurveyController {
      * @return cad转换结果
      */
     @GetMapping(value = ApiURI.URI_XXX_THIRD_EXPORT)
-    public ResponseRes<CommAsyncResult<Map<String, String>>> thirdExport(HttpServletRequest request
+    public ResponseRes<String> thirdExport(HttpServletRequest request
             , @RequestHeader(value = ApiURI.HEADER_CLIENT_TYPE, required = false) String strClientType
             , @RequestHeader(value = ApiURI.HEADER_USER_AGENT, required = false) String strUserAgent
             , @RequestParam(value = "jobId", required = false) String jobId
@@ -614,7 +648,7 @@ public class ApiGisSurveyController {
         final String URI_PATH = request.getRequestURI();
         final String strPlatform = CommTool.getPlatformByAgent(strClientType, strUserAgent);
         final String strUserId = (String) request.getAttribute(TokenAuthenticationService.HEADER_USERID);
-        if (StringUtils.isAnyBlank(jobId,fileType) || StringUtils.length(jobId) > 64 || StringUtils.length(fileType) > 64) {
+        if (StringUtils.isAnyBlank(jobId, fileType) || StringUtils.length(jobId) > 64 || StringUtils.length(fileType) > 64) {
             throw new SelfException(ResponseCode.STATUS_ERROR_PARAM_FORMAT.toStrCode()
                     , String.format(ApiURI.EXCEPTION_FORMAT
                     , strPlatform
@@ -633,7 +667,7 @@ public class ApiGisSurveyController {
                         , jobId));
 
         //构建result
-        ResponseRes<CommAsyncResult<Map<String, String>>> resResult = new ResponseRes<>();
+        ResponseRes<String> resResult = new ResponseRes<>();
         resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrMsg());
 
@@ -643,16 +677,23 @@ public class ApiGisSurveyController {
 
         //执行第三方导出
         CommAsyncResult<Map<String, String>> result = thirdExportBizService.thirdExport(jobId, fileTypeEnum);
+        String resultStr = null;
+        try {
+            if (result != null) resultStr = objectMapper.writeValueAsString(result);
+        } catch (JsonProcessingException e) {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR, mBizType, mStrClassName
+                    , String.format("Json序列化异常: error:%s", e));
+        }
 
         //执行成功
-        if (result != null && !Objects.equals(result.getStatus(), CommAsyncStatusEnum.FAIL.getCode())) {
+        if (resultStr != null && !Objects.equals(result.getStatus(), CommAsyncStatusEnum.FAIL.getCode())) {
             resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_NORMAL.toStrMsg());
-            resResult.setResdata(result);
+            resResult.setResdata(resultStr);
         }
         //执行失败
-        if (result != null && Objects.equals(result.getStatus(), CommAsyncStatusEnum.FAIL.getCode())) {
-            resResult.setResdata(result);
+        if (resultStr != null && Objects.equals(result.getStatus(), CommAsyncStatusEnum.FAIL.getCode())) {
+            resResult.setResdata(resultStr);
         }
 
         //end
@@ -678,7 +719,7 @@ public class ApiGisSurveyController {
      * @return cad转换结果
      */
     @GetMapping(value = ApiURI.URI_XXX_THIRD_EXPORT_GET)
-    public ResponseRes<CommAsyncResult<Map<String, String>>> thirdExportGet(HttpServletRequest request
+    public ResponseRes<String> thirdExportGet(HttpServletRequest request
             , @RequestHeader(value = ApiURI.HEADER_CLIENT_TYPE, required = false) String strClientType
             , @RequestHeader(value = ApiURI.HEADER_USER_AGENT, required = false) String strUserAgent
             , @RequestParam(value = "jobId", required = false) String jobId) throws SelfException {
@@ -705,25 +746,32 @@ public class ApiGisSurveyController {
                         , jobId));
 
         //构建result
-        ResponseRes<CommAsyncResult<Map<String, String>>> resResult = new ResponseRes<>();
+        ResponseRes<String> resResult = new ResponseRes<>();
         resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrMsg());
 
         //执行第三方导出
         CommAsyncResult<Map<String, String>> result = thirdExportBizService.getResult(jobId);
+        String resultStr = null;
+        try {
+            if (result != null) resultStr = objectMapper.writeValueAsString(result);
+        } catch (JsonProcessingException e) {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR, mBizType, mStrClassName
+                    , String.format("Json序列化异常: error:%s", e));
+        }
 
         //执行成功
-        if (result != null && !Objects.equals(result.getStatus(), CommAsyncStatusEnum.FAIL.getCode())) {
+        if (resultStr != null && !Objects.equals(result.getStatus(), CommAsyncStatusEnum.FAIL.getCode())) {
             resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_NORMAL.toStrMsg());
-            resResult.setResdata(result);
+            resResult.setResdata(resultStr);
         }
         //执行失败
-        if (result != null && Objects.equals(result.getStatus(), CommAsyncStatusEnum.FAIL.getCode())) {
-            resResult.setResdata(result);
+        if (resultStr != null && Objects.equals(result.getStatus(), CommAsyncStatusEnum.FAIL.getCode())) {
+            resResult.setResdata(resultStr);
         }
         //不存在
-        if (result == null) {
+        if (resultStr == null) {
             resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_NOT_FOUND.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_NOT_FOUND.toStrMsg());
         }
@@ -753,7 +801,7 @@ public class ApiGisSurveyController {
      * @return cad转换结果
      */
     @PostMapping(value = ApiURI.URI_XXX_CAD_CONVERT)
-    public ResponseRes<CommAsyncResult<String>> cadConvert(HttpServletRequest request
+    public ResponseRes<String> cadConvert(HttpServletRequest request
             , @RequestHeader(value = ApiURI.HEADER_CLIENT_TYPE, required = false) String strClientType
             , @RequestHeader(value = ApiURI.HEADER_USER_AGENT, required = false) String strUserAgent
             , @RequestParam(value = "file", required = false) MultipartFile file
@@ -813,22 +861,29 @@ public class ApiGisSurveyController {
                         , convertId));
 
         //构建result
-        ResponseRes<CommAsyncResult<String>> resResult = new ResponseRes<>();
+        ResponseRes<String> resResult = new ResponseRes<>();
         resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrMsg());
 
         //执行cad转换
         CommAsyncResult<String> result = cadConvertBizService.cadConvert(file, convertId, outCadEnum);
+        String resultStr = null;
+        try {
+            if (result != null) resultStr = objectMapper.writeValueAsString(result);
+        } catch (JsonProcessingException e) {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR, mBizType, mStrClassName
+                    , String.format("Json序列化异常: error:%s", e));
+        }
 
         //执行成功
-        if (result != null && !Objects.equals(result.getStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
+        if (resultStr != null && !Objects.equals(result.getStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
             resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_NORMAL.toStrMsg());
-            resResult.setResdata(result);
+            resResult.setResdata(resultStr);
         }
         //执行失败
-        if (result != null && Objects.equals(result.getStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
-            resResult.setResdata(result);
+        if (resultStr != null && Objects.equals(result.getStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
+            resResult.setResdata(resultStr);
         }
 
         //end
@@ -854,7 +909,7 @@ public class ApiGisSurveyController {
      * @return cad转换结果
      */
     @GetMapping(value = ApiURI.URI_XXX_CAD_CONVERT_GET)
-    public ResponseRes<CommAsyncResult<String>> cadConvertGet(HttpServletRequest request
+    public ResponseRes<String> cadConvertGet(HttpServletRequest request
             , @RequestHeader(value = ApiURI.HEADER_CLIENT_TYPE, required = false) String strClientType
             , @RequestHeader(value = ApiURI.HEADER_USER_AGENT, required = false) String strUserAgent
             , @RequestParam(value = "convertId", required = false) String convertId) throws SelfException {
@@ -881,25 +936,32 @@ public class ApiGisSurveyController {
                         , convertId));
 
         //构建result
-        ResponseRes<CommAsyncResult<String>> resResult = new ResponseRes<>();
+        ResponseRes<String> resResult = new ResponseRes<>();
         resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrMsg());
 
         //执行cad转换
         CommAsyncResult<String> result = cadConvertBizService.getResult(convertId);
+        String resultStr = null;
+        try {
+            if (result != null) resultStr = objectMapper.writeValueAsString(result);
+        } catch (JsonProcessingException e) {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_ERROR, mBizType, mStrClassName
+                    , String.format("Json序列化异常: error:%s", e));
+        }
 
         //执行成功
-        if (result != null && !Objects.equals(result.getStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
+        if (resultStr != null && !Objects.equals(result.getStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
             resResult.setRescode(ResponseCode.RESULT_NORMAL.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_NORMAL.toStrMsg());
-            resResult.setResdata(result);
+            resResult.setResdata(resultStr);
         }
         //执行失败
-        if (result != null && Objects.equals(result.getStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
-            resResult.setResdata(result);
+        if (resultStr != null && Objects.equals(result.getStatus(), GisSurveConvertStatusEnum.FAIL.getCode())) {
+            resResult.setResdata(resultStr);
         }
         //不存在
-        if (result == null) {
+        if (resultStr == null) {
             resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_NOT_FOUND.toStrCode());
             resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_NOT_FOUND.toStrMsg());
         }