wuweihao před 3 roky
rodič
revize
b7d97ca97d
20 změnil soubory, kde provedl 266 přidání a 83 odebrání
  1. 17 0
      gis_admin/src/main/java/com/gis/admin/controller/LoginController.java
  2. 3 6
      gis_admin/src/main/java/com/gis/admin/controller/SysUserController.java
  3. 4 4
      gis_admin/src/main/java/com/gis/admin/entity/dto/UserDto.java
  4. 2 0
      gis_admin/src/main/java/com/gis/admin/service/SysResourceService.java
  5. 27 1
      gis_admin/src/main/java/com/gis/admin/service/impl/SysResourceServiceImpl.java
  6. 23 14
      gis_admin/src/main/java/com/gis/admin/service/impl/SysUserServiceImpl.java
  7. 77 0
      gis_application/src/main/resources/application-pro.properties
  8. 1 0
      gis_cms/src/main/java/com/gis/cms/controller/BarrageController.java
  9. 1 0
      gis_cms/src/main/java/com/gis/cms/controller/CommentController.java
  10. 1 1
      gis_cms/src/main/java/com/gis/cms/controller/DonateController.java
  11. 2 0
      gis_cms/src/main/java/com/gis/cms/controller/ExpertController.java
  12. 2 1
      gis_cms/src/main/java/com/gis/cms/controller/GoodsController.java
  13. 1 0
      gis_cms/src/main/java/com/gis/cms/controller/QuestionGroupController.java
  14. 1 1
      gis_cms/src/main/java/com/gis/cms/controller/SandController.java
  15. 4 2
      gis_cms/src/main/java/com/gis/cms/service/impl/GoodsServiceImpl.java
  16. 1 0
      gis_common/src/main/java/com/gis/common/base/exception/BaseRuntimeException.java
  17. 64 3
      gis_common/src/main/java/com/gis/common/util/FileUtils.java
  18. 8 47
      gis_scene/src/main/java/com/gis/scene/controller/SceneController.java
  19. 3 0
      gis_scene/src/main/java/com/gis/scene/service/SceneService.java
  20. 24 3
      gis_scene/src/main/java/com/gis/scene/service/impl/SceneServiceImpl.java

+ 17 - 0
gis_admin/src/main/java/com/gis/admin/controller/LoginController.java

@@ -1,6 +1,7 @@
 package com.gis.admin.controller;
 
 import cn.hutool.core.collection.CollectionUtil;
+import com.gis.admin.entity.po.SysResourceEntity;
 import com.gis.admin.entity.po.SysRoleEntity;
 import com.gis.common.base.entity.po.LogEntity;
 import com.gis.common.base.service.LogService;
@@ -98,6 +99,14 @@ public class LoginController {
 
         }
 
+        // 检查菜单权限
+        List<SysResourceEntity> menu = sysResourceService.getPermissionByUserIdAndType(userId, "menu");
+        if (CollectionUtil.isEmpty(menu)){
+            String errorMsg = "菜单权限为空,不允许登录";
+            log.error(errorMsg);
+            return Result.failure(errorMsg);
+        }
+
         // 解密密码
         String password = Base64Converter.decodePassword(param.getPassword());
 
@@ -199,6 +208,14 @@ public class LoginController {
 
         }
 
