Selaa lähdekoodia

新增带有houseType的场景列表接口

dsx 2 vuotta sitten
vanhempi
commit
9644ba5bbf

+ 6 - 0
pom.xml

@@ -21,6 +21,12 @@
 
         <dependency>
             <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-model</artifactId>
+            <version>3.0.0-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fdkankan</groupId>
             <artifactId>4dkankan-utils-fyun-oss</artifactId>
             <version>3.0.0-SNAPSHOT</version>
         </dependency>

+ 2 - 0
src/main/java/com/fdkankan/ucenter/common/constants/UploadFilePath.java

@@ -16,6 +16,8 @@ public class UploadFilePath {
 
     public static final String DOWNLOADS_QRCODE = "downloads/scene/%s/QRcode/";
 
+    public static final String IMG_VIEW_PATH =  "scene_view_data/%s/images/";
+
 
 
 }

+ 11 - 0
src/main/java/com/fdkankan/ucenter/controller/SceneController.java

@@ -50,6 +50,8 @@ public class SceneController extends BaseController {
     ISceneCooperationService sceneCooperationService;
     @Autowired
     ISceneService sceneService;
+    @Autowired
+    IScenePlusService scenePlusService;
 
     @PostMapping("/findSceneNumber")
     public Result findSceneNumber(@RequestHeader String token){
@@ -163,6 +165,15 @@ public class SceneController extends BaseController {
         return sceneUpgradeToV4Service.getUpgradeToV4Progress(num);
     }
 
+    /**
+     *
+     * 分页查询存在houseType文件的场景
+     */
+    @GetMapping("/pageSceneWithHouseType")
+    public Result pageSceneWithHouseType(RequestScene param){
+        return scenePlusService.pageSceneWithHouseType(param);
+    }
+
 
 
 }

+ 6 - 0
src/main/java/com/fdkankan/ucenter/entity/ScenePlus.java

@@ -92,6 +92,12 @@ public class ScenePlus implements Serializable {
     private Integer recommend;
 
     /**
+     * 是否有housetype文件(0-否,1-是)
+     */
+    @TableField("house_type")
+    private Integer houseType;
+
+    /**
      * 创建时间
      */
     @TableField("create_time")

+ 3 - 0
src/main/java/com/fdkankan/ucenter/service/IScenePlusService.java

@@ -1,6 +1,7 @@
 package com.fdkankan.ucenter.service;
 
 import com.fdkankan.ucenter.common.PageInfo;
+import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.entity.CameraDetail;
 import com.fdkankan.ucenter.entity.ScenePlus;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -40,4 +41,6 @@ public interface IScenePlusService extends IService<ScenePlus> {
     Long copyV4Scene(ScenePlus scenePlus,String newNum, CameraDetail cameraDetail,String time) throws IOException, Exception;
 
     List<ScenePlus> getByIds(List<Long> plusIds);
+
+    Result pageSceneWithHouseType(RequestScene param);
 }

+ 55 - 0
src/main/java/com/fdkankan/ucenter/service/impl/ScenePlusServiceImpl.java

@@ -5,12 +5,16 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.image.MatrixToImageWriterUtil;
+import com.fdkankan.model.utils.CreateObjUtil;
 import com.fdkankan.ucenter.common.OssPath;
 import com.fdkankan.ucenter.common.PageInfo;
+import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.common.constants.ConstantFilePath;
 import com.fdkankan.ucenter.common.constants.UploadFilePath;
 import com.fdkankan.redis.constant.RedisKey;
@@ -22,12 +26,16 @@ import com.fdkankan.ucenter.mapper.IScenePlusMapper;
 import com.fdkankan.ucenter.service.*;
 
 import java.io.File;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
 
+import com.fdkankan.ucenter.util.RoamingPointUtil;
 import com.fdkankan.ucenter.vo.ResponseScene;
 import com.fdkankan.ucenter.vo.SceneEditControlsVO;
 import com.fdkankan.ucenter.vo.request.RequestScene;
+import com.fdkankan.ucenter.vo.response.SceneVo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -47,6 +55,9 @@ import javax.annotation.Resource;
 @Slf4j
 public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlus> implements IScenePlusService {
 
+    @Value("${fyun.host}")
+    private String fyunHost;
+
     @Autowired
     private IScenePlusExtService scenePlusExtService;
     @Autowired
@@ -300,4 +311,48 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         });
         return scenePlus.getId();
     }
