lyhzzz 3 månader sedan
förälder
incheckning
932c1092fd

+ 3 - 0
src/main/java/com/fdkankan/manage/common/ResultCode.java

@@ -125,6 +125,9 @@ public enum ResultCode  {
     VISIT_OPENAPI_ERROR(50096, "访问openApi接口出错"),
     EMAIL_BLANK(50097, "邮件地址为空"),
 
+    OVERALL_VIEW_ERROR(50098, "全景系统访问失败"),
+    DOWN_SCENE_ERROR(50099, "下载场景失败"),
+
     ;
 
     private Integer code;

+ 16 - 0
src/main/java/com/fdkankan/manage/config/FyunConfig.java

@@ -0,0 +1,16 @@
+package com.fdkankan.manage.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+@Data
+@RefreshScope
+public class FyunConfig {
+
+    @Value("${fyun.host:https://4dkk.4dage.com/}")
+    private String fyunHost;
+}

+ 1 - 1
src/main/java/com/fdkankan/manage/httpClient/client/OverallClient.java

@@ -22,5 +22,5 @@ public interface OverallClient {
 
 
     @Post("/api/age/getOfflineDetail")
-    Result getOfflineDetail(@JSONBody WorkOfflineDTO param,@Header("appId") String appId,@Header("key") String key);
+    OverallVo getOfflineDetail(@JSONBody WorkOfflineDTO param,@Header("appId") String appId,@Header("key") String key);
 }

+ 4 - 0
src/main/java/com/fdkankan/manage/httpClient/param/WorkOfflineDTO.java

@@ -4,6 +4,8 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
+
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
@@ -17,6 +19,8 @@ public class WorkOfflineDTO {
 
     private String url;
 
+    private List<String> sceneCodes;
+
 
     public WorkOfflineDTO(String workId) {
         this.workId = workId;

+ 69 - 1
src/main/java/com/fdkankan/manage/httpClient/service/OverallService.java

@@ -1,18 +1,38 @@
 package com.fdkankan.manage.httpClient.service;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.manage.common.Result;
+import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.common.ShellUtil;
+import com.fdkankan.manage.config.FyunConfig;
+import com.fdkankan.manage.exception.BusinessException;
 import com.fdkankan.manage.httpClient.client.OverallClient;
 import com.fdkankan.manage.httpClient.param.WorkOfflineDTO;
 import com.fdkankan.manage.httpClient.vo.OverallParam;
 import com.fdkankan.manage.httpClient.vo.OverallVo;
+import com.fdkankan.manage.service.IDownService;
+import com.fdkankan.manage.vo.response.DownVo;
+import com.fdkankan.manage.vo.response.DownloadProcessVo;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
+@Slf4j
 public class OverallService {
     @Autowired
     OverallClient overallClient;
+    @Autowired
+    RabbitMqProducer rabbitMqProducer;
+    @Autowired
+    IDownService downService;
+    @Autowired
+    FyunConfig fyunConfig;
 
     private static String appId ="BDA385EC848C1A425F746869011C8D23";
     private static String key ="appId";
@@ -24,8 +44,56 @@ public class OverallService {
         return overallClient.list(param,appId,key);
     }
 
+
     public void getSceneListByWorkId(String workId){
-        Result offlineDetail = overallClient.getOfflineDetail(new WorkOfflineDTO(workId),appId,key);
+        try {
+
+            OverallVo offlineDetail = overallClient.getOfflineDetail(new WorkOfflineDTO(workId),appId,key);
+            if(offlineDetail == null || offlineDetail.getCode() !=0){
+                throw new BusinessException(ResultCode.OVERALL_VIEW_ERROR);
+            }
+
+            Object data = offlineDetail.getData();
+
+            WorkOfflineDTO dto = JSONObject.parseObject(JSONObject.toJSONString(data),WorkOfflineDTO.class);
+            if(dto.getSceneCodes() != null && !dto.getSceneCodes().isEmpty()){  //下载场景mesh离线包
+                for (String sceneCode : dto.getSceneCodes()) {
+                    log.info("下载mesh场景:{}",sceneCode);
+                    DownVo downVo = downService.checkDownLoad(sceneCode, 1);
+                    if(downVo.getDownloadStatus() == 3 && StringUtils.isNotBlank(downVo.getDownloadUrl())){
+                        downScene(downVo.getDownloadUrl(),dto.getPath());
+                    }else {
+                        DownVo down = downService.down(sceneCode, 1);
+                        if(down.getDownloadStatus() == 1){
+                            DownloadProcessVo downloadProcessVo = downService.downloadProcess(sceneCode, 1);
+                            if(downloadProcessVo.getStatus() == 1003){
+                                log.info("下载场景失败:{}",sceneCode);
+                                throw new BusinessException(ResultCode.DOWN_SCENE_ERROR);
+                            }
+                            while (downloadProcessVo.getStatus() != 1002 ){
+                                downloadProcessVo =  downService.downloadProcess(sceneCode, 1);
+                                Thread.sleep(2000L);
+                            }
+                            downScene(downloadProcessVo.getUrl(),dto.getPath());
+                        }
+
+                    }
+                }
+
+            }
+
+            rabbitMqProducer.sendByWorkQueue("qjkk-work-offline", BeanUtil.beanToMap(dto));
+
+        }catch (Exception e){
+            log.info("全景看看访问失败:{}",e);
+            throw new BusinessException(ResultCode.OVERALL_VIEW_ERROR);
+        }
+
     }
 
+    private void downScene(String downloadUrl, String path) {
+        ShellUtil.yunDownload(downloadUrl.replace(fyunConfig.getFyunHost(), ""),path +"/mesh");
+    }
+
+
 }

+ 46 - 0
src/main/java/com/fdkankan/manage/mq/consumer/OverallConsumer.java

@@ -0,0 +1,46 @@
+package com.fdkankan.manage.mq.consumer;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.manage.mq.param.LaserSceneTitleVo;
+import com.fdkankan.manage.service.IScenePlusService;
+import com.fdkankan.manage.service.ISceneProService;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 场景封存解封 mq
+ */
+@Slf4j
+@Component
+public class OverallConsumer {
+
+
+    @RabbitListener(
+            queuesToDeclare = @Queue("${queue.qjkk.offline-done:qjkk-work-offline-done}")
+    )
+    public void consumerQueue(Channel channel, Message message)  {
+        try {
+            String messageId = message.getMessageProperties().getMessageId();
+            String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+            log.info("qjkk-work-offline-done-mq--messageId:{},msg:{}",messageId,msg);
+
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+
+
+        }catch (Exception e){
+            log.info("qjkk-work-offline-done-----消费失败",e);
+        }finally {
+
+        }
+
+    }
+
+}