Browse Source

增加共享临时图层和元素

liaoyitao 2 weeks ago
parent
commit
9c76162be3

+ 62 - 0
config/applicationx3d.yml

@@ -0,0 +1,62 @@
1
+server:
2
+  address: 192.168.4.194
3
+  servlet: {context-path: /X3D-server}
4
+  port: 9098
5
+  error: {include-exception: true}
6
+  compression: {enabled: false}
7
+  tomcat: {max-connections: 1000, max-swallow-size: 1000MB, max-http-form-post-size: 3000MB}
8
+spring:
9
+  application: {name: LINK-SERVER}
10
+  servlet:
11
+    multipart: {max-file-size: 3000MB, max-request-size: 3000MB, file-size-threshold: 10MB}
12
+  jdbc:
13
+    template: {query-timeout: 20s}
14
+  jpa:
15
+    hibernate: {ddl-auto: none}
16
+    generate-ddl: false
17
+    show-sql: false
18
+    open-in-view: true
19
+    properties:
20
+      hibernate:
21
+        event:
22
+          merge: {entity_copy_observer: allow}
23
+        jdbc: {batch_size: 1000, fetch_size: 1000}
24
+        temp: {use_jdbc_metadata_defaults: false}
25
+        dialect: org.hibernate.spatial.dialect.postgis.PostgisPG95Dialect
26
+        jpa:
27
+          properties:
28
+            hibernate:
29
+              jdbc: {batch_size: 1000}
30
+              order_inserts: true
31
+    database-platform: org.hibernate.spatial.dialect.postgis.PostgisPG95Dialect
32
+  datasource:
33
+    hikari: {driver-class-name: org.postgresql.Driver, username: postgres, password: lqkj007,
34
+      auto-commit: true, pool-name: link, minimum-idle: 4, maximum-pool-size: 200,
35
+      idle-timeout: 60000, max-lifetime: 1800000, connection-timeout: 30000, read-only: false}
36
+#    url: jdbc:postgresql://192.168.4.241:5432/dev_link1.0-1
37
+    url: jdbc:postgresql://192.168.4.241:5432/dev_x3d_1.0.0
38
+  flyway: {baseline-on-migrate: true, enabled: true, validate-on-migrate: false}
39
+  web:
40
+    resources:
41
+      cache:
42
+        cachecontrol: {cache-public: true, max-age: 0s}
43
+      chain: {cache: true, enabled: true}
44
+  session:
45
+    jdbc: {initialize-schema: never}
46
+  main: {allow-bean-definition-overriding: true}
47
+logging:
48
+  register-shutdown-hook: true
49
+  level: {org.springframework.boot: info, org.ehcache.impl.internal.store.heap.OnHeapStore: error,
50
+    org.apache.coyote.http11.Http11InputBuffer: debug, org.hibernate.SQL: debug, io.swagger.models.parameters.AbstractSerializableParameter: error}
51
+  file: {name: ./log/link.log, path: 'classpath:log4j2.xml'}
52
+springdoc:
53
+  api-docs: {enabled: true, path: /v3/api-docs}
54
+  swagger-ui: {persist-authorization: true, path: /swagger-ui.html}
55
+
56
+  # 阿里云
57
+aliyun:
58
+  endpoint: https://oss-cn-chengdu.aliyuncs.com
59
+  accessKeyId: LTAI5tLJsyF7YvFf48sC5yVL
60
+  accessKeySecret: v48ceFlBuXhyeoduxOBFcEdeN4pL1G
61
+  bucketName: link-meta
62
+  osspath: https://oss-cn-chengdu.aliyuncs.com

+ 70 - 0
src/main/java/com/lqkj/link/module/zone/controller/TmpGeomInfoController.java

