Explorar o código

文件id存到部件/建筑物记录里面

wuweihao %!s(int64=5) %!d(string=hai) anos
pai
achega
759997f3cb
Modificáronse 30 ficheiros con 634 adicións e 91 borrados
  1. 21 1
      README.md
  2. 2 0
      museum_application/src/main/resources/application-dev.properties
  3. 57 0
      museum_application/src/main/resources/application-sit.properties
  4. 16 3
      museum_common/src/main/java/com/museum/common/util/AliyunOssUtil.java
  5. 17 3
      museum_common/src/main/java/com/museum/common/util/FileUtils.java
  6. 5 6
      museum_dao/src/main/java/com/museum/dao/BuildingMapper.java
  7. 3 1
      museum_dao/src/main/java/com/museum/dao/PartMapper.java
  8. 37 0
      museum_dao/src/main/java/com/museum/dao/Provide/PartProvider.java
  9. 38 0
      museum_dao/src/main/java/com/museum/dao/Provide/RoamProvider.java
  10. 3 2
      museum_dao/src/main/java/com/museum/dao/RoamMapper.java
  11. 18 1
      museum_domain/src/main/java/com/museum/domain/entity/BuildingEntity.java
  12. 3 1
      museum_domain/src/main/java/com/museum/domain/entity/PartEntity.java
  13. 0 1
      museum_domain/src/main/java/com/museum/domain/entity/UserEntity.java
  14. 6 3
      museum_domain/src/main/java/com/museum/domain/request/BuildingRequest.java
  15. 4 2
      museum_domain/src/main/java/com/museum/domain/request/PartRequest.java
  16. 44 0
      museum_domain/src/main/java/com/museum/domain/response/BuildingResponse.java
  17. 64 0
      museum_domain/src/main/java/com/museum/domain/response/PartResponse.java
  18. 51 0
      museum_domain/src/main/java/com/museum/domain/response/RoamResponse.java
  19. 2 3
      museum_service/src/main/java/com/museum/service/BuildingService.java
  20. 3 0
      museum_service/src/main/java/com/museum/service/PartService.java
  21. 2 1
      museum_service/src/main/java/com/museum/service/RoamService.java
  22. 6 0
      museum_service/src/main/java/com/museum/service/impl/BuildingServiceImpl.java
  23. 6 0
      museum_service/src/main/java/com/museum/service/impl/PartServiceImpl.java
  24. 5 1
      museum_service/src/main/java/com/museum/service/impl/RoamServiceImpl.java
  25. 41 21
      museum_web/src/main/java/com/museum/web/controller/BaseController.java
  26. 23 14
      museum_web/src/main/java/com/museum/web/controller/BuildingController.java
  27. 135 0
      museum_web/src/main/java/com/museum/web/controller/CommonController.java
  28. 11 21
      museum_web/src/main/java/com/museum/web/controller/PartController.java
  29. 3 6
      museum_web/src/main/java/com/museum/web/controller/RoamController.java
  30. 8 0
      pom.xml

+ 21 - 1
README.md

@@ -1,3 +1,23 @@
 # sh_museum
 
-上海历史博物馆
+上海历史博物馆
+
+
+
+# sit
+    server:
+    192.168.0.44
+    root
+    hehe0618
+    port:2222
+    
+    mysql:
+        root
+        4dkk2020test%
+
+    tomcat:
+    /root/user/java/tomcat_sh_museum_8100
+    
+    http://192.168.0.44:8100/doc.html
+    192.1680.44:8100/test/test.html
+    

+ 2 - 0
museum_application/src/main/resources/application-dev.properties

@@ -54,4 +54,6 @@ logging.level.com.museum=debug
 
 # \u4E0A\u4F20\u6587\u4EF6\u4FDD\u5B58\u8DEF\u5F84
 output.file.path=F:\\test\\sh_museum_cms\\
+oss.file.path=sh_museum
+oss.domain=http://4dkankan.oss-cn-shenzhen.aliyuncs.com/
 

+ 57 - 0
museum_application/src/main/resources/application-sit.properties

