Quellcode durchsuchen

完成tiled_map 合并
完成site_model 去掉room
还没部署sit

wuweihao vor 4 Jahren
Ursprung
Commit
89d8a6c78a

+ 20 - 2
README.md

@@ -132,7 +132,7 @@ t-40 (t-vZkqRV8):
 # 登录体系
    共用四维看看登录体系
  
-# 流程
+# 需求变更
   
   2021-8-24 (废弃)
   前端上传点云数据 -> 调用算法 -> 按顺序生成chunk1、chunk2目录 -> 将chunk1目录上传oss -> 修改dateSet、siteModel表, 跟cloud.js相关的数据都修改一遍
@@ -143,7 +143,25 @@ t-40 (t-vZkqRV8):
     -> t_dataSet : 数据重新需要改id, site_model_entity_ids, location(gps转原点再转gps, 用a的基础数据)
     -> t_filter 数据重新初始化一次,改相应的id值
     -> t_site_model, 只加房间 改对应的id值
-  
+    
+  2021-09-06
+    1. siteModel初始化时不需要房间(room)
+    2. 合并场景是,siteModel只添加floor  
+    
+    1. 初始化
+    1.1. 初始化siteModel:没有room类型
+    1.2. 初始化filter:需要把filter.site_model_entity_id=11 改成对应的floor类型的id
+    1.3. 初始化dataSet.site_model_entity_ids 这里需要修改
+    1.4. 修改baseData.site_model.json
+    
+    2. 合并时
+    2.1 合并siteModel, 只合并floor
+    2.2 合并filter: filter.site_model_entity_id
+    2.3 合并dataSet.site_model_entity_id
+    2.4 合并tiled_map: 直接复制被合并场景数据, 修改floor_id: 为site_model对应的类型为floor的id
+    
+    3. 部署时,注意修改模板siteModel模板,把房间数据删除
+   
   
   
 # db

+ 3 - 1
laser/src/main/java/com/fdkankan/indoor/base/convert/ConvertToVision.java

@@ -80,7 +80,9 @@ public class ConvertToVision {
 			laserPano.put("file_path", "data/" + sceneCode);
 			laserPano.put("hidden", false);
 			laserPano.put("id", id);
-			laserPano.put("site_model_entity_id", 12);
+//			laserPano.put("site_model_entity_id", 12);
+			// 2021-09-06改用floor类型的id
+			laserPano.put("site_model_entity_id", 11);
 
 			//JSONObject pose = item.getJSONObject("pose");
 			JSONObject position2 = item.getJSONObject("puck");

+ 7 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/TiledMapService.java

@@ -1,6 +1,7 @@
 package com.fdkankan.indoor.core.service;
 
 import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.TiledMapEntity;
 import com.fdkankan.indoor.core.entity.dto.MapDto;
 import com.fdkankan.indoor.core.entity.dto.TiledEditDto;
 import com.fdkankan.indoor.core.entity.dto.TiledMapDto;
@@ -22,4 +23,10 @@ public interface TiledMapService {
     Result findAll(String sceneCode);
 
     Result updateData(String sceneCode, TiledEditDto param);
+
+     List<TiledMapDto> getDataBySceneCode(String sceneCode);
+
+     TiledMapEntity findById(String sceneCode);
+
+    void save(TiledMapEntity entity);
 }

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

@@ -667,16 +667,16 @@ public class InitServiceImpl implements InitService {
                     c.setZ_min(minZ);
 
                     // 第三层: ROOM层
-                    List<SiteDto> roomChildren = c.getChildren();
-                    if (roomChildren.size() > 0) {
-                        roomChildren.forEach(r -> {
-                            r.setCenter(centre);
-                            r.setZ_max(maxZ);
-                            r.setZ_min(minZ);
-                            SitePolygon rPolygon = r.getPolygon();
-                            rPolygon.setCoordinates(doubles);
-                        });
-                    }
+//                    List<SiteDto> roomChildren = c.getChildren();
+//                    if (roomChildren.size() > 0) {
+//                        roomChildren.forEach(r -> {
+//                            r.setCenter(centre);
+//                            r.setZ_max(maxZ);
+//                            r.setZ_min(minZ);
+//                            SitePolygon rPolygon = r.getPolygon();
+//                            rPolygon.setCoordinates(doubles);
+//                        });
+//                    }
                 });
             }
 
