dengsixing 8 月之前
父节点
当前提交
3ca49091f4
共有 42 个文件被更改,包括 783 次插入155 次删除
  1. 2 2
      720yun_fd_manage/gis_application/src/main/resources/application-locSit.yml
  2. 21 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/BaseIdDto.java
  3. 20 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/BatchSaveWorkNavigationDTO.java
  4. 41 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/InitWorkNavigationSceneDTO.java
  5. 20 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/InitialSceneDTO.java
  6. 34 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/SaveWorkHotDTO.java
  7. 53 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/SaveWorkNavigationDTO.java
  8. 11 4
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkAddDto.java
  9. 1 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkBackgroundMusicDto.java
  10. 1 1
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkBaseSettingDto.java
  11. 4 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkCustomMaskDto.java
  12. 10 2
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkHotDTO.java
  13. 3 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkIdDto.java
  14. 6 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkNavigationDTO.java
  15. 2 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkVisualAngleDTO.java
  16. 13 3
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/entity/WorkHot.java
  17. 20 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/vo/NavigationMaskMapVO.java
  18. 10 1
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/vo/WorkHotVO.java
  19. 5 1
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/vo/WorkViewVo.java
  20. 2 0
      720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/vo/WorkVisualAngleVo.java
  21. 11 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/KrpanoService.java
  22. 2 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkCustomMaskService.java
  23. 2 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkExplanationService.java
  24. 4 1
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkHotService.java
  25. 2 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkNavigationService.java
  26. 8 5
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkNavigationSettingService.java
  27. 3 2
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkService.java
  28. 2 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkVisualAngleService.java
  29. 100 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/KrpanoServiceImpl.java
  30. 11 5
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkBaseSettingServiceImpl.java
  31. 5 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkCustomMaskServiceImpl.java
  32. 6 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkExplanationServiceImpl.java
  33. 46 19
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkHotServiceImpl.java
  34. 10 0
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkNavigationServiceImpl.java
  35. 89 15
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkNavigationSettingServiceImpl.java
  36. 114 72
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkServiceImpl.java
  37. 27 4
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkViewServiceImpl.java
  38. 36 1
      720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkVisualAngleServiceImpl.java
  39. 3 2
      720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/WebController.java
  40. 9 7
      720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/WorkController.java
  41. 11 7
      720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/WorkEditNavigationController.java
  42. 3 1
      720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/WorkHotController.java

+ 2 - 2
720yun_fd_manage/gis_application/src/main/resources/application-locSit.yml

@@ -15,9 +15,9 @@ oss:
     domain: https://ossxiaoan.4dage.com/
     file:
         path: ${project.name}/
-    key: LTAIUrvuHqj8pvry
+    key: LTAI5tSkKQbEmxxuTbPtHqK6
     point: http://oss-cn-shenzhen.aliyuncs.com
-    secrecy: JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4
+    secrecy: JI21tOnZbJuqt5NDRcQq2qvAUA4KTf
     type: oss
 server:
     domain: ''

+ 21 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/BaseIdDto.java

@@ -0,0 +1,21 @@
+package com.gis.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Created by Xiewj on  2024年4月18日14:09:13
+ */
+@Data
+public class BaseIdDto {
+
+    @NotBlank(message = "id不能为空")
+    @ApiModelProperty(value = "id" ,required = true)
+    private String id;
+
+
+
+
+}

+ 20 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/BatchSaveWorkNavigationDTO.java

@@ -0,0 +1,20 @@
+package com.gis.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 作品导航表
+ *
+ * @author Xiewj
+ * @since 2023-09-08 18:13
+ */
+@Data
+public class BatchSaveWorkNavigationDTO extends WorkIdDto implements Serializable {
+
+    private List<SaveWorkNavigationDTO> list;
+
+}

+ 41 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/InitWorkNavigationSceneDTO.java

@@ -0,0 +1,41 @@
+package com.gis.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 作品导航表
+ *
+ * @author Xiewj
+ * @since 2023-09-08 18:13
+ */
+@Data
+public class InitWorkNavigationSceneDTO implements Serializable {
+
+    @NotBlank(message = "name不能为空")
+    @ApiModelProperty("名称")
+    private String name;
+
+    @ApiModelProperty("素材id,当type=pano时不能为空")
+    private Long fodderId;
+
+    @NotBlank(message = "type不能为空")
+    @ApiModelProperty("场景类型,pano-全景图,4dkk-官网场景")
+    private String type;
+
+    @NotBlank(message = "sceneCode不能为空")
+    @ApiModelProperty("场景码")
+    private String sceneCode;
+
+    @ApiModelProperty("官网场景版本")
+    private String version;
+
+    @ApiModelProperty("icon")
+    private String icon;
+
+}

+ 20 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/InitialSceneDTO.java

@@ -0,0 +1,20 @@
+package com.gis.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class InitialSceneDTO extends WorkIdDto{
+
+    @ApiModelProperty(value = "导航id")
+    private Long navigationId;
+
+    @ApiModelProperty(value = "操作类型, delete-清除, add-保存", required = true)
+    @NotBlank(message = "operType不能为空")
+    private String operType;
+
+
+}

+ 34 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/SaveWorkHotDTO.java

@@ -0,0 +1,34 @@
+package com.gis.domain.dto;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 热点
+ * </p>
+ *
+ * @author
+ * @since 2024-05-23
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SaveWorkHotDTO extends WorkIdDto implements Serializable {
+
+
+    private List<WorkHotDTO> list;
+
+}
+

+ 53 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/SaveWorkNavigationDTO.java

@@ -0,0 +1,53 @@
+package com.gis.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 作品导航表
+ *
+ * @author Xiewj
+ * @since 2023-09-08 18:13
+ */
+@Data
+public class SaveWorkNavigationDTO implements Serializable {
+
+    @ApiModelProperty("id")
+    private Long id;
+
+    @ApiModelProperty("父菜单ID")
+    private Long parentId;
+
+    @ApiModelProperty("名称")
+    private String name;
+
+    @ApiModelProperty("排序")
+    private Integer sort;
+
+    @ApiModelProperty("素材id")
+    private Long fodderId;
+
+    @ApiModelProperty("场景码")
+    private String sceneCode;
+
+    @ApiModelProperty("icon")
+    private String icon;
+
+    @ApiModelProperty("group-分组,pono-场景,4dkk-官网场景")
+    private String type;
+
+    @ApiModelProperty("sid")
+    private String sid;
+
+    @ApiModelProperty("子目录")
+    private List<SaveWorkNavigationDTO> children;
+
+
+
+
+
+}

+ 11 - 4
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkAddDto.java

@@ -3,16 +3,23 @@ package com.gis.domain.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
 /**
  * Created by owen on 2021/2/22 0028 16:36
  */
 @Data
 public class WorkAddDto {
 
-    @ApiModelProperty(value = "封面图")
-    private String icon;
+//    @ApiModelProperty(value = "封面图")
+//    private String icon;
+//
+//    @ApiModelProperty(value = "场景密码")
+//    private String password;
 
-    @ApiModelProperty(value = "场景密码")
-    private String password;
+    @ApiModelProperty(value = "选中的素材")
+    @NotEmpty(message = "至少选择一个素材")
+    private List<InitWorkNavigationSceneDTO> sceneDTOList;
 
 }

+ 1 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkBackgroundMusicDto.java

@@ -32,4 +32,5 @@ public class WorkBackgroundMusicDto {
 
     @ApiModelProperty("fodder_id")
     private String fodderId;
+
 }

+ 1 - 1
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkBaseSettingDto.java

@@ -19,6 +19,6 @@ public class WorkBaseSettingDto extends WorkIdDto{
 
     private WorkLogoDto workLogo;
 
-    private List<WorkCustomButtonDto> workCustomButton;
+    private List<WorkCustomButtonDto> workCustomButtonList;
 
 }