@@ -0,0 +1,57 @@
+
+#DB
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.druid.url=jdbc:mysql://localhost:3306/sh_museum_cms?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
+spring.datasource.druid.username=root
+spring.datasource.druid.password=4dkk2020test%
+
+
+# \u521D\u59CB\u8FDE\u63A5\u6570
+spring.datasource.druid.initial-size=5
+# \u6700\u5C0F\u8FDE\u63A5\u6C60\u6570\u91CF
+spring.datasource.druid.min-idle=10
+# \u6700\u5927\u8FDE\u63A5\u6C60\u6570\u91CF
+spring.datasource.druid.max-active=20
+# \u914D\u7F6E\u83B7\u53D6\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u7684\u65F6\u95F4
+spring.datasource.druid.max-wait=60000
+# \u914D\u7F6E\u95F4\u9694\u591A\u4E45\u624D\u8FDB\u884C\u4E00\u6B21\u68C0\u6D4B\uFF0C\u68C0\u6D4B\u9700\u8981\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
+spring.datasource.druid.time-between-eviction-runs-millis=60000
+# \u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u6C60\u4E2D\u6700\u5C0F\u751F\u5B58\u7684\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
+spring.datasource.druid.min-evictable-idle-time-millis=30000
+# \u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u6C60\u4E2D\u6700\u5927\u751F\u5B58\u7684\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
+spring.datasource.druid.max-evictable-idle-time-millis=90000
+# \u914D\u7F6E\u68C0\u6D4B\u8FDE\u63A5\u662F\u5426\u6709\u6548
+spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
+spring.datasource.druid.test-while-idle=true
+spring.datasource.druid.test-on-borrow=false
+spring.datasource.druid.test-on-return=false
+spring.datasource.druid.web-stat-filter.enabled=true
+spring.datasource.druid.stat-view-servlet.enabled=true
+
+
+# Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u4E3A0\uFF09
+spring.redis.database=0
+spring.redis.host=127.0.0.1
+spring.redis.port=6379
+spring.redis.password=
+# \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4 \u5355\u4F4D ms\uFF08\u6BEB\u79D2\uFF09
+spring.redis.timeout=3000ms
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u9ED8\u8BA4\u503C\u4E5F\u662F8\u3002
+spring.redis.jedis.pool.max-idle=8
+#\u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u9ED8\u8BA4\u503C\u4E5F\u662F0\u3002
+spring.redis.jedis.pool.min-idle=0
+# \u5982\u679C\u8D4B\u503C\u4E3A-1\uFF0C\u5219\u8868\u793A\u4E0D\u9650\u5236\uFF1B\u5982\u679Cpool\u5DF2\u7ECF\u5206\u914D\u4E86maxActive\u4E2Ajedis\u5B9E\u4F8B\uFF0C\u5219\u6B64\u65F6pool\u7684\u72B6\u6001\u4E3Aexhausted(\u8017\u5C3D)\u3002
+spring.redis.jedis.pool.max-active=8
+# \u7B49\u5F85\u53EF\u7528\u8FDE\u63A5\u7684\u6700\u5927\u65F6\u95F4\uFF0C\u5355\u4F4D\u6BEB\u79D2\uFF0C\u9ED8\u8BA4\u503C\u4E3A-1\uFF0C\u8868\u793A\u6C38\u4E0D\u8D85\u65F6\u3002\u5982\u679C\u8D85\u8FC7\u7B49\u5F85\u65F6\u95F4\uFF0C\u5219\u76F4\u63A5\u629B\u51FAJedisConnectionException
+spring.redis.jedis.pool.max-wait=-1ms
+
+
+#log
+logging.path=/root/user/sh_museum_cms_log
+logging.config=classpath:logback-spring.xml
+logging.level.com.museum=debug
+
+# \u4E0A\u4F20\u6587\u4EF6\u4FDD\u5B58\u8DEF\u5F84
+output.file.path=/root/user/sh_museum_data//
+

+ 16 - 3
museum_common/src/main/java/com/museum/common/util/AliyunOssUtil.java

@@ -50,9 +50,12 @@ public class AliyunOssUtil {
         } catch (Exception e) {
         	log.error(e.toString()+key); 
         }