+        // 检查菜单权限
+        List<SysResourceEntity> menu = sysResourceService.getPermissionByUserIdAndType(userId, "menu");
+        if (CollectionUtil.isEmpty(menu)){
+            String errorMsg = "菜单权限为空,不允许登录";
+            log.error(errorMsg);
+            return Result.failure(errorMsg);
+        }
+
         // 验证密码,解密出来是明文密码,在跟输入密码比较
         boolean decryptName = PasswordUtils.decrypt(entity.getPassword(), param.getPassword(), PasswordUtils.getStaticSalt());
         if (!decryptName) {

+ 3 - 6
gis_admin/src/main/java/com/gis/admin/controller/SysUserController.java

@@ -41,7 +41,7 @@ public class SysUserController {
     }
 
 //    @RequiresRoles(value = {"sys_admin"}, logical = Logical.OR)
-    @RequiresPermissions("sys:user:edit")
+//    @RequiresPermissions("sys:user:edit")
     @WebControllerLog(description = "用户管理-修改用户", addDb = true)
     @ApiOperation("新增/修改用户信息")
     @PostMapping("save")
@@ -59,10 +59,7 @@ public class SysUserController {
     @WebControllerLog(description = "用户管理-修改密码", addDb = true)
     @ApiOperation("修改密码")
     @PostMapping("updatePwd")
-    public Result updatePwd(@Valid @RequestBody PasswordDto param) {
-
-
-
+    public Result updatePwd(@Valid @RequestBody PasswordDto param)  {
         return userService.updatePwd(param);
 
     }
@@ -79,7 +76,7 @@ public class SysUserController {
 
 
 //    @RequiresRoles(value = {"sys_admin"}, logical = Logical.OR)
-    @WebControllerLog(description = "用户管理-启用、停用账户")
+    @WebControllerLog(description = "用户管理-用户启用/停用", addDb = true)
     @ApiOperation(value = "启用、停用账户", notes = "isEnabled-> 1:可用, 0:禁用")
     @GetMapping("editStatus/{id}/{isEnabled}")
     public Result editStatus(@PathVariable Long id, @PathVariable Integer isEnabled) {

+ 4 - 4
gis_admin/src/main/java/com/gis/admin/entity/dto/UserDto.java

@@ -68,11 +68,11 @@ public class UserDto {
     private Long roleId;
 
 //    @NotBlank(message = "旧密码不能为空")
-    @ApiModelProperty(value = "旧密码", name = "oldPassword")
-    private String oldPassword;
+//    @ApiModelProperty(value = "旧密码", name = "oldPassword")
+//    private String oldPassword;
 
 //    @NotBlank(message = "新密码不能为空")
-    @ApiModelProperty(value = "新密码", name = "newPassword")
-    private String newPassword;
+//    @ApiModelProperty(value = "新密码", name = "newPassword")
+//    private String newPassword;
 
 }

+ 2 - 0
gis_admin/src/main/java/com/gis/admin/service/SysResourceService.java

@@ -25,4 +25,6 @@ public interface SysResourceService extends IBaseService<SysResourceEntity, Long
     List<SysResourceTree> getTreeAllPermissionsByRoleId(Long roleId);
 
     Result testCatch();
+
+    List<SysResourceEntity> getPermissionByUserIdAndType(Long userId, String type);
 }

+ 27 - 1
gis_admin/src/main/java/com/gis/admin/service/impl/SysResourceServiceImpl.java

@@ -10,6 +10,7 @@ import com.gis.admin.service.SysRoleService;
 import com.gis.admin.tree.SysResourceTreeUtil;
 import com.gis.admin.tree.vo.SysResourceTree;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -63,6 +64,30 @@ public class SysResourceServiceImpl extends IBaseServiceImpl<SysResourceEntity,
         return Result.success(tree.buildTree());
     }
 
+    /**
+     * 获取资源
+     * @param userId 用户id
+     * @param type 资源类型,菜单、按钮, 不传:返回全部
+     * @return
+     */
+    @Override
+    public List<SysResourceEntity> getPermissionByUserIdAndType(Long userId, String type) {
+
+        List<SysResourceEntity> list = resourceMapper.findResourceByUserId(userId);
+        List<SysResourceEntity> results =  new ArrayList<>();
+        for (SysResourceEntity i : list) {
+            if (StringUtils.isBlank(type)){
+                results.add(i);
+            } else if (type.equals(i.getResourceType())){
+                results.add(i);
+            }
+        }
+
+        return results;
+    }
+
+
+
 
     /**
      * 获取所有权限列表
@@ -116,7 +141,8 @@ public class SysResourceServiceImpl extends IBaseServiceImpl<SysResourceEntity,
         List<SysResourceEntity> results =  new ArrayList<>();
         for (SysResourceEntity entity : cacheAll) {
             // 默认是true, 把没有权限的对象设置false, 只对按钮设置
-            if (!perIds.contains(entity.getId().toString()) && entity.getResourceType().equals("button")) {
+//            if (!perIds.contains(entity.getId().toString()) && entity.getResourceType().equals("button")) {
+            if (!perIds.contains(entity.getId().toString()) ) {
                 entity.setAuthority(false);
             }
             results.add(entity);

+ 23 - 14
gis_admin/src/main/java/com/gis/admin/service/impl/SysUserServiceImpl.java

@@ -94,14 +94,14 @@ public class SysUserServiceImpl extends IBaseServiceImpl<SysUserEntity, Long> im
             this.update(entity);
 
             // 更新密码
-            String oldPassword = param.getOldPassword();
-            String newPassword = param.getNewPassword();
-            if (oldPassword !=null && newPassword != null) {
-                PasswordDto dto = new PasswordDto();
-                dto.setOldPassword(oldPassword);
-                dto.setNewPassword(newPassword);
-                updatePassword(dto);
-            }
+//            String oldPassword = param.getOldPassword();
+//            String newPassword = param.getNewPassword();
+//            if (oldPassword !=null && newPassword != null) {
+//                PasswordDto dto = new PasswordDto();
+//                dto.setOldPassword(oldPassword);
+//                dto.setNewPassword(newPassword);
+//                updatePassword(dto);
+//            }
 
             // 每次修改,删除用户角色表信息,重新添加, 系统管理员不能修改
             if (userId!=1){
@@ -170,26 +170,28 @@ public class SysUserServiceImpl extends IBaseServiceImpl<SysUserEntity, Long> im
     }
 
     @Override
-    public Result updatePwd(PasswordDto param) {
+    public Result updatePwd(PasswordDto param){
+
         // 密码加密了,需要解密
         String newPassword = Base64Converter.decodePassword(param.getNewPassword());
         String oldPassword = Base64Converter.decodePassword(param.getOldPassword());
         param.setNewPassword(newPassword);
         param.setOldPassword(oldPassword);
         SysUserEntity user = this.findByUserName(JwtUtil.getUsername(getToken()));
-        updatePwd(param, user, true);
 
-        return Result.success();
+            updatePwd(param, user, true);
+            return Result.success();
+
     }
 
-    private void updatePwd(PasswordDto param, SysUserEntity user, boolean flag){
+    private void updatePwd(PasswordDto param, SysUserEntity user, boolean flag) {
 
         if (flag){
             // 验证原密码
             Boolean isBoolean = PasswordUtils.decrypt(user.getPassword(), param.getOldPassword(), PasswordUtils.getStaticSalt());
             if (!isBoolean) {
                 log.error("原始密码错误");
-                throw new BaseRuntimeException("原始密码错误");
+                throw new BaseRuntimeException(3008,"原始密码错误");
             }
 
         }
@@ -322,10 +324,17 @@ public class SysUserServiceImpl extends IBaseServiceImpl<SysUserEntity, Long> im
             return Result.failure(MsgCode.e3005, "验证码失效");
         }
 
-        updatePwd(param, entity, false);
+//        updatePwd(param, entity, false);
 
         return Result.success();
     }
 
+    public static void main(String[] args) {
+       String oldPassword="6iaBtlEIIxMTE=31knu3HyMTUx79pGbV";
+        String  newPassword="O8rFRVDwExMTExMTtIZcNbMTfBi8C4VN";
+        System.out.println(Base64Converter.decodePassword(oldPassword));
+        System.out.println(Base64Converter.decodePassword(newPassword));
+    }
+
 
 }

+ 77 - 0
gis_application/src/main/resources/application-pro.properties

@@ -0,0 +1,77 @@
+
+#DB
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.druid.username=root
+spring.datasource.druid.url=jdbc:mysql://localhost:3306/${project.en}?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
+spring.datasource.druid.password=4dkk2021testproject%
+
+
+# \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=4dkk2021testproject%
+# \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.file.path=/home/wyu/user/log/${project.en}_log
+logging.config=classpath:logback-spring.xml
+logging.level.com.gis=debug
+
+# file info
+server.file.path=/home/wyu/user/data/${project.en}_data
+#server.file.path=/home/wyu/user/data/army_beijing_hospital_data
+
+#
+spring.mvc.static-path-pattern=/**
+### \u5339\u914D\u8DEF\u5F84\uFF0C \u6CE8\u610Ffile\u540E\u9762\u7684/ \uFF0Cwindows:\\  , linxu:\u5168\u8DEF\u5F84, \u4E0D\u9700\u8981\u7279\u522B\u52A0\u659C\u6760
+spring.resources.static-locations=file:${server.file.path}
+
+# swagger2 \u8BBE\u7F6E\u5168\u5C40\u5B57\u4F53\u683C\u5F0F\u4E3Autf-8
+swagger.package=com.gis
+swagger.title=${project.sc}-pro
+swagger.description=${swagger.title}
+swagger.version=1.0
+
+#swagger login
+knife4j.basic.enable=true
+knife4j.basic.username=owen
+knife4j.basic.password=owen
+
+
+
+

+ 1 - 0
gis_cms/src/main/java/com/gis/cms/controller/BarrageController.java

@@ -49,6 +49,7 @@ public class BarrageController  {
         return entityService.remove(id);
     }
 
+    @WebControllerLog(description = "弹幕管理-是否显示", addDb = true)
     @ApiOperation("是否显示")
     @GetMapping("display/{id}/{display}")
     public Result display(@PathVariable Long id, @PathVariable Integer display) {

+ 1 - 0
gis_cms/src/main/java/com/gis/cms/controller/CommentController.java

@@ -54,6 +54,7 @@ public class CommentController  {
         return entityService.remove(id);
     }
 
+    @WebControllerLog(description = "留言管理-是否显示", addDb = true)
     @ApiOperation("是否显示")
     @GetMapping("display/{id}/{display}")
     public Result display(@PathVariable Long id, @PathVariable Integer display) {

+ 1 - 1
gis_cms/src/main/java/com/gis/cms/controller/DonateController.java

@@ -42,7 +42,7 @@ public class DonateController {
 //    }
 
 
-    @WebControllerLog(description = "专家管理-删除", addDb = true)
+    @WebControllerLog(description = "捐赠管理-删除", addDb = true)
     @ApiOperation("删除")
     @GetMapping("remove/{id}")
     public Result remove(@PathVariable Long id) {

+ 2 - 0
gis_cms/src/main/java/com/gis/cms/controller/ExpertController.java

@@ -58,12 +58,14 @@ public class ExpertController {
         return entityService.detail(id);
     }
 
+    @WebControllerLog(description = "专家管理-是否显示", addDb = true)
     @ApiOperation(value = "是否显示", notes = "display, 0:不显示, 1:显示")
     @GetMapping("display/{id}/{display}")
     public Result updateDisplay(@PathVariable Long id, @PathVariable Integer display) {
         return entityService.updateDisplay(id, display);
     }
 
+    @WebControllerLog(description = "专家管理-排序", addDb = true)
     @ApiOperation(value = "排序", notes = "升序")
     @GetMapping("sort/{id}/{sort}")
     public Result sort(@PathVariable Long id, @PathVariable Integer sort) {

+ 2 - 1
gis_cms/src/main/java/com/gis/cms/controller/GoodsController.java

@@ -75,13 +75,14 @@ public class GoodsController  {
         return entityService.removeFile(fileId);
     }
 
+    @WebControllerLog(description = "精品典藏-是否显示", addDb = true)
     @ApiOperation(value = "是否显示", notes = "display, 0:不显示, 1:显示")
     @GetMapping("display/{id}/{display}")
     public Result updateDisplay(@PathVariable Long id, @PathVariable Integer display) {
         return entityService.display(id, display);
     }
 
-    @WebControllerLog(description = "精品典藏-重新上传图片")
+    @WebControllerLog(description = "精品典藏-重新上传图片", addDb = true)
     @ApiOperation(value = "重新上传图片", notes = "fileId:图片id, code:目录码")
     @PostMapping("afresh/uploadImg/{fileId}/{code}")
     public Result afreshUploadImg(MultipartFile file, @PathVariable String code, @PathVariable Long fileId) {

+ 1 - 0
gis_cms/src/main/java/com/gis/cms/controller/QuestionGroupController.java

@@ -80,6 +80,7 @@ public class QuestionGroupController  {
         return answerService.remove(questionAnswerId);
     }
 
+    @WebControllerLog(description = "题组管理-是否显示", addDb = true)
     @ApiOperation(value = "是否显示", notes = "互斥,有且只有一个显示")
     @GetMapping("display/{id}/{display}")
     public Result updateDisplay(@PathVariable Long id, @PathVariable Integer display) {

+ 1 - 1
gis_cms/src/main/java/com/gis/cms/controller/SandController.java

@@ -44,7 +44,7 @@ public class SandController {
     }
 
 
-    @WebControllerLog(description = "专家管理-删除", addDb = true)
+    @WebControllerLog(description = "沙盘管理-删除", addDb = true)
     @ApiOperation("删除")
     @GetMapping("remove/{id}")
     public Result remove(@PathVariable Long id) {

+ 4 - 2
gis_cms/src/main/java/com/gis/cms/service/impl/GoodsServiceImpl.java

@@ -178,7 +178,9 @@ public class GoodsServiceImpl extends IBaseServiceImpl<GoodsEntity, Long> implem
             code = DateUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS");
         }
 
-        Map<String, Object> result = fileService.upload(file, "/" + TypeCode.MODULE_GOODS + "/" + code );
+//        Map<String, Object> result = fileService.upload(file, "/" + TypeCode.MODULE_GOODS + "/img" + code );
+//        Map<String, Object> result = fileService.upload(file, "/" + TypeCode.MODULE_GOODS + "/img" + code );
+        Map<String, Object> result = fileUtils.imgUploadMapAndCompress(file, "/goods/img/" + code, false);
         FileEntity entity = new FileEntity();
         entity.setModule(TypeCode.MODULE_GOODS);
         entity.setName(result.get("fileName").toString());
@@ -245,7 +247,7 @@ public class GoodsServiceImpl extends IBaseServiceImpl<GoodsEntity, Long> implem
 
 
 
-        Map<String, Object> map = fileUtils.uploadMap(file, "/goods/img/" + code, false);
+        Map<String, Object> map = fileUtils.imgUploadMapAndCompress(file, "/goods/img/" + code, false);
 
         String filePath = (String) map.get("filePath");
         String fileName = (String) map.get("fileName");

+ 1 - 0
gis_common/src/main/java/com/gis/common/base/exception/BaseRuntimeException.java

@@ -8,6 +8,7 @@ public class BaseRuntimeException extends RuntimeException{
 
     public BaseRuntimeException(String msg){
         super(msg);
+        this.code = -1;
         this.msg = msg;
     }
 

+ 64 - 3
gis_common/src/main/java/com/gis/common/util/FileUtils.java

@@ -1,6 +1,7 @@
 package com.gis.common.util;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.img.ImgUtil;
 import cn.hutool.core.io.FileUtil;
 import com.gis.common.base.exception.BaseRuntimeException;
 import com.gis.common.constant.ConfigConstant;
@@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.Map;
@@ -31,17 +33,18 @@ public class FileUtils {
         String suffixList = configConstant.serverFileFallow;
         // 获取文件后缀
         if(file == null){
-            log.info("文件流为空不可上传");
+            log.error("文件流为空不可上传");
             return false;
         }
         String fileName = file.getOriginalFilename();
+        log.info("文件名: {}", fileName);
         String suffix = fileName.substring(fileName.lastIndexOf(".")
                 + 1, fileName.length());
         if (suffixList.contains(suffix.trim().toLowerCase())) {
-            log.info("无非法参数可以放行!!!");
+//            log.info("无非法参数可以放行!!!");
             return true;
         }
-        log.info("存在非法参数不能放行!请核对上传文件格式,重新刷新页面再次上传!");
+        log.error("存在非法参数不能放行!请核对上传文件格式,重新刷新页面再次上传!");
         return false;
     }
 
@@ -76,6 +79,62 @@ public class FileUtils {
     }
 
 
+    /**
+     * 上传文件且按比例压缩
+     * @param file
+     * @param savePath
+     * @param isPinYinRename
+     * @return
+     */
+    public Map<String, Object> imgUploadMapAndCompress(MultipartFile file, String savePath, boolean isPinYinRename) {
+        String newName = this.upload(file, savePath, isPinYinRename);
+        String filePath = savePath + "/" + newName;
+        long size = file.getSize();
+        size = size/1000;
+        log.info("文件大小:" + size + "kb");
+        if (size > 1024){
+            String inPath = configConstant.serverBasePath + savePath + "/" + newName;
+            String outPath = configConstant.serverBasePath + savePath + "/cp_" + newName;
+
+//            ImgUtil.compress(new File(inPath), new File(outPath), 0.5f);
+            ImgUtil.compress(new File(inPath), new File(outPath), getQuality(size));
+            log.info("压缩图片位置: {}", outPath);
+            filePath = savePath + "/cp_" + newName;
+            this.del(inPath);
+        }
+
+
+
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("fileName", file.getOriginalFilename());
+        result.put("filePath", filePath);
+
+        return result;
+
+    }
+
+    /**
+     * 通过图片大小计算压缩比例
+     * @param size 单位是KB
+     * @return
+     */
+    private  float getQuality(long size){
+        // 单位用m
+        double n = size/1024;
+
+        // 压缩比例,2M以内使用0.5压缩
+        double quality = 0.5;
+        // 大于2M 按计算比例压缩
+        if (n > 2) {
+            quality = 1 / n;
+        }
+        log.info("压缩比例: {}", quality);
+        Float aFloat = Float.valueOf(quality + "");
+        return aFloat;
+
+    }
+
+
 
     /**
      *
@@ -89,9 +148,11 @@ public class FileUtils {
         // 检查非法文件上传
         boolean checkFile = this.checkFile(file);
         if (!checkFile) {
+//            throw new BaseRuntimeException(3009, "上传文件格式有误, 请重新上传");
             throw new BaseRuntimeException("上传文件格式有误, 请重新上传");
         }
 
+
         // 文件目录
         String fileName = file.getOriginalFilename();
         String newName;

+ 8 - 47
gis_scene/src/main/java/com/gis/scene/controller/SceneController.java

@@ -47,12 +47,14 @@ public class SceneController  {
     }
 
 
+    @WebControllerLog(description = "场景管理-编辑", addDb = true)
     @ApiOperation("场景编辑")
     @PostMapping("edit")
     public Result edit(@Valid @RequestBody SceneDataDto param)  {
         return sceneService.edit(param);
     }
 
+    @WebControllerLog(description = "场景管理-编辑", addDb = true)
     @ApiOperation("漫游可行")
     @PostMapping("roamViable")
     public Result roamViable(@RequestBody RoamViableDto param) throws Exception {
@@ -63,7 +65,7 @@ public class SceneController  {
     /**
      * 场景,真删除
      */
-    @WebControllerLog(description = "场景-删除")
+    @WebControllerLog(description = "场景管理-删除", addDb = true)
     @ApiOperation("场景删除")
     @GetMapping("removes/{ids}")
     public Result removes(@PathVariable String ids) {
@@ -94,6 +96,7 @@ public class SceneController  {
     /**
      * 只有一个场景是显示状态
      */
+    @WebControllerLog(description = "场景管理-场景显示", addDb = true)
     @ApiOperation("场景显示")
     @GetMapping("display/{id}")
     public Result display(@PathVariable Long id) {
@@ -101,56 +104,14 @@ public class SceneController  {
     }
 
 
-
-    @ApiOperation(value = "上传到指定场景码目录", notes = "时间戳命名")
+    @ApiOperation(value = "上传到指定场景码目录", notes = "热点-时间戳命名")
     @PostMapping(value = "upload/{sceneCode}", consumes = {"multipart/form-data"})
-    public Result upload(MultipartFile file , @PathVariable String sceneCode) throws IOException {
-
-        if (file == null) {
-            log.error("文件不能为空");
-            return Result.failure("文件不能为空");
-        }
-
-        SceneEntity entity = sceneService.findBySceneCode(sceneCode);
-        if (entity == null) {
-            log.error("场景不存在: {}", sceneCode);
-            return Result.failure("场景不存在");
-        }
-
-        String fileName = file.getOriginalFilename();
-        log.info("原始文件名: {}", fileName);
-//        String time = DateUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS");
-//        String suffix = StringUtils.substringAfterLast(fileName, ".");
-//        suffix = StringUtils.lowerCase(suffix);
-
-//        String newName = time  + "."  +suffix;
-
-
-
-
-        // 去除特殊符号
-        String pinyinName = RegexUtil.specificSymbol(fileName);
-        pinyinName = PinyinUtil.getPinyin(pinyinName, "");
-
-        // 转小写
-        pinyinName =  StringUtils.lowerCase(pinyinName);
-
-
-
-        String basePath = configConstant.serverBasePath + sceneCode;
-        String savePath = basePath + "/edit/" + pinyinName;
-        log.info("文件保存位置:" + savePath);
-        FileUtil.writeFromStream(file.getInputStream(), savePath);
-
-
-        Object urlPath =  entity.getPath() + "/edit/" + pinyinName;
+    public Result upload(MultipartFile file , @PathVariable String sceneCode) {
+        return sceneService.upload(file, sceneCode);
+    }
 
-        log.info("文件写入成功: {}", urlPath);
 
-        // 返回前端数据
-        return Result.success(urlPath);
 
-    }
 
 
 }

+ 3 - 0
gis_scene/src/main/java/com/gis/scene/service/SceneService.java

@@ -7,6 +7,7 @@ import com.gis.common.util.Result;
 import com.gis.scene.entity.dto.RoamViableDto;
 import com.gis.scene.entity.dto.SceneDataDto;
 import com.gis.scene.entity.po.SceneEntity;
+import org.springframework.web.multipart.MultipartFile;
 
 
 /**
@@ -28,4 +29,6 @@ public interface SceneService extends IBaseService<SceneEntity, Long> {
     Result addStar(Long id);
 
     Result addVisit(Long id);
+
+    Result upload(MultipartFile file, String sceneCode);
 }

+ 24 - 3
gis_scene/src/main/java/com/gis/scene/service/impl/SceneServiceImpl.java

@@ -20,7 +20,9 @@ import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.util.Map;
 import java.util.Set;
 
 
@@ -70,7 +72,7 @@ public class SceneServiceImpl extends IBaseServiceImpl<SceneEntity, Long> implem
         // 注意网络下载会有缓存,必须加时间戳
 //        log.info("网络下载文件地址: {}", urlPath);
 //        String localBasePath = FILE_PATH + sceneCode;
-        String localBasePath = configConstant.serverBasePath +"/" + sceneCode;
+        String localBasePath = configConstant.serverBasePath +"/data/" + sceneCode;
 
         // 2. 将vision.modeldata 转 vision.json
         String visionModelDataPath = localBasePath + "/" + visionModelDataName;
@@ -151,7 +153,7 @@ public class SceneServiceImpl extends IBaseServiceImpl<SceneEntity, Long> implem
             return Result.failure("场景不存在");
         }
 
-        String basePath = configConstant.serverBasePath +"/" + sceneCode;
+        String basePath = configConstant.serverBasePath +"/data/" + sceneCode;
 
 
         // 处理someData.json
@@ -323,6 +325,25 @@ public class SceneServiceImpl extends IBaseServiceImpl<SceneEntity, Long> implem
         return Result.success();
     }
 
+    @Override
+    public Result upload(MultipartFile file, String sceneCode) {
+        if (file == null) {
+            log.error("文件不能为空");
+            return Result.failure("文件不能为空");
+        }
+
+        SceneEntity entity = this.findBySceneCode(sceneCode);
+        if (entity == null) {
+            log.error("场景不存在: {}", sceneCode);
+            return Result.failure("场景不存在");
+        }
+
+        Map<String, Object> uploadMap = fileUtils.uploadMap(file, "/data/" + sceneCode + "/edit/hot", false);
+
+
+        return Result.success(uploadMap.get("filePath"));
+    }
+
     /**
      * 2021.04.02 处理infoAttribute的m_title
      * String url  = "https://www.4dmodel.com/SuperTwo/hot_online/index.html?m=" + key;
@@ -392,7 +413,7 @@ public class SceneServiceImpl extends IBaseServiceImpl<SceneEntity, Long> implem
         }
 
         log.info("out data.js : {}", dataJsJson);
-        String basePath = configConstant.serverBasePath +"/" + entity.getSceneCode();
+        String basePath = configConstant.serverBasePath +"/data/" + entity.getSceneCode();
 
         String dataPath = basePath + "/hot/js/data.js";
         FileUtil.writeUtf8String(dataJsJson.toJSONString(), dataPath);