Forráskód Böngészése

小地图切片功能

wuweihao 4 éve
szülő
commit
dba1736b0a
28 módosított fájl, 984 hozzáadás és 827 törlés
  1. 20 20
      laser/src/main/java/com/fdkankan/indoor/base/config/TransactionConfig.java
  2. 69 0
      laser/src/main/java/com/fdkankan/indoor/base/config/WebMvcConfig.java
  3. 2 2
      laser/src/main/java/com/fdkankan/indoor/base/constant/CmdConstant.java
  4. 19 0
      laser/src/main/java/com/fdkankan/indoor/base/constant/MsgCode.java
  5. 237 0
      laser/src/main/java/com/fdkankan/indoor/base/convert/ImageClipUtil.java
  6. 126 0
      laser/src/main/java/com/fdkankan/indoor/base/exception/ExceptionController.java
  7. 19 9
      laser/src/main/java/com/fdkankan/indoor/base/util/CmdUtils.java
  8. 25 2
      laser/src/main/java/com/fdkankan/indoor/base/util/FileUtils.java
  9. 13 3
      laser/src/main/java/com/fdkankan/indoor/core/controller/DateSetController.java
  10. 14 37
      laser/src/main/java/com/fdkankan/indoor/core/controller/FilterController.java
  11. 37 0
      laser/src/main/java/com/fdkankan/indoor/core/controller/MapController.java
  12. 1 1
      laser/src/main/java/com/fdkankan/indoor/core/controller/TestController.java
  13. 1 1
      laser/src/main/java/com/fdkankan/indoor/core/entity/FilterEntity.java
  14. 23 0
      laser/src/main/java/com/fdkankan/indoor/core/entity/MapEntity.java
  15. 23 0
      laser/src/main/java/com/fdkankan/indoor/core/entity/dto/MapDto.java
  16. 44 0
      laser/src/main/java/com/fdkankan/indoor/core/entity/po/MapPo.java
  17. 0 1
      laser/src/main/java/com/fdkankan/indoor/core/mapper/DataSetMapper.java
  18. 1 1
      laser/src/main/java/com/fdkankan/indoor/core/mapper/FilterMapper.java
  19. 13 0
      laser/src/main/java/com/fdkankan/indoor/core/mapper/MapMapper.java
  20. 5 0
      laser/src/main/java/com/fdkankan/indoor/core/service/DataSetService.java
  21. 7 15
      laser/src/main/java/com/fdkankan/indoor/core/service/FilterService.java
  22. 14 0
      laser/src/main/java/com/fdkankan/indoor/core/service/MapService.java
  23. 51 7
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/DataSetServiceImpl.java
  24. 46 716
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/FilterServiceImpl.java
  25. 4 0
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/IBaseServiceImpl.java
  26. 24 11
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/InitServiceImpl.java
  27. 140 0
      laser/src/main/java/com/fdkankan/indoor/core/service/impl/MapServiceImpl.java
  28. 6 1
      laser/src/main/resources/application.properties

+ 20 - 20
laser/src/main/java/com/fdkankan/indoor/base/config/TransactionConfig.java

@@ -1,20 +1,20 @@
-package com.fdkankan.indoor.base.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.mongodb.MongoDbFactory;
-import org.springframework.data.mongodb.MongoTransactionManager;
-
-/**
- * Created by owen on 2021/7/29 0029 17:26
- * mongodb 事务配置类
- */
-@Configuration
-public class TransactionConfig {
-
-    @Bean
-    MongoTransactionManager transactionManager(MongoDbFactory factory){
-        return new MongoTransactionManager(factory);
-    }
-
-}
+//package com.fdkankan.indoor.base.config;
+//
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.data.mongodb.MongoDbFactory;
+//import org.springframework.data.mongodb.MongoTransactionManager;
+//
+///**
+// * Created by owen on 2021/7/29 0029 17:26
+// * mongodb 事务配置类
+// */
+//@Configuration
+//public class TransactionConfig {
+//
+//    @Bean
+//    MongoTransactionManager transactionManager(MongoDbFactory factory){
+//        return new MongoTransactionManager(factory);
+//    }
+//
+//}

+ 69 - 0
laser/src/main/java/com/fdkankan/indoor/base/config/WebMvcConfig.java

@@ -0,0 +1,69 @@
+package com.fdkankan.indoor.base.config;
+
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.support.config.FastJsonConfig;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by owen on 2020/2/18 0018 12:01
+ */
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+
+    /**
+     * 配置全局跨域
+     */
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**")
+                .allowedOrigins("*")
+                .allowCredentials(true)
+                .allowedMethods("GET", "POST", "DELETE", "PUT", "OPTIONS")
+                .maxAge(3600);
+    }
+
+
+
+    /**
+     * fastJson相关设置
+     * Dto包含json,需要配置不然会异常
+     * @return
+     */
+    @Bean
+    public HttpMessageConverters customConverters() {
+
+        FastJsonHttpMessageConverter fastJson = new FastJsonHttpMessageConverter();
+        // 创建FastJson信息转换对象
+        FastJsonConfig fastJsonConfig = new FastJsonConfig();
+
+
+        // 设置全程返回时间
+        fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
+        // 设置返回值为null是时输出,不写的话,null 字段 不返回。也可以设置返回空串, 可以同时设置多个
+        fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
+
+        fastJson.setFastJsonConfig(fastJsonConfig);
+
+        //3、中文乱码解决方案
+        List<MediaType> mediaTypeList = new ArrayList<>();
+        mediaTypeList.add(MediaType.APPLICATION_JSON_UTF8);
+        mediaTypeList.add(MediaType.valueOf("text/html;charset=UTF-8"));
+
+        //4、将转换规则应用于转换对象
+        fastJson.setSupportedMediaTypes(mediaTypeList);
+
+        return new HttpMessageConverters(fastJson);
+    }
+
+
+
+}

+ 2 - 2
laser/src/main/java/com/fdkankan/indoor/base/constant/CmdConstant.java

@@ -25,8 +25,8 @@ public class CmdConstant {
      *  @target oss目录名字
      */
 //    public final static String OSSUTIL_UPLOAD_DIR = "bash /opt/ossutil/ossupload.sh /mnt/720yun_fd_manage_data/@sceneCode 720yun_fd_manage/@sceneCode";
-    public final static String OSSUTIL_UPLOAD_DIR = "bash /root/user/java/jar_run/ossupload.sh @uploadDir data/@sceneCode/data/chunk1/@target";
-
+    public final static String OSSUTIL_UPLOAD_DIR_CHUNK = "bash /root/user/java/jar_run/ossupload.sh @uploadDir data/@sceneCode/data/chunk1/@target";
 
+    public final static String OSSUTIL_UPLOAD_DIR = "bash /root/user/java/jar_run/ossupload.sh @uploadDir @target";
 
 }

+ 19 - 0
laser/src/main/java/com/fdkankan/indoor/base/constant/MsgCode.java

@@ -0,0 +1,19 @@
+package com.fdkankan.indoor.base.constant;
+
+/**
+ * Created by owen on 2021/6/1 0001 16:45
+ */
+public class MsgCode {
+
+    /** 对象不存在*/
+    public static final Integer e3001 = 3001;
+
+    /** 上传文件非法*/
+    public static final Integer e3100 = 3100;
+
+    /** 空目录*/
+    public static final Integer e3003 = 3003;
+
+    /** 状态非法*/
+    public static final Integer e3004 = 3004;
+}

+ 237 - 0
laser/src/main/java/com/fdkankan/indoor/base/convert/ImageClipUtil.java