-    }  
-    
-   
+    }
+
+	/**
+	 * @param filePath  oss路径, oss会自动创建目录
+	 * @param key 原文件路径
+	 */
 	public static void upload(String filePath, String key) {
 		try {
 			File file = new File(filePath);
@@ -133,6 +136,9 @@ public class AliyunOssUtil {
     }
 
 
+
+
+
 	public static String upload5(String filePath, String key) {
 		PutObjectResult result = null;
 		try {
@@ -230,4 +236,11 @@ public class AliyunOssUtil {
 //		}
 //	}
 
+
+	@Test
+	public void testDel(){
+		String path = "sh_museum/image/20200606_170337375_0.jpg";
+		deleteFile(path);
+	}
+
 }

+ 17 - 3
museum_common/src/main/java/com/museum/common/util/FileUtils.java

@@ -3,6 +3,8 @@ package com.museum.common.util;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.junit.Test;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
@@ -33,20 +35,32 @@ public class FileUtils {
         ArrayList<Map<String, String>> list = new ArrayList<>();
 
         String path;
+        int i = 0;
         for (MultipartFile file : files) {
-            String filename = file.getOriginalFilename();
-            path = savePath + filename;
+            String fileName = file.getOriginalFilename();
+            String suffix = StringUtils.substringAfterLast(fileName, ".");
+            String newName = time + "_" + i + "."  +suffix;
+            path = savePath + newName;
             FileUtil.writeFromStream(file.getInputStream(), path);
 
             HashMap<String, String> fileInfo = new HashMap<>();
             fileInfo.put("path", path);
-            fileInfo.put("name", filename);
+            fileInfo.put("name", fileName);
+            fileInfo.put("newName", newName);
             fileInfo.put("dir", time);
 
             list.add(fileInfo);
+            ++ i;
         }
 
         return list;
 
     }
+
+
+    @Test
+    public void test(){
+        String a = "aaaa.jpg";
+        System.out.println(StringUtils.substringAfterLast(a, "."));
+    }
 }

+ 5 - 6
museum_dao/src/main/java/com/museum/dao/BuildingMapper.java

@@ -1,12 +1,10 @@
 package com.museum.dao;
 
 
-import com.museum.dao.Provide.MessageProvider;
 import com.museum.domain.entity.BuildingEntity;
-import com.museum.domain.entity.MessageEntity;
-import com.museum.domain.request.PageRequest;
+import com.museum.domain.response.BuildingResponse;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -15,8 +13,9 @@ import java.util.List;
 @Mapper
 public interface BuildingMapper extends IBaseMapper<BuildingEntity, Long> {
 
-//    @SelectProvider(type = MessageProvider.class, method = "findBySearchKey")
-//    List<MessageEntity> findBySearchKey(PageRequest param);
+    @Select(value = "select * from tb_building where rec_status = 'A' order by create_time desc")
+    List<BuildingResponse> findByAll();
+
 
 
 }

+ 3 - 1
museum_dao/src/main/java/com/museum/dao/PartMapper.java

@@ -4,6 +4,7 @@ package com.museum.dao;
 import com.museum.dao.Provide.PartProvider;
 import com.museum.domain.entity.PartEntity;
 import com.museum.domain.request.NavRequest;
+import com.museum.domain.response.PartResponse;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.SelectProvider;
 import org.springframework.stereotype.Component;
@@ -17,5 +18,6 @@ public interface PartMapper extends IBaseMapper<PartEntity, Long> {
     @SelectProvider(type = PartProvider.class, method = "findByNav")
     List<PartEntity> findByNav(NavRequest param, Integer display);
 
-
+    @SelectProvider(type = PartProvider.class, method = "findBySearch")
+    List<PartResponse> findBySearch(NavRequest param);
 }

+ 37 - 0
museum_dao/src/main/java/com/museum/dao/Provide/PartProvider.java

@@ -49,4 +49,41 @@ public class PartProvider {
         return sql.toString();
     }
 
+    public String findBySearch(NavRequest param){
+
+        StringBuffer sql = new StringBuffer(
+                "SELECT z.id, z.create_time, z.update_time, z.block, z.zone, z.type_id, z.content, z.name, z.web_site, z.display, z.material, z.thumb, t.name as type_name " +
+                        "FROM tb_part z left JOIN tb_type t on z.type_id = t.id where z.rec_status = 'A' ");
+
+
+        String searchKey = param.getSearchKey();
+        if(StringUtils.isNotBlank(searchKey)){
+            // 字符串要加'
+            sql.append(" and z.name like '%").append(searchKey).append("%'");
+        }
+
+
+        Integer block = param.getBlock();
+        if(block != null){
+            sql.append(" and z.block = ").append(block);
+        }
+
+
+        String zone = param.getZone();
+        if(StringUtils.isNotBlank(zone)){
+            // 字符串要加'
+            sql.append(" and z.zone = '").append(zone).append("'");
+        }
+
+        Long typeId = param.getTypeId();
+        if(typeId != null){
+            sql.append(" and z.type_id =").append(typeId);
+        }
+
+        sql.append(" ORDER BY z.create_time DESC");
+
+        log.info("sql: {}", sql.toString());
+        return sql.toString();
+    }
+
 }

+ 38 - 0
museum_dao/src/main/java/com/museum/dao/Provide/RoamProvider.java

@@ -46,4 +46,42 @@ public class RoamProvider {
         log.info("sql: {}", sql.toString());
         return sql.toString();
     }
+
+
+    public String findBySearch(NavRequest param){
+
+        StringBuffer sql = new StringBuffer(
+                "SELECT z.id, z.create_time, z.update_time, z.block, z.zone, z.type_id, z.content, z.name, z.web_site, z.display, z.thumb, t.name as type_name " +
+                        "FROM tb_roam z left JOIN tb_type t on z.type_id = t.id where z.rec_status = 'A' ");
+
+
+        String searchKey = param.getSearchKey();
+        if(StringUtils.isNotBlank(searchKey)){
+            // 字符串要加'
+            sql.append(" and z.name like '%").append(searchKey).append("%'");
+        }
+
+
+        Integer block = param.getBlock();
+        if(block != null){
+            sql.append(" and z.block = ").append(block);
+        }
+
+
+        String zone = param.getZone();
+        if(StringUtils.isNotBlank(zone)){
+            // 字符串要加'
+            sql.append(" and z.zone = '").append(zone).append("'");
+        }
+
+        Long typeId = param.getTypeId();
+        if(typeId != null){
+            sql.append(" and z.type_id =").append(typeId);
+        }
+
+        sql.append(" ORDER BY z.create_time DESC");
+
+        log.info("sql: {}", sql.toString());
+        return sql.toString();
+    }
 }

+ 3 - 2
museum_dao/src/main/java/com/museum/dao/RoamMapper.java

@@ -4,6 +4,7 @@ package com.museum.dao;
 import com.museum.dao.Provide.RoamProvider;
 import com.museum.domain.entity.RoamEntity;
 import com.museum.domain.request.NavRequest;
+import com.museum.domain.response.RoamResponse;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.SelectProvider;
 import org.springframework.stereotype.Component;
@@ -17,6 +18,6 @@ public interface RoamMapper extends IBaseMapper<RoamEntity, Long> {
     @SelectProvider(type = RoamProvider.class, method = "findByNav")
     List<RoamEntity> findByNav(NavRequest param, Integer display);
 
-
-
+    @SelectProvider(type = RoamProvider.class, method = "findBySearch")
+    List<RoamResponse> findBySearch(NavRequest param);
 }

+ 18 - 1
museum_domain/src/main/java/com/museum/domain/entity/BuildingEntity.java

@@ -1,9 +1,13 @@
 package com.museum.domain.entity;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.data.jpa.repository.Temporal;
 
 import javax.persistence.Table;
+import javax.persistence.Transient;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 建筑信息
@@ -15,19 +19,32 @@ public class BuildingEntity extends BaseEntity implements Serializable {
     private static final long serialVersionUID = -5191917184688236778L;
 
     /** 建筑物名称 */
+    @ApiModelProperty(value = "建筑物名称")
     private String name;
 
     /** 描述 */
+    @ApiModelProperty(value = "描述")
     private String description;
 
     /** 模型链接 */
-    private String modelUrl;
+    @ApiModelProperty(value = "模型链接")
+    private String web_site;
 
     /** 展示封面 */
+    @ApiModelProperty(value = "展示封面")
     private String ico;
 
     /** 文件目录  */
+    @ApiModelProperty(value = "文件目录")
     private String fileDir;
 
+//    /** 封装权限字段,不需要映射到数据库*/
+//    @Transient
+//    @ApiModelProperty(value = "多媒体资料")
+//    private List<FileEntity> files;
+
+    @ApiModelProperty(value = "多媒体资料ID, 多个以','逗号隔开 ")
+    private String fileIds;
+
 
 }

+ 3 - 1
museum_domain/src/main/java/com/museum/domain/entity/PartEntity.java

@@ -19,7 +19,6 @@ public class PartEntity extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = -5191918181588231778L;
 
-//    @ApiModelProperty(notes = "用户名", example = "123", required = true)
     @ApiModelProperty(value = "名称")
     private String name;
 
@@ -58,5 +57,8 @@ public class PartEntity extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "文件目录")
     private String fileDir;
 