@@ -824,7 +824,9 @@ public class InitServiceImpl implements InitService {
         // 使用场景码
         mergeDto.setName(sceneCode);
         mergeDto.setTitle(sceneCode);
-        Integer[] site_model_entity_ids = {10,11,12};
+//        Integer[] site_model_entity_ids = {10,11,12};
+        // 2021-09-06
+        Integer[] site_model_entity_ids = {10,11};
         mergeDto.setSite_model_entity_ids(site_model_entity_ids);
         mergeDto.setSceneNum(sceneCode);
 

+ 226 - 36
laser/src/main/java/com/fdkankan/indoor/core/service/impl/MergeSceneServiceImpl.java

@@ -2,6 +2,7 @@ package com.fdkankan.indoor.core.service.impl;
 
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
+import com.fdkankan.indoor.base.constant.CmdConstant;
 import com.fdkankan.indoor.base.constant.ConfigConstant;
 import com.fdkankan.indoor.base.constant.MsgCode;
 import com.fdkankan.indoor.base.constant.TypeConstant;
@@ -10,12 +11,11 @@ import com.fdkankan.indoor.base.convert.GisCoordinateUtil;
 import com.fdkankan.indoor.base.convert.ModifyCloud;
 import com.fdkankan.indoor.base.convert.ModifyDataSets;
 import com.fdkankan.indoor.base.exception.BaseRuntimeException;
+import com.fdkankan.indoor.base.util.CmdUtils;
 import com.fdkankan.indoor.base.util.Result;
 import com.fdkankan.indoor.base.util.SnowFlakeUUidUtils;
 import com.fdkankan.indoor.core.entity.*;
-import com.fdkankan.indoor.core.entity.dto.FilterHotDto;
-import com.fdkankan.indoor.core.entity.dto.SiteDto;
-import com.fdkankan.indoor.core.entity.dto.SitePolygon;
+import com.fdkankan.indoor.core.entity.dto.*;
 import com.fdkankan.indoor.core.entity.merge.MergeDateSetDto;
 import com.fdkankan.indoor.core.entity.po.DataSetPo;
 import com.fdkankan.indoor.core.service.*;
@@ -68,6 +68,9 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
     @Autowired
     MergeInfoService mergeInfoService;
 
+    @Autowired
+    TiledMapService tiledMapService;
+
     /**
      * 目前只支持没有合并过的场景
      * @param sceneCode
@@ -97,19 +100,27 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
         log.info("合并场景路径:{}", mergePath);
 
         // siteMode要优先处理;
-        Map<Object, Object> resMap = mergeSiteModel(sceneCode, mergeCode, mergePath, controlPoint);
+//        Map<Object, Object> resMap = mergeSiteModel(sceneCode, mergeCode, mergePath, controlPoint);
+        Map<Object, Object> resMap = mergeSiteModelFloor(sceneCode, mergeCode, mergePath, controlPoint);
 
         Integer siteModelId = (Integer)resMap.get("maxId");
 
         // dateSet.siteModelId是数组, 如果siteModel的模板id改了,这里要重新设置
-        List<Integer> siteModeIds = Arrays.asList(10,11, siteModelId);
+//        List<Integer> siteModeIds = Arrays.asList(10,11, siteModelId);
+        List<Integer> siteModeIds = Arrays.asList(10, siteModelId);
         Integer dataSetId = mergeDateSet(sceneCode, mergeCode, siteModeIds, mergePath, controlPoint);
 
 
         mergeFilter(sceneCode, mergeCode, controlPoint, mergePath, siteModelId, dataSetId);
 
+        // 合并平面图
+        mergeTileMap(sceneCode, mergeCode, siteModelId, mergePath);
+
         // 上传数据到oss:目录pano、pano_depth、webcloud上传oss 外层目录以场景码命名
-        initService.ossUploadDirByLaserData(sceneCode, mergePath, mergeCode);
+        // todo 本地测试,注释上传oss
+        if (!"dev".equals(configConstant.active)) {
+            initService.ossUploadDirByLaserData(sceneCode, mergePath, mergeCode);
+        }
         log.info("文件上传oss完成, 合并数据完成");
 
         // 保存合并信息
@@ -329,7 +340,38 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
         return strings.get(i);
     }
 
-    private Map<Object, Object>  mergeSiteModel(String sceneCode, String mergeCode, String mergePath, ControlPointEntity controlPoint){
+//    private Map<Object, Object>  mergeSiteModel(String sceneCode, String mergeCode, String mergePath, ControlPointEntity controlPoint){
+//
+//        // 获取原场景数据
+//        SiteModelEntity entity = siteModelService.findById(sceneCode);
+//        if (entity == null) {
+//            throw new BaseRuntimeException("原SiteModel数据不存在: " + sceneCode);
+//        }
+//
+//        List<SiteDto> originalData = entity.getData();
+//
+//
+//        // 初始化房间数据
+//        SiteDto roomDto = initMergeSiteModel(mergeCode, mergePath,controlPoint);
+//        // 添加数据
+//        Map<Object, Object> resMap = setRoom(originalData, roomDto);
+//         originalData = (List<SiteDto>) resMap.get("data");
+//
+//
+//        // 添加数据
+//
+//        entity.setData(originalData);
+//        entity.setUpdateTime(LocalDateTime.now());
+//
+//        siteModelService.save(entity);
+//        log.info("siteModel合并完成");
+//
+//        return resMap;
+//
+//    }
+
+
+    private Map<Object, Object>  mergeSiteModelFloor(String sceneCode, String mergeCode, String mergePath, ControlPointEntity controlPoint){
 
         // 获取原场景数据
         SiteModelEntity entity = siteModelService.findById(sceneCode);
@@ -341,11 +383,13 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
 
 
         // 初始化房间数据
-        SiteDto roomDto = initMergeSiteModel(mergeCode, mergePath,controlPoint);
+//        SiteDto roomDto = initMergeSiteModel(mergeCode, mergePath,controlPoint);
+        // 初始化Floor数据
+        SiteDto floorDto = initMergeSiteModel(mergeCode, mergePath,controlPoint);
 
         // 添加数据
-        Map<Object, Object> resMap = setRoom(originalData, roomDto);
-         originalData = (List<SiteDto>) resMap.get("data");
+        Map<Object, Object> resMap = setFloor(originalData, floorDto);
+        originalData = (List<SiteDto>) resMap.get("data");
 
 
         // 添加数据
@@ -418,6 +462,66 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
 
 
     /**
+     *
+     * @param dto 原数据
+     * @param floorDto  需要加入的楼层
+     */
+    private Map<Object, Object> setFloor(List<SiteDto> dto, SiteDto floorDto) {
+        // 用来获取最大id
+        List<Integer> ids = new ArrayList<>();
+
+        dto.forEach(p -> {
+            ids.add(p.getId());
+            List<SiteDto> floorChild = p.getChildren();
+            floorChild.forEach(f -> {
+                ids.add(f.getId());
+
+                List<SiteDto> roomChild = f.getChildren();
+                roomChild.forEach(r -> {
+                    ids.add(r.getId());
+                });
+
+            });
+
+        });
+
+        // 获取最大id
+        Integer maxId = ids.stream().reduce(Integer::max).get();
+        log.info("最大id: {}" , maxId);
+
+        for (SiteDto buildingDto : dto) {
+            List<SiteDto> floorChild = buildingDto.getChildren();
+            maxId ++;
+            floorDto.setId(maxId);
+            floorChild.add(floorDto);
+//            for (SiteDto roomDtos : floorChild) {
+//                maxId ++;
+//                roomDto.setId(maxId);
+//                List<SiteDto> children = roomDtos.getChildren();
+//                // 加入房间
+//                children.add(roomDto);
+//            }
+
+        }
+
+
+        Map<Object, Object> result = new HashMap<>();
+        log.info("返回值最大id: {}" , maxId);
+        result.put("maxId", maxId);
+        result.put("data", dto);
+
+//         删除最后一个
+//        ids.remove(ids.size()-1);
+
+        // 提供给dataSet使用
+        ids.add(maxId);
+//        result.put("ids", ids);
+        return result;
+
+    }
+
+
+    /**
      * 初始化DataSet
      * location: 原点坐标(特殊点表)
      * bounding_box_max:(特殊点表)
@@ -499,32 +603,14 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
             // 修改cloud.js文件
             JSONObject info = ModifyCloud.fixCloud(path);
 
-             // 2021.08.26 合并不需要, 初始化时已经更新写入服务器了
-//            cn.hutool.core.io.FileUtil.writeUtf8String(info.toString(), path);
-//            log.info("新的cloud.js写入服务器完成:{}", path);
-
             /**
              * 将boundingBox坐标转换成gis坐标, site_model需要
              * boundingBox:虚拟点坐标,存特殊点, dataSet数据要使用
              */
             JSONObject boundingBox = ModifyCloud.getBoundingBox(info);
-//            Double maxX = boundingBox.getDouble("maxX");
-//            Double maxY = boundingBox.getDouble("maxY");
             Double maxZ = boundingBox.getDouble("maxZ");
-
-//            Double minX = boundingBox.getDouble("minX");
-//            Double minY = boundingBox.getDouble("minY");
             Double minZ = boundingBox.getDouble("minZ");
 
-//            Double centreX = boundingBox.getDouble("centreX");
-//            Double centreY = boundingBox.getDouble("centreY");
-//            Double centreZ = boundingBox.getDouble("centreZ");
-
-
-            // 虚拟点坐标(四维看看坐标)
-//            Double[] ageMax = {maxX,maxY,maxZ};
-//            Double[] ageMin = {minX,minY,minZ};
-//            Double[] ageCentre = {centreX,centreY,centreZ};
 
             JSONObject resJson = ModifyCloud.convertFromBoundingBox(boundingBox, dto);
 
@@ -532,15 +618,9 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
             Double[] gpsMin = getKey(resJson, "min");
             Double[] gpsCentre = getKeyZ(resJson, "centre");
 
-            // 将数据保存到db
-//            saveSpecialPoint(sceneCode, TypeConstant.POI_BOUNDINGBOX_MAX, ageMax, gpsMax);
-//            saveSpecialPoint(sceneCode, TypeConstant.POI_BOUNDINGBOX_MIN, ageMin, gpsMin);
-//            saveSpecialPoint(sceneCode, TypeConstant.POI_CENTRE, ageCentre, gpsCentre);
-//            log.info("max、min、中心点保存成功");
-
-
             // 创建sitModel
-            SiteDto siteModel = createSiteModel(sceneCode, gpsMax, gpsMin, gpsCentre, maxZ, minZ);
+//            SiteDto siteModel = createSiteModel(sceneCode, gpsMax, gpsMin, gpsCentre, maxZ, minZ);
+            SiteDto siteModel = createSiteModelFloor(sceneCode, gpsMax, gpsMin, gpsCentre, maxZ, minZ);
             return siteModel;
         } catch (IOException e) {
             e.printStackTrace();
@@ -616,8 +696,118 @@ public class MergeSceneServiceImpl extends IBaseServiceImpl implements MergeScen
     }
 
 
+    private SiteDto createSiteModelFloor(String sceneCode,  Double[] max,  Double[] min,  Double[] centre, Double maxZ, Double minZ){
+        // z_max、z_min 替换site_model的Floor、root类型
+        // max、min四个顶点替换BUILDING、FLOOR 的coordinates,
+        // 顺时针,(x_max,y_max),(x_max,y_min),(x_min,y_min),(x_min,y_max)
+        // 一般参数1:x, 参数2:Y
+        Double[] peak_1 = {max[0],max[1]};
+        Double[] peak_2 = {max[0],min[1]};
+        Double[] peak_3 = {min[0],min[1]};
+        Double[] peak_4 = {min[0],max[1]};
+        List<List<Double[]>> doubles = Arrays.asList(Arrays.asList(peak_1, peak_2, peak_3, peak_4));
 
+        // centre 替换BUILDING、FLOOR、ROOM 的center
+        log.info("中心点:{}, {}, {}", centre[0], centre[1], centre[2]);
+
+        // 获取模板对象
+//        SiteDto siteDto = initSiteModelRoom();
+        SiteDto siteDto = initSiteModelFloor(sceneCode);
+        siteDto.setCenter(centre);
+        siteDto.setZ_max(maxZ);
+        siteDto.setZ_min(minZ);
+
+//        SitePolygon rPolygon = new SitePolygon();
+//        rPolygon.setCoordinates(doubles);
+//        rPolygon.setType("Polygon");
+//        siteDto.setPolygon(rPolygon);
 
+        log.info("siteModel数据初始化创建完成");
+        return siteDto;
+    }
+
+    private SiteDto initSiteModelFloor(String sceneCode){
+        SiteDto dto = new SiteDto();
+        dto.setType("FLOOR");
+        dto.setName("合并FLOOR_" + sceneCode);
+//        dto.setArea(2503.30551910935);
+        dto.setVolume(295513.21880627);
+        dto.setGeometry_hash(-200081285L);
+        return dto;
+    }
+
+
+    private void mergeTileMap(String sceneCode, String mergeCode, Integer modelSiteId, String path){
+        TiledMapEntity mapEntity = tiledMapService.findById(sceneCode);
+        if (mapEntity == null){
+            log.warn("tiledMap数据不存在");
+            return;
+        }
+        List<TiledMapDto> data = mapEntity.getData();
+        if (data.size() < 1) {
+            log.warn("data没有数据, 不需要合并");
+            return;
+        }
+        log.info("tiledMap合并前数量:{}", data.size());
+        int maxId = 1;
+        if (data.size() > 1) {
+            maxId = data.stream().mapToInt(TiledMapDto::getId).max().getAsInt();
+        }
+        List<TiledMapDto> mergeTiledMapData = getMergeTiledMapData(sceneCode, mergeCode, modelSiteId, maxId, path);
+        data.addAll(mergeTiledMapData);
+        log.info("tiledMap合并后数量:{}", data.size());
+        mapEntity.setData(data);
+        tiledMapService.save(mapEntity);
+        log.info("tiledMap合并完成");
+
+
+    }
+    /**
+     * 2021-09-06
+     * @param sceneCode 场景码
+     * @param mergeCode 被合并的场景码
+     * @param modelSiteId 合并的floorId
+     * @param maxTiledMapId tiledMap最大id
+     * @return
+     *
+     * 复制数据, 直接修改floorId值
+     */
+    private List<TiledMapDto>  getMergeTiledMapData(String sceneCode, String mergeCode, Integer modelSiteId, Integer maxTiledMapId, String path){
+        List<TiledMapDto> data = tiledMapService.getDataBySceneCode(mergeCode);
+
+//        String path = redisPath(sceneCode) + "/laserData";
+//        if ("dev".equals(configConstant.active)) {
+//            path = "F:\\test\\ngin\\age_laser_data\\" + sceneCode + "\\results\\laserData";
+//        }
+
+
+        for (TiledMapDto mapDto : data) {
+            maxTiledMapId ++;
+            mapDto.setId(maxTiledMapId);
+            mapDto.setFloor_id(modelSiteId);
+            mapDto.setFile_path("data/bundle_" + mergeCode +"/building_1/map_tiles/" + mapDto.getFloor_id());
+
+            // 将cover上传oss
+            String ossTarget = "data/" + sceneCode + "/" + mapDto.getFile_path();
+            String uploadDir = path + "/cover";
+            log.info("uploadDir: {}", uploadDir);
+            // todo 本地测试,需要注释;
+            if (!"dev".equals(configConstant.active)) {
+                ossUploadDir(ossTarget, uploadDir);
+            }
+        }
+
+
+        return data;
+    }
+
+    private void ossUploadDir(String ossTarget, String uploadDir){
+        String cmd = CmdConstant.OSSUTIL_UPLOAD_DIR;
+        cmd = cmd.replaceAll("@uploadDir", uploadDir);
+        cmd = cmd.replaceAll("@target", ossTarget);
+        CmdUtils.ossUploadDir(cmd);
+        log.info("TiledMap上传oss完成");
+    }
 
     @Test
     public void testsub(){

+ 47 - 8
laser/src/main/java/com/fdkankan/indoor/core/service/impl/TiledMapServiceImpl.java

@@ -17,6 +17,7 @@ import com.fdkankan.indoor.core.entity.po.DataSetPo;
 import com.fdkankan.indoor.core.mapper.TiledMapMapper;
 import com.fdkankan.indoor.core.service.TiledMapService;
 import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -39,14 +40,14 @@ public class TiledMapServiceImpl extends IBaseServiceImpl implements TiledMapSer
     @Autowired
     DataSetServiceImpl dataSetService;
 
-
-    private TiledMapEntity findById(String sceneCode){
+    @Override
+    public TiledMapEntity findById(String sceneCode){
         Optional<TiledMapEntity> optional = entityMapper.findById(sceneCode);
         return optional.orElse(null);
     }
 
-
-    private List<TiledMapDto> getDataBySceneCode(String sceneCode){
+    @Override
+    public List<TiledMapDto> getDataBySceneCode(String sceneCode){
         TiledMapEntity entity = findById(sceneCode);
         if (entity != null) {
             return entity.getData();
@@ -67,6 +68,12 @@ public class TiledMapServiceImpl extends IBaseServiceImpl implements TiledMapSer
     }
 
     @Override
+    public void save(TiledMapEntity entity) {
+        entity.setCreateTime(LocalDateTime.now());
+        entityMapper.save(entity);
+    }
+
+    @Override
     public void remove(String sceneCode) {
         entityMapper.deleteById(sceneCode);
     }
@@ -153,6 +160,11 @@ public class TiledMapServiceImpl extends IBaseServiceImpl implements TiledMapSer
     }
 
 
+    /**
+     * 初始化
+     * @param sceneCode
+     * @return
+     */
     private List<TiledMapDto> initData(String sceneCode){
         String path = redisPath(sceneCode) + "/laserData";
         if ("dev".equals(configConstant.active)) {
@@ -188,7 +200,7 @@ public class TiledMapServiceImpl extends IBaseServiceImpl implements TiledMapSer
         double[] quaternion = PlanGraph.getQuaternion(orientation);
 
 
-        // 四查收书
+        // 四叉树
         String dirPath = path + "/cover/" + maxDepth;
         log.info("quadTree dirPath: {}", dirPath);
         Solution solution = new Solution();
@@ -210,10 +222,10 @@ public class TiledMapServiceImpl extends IBaseServiceImpl implements TiledMapSer
          * building_1: bundle_id值
          * 11=floor_id值:site_model.type:floor的id
          */
-        dto.setFile_path("data/bundle_" + sceneCode +"/building_1/map_tiles/11");
-        dto.setFile_name("$DEPTH/$X/$Y.png");
         // 11=floor_id值:site_model.type:floor的id
         dto.setFloor_id(11);
+        dto.setFile_path("data/bundle_" + sceneCode +"/building_1/map_tiles/" + dto.getFloor_id());
+        dto.setFile_name("$DEPTH/$X/$Y.png");
 
         dto.setMax_depth(maxDepth);
         dto.setQuadtree(quadTree);
@@ -242,8 +254,35 @@ public class TiledMapServiceImpl extends IBaseServiceImpl implements TiledMapSer
         cmd = cmd.replaceAll("@uploadDir", uploadDir);
         cmd = cmd.replaceAll("@target", ossTarget);
         CmdUtils.ossUploadDir(cmd);
-        log.info("切图上传oss完成");
+        log.info("TiledMap上传oss完成");
     }
 
 
+
+
+
+    @Test
+    public void tesst(){
+        List<TiledMapDto> data = new ArrayList<>();
+        TiledMapDto mapDto ;
+        for (int i = 0; i < 3; i++) {
+            mapDto = new TiledMapDto();
+            mapDto.setId(i);
+            mapDto.setFile_path("aaa_" + i);
+            mapDto.setType("aa");
+            data.add(mapDto);
+        }
+
+        int maxId = 5;
+        for (TiledMapDto datum : data) {
+            maxId ++;
+            datum.setId(maxId);
+            datum.setFile_path("bb_" + maxId);
+
+        }
+
+        System.out.println(data);
+
+    }
+
 }