+ 4 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkCustomMaskDto.java

@@ -41,4 +41,8 @@ public class WorkCustomMaskDto   {
 
     @ApiModelProperty("缩放")
     private Double scale;
+
+    @ApiModelProperty("随着场景转动")
+    private Boolean antidistorted;
+
 }

+ 10 - 2
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkHotDTO.java

@@ -36,7 +36,6 @@ public class WorkHotDTO implements Serializable {
      * 作品id
      */
     @ApiModelProperty(value = "作品id", required = true)
-    @NotBlank(message = "workId不能为空")
     private String workId;
 
     /**
@@ -68,7 +67,7 @@ public class WorkHotDTO implements Serializable {
      * 是否显示标题
      */
     @ApiModelProperty(value = "是否显示标题")
-    private String titleDisplaMode;
+    private String titleDisplayMode;
 
     /**
      * 引用素材
@@ -108,5 +107,14 @@ public class WorkHotDTO implements Serializable {
 
     @ApiModelProperty(value = "热点内容")
     private JSONObject content;
+
+    @ApiModelProperty(value = "ath")
+    private String ath;
+
+    @ApiModelProperty(value = "ath")
+    private String atv;
+
+    @ApiModelProperty(value = "fontSize")
+    private Integer fontSize;
 }
 

+ 3 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkIdDto.java

@@ -1,7 +1,10 @@
 package com.gis.domain.dto;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotBlank;
 

+ 6 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkNavigationDTO.java

@@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.gis.domain.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.util.List;
@@ -16,6 +19,9 @@ import java.util.List;
  * @since 2023-09-08 18:13
  */
 @Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class WorkNavigationDTO  extends WorkIdDto implements Serializable {
 
     @ApiModelProperty("id")

+ 2 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/dto/WorkVisualAngleDTO.java

@@ -34,4 +34,6 @@ public class WorkVisualAngleDTO implements Serializable {
 
     private Integer vlookatmax;
 
+    private String icon;
+
 }

+ 13 - 3
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/entity/WorkHot.java

@@ -3,6 +3,7 @@ package com.gis.domain.entity;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -30,7 +31,7 @@ public class WorkHot implements Serializable {
     /**
      * 作品id
      */
-    @TableField("workId")
+    @TableField("work_id")
     private String workId;
 
     /**
@@ -60,8 +61,8 @@ public class WorkHot implements Serializable {
     /**
      * 是否显示标题
      */
-    @TableField("title_displa_mode")
-    private String titleDisplaMode;
+    @TableField("title_display_mode")
+    private String titleDisplayMode;
 
     /**
      * 引用素材
@@ -120,4 +121,13 @@ public class WorkHot implements Serializable {
     @TableField("is_delete")
     @TableLogic(value = "0", delval = "1")
     private Integer isDelete;
+
+    @TableField("ath")
+    private String ath;
+
+    @TableField("atv")
+    private String atv;
+
+    @TableField("font_size")
+    private Integer fontSize;
 }

+ 20 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/vo/NavigationMaskMapVO.java

@@ -0,0 +1,20 @@
+package com.gis.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class NavigationMaskMapVO {
+
+    @ApiModelProperty("导航id")
+    private Long navigationId;
+
+    @ApiModelProperty("遮罩数组")
+    private Map<String, WorkCustomMaskVO> data;
+
+
+
+}

+ 10 - 1
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/vo/WorkHotVO.java

@@ -66,7 +66,7 @@ public class WorkHotVO implements Serializable {
      * 是否显示标题
      */
     @ApiModelProperty(value = "是否显示标题")
-    private String titleDisplaMode;
+    private String titleDisplayMode;
 
     /**
      * 引用素材
@@ -106,5 +106,14 @@ public class WorkHotVO implements Serializable {
 
     @ApiModelProperty(value = "热点内容")
     private JSONObject content;
+
+    @ApiModelProperty(value = "ath")
+    private String ath;
+
+    @ApiModelProperty(value = "ath")
+    private String atv;
+
+    @ApiModelProperty(value = "fontSize")
+    private Integer fontSize;
 }
 

+ 5 - 1
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/vo/WorkViewVo.java

@@ -12,6 +12,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.util.List;
+import java.util.Map;
 
 @Data
 @Builder
@@ -59,7 +60,10 @@ public class WorkViewVo {
     private List<WorkHotVO> workHotList;
 
     @ApiModelProperty(value = "遮罩")
-    private List<WorkCustomMaskVO> workCustomMaskList;
+    private List<NavigationMaskMapVO> workCustomMaskList;
+
+//    @ApiModelProperty(value = "遮罩")
+//    private Map<String, Map<String, WorkCustomMaskVO>> workCustomMasks;
 
 
 

+ 2 - 0
720yun_fd_manage/gis_domain/src/main/java/com/gis/domain/vo/WorkVisualAngleVo.java

@@ -37,4 +37,6 @@ public class WorkVisualAngleVo implements Serializable {
 
     private Integer vlookatmax;
 
+    private String icon;
+
 }

+ 11 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/KrpanoService.java

@@ -0,0 +1,11 @@
+package com.gis.service;
+
+import com.gis.domain.entity.WorkEntity;
+
+public interface KrpanoService {
+
+    void saveTourXml(WorkEntity workEntity);
+
+    String getBaseTour();
+
+}

+ 2 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkCustomMaskService.java

@@ -19,4 +19,6 @@ public interface WorkCustomMaskService extends IService<WorkCustomMaskEntity> {
     List<WorkCustomMaskVO> batchSave(WorkMaskBatchSaveDTO dto);
 
     List<WorkCustomMaskEntity> listByWorkId(String workId);
+
+    void deleteByNavigationIds(List<Long> navigationIds);
 }

+ 2 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkExplanationService.java

@@ -21,5 +21,7 @@ public interface WorkExplanationService extends IService<WorkExplanation> {
 
     List<WorkExplanation> listByWorkId(String workId);
 
+    void deleteByNavigationIds(List<Long> navigationIds);
+
 
 }

+ 4 - 1
720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkHotService.java

@@ -2,6 +2,7 @@ package com.gis.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gis.domain.dto.DeleteWorkHotDTO;
+import com.gis.domain.dto.SaveWorkHotDTO;
 import com.gis.domain.dto.WorkHotDTO;
 import com.gis.domain.entity.WorkExplanation;
 import com.gis.domain.entity.WorkHot;
@@ -19,7 +20,7 @@ import java.util.List;
  */
 public interface WorkHotService extends IService<WorkHot> {
 
-    WorkHotVO save(WorkHotDTO dto);
+    List<WorkHotVO> save(SaveWorkHotDTO dto);
 
     WorkHot getByWorkIdAndId(String workdId, Long id);
 
@@ -27,4 +28,6 @@ public interface WorkHotService extends IService<WorkHot> {
 
     List<WorkHot> listByWorkId(String workId);
 
+    void deleteByNavigationIds(List<Long> navigationIds);
+
 }

+ 2 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkNavigationService.java

@@ -20,4 +20,6 @@ public interface WorkNavigationService extends IService<WorkNavigationEntity> {
 
     void reSetFistSceneByWorkId(String workId);
 
+    List<Long> getDeleteIdList(String workId, List<Long> ids);
+
 }

+ 8 - 5
720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkNavigationSettingService.java

@@ -1,9 +1,10 @@
 package com.gis.service;
 
 import cn.hutool.core.lang.tree.Tree;
-import com.gis.domain.dto.AddWorkNavigationSceneDTO;
-import com.gis.domain.dto.WorkNavigationDTO;
-import com.gis.domain.dto.WorkNavigationSettingDto;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gis.domain.dto.*;
+import com.gis.domain.entity.WorkNavigationEntity;
+import com.gis.domain.entity.WorkVisualAngle;
 import com.gis.domain.vo.WorkNavigationVo;
 import com.gis.domain.vo.WorkSceneVo;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -23,12 +24,14 @@ public interface WorkNavigationSettingService {
 
     WorkSceneVo addScene(AddWorkNavigationSceneDTO dto);
 
-    WorkSceneVo setInitialScene(long id, String workId);
+    WorkSceneVo setInitialScene(InitialSceneDTO dto);
 
-    List<Tree<Long>> queryNavigation(String workId);
+    List<Tree<Long>> queryNavigation(String workId, Map<Long, String> idSidMap);
 
     void noveNavigation(WorkNavigationSettingDto dto);
 
     WorkSceneVo getInitialScene(String workId);
 
+    List<Tree<Long>> saveNavigation(BatchSaveWorkNavigationDTO dto);
+
 }

+ 3 - 2
720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkService.java

@@ -6,6 +6,7 @@ import com.gis.common.util.Result;
 import com.gis.domain.dto.*;
 import com.gis.domain.entity.WorkEntity;
 import com.gis.domain.vo.ReportWorkVo;
+import com.gis.domain.vo.WorkVo;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.time.LocalDate;
@@ -22,7 +23,7 @@ public interface WorkService extends IService<WorkEntity> {
 
     Result<WorkEntity> entitySave(WorkDto param);
 
-    Result<WorkEntity> entityAdd();
+    Result<WorkEntity> entityAdd(String workId);
 
     Result remove(String id);
 
@@ -58,7 +59,7 @@ public interface WorkService extends IService<WorkEntity> {
 
     Result getServiceUpTip();
 
-    Result<WorkEntity> addWork(WorkAddDto workAddDto);
+    Result<WorkVo> addWork(WorkAddDto workAddDto);
 
     Result<WorkEntity> editWork(WordAllDto workAddDto);
 

+ 2 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/WorkVisualAngleService.java

@@ -21,4 +21,6 @@ public interface WorkVisualAngleService extends IService<WorkVisualAngle> {
 
     List<WorkVisualAngle> listByWorkId(String workId);
 
+    void deleteByNavigationIds(List<Long> navigationIds);
+
 }

+ 100 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/KrpanoServiceImpl.java

@@ -0,0 +1,100 @@
+package com.gis.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.BufferUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.resource.ResourceUtil;
+import com.gis.common.constant.ConfigConstant;
+import com.gis.common.constant.ErrorEnum;
+import com.gis.common.constant.NavigationTypeEnum;
+import com.gis.common.exception.BaseRuntimeException;
+import com.gis.common.util.DateUtils;
+import com.gis.domain.entity.FodderEntity;
+import com.gis.domain.entity.ScenePanoEntity;
+import com.gis.domain.entity.WorkEntity;
+import com.gis.domain.entity.WorkNavigationEntity;
+import com.gis.oss.util.FileAndOssUtil;
+import com.gis.service.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class KrpanoServiceImpl implements KrpanoService {
+
+    @Autowired
+    private ConfigConstant configConstant;
+    @Autowired
+    private FodderService fodderService;
+    @Resource
+    private FileAndOssUtil fileAndOssUtil;
+    @Autowired
+    private WorkNavigationService workNavigationService;
+    @Autowired
+    private ScenePanoService scenePanoService;
+
+    @Override
+    public void saveTourXml(WorkEntity workEntity) {
+
+
+        // 读取tour.xml模板
+        String baseTour = getBaseTour();
+        StringBuilder builder = new StringBuilder();
+        builder.append(baseTour).append("\r\n");
+
+        String id = workEntity.getId();
+
+        List<WorkNavigationEntity> scenes = workNavigationService.selectScenes(id);
+        List<Long> fodderIds = scenes.stream()
+                .filter(v -> v.getType().equals(NavigationTypeEnum.PANO.code()))
+                .map(v -> v.getFodderId()).collect(Collectors.toList());
+
+        if(CollUtil.isNotEmpty(fodderIds)){
+            List<FodderEntity> list = fodderService.listByIds(fodderIds);
+            for (FodderEntity entity : list) {
+                String tour = entity.getTour();
+                builder.append(tour).append("\r\n");
+            }
+        }
+        if("pro".equals(workEntity.getType())){
+            List<ScenePanoEntity> listPano = scenePanoService.findByWorkId(id);
+            for (ScenePanoEntity entity : listPano) {
+                String tour = entity.getTour();
+                builder.append(tour).append("\r\n");
+            }
+        }
+
+        // 添加结束标签
+        builder.append("</krpano>");
+
+        String tourPath = configConstant.serverBasePath + id + "/tour.xml";
+        FileUtil.writeUtf8String(builder.toString(), tourPath);
+        log.info("作品tour.xml写入完成");
+
+        String ossKeyPath = configConstant.ossBasePath + id + "/tour.xml";
+        fileAndOssUtil.upload(tourPath, ossKeyPath);
+        log.info("tour.xml上传完成 : {}", ossKeyPath);
+    }
+
+    @Override
+    public String getBaseTour(){
+
+//        InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("data/tour.xml");
+//        String baseTourPath = configConstant.serverBasePath + "baseData/tour.xml";
+//        String s = FileUtil.readString(baseTourPath, "utf-8");
+        String s = ResourceUtil.readUtf8Str("data/tour.xml");
+        // 结束标签置空, 方便操作
+        s = s.replace("</krpano>", "");
+        return s;
+    }
+
+}

+ 11 - 5
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkBaseSettingServiceImpl.java

@@ -85,10 +85,15 @@ public class WorkBaseSettingServiceImpl implements WorkBaseSettingService {
             WorkBackgroundMusicEntity workBackgroundMusic = BeanUtil.toBean(dto.getWorkBackgroundMusic(), WorkBackgroundMusicEntity.class);
             WorkBackgroundMusicEntity workBackgroundMusicDB = workBackgroundMusicService.getByWorkId(dto.getWorkId());
             if(Objects.nonNull(workBackgroundMusicDB)){
-                workBackgroundMusic.setId(workBackgroundMusicDB.getId());
+                if(Objects.isNull(workBackgroundMusic.getId())){//数据库中存在,但是传参id为空,则为清除
+                    workBackgroundMusicService.removeById(workBackgroundMusicDB.getId());
+                }else{
+                    workBackgroundMusic.setId(workBackgroundMusicDB.getId());
+                    workBackgroundMusic.setWorkId(dto.getWorkId());
+                    workBackgroundMusicService.saveOrUpdate(workBackgroundMusic);
+                    vo.setWorkBackgroundMusic(BeanUtil.toBean(workBackgroundMusic, WorkBackgroundMusicVo.class));
+                }
             }
-            workBackgroundMusicService.saveOrUpdate(workBackgroundMusic);
-            vo.setWorkBackgroundMusic(BeanUtil.toBean(workBackgroundMusic, WorkBackgroundMusicVo.class));
         }
 
         //自定义logo
@@ -98,13 +103,14 @@ public class WorkBaseSettingServiceImpl implements WorkBaseSettingService {
             if(Objects.nonNull(workLogoDB)){
                 workLogo.setId(workLogoDB.getId());
             }
+            workLogo.setWorkId(dto.getWorkId());
             workLogoService.saveOrUpdate(workLogo);
             vo.setWorkLogo(BeanUtil.toBean(workLogo, WorkLogoVo.class));
         }
 
         //自定义按钮
-        if(CollUtil.isNotEmpty(dto.getWorkCustomButton())){
-            List<WorkCustomButtonEntity> workCustomButtonList = BeanUtil.copyToList(dto.getWorkCustomButton(), WorkCustomButtonEntity.class);
+        if(CollUtil.isNotEmpty(dto.getWorkCustomButtonList())){
+            List<WorkCustomButtonEntity> workCustomButtonList = BeanUtil.copyToList(dto.getWorkCustomButtonList(), WorkCustomButtonEntity.class);
             workCustomButtonList.stream().forEach(v->v.setWorkId(dto.getWorkId()));
             workCustomButtonService.saveOrUpdateBatch(workCustomButtonList);
             vo.setWorkCustomButtonList(BeanUtil.copyToList(workCustomButtonList, WorkCustomButtonVo.class));

+ 5 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkCustomMaskServiceImpl.java

@@ -50,4 +50,9 @@ public class WorkCustomMaskServiceImpl extends ServiceImpl<WorkCustomMaskMapper,
     public List<WorkCustomMaskEntity> listByWorkId(String workId) {
         return this.list(new LambdaQueryWrapper<WorkCustomMaskEntity>().eq(WorkCustomMaskEntity::getWorkId, workId));
     }
+
+    @Override
+    public void deleteByNavigationIds(List<Long> navigationIds) {
+        this.remove(new LambdaQueryWrapper<WorkCustomMaskEntity>().in(WorkCustomMaskEntity::getNavigationId, navigationIds));
+    }
 }

+ 6 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkExplanationServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gis.common.exception.BaseRuntimeException;
 import com.gis.domain.dto.BathSaveWorkExplanationDto;
 import com.gis.domain.dto.WorkExplanationDto;
+import com.gis.domain.entity.WorkCustomMaskEntity;
 import com.gis.domain.entity.WorkExplanation;
 import com.gis.domain.vo.WorkExplanationVo;
 import com.gis.mapper.WorkExplanationMapper;
@@ -59,4 +60,9 @@ public class WorkExplanationServiceImpl extends ServiceImpl<WorkExplanationMappe
     public List<WorkExplanation> listByWorkId(String workId) {
         return this.list(new LambdaQueryWrapper<WorkExplanation>().eq(WorkExplanation::getWorkId, workId));
     }
+
+    @Override
+    public void deleteByNavigationIds(List<Long> navigationIds) {
+        this.remove(new LambdaQueryWrapper<WorkExplanation>().in(WorkExplanation::getNavigationId, navigationIds));
+    }
 }

+ 46 - 19
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkHotServiceImpl.java

@@ -1,20 +1,23 @@
 package com.gis.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gis.common.exception.BaseRuntimeException;
 import com.gis.domain.dto.DeleteWorkHotDTO;
+import com.gis.domain.dto.SaveWorkHotDTO;
 import com.gis.domain.dto.WorkHotDTO;
+import com.gis.domain.entity.WorkExplanation;
 import com.gis.domain.entity.WorkHot;
 import com.gis.domain.vo.WorkHotVO;
 import com.gis.mapper.WorkHotMapper;
 import com.gis.service.WorkHotService;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -33,28 +36,47 @@ public class WorkHotServiceImpl extends ServiceImpl<WorkHotMapper, WorkHot> impl
     }
 
     @Override
-    public WorkHotVO save(WorkHotDTO dto) {
+    public List<WorkHotVO> save(SaveWorkHotDTO dto) {
 
-        WorkHot workHotDb = null;
-        if(Objects.nonNull(dto.getId())){
-            workHotDb = this.getByWorkIdAndId(dto.getWorkId(), dto.getId());
-            if(Objects.isNull(workHotDb)){
-                throw new BaseRuntimeException("热点不存在");
+
+        List<WorkHot> workHots = this.listByWorkId(dto.getWorkId());
+        Map<Long, WorkHot> dbHotMap = workHots.stream().collect(Collectors.toMap(WorkHot::getId, v -> v));
+
+        List<Long> updateIds = new ArrayList<>();
+        List<WorkHot> saveList = dto.getList().stream().map(v -> {
+            v.setWorkId(dto.getWorkId());
+            WorkHot workHotDb = null;
+            if (Objects.nonNull(v.getId())) {
+                workHotDb = dbHotMap.get(v.getId());
+                if (Objects.isNull(workHotDb)) {
+                    throw new BaseRuntimeException("热点不存在");
+                }
+                updateIds.add(v.getId());
             }
-        }
-        WorkHot workHot = BeanUtil.copyProperties(dto, WorkHot.class, "content", "fodderId");
-        workHot.setContent(JSON.toJSONString(dto.getContent()));
-        workHot.setFodderId(JSON.toJSONString(dto.getFodderId()));
-        if(Objects.nonNull(workHotDb)){
-            workHot.setId(workHotDb.getId());
+            WorkHot workHot = BeanUtil.copyProperties(v, WorkHot.class, "content", "fodderId");
+            workHot.setContent(JSON.toJSONString(v.getContent()));
+            workHot.setFodderId(JSON.toJSONString(v.getFodderId()));
+            if (Objects.nonNull(workHotDb)) {
+                workHot.setId(workHotDb.getId());
+            }
+            return workHot;
+        }).collect(Collectors.toList());
+
+        this.saveOrUpdateBatch(saveList);
+
+        List<Long> deleteIds = dbHotMap.keySet().stream().filter(v -> CollUtil.isEmpty(updateIds) || !updateIds.contains(v)).collect(Collectors.toList());
+        if(CollUtil.isNotEmpty(deleteIds)){
+            this.removeByIds(deleteIds);
         }
 
-        this.saveOrUpdate(workHot);
+        List<WorkHotVO> result = saveList.stream().map(v -> {
+            WorkHotVO vo = BeanUtil.copyProperties(v, WorkHotVO.class, "content", "fodderId");
+            vo.setContent(JSON.parseObject(v.getContent()));
+            vo.setFodderId(JSON.parseArray(v.getFodderId()));
+            return vo;
+        }).collect(Collectors.toList());
 
-        WorkHotVO vo = BeanUtil.copyProperties(workHot, WorkHotVO.class, "content", "fodderId");
-        vo.setContent(dto.getContent());
-        vo.setFodderId(dto.getFodderId());
-        return vo;
+        return result;
     }
 
     @Override
@@ -66,4 +88,9 @@ public class WorkHotServiceImpl extends ServiceImpl<WorkHotMapper, WorkHot> impl
     public List<WorkHot> listByWorkId(String workId) {
         return this.list(new LambdaQueryWrapper<WorkHot>().eq(WorkHot::getWorkId, workId));
     }
+
+    @Override
+    public void deleteByNavigationIds(List<Long> navigationIds) {
+        this.remove(new LambdaQueryWrapper<WorkHot>().in(WorkHot::getNavigationId, navigationIds));
+    }
 }

+ 10 - 0
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkNavigationServiceImpl.java

@@ -8,11 +8,13 @@ import com.gis.domain.entity.WorkNavigationEntity;
 import com.gis.domain.vo.WorkNavigationVo;
 import com.gis.mapper.WorkNavigationMapper;
 import com.gis.service.WorkNavigationService;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 作品导航表 服务实现类
@@ -67,4 +69,12 @@ public class WorkNavigationServiceImpl extends ServiceImpl<WorkNavigationMapper,
     public void reSetFistSceneByWorkId(String workId) {
         this.update(new LambdaUpdateWrapper<WorkNavigationEntity>().set(WorkNavigationEntity::getIsFirstScene, 0).eq(WorkNavigationEntity::getWorkId, workId));
     }
+
+    @Override
+    public List<Long> getDeleteIdList(String workId, List<Long> ids) {
+        return this.list(new LambdaQueryWrapper<WorkNavigationEntity>()
+                .select(WorkNavigationEntity::getId)
+                .eq(WorkNavigationEntity::getWorkId, workId)
+                .notIn(WorkNavigationEntity::getId, ids)).stream().map(v->v.getId()).collect(Collectors.toList());
+    }
 }

+ 89 - 15
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkNavigationSettingServiceImpl.java

@@ -9,16 +9,14 @@ import cn.hutool.core.lang.tree.TreeUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.gis.common.constant.NavigationTypeEnum;
 import com.gis.common.exception.BaseRuntimeException;
-import com.gis.domain.dto.AddWorkNavigationSceneDTO;
-import com.gis.domain.dto.MoveWorkNavigationDTO;
-import com.gis.domain.dto.WorkNavigationDTO;
-import com.gis.domain.dto.WorkNavigationSettingDto;
+import com.gis.domain.dto.*;
+import com.gis.domain.entity.WorkEntity;
 import com.gis.domain.entity.WorkNavigationEntity;
 import com.gis.domain.vo.WorkNavigationVo;
 import com.gis.domain.vo.WorkSceneVo;
-import com.gis.service.WorkNavigationService;
-import com.gis.service.WorkNavigationSettingService;
+import com.gis.service.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestParam;
 
@@ -30,6 +28,19 @@ public class WorkNavigationSettingServiceImpl implements WorkNavigationSettingSe
 
     @Autowired
     private WorkNavigationService workNavigationService;
+    @Autowired
+    private WorkCustomMaskService workCustomMaskService;
+    @Autowired
+    private WorkVisualAngleService workVisualAngleService;
+    @Autowired
+    private WorkExplanationService workExplanationService;
+    @Autowired
+    private KrpanoService krpanoService;
+    @Lazy
+    @Autowired
+    private WorkService workService;
+    @Autowired
+    private WorkHotService workHotService;
 
     @Override
     public WorkNavigationVo addGroup(WorkNavigationDTO dto) {
@@ -99,24 +110,33 @@ public class WorkNavigationSettingServiceImpl implements WorkNavigationSettingSe
     }
 
     @Override
-    public WorkSceneVo setInitialScene(long id, String workId) {
+    public WorkSceneVo setInitialScene(InitialSceneDTO dto) {
 
-        WorkNavigationEntity workNavigationEntity = workNavigationService.getById(id);
-        if(Objects.isNull(workNavigationEntity) || !workId.equals(workNavigationEntity.getWorkId())){
-            throw new BaseRuntimeException("查询不到场景");
+        WorkNavigationEntity workNavigationEntity = null;
+        if("add".equals(dto.getOperType())){
+            if(Objects.isNull(dto.getNavigationId())){
+                throw new BaseRuntimeException("navigationId不能为空");
+            }
+            workNavigationEntity = workNavigationService.getById(dto.getNavigationId());
+            if(Objects.isNull(workNavigationEntity) || !dto.getWorkId().equals(workNavigationEntity.getWorkId())){
+                throw new BaseRuntimeException("查询不到场景");
+            }
         }
 
         //重置初始场景
-        workNavigationService.reSetFistSceneByWorkId(workId);
+        workNavigationService.reSetFistSceneByWorkId(dto.getWorkId());
 
-        workNavigationEntity.setIsFirstScene(1);
-        workNavigationService.updateById(workNavigationEntity);
+        if("add".equals(dto.getOperType())){
+            workNavigationEntity.setIsFirstScene(1);
+            workNavigationService.updateById(workNavigationEntity);
+            return BeanUtil.toBean(workNavigationEntity, WorkSceneVo.class);
+        }
 
-        return BeanUtil.toBean(workNavigationEntity, WorkSceneVo.class);
+        return null;
     }
 
     @Override
-    public List<Tree<Long>> queryNavigation(String workId) {
+    public List<Tree<Long>> queryNavigation(String workId, Map<Long, String> idSidMap) {
         List<WorkNavigationEntity> workNavigationEntities = workNavigationService.selectByWorkId(workId);
 
         // 0表示最顶层的id是0
@@ -131,6 +151,9 @@ public class WorkNavigationSettingServiceImpl implements WorkNavigationSettingSe
                 extra.put("sceneCode", v.getSceneCode());
                 extra.put("version", v.getVersion());
                 extra.put("icon", v.getIcon());
+                if(CollUtil.isNotEmpty(idSidMap)){
+                    extra.put("sid", idSidMap.get(v.getId()));
+                }
             }
             return node;
         }).collect(Collectors.toList());
@@ -197,4 +220,55 @@ public class WorkNavigationSettingServiceImpl implements WorkNavigationSettingSe
         WorkSceneVo vo = BeanUtil.toBean(workNavigationEntity, WorkSceneVo.class);
         return vo;
     }
+
+    @Override
+    public List<Tree<Long>> saveNavigation(BatchSaveWorkNavigationDTO dto) {
+
+        String workId = dto.getWorkId();
+        List<SaveWorkNavigationDTO> list = dto.getList();
+        list.stream().forEach(v->{
+            if (Objects.isNull(v.getParentId())) v.setParentId(0L);
+        });
+        List<Long> navigationIds = new ArrayList<>();
+        Map<Long, String> idSidMap = new HashMap<>();
+        for (SaveWorkNavigationDTO saveWorkNavigationDTO : list) {
+            this.saveNavigationHandler(navigationIds, dto.getWorkId(), saveWorkNavigationDTO, idSidMap);
+        }
+
+        List<Long> deleteIdList = workNavigationService.getDeleteIdList(workId, navigationIds);
+        if(CollUtil.isNotEmpty(deleteIdList)){
+            workNavigationService.removeByIds(deleteIdList);
+            //删除导航同时去删除遮罩、视角、讲解
+            workCustomMaskService.deleteByNavigationIds(deleteIdList);
+            workVisualAngleService.deleteByNavigationIds(deleteIdList);
+            workExplanationService.deleteByNavigationIds(deleteIdList);
+            workHotService.deleteByNavigationIds(deleteIdList);
+        }
+
+        //创建tour.xml
+        WorkEntity workEntity = workService.getById(dto.getWorkId());
+        krpanoService.saveTourXml(workEntity);
+
+        List<Tree<Long>> navigationTrees = this.queryNavigation(workId, idSidMap);
+
+        return navigationTrees;
+
+    }
+
+    private void saveNavigationHandler(List<Long> navigationIds, String workId, SaveWorkNavigationDTO navigation, Map<Long, String> idSidMap){
+        String type = navigation.getType();
+        WorkNavigationEntity entity = BeanUtil.toBean(navigation, WorkNavigationEntity.class);
+        entity.setWorkId(workId);
+        workNavigationService.saveOrUpdate(entity);
+        navigation.setId(entity.getId());
+        idSidMap.put(entity.getId(), navigation.getSid());
+        navigationIds.add(entity.getId());
+        List<SaveWorkNavigationDTO> childrens = navigation.getChildren();
+        if(CollUtil.isNotEmpty(childrens)){
+            for (SaveWorkNavigationDTO children : childrens) {
+                children.setParentId(entity.getId());
+                this.saveNavigationHandler(navigationIds, workId, children, idSidMap);
+            }
+        }
+    }
 }

+ 114 - 72
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkServiceImpl.java

@@ -1,5 +1,7 @@
 package com.gis.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -27,6 +29,8 @@ import com.gis.domain.entity.ScenePanoEntity;
 import com.gis.domain.entity.WorkEntity;
 import com.gis.domain.entity.WorkHotsFodderEntity;
 import com.gis.domain.vo.ReportWorkVo;
+import com.gis.domain.vo.WorkNavigationVo;
+import com.gis.domain.vo.WorkVo;
 import com.gis.mapper.*;
 import com.gis.oss.util.FileAndOssUtil;
 import com.gis.oss.util.FileUtils;
@@ -56,6 +60,7 @@ import java.io.IOException;
 import java.time.LocalDate;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
 
 
 /**
@@ -116,9 +121,22 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper,WorkEntity> implemen
     ScenePanoService scenePanoService;
     @Autowired
     RabbitMqProducerUtil rabbitMqProducer;
+
+    @Autowired
+    private WorkNavigationSettingService workNavigationSettingService;
+
+    @Lazy
+    @Autowired
+    private WorkNavigationService workNavigationService;
+
+    @Autowired
+    private KrpanoService krpanoService;
+
+
     @Value("${queue.relics-update-name-queue:#{null}}")
     String relicsUpdateNameQueue;
 
+
     @Override
     public Result search(AgePageDto param, boolean isAdmin) {
         PageHelper.startPage(param.getPageNum(), param.getPageSize(), true);
@@ -178,19 +196,23 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper,WorkEntity> implemen
 
 
     @Override
-    public Result<WorkEntity> entityAdd() {
+    public Result<WorkEntity> entityAdd(String workId) {
+
+        WorkEntity entity = null;
+        if(StrUtil.isEmpty(workId)){
+            entity = new WorkEntity();
+            entity.setId(SnowFlakeUUidUtils.getUuid("WK"));
+            entity.setUserId(userRequest.getUserNameForToken());
+            entity.setStatus(0);
+            Date date = new Date();
+            entity.setCreateTime(date);
+            entity.setUpdateTime(date);
+            this.save(entity);
+        }else{
+            entity = this.getById(workId);
+        }
 
 
-        WorkEntity entity = new WorkEntity();
-        entity.setId(SnowFlakeUUidUtils.getUuid("WK"));
-        entity.setUserId(userRequest.getUserNameForToken());
-        entity.setStatus(0);
-        Date date = new Date();
-        entity.setCreateTime(date);
-        entity.setUpdateTime(date);
-
-        this.save(entity);
-
         String id = entity.getId();
         log.info("创建对象完成: {}", id);
 
@@ -278,7 +300,9 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper,WorkEntity> implemen
         // 删除服务器器文件
         fileUtils.del(entity.getId());
 
-        this.updateById(entity);
+//        this.updateById(entity);
+
+        this.removeById(id);
 
         // 删除redis
         redisUtil.delete(RedisConstant.WORK_ID + id);
@@ -504,7 +528,7 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper,WorkEntity> implemen
         List<FodderEntity> list = fodderService.batchBySceneCodes(getSceneCodesList(scenes));
 
         // 读取tour.xml模板
-        String baseTour = getBaseTour();
+        String baseTour = krpanoService.getBaseTour();
         StringBuilder builder = new StringBuilder();
         builder.append(baseTour).append("\r\n");
         for (FodderEntity entity : list) {
@@ -543,7 +567,7 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper,WorkEntity> implemen
         List<FodderEntity> list = fodderService.batchBySceneCodes(getSceneCodesList(scenes));
 
         // 读取tour.xml模板
-        String baseTour = getBaseTour();
+        String baseTour = krpanoService.getBaseTour();
         StringBuilder builder = new StringBuilder();
         builder.append(baseTour).append("\r\n");
         for (FodderEntity entity : list) {
@@ -567,13 +591,7 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper,WorkEntity> implemen
         log.info("tour.xml上传完成 : {}", ossKeyPath);
     }
 
-    private String getBaseTour(){
-        String baseTourPath = configConstant.serverBasePath + "baseData/tour.xml";
-        String s = FileUtil.readString(baseTourPath, "utf-8");
-        // 结束标签置空, 方便操作
-        s = s.replace("</krpano>", "");
-        return s;
-    }
+
 
 
     /**
@@ -1235,7 +1253,7 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper,WorkEntity> implemen
     }
 
     @Override
-    public Result addWork(WorkAddDto workAddDto) {
+    public Result<WorkVo> addWork(WorkAddDto workAddDto) {
 
         WorkEntity entity = new WorkEntity();
         entity.setId(SnowFlakeUUidUtils.getUuid("WK"));
@@ -1244,63 +1262,87 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper,WorkEntity> implemen
         Date date = new Date();
         entity.setCreateTime(date);
         entity.setUpdateTime(date);
-        entity.setIcon(workAddDto.getIcon());
-
+        entity.setName("无标题");
+        entity.setIcon(workAddDto.getSceneDTOList().get(0).getIcon());
         String id = entity.getId();
         log.info("创建对象完成: {}", id);
 
         // 创建二维码、二维码url
-        String shareUrlZH = configConstant.domain4dKK + "/panorama/showMobile.html?lang=zh&id=" + id;
-        String shareUrlEN = configConstant.domain4dKK + "/panorama/showMobile.html?lang=en&id=" + id;
-        String qrZHCode = qrCodeUtils.generateLogoQrCode(shareUrlZH, configConstant.serverBasePath, configConstant.ossBasePath, configConstant.ossDomain, id,"zh");
-        String qrENCode = qrCodeUtils.generateLogoQrCode(shareUrlEN, configConstant.serverBasePath, configConstant.ossBasePath, configConstant.ossDomain, id,"en");
-        entity.setQrCode(qrZHCode);
-        entity.setQrENCode(qrENCode);
+//        String shareUrlZH = configConstant.domain4dKK + "/panorama/showMobile.html?lang=zh&id=" + id;
+//        String shareUrlEN = configConstant.domain4dKK + "/panorama/showMobile.html?lang=en&id=" + id;
+//        String qrZHCode = qrCodeUtils.generateLogoQrCode(shareUrlZH, configConstant.serverBasePath, configConstant.ossBasePath, configConstant.ossDomain, id,"zh");
+//        String qrENCode = qrCodeUtils.generateLogoQrCode(shareUrlEN, configConstant.serverBasePath, configConstant.ossBasePath, configConstant.ossDomain, id,"en");
+//        entity.setQrCode(qrZHCode);
+//        entity.setQrENCode(qrENCode);
         this.save(entity);
 
-        WorkOpeningTipEntity workOpeningTipEntity=new WorkOpeningTipEntity();
-        workOpeningTipEntity.setWorkId(entity.getId());
-        workOpeningTipEntity.setIsRemind(1);
-        workOpeningTipEntity.setRemindTime(1);
-        workOpeningTipService.save(workOpeningTipEntity);
-
-        WorkOpeningAnimationEntity workOpeningAnimationEntity=new WorkOpeningAnimationEntity();
-        workOpeningAnimationEntity.setIsShowOpeningAnimation(true);
-        workOpeningAnimationEntity.setOpeningAnimationType(1);
-        workOpeningAnimationEntity.setWorkId(entity.getId());
-        workOpeningAnimationService.save(workOpeningAnimationEntity);
-
-
-        WorkCoverTypeEntity workCoverTypeEntity=new WorkCoverTypeEntity();
-        workCoverTypeEntity.setWorkId(entity.getId());
-        workCoverTypeService.save(workCoverTypeEntity);
-
-        WorkLogoEntity workLogoEntity=new WorkLogoEntity();
-        workLogoEntity.setWorkId(entity.getId());
-        workLogoService.save(workLogoEntity);
-
-        WorkCustomMaskEntity earth=new WorkCustomMaskEntity();
-        earth.setWorkId(entity.getId());
-        earth.setType("earth");
-        workCustomMaskService.save(earth);
-        WorkCustomMaskEntity sky=new WorkCustomMaskEntity();
-        sky.setWorkId(entity.getId());
-        sky.setType("sky");
-        workCustomMaskService.save(sky);
-
-        WorkCustomButtonEntity phone=new WorkCustomButtonEntity();
-        phone.setWorkId(entity.getId());
-        phone.setName("电话");
-        phone.setType("phone");
-        workCustomButtonService.save(phone);
-
-        WorkCustomButtonEntity link=new WorkCustomButtonEntity();
-        link.setWorkId(entity.getId());
-        link.setName("链接");
-        link.setType("link");
-        workCustomButtonService.save(link);
+        //创建tour.xml
+        krpanoService.saveTourXml(entity);
+
+        //初始化数据库
+        this.initData(workAddDto, entity);
+
+        return Result.success(BeanUtil.toBean(entity, WorkVo.class));
+    }
+
+    private void initData(WorkAddDto workAddDto, WorkEntity entity){
+
+        //添加默认分组
+        WorkNavigationDTO defaultGroup = WorkNavigationDTO.builder().parentId(0L).name("一级分组").sort(0).build();
+        defaultGroup.setWorkId(entity.getId());
+        WorkNavigationVo workNavigationVo = workNavigationSettingService.addGroup(defaultGroup);
+        List<WorkNavigationEntity> workNavigationEntities = BeanUtil.copyToList(workAddDto.getSceneDTOList(), WorkNavigationEntity.class);
+        AtomicInteger sort = new AtomicInteger(0);
+        workNavigationEntities.stream().forEach(v->{
+            v.setParentId(workNavigationVo.getId());
+            v.setWorkId(entity.getId());
+            v.setSort(sort.getAndAdd(1));
+        });
+        workNavigationService.saveBatch(workNavigationEntities);
+
+        //初始化遮罩数据
+        this.initMaskData(workNavigationEntities);
+
+        //初始化自定义按钮
+        this.initCustomButtom(entity.getId());
+    }
+
+    private void initMaskData(List<WorkNavigationEntity> workNavigations){
+        List<WorkCustomMaskEntity> list = new ArrayList<>();
+        workNavigations.stream().forEach(v->{
+            WorkCustomMaskEntity sky = new WorkCustomMaskEntity();
+            sky.setWorkId(v.getWorkId());
+            sky.setNavigationId(v.getId());
+            sky.setIsShow(true);
+            sky.setType("sky");
+            sky.setAntidistorted(true);
+            sky.setScale(1D);
+            list.add(sky);
+
+            WorkCustomMaskEntity earth = BeanUtil.toBean(sky, WorkCustomMaskEntity.class);
+            earth.setType("earth");
+            earth.setIsShow(false);
+            list.add(earth);
+        });
+        if(CollUtil.isNotEmpty(list)){
+            workCustomMaskService.saveBatch(list);
+        }
+    }
+
+    private void initCustomButtom(String workId){
+        WorkCustomButtonEntity phoneButton = new WorkCustomButtonEntity();
+        phoneButton.setWorkId(workId);
+        phoneButton.setIsShow(0);
+        phoneButton.setName("电话");
+        phoneButton.setType("phone");
+        phoneButton.setOpenMethod("_self");
+        phoneButton.setCreateTime(new Date());
+
+        WorkCustomButtonEntity linkButton = BeanUtil.toBean(phoneButton, WorkCustomButtonEntity.class);
+        linkButton.setName("链接");
+
+        workCustomButtonService.saveBatch(Arrays.asList(phoneButton, linkButton));
 
-        return Result.success(entity);
     }
 
     @Override

+ 27 - 4
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkViewServiceImpl.java

@@ -2,6 +2,7 @@ package com.gis.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.copier.CopyOptions;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.tree.Tree;
 import com.alibaba.fastjson.JSON;
 import com.gis.common.util.Result;
@@ -11,8 +12,7 @@ import com.gis.service.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -42,6 +42,8 @@ public class WorkViewServiceImpl implements WorkViewService {
     private WorkHotService workHotService;
     @Autowired
     private WorkCustomMaskService workCustomMaskService;
+    @Autowired
+    private WorkNavigationService workNavigationService;
 
     @Override
     public WorkViewVo getViewInfo(String workId) {
@@ -66,13 +68,19 @@ public class WorkViewServiceImpl implements WorkViewService {
         List<WorkCustomButtonEntity> workCustomButtonList = workCustomButtonService.listByWorkId(workId);
         List<WorkCustomButtonVo> workCustomButtonVos = BeanUtil.copyToList(workCustomButtonList, WorkCustomButtonVo.class);
 
-        List<Tree<Long>> navigationTrees = workNavigationSettingService.queryNavigation(workId);
+        List<Tree<Long>> navigationTrees = workNavigationSettingService.queryNavigation(workId, null);
 
         WorkSceneVo initialScene = workNavigationSettingService.getInitialScene(workId);
 
         //视角
         List<WorkVisualAngle> workVisualAngles = workVisualAngleService.listByWorkId(workId);
         List<WorkVisualAngleVo> workVisualAngleVos = BeanUtil.copyToList(workVisualAngles, WorkVisualAngleVo.class);
+        List<WorkNavigationEntity> workNavigationEntities = workNavigationService.selectScenes(workId);
+        Map<Long, String> iconMap = workNavigationEntities.stream().collect(Collectors.toMap(WorkNavigationEntity::getId, WorkNavigationEntity::getIcon));
+        if(CollUtil.isNotEmpty(iconMap)){
+            workVisualAngleVos.stream().forEach(v->v.setIcon(iconMap.get(v.getNavigationId())));
+        }
+
 
         //讲解
         List<WorkExplanation> workExplanations = workExplanationService.listByWorkId(workId);
@@ -91,6 +99,21 @@ public class WorkViewServiceImpl implements WorkViewService {
         //遮罩
         List<WorkCustomMaskEntity> workCustomMaskEntities = workCustomMaskService.listByWorkId(workId);
         List<WorkCustomMaskVO> workCustomMaskVOS = BeanUtil.copyToList(workCustomMaskEntities, WorkCustomMaskVO.class);
+        Map<Long, NavigationMaskMapVO> customMaskMap = new HashMap<>();
+        workCustomMaskVOS.stream().forEach(v->{
+            NavigationMaskMapVO navigationMaskMapVO = customMaskMap.get(v.getNavigationId());
+            if(Objects.isNull(navigationMaskMapVO)){
+                navigationMaskMapVO = new NavigationMaskMapVO();
+                navigationMaskMapVO.setNavigationId(v.getNavigationId());
+                customMaskMap.put(v.getNavigationId(), navigationMaskMapVO);
+            }
+            Map<String, WorkCustomMaskVO> data = navigationMaskMapVO.getData();
+            if(Objects.isNull(data)){
+                data = new HashMap<>();
+                navigationMaskMapVO.setData(data);
+            }
+            data.put(v.getType(), v);
+        });
 
         return WorkViewVo.builder()
                 .workId(workId)
@@ -106,7 +129,7 @@ public class WorkViewServiceImpl implements WorkViewService {
                 .workVisualAngleList(workVisualAngleVos)
                 .workExplanationList(workExplanationVos)
                 .workHotList(workHotVOS)
-                .workCustomMaskList(workCustomMaskVOS)
+                .workCustomMaskList(new ArrayList<>(customMaskMap.values()))
                 .build();
     }
 }

+ 36 - 1
720yun_fd_manage/gis_service/src/main/java/com/gis/service/impl/WorkVisualAngleServiceImpl.java

@@ -6,13 +6,21 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gis.domain.dto.BatchSaveVisualAngleDTO;
 import com.gis.domain.dto.WorkVisualAngleDTO;
+import com.gis.domain.entity.WorkExplanation;
+import com.gis.domain.entity.WorkNavigationEntity;
 import com.gis.domain.entity.WorkVisualAngle;
 import com.gis.domain.vo.WorkVisualAngleVo;
 import com.gis.mapper.WorkVisualAngleMapper;
+import com.gis.service.WorkNavigationService;
+import com.gis.service.WorkNavigationSettingService;
 import com.gis.service.WorkVisualAngleService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -26,6 +34,9 @@ import java.util.stream.Collectors;
 @Service
 public class WorkVisualAngleServiceImpl extends ServiceImpl<WorkVisualAngleMapper, WorkVisualAngle> implements WorkVisualAngleService {
 
+    @Autowired
+    private WorkNavigationService navigationService;
+
     @Override
     public List<WorkVisualAngleVo> batchSaveVisualAngle(BatchSaveVisualAngleDTO dto) {
         List<WorkVisualAngleDTO> list = dto.getList();
@@ -37,11 +48,35 @@ public class WorkVisualAngleServiceImpl extends ServiceImpl<WorkVisualAngleMappe
         workVisualAngles.stream().forEach(v-> v.setWorkId(dto.getWorkId()));
         this.saveOrUpdateBatch(workVisualAngles);
 
-        return BeanUtil.copyToList(workVisualAngles, WorkVisualAngleVo.class);
+        List<WorkVisualAngleVo> workVisualAngleVos = BeanUtil.copyToList(workVisualAngles, WorkVisualAngleVo.class);
+        Map<Long, WorkVisualAngleVo> map = workVisualAngleVos.stream().collect(Collectors.toMap(WorkVisualAngleVo::getNavigationId, v -> v));
+
+        //修改导航场景的icon
+        Map<Long, String> navigationIconMap = list.stream().collect(Collectors.toMap(WorkVisualAngleDTO::getNavigationId, WorkVisualAngleDTO::getIcon));
+        List<WorkNavigationEntity> workNavigationEntities = navigationService.listByIds(navigationIconMap.keySet());
+        if(CollUtil.isNotEmpty(workNavigationEntities)){
+            workNavigationEntities.stream().forEach(v->{
+                v.setIcon(navigationIconMap.get(v.getId()));
+                v.setUpdateTime(null);
+                WorkVisualAngleVo workVisualAngleVo = map.get(v.getId());
+                if(Objects.nonNull(workVisualAngleVo)){
+                    workVisualAngleVo.setIcon(navigationIconMap.get(v.getId()));
+                }
+            });
+            navigationService.updateBatchById(workNavigationEntities);
+        }
+
+
+        return workVisualAngleVos;
     }
 
     @Override
     public List<WorkVisualAngle> listByWorkId(String workId) {
         return this.list(new LambdaQueryWrapper<WorkVisualAngle>().eq(WorkVisualAngle::getWorkId, workId));
     }
+
+    @Override
+    public void deleteByNavigationIds(List<Long> navigationIds) {
+        this.remove(new LambdaQueryWrapper<WorkVisualAngle>().in(WorkVisualAngle::getNavigationId, navigationIds));
+    }
 }

+ 3 - 2
720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/WebController.java

@@ -12,6 +12,7 @@ import com.gis.common.constant.RedisConstant;
 import com.gis.common.httpclient.FdkkClient;
 import com.gis.common.util.RedisUtil;
 import com.gis.common.util.Result;
+import com.gis.domain.dto.BaseIdDto;
 import com.gis.domain.dto.WorkIdDto;
 import com.gis.domain.dto.WorkPwdDto;
 import com.gis.domain.entity.WorkEntity;
@@ -166,8 +167,8 @@ public class WebController extends BaseController {
 
     @ApiOperation(value = "混合查下场景码或者作品id" , position = 4)
     @PostMapping("getIdInfo")
-    public Result getIdInfo(@RequestBody WorkIdDto workIdDto) {
-        WorkEntity workEntity=workService.findByIdOrNum(workIdDto.getWorkId());
+    public Result getIdInfo(@RequestBody BaseIdDto workIdDto) {
+        WorkEntity workEntity=workService.findByIdOrNum(workIdDto.getId());
         WorkIdVO workIdVO=new WorkIdVO();
         BeanUtil.copyProperties(workEntity,workIdVO);
         return Result.success(workIdVO);

+ 9 - 7
720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/WorkController.java

@@ -12,11 +12,11 @@ import com.gis.common.util.RedisUtil;
 import com.gis.common.util.Result;
 import com.gis.domain.dto.*;
 import com.gis.domain.entity.WorkEntity;
+import com.gis.domain.vo.WorkVo;
 import com.gis.service.FodderService;
 import com.gis.service.WorkService;
 import com.github.pagehelper.PageHelper;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -28,6 +28,7 @@ import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 
@@ -77,17 +78,18 @@ public class WorkController extends BaseController {
      */
     @ApiOperation(value = "新增(空对象)", position = 1)
     @PostMapping("add")
-    public Result<WorkEntity> add() {
-        return workService.entityAdd();
+    public Result<WorkEntity> add(@RequestBody Map<String, String> params) {
+        String workId = params.get("workId");
+        return workService.entityAdd(workId);
     }
 
     /**
      * 创建一个基础someData.json
-     * @return
+     * @return 作品id
      */
-    @ApiOperation(value = "新增作品,初始化数据", position = 1)
+    @ApiOperation(value = "创建作品", position = 1, notes = "返回参数中的data为作品id")
     @PostMapping("addWork")
-    public Result<WorkEntity> addWork(@RequestBody WorkAddDto workAddDto) {
+    public Result<WorkVo> addWork(@RequestBody WorkAddDto workAddDto) {
         return workService.addWork(workAddDto);
     }
     /**

+ 11 - 7
720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/WorkEditNavigationController.java

@@ -2,14 +2,12 @@ package com.gis.web.controller;
 
 import com.gis.common.constant.ErrorEnum;
 import com.gis.common.util.Result;
-import com.gis.domain.dto.AddWorkNavigationSceneDTO;
-import com.gis.domain.dto.WorkBaseSettingDto;
-import com.gis.domain.dto.WorkNavigationDTO;
-import com.gis.domain.dto.WorkNavigationSettingDto;
+import com.gis.domain.dto.*;
 import com.gis.service.WorkBaseSettingService;
 import com.gis.service.WorkNavigationSettingService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
@@ -67,8 +65,8 @@ public class WorkEditNavigationController {
     @Transactional(rollbackFor = Exception.class)
     @ApiOperation(value = "设置初始场景", position = 1)
     @PostMapping("/scene/initial/set")
-    public Result setInitialScene(@RequestParam("id") long id, @RequestParam("workId") String workId){
-        return  Result.success(workNavigationSettingService.setInitialScene(id, workId));
+    public Result setInitialScene(@RequestBody @Valid InitialSceneDTO dto){
+        return  Result.success(workNavigationSettingService.setInitialScene(dto));
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -81,7 +79,7 @@ public class WorkEditNavigationController {
     @ApiOperation(value = "查询导航树", position = 1)
     @GetMapping("/navigation/query")
     public Result queryNavigation(@RequestParam("workId") String workId){
-        return  Result.success(workNavigationSettingService.queryNavigation(workId));
+        return  Result.success(workNavigationSettingService.queryNavigation(workId, null));
     }
 
     @ApiOperation(value = "移动导航", position = 1)
@@ -91,5 +89,11 @@ public class WorkEditNavigationController {
         return  Result.success();
     }
 
+    @ApiOperation(value = "保存导航", position = 1)
+    @PostMapping("/navigation/save")
+    public Result saveNavigation(@RequestBody @Valid BatchSaveWorkNavigationDTO dto){
+        return  Result.success(workNavigationSettingService.saveNavigation(dto));
+    }
+
 
 }

+ 3 - 1
720yun_fd_manage/gis_web/src/main/java/com/gis/web/controller/WorkHotController.java

@@ -3,6 +3,7 @@ package com.gis.web.controller;
 import com.gis.common.util.Result;
 import com.gis.common.util.ResultData;
 import com.gis.domain.dto.DeleteWorkHotDTO;
+import com.gis.domain.dto.SaveWorkHotDTO;
 import com.gis.domain.dto.WorkHotDTO;
 import com.gis.domain.vo.WorkHotVO;
 import com.gis.service.WorkHotService;
@@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * <p>
@@ -41,7 +43,7 @@ public class WorkHotController {
     @Transactional(rollbackFor = Exception.class)
     @ApiOperation(value = "保存", position = 1)
     @PostMapping("/save")
-    public Result<WorkHotVO> save(@RequestBody @Valid WorkHotDTO dto){
+    public Result<List<WorkHotVO>> save(@RequestBody @Valid SaveWorkHotDTO dto){
         return Result.success(workHotService.save(dto));
     }