+    @ApiModelProperty(value = "多媒体资料ID, 多个以','逗号隔开 ")
+    private String fileIds;
+
 
 }

+ 0 - 1
museum_domain/src/main/java/com/museum/domain/entity/UserEntity.java

@@ -32,7 +32,6 @@ public class UserEntity extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "电话")
     private String phone;
 
-    @JSONField(serialize = false)
 //    private String email;
 
     @ApiModelProperty(value = "状态 0:启用  1:停用 2:注销")

+ 6 - 3
museum_domain/src/main/java/com/museum/domain/request/BuildingRequest.java

@@ -30,10 +30,13 @@ public class BuildingRequest implements Serializable {
     @ApiModelProperty(value = "模型链接", name = "webSite", required = true)
     private String webSite;
 
-    @ApiModelProperty(value = "展示封面, 以base64传输", name = "ico")
+    @ApiModelProperty(value = "展示封面,传url", name = "ico")
     private String ico;
 
-    @ApiModelProperty(value = "多媒体资料", name = "files")
-    private MultipartFile[] files;
+//    @ApiModelProperty(value = "多媒体资料", name = "files")
+//    private MultipartFile[] files;
+
+    @ApiModelProperty(value = "多媒体资料ID, 多个以','逗号隔开 ", name = "fileIds")
+    private String fileIds;
 
 }

+ 4 - 2
museum_domain/src/main/java/com/museum/domain/request/PartRequest.java

@@ -54,7 +54,9 @@ public class PartRequest  {
     @ApiModelProperty(value = "材料", name = "material")
     private String material;
 
-    @ApiModelProperty(value = "多媒体资料", name = "files")
-    private MultipartFile[] files;
+//    @ApiModelProperty(value = "多媒体资料", name = "files")
+//    private MultipartFile[] files;
+    @ApiModelProperty(value = "多媒体资料ID, 多个以','逗号隔开 ")
+    private String fileIds;
 
 }

+ 44 - 0
museum_domain/src/main/java/com/museum/domain/response/BuildingResponse.java

@@ -0,0 +1,44 @@
+package com.museum.domain.response;
+
+import com.museum.domain.entity.BaseEntity;
+import com.museum.domain.entity.FileEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 建筑信息
+ */
+@Data
+public class BuildingResponse extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = -5191917185688236778L;
+
+    /** 建筑物名称 */
+    @ApiModelProperty(value = "建筑物名称")
+    private String name;
+
+    /** 描述 */
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+    /** 模型链接 */
+    @ApiModelProperty(value = "模型链接")
+    private String web_site;
+
+    /** 展示封面 */
+    @ApiModelProperty(value = "展示封面")
+    private String ico;
+
+    @ApiModelProperty(value = "多媒体资料ID, 多个以','逗号隔开 ")
+    private String fileIds;
+
+    @ApiModelProperty(value = "多媒体资料")
+    private List<FileEntity> files;
+
+
+
+}

+ 64 - 0
museum_domain/src/main/java/com/museum/domain/response/PartResponse.java

@@ -0,0 +1,64 @@
+package com.museum.domain.response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.museum.domain.entity.BaseEntity;
+import com.museum.domain.entity.FileEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Created by owen on 2020/6/6 0006 16:07
+ */
+@Data
+public class PartResponse extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = -5191918181588231774L;
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "楼体, 1:东楼,2:西楼,3:钟楼")
+    private Integer block;
+
+    @ApiModelProperty(value = "区域, in:室内,out:室外")
+    private String zone;
+
+    @ApiModelProperty(value = "展示内容")
+    private String content;
+
+    @ApiModelProperty(value = "高清图/场景/模型/url")
+    private String webSite;
+
+    @ApiModelProperty(value = "程序显示, 0:显示,1:不显示")
+    private Integer display;
+
+    @ApiModelProperty(value = "程序显示, 0:显示模型,1:显示图片")
+    private Integer displayModel;
+
+    @JsonIgnore
+    @ApiModelProperty(value = "高清图")
+    private String ico;
+
+    @ApiModelProperty(value = "缩略图")
+    private String thumb;
+
+    @ApiModelProperty(value = "材质")
+    private String material;
+
+    @ApiModelProperty(value = "展示类型id")
+    private Long typeId;
+
+    @ApiModelProperty(value = "展示类型名称")
+    private String typeName;
+
+    @ApiModelProperty(value = "多媒体资料ID, 多个以','逗号隔开 ")
+    private String fileIds;
+
+    @ApiModelProperty(value = "多媒体资料")
+    private List<FileEntity> files;
+
+}

+ 51 - 0
museum_domain/src/main/java/com/museum/domain/response/RoamResponse.java

@@ -0,0 +1,51 @@
+package com.museum.domain.response;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.museum.domain.entity.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Created by owen on 2020/6/6 0006 16:07
+ */
+@Data
+public class RoamResponse extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = -5191918181588241774L;
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "楼体, 1:东楼,2:西楼,3:钟楼")
+    private Integer block;
+
+    @ApiModelProperty(value = "区域, in:室内,out:室外")
+    private String zone;
+
+    @ApiModelProperty(value = "展示内容")
+    private String content;
+
+    @ApiModelProperty(value = "高清图/场景/模型/url")
+    private String webSite;
+
+//    @ApiModelProperty(value = "程序显示, 0:显示模型,1:显示图片, 2:场景漫游")
+//    private Integer displayModel;
+
+    @JsonIgnore
+    @ApiModelProperty(value = "高清图")
+    private String ico;
+
+    @ApiModelProperty(value = "缩略图")
+    private String thumb;
+
+    @ApiModelProperty(value = "程序显示, 0:显示,1:不显示")
+    private Integer display;
+
+    @ApiModelProperty(value = "展示类型id")
+    private Long typeId;
+
+    @ApiModelProperty(value = "展示类型名称")
+    private String typeName;
+}

+ 2 - 3
museum_service/src/main/java/com/museum/service/BuildingService.java

@@ -2,8 +2,7 @@ package com.museum.service;
 
 
 import com.museum.domain.entity.BuildingEntity;
-import com.museum.domain.entity.MessageEntity;
-import com.museum.domain.request.PageRequest;
+import com.museum.domain.response.BuildingResponse;
 
 import java.util.List;
 
@@ -13,6 +12,6 @@ import java.util.List;
  */
 public interface BuildingService extends IBaseService<BuildingEntity, Long> {
 
-//    List<MessageEntity> findBySearchKey(PageRequest param);
+    List<BuildingResponse> findByAll();
 
 }

+ 3 - 0
museum_service/src/main/java/com/museum/service/PartService.java

@@ -3,6 +3,7 @@ package com.museum.service;
 
 import com.museum.domain.entity.PartEntity;
 import com.museum.domain.request.NavRequest;
+import com.museum.domain.response.PartResponse;
 
 import java.util.List;
 
@@ -15,5 +16,7 @@ public interface PartService extends IBaseService<PartEntity, Long> {
 
     List<PartEntity> findByNav(NavRequest param, Integer display);
 
+    List<PartResponse> findBySearch(NavRequest param);
+
 
 }

+ 2 - 1
museum_service/src/main/java/com/museum/service/RoamService.java

@@ -3,6 +3,7 @@ package com.museum.service;
 
 import com.museum.domain.entity.RoamEntity;
 import com.museum.domain.request.NavRequest;
+import com.museum.domain.response.RoamResponse;
 
 import java.util.List;
 
@@ -15,5 +16,5 @@ public interface RoamService extends IBaseService<RoamEntity, Long> {
     List<RoamEntity> findByNav(NavRequest param, Integer display);
 
 
-
+    List<RoamResponse> findBySearch(NavRequest param);
 }

+ 6 - 0
museum_service/src/main/java/com/museum/service/impl/BuildingServiceImpl.java

@@ -6,6 +6,7 @@ import com.museum.dao.MessageMapper;
 import com.museum.domain.entity.BuildingEntity;
 import com.museum.domain.entity.MessageEntity;
 import com.museum.domain.request.PageRequest;
+import com.museum.domain.response.BuildingResponse;
 import com.museum.service.BuildingService;
 import com.museum.service.MessageService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +29,11 @@ public class BuildingServiceImpl extends IBaseServiceImpl<BuildingEntity, Long>
         return this.entityMapper;
     }
 
+    @Override
+    public List<BuildingResponse> findByAll() {
+        return entityMapper.findByAll();
+    }
+
 //    @Override
 //    public List<MessageEntity> findBySearchKey(PageRequest param) {
 //        return entityMapper.findBySearchKey(param);

+ 6 - 0
museum_service/src/main/java/com/museum/service/impl/PartServiceImpl.java

@@ -4,6 +4,7 @@ import com.museum.dao.PartMapper;
 import com.museum.dao.IBaseMapper;
 import com.museum.domain.entity.PartEntity;
 import com.museum.domain.request.NavRequest;
+import com.museum.domain.response.PartResponse;
 import com.museum.service.PartService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,5 +31,10 @@ public class PartServiceImpl extends IBaseServiceImpl<PartEntity, Long> implemen
         return entityMapper.findByNav(param, display);
     }
 
+    @Override
+    public List<PartResponse> findBySearch(NavRequest param) {
+        return entityMapper.findBySearch(param);
+    }
+
 
 }

+ 5 - 1
museum_service/src/main/java/com/museum/service/impl/RoamServiceImpl.java

@@ -4,6 +4,7 @@ import com.museum.dao.IBaseMapper;
 import com.museum.dao.RoamMapper;
 import com.museum.domain.entity.RoamEntity;
 import com.museum.domain.request.NavRequest;
+import com.museum.domain.response.RoamResponse;
 import com.museum.service.RoamService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,7 +31,10 @@ public class RoamServiceImpl extends IBaseServiceImpl<RoamEntity, Long> implemen
         return entityMapper.findByNav(param, display);
     }
 
-
+    @Override
+    public List<RoamResponse> findBySearch(NavRequest param) {
+        return entityMapper.findBySearch(param);
+    }
 
 
 }

+ 41 - 21
museum_web/src/main/java/com/museum/web/controller/BaseController.java

@@ -2,7 +2,7 @@ package com.museum.web.controller;
 
 import com.github.pagehelper.PageHelper;
 
-import com.museum.common.util.FileUtils;
+import com.museum.common.util.AliyunOssUtil;
 import com.museum.domain.entity.FileEntity;
 import com.museum.domain.entity.LogEntity;
 import com.museum.domain.request.PageRequest;
@@ -10,14 +10,13 @@ import com.museum.service.FileService;
 import com.museum.service.LogService;
 import com.museum.web.shiro.JwtUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.util.List;
-import java.util.Map;
 
 /**
  * Created by owen on 2020/5/20 0020 15:20
@@ -37,6 +36,12 @@ public class BaseController {
     @Value("${output.file.path}")
     public String OUT_PATH;
 
+    @Value("${oss.file.path}")
+    public String OSS_PATH;
+
+    @Value("${oss.domain}")
+    public String OSS_DOMAIN;
+
     /** 获取用户名*/
     String getTokenUserName(){
         String token = getToken();
@@ -98,26 +103,41 @@ public class BaseController {
     /**
      * 文件上传
      */
-    String upload(MultipartFile[] files, Long id, String type) throws IOException {
-        if (files == null) {
-            log.error("文件不能为空");
-            return "";
+//    String upload(MultipartFile[] files, Long id, String type) throws IOException {
+//        if (files == null) {
+//            log.error("文件不能为空");
+//            return "";
+//        }
+//
+//        String dir = "";
+//        List<Map<String, String>> list = FileUtils.upload(files, OUT_PATH);
+//        for (Map<String, String> map : list) {
+//            FileEntity entity = new FileEntity();
+//            entity.setFkId(id);
+//            entity.setFileName(map.get("name"));
+//            entity.setFilePath(map.get("path"));
+//            entity.setType(type);
+//            fileService.save(entity);
+//            dir = map.get("dir");
+//        }
+//
+//        return dir;
+//
+//    }
+
+    // 删除文件
+    void removeFile(String ids) throws IOException {
+        // 删除oss物理文件
+        List<FileEntity> files = fileService.findByIds(ids);
+        for (FileEntity entity: files) {
+            String filePath = entity.getFilePath();
+            filePath = OSS_PATH + StringUtils.substringAfterLast(filePath, "/");
+            log.info("remove oss file: {}", filePath);
+            AliyunOssUtil.delete(filePath);
         }
 
-        String dir = "";
-        List<Map<String, String>> list = FileUtils.upload(files, OUT_PATH);
-        for (Map<String, String> map : list) {
-            FileEntity entity = new FileEntity();
-            entity.setFkId(id);
-            entity.setFileName(map.get("name"));
-            entity.setFilePath(map.get("path"));
-            entity.setType(type);
-            fileService.save(entity);
-            dir = map.get("dir");
-        }
-
-        return dir;
-
+        // 删除db记录
+        fileService.deleteByIds(ids);
     }
 
 

+ 23 - 14
museum_web/src/main/java/com/museum/web/controller/BuildingController.java

@@ -9,6 +9,7 @@ import com.museum.domain.entity.BuildingEntity;
 import com.museum.domain.entity.FileEntity;
 import com.museum.domain.request.BuildingRequest;
 import com.museum.domain.request.PageRequest;
+import com.museum.domain.response.BuildingResponse;
 import com.museum.service.BuildingService;
 import com.museum.service.FileService;
 import com.museum.web.aop.WebControllerLog;
@@ -23,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
 import java.io.IOException;
 import java.util.Date;
@@ -45,35 +47,42 @@ public class BuildingController extends BaseController {
     private BuildingService buildingService;
 
 
-//    @RequiresRoles(value = {"admin"}, logical = Logical.OR)
+//    @ApiOperation("列表")
+//    @PostMapping("list")
+//    public Result<BuildingEntity> list(@RequestBody PageRequest param) {
+//        startPage(param);
+//        PageInfo<BuildingEntity> page = new PageInfo<>(buildingService.findAll());
+//        return Result.success(page);
+//    }
+
+
     @ApiOperation("列表")
     @PostMapping("list")
-    public Result<BuildingEntity> list(@RequestBody PageRequest param) {
+    public Result<BuildingResponse> list(@RequestBody PageRequest param) {
         startPage(param);
-        PageInfo<BuildingEntity> page = new PageInfo<>(buildingService.findAll());
+
+        List<BuildingResponse> entityList = buildingService.findByAll();
+
+        for (BuildingResponse entity : entityList) {
+            List<FileEntity> files = fileService.findByIds(entity.getFileIds());
+            entity.setFiles(files);
+        }
+
+        PageInfo<BuildingResponse> page = new PageInfo<>(entityList);
         return Result.success(page);
     }
 
     @WebControllerLog(description = "建筑管理-新增/修改")
     @ApiOperation("新增/修改")
-    @PostMapping(value = "save", consumes = {"multipart/form-data"})
-    public Result save(BuildingRequest param) throws IOException {
+    @PostMapping(value = "save")
+    public Result save(@Valid @RequestBody BuildingRequest param) throws IOException {
 
         BuildingEntity entity = null;
         Long id = param.getId();
         if (id == null) {
             entity = new BuildingEntity();
             BeanUtils.copyProperties(param, entity);
-
-            String dir = upload(param.getFiles(), entity.getId(), TypeCode.MODEL_BUILDING);
-
-            if (StringUtils.isBlank(dir)) {
-                log.error("文件上传失败");
-                return Result.failure("文件上传失败");
-            }
-            entity.setFileDir(dir);
             buildingService.save(entity);
-
         } else {
              entity = buildingService.findById(id);
             if (entity == null) {

+ 135 - 0
museum_web/src/main/java/com/museum/web/controller/CommonController.java

@@ -0,0 +1,135 @@
+package com.museum.web.controller;
+
+
+import cn.hutool.core.io.FileUtil;
+import com.github.pagehelper.PageInfo;
+import com.museum.common.constant.TypeCode;
+import com.museum.common.util.AliyunOssUtil;
+import com.museum.common.util.FileUtils;
+import com.museum.common.util.Result;
+import com.museum.domain.entity.BuildingEntity;
+import com.museum.domain.entity.DownloadEntity;
+import com.museum.domain.entity.FileEntity;
+import com.museum.domain.entity.UserEntity;
+import com.museum.domain.request.BuildingRequest;
+import com.museum.domain.request.DownloadRequest;
+import com.museum.domain.request.PageRequest;
+import com.museum.domain.response.DownloadResponse;
+import com.museum.service.DownloadService;
+import com.museum.service.UserService;
+import com.museum.web.aop.WebControllerLog;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresRoles;
+import org.apache.shiro.crypto.hash.Hash;
+import org.junit.Test;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import tk.mybatis.mapper.entity.Condition;
+
+import javax.validation.Valid;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.*;
+
+
+/**
+ * Created by owen on 2020/5/9 0018 12:17
+ */
+@Log4j2
+@Api(tags = "共用接口")
+@RestController
+//@RequestMapping("manage/common")
+@RequestMapping("/common")
+//@Transactional
+public class CommonController extends BaseController {
+
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(name = "type", value = "模型类型, roam:自由漫游,part:部件欣赏,building: 建筑物,ico时不用传", required = false),
+//            @ApiImplicitParam(name = "files", value = "可以接收多个文件", required = true),
+//    })
+    @ApiOperation("上传, 可以接收多个文件")
+    @PostMapping(value = "upload", consumes = {"multipart/form-data"})
+    public Result upload(MultipartFile [] files ) throws IOException {
+
+        if (files == null) {
+            log.error("文件不能为空");
+            return Result.failure("文件不能为空");
+        }
+
+        // 写入本地服务器
+        List<Map<String, String>> uploads = FileUtils.upload(files, OUT_PATH);
+
+        HashMap<Long, String> resultMap = new HashMap<>();
+        String dir = null;
+        int a = 0;
+        for (Map<String, String> map: uploads) {
+            String fileName = map.get("name");
+            String newName = map.get("newName");
+            String ossPath = OSS_PATH+"/image/" + newName;
+            log.info("local {}, ", map.get("path"));
+            // 上传到oss
+            AliyunOssUtil.upload(map.get("path"), ossPath);
+
+            // 保存db
+            FileEntity entity = new FileEntity();
+
+            entity.setFileName(fileName);
+
+            String ossUrl = OSS_DOMAIN+ossPath;
+            entity.setFilePath(ossUrl);
+
+            fileService.save(entity);
+
+            // 返回前端数据
+            resultMap.put(entity.getId(), ossUrl);
+            dir = map.get("dir");
+            ++ a;
+        }
+
+        // 删除本地服务器物理文件,用删除目录的方式
+        FileUtil.del(OUT_PATH + dir);
+
+//        log.info("resultMap {}, ", resultMap);
+
+        // 用swagger测试有bug, 不显示返回值;使用postman可以
+        return Result.success(resultMap);
+
+    }
+
+    @ApiOperation("删除文件")
+    @GetMapping("removes/{ids}")
+    public Result removes(@PathVariable String ids) throws IOException {
+
+//        // 删除oss物理文件
+//        List<FileEntity> files = fileService.findByIds(ids);
+//        for (FileEntity entity: files) {
+//            String filePath = entity.getFilePath();
+//            filePath = OSS_PATH + StringUtils.substringAfterLast(filePath, "/");
+//            log.info("remove oss file: {}", filePath);
+//            AliyunOssUtil.delete(filePath);
+//        }
+//
+//        // 删除db记录
+//        fileService.deleteByIds(ids);
+        removeFile(ids);
+
+        return Result.success();
+    }
+
+    @Test
+    public void test(){
+        String a = "http://4dkankan.oss-cn-shenzhen.aliyuncs.com/sh_museum/image/20200606_175058527_0.jpg";
+        System.out.println(StringUtils.substringAfterLast(a, "/"));
+    }
+
+
+}

+ 11 - 21
museum_web/src/main/java/com/museum/web/controller/PartController.java

@@ -9,6 +9,7 @@ import com.museum.domain.entity.PartEntity;
 import com.museum.domain.entity.FileEntity;
 import com.museum.domain.request.NavRequest;
 import com.museum.domain.request.PartRequest;
+import com.museum.domain.response.PartResponse;
 import com.museum.service.PartService;
 import com.museum.web.aop.WebControllerLog;
 import io.swagger.annotations.Api;
@@ -46,35 +47,24 @@ public class PartController extends BaseController {
 
     @ApiOperation("列表/条件筛选")
     @PostMapping("list")
-    public Result<PartEntity> list(@Valid @RequestBody NavRequest param) {
+    public Result<PartResponse> list(@Valid @RequestBody NavRequest param) {
         startPage(param);
-        String appType = getAppType();
-        log.info("appType: {}", appType);
-        // 区分移动端,还是后端
-        Integer display = "web".equals(appType) ? 0 : null;
-        PageInfo<PartEntity> page = new PageInfo<>(partService.findByNav(param, display));
+        PageInfo<PartResponse> page = new PageInfo<>(partService.findBySearch(param));
         return Result.success(page);
     }
 
 
     @WebControllerLog(description = "部件管理-新增/修改")
     @ApiOperation("新增/修改")
-    @PostMapping(value = "save", consumes = {"multipart/form-data"})
-    public Result save(PartRequest param) throws IOException {
+//    @PostMapping(value = "save", consumes = {"multipart/form-data"})
+    @PostMapping(value = "save")
+    public Result save(@Valid @RequestBody PartRequest param) throws IOException {
 
         PartEntity entity = null;
         Long id = param.getId();
         if (id == null) {
             entity = new PartEntity();
             BeanUtils.copyProperties(param, entity);
-
-            String dir = upload(param.getFiles(), entity.getId(), TypeCode.MODEL_PART);
-
-            if (StringUtils.isBlank(dir)) {
-                log.error("文件上传失败");
-                return Result.failure("文件上传失败");
-            }
-            entity.setFileDir(dir);
             partService.save(entity);
 
 
@@ -107,8 +97,9 @@ public class PartController extends BaseController {
         }
 
         // 查找文件
-        List<FileEntity> files = fileService.findByFkIdAndType(id, TypeCode.MODEL_PART);
+//        List<FileEntity> files = fileService.findByFkIdAndType(id, TypeCode.MODEL_PART);
 
+        List<FileEntity> files =  fileService.findByIds(entity.getFileIds());
         HashMap<String, Object> resultMap = new HashMap<>();
         resultMap.put("part", entity);
         resultMap.put("file", files);
@@ -125,7 +116,7 @@ public class PartController extends BaseController {
     @WebControllerLog(description = "部件管理-删除")
     @ApiOperation("删除")
     @GetMapping("removes/{ids}")
-    public Result removes(@PathVariable String ids){
+    public Result removes(@PathVariable String ids) throws IOException {
 
         String[] split = ids.split(",");
         for (String partId: split) {
@@ -135,9 +126,8 @@ public class PartController extends BaseController {
                 // 停止本次循环,跳到下一个循环
                 continue;
             }
-            // 删除物理文件
-            FileUtil.del(OUT_PATH + entity.getFileDir());
-            fileService.deleteByFkIdAndType(fkId, TypeCode.MODEL_PART);
+            // 删除物理文件 + db记录
+            removeFile(entity.getFileIds());
         }
 
         partService.deleteByIds(ids);

+ 3 - 6
museum_web/src/main/java/com/museum/web/controller/RoamController.java

@@ -6,6 +6,7 @@ import com.museum.common.util.Result;
 import com.museum.domain.entity.PartEntity;
 import com.museum.domain.entity.RoamEntity;
 import com.museum.domain.request.*;
+import com.museum.domain.response.RoamResponse;
 import com.museum.service.PartService;
 import com.museum.service.RoamService;
 import com.museum.service.TypeService;
@@ -38,13 +39,9 @@ public class RoamController extends BaseController {
 
     @ApiOperation("列表/条件筛选")
     @PostMapping("list")
-    public Result<RoamEntity> list(@Valid @RequestBody NavRequest param) {
+    public Result<RoamResponse> list(@Valid @RequestBody NavRequest param) {
         startPage(param);
-        String appType = getAppType();
-        log.info("appType: {}", appType);
-        // 区分移动端,还是后端
-        Integer display = "web".equals(appType) ? 0 : null;
-        PageInfo<RoamEntity> page = new PageInfo<>(roamService.findByNav(param, display));
+        PageInfo<RoamResponse> page = new PageInfo<>(roamService.findBySearch(param));
         return Result.success(page);
     }
 

+ 8 - 0
pom.xml

@@ -226,6 +226,14 @@
                 <groupId>tk.mybatis</groupId>
                 <artifactId>mapper-spring-boot-starter</artifactId>
                 <version>${tk.mybatis.version}</version>
+                <!-- tk.mybatis 跟springboot jap 包冲突-->
+                <exclusions>
+                    <exclusion>
+                        <groupId>javax.persistence</groupId>
+                        <artifactId>persistence-api</artifactId>
+                    </exclusion>
+                </exclusions>
+
             </dependency>