@@ -0,0 +1,237 @@
+package com.fdkankan.indoor.base.convert;
+
+import cn.hutool.core.io.FileUtil;
+import com.fdkankan.indoor.base.constant.MsgCode;
+import com.fdkankan.indoor.base.exception.BaseRuntimeException;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.imageio.ImageIO;
+import javax.imageio.ImageReadParam;
+import javax.imageio.ImageReader;
+import javax.imageio.stream.ImageInputStream;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Iterator;
+
+/**
+ * 切图工具
+ */
+@Slf4j
+public class ImageClipUtil {
+    /**
+     * 必须是1:1的图片
+     * 图片大小 > 512
+     * 必须是png 格式
+     * 自定义地图切片
+     * @param path1  图片源路径
+     * @param outPath  切片文件夹路径
+     */
+    public static  void getTiles(String path1,String outPath){
+
+        // 创建目录
+        FileUtil.mkdir(outPath);
+
+        // 判断比例大小
+        if (!isSquare(path1)) {
+            throw new BaseRuntimeException(MsgCode.e3100, "非1:1图片");
+        }
+
+        int size=getImgWidth(path1);
+        int zoom=(int)getZoomBySize(size);
+        for(int z=0;z<=zoom;z++){
+            String  outPathz=outPath+"/"+z;
+            createFolder(outPathz);
+            int unit=(int)(size/Math.pow(2,z));
+            double count=Math.pow(2,z);
+            for(int x=0;x<count;x++){
+                String  outPathx=outPathz+"/"+x;
+                createFolder(outPathx);
+                for(int y=0;y<count;y++){
+                    String  outPathy=outPathx+"/"+y+".png";
+                    cutImage(path1,outPathy, unit*x,unit*y,unit, unit,256,256);
+                }
+            }
+        }
+    }
+
+    /**
+     * 根据图片大小得到地图切片层级
+     * @param size 正方形图片大小 像素 如256*256的图片 size为256
+     */
+    private static double  getZoomBySize(int size){
+        double code=Math.ceil(size/256);
+        double z=Math.log(code)/Math.log(2);
+//        System.out.println(z);
+        log.info("切图数量: {}", z);
+        return  Math.ceil(z);
+    }
+
+
+
+    /**
+     * 将图片缩放到指定大小
+     * @param bufferedImage
+     * @param width
+     * @param height
+     * @return
+     */
+    private static BufferedImage zoomOutImage(BufferedImage bufferedImage,int width,int height){
+        BufferedImage newImage = new BufferedImage(width,height,bufferedImage.getType());
+        Graphics g = newImage.getGraphics();
+        g.drawImage(bufferedImage, 0,0,width,height,null);
+        g.dispose();
+        return  newImage;
+
+    }
+
+    public static void  createFolder(String path){
+        File file=new File(path);
+        if(!file.exists()){//如果文件夹不存在
+            file.mkdir();//创建文件夹
+        }
+    }
+
+    public  static boolean zoomOutImage(String path1,String path2){
+        BufferedImage bufferedImage = null;
+        try {
+            File of = new File(path1);
+            if(of.canRead()){
+                bufferedImage =  ImageIO.read(of);
+            }
+        } catch (IOException e) {
+            return false;
+        }
+        if(bufferedImage != null){
+            bufferedImage = zoomOutImage(bufferedImage,256,256);
+            try {
+                ImageIO.write(bufferedImage, "PNG", new File(path2)); //保存修改后的图像,全部保存为JPG格式
+            } catch (IOException e) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+
+    /**
+     * 获取本地图片宽度
+     * @param path  图片文件地址
+     * @return 宽度
+     */
+    public static int getImgWidth(String path) {
+        File file=new File(path);
+        try{
+            BufferedImage sourceImg =ImageIO.read(new FileInputStream(file));
+            return   sourceImg.getWidth() ;
+        }catch (Exception e){
+            e.printStackTrace();
+            System.out.println("获取图片大小失败");
+        }
+        return  0;
+    }
+
+
+
+
+    /**
+     * 判断图片是否1:1
+     * @return
+     */
+    private static Boolean isSquare(String path){
+        File file=new File(path);
+        try {
+            BufferedImage sourceImg =ImageIO.read(new FileInputStream(file));
+            int width = sourceImg.getWidth();
+            // 图片需要大于512
+            if (width < 512){
+                throw new BaseRuntimeException(MsgCode.e3100, "图片尺寸需要大于512");
+            }
+            int height = sourceImg.getHeight();
+            return width == height;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+
+
+
+//    /**
+//     * 获取网络地址
+//     * @param path  网络地址
+//     * @return
+//     */
+//    public   static int getImageWidthByUrl(String path){
+//        try{
+//            URL url = new URL(path);
+//            URLConnection connection = url.openConnection();
+//            connection.setDoOutput(true);
+//            BufferedImage image = ImageIO.read(connection.getInputStream());
+//            System.out.println(image .getWidth());
+//            return image .getWidth();      // 源图宽度
+//        }catch (Exception e){
+//            e.printStackTrace();
+//            System.out.println("获取图片大小失败");
+//        }
+//        return  0;
+//    }
+    /**
+     * 切图
+     * @param path1 图片原路径
+     * @param path2  裁剪后存储的路径
+     * @param x x轴
+     * @param y y轴
+     * @param w  宽度
+     * @param h  高度
+     * @param width  缩放到指定宽度
+     * @param height 缩放到指定高度
+     */
+    public static void cutImage(String path1,String path2,int x,int y,int w,int h,int width,int height){
+        FileInputStream fileInputStream=null;
+        ImageInputStream iis=null;
+
+        try {
+            //读取图片文件,建立文件输入流
+            fileInputStream=new FileInputStream(path1);
+            //创建图片的文件流 迭代器
+            Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName("png");
+            ImageReader reader=it.next();
+            //获取图片流 建立文图 文件流
+            iis=ImageIO.createImageInputStream(fileInputStream);
+            //获取图片默认参数
+            reader.setInput(iis, true);
+            ImageReadParam param=reader.getDefaultReadParam();
+            //定义裁剪区域
+            Rectangle rect=new Rectangle(x,y,w,h);
+            param.setSourceRegion(rect);
+            BufferedImage bi=reader.read(0,param);
+            BufferedImage newBufferedImage=  zoomOutImage(bi,width,height);
+            ImageIO.write(newBufferedImage, "png", new File(path2));
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println("裁剪失败:"+path2);
+        }finally{
+            try {
+                if(fileInputStream!=null){
+                    fileInputStream.close();
+                }
+                if(iis!=null){
+                    iis.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+        }
+    }
+
+    public static void main(String[] args) {
+        String in = "F:\\test\\ngin\\age_camera_germany_data\\t805\\map\\4096.png";
+        String out = "F:\\test\\ngin\\age_camera_germany_data\\t805\\map\\tile";
+        getTiles(in, out);
+    }
+}

+ 126 - 0
laser/src/main/java/com/fdkankan/indoor/base/exception/ExceptionController.java

@@ -0,0 +1,126 @@
+package com.fdkankan.indoor.base.exception;
+
+import com.fdkankan.indoor.base.util.Result;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.servlet.NoHandlerFoundException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolationException;
+import javax.validation.ValidationException;
+
+/**
+ * 统一捕捉异常,自定义返回参数
+ * 这里只可以捕获controller层的异常。
+ */
+@Slf4j
+@RestControllerAdvice
+public class ExceptionController {
+
+    // 捕捉shiro的异常
+//    @ResponseStatus(HttpStatus.UNAUTHORIZED)
+//    @ExceptionHandler(ShiroException.class)
+//    public Result handle401(ShiroException e) {
+////        return Result.failure(5001, e.getMessage());
+//        log.error("没有授权1");
+//        return Result.failure(5001, "没有授权");
+//    }
+//
+//
+//
+//    /**
+//     * 捕捉UnauthorizedException
+//     *
+//     * 权限不够,会抛这个异常
+//     */
+//    @ResponseStatus(HttpStatus.UNAUTHORIZED)
+//    @ExceptionHandler(UnauthorizedException.class)
+//    public Result handle401() {
+//        log.error("没有权限");
+//        return Result.failure(5003, "没有权限");
+//    }
+
+    // 捕捉其他所有异常
+    @ExceptionHandler(Exception.class)
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    public Result globalException(HttpServletRequest request, Throwable ex) {
+//        log.error(ex);
+        return Result.failure(getStatus(request).value(), ex.getMessage());
+    }
+
+
+    private HttpStatus getStatus(HttpServletRequest request) {
+        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
+        if (statusCode == null) {
+            return HttpStatus.INTERNAL_SERVER_ERROR;
+        }
+        return HttpStatus.valueOf(statusCode);
+    }
+
+    @ResponseBody
+    @ExceptionHandler(BaseRuntimeException.class)
+    @ResponseStatus(HttpStatus.OK)
+    public Result runtimeExceptionHandler(HttpServletRequest request, BaseRuntimeException e) {
+        log.error(request.getRequestURI() + ":" + e.getMsg());
+//        return Result.failure(e.getCode() == null ? Result.CODE_FAILURE : e.getCode(), e.getMsg());
+        return Result.failure(e.getCode(), e.getMsg());
+    }
+
+    /**
+     * 方法参数校验
+     *
+     * 注解验证异常
+     */
+    @ExceptionHandler(MethodArgumentNotValidException.class)
+    public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
+        return Result.failure(60001, e.getBindingResult().getFieldError().getDefaultMessage());
+    }
+
+    /**
+     * ValidationException
+     */
+    @ExceptionHandler(ValidationException.class)
+    public Result handleValidationException(ValidationException e) {
+        log.error(e.getMessage(), e);
+        return Result.failure(60002, e.getCause().getMessage());
+    }
+
+    /**
+     * ConstraintViolationException
+     */
+    @ExceptionHandler(ConstraintViolationException.class)
+    public Result handleConstraintViolationException(ConstraintViolationException e) {
+        log.error(e.getMessage(), e);
+        return Result.failure(60003, e.getMessage());
+    }
+
+    @ExceptionHandler(NoHandlerFoundException.class)
+    public Result handlerNoFoundException(Exception e) {
+        log.error(e.getMessage(), e);
+        return Result.failure(60004, "路径不存在,请检查路径是否正确");
+    }
+
+    /**
+     * 防止表单重复提交
+     * 需要结合数据库某个字段设置唯一字段使用
+     *
+     * 例如userName
+     *
+     * 也可以结合redis使用
+     */
+    @ExceptionHandler(DuplicateKeyException.class)
+    public Result handleDuplicateKeyException(DuplicateKeyException e) {
+        log.error(e.getMessage(), e);
+        return Result.failure(60005, "数据重复,请检查后提交: " + e.getMessage());
+    }
+
+
+
+}
+

+ 19 - 9
laser/src/main/java/com/fdkankan/indoor/base/util/CmdUtils.java

@@ -94,21 +94,31 @@ public class CmdUtils {
     /**
      * 调用sh脚本上传oss
      */
-    public static void ossUploadDir(String sceneCode, String uploadDir, String target){
+//    public static void ossUploadDir(String sceneCode, String uploadDir, String target){
+//
+//        String cmd = CmdConstant.OSSUTIL_UPLOAD_DIR;
+//        cmd = cmd.replaceAll("@sceneCode", sceneCode);
+//        cmd = cmd.replaceAll("@uploadDir", uploadDir);
+//        cmd = cmd.replaceAll("@target", target);
+//
+//        log.info("ossCmd: " + cmd);
+//        long start = System.currentTimeMillis();
+//        CmdUtils.callLineSh(cmd);
+//        long end = System.currentTimeMillis();
+//        log.info("场景码目录:{} 上传完成, 耗时:{} s" , sceneCode, (end-start)/1000 );
+//    }
+
 
-        String cmd = CmdConstant.OSSUTIL_UPLOAD_DIR;
-        cmd = cmd.replaceAll("@sceneCode", sceneCode);
-        cmd = cmd.replaceAll("@uploadDir", uploadDir);
-        cmd = cmd.replaceAll("@target", target);
+    /**
+     * 调用sh脚本上传oss
+     */
+    public static void ossUploadDir(String cmd){
 
         log.info("ossCmd: " + cmd);
         long start = System.currentTimeMillis();
         CmdUtils.callLineSh(cmd);
         long end = System.currentTimeMillis();
-        log.info("场景码目录:{} 上传完成, 耗时:{} s" , sceneCode, (end-start)/1000 );
+        log.info("场景码目录:{} 上传完成, 耗时:{} s" , (end-start)/1000 );
     }
 
-
-
-
 }

+ 25 - 2
laser/src/main/java/com/fdkankan/indoor/base/util/FileUtils.java

@@ -1,17 +1,21 @@
 package com.fdkankan.indoor.base.util;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
 import org.junit.Test;
 import org.springframework.core.io.ClassPathResource;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.time.LocalDateTime;
 
 /**
  * Created by owen on 2021/7/28 0028 14:18
  */
-public class FileUtils {
+public class MyFileUtils {
 
     /**
      * 读取资源文内容
@@ -19,7 +23,7 @@ public class FileUtils {
      * @return
      */
     public static String getResourceContent(String resourcePath){
-        InputStream resource = FileUtils.getResource(resourcePath);
+        InputStream resource = MyFileUtils.getResource(resourcePath);
         StringBuilder sb = new StringBuilder();
         String line;
         String str = null ;
@@ -54,4 +58,23 @@ public class FileUtils {
         String resourceContent = getResourceContent("data/poi_type.json");
         System.out.println(resourceContent);
     }
+
+    /** 返回时间戳名字*/
+    public static String getTimeName(MultipartFile file){
+        String time = DateUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS");
+        String originalFilename = file.getOriginalFilename();
+        String suffix = StrUtil.subAfter(originalFilename, ".", true);
+        return time+ "." + suffix;
+
+    }
+
+    /** 返回后缀名*/
+    public static String getsuffix(MultipartFile file){
+        String originalFilename = file.getOriginalFilename();
+        String suffix = StrUtil.subAfter(originalFilename, ".", true);
+        suffix = suffix.toLowerCase();
+        return "." + suffix;
+
+    }
+
 }

+ 13 - 3
laser/src/main/java/com/fdkankan/indoor/core/controller/DateSetController.java

@@ -2,15 +2,16 @@ package com.fdkankan.indoor.core.controller;
 
 import com.fdkankan.indoor.base.aop.WebControllerLog;
 import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.po.DataSetPo;
 import com.fdkankan.indoor.core.service.DataSetService;
 import com.fdkankan.indoor.core.service.InitService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * Created by owen on 2021/7/28 0028 9:04
@@ -37,4 +38,13 @@ public class DateSetController {
         Result result = entityService.getDataSet(sceneCode);
         return result.getData();
     }
+
+
+    @WebControllerLog(description = "场景信息接口-修改")
+    @ApiOperation(value = "修改数据")
+    @PutMapping("indoor/{sceneCode}/api/datasets")
+    public Object update(@PathVariable String sceneCode, @RequestBody List<DataSetPo> param) {
+        Result result = entityService.update(sceneCode, param);
+        return result.getData();
+    }
 }

+ 14 - 37
laser/src/main/java/com/fdkankan/indoor/core/controller/FilterController.java

@@ -2,18 +2,15 @@ package com.fdkankan.indoor.core.controller;
 
 import com.fdkankan.indoor.base.aop.WebControllerLog;
 import com.fdkankan.indoor.base.util.Result;
-import com.fdkankan.indoor.core.entity.dto.FilterQueryDto;
-import com.fdkankan.indoor.core.entity.dto.JsonDataDetailDto;
-import com.fdkankan.indoor.core.entity.dto.QueryJsonDataOne;
-import com.fdkankan.indoor.core.entity.dto.QueryJsonDataTwo;
+import com.fdkankan.indoor.core.entity.dto.*;
 import com.fdkankan.indoor.core.service.FilterService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * Created by owen on 2021/7/15 0015 15:58
@@ -23,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
  * 漫游点
  */
 @Slf4j
-@Api(tags = "filter数据接口")
+@Api(tags = "热点(filter)")
 @RestController
 public class FilterController {
 
@@ -42,29 +39,10 @@ public class FilterController {
     @GetMapping("indoor/{sceneCode}/api/images/{id}")
     public Object getDataById(@PathVariable String sceneCode, @PathVariable Integer id) {
         log.info("sceneCode: {}", sceneCode);
-//        Result result = filterService.findById(sceneCode, id);
-        Result result = filterService.findById_5(sceneCode, id);
+        Result result = filterService.findById(sceneCode, id);
         return result.getData();
     }
 
-    /**
-     * http://127.0.0.1:9294/indoor/test1/api/images/filter?dataset=56&hidden=false&limit=100&sort_by=FILE_ID&sort_order=ASC
-     * @param code
-     * @param queryJsonDataOne
-     * @param queryJsonDataTwo
-     * @param jsonDataDetailDto
-     * @return
-     */
-//    @WebControllerLog(description = "filter查询接口")
-//    @ApiOperation(value = "filter查询接口")
-//    @GetMapping("indoor/{code}/api/images/filter")
-//    public Object filter(@PathVariable String code,
-//                                 QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto) {
-////        Result result = filterService.query(code, queryJsonDataOne, queryJsonDataTwo, jsonDataDetailDto);
-//        Result result = filterService.query_5(code, queryJsonDataOne, queryJsonDataTwo, jsonDataDetailDto);
-//
-//        return result.getData();
-//    }
 
     /**
      * 获取漫游点
@@ -78,20 +56,19 @@ public class FilterController {
     @ApiOperation(value = "filter查询接口")
     @GetMapping("indoor/{code}/api/images/filter")
     public Object filter(@PathVariable String code, FilterQueryDto param) {
-//        Result result = filterService.query(code, queryJsonDataOne, queryJsonDataTwo, jsonDataDetailDto);
-        Result result = filterService.query_6(code, param);
+        Result result = filterService.query(code, param);
 
         return result.getData();
     }
 
 
-//    @WebControllerLog(description = "测试id查询")
-//    @ApiOperation(value = "测试id查询")
-//    @GetMapping("indoor/{sceneCode}/api/filter1/{id}")
-//    public Result getDataById1(@PathVariable String sceneCode, @PathVariable Integer id) {
-//        log.info("sceneCode: {}", sceneCode);
-//        return filterService.findById1(sceneCode, id);
-//    }
+    @WebControllerLog(description = "更新热点")
+    @ApiOperation(value = "更新热点")
+    @PutMapping("indoor/{sceneCode}/api/images")
+    public Object update(@PathVariable String sceneCode, @RequestBody List<FilterHotDto> param) {
+        Result result = filterService.update(sceneCode, param);
+        return result.getData();
+    }
 
 
 

+ 37 - 0
laser/src/main/java/com/fdkankan/indoor/core/controller/MapController.java

@@ -0,0 +1,37 @@
+package com.fdkankan.indoor.core.controller;
+
+import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.dto.MapDto;
+import com.fdkankan.indoor.core.service.MapService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Created by owen on 2021/8/2 0002 20:39
+ */
+@Api(tags = "小地图")
+@RestController
+public class MapController {
+
+    @Autowired
+    MapService entityMap;
+
+    @ApiOperation(value = "上传小地图", notes = "上传且初始化t_map")
+    @PostMapping("indoor/{sceneCode}/api/map/upload")
+    public Result upload(@PathVariable String sceneCode, MapDto param){
+
+        return entityMap.upload(sceneCode, param);
+    }
+
+    @ApiOperation(value = "获取小地图信息")
+    @GetMapping("indoor/{sceneCode}/api/tiled_maps")
+    public Object getTiledMap(@PathVariable String sceneCode){
+        Result result = entityMap.getTiledMap(sceneCode);
+        return result.getData();
+    }
+}

+ 1 - 1
laser/src/main/java/com/fdkankan/indoor/core/controller/TestController.java

@@ -86,7 +86,7 @@ public class TestController {
     @ApiOperation("oss上传目录")
     @GetMapping("ossUploadDir/{sceneCode}")
     public Result ossUploadDir(@PathVariable String sceneCode){
-        CmdUtils.ossUploadDir(sceneCode, "", "");
+//        CmdUtils.ossUploadDir(sceneCode, "", "");
         return Result.success();
 
 

+ 1 - 1
laser/src/main/java/com/fdkankan/indoor/core/entity/FilterEntity.java

@@ -15,7 +15,7 @@ import java.util.List;
 @Data
 public class FilterEntity extends BaseEntity {
 
-    private String sceneCode;
+//    private String sceneCode;
 
     private List<FilterHotDto> data;
 

+ 23 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/MapEntity.java

@@ -0,0 +1,23 @@
+package com.fdkankan.indoor.core.entity;
+
+import com.fdkankan.indoor.core.entity.po.MapPo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.List;
+
+
+/**
+ * Created by owen on 2021/7/28 0027 10:42
+ * 小地图信息
+ */
+@Document(collection = "t_map")
+@Data
+public class MapEntity extends BaseEntity {
+
+    @ApiModelProperty(value = "数据")
+    private List<MapPo> data;
+
+
+}

+ 23 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/dto/MapDto.java

@@ -0,0 +1,23 @@
+package com.fdkankan.indoor.core.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * Created by owen on 2021/8/3 0003 9:21
+ * 上传小地图信息
+ */
+@Data
+public class MapDto {
+
+    @ApiModelProperty(value = "坐标: lat:113:[0], lon:22:[1], z:[3]", required = true)
+    private Double[] location;
+
+    @ApiModelProperty(value = "位置信息", required = true)
+    private Double[] orientation;
+
+    @ApiModelProperty(value = "文件(只能上传png图片)",required = true)
+    private MultipartFile file;
+
+}

+ 44 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/po/MapPo.java

@@ -0,0 +1,44 @@
+package com.fdkankan.indoor.core.entity.po;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by owen on 2021/8/2 0002 14:42
+ * 小地图信息
+ */
+@Data
+public class MapPo {
+
+    private Integer id;
+
+    private Integer bundle_id;
+
+    private String type;
+
+    // 原点转的
+    private Double[] location;
+
+    private Double[] orientation;
+
+
+    @ApiModelProperty(value = "上传图片目录地址", notes = "目录需要上传oss")
+    private String file_path;
+
+    private String file_name;
+
+    private Integer floor_id;
+
+    private Double map_size_m;
+
+    private Integer max_depth;
+
+    private String quadtree;
+
+    private Integer tile_size_px;
+
+
+
+
+
+}

+ 0 - 1
laser/src/main/java/com/fdkankan/indoor/core/mapper/DataSetMapper.java

@@ -11,5 +11,4 @@ import org.springframework.stereotype.Component;
 @Component
 public interface DataSetMapper extends MongoRepository<DataSetEntity, String> {
 
-//    DataSetEntity findBySceneCode(String sceneCode);
 }

+ 1 - 1
laser/src/main/java/com/fdkankan/indoor/core/mapper/FilterMapper.java

@@ -11,5 +11,5 @@ import org.springframework.stereotype.Component;
 @Component
 public interface FilterMapper extends MongoRepository<FilterEntity, String> {
 
-    FilterEntity findBySceneCode(String sceneCode);
+//    FilterEntity findBySceneCode(String sceneCode);
 }

+ 13 - 0
laser/src/main/java/com/fdkankan/indoor/core/mapper/MapMapper.java

@@ -0,0 +1,13 @@
+package com.fdkankan.indoor.core.mapper;
+
+import com.fdkankan.indoor.core.entity.MapEntity;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by owen on 2021/7/27 0027 15:19
+ */
+@Component
+public interface MapMapper extends MongoRepository<MapEntity, String> {
+
+}

+ 5 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/DataSetService.java

@@ -2,6 +2,9 @@ package com.fdkankan.indoor.core.service;
 
 import com.fdkankan.indoor.base.util.Result;
 import com.fdkankan.indoor.core.entity.DataSetEntity;
+import com.fdkankan.indoor.core.entity.po.DataSetPo;
+
+import java.util.List;
 
 /**
  * Created by owen on 2021/7/28 0028 20:05
@@ -10,4 +13,6 @@ public interface DataSetService {
     void save(DataSetEntity entity);
 
     Result getDataSet(String sceneCode);
+
+    Result update(String sceneCode, List<DataSetPo> param);
 }

+ 7 - 15
laser/src/main/java/com/fdkankan/indoor/core/service/FilterService.java

@@ -1,29 +1,21 @@
 package com.fdkankan.indoor.core.service;
 
 import com.fdkankan.indoor.base.util.Result;
-import com.fdkankan.indoor.core.entity.dto.FilterQueryDto;
-import com.fdkankan.indoor.core.entity.dto.JsonDataDetailDto;
-import com.fdkankan.indoor.core.entity.dto.QueryJsonDataOne;
-import com.fdkankan.indoor.core.entity.dto.QueryJsonDataTwo;
+import com.fdkankan.indoor.core.entity.dto.*;
 import com.fdkankan.indoor.core.entity.FilterEntity;
 
+import java.util.List;
+
 /**
  * Created by owen on 2021/7/15 0015 16:00
  */
 public interface FilterService {
 
-
-//    Result findById(String sceneCode, Integer id);
-
-//    Result query(String code, QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto);
-//    Result query_5(String code, QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto);
-
-//    Result findById1(String sceneCode, Integer id);
-
-
     void save(FilterEntity entity);
 
-    Result findById_5(String sceneCode, Integer id);
+    Result findById(String sceneCode, Integer id);
+
+    Result query(String code, FilterQueryDto param);
 
-    Result query_6(String code, FilterQueryDto param);
+    Result update(String sceneCode, List<FilterHotDto> param);
 }

+ 14 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/MapService.java

@@ -0,0 +1,14 @@
+package com.fdkankan.indoor.core.service;
+
+import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.dto.MapDto;
+
+/**
+ * Created by owen on 2021/7/28 0028 20:05
+ */
+public interface MapService {
+
+    Result upload(String sceneCode, MapDto file);
+
+    Result getTiledMap(String sceneCode);
+}

+ 51 - 7
laser/src/main/java/com/fdkankan/indoor/core/service/impl/DataSetServiceImpl.java

@@ -1,7 +1,10 @@
 package com.fdkankan.indoor.core.service.impl;
 
+import com.fdkankan.indoor.base.constant.MsgCode;
+import com.fdkankan.indoor.base.exception.BaseRuntimeException;
 import com.fdkankan.indoor.base.util.Result;
 import com.fdkankan.indoor.core.entity.DataSetEntity;
+import com.fdkankan.indoor.core.entity.dto.FilterHotDto;
 import com.fdkankan.indoor.core.entity.dto.PoiHotDto;
 import com.fdkankan.indoor.core.entity.dto.SecurityDto;
 import com.fdkankan.indoor.core.entity.po.DataSetPo;
@@ -11,9 +14,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * Created by owen on 2021/7/28 0028 20:05
@@ -32,27 +37,66 @@ public class DataSetServiceImpl extends IBaseServiceImpl implements DataSetServi
 
     @Override
     public Result getDataSet(String sceneCode) {
-        DataSetEntity entity = findById(sceneCode);
+        DataSetEntity entity = auth(sceneCode);
         return Result.success(entity.getData());
     }
 
-    private DataSetEntity findById(String sceneCode){
-        Optional<DataSetEntity> optional = dataSetMapper.findById(sceneCode);
-        // 处理是否登录
-        DataSetEntity entity = optional.get();
+    @Override
+    public Result update(String sceneCode, List<DataSetPo> param) {
+
+        DataSetEntity entity = findById(sceneCode);
+        List<DataSetPo> data = entity.getData();
 
+        log.info("db数据量: {}", data.size());
+
+        // 将热点id提取出来做过滤条件
+        List<Integer> argIds = param.stream().map(DataSetPo::getId).collect(Collectors.toList());
+        log.info("参数id数量: {}", argIds.size());
+
+        data = data.stream().filter(p -> !argIds.contains(p.getId())).collect(Collectors.toList());
+        log.info("不需要更新的数据量: {}", data.size());
+
+        // 添加更新参数
+        data.addAll(param);
+        log.info("需要更新db数据量: {}", data.size());
+
+        // 更新db
+        entity.setUpdateTime(LocalDateTime.now());
+        entity.setData(data);
+        dataSetMapper.save(entity);
+
+        return Result.success(auth(sceneCode).getData());
+    }
+
+    /**
+     * 处理是否登录问题
+     * @param sceneCode
+     * @return
+     */
+    private DataSetEntity auth(String sceneCode){
+        // 处理是否登录
+        DataSetEntity entity = findById(sceneCode);
         if (isLogin()){
             return entity;
         }
-
         entity.setData(changeSecurityUnLoginList(entity.getData()));
             return entity;
 
     }
 
 
-    private List<DataSetPo> changeSecurityUnLoginList(List<DataSetPo> param){
 
+    private DataSetEntity findById(String sceneCode){
+        Optional<DataSetEntity> optional = dataSetMapper.findById(sceneCode);
+        if (!optional.isPresent()) {
+            throw new BaseRuntimeException(MsgCode.e3001, "对象不存在");
+        }
+        return optional.orElseGet(optional::get);
+
+    }
+
+
+    private List<DataSetPo> changeSecurityUnLoginList(List<DataSetPo> param){
         List<DataSetPo> result = new ArrayList<>();
         for (DataSetPo dto : param) {
             dto.setSecurity(changeSecurityUnLogin());

+ 46 - 716
laser/src/main/java/com/fdkankan/indoor/core/service/impl/FilterServiceImpl.java

@@ -4,21 +4,17 @@ import com.fdkankan.indoor.base.convert.DistanceUtil;
 import com.fdkankan.indoor.base.util.*;
 import com.fdkankan.indoor.core.entity.dto.*;
 import com.fdkankan.indoor.core.entity.FilterEntity;
-import com.fdkankan.indoor.core.entity.jsonData.FilterEntity1;
-import com.fdkankan.indoor.core.entity.jsonData.JsonData;
 import com.fdkankan.indoor.core.mapper.FilterMapper;
 import com.fdkankan.indoor.core.service.FilterService;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * Created by owen on 2021/7/15 0015 16:00
@@ -34,720 +30,34 @@ public class FilterServiceImpl implements FilterService {
     MongoTemplate mongoTemplate;
 
 
-//    @Override
-//    public Result findById(String sceneCode, Integer id) {
-//        List<JsonData> array = findBySceneCode(sceneCode);
-//        List<JsonData> result = array.stream().filter(p -> id.equals(p.getId()))
-//                .collect(Collectors.toList());
-//        if (result.size() == 0) {
-//            throw new RuntimeException("此场景没有数据");
-//        }
-//
-//        return Result.success(result.get(0));
-//    }
-
-//    @Override
-//    public Result query(String code, QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto) {
-//
-//        if (queryJsonDataOne.getLat() != null || queryJsonDataTwo.getLat_max() != null){
-//            QueryJsonDataBase data = switchQueryData(queryJsonDataOne, queryJsonDataTwo);
-//            return  Result.success(filterJsonData(code, data));
-//        }
-//
-//        if (jsonDataDetailDto != null){
-//            return  Result.success(filterJsonDataDetail(code, jsonDataDetailDto));
-//        }
-//        return null;
-//    }
-
-
-//    @Override
-//    public Result query_5(String code, QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto) {
-//
-//
-//            QueryJsonDataBase data = switchQueryData(queryJsonDataOne, queryJsonDataTwo);
-//            return  Result.success(filterJsonData_5(code, data, jsonDataDetailDto));
-//
-//
-//    }
-
-//    @Override
-//    public Result findById1(String sceneCode, Integer id) {
-//
-//        Query query = new Query();
-//        query.addCriteria(Criteria.where("sceneCode").is(sceneCode).and("data.file_id").is("00004"));
-//
-//        FilterEntity1 entity = mongoTemplate.findOne(query, FilterEntity1.class);
-//        List<JsonData> data = entity.getData();
-//
-//        return Result.success(data);
-//    }
 
     @Override
     public void save(FilterEntity entity) {
-        filterMapper.insert(entity);
+        filterMapper.save(entity);
     }
 
 
 
 
-    /**
-     * 根据场景码查询数据
-     * @param sceneCode
-     * @return
-     */
-    private List<JsonData>  findBySceneCode(String sceneCode) {
-        Query query = new Query();
-        query.addCriteria(Criteria.where("sceneCode").is(sceneCode));
-        FilterEntity1 entity = mongoTemplate.findOne(query, FilterEntity1.class, "t_filter");
-        if (entity == null) {
-            throw new RuntimeException("没有此场景数据");
-        }
-        List<JsonData> list = entity.getData();
-        log.info("JsonData数量:{}", list.size());
-        return list;
-    }
-
-
-
-
-
-
-    /**
-     * 查询细节根据排序
-     * @param code
-     * @param jsonDataDetailDto
-     * @return
-     */
-
-//    private List<JsonData> filterJsonDataDetail(String code, JsonDataDetailDto jsonDataDetailDto) {
-//        List<JsonData> dbList = findBySceneCode(code);
-//
-//        Integer datasetId = jsonDataDetailDto.getDataset();
-//        Integer siteModelEntityId = jsonDataDetailDto.getSite_model_entity();
-//        Integer limit = jsonDataDetailDto.getLimit();
-//        limit = limit==null ? 10 : limit;
-//        Boolean hidden = jsonDataDetailDto.getHidden();
-//        // 对应db 根据那个字段排序
-//        String sortOrder = jsonDataDetailDto.getSort_order();
-//        sortOrder = sortOrder==null ? null :sortOrder.toLowerCase();
-//        // 升序还是降序
-//        String sortBy = jsonDataDetailDto.getSort_by();
-//        sortBy = sortBy==null ? null :sortBy.toLowerCase();
-//
-//
-//
-//        // todo 这里的排序还需要处理一下, 如有异常看了hidden值
-//
-//        Stream<JsonData> dataStream = dbList.stream();
-//        if (datasetId != null) {
-//            dataStream = dataStream.filter(p -> datasetId.equals(p.getDataset_id()));
-//        }
-//
-//        if (siteModelEntityId != null) {
-//            dataStream = dataStream.filter(p -> siteModelEntityId.equals(p.getSite_model_entity_id()));
-//        }
-//
-//
-//        // 处理排序reversed()降序, 默认是升序
-//        if ("desc".equals(sortBy) && "file_id".equals(sortOrder)) {
-//            dataStream = dataStream.sorted(Comparator.comparing(JsonData::getFile_id).reversed());
-//        } else if ("asc".equals(sortBy) && "file_id".equals(sortOrder)){
-//            dataStream =  dataStream.sorted(Comparator.comparing(JsonData::getFile_id));
-//        }
-//
-//        List<JsonData> collect = dataStream.collect(Collectors.toList());
-//
-//        log.info("返回数据数量: {}", collect.size());
-//        return collect;
-//    }
-
-    /**
-     * 封装基础数据
-     * @param queryJsonDataOne
-     * @param queryJsonDataTwo
-     * @return
-     */
-//    private QueryJsonDataBase switchQueryData(QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo) {
-//        QueryJsonDataBase data = new QueryJsonDataBase();
-//        if (queryJsonDataOne.getLat() != null && queryJsonDataOne.getLon() != null) {
-//            data = queryJsonDataOne;
-//        } else if (queryJsonDataTwo.getLat_min() != null && queryJsonDataTwo.getLat_max() != null
-//                && queryJsonDataTwo.getLon_min() != null && queryJsonDataTwo.getLon_max() != null) {
-//            data = queryJsonDataTwo;
-//        }
-//        log.info("base data: {}", data.toString());
-//        return data;
-//    }
-
-
-//    private List<JsonData> filterJsonData(String code, QueryJsonDataBase data) {
-//        log.info("code:{}, data:{}", code, data.toString());
-//
-//        List<JsonData> list = findBySceneCode(code);
-//        if (data instanceof QueryJsonDataOne) {
-//            QueryJsonDataOne one = (QueryJsonDataOne) data;
-//            list = queryDataOne(one, list);
-//            log.info("走one");
-//        } else if (data instanceof QueryJsonDataTwo) {
-//            QueryJsonDataTwo two = (QueryJsonDataTwo) data;
-//            list = queryDataTwo(two, list);
-//            log.info("走two");
-//        } else {
-//            throw new RuntimeException("没有查询到数据,请检查入参");
-//        }
-//        return list;
-//    }
-
-
-//    private List<FilterHotDto> filterJsonData_5(String code, QueryJsonDataBase data, JsonDataDetailDto jsonDataDetailDto) {
-//        log.info("code:{}, data:{}", code, data.toString());
-//
-//        List<FilterHotDto> list = getDataBySceneCode_5(code);
-//        if (data instanceof QueryJsonDataOne) {
-//            QueryJsonDataOne one = (QueryJsonDataOne) data;
-//            list = queryDataOne_5(one, list);
-//            log.info("走one");
-//        } else if (data instanceof QueryJsonDataTwo) {
-//            QueryJsonDataTwo two = (QueryJsonDataTwo) data;
-//            list = queryDataTwo_5(two, list);
-//            log.info("走two");
-//        } else {
-//            throw new RuntimeException("没有查询到数据,请检查入参");
-//        }
-//
-//
-//        // QueryJsonDataOne:lat、lon
-//
-//        // QueryJsonDataTwo:lat_max、lat_min、lon_max、lon_min
-//
-//
-//
-//
-//        // 过滤参数
-//        list = filterJsonDataDetail_5_1(list, jsonDataDetailDto);
-//
-//
-//        return list;
-//    }
-
-
-//    private List<JsonData> filterJsonDataDetail_5(List<JsonData> dbList, JsonDataDetailDto jsonDataDetailDto) {
-////        List<JsonData> dbList = findBySceneCode(code);
-//
-//        Integer datasetId = jsonDataDetailDto.getDataset();
-//        Integer siteModelEntityId = jsonDataDetailDto.getSite_model_entity();
-//        Integer limit = jsonDataDetailDto.getLimit();
-//        limit = limit==null ? 10 : limit;
-//        Boolean hidden = jsonDataDetailDto.getHidden();
-//        // 对应db 根据那个字段排序
-//        String sortOrder = jsonDataDetailDto.getSort_order();
-//        sortOrder = sortOrder==null ? null :sortOrder.toLowerCase();
-//        // 升序还是降序
-//        String sortBy = jsonDataDetailDto.getSort_by();
-//        sortBy = sortBy==null ? null :sortBy.toLowerCase();
-//
-//
-//
-//        // todo 这里的排序还需要处理一下, 如有异常看了hidden值
-//
-//        Stream<JsonData> dataStream = dbList.stream();
-//        if (datasetId != null) {
-//            dataStream = dataStream.filter(p -> datasetId.equals(p.getDataset_id()));
-//        }
-//
-//        if (siteModelEntityId != null) {
-//            dataStream = dataStream.filter(p -> siteModelEntityId.equals(p.getSite_model_entity_id()));
-//        }
-//
-//
-//        // 处理排序reversed()降序, 默认是升序
-//        if ("desc".equals(sortBy) && "file_id".equals(sortOrder)) {
-//            dataStream = dataStream.sorted(Comparator.comparing(JsonData::getFile_id).reversed());
-//        } else if ("asc".equals(sortBy) && "file_id".equals(sortOrder)){
-//            dataStream =  dataStream.sorted(Comparator.comparing(JsonData::getFile_id));
-//        }
-//
-//        List<JsonData> collect = dataStream.collect(Collectors.toList());
-//
-//        log.info("返回数据数量: {}", collect.size());
-//        return collect;
-//    }
-
-
-
-
-
-//    private List<JsonData> queryDataOne(QueryJsonDataOne queryJsonData, List<JsonData> dbList) {
-//        log.info("run queryDataOne");
-//
-//        List<JsonData> jsonDataList = new ArrayList<>();
-//        Long siteModelEntityId = queryJsonData.getSiteModelEntity();
-//
-//        //su  更改 7-21 18:18
-//        if (siteModelEntityId != null) {
-//            jsonDataList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
-//        }else{
-//            jsonDataList = dbList;
-//        }
-//
-//        if (queryJsonData.getZ() != null) {
-//            jsonDataList = dbList.stream().filter(jsonData ->
-//                    jsonData.getLocation()[2] >= queryJsonData.getZ() && jsonData.getFloor_location()[2] <= queryJsonData.getZ())
-//                    .collect(Collectors.toList());
-//        }
-//
-//        List<JsonData> newJsonData = new ArrayList<>();
-//        // radius:半径
-//        if (queryJsonData.getRadius() != null) {
-////            newJsonData = calcule(queryJsonData, jsonDataList);
-//            newJsonData = calcule_5(queryJsonData, jsonDataList);
-//        } else {
-//            // 没有半径,算最近的距离
-//            newJsonData = calculeMin(queryJsonData, jsonDataList);
-//        }
-//
-//        if (queryJsonData.getLimit() != null) {
-//            newJsonData = newJsonData.stream().limit(queryJsonData.getLimit()).collect(Collectors.toList());
-//        }
-//        return newJsonData;
-//    }
-
-
-//    private List<JsonData> queryDataTwo(QueryJsonDataTwo queryJsonData , List<JsonData> dbList) {
-//        log.info("run queryDataTwo");
-//
-//        List<JsonData> jsonDataList = new ArrayList<>();
-//        Long siteModelEntityId = queryJsonData.getSiteModelEntity();
-//        if (siteModelEntityId != null) {
-//            dbList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
-//        }
-//        jsonDataList = dbList.stream().filter(jsonData ->
-//                jsonData.getLocation()[0] >= queryJsonData.getLon_min() && jsonData.getLocation()[0] <= queryJsonData.getLon_max()
-//                        && jsonData.getLocation()[1] >= queryJsonData.getLat_min() && jsonData.getLocation()[1] <= queryJsonData.getLat_max())
-//                .collect(Collectors.toList());
-//
-//        List<JsonData> newJsonData = fillNewJsonData(queryJsonData, jsonDataList);
-//
-//        return newJsonData;
-//    }
-
-
-    /**
-     * 处理step step的值会有影响
-     * 当step=null, 0, 1不做处理
-     * @param queryJsonData
-     * @param jsonDataList
-     * @return
-     */
-//    private List<JsonData> fillNewJsonData(QueryJsonDataTwo queryJsonData, List<JsonData> jsonDataList) {
-//        List<JsonData> newJsonData = new ArrayList<>();
-//        log.info("输入对象数量:{}", jsonDataList.size());
-//        Integer inputStep = queryJsonData.getStep();
-//        // 当inputStep为空、null、0、1 时返回全部数据
-//        if (inputStep == null || inputStep==0 || inputStep==1) {
-//            return jsonDataList;
-//        }
-//
-//        /**
-//         * 当inputStep大于1, 数量为200, 隔多少步取一个点
-//         * 2:100
-//         * 3:67
-//         * 4:50
-//         *
-//         */
-//        int step = 0;
-//        if (inputStep > 1) {
-//            for (JsonData jsonData : jsonDataList) {
-//                if (step % inputStep == 0 || step == 0) {
-//                    newJsonData.add(jsonData);
-//                }
-//                step++;
-//            }
-//        }
-//        log.info("输出对象数量:{}", newJsonData.size());
-//        return newJsonData;
-//    }
-
-
-//    private List<JsonData> calcule(QueryJsonDataOne queryJsonData, List<JsonData> jsonDataList) {
-//        log.info("run calcule");
-//        List<JsonData> newJsonData = new ArrayList<>();
-//        for (JsonData jsonData : jsonDataList) {
-////            log.info("jsonData: {}", jsonData);
-//            Double[] coordinates1 = new Double[2];
-//            coordinates1[0] = queryJsonData.getLon();
-//            coordinates1[1] = queryJsonData.getLat();
-//
-//            Double[] coordinates2 = new Double[2];
-//            coordinates2[0] = jsonData.getLocation()[0];
-//            coordinates2[1] = jsonData.getLocation()[1];
-//
-//            Double distance = DistanceUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
-////            log.info("计算出的距离:{}", distance);
-//
-//            if (queryJsonData.getRadius() > distance) {
-//                newJsonData.add(jsonData);
-//            }
-//        }
-//        return newJsonData;
-//    }
-
-
-    /**
-     * 按最近距离排序
-     * @param queryJsonData
-     * @param jsonDataList
-     * @return
-     */
-//    private List<JsonData> calcule_5(QueryJsonDataOne queryJsonData, List<JsonData> jsonDataList) {
-//        log.info("run calcule");
-////        List<JsonData> newJsonData = new ArrayList<>();
-//
-//
-//        // 计算距离后的结果集
-//        Map<Double, JsonData> calResultMap = new HashMap<>();
-//        for (JsonData jsonData : jsonDataList) {
-////            log.info("jsonData: {}", jsonData);
-//            Double[] coordinates1 = new Double[2];
-//            coordinates1[0] = queryJsonData.getLon();
-//            coordinates1[1] = queryJsonData.getLat();
-//
-//            Double[] coordinates2 = new Double[2];
-//            coordinates2[0] = jsonData.getLocation()[0];
-//            coordinates2[1] = jsonData.getLocation()[1];
-//
-////            Double distance = DistanceUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
-//            Double distance = DistanceUtil.distance3(coordinates1, coordinates2);
-////            log.info("计算出的距离:{}", distance);
-//
-//            if (queryJsonData.getRadius() > distance) {
-//                // 缓存对象
-//                calResultMap.put(distance, jsonData);
-//            }
-//        }
-//
-//        // 从小到大排序, 冒泡排序
-//        List<Double> list = new ArrayList<>();
-//        calResultMap.forEach((k,v) -> {
-//            list.add(k);
-//        });
-//        log.info("排序前: {}", list);
-//        // 升序排列
-//        List<Double> collect = list.stream().sorted().collect(Collectors.toList());
-//        log.info("排序后: {}", collect);
-//
-//
-//        // 通过key获取对象
-//        List<JsonData> result = new ArrayList<>();
-//        collect.forEach(p -> {
-//            result.add(calResultMap.get(p));
-//        });
-//
-//        return result;
-//    }
-
-
-    /**
-     * 计算最小距离
-     * @param queryJsonData
-     * @param jsonDataList
-     * @return 获取最小值对象
-     */
-//    private List<JsonData> calculeMin(QueryJsonDataOne queryJsonData, List<JsonData> jsonDataList) {
-//        log.info("run calculeMin");
-//        List<JsonData> newJsonData = new ArrayList<>();
-//
-//        // 计算距离后的结果集
-//        HashMap<Double, JsonData> calResultMap = new HashMap<>();
-//
-//        int i = 1;
-//        Double min = null;
-//        for (JsonData jsonData : jsonDataList) {
-//            Double[] coordinates1 = new Double[2];
-//            coordinates1[0] = queryJsonData.getLon();
-//            coordinates1[1] = queryJsonData.getLat();
-//
-//            Double[] coordinates2 = new Double[2];
-//            coordinates2[0] = jsonData.getLocation()[0];
-//            coordinates2[1] = jsonData.getLocation()[1];
-//
-////            Double distance = DistanceUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
-//            Double distance = DistanceUtil.distance3(coordinates1, coordinates2);
-////            log.info("计算出的距离:{}", distance);
-//            // 默认取第一值
-//            if (i==1) {
-//                min = distance;
-//                calResultMap.put(min, jsonData);
-//            }
-//
-//            if (distance < min) {
-//                min = distance;
-//                calResultMap.put(min, jsonData);
-//            }
-//            i++;
-//
-//        }
-//
-//        log.info("循环次数:{}, 最小值:{}", i, min);
-//        // 获取最小值
-//        JsonData minJson = calResultMap.get(min);
-//        newJsonData.add(minJson);
-//        return newJsonData;
-//    }
-
-
-
-    /************************************ 2021-7-28 新接口********************************************/
-    private FilterEntity findBySceneCode_5(String sceneCode){
-        FilterEntity entity = filterMapper.findBySceneCode(sceneCode);
-        return entity;
+    private FilterEntity findBySceneCode(String sceneCode){
+        Optional<FilterEntity> optional = filterMapper.findById(sceneCode);
+        return optional.get();
     }
 
-    private List<FilterHotDto> getDataBySceneCode_5(String sceneCode){
-        FilterEntity entity = filterMapper.findBySceneCode(sceneCode);
+    private List<FilterHotDto> getDataBySceneCode(String sceneCode){
+        FilterEntity entity = findBySceneCode(sceneCode);
         List<FilterHotDto> data = entity.getData();
         return data;
     }
 
 
-//    private List<FilterHotDto> queryDataOne_5(QueryJsonDataOne queryJsonData, List<FilterHotDto> dbList) {
-//        log.info("run queryDataOne");
-//
-//        List<FilterHotDto> jsonDataList = new ArrayList<>();
-//        Long siteModelEntityId = queryJsonData.getSiteModelEntity();
-//
-//        //su  更改 7-21 18:18
-//        if (siteModelEntityId != null) {
-//            jsonDataList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
-//        }else{
-//            jsonDataList = dbList;
-//        }
-//
-//        if (queryJsonData.getZ() != null) {
-//            jsonDataList = dbList.stream().filter(jsonData ->
-//                    jsonData.getLocation()[2] >= queryJsonData.getZ() && jsonData.getFloor_location()[2] <= queryJsonData.getZ())
-//                    .collect(Collectors.toList());
-//        }
-//
-//        List<FilterHotDto> newJsonData = new ArrayList<>();
-//        // radius:半径
-//        if (queryJsonData.getRadius() != null) {
-////            newJsonData = calcule(queryJsonData, jsonDataList);
-//            newJsonData = calcule_5_1(queryJsonData, jsonDataList);
-//        } else {
-//            // 没有半径,算最近的距离
-//            newJsonData = calculeMin_5(queryJsonData, jsonDataList);
-//        }
-//
-//        if (queryJsonData.getLimit() != null) {
-//            newJsonData = newJsonData.stream().limit(queryJsonData.getLimit()).collect(Collectors.toList());
-//        }
-//        return newJsonData;
-//    }
-
-    /**
-     * 按最近距离排序
-     * @param queryJsonData
-     * @param jsonDataList
-     * @return
-     */
-//    private List<FilterHotDto> calcule_5_1(QueryJsonDataOne queryJsonData, List<FilterHotDto> jsonDataList) {
-//        log.info("run calcule");
-////        List<JsonData> newJsonData = new ArrayList<>();
-//
-//
-//        // 计算距离后的结果集
-//        Map<Double, FilterHotDto> calResultMap = new HashMap<>();
-//        for (FilterHotDto jsonData : jsonDataList) {
-////            log.info("jsonData: {}", jsonData);
-//            Double[] coordinates1 = new Double[2];
-//            coordinates1[0] = queryJsonData.getLon();
-//            coordinates1[1] = queryJsonData.getLat();
-//
-//            Double[] coordinates2 = new Double[2];
-//            coordinates2[0] = jsonData.getLocation()[0];
-//            coordinates2[1] = jsonData.getLocation()[1];
-//
-//            Double distance = DistanceUtil.distance3(coordinates1, coordinates2);
-////            log.info("计算出的距离:{}", distance);
-//
-//            if (queryJsonData.getRadius() > distance) {
-//                // 缓存对象
-//                calResultMap.put(distance, jsonData);
-//            }
-//        }
-//
-//        // 从小到大排序, 冒泡排序
-//        List<Double> list = new ArrayList<>();
-//        calResultMap.forEach((k,v) -> {
-//            list.add(k);
-//        });
-//        log.info("排序前: {}", list);
-//        // 升序排列
-//        List<Double> collect = list.stream().sorted().collect(Collectors.toList());
-//        log.info("排序后: {}", collect);
-//
-//
-//        // 通过key获取对象
-//        List<FilterHotDto> result = new ArrayList<>();
-//        collect.forEach(p -> {
-//            result.add(calResultMap.get(p));
-//        });
-//
-//        return result;
-//    }
 
 
-    /**
-     * 处理step step的值会有影响
-     * 当step=null, 0, 1不做处理
-     * @param queryJsonData
-     * @param jsonDataList
-     * @return
-     */
-//    private List<FilterHotDto> fillNewJsonData_5(QueryJsonDataTwo queryJsonData, List<FilterHotDto> jsonDataList) {
-//        List<FilterHotDto> newJsonData = new ArrayList<>();
-//        log.info("输入对象数量:{}", jsonDataList.size());
-//        Integer inputStep = queryJsonData.getStep();
-//        // 当inputStep为空、null、0、1 时返回全部数据
-//        if (inputStep == null || inputStep==0 || inputStep==1) {
-//            return jsonDataList;
-//        }
-//
-//        /**
-//         * 当inputStep大于1, 数量为200, 隔多少步取一个点
-//         * 2:100
-//         * 3:67
-//         * 4:50
-//         *
-//         */
-//        int step = 0;
-//        if (inputStep > 1) {
-//            for (FilterHotDto jsonData : jsonDataList) {
-//                if (step % inputStep == 0 || step == 0) {
-//                    newJsonData.add(jsonData);
-//                }
-//                step++;
-//            }
-//        }
-//        log.info("输出对象数量:{}", newJsonData.size());
-//        return newJsonData;
-//    }
-
-//    private List<FilterHotDto> queryDataTwo_5(QueryJsonDataTwo queryJsonData , List<FilterHotDto> dbList) {
-//        log.info("run queryDataTwo");
-//
-//        List<FilterHotDto> jsonDataList = new ArrayList<>();
-//        Long siteModelEntityId = queryJsonData.getSiteModelEntity();
-//        if (siteModelEntityId != null) {
-//            dbList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
-//        }
-//        jsonDataList = dbList.stream().filter(jsonData ->
-//                jsonData.getLocation()[0] >= queryJsonData.getLon_min() && jsonData.getLocation()[0] <= queryJsonData.getLon_max()
-//                        && jsonData.getLocation()[1] >= queryJsonData.getLat_min() && jsonData.getLocation()[1] <= queryJsonData.getLat_max())
-//                .collect(Collectors.toList());
-//
-////        List<FilterHotDto> newJsonData = fillNewJsonData(queryJsonData, jsonDataList);
-//        List<FilterHotDto> newJsonData = fillNewJsonData_5(queryJsonData, jsonDataList);
-//
-//        return newJsonData;
-//    }
-
-
-//    private List<FilterHotDto> filterJsonDataDetail_5_1(List<FilterHotDto> dbList, JsonDataDetailDto jsonDataDetailDto) {
-////        List<JsonData> dbList = findBySceneCode(code);
-//
-//        Integer datasetId = jsonDataDetailDto.getDataset();
-//        Integer siteModelEntityId = jsonDataDetailDto.getSite_model_entity();
-//        Integer limit = jsonDataDetailDto.getLimit();
-//        limit = limit==null ? 10 : limit;
-//        Boolean hidden = jsonDataDetailDto.getHidden();
-//        // 对应db 根据那个字段排序
-//        String sortOrder = jsonDataDetailDto.getSort_order();
-//        sortOrder = sortOrder==null ? null :sortOrder.toLowerCase();
-//        // 升序还是降序
-//        String sortBy = jsonDataDetailDto.getSort_by();
-//        sortBy = sortBy==null ? null :sortBy.toLowerCase();
-//
-//
-//
-//        // todo 这里的排序还需要处理一下, 如有异常看了hidden值
-//
-//        Stream<FilterHotDto> dataStream = dbList.stream();
-//        if (datasetId != null) {
-//            dataStream = dataStream.filter(p -> datasetId.equals(p.getDataset_id()));
-//        }
-//
-//        if (siteModelEntityId != null) {
-//            dataStream = dataStream.filter(p -> siteModelEntityId.equals(p.getSite_model_entity_id()));
-//        }
-//
-//
-//        // 处理排序reversed()降序, 默认是升序
-//        if ("desc".equals(sortBy) && "file_id".equals(sortOrder)) {
-//            dataStream = dataStream.sorted(Comparator.comparing(FilterHotDto::getFile_id).reversed());
-//        } else if ("asc".equals(sortBy) && "file_id".equals(sortOrder)){
-//            dataStream =  dataStream.sorted(Comparator.comparing(FilterHotDto::getFile_id));
-//        }
-//
-//        List<FilterHotDto> collect = dataStream.collect(Collectors.toList());
-//
-//        log.info("返回数据数量: {}", collect.size());
-//        return collect;
-//    }
-
-
-    /**
-     * 计算最小距离
-     * @return 获取最小值对象
-     */
-//    private List<FilterHotDto> calculeMin_5(QueryJsonDataOne queryJsonData, List<FilterHotDto> jsonDataList) {
-//        log.info("run calculeMin");
-//        List<FilterHotDto> newJsonData = new ArrayList<>();
-//
-//        // 计算距离后的结果集
-//        HashMap<Double, FilterHotDto> calResultMap = new HashMap<>();
-//
-//        int i = 1;
-//        Double min = null;
-//        for (FilterHotDto jsonData : jsonDataList) {
-//            Double[] coordinates1 = new Double[2];
-//            coordinates1[0] = queryJsonData.getLon();
-//            coordinates1[1] = queryJsonData.getLat();
-//
-//            Double[] coordinates2 = new Double[2];
-//            coordinates2[0] = jsonData.getLocation()[0];
-//            coordinates2[1] = jsonData.getLocation()[1];
-//
-////            Double distance = DistanceUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
-//            Double distance = DistanceUtil.distance3(coordinates1, coordinates2);
-////            log.info("计算出的距离:{}", distance);
-//            // 默认取第一值
-//            if (i==1) {
-//                min = distance;
-//                calResultMap.put(min, jsonData);
-//            }
-//
-//            if (distance < min) {
-//                min = distance;
-//                calResultMap.put(min, jsonData);
-//            }
-//            i++;
-//
-//        }
-//
-//        log.info("循环次数:{}, 最小值:{}", i, min);
-//        // 获取最小值
-//        FilterHotDto minJson = calResultMap.get(min);
-//        newJsonData.add(minJson);
-//        return newJsonData;
-//    }
 
 
     @Override
-    public Result findById_5(String sceneCode, Integer id) {
-        FilterEntity entity = findBySceneCode_5(sceneCode);
+    public Result findById(String sceneCode, Integer id) {
+        FilterEntity entity = findBySceneCode(sceneCode);
         List<FilterHotDto> data = entity.getData();
 
         data = data.stream().filter(p -> id.equals(p.getId()))
@@ -760,11 +70,15 @@ public class FilterServiceImpl implements FilterService {
     }
 
 
-
-
+    /**
+     * 条件查询
+     * @param code
+     * @param param
+     * @return
+     */
     @Override
-    public Result query_6(String code, FilterQueryDto param) {
-        List<FilterHotDto> data = getDataBySceneCode_5(code);
+    public Result query(String code, FilterQueryDto param) {
+        List<FilterHotDto> data = getDataBySceneCode(code);
         log.info("输入数量:{}", data.size());
 
         // 过滤条件
@@ -778,15 +92,6 @@ public class FilterServiceImpl implements FilterService {
             data = data.stream().filter(p -> site_model_entity.equals(p.getSite_model_entity_id())).collect(Collectors.toList());
         }
 
-        // 暂时不处理- 2021-08-02
-//        Double z = param.getZ();
-//        if (z != null) {
-//            dataStream = dataStream.filter(p ->
-//                    p.getLocation()[2] >= z && p.getFloor_location()[2] <= z);
-//            data = dataStream.collect(Collectors.toList());
-//            log.info("z-输出数量:{}", data.size());
-//        }
-
 
         // 处理 lat, lon
         Double lat = param.getLat();
@@ -795,10 +100,10 @@ public class FilterServiceImpl implements FilterService {
             // 处理半径, radius:半径
             Double radius = param.getRadius();
             if (radius != null) {
-                data = calcule_5_2(param, data);
+                data = calcule(param, data);
             } else {
                 // 没有半径,算最近的距离, 返回值只有一天数据
-                data = calculeMin_5_2(param, data);
+                data = calculeMin(param, data);
             }
             log.info("lat、lon-输出数量:{}", data.size());
         }
@@ -852,6 +157,31 @@ public class FilterServiceImpl implements FilterService {
         return Result.success(data);
     }
 
+    @Override
+    public Result update(String sceneCode, List<FilterHotDto> param) {
+        FilterEntity entity = findBySceneCode(sceneCode);
+        List<FilterHotDto> data = entity.getData();
+        log.info("db数据量: {}", data.size());
+
+        // 将热点id提取出来做过滤条件
+        List<Integer> argIds = param.stream().map(FilterHotDto::getId).collect(Collectors.toList());
+        log.info("参数id数量: {}", argIds.size());
+
+        data = data.stream().filter(p -> !argIds.contains(p.getId())).collect(Collectors.toList());
+        log.info("不需要更新的数据量: {}", data.size());
+
+        // 添加更新参数
+        data.addAll(param);
+        log.info("需要更新db数据量: {}", data.size());
+
+        // 更新db
+        entity.setUpdateTime(LocalDateTime.now());
+        entity.setData(data);
+        filterMapper.save(entity);
+
+        return Result.success();
+    }
+
 
     /**
      *   处理step step的值会有影响
@@ -889,7 +219,7 @@ public class FilterServiceImpl implements FilterService {
     }
 
 
-    private List<FilterHotDto> calcule_5_2(FilterQueryDto queryJsonData, List<FilterHotDto> jsonDataList) {
+    private List<FilterHotDto> calcule(FilterQueryDto queryJsonData, List<FilterHotDto> jsonDataList) {
         log.info("run calcule");
 
         Double[] coordinates1 = new Double[3];
@@ -949,7 +279,7 @@ public class FilterServiceImpl implements FilterService {
      * @param queryJsonData
      * @return 获取最小值对象
      */
-    private  List<FilterHotDto> calculeMin_5_2(FilterQueryDto queryJsonData, List<FilterHotDto> jsonDataList) {
+    private  List<FilterHotDto> calculeMin(FilterQueryDto queryJsonData, List<FilterHotDto> jsonDataList) {
         log.info("run calculeMin");
         List<FilterHotDto> newJsonData = new ArrayList<>();
 

+ 4 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/impl/IBaseServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.indoor.core.service.impl;
 
+import com.fdkankan.indoor.base.constant.ConfigConstant;
 import com.fdkankan.indoor.core.entity.dto.SecurityDto;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +16,9 @@ public class IBaseServiceImpl {
     @Autowired
     HttpServletRequest request;
 
+    @Autowired
+    ConfigConstant configConstant;
+
 
     /**
      * 已登录,有权限  true

+ 24 - 11
laser/src/main/java/com/fdkankan/indoor/core/service/impl/InitServiceImpl.java

@@ -2,12 +2,13 @@ package com.fdkankan.indoor.core.service.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
+import com.fdkankan.indoor.base.constant.CmdConstant;
 import com.fdkankan.indoor.base.constant.ConfigConstant;
 import com.fdkankan.indoor.base.constant.TypeConstant;
 import com.fdkankan.indoor.base.convert.*;
 import com.fdkankan.indoor.base.exception.BaseRuntimeException;
 import com.fdkankan.indoor.base.util.CmdUtils;
-import com.fdkankan.indoor.base.util.FileUtils;
+import com.fdkankan.indoor.base.util.MyFileUtils;
 import com.fdkankan.indoor.base.util.Result;
 import com.fdkankan.indoor.base.util.SnowFlakeUUidUtils;
 import com.fdkankan.indoor.core.entity.dto.*;
@@ -227,9 +228,10 @@ public class InitServiceImpl implements InitService {
         path = path +"/vision.txt";
         JSONArray jsonArray = convertToPanoInfoFor4dkk.createFilter(sceneCode, path, dto);
         FilterEntity entity = new FilterEntity();
-        entity.setId(SnowFlakeUUidUtils.getUuid("FR"));
+//        entity.setId(SnowFlakeUUidUtils.getUuid("FR"));
+        entity.setId(sceneCode);
         entity.setCreateTime(LocalDateTime.now());
-        entity.setSceneCode(sceneCode);
+//        entity.setSceneCode(sceneCode);
         //将array数组转换成字符串
         List<FilterHotDto> list = JSONArray.toList(jsonArray, FilterHotDto.class);
         entity.setData(list);
@@ -288,7 +290,7 @@ public class InitServiceImpl implements InitService {
 
     private void createSiteModel(String sceneCode,  Double[] max,  Double[] min,  Double[] centre, Double maxZ, Double minZ){
         //读取初始文件
-        String content = FileUtils.getResourceContent("data/site_model.json");
+        String content = MyFileUtils.getResourceContent("data/site_model.json");
         List<SiteDto> siteModels = JSON.parseArray(content, SiteDto.class);
         // z_max、z_min 替换site_model的Floor、root类型
         // max、min四个顶点替换BUILDING、FLOOR 的coordinates,
@@ -348,7 +350,7 @@ public class InitServiceImpl implements InitService {
 
     @Test
     public void  test(){
-        String content = FileUtils.getResourceContent("data/site_model.json");
+        String content = MyFileUtils.getResourceContent("data/site_model.json");
         List<SiteDto> siteModels = JSON.parseArray(content, SiteDto.class);
 
         System.out.println();
@@ -402,7 +404,7 @@ public class InitServiceImpl implements InitService {
         entity.setSceneCode(sceneCode);
         entity.setUpdateTime(LocalDateTime.now());
         // 读取初始文件
-        String resourceContent = FileUtils.getResourceContent("data/poi_type.json");
+        String resourceContent = MyFileUtils.getResourceContent("data/poi_type.json");
         List<PoiTypeDto> dtoList = com.alibaba.fastjson.JSONArray.parseArray(resourceContent, PoiTypeDto.class);
         entity.setData(dtoList);
         poiTypeService.save(entity);
@@ -415,7 +417,7 @@ public class InitServiceImpl implements InitService {
         entity.setSceneCode(sceneCode);
         entity.setUpdateTime(LocalDateTime.now());
         // 读取初始文件
-        String resourceContent = FileUtils.getResourceContent("data/poi_type.json");
+        String resourceContent = MyFileUtils.getResourceContent("data/poi_type.json");
         List<PoiTypeGroupDto> dtoList = com.alibaba.fastjson.JSONArray.parseArray(resourceContent, PoiTypeGroupDto.class);
         entity.setData(dtoList);
         poiTypeGroupService.save(entity);
@@ -445,7 +447,7 @@ public class InitServiceImpl implements InitService {
         Double[] poi = sp.getPoi();
         log.info("firstView: {}" , sp.getPoi());
 
-        String content = FileUtils.getResourceContent("data/config.json");
+        String content = MyFileUtils.getResourceContent("data/config.json");
 
         List<ConfigDto> dtoList = com.alibaba.fastjson.JSONArray.parseArray(content, ConfigDto.class);
         List<ConfigDto> resData =  new ArrayList<>();
@@ -504,14 +506,25 @@ public class InitServiceImpl implements InitService {
         String panoPath = path + "/pano";
         String panoDepthPath = path + "/pano_depth";
         String webCloudPath = path + "/webcloud";
-        CmdUtils.ossUploadDir(sceneCode, panoPath, "pano");
+
+
+
+        executeCmd(sceneCode, panoPath, "pano");
         log.info("pano目录上传oss完成");
-        CmdUtils.ossUploadDir(sceneCode, panoDepthPath, "pano_depth");
+        executeCmd(sceneCode, panoDepthPath, "pano_depth");
         log.info("pano_depth目录上传oss完成");
-        CmdUtils.ossUploadDir(sceneCode, webCloudPath,"webcloud");
+        executeCmd(sceneCode, webCloudPath,"webcloud");
         log.info("webcloud目录上传oss完成");
     }
 
+    private void executeCmd(String sceneCode, String uploadDir, String targetDir){
+        String cmd = CmdConstant.OSSUTIL_UPLOAD_DIR_CHUNK;
+        cmd = cmd.replaceAll("@sceneCode", sceneCode);
+        cmd = cmd.replaceAll("@uploadDir", uploadDir);
+        cmd = cmd.replaceAll("@target", targetDir);
+        CmdUtils.ossUploadDir(cmd);
+    }
+
 
     @Test
     public void test1(){

+ 140 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/impl/MapServiceImpl.java

@@ -0,0 +1,140 @@
+package com.fdkankan.indoor.core.service.impl;
+
+import cn.hutool.core.io.FileUtil;
+import com.fdkankan.indoor.base.constant.CmdConstant;
+import com.fdkankan.indoor.base.convert.ImageClipUtil;
+import com.fdkankan.indoor.base.exception.BaseRuntimeException;
+import com.fdkankan.indoor.base.util.CmdUtils;
+import com.fdkankan.indoor.base.util.MyFileUtils;
+import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.MapEntity;
+import com.fdkankan.indoor.core.entity.dto.MapDto;
+import com.fdkankan.indoor.core.entity.po.MapPo;
+import com.fdkankan.indoor.core.mapper.MapMapper;
+import com.fdkankan.indoor.core.service.MapService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.Optional;
+
+/**
+ * Created by owen on 2021/7/28 0028 20:05
+ */
+@Service
+@Slf4j
+public class MapServiceImpl extends IBaseServiceImpl implements MapService {
+
+    @Autowired
+    MapMapper entityMapper;
+
+
+    private MapEntity findById(String sceneCode){
+        Optional<MapEntity> optional = entityMapper.findById(sceneCode);
+        // 处理是否登录
+        MapEntity entity = optional.get();
+            return entity;
+    }
+
+
+    @Override
+    public Result upload(String sceneCode, MapDto param) {
+        MultipartFile file = param.getFile();
+        if (file == null) {
+            throw new BaseRuntimeException(5003, "文件不能为空");
+        }
+
+        // step1: 保存小地图
+        String suffix = MyFileUtils.getsuffix(file);
+
+        if (!".png".equals(suffix)){
+            throw new BaseRuntimeException(5004, "非法文件");
+        }
+
+        String basePath = configConstant.serverBasePath + "/" + sceneCode +"/map/";
+        String savePath = basePath +  sceneCode+ "_map" + suffix;
+        log.info("小地图保存路径: {}", savePath);
+        try {
+            FileUtil.writeFromStream(file.getInputStream(), savePath);
+            log.info("小地图上传成功");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        // step2: 切小地图
+        String tilePath = basePath + "tile";
+        clipImage(savePath, tilePath);
+
+        // step3: 初始化小地图数据
+        initMap(sceneCode, tilePath, param);
+
+        // step4: 切图上传oss
+        ossUploadDir(sceneCode, tilePath);
+
+
+        return Result.success();
+    }
+
+    @Override
+    public Result getTiledMap(String sceneCode) {
+        MapEntity entity = findById(sceneCode);
+        return Result.success(entity.getData());
+    }
+
+    /**
+     * 初始化小地图数据
+     * @param sceneCode
+     * @param basePath
+     */
+    private void initMap(String sceneCode, String basePath, MapDto param){
+
+        MapPo po = new MapPo();
+        po.setId(1);
+        po.setBundle_id(3);
+        po.setFile_path(basePath);
+        po.setFile_name("$DEPTH/$X/$Y.png");
+        po.setFloor_id(11);
+        po.setMap_size_m(61.44);
+        po.setMax_depth(13);
+        po.setQuadtree("fccf7fffcff3bf7f");
+        // location、orientation 需要更新接口时把这两个值更新
+        po.setLocation(param.getLocation());
+        po.setOrientation(param.getOrientation());
+        po.setTile_size_px(256);
+        po.setType("TILED_PYRAMID");
+
+
+        MapEntity entity = new MapEntity();
+        entity.setId(sceneCode);
+        entity.setCreateTime(LocalDateTime.now());
+        entity.setData(Arrays.asList(po));
+        entityMapper.save(entity);
+        log.info("t_map初始化完成");
+
+    }
+
+    private void clipImage(String inPath, String outTilePath){
+
+        log.info("tile: {}", outTilePath);
+        ImageClipUtil.getTiles(inPath, outTilePath);//切片
+        log.info("切图完成");
+
+    }
+
+    private void ossUploadDir(String sceneCode, String uploadDir){
+        String ossTarget = "data/" +sceneCode + "/data/tile";
+        String cmd = CmdConstant.OSSUTIL_UPLOAD_DIR;
+        cmd = cmd.replaceAll("@uploadDir", uploadDir);
+        cmd = cmd.replaceAll("@target", ossTarget);
+        CmdUtils.ossUploadDir(cmd);
+        log.info("切图上传oss完成");
+    }
+
+
+
+}

+ 6 - 1
laser/src/main/resources/application.properties

@@ -10,4 +10,9 @@ logging.level.com.fdkankan=info
 
 # \uFFFD\uFFFD\u013F\uFFFD\uFFFD\uFFFD\uFFFD
 project.en=age_camera_germany
-project.sc=\u5FB7\u56FD\u6FC0\u5149\u76F8\u673A
+project.sc=\u5FB7\u56FD\u6FC0\u5149\u76F8\u673A
+
+#\u4E0A\u4F20\u6587\u4EF6\u5927\u5C0F
+spring.servlet.multipart.enabled=true
+spring.servlet.multipart.max-file-size=2048MB
+spring.servlet.multipart.max-request-size=2048MB