dengsixing %!s(int64=3) %!d(string=hai) anos
pai
achega
f2bdc108c1

+ 16 - 0
pom.xml

@@ -127,6 +127,22 @@
             <version>2.0.0-SNAPSHOT</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.yomahub</groupId>
+            <artifactId>tlog-web-spring-boot-starter</artifactId>
+            <version>1.3.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
+
 
     </dependencies>
 

+ 2 - 0
src/main/java/com/fdkankan/repair/DataRepairApplication.java

@@ -4,6 +4,7 @@ import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.ComponentScans;
@@ -13,6 +14,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
 @ComponentScan(basePackages = {"com.fdkankan"})
 @MapperScan("com.fdkankan.**.mapper")
 @EnableAsync
+@EnableDiscoveryClient
 public class DataRepairApplication {
 
     public static void main(String[] args) {

+ 1 - 1
src/main/java/com/fdkankan/repair/SceneRepairParamVO.java

@@ -1,4 +1,4 @@
-package com.fdkankan.repair;
+package com.fdkankan.repair.bean;
 
 import java.util.List;
 import lombok.Data;

+ 0 - 22
src/main/java/com/fdkankan/repair/config/MybatisPlusPageConfig.java

@@ -1,22 +0,0 @@
-package com.fdkankan.repair.config;
-
-import com.baomidou.mybatisplus.annotation.DbType;
-import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-
-@Configuration
-public class MybatisPlusPageConfig {
-
-    /**
-     * mybatisPlus配置分页插件
-     */
-    @Bean
-    public MybatisPlusInterceptor mybatisPlusInterceptor() {
-        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
-        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
-        return interceptor;
-    }
-}

+ 2 - 2
src/main/java/com/fdkankan/repair/constant/ProgressStatus.java

@@ -8,8 +8,8 @@ import com.fdkankan.common.constant.FileBizType;
 public enum ProgressStatus {
 
     WAIT(0, "等待中"),
-    SUCESS_DB(1000, "数据库已生成"),
-    SUCCESS_OSS(1001, "数据拷贝完成"),
+    DO_DB(1000, "数据库已生成"),
+    DO_OSS(1001, "数据拷贝完成"),
     SUCCESS(1002, "升级成功"),
     FAIL(1003, "升级失败")
     ;

+ 40 - 4
src/main/java/com/fdkankan/repair/controller/SceneRepairController.java

@@ -1,18 +1,27 @@
 package com.fdkankan.repair.controller;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.ConcurrentHashSet;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.response.ResultData;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
-import com.fdkankan.repair.SceneRepairParamVO;
+import com.fdkankan.repair.bean.SceneRepairParamVO;
+import com.fdkankan.repair.bean.SceneUpgradeProgressBean;
+import com.fdkankan.repair.constant.ProgressStatus;
 import com.fdkankan.repair.entity.ScenePro;
-import com.fdkankan.repair.entity.SceneResource;
 import com.fdkankan.repair.service.ISceneProService;
 import com.fdkankan.repair.service.ISceneResourceService;
 import com.fdkankan.repair.service.impl.SceneRepairService;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -35,6 +44,9 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/test")
 public class SceneRepairController {
 
+    @Value("${queue.scene.upgrade-to-v4}")
+    private String upgradeToV4;
+
     @Autowired
     ISceneProService sceneProService;
     @Autowired
@@ -45,6 +57,8 @@ public class SceneRepairController {
     private ISceneResourceService sceneResourceService;
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private RabbitMqProducer rabbitMqProducer;
 
     /**
      * 最大线程数
@@ -52,9 +66,31 @@ public class SceneRepairController {
     @Value("${repair.maxThread:3}")
     private int maxThread;
 
+    @GetMapping("/test")
+    public ResultData test(){
+        //17264
+        rabbitMqProducer.sendByWorkQueue(upgradeToV4, 17264);
+        return ResultData.ok();
+    }
+
+    /**
+     * 更新进度条
+     * @param num
+     * @param progress
+     * @param status
+     */
+    private void updateProgress(String num, int progress, int status){
+        String key = String.format(RedisKey.scene_upgrade_progress_num, num);
+        redisUtil.set(key,
+            JSON.toJSONString(
+                SceneUpgradeProgressBean.builder()
+                    .num(num).status(status)
+                    .progress(progress).build()));
+    }
+
 
     @PostMapping("/sceneRepair")
-    public String test(@RequestBody SceneRepairParamVO param) throws Exception{
+    public String sceneRepair(@RequestBody SceneRepairParamVO param) throws Exception{
 
         //
         String key = "scene:repair:index";

+ 0 - 3
src/main/java/com/fdkankan/repair/entity/SceneEditInfo.java

@@ -90,9 +90,6 @@ public class SceneEditInfo implements Serializable {
     @TableField("floor_plan_user")
     private Integer floorPlanUser;
 
-    @TableField("cad_info")
-    private String cadInfo;
-
     /**
      * 是否有热点数据(0-否,1-是)
      */

+ 1 - 1
src/main/java/com/fdkankan/repair/service/ISceneUpgradeToV4Service.java

@@ -10,6 +10,6 @@ package com.fdkankan.repair.service;
  **/
 public interface ISceneUpgradeToV4Service {
 
-    void upgrade(long sceneProId);
+    void upgrade(long sceneProId) throws Exception;
 
 }

+ 3 - 2
src/main/java/com/fdkankan/repair/service/impl/SceneRepairService.java

@@ -293,7 +293,8 @@ public class SceneRepairService {
                 sceneEditInfo.setTitle(scenePro.getSceneName());
                 sceneEditInfo.setDescription(scenePro.getSceneDec());
                 sceneEditInfo.setFloorPlanUser(sceneProEdit.getFloorLogo() == null ? 0 : Integer.parseInt(sceneProEdit.getFloorLogo()));
-                sceneEditInfo.setCadInfo(sceneProEditExt.getCadInfo());
+                // TODO: 2022/4/24 这里应该生成floor_user。json文件
+                //                sceneEditInfo.setCadInfo(sceneProEditExt.getCadInfo());
                 sceneEditInfo.setTags(tags);
                 sceneEditInfo.setVersion(sceneProEdit.getVersion());
                 sceneEditInfo.setIsUploadObj(Integer.parseInt(CommonStatus.NO.code().toString()));
@@ -328,7 +329,7 @@ public class SceneRepairService {
                 sceneEditControls.setShowPanorama(sceneProEditExt.getPanoVisi());
                 sceneEditControls.setShowDollhouse(sceneProEditExt.getM3dVisi());
                 sceneEditControls.setShowFloorplan(sceneProEditExt.getM2dVisi());
-                sceneEditControls.setShowVr(sceneProEditExt.getVrVisi());
+                sceneEditControls.setShowVR(sceneProEditExt.getVrVisi());
                 sceneEditControls.setShowTour(sceneProEditExt.getTourVisi());
                 sceneEditControls.setShowRule(sceneProEditExt.getRulerVisi());
                 sceneEditControls.setCreateTime(sceneEditInfo.getCreateTime());

+ 62 - 8
src/main/java/com/fdkankan/repair/service/impl/SceneUpgradeToV4Service.java

@@ -7,8 +7,8 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.amazonaws.services.elasticsearch.model.UpgradeStatus;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.fasterxml.jackson.databind.annotation.JsonAppend.Prop;
 import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.ConstantFilePath;
 import com.fdkankan.common.constant.UploadFilePath;
@@ -43,6 +43,10 @@ import com.fdkankan.repair.service.ISceneProService;
 import com.fdkankan.repair.service.ISceneRepairLogService;
 import com.fdkankan.repair.service.ISceneUpgradeToV4Service;
 import java.io.File;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -50,6 +54,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -110,7 +115,7 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
     };
 
     @Override
-    public void upgrade(long sceneProId){
+    public void upgrade(long sceneProId)  throws Exception{
 
         ScenePro scenePro = sceneProService.getById(sceneProId);
         //线程开始,正在执行线程数+1
@@ -297,13 +302,57 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
             }
 
             //完成数据库操作更新进度条为10
-            this.updateProgress(num, 10, ProgressStatus.SUCESS_DB.code());
+            this.updateProgress(num, 10, ProgressStatus.DO_DB.code());
 
             //oss文件拷贝
-            uploadToOssUtil.copyFiles(dataPath, dataViewPath);
-            uploadToOssUtil.copyFiles(imagePath, imageViewPath);
-            uploadToOssUtil.copyFiles(videoPath, videoViewPath);
-            uploadToOssUtil.copyFiles(voicePath, voiceViewPath);
+            AtomicInteger count = new AtomicInteger(0);
+            AtomicInteger completeCnt = new AtomicInteger(0);
+            List<String> list = new ArrayList<>();
+            List<String> dataKeys = uploadToOssUtil.listKeys(dataPath);
+            List<String> imageKeys = uploadToOssUtil.listKeys(imagePath);
+            List<String> videoKeys = uploadToOssUtil.listKeys(videoPath);
+            List<String> voiceKeys = uploadToOssUtil.listKeys(voicePath);
+            if(CollUtil.isNotEmpty(dataKeys))
+                list.addAll(dataKeys);
+                count.addAndGet(dataKeys.size());
+            if(CollUtil.isNotEmpty(imageKeys))
+                list.addAll(imageKeys);
+                count.addAndGet(imageKeys.size());
+            if(CollUtil.isNotEmpty(videoKeys))
+                list.addAll(videoKeys);
+                count.addAndGet(videoKeys.size());
+            if(CollUtil.isNotEmpty(voiceKeys))
+                list.addAll(voiceKeys);
+                count.addAndGet(voiceKeys.size());
+            if(CollUtil.isNotEmpty(dataKeys)){
+                list.parallelStream().forEach(key->{
+                    try {
+                        String targetKey = null;
+                        if(key.contains(dataPath)){
+                            targetKey = key.replace(dataPath, dataViewPath);
+                        }
+                        if(key.contains(imagePath)){
+                            targetKey = key.replace(imagePath, imageViewPath);
+                        }
+                        if(key.contains(videoPath)){
+                            targetKey = key.replace(videoPath, videoViewPath);
+                        }
+                        uploadToOssUtil.copyObject(key, targetKey);
+                        this.updateProgress(num,
+                            10 +
+                                (new BigDecimal(completeCnt.incrementAndGet())
+                                .divide(new BigDecimal(count.get()), 6, BigDecimal.ROUND_HALF_UP)
+                                    .multiply(new BigDecimal(0.7))
+                                    .multiply(new BigDecimal(100))
+                                    .setScale(0, RoundingMode.UP)
+                                    .intValue()),
+                            ProgressStatus.DO_OSS.code()
+                        );
+                    } catch (IOException e) {
+                        log.error("文件拷贝出错,key:{}", key);
+                    }
+                });
+            }
 
             //全景图上传、球幕视频
             Map<String, String> map = new HashMap<>();
@@ -316,7 +365,7 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
 //            if(CollUtil.isNotEmpty(videosList)){
 //                videosList.stream().forEach(str -> map.put(str, str.replace(path, sceneNumPAth)));
 //            }
-//            uploadToOssUtil.uploadMulFiles(map);
+            uploadToOssUtil.uploadMulFiles(map);
 
             //拷贝模型文件到用户编辑目录
             String editImagesPath = String.format(UploadFilePath.IMG_EDIT_PATH, num);
@@ -331,6 +380,9 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
                 uploadToOssUtil.copyFiles(entry.getValue(), entry.getKey());
             }
 
+            //完成数据库操作更新进度条为10
+            this.updateProgress(num, 90, ProgressStatus.DO_OSS.code());
+
             //生成二维码
             String sceneUrl = mainUrl + "/" + sceneProNewUrl;
             String outPathZh = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/" + num + ".png";
@@ -421,6 +473,8 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
             sceneRepairLog.setConsumTime(consumTime);
             sceneRepairLogService.updateById(sceneRepairLog);
 
+            this.updateProgress(num, 100, ProgressStatus.SUCCESS.code());
+
             // TODO: 2022/4/22 调用v3接口回写数据
 
 

+ 0 - 1
src/main/resources/logback-spring.xml

@@ -6,7 +6,6 @@
 <configuration scan="true" scanPeriod="10 seconds">
 
 	<springProperty scope="context" name="LOG_PATH" source="logging.path"/>
-	<define name="hostName" class = "com.fdkankan.common.config.LogPathHostNameProperty"/>
 
 	<contextName>logback</contextName>
 	<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->