+
+    @Override
+    public Result pageSceneWithHouseType(RequestScene param) {
+        Page<ScenePlus> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()),
+                new LambdaQueryWrapper<ScenePlus>().eq(ScenePlus::getHouseType, CommonStatus.YES.code().intValue()));
+        List<SceneVo> records = null;
+        if(page.getRecords().size() > 0){
+            records = page.getRecords().parallelStream().map(plus -> {
+                return SceneVo.builder().createTime(plus.getCreateTime())
+                        .id(plus.getId()).roamingPointUrl(this.createRoamingPoint(plus.getNum())).sceneName(plus.getTitle())
+                        .num(plus.getNum()).updateTime(plus.getUpdateTime()).userId(plus.getUserId()).build();
+            }).collect(Collectors.toList());
+        }
+
+        PageInfo pageInfo = PageInfo.PageInfo(page);
+        pageInfo.setList(records);
+
+        return Result.success(pageInfo);
+    }
+
+    private String createRoamingPoint(String num){
+        String roamingPointOssPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "roamingPoint.json";
+        String url = null;
+        try {
+            if(!fYunFileServiceInterface.fileExist(roamingPointOssPath)){
+                String visionModeldataPath = ConstantFilePath.SCENE_V4_PATH + num + File.separator + "vision.modeldata";
+                String visionModeldataOssPath = String.format(UploadFilePath.IMG_VIEW_PATH, num) + "vision.modeldata";
+                fYunFileServiceInterface.downloadFile(visionModeldataOssPath, visionModeldataPath);
+                String visionTxtLocalPath = ConstantFilePath.SCENE_V4_PATH + num + File.separator + "vision.txt";
+                CreateObjUtil.convertVisionmodeldataToTxt(visionModeldataPath, visionTxtLocalPath);
+                String roamingPoint = RoamingPointUtil.createRoamingPoint(num, visionTxtLocalPath);
+                if (StrUtil.isNotEmpty(roamingPoint)) {
+                    fYunFileServiceInterface.uploadFile(roamingPoint.getBytes(StandardCharsets.UTF_8), roamingPointOssPath);
+                    url = fyunHost + roamingPointOssPath;
+                }
+            }else{
+                url = fyunHost + roamingPointOssPath;
+            }
+        }catch (Exception e){
+            log.warn("生成roamingPointJson出错,num:" + num, e);
+        }
+
+        return url;
+    }
 }

+ 47 - 0
src/main/java/com/fdkankan/ucenter/util/RoamingPointUtil.java

@@ -0,0 +1,47 @@
+package com.fdkankan.ucenter.util;
+
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.ucenter.common.constants.ConstantFilePath;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+public class RoamingPointUtil {
+
+    public static String createRoamingPoint(String num, String visionTxtPath){
+
+        if(!FileUtil.exist(visionTxtPath)){
+            return null;
+        }
+        JSONObject visionJson = JSON.parseObject(FileUtil.readUtf8String(visionTxtPath));
+
+        JSONArray sweepArray = visionJson.getJSONArray("sweepLocations");
+        List<JSONObject> roamingPoint = new ArrayList<>();
+        for (int i = 0; i < sweepArray.size(); i++) {
+            JSONObject objectJson = sweepArray.getJSONObject(i);
+            JSONObject newJson = new JSONObject();
+            newJson.put("uuid", objectJson.getString("uuid"));
+            JSONObject puck = objectJson.getJSONObject("puck");
+            puck.put("y", puck.getDoubleValue("y"));
+            puck.remove("z");
+            newJson.put("puck", puck);
+            newJson.put("subgroup", objectJson.getString("subgroup"));
+            roamingPoint.add(newJson);
+        }
+        Map<String, List<JSONObject>> subgroup = roamingPoint.stream().collect(
+                Collectors.groupingBy(x -> x.getString("subgroup"))).entrySet().stream()
+                .collect(Collectors.toMap(e -> "floor" + e.getKey(), Map.Entry::getValue));
+        return JSON.toJSONString(subgroup);
+    }
+
+}

+ 8 - 0
src/main/java/com/fdkankan/ucenter/vo/response/SceneVo.java

@@ -1,9 +1,15 @@
 package com.fdkankan.ucenter.vo.response;
 
 import com.fdkankan.ucenter.util.DateUserUtil;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 @Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
 public class SceneVo {
 
     private Long id;
@@ -44,6 +50,8 @@ public class SceneVo {
     private String shootCount;
     private String space;
     private String recommend;
+    private String roamingPointUrl;
+    private String updateTime;
 
     public String getCreateTime() {
         return DateUserUtil.getDayTime(createTime);