@@ -0,0 +1,70 @@
1
+package com.lqkj.link.module.zone.controller;
2
+import com.lqkj.link.message.MessageBean;
3
+import com.lqkj.link.module.base.service.BaseService;
4
+import com.lqkj.link.module.zone.domain.GeomInfo;
5
+import com.lqkj.link.module.zone.domain.OneZoneGeomInfos;
6
+import com.lqkj.link.module.zone.domain.TmpGeomInfo;
7
+import com.lqkj.link.module.zone.domain.TmpOneZoneGeomInfos;
8
+import com.lqkj.link.module.zone.service.GeomInfoService;
9
+import com.lqkj.link.module.zone.service.TmpGeomService;
10
+import io.swagger.v3.oas.annotations.Operation;
11
+import io.swagger.v3.oas.annotations.Parameter;
12
+import io.swagger.v3.oas.annotations.media.Content;
13
+import io.swagger.v3.oas.annotations.media.Schema;
14
+import io.swagger.v3.oas.annotations.tags.Tag;
15
+import org.springframework.beans.factory.annotation.Autowired;
16
+import org.springframework.web.bind.annotation.*;
17
+import java.util.List;
18
+@RestController
19
+@RequestMapping("/tmpGeom")
20
+@Tag(name = "临时场景元素信息", description = "临时场景元素信息")
21
+public class TmpGeomInfoController {
22
+    private final BaseService baseService;
23
+
24
+    @Autowired
25
+    private TmpGeomService tmpGeomService;
26
+
27
+
28
+    public TmpGeomInfoController(GeomInfoService geomInfoService, BaseService baseService) {
29
+        this.baseService = baseService;
30
+    }
31
+
32
+    @Operation(
33
+            summary = "5.1.2.8 下载临时场景信息接口",
34
+            description = "5.1.2.8 下载临时场景信息接口",
35
+            parameters = {
36
+                    @Parameter(name = "zoneId", required = true, description = "作品/区域ID"),
37
+                    @Parameter(name = "userId", required = true, description = "用户ID"),
38
+                    @Parameter(name = "status", required = true, description = "状态:1:未处理,2:已处理"),
39
+
40
+            }
41
+    )
42
+    @PostMapping("/findAll")
43
+    public List<TmpGeomInfo> findByZone(@RequestParam Integer zoneId,
44
+                                        @RequestParam(required = false, defaultValue = "0") Integer userId,
45
+                                        @RequestParam Integer status) {
46
+        return tmpGeomService.findAll(zoneId, userId, status);
47
+    }
48
+
49
+    @Operation(
50
+            summary = "5.1.2.23 保存临时场景信息",
51
+            description = "5.1.2.23 保存临时场景信息",
52
+            requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(
53
+                    description = "场景临时元素信息",
54
+                    required = true,
55
+                    content = @Content(
56
+                            mediaType = "application/json",
57
+                            schema = @Schema(implementation = TmpOneZoneGeomInfos.class)
58
+                    )
59
+            )
60
+    )
61
+    @PostMapping("/saveTmpGeom")
62
+    public MessageBean saveGeom(@RequestBody TmpOneZoneGeomInfos geomInfos) {
63
+        try {
64
+            tmpGeomService.saveTmpGeom(geomInfos);
65
+        } catch (Exception e) {
66
+            throw new RuntimeException(e);
67
+        }
68
+        return MessageBean.ok(null,"保存临时场景信息");
69
+    }
70
+}

+ 44 - 0
src/main/java/com/lqkj/link/module/zone/controller/TmpLayerInfoController.java

@@ -0,0 +1,44 @@
1
+package com.lqkj.link.module.zone.controller;
2
+
3
+import com.lqkj.link.module.zone.domain.LayerInfo;
4
+import com.lqkj.link.module.zone.domain.TmpGeomInfo;
5
+import com.lqkj.link.module.zone.domain.TmpLayerInfo;
6
+import com.lqkj.link.module.zone.service.LayerInfoService;
7
+import com.lqkj.link.module.zone.service.TmpLayerInfoService;
8
+import io.swagger.v3.oas.annotations.Operation;
9
+import io.swagger.v3.oas.annotations.Parameter;
10
+import io.swagger.v3.oas.annotations.tags.Tag;
11
+import org.springframework.web.bind.annotation.PostMapping;
12
+import org.springframework.web.bind.annotation.RequestMapping;
13
+import org.springframework.web.bind.annotation.RequestParam;
14
+import org.springframework.web.bind.annotation.RestController;
15
+
16
+import java.util.List;
17
+
18
+import static com.lqkj.link.APIVersion.VERSION_V2;
19
+
20
+@RestController
21
+@RequestMapping("/tmpLayer")
22
+@Tag(name = "临时图层信息", description = "临时图层信息")
23
+public class TmpLayerInfoController {
24
+    private final TmpLayerInfoService tmpLayerInfoService;
25
+
26
+    public TmpLayerInfoController(TmpLayerInfoService tmpLayerInfoService) {
27
+        this.tmpLayerInfoService = tmpLayerInfoService;
28
+    }
29
+
30
+    @Operation(
31
+            summary = "5.1.2.17 临时图层目录读取接口",
32
+            description = "5.1.2.17 临时图层目录读取接口",
33
+            parameters = {
34
+                    @Parameter(name = "zoneId", description = "作品ID", required = true)
35
+            }
36
+    )
37
+    @PostMapping("/findAll")
38
+    public List<TmpLayerInfo> findByZone(@RequestParam Integer zoneId,
39
+                                         @RequestParam(required = false, defaultValue = "0") Integer userId,
40
+                                         @RequestParam Integer status) {
41
+        return tmpLayerInfoService.findAll(zoneId, userId, status);
42
+    }
43
+
44
+}

+ 141 - 0
src/main/java/com/lqkj/link/module/zone/domain/TmpGeomInfo.java

@@ -0,0 +1,141 @@
1
+package com.lqkj.link.module.zone.domain;
2
+
3
+import com.alibaba.fastjson2.JSONArray;
4
+import com.alibaba.fastjson2.JSONObject;
5
+import com.fasterxml.jackson.annotation.JsonFormat;
6
+import com.fasterxml.jackson.annotation.JsonIgnore;
7
+import io.hypersistence.utils.hibernate.type.json.JsonType;
8
+import jakarta.persistence.*;
9
+import lombok.AllArgsConstructor;
10
+import lombok.Getter;
11
+import lombok.NoArgsConstructor;
12
+import lombok.Setter;
13
+import org.hibernate.annotations.Type;
14
+import org.locationtech.jts.geom.Point;
15
+
16
+import java.util.Date;
17
+
18
+@Entity
19
+@Table(name = "tmp_geom_info")
20
+@Getter
21
+@Setter
22
+@NoArgsConstructor
23
+@AllArgsConstructor
24
+public class TmpGeomInfo {
25
+    @Id
26
+    @Column(name = "tmp_id")
27
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
28
+    private Integer tmpId;
29
+
30
+    @Column(name = "zone_id")
31
+    private Integer zoneId;
32
+
33
+    @Column(name = "model_id")
34
+    private Integer modelId;
35
+
36
+    @Column(name = "layer_id")
37
+    private String layerId;
38
+
39
+    @Column(name = "geom_name")
40
+    private String geomName;
41
+
42
+    @Column(name = "building_id")
43
+    private Integer buildingId;
44
+
45
+    @Column(name = "floor")
46
+    private Integer floor;
47
+
48
+    @Column(name = "room_id")
49
+    private Integer roomId;
50
+
51
+    @Column(name = "geom", columnDefinition = "Geometry")
52
+    @JsonIgnore
53
+    private Point geom;
54
+
55
+    @Type(JsonType.class)
56
+    @Column(name = "properties", columnDefinition = "jsonb")
57
+    private JSONArray properties;
58
+
59
+    @Column(name = "locking")
60
+    private Boolean locking;
61
+
62
+    @Transient
63
+    private JSONObject location;
64
+
65
+    @Transient
66
+    private String Name;
67
+    @Type(JsonType.class)
68
+    @Column(name = "trans", columnDefinition = "jsonb")
69
+    @JsonIgnore
70
+    private JSONObject trans;
71
+
72
+    @Transient
73
+    private String modelPath;
74
+
75
+    @Column(name = "pics")
76
+    private String pics;
77
+
78
+    @Column(name = "video_url")
79
+    private String videoUrl;
80
+
81
+    @Column(name = "audio_url")
82
+    private String audioUrl;
83
+
84
+    @Column(name = "brief")
85
+    private String brief;
86
+
87
+    @Column(name = "navigation")
88
+    private Boolean navigation;
89
+
90
+    @Column(name = "navigation_end")
91
+    private String navigationEnd;
92
+
93
+    @Column(name = "type_number")
94
+    private Integer typeNumber;
95
+
96
+    @Column(name = "static_id")
97
+    private Integer staticId;
98
+
99
+    /**
100
+     * 材质ID
101
+     */
102
+    @Column(name = "material_id")
103
+    private Integer materialId;
104
+
105
+    /**
106
+     * 贴图ID
107
+     * @return
108
+     */
109
+    @Column(name = "texture_id")
110
+    private Integer textureId;
111
+
112
+    /**
113
+     * 颜色
114
+     * @return
115
+     */
116
+    @Column(name = "color")
117
+    private String color;
118
+
119
+    @Column(name = "user_id")
120
+    private Integer userId;
121
+
122
+    @Column(name = "status")
123
+    private Integer status;
124
+
125
+    @Column(name = "create_time")
126
+    @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
127
+    private Date createTime;
128
+
129
+    @Column(name = "tmp_layer_id")
130
+    private Integer tmpLayerId;
131
+
132
+    public JSONObject getLocation() {
133
+        if (location == null) return trans;
134
+        return location;
135
+    }
136
+
137
+    public String getName() {
138
+        return tmpId.toString();
139
+    }
140
+
141
+}

+ 52 - 0
src/main/java/com/lqkj/link/module/zone/domain/TmpLayerInfo.java

@@ -0,0 +1,52 @@
1
+package com.lqkj.link.module.zone.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import jakarta.persistence.*;
5
+import lombok.AllArgsConstructor;
6
+import lombok.Getter;
7
+import lombok.NoArgsConstructor;
8
+import lombok.Setter;
9
+
10
+import java.util.Date;
11
+
12
+@Entity
13
+@Table(name = "tmp_layer_info")
14
+@Getter
15
+@Setter
16
+@NoArgsConstructor
17
+@AllArgsConstructor
18
+public class TmpLayerInfo {
19
+    @Id
20
+    @Column(name = "tmp_layer_id")
21
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
22
+    private Integer tmpLayerId;
23
+
24
+    @Column(name = "zone_id")
25
+    private Integer zoneId;
26
+
27
+    @Column(name = "layer_name")
28
+    private String layerName;
29
+
30
+    @Transient
31
+    private String Name;
32
+
33
+    @Column(name = "locking")
34
+    private Boolean locking;
35
+
36
+    @Column(name = "user_id")
37
+    private Integer userId;
38
+
39
+    @Column(name = "status")
40
+    private Integer status;
41
+
42
+    @Column(name = "create_time")
43
+    @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
44
+    private Date createTime;
45
+
46
+    @Column(name = "layer_id")
47
+    private String layerId;
48
+
49
+    public String getName() {
50
+        return tmpLayerId.toString();
51
+    }
52
+}

+ 17 - 0
src/main/java/com/lqkj/link/module/zone/domain/TmpOneZoneGeomInfos.java

@@ -0,0 +1,17 @@
1
+package com.lqkj.link.module.zone.domain;
2
+
3
+import com.alibaba.fastjson2.JSONObject;
4
+import lombok.Getter;
5
+import lombok.Setter;
6
+
7
+import java.util.List;
8
+
9
+@Getter
10
+@Setter
11
+public class TmpOneZoneGeomInfos {
12
+    private Integer zoneId;
13
+    private List<TmpGeomInfo> modifyGeomList;
14
+    private List<Integer> deleteGeomList;
15
+    private List<TmpLayerInfo> modifyLayerList;
16
+    private List<Integer> deleteLayerList;
17
+}

+ 6 - 4
src/main/java/com/lqkj/link/module/zone/repository/TextureInfoRepository.java

@@ -20,10 +20,11 @@ public interface TextureInfoRepository extends JpaRepository<TextureInfo, Intege
20 20
      * @return
21 21
      */
22 22
     @Query(nativeQuery = true,
23
-            value = "select count(*) > 0 from texture_info where texture_name = :textureName and texture_id != :textureId"
23
+            value = "select count(*) > 0 from texture_info where texture_name = :textureName and texture_id != :textureId and user_id = :userId"
24 24
     )
25 25
     boolean hasSameNameWithoutOne(@Param("textureId") Integer textureId,
26
-                                  @Param("textureName")String textureName);
26
+                                  @Param("textureName")String textureName,
27
+                                  @Param("userId")Integer userId);
27 28
 
28 29
 
29 30
     /**
@@ -32,9 +33,10 @@ public interface TextureInfoRepository extends JpaRepository<TextureInfo, Intege
32 33
      * @return
33 34
      */
34 35
     @Query(nativeQuery = true,
35
-            value = "select count(*) > 0 from texture_info where texture_name = :textureName"
36
+            value = "select count(*) > 0 from texture_info where texture_name = :textureName and user_id = :userId"
36 37
     )
37
-    boolean hasSameName(@Param("textureName") String textureName);
38
+    boolean hasSameName(@Param("textureName") String textureName,
39
+                        @Param("userId")Integer userId);
38 40
 
39 41
 
40 42
     @Query(nativeQuery = true,

+ 32 - 0
src/main/java/com/lqkj/link/module/zone/repository/TmpGeomInfoRepository.java

@@ -0,0 +1,32 @@
1
+package com.lqkj.link.module.zone.repository;
2
+
3
+import com.lqkj.link.module.zone.domain.GeomInfo;
4
+import com.lqkj.link.module.zone.domain.TmpGeomInfo;
5
+import org.springframework.data.jpa.repository.JpaRepository;
6
+import org.springframework.data.jpa.repository.Modifying;
7
+import org.springframework.data.jpa.repository.Query;
8
+import org.springframework.data.repository.query.Param;
9
+import org.springframework.stereotype.Repository;
10
+
11
+import java.util.List;
12
+import java.util.Map;
13
+
14
+@Repository
15
+public interface TmpGeomInfoRepository extends JpaRepository<TmpGeomInfo, Integer> {
16
+
17
+    @Query(nativeQuery = true,
18
+        value = "with t1 as(select zone_id, st_makepoint(" +
19
+                    "(init_location -> 'translation' ->> 'x')\\:\\:float8, " +
20
+                    "(init_location -> 'translation' ->> 'y')\\:\\:float8, " +
21
+                    "(init_location -> 'translation' ->> 'z')\\:\\:float8) as init from zone_info where zone_id = :zoneId) " +
22
+                "select gi.* from geom_info gi, t1 where gi.zone_id = t1.zone_id order by st_distance(gi.geom, t1.init) "
23
+    )
24
+    List<GeomInfo> findAllByZoneId(Integer zoneId);
25
+
26
+
27
+    @Query(nativeQuery = true,
28
+        value = "select * from tmp_geom_info where zone_id = :zoneId and status = :status and " +
29
+                "(:userId = 0 or user_id = :userId) group by user_id,tmp_id order by create_time desc "
30
+    )
31
+    List<TmpGeomInfo> findAllByParam(Integer zoneId, Integer userId, Integer status);
32
+}

+ 23 - 0
src/main/java/com/lqkj/link/module/zone/repository/TmpLayerInfoRepository.java

@@ -0,0 +1,23 @@
1
+package com.lqkj.link.module.zone.repository;
2
+
3
+import com.lqkj.link.module.zone.domain.LayerInfo;
4
+import com.lqkj.link.module.zone.domain.TmpGeomInfo;
5
+import com.lqkj.link.module.zone.domain.TmpLayerInfo;
6
+import org.springframework.data.jpa.repository.JpaRepository;
7
+import org.springframework.data.jpa.repository.Modifying;
8
+import org.springframework.data.jpa.repository.Query;
9
+import org.springframework.data.repository.query.Param;
10
+import org.springframework.stereotype.Repository;
11
+
12
+import java.util.List;
13
+import java.util.Map;
14
+
15
+@Repository
16
+public interface TmpLayerInfoRepository extends JpaRepository<TmpLayerInfo, Integer> {
17
+
18
+    @Query(nativeQuery = true,
19
+            value = "select * from tmp_layer_info where zone_id = :zoneId and status = :status and " +
20
+                    "(:userId = 0 or user_id = :userId) group by user_id,tmp_layer_id order by create_time desc "
21
+    )
22
+    List<TmpLayerInfo> findAllByParam(Integer zoneId, Integer userId, Integer status);
23
+}

+ 14 - 0
src/main/java/com/lqkj/link/module/zone/service/TmpGeomService.java

@@ -0,0 +1,14 @@
1
+package com.lqkj.link.module.zone.service;
2
+
3
+import com.lqkj.link.module.zone.domain.GeomInfo;
4
+import com.lqkj.link.module.zone.domain.OneZoneGeomInfos;
5
+import com.lqkj.link.module.zone.domain.TmpGeomInfo;
6
+import com.lqkj.link.module.zone.domain.TmpOneZoneGeomInfos;
7
+
8
+import java.util.List;
9
+
10
+public interface TmpGeomService {
11
+    List<TmpGeomInfo> findAll(Integer zoneId, Integer userId, Integer status);
12
+
13
+    void saveTmpGeom(TmpOneZoneGeomInfos geomInfos);
14
+}

+ 14 - 0
src/main/java/com/lqkj/link/module/zone/service/TmpLayerInfoService.java

@@ -0,0 +1,14 @@
1
+package com.lqkj.link.module.zone.service;
2
+
3
+import com.lqkj.link.module.zone.domain.TmpGeomInfo;
4
+import com.lqkj.link.module.zone.domain.TmpLayerInfo;
5
+import com.lqkj.link.module.zone.domain.TmpOneZoneGeomInfos;
6
+
7
+import java.util.List;
8
+import java.util.Map;
9
+
10
+public interface TmpLayerInfoService {
11
+    void saveTmpLayer(TmpOneZoneGeomInfos geomInfos);
12
+
13
+    List<TmpLayerInfo> findAll(Integer zoneId, Integer userId, Integer status);
14
+}

+ 2 - 2
src/main/java/com/lqkj/link/module/zone/service/impl/TextureInfoServiceImpl.java

@@ -31,8 +31,8 @@ public class TextureInfoServiceImpl implements TextureInfoService {
31 31
     @Transactional
32 32
     @Override
33 33
     public void sava(TextureInfo textureInfo) {
34
-        if ((Objects.nonNull(textureInfo.getTextureId()) && textureInfoRepository.hasSameNameWithoutOne(textureInfo.getTextureId(), textureInfo.getTextureName()))
35
-            || (Objects.isNull(textureInfo.getTextureId()) && textureInfoRepository.hasSameName(textureInfo.getTextureName()))) {
34
+        if ((Objects.nonNull(textureInfo.getTextureId()) && textureInfoRepository.hasSameNameWithoutOne(textureInfo.getTextureId(), textureInfo.getTextureName(), textureInfo.getUserId()))
35
+            || (Objects.isNull(textureInfo.getTextureId()) && textureInfoRepository.hasSameName(textureInfo.getTextureName(), textureInfo.getUserId()))) {
36 36
             throw new RuntimeException("贴图名称不能重复!");
37 37
         }
38 38
         textureInfoRepository.save(textureInfo);

+ 69 - 0
src/main/java/com/lqkj/link/module/zone/service/impl/TmpGeomServiceImpl.java

@@ -0,0 +1,69 @@
1
+package com.lqkj.link.module.zone.service.impl;
2
+
3
+import com.alibaba.fastjson2.JSONObject;
4
+import com.lqkj.link.module.zone.domain.*;
5
+import com.lqkj.link.module.zone.repository.TmpGeomInfoRepository;
6
+import com.lqkj.link.module.zone.repository.TmpLayerInfoRepository;
7
+import com.lqkj.link.module.zone.service.TmpGeomService;
8
+import com.lqkj.link.module.zone.service.TmpLayerInfoService;
9
+import org.apache.commons.lang3.StringUtils;
10
+import org.checkerframework.checker.units.qual.A;
11
+import org.locationtech.jts.geom.Coordinate;
12
+import org.locationtech.jts.geom.GeometryFactory;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.data.domain.Example;
15
+import org.springframework.stereotype.Service;
16
+import org.springframework.transaction.annotation.Transactional;
17
+
18
+import java.util.Date;
19
+import java.util.List;
20
+import java.util.stream.Collectors;
21
+
22
+
23
+@Service
24
+public class TmpGeomServiceImpl implements TmpGeomService {
25
+
26
+    @Autowired
27
+    private TmpGeomInfoRepository tmpGeomInfoRepository;
28
+
29
+    @Autowired
30
+    private TmpLayerInfoService tmpLayerInfoService;
31
+
32
+
33
+    @Override
34
+    public List<TmpGeomInfo> findAll(Integer zoneId, Integer userId, Integer status) {
35
+        return tmpGeomInfoRepository.findAllByParam(zoneId, userId, status);
36
+    }
37
+
38
+    @Transactional
39
+    @Override
40
+    public void saveTmpGeom(TmpOneZoneGeomInfos geomInfos) {
41
+        tmpLayerInfoService.saveTmpLayer(geomInfos);
42
+        saveGeomByZone(geomInfos);
43
+    }
44
+
45
+    private void saveGeomByZone(TmpOneZoneGeomInfos geomInfos) {
46
+        GeometryFactory geometryFactory = new GeometryFactory();
47
+        // 保存元素
48
+        if (geomInfos.getModifyGeomList() != null && geomInfos.getModifyGeomList().size() > 0) {
49
+            for (TmpGeomInfo geomInfo : geomInfos.getModifyGeomList()) {
50
+                geomInfo.setTrans(geomInfo.getLocation());
51
+                JSONObject pointObject = geomInfo.getLocation().getJSONObject("translation");
52
+                geomInfo.setCreateTime(new Date());
53
+                geomInfo.setGeom(geometryFactory.createPoint(new Coordinate(
54
+                        Double.parseDouble(pointObject.get("x").toString()),
55
+                        Double.parseDouble(pointObject.get("y").toString()),
56
+                        Double.parseDouble(pointObject.get("z").toString()))));
57
+                if (StringUtils.isBlank(geomInfo.getLayerId())) {
58
+                    geomInfo.setLayerId(null);
59
+                }
60
+            }
61
+            tmpGeomInfoRepository.saveAll(geomInfos.getModifyGeomList());
62
+        }
63
+
64
+        // 删除元素
65
+        if (geomInfos.getDeleteGeomList() != null && geomInfos.getDeleteGeomList().size() > 0)
66
+            tmpGeomInfoRepository.deleteAllByIdInBatch(geomInfos.getDeleteGeomList());
67
+
68
+    }
69
+}

+ 46 - 0
src/main/java/com/lqkj/link/module/zone/service/impl/TmpLayerInfoServiceImpl.java

@@ -0,0 +1,46 @@
1
+package com.lqkj.link.module.zone.service.impl;
2
+
3
+import com.lqkj.link.module.zone.domain.LayerInfo;
4
+import com.lqkj.link.module.zone.domain.TmpGeomInfo;
5
+import com.lqkj.link.module.zone.domain.TmpLayerInfo;
6
+import com.lqkj.link.module.zone.domain.TmpOneZoneGeomInfos;
7
+import com.lqkj.link.module.zone.repository.LayerInfoRepository;
8
+import com.lqkj.link.module.zone.repository.TmpLayerInfoRepository;
9
+import com.lqkj.link.module.zone.service.TmpLayerInfoService;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+import java.util.Date;
14
+import java.util.HashMap;
15
+import java.util.List;
16
+import java.util.Map;
17
+import java.util.stream.Collectors;
18
+
19
+@Service
20
+public class TmpLayerInfoServiceImpl implements TmpLayerInfoService {
21
+    private final TmpLayerInfoRepository tmpLayerInfoRepository;
22
+
23
+    public TmpLayerInfoServiceImpl(TmpLayerInfoRepository tmpLayerInfoRepository) {
24
+        this.tmpLayerInfoRepository = tmpLayerInfoRepository;
25
+    }
26
+
27
+    @Override
28
+    public void saveTmpLayer(TmpOneZoneGeomInfos geomInfos) {
29
+        if (geomInfos.getModifyLayerList() != null && geomInfos.getModifyLayerList().size() > 0) {
30
+            for (TmpLayerInfo tmpLayerInfo : geomInfos.getModifyLayerList()) {
31
+                tmpLayerInfo.setZoneId(geomInfos.getZoneId());
32
+                tmpLayerInfo.setCreateTime(new Date());
33
+            }
34
+            tmpLayerInfoRepository.saveAll(geomInfos.getModifyLayerList());
35
+        }
36
+
37
+        // 删除图层
38
+        if (geomInfos.getDeleteLayerList() != null && geomInfos.getDeleteLayerList().size() > 0)
39
+            tmpLayerInfoRepository.deleteAllByIdInBatch(geomInfos.getDeleteLayerList());
40
+    }
41
+
42
+    @Override
43
+    public List<TmpLayerInfo> findAll(Integer zoneId, Integer userId, Integer status) {
44
+        return tmpLayerInfoRepository.findAllByParam(zoneId, userId, status);
45
+    }
46
+}

+ 159 - 0
src/main/resources/db/migration/V14__2.0.8.sql

@@ -0,0 +1,159 @@
1
+create table tmp_layer_info (
2
+                                tmp_layer_id         SERIAL               not null,
3
+                                zone_id              INT4                 null,
4
+                                layer_name           VARCHAR(255)         null,
5
+                                create_time          TIMESTAMP            not null default CURRENT_TIMESTAMP,
6
+                                locking              BOOL                 null,
7
+                                user_id              INT4                 null,
8
+                                status               INT2                 not null default 1,
9
+                                layer_id             VARCHAR(255)         null,
10
+                                constraint PK_TMP_LAYER_INFO primary key (tmp_layer_id)
11
+);
12
+
13
+comment on table tmp_layer_info is
14
+'临时图层信息';
15
+
16
+comment on column tmp_layer_info.tmp_layer_id is
17
+'临时图层ID';
18
+
19
+comment on column tmp_layer_info.zone_id is
20
+'作品ID';
21
+
22
+comment on column tmp_layer_info.layer_name is
23
+'图层名称';
24
+
25
+comment on column tmp_layer_info.create_time is
26
+'创建时间';
27
+
28
+comment on column tmp_layer_info.locking is
29
+'是否锁定';
30
+
31
+comment on column tmp_layer_info.user_id is
32
+'用户ID';
33
+
34
+comment on column tmp_layer_info.status is
35
+'同步状态1:位同步,2:已同步';
36
+
37
+comment on column tmp_layer_info.layer_id is
38
+'图层ID';
39
+
40
+
41
+create table tmp_geom_info (
42
+                               tmp_id               SERIAL               not null,
43
+                               zone_id              INT4                 null,
44
+                               model_id             INT4                 null,
45
+                               layer_id             VARCHAR(255)         null,
46
+                               geom_name            VARCHAR(255)         null,
47
+                               building_id          INT4                 null,
48
+                               floor                INT4                 null,
49
+                               room_id              INT4                 null,
50
+                               geom                 geometry             null,
51
+                               properties           jsonb                null,
52
+                               locking              BOOL                 null,
53
+                               trans                jsonb                null,
54
+                               pics                 varchar(1024)        null,
55
+                               video_url            varchar(1024)        null,
56
+                               audio_url            CHAR(10)             null,
57
+                               brief                text                 null,
58
+                               navigation           BOOL                 null,
59
+                               navigation_end       varchar(100)         null,
60
+                               type_number          INT2                 null,
61
+                               static_id            INT4                 null,
62
+                               material_id          INT4                 null,
63
+                               texture_id           INT4                 null,
64
+                               color                VARCHAR(255)         null,
65
+                               create_time          TIMESTAMP            not null default CURRENT_TIMESTAMP,
66
+                               status               INT2                 not null default 1,
67
+                               user_id              INT4                 null,
68
+                               tmp_layer_id         INT4                 null,
69
+                               constraint PK_TMP_GEOM_INFO primary key (tmp_id)
70
+);
71
+
72
+comment on table tmp_geom_info is
73
+'临时空间信息';
74
+
75
+comment on column tmp_geom_info.tmp_id is
76
+'临时ID';
77
+
78
+comment on column tmp_geom_info.zone_id is
79
+'区域ID';
80
+
81
+comment on column tmp_geom_info.model_id is
82
+'模型ID';
83
+
84
+comment on column tmp_geom_info.layer_id is
85
+'图层ID';
86
+
87
+comment on column tmp_geom_info.geom_name is
88
+'元素名称';
89
+
90
+comment on column tmp_geom_info.building_id is
91
+'大楼ID';
92
+
93
+comment on column tmp_geom_info.floor is
94
+'楼层';
95
+
96
+comment on column tmp_geom_info.room_id is
97
+'房间';
98
+
99
+comment on column tmp_geom_info.geom is
100
+'空间信息';
101
+
102
+comment on column tmp_geom_info.properties is
103
+'属性信息';
104
+
105
+comment on column tmp_geom_info.locking is
106
+'锁定';
107
+
108
+comment on column tmp_geom_info.trans is
109
+'变换';
110
+
111
+comment on column tmp_geom_info.pics is
112
+'图片地址';
113
+
114
+comment on column tmp_geom_info.video_url is
115
+'视频文件地址';
116
+
117
+comment on column tmp_geom_info.audio_url is
118
+'音频文件地址';
119
+
120
+comment on column tmp_geom_info.brief is
121
+'简介';
122
+
123
+comment on column tmp_geom_info.navigation is
124
+'是否导航';
125
+
126
+comment on column tmp_geom_info.navigation_end is
127
+'导航终点';
128
+
129
+comment on column tmp_geom_info.type_number is
130
+'类型编号0:模型 1:特效';
131
+
132
+comment on column tmp_geom_info.static_id is
133
+'特效ID';
134
+
135
+comment on column tmp_geom_info.material_id is
136
+'材质ID';
137
+
138
+comment on column tmp_geom_info.texture_id is
139
+'贴图ID';
140
+
141
+comment on column tmp_geom_info.color is
142
+'颜色';
143
+
144
+comment on column tmp_geom_info.create_time is
145
+'创建时间';
146
+
147
+comment on column tmp_geom_info.status is
148
+'同步状态1:位同步,2:已同步';
149
+
150
+comment on column tmp_geom_info.user_id is
151
+'用户ID';
152
+
153
+comment on column tmp_geom_info.tmp_layer_id is
154
+'临时图层ID';
155
+
156
+alter table tmp_geom_info
157
+    add constraint FK_TMP_GEOM_REF_LAYER foreign key (tmp_layer_id)
158
+        references tmp_layer_info (tmp_layer_id)
159
+        on delete cascade on update cascade;