Explorar o código

添加了相机的版本 fielUrl:可以用ip访问下载文件

wuweihao %!s(int64=5) %!d(string=hai) anos
pai
achega
8a708c8919

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

@@ -54,3 +54,5 @@ logging.path=E:/javaProject/log/xiaoan
 
 # file path
 camera.version.path=F:\\test\\xiaoan\\camera_version\\
+
+server.domian=http://localhost:8011

+ 3 - 1
xiaoan-application/src/main/resources/application-sit.properties

@@ -50,4 +50,6 @@ spring.redis.jedis.pool.max-wait=-1ms
 logging.path=/root/user/java/log/xiaoan
 
 # file path
-camera.version.path=/oss/4Dkankan/camera_version/
+camera.version.path=/oss/4Dkankan/camera_version/
+
+server.domian=http://192.168.0.163:8088

+ 3 - 1
xiaoan-application/src/main/resources/application-uat.properties

@@ -50,4 +50,6 @@ spring.redis.jedis.pool.max-wait=-1ms
 logging.path=/root/user/java/log/xiaoan
 
 # file path
-camera.version.path=/oss/4Dkankan/camera_version/
+camera.version.path=/oss/4Dkankan/camera_version/
+
+server.domian=http://218.17.126.170:9997

+ 5 - 0
xiaoan-application/src/main/resources/application.properties

@@ -21,3 +21,8 @@ pagehelper.support-methods-arguments=true
 logging.config=classpath:logback-spring.xml
 logging.level.com.xiaoan=debug
 
+#上传文件大小
+spring.servlet.multipart.enabled=true
+spring.servlet.multipart.max-file-size=512MB
+spring.servlet.multipart.max-request-size=512MB
+

+ 0 - 2
xiaoan-common/src/main/java/com/xiaoan/common/util/FileUtils.java

@@ -2,11 +2,9 @@ package com.xiaoan.common.util;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.io.IoUtil;
 import com.xiaoan.common.constant.MsgCode;
 import com.xiaoan.common.exception.BaseRuntimeException;
 import lombok.extern.log4j.Log4j2;
-import org.springframework.util.ClassUtils;
 import org.springframework.util.ResourceUtils;
 import org.springframework.web.multipart.MultipartFile;
 

+ 101 - 0
xiaoan-common/src/main/java/com/xiaoan/common/util/Result.java

@@ -0,0 +1,101 @@
+package com.xiaoan.common.util;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 通用返回类
+ *
+ * @author
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Result<T> implements Serializable {
+    private static final long serialVersionUID = -1491499610244557029L;
+    public static final String SUCCESS_MSG = "操作成功";
+    public static int CODE_SUCCESS = 0;
+    public static int CODE_FAILURE = -1;
+    public static String[] NOOP = new String[]{};
+
+    /**
+     * 处理状态:0: 成功, 1: 失败
+     */
+    @ApiModelProperty(value = "处理状态:0: 成功, 1: 失败", name = "code")
+    private int code;
+    /**
+     * 消息
+     */
+    @ApiModelProperty(value = "消息", name = "msg")
+    private String msg;
+    /**
+     * 返回数据
+     */
+    @ApiModelProperty(value = "返回数据", name = "data")
+    private T data;
+    /**
+     * 处理成功,并返回数据
+     *
+     * @param data 数据对象
+     * @return data
+     */
+    public static Result success(Object data) {
+        return new Result(CODE_SUCCESS, SUCCESS_MSG, data);
+    }
+    /**
+     * 处理成功
+     *
+     * @return data
+     */
+    public static Result success() {
+        return new Result(CODE_SUCCESS, SUCCESS_MSG, NOOP);
+    }
+    /**
+     * 处理成功
+     *
+     * @param msg 消息
+     * @return data
+     */
+    public static Result success(String msg) {
+        return new Result(CODE_SUCCESS, msg, NOOP);
+    }
+    /**
+     * 处理成功
+     *
+     * @param msg  消息
+     * @param data 数据对象
+     * @return data
+     */
+    public static Result success(String msg, Object data) {
+        return new Result(CODE_SUCCESS, msg, data);
+    }
+    /**
+     * 处理失败,并返回数据(一般为错误信息)
+     *
+     * @param code 错误代码
+     * @param msg  消息
+     * @return data
+     */
+    public static Result failure(int code, String msg) {
+        return new Result(code, msg, NOOP);
+    }
+    /**
+     * 处理失败
+     *
+     * @param msg 消息
+     * @return data
+     */
+    public static Result failure(String msg) {
+        return failure(CODE_FAILURE, msg);
+    }
+
+    @Override
+    public String toString() {
+        return "JsonResult [code=" + code + ", msg=" + msg + ", data="
+                + data + "]";
+    }
+}

+ 4 - 5
xiaoan-dao/src/main/java/com/xiaoan/dao/backend/CameraRepository.java

@@ -21,11 +21,10 @@ public interface CameraRepository extends IBaseMapper<CameraEntity, Long> {
 
 
     @Select(value = "select z.id, z.sn_code, z.child_name, z.wifi_name, z.create_time, z.update_time, d.type from" +
-            " t_camera z left join t_camera_detail d on z.id = d.camera_id where z.rec_status = 'A' " +
-            " and (z.sn_code like #{searchKey} or #{searchKey} is null)" +
-            " and ( z.wifi_name like #{searchKey} or #{searchKey} is null)" +
-            " and (d.user_id = #{userId} or #{userId} is null) " +
-            " order by z.create_time desc")
+        " t_camera z left join t_camera_detail d on z.id = d.camera_id where z.rec_status = 'A' " +
+        " and ( z.wifi_name like #{searchKey} or #{searchKey} is null)" +
+        " and (d.user_id = #{userId} or #{userId} is null) " +
+        " order by z.create_time desc")
     List<CameraResponse> findAllBySearchKey(String searchKey, Long userId);
 
 

+ 4 - 0
xiaoan-domain/src/main/java/com/xiaoan/domain/dto/request/CameraVersionRequest.java

@@ -1,9 +1,11 @@
 package com.xiaoan.domain.dto.request;
 
 import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.constraints.NotBlank;
 
+
 /**
  * Created by owen on 2020/2/27.
  *
@@ -19,6 +21,8 @@ public class CameraVersionRequest {
     @NotBlank(message = "描述不能为空")
     private String description;
 
+    private MultipartFile file;
+
 
 
 

+ 2 - 1
xiaoan-service/src/main/java/com/xiaoan/service/backend/CameraVersionService.java

@@ -1,6 +1,7 @@
 package com.xiaoan.service.backend;
 
 import com.xiaoan.common.model.PageDto;
+import com.xiaoan.common.util.Result;
 import com.xiaoan.common.util.ResultJson;
 import com.xiaoan.domain.backend.CameraVersionEntity;
 import com.xiaoan.domain.dto.request.CameraVersionRequest;
@@ -22,5 +23,5 @@ public interface CameraVersionService extends IBaseService<CameraVersionEntity,
 
     ResultJson updateStatus(Long id, String upperCase);
 
-    ResultJson findByStatus();
+    Result findByStatus();
 }

+ 34 - 11
xiaoan-service/src/main/java/com/xiaoan/service/backend/impl/CameraVersionServiceImpl.java

@@ -1,12 +1,12 @@
 package com.xiaoan.service.backend.impl;
 
-import cn.hutool.core.io.FileUtil;
 import cn.hutool.crypto.SecureUtil;
 import com.github.pagehelper.PageHelper;
 import com.xiaoan.common.constant.MsgCode;
 import com.xiaoan.common.exception.BaseRuntimeException;
 import com.xiaoan.common.model.PageDto;
 import com.xiaoan.common.util.FileUtils;
+import com.xiaoan.common.util.Result;
 import com.xiaoan.common.util.ResultJson;
 import com.xiaoan.dao.backend.CameraVersionMapper;
 import com.xiaoan.dao.backend.IBaseMapper;
@@ -14,16 +14,15 @@ import com.xiaoan.domain.backend.CameraVersionEntity;
 import com.xiaoan.domain.dto.request.CameraVersionRequest;
 import com.xiaoan.service.BaseServiceImpl;
 import com.xiaoan.service.backend.CameraVersionService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 import tk.mybatis.mapper.entity.Condition;
 
-import javax.imageio.IIOException;
 import java.io.File;
-import java.io.IOException;
-import java.util.Base64;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -31,6 +30,7 @@ import java.util.Map;
 /**
  * Created by Hb_zzZ on 2020/2/27.
  */
+@Slf4j
 @Service
 @Transactional
 public class CameraVersionServiceImpl extends BaseServiceImpl<CameraVersionEntity, Long> implements CameraVersionService {
@@ -43,6 +43,10 @@ public class CameraVersionServiceImpl extends BaseServiceImpl<CameraVersionEntit
         return this.entityMapper;
     }
 
+    @Value("${server.domian}")
+    private String domian;
+
+
 
     @Override
     public List<CameraVersionEntity> findAllBySearchKey(PageDto param) {
@@ -52,9 +56,6 @@ public class CameraVersionServiceImpl extends BaseServiceImpl<CameraVersionEntit
 
     @Override
     public void upload(MultipartFile file, CameraVersionRequest param, String savePath) throws Exception {
-        if (!file.isEmpty()&& file.getSize() <= 0) {
-            throw new BaseRuntimeException(MsgCode.e_COMMON_3001, "文件为空");
-        }
 
         Map<String, String> uploadMap = FileUtils.upload(file, savePath);
 
@@ -63,8 +64,18 @@ public class CameraVersionServiceImpl extends BaseServiceImpl<CameraVersionEntit
 
                 // 添加对象信息
         CameraVersionEntity versionEntity = new CameraVersionEntity();
-        versionEntity.setName(name);
-        versionEntity.setFileUrl(path);
+
+        // name存的是文件路径
+        versionEntity.setName(path);
+
+        /**
+         * FileUrl
+         * 通过url下载文件
+         * 需要tomcat指定配置文件
+         *
+         * httpL:ip+port/oss/filename.jpg
+         */
+        versionEntity.setFileUrl(domian + "/oss/" + name);
         versionEntity.setVersion(param.getVersion());
         versionEntity.setDescription(param.getDescription());
         versionEntity.setStatus("I");
@@ -100,7 +111,7 @@ public class CameraVersionServiceImpl extends BaseServiceImpl<CameraVersionEntit
     }
 
     @Override
-    public ResultJson findByStatus() {
+    public Result findByStatus() {
         Condition condition = new Condition(CameraVersionEntity.class);
         // condition property参数是实体类
         condition.createCriteria().andEqualTo("status", "A");
@@ -109,7 +120,19 @@ public class CameraVersionServiceImpl extends BaseServiceImpl<CameraVersionEntit
         CameraVersionEntity entity = null;
         if (cameraVersionEntities.size() > 0) {
             entity = cameraVersionEntities.get(0);
+
+//            /**
+//             * 通过url下载文件
+//             * 需要tomcat指定配置文件
+//             *
+//             * httpL:ip+port/oss/filename.jpg
+//             */
+//            entity.setFileUrl(domian + "/oss/" + entity.getName());
+//            log.info("url: {}", entity.getFileUrl());
+
         }
-        return new ResultJson(MsgCode.SUCCESS_CODE, entity);
+
+
+        return Result.success(entity);
     }
 }

+ 50 - 4
xiaoan-web/src/main/java/com/xiaoan/web/backend/CameraVersionController.java

@@ -3,7 +3,9 @@ package com.xiaoan.web.backend;
 
 import com.github.pagehelper.PageInfo;
 import com.xiaoan.common.constant.MsgCode;
+import com.xiaoan.common.exception.BaseRuntimeException;
 import com.xiaoan.common.model.PageDto;
+import com.xiaoan.common.util.Result;
 import com.xiaoan.common.util.ResultJson;
 import com.xiaoan.dao.backend.CameraVersionMapper;
 import com.xiaoan.domain.backend.CameraVersionEntity;
@@ -64,21 +66,65 @@ public class CameraVersionController extends BaseController {
 
     }
 
+//    @ApiOperation("上传文件")
+//    @WebControllerLog(description = "版本管理-上传文件")
+//    @PutMapping(value = "manage/version/save", consumes = { "multipart/form-data" })
+//    public ResultJson save(@RequestParam("file") MultipartFile file, CameraVersionRequest param) throws Exception {
+//
+////        log.info("111: {}", StringUtils.isEmpty(param.getVersion()));
+////        log.info("2222: {}", param.getVersion());
+//        if(StringUtils.isBlank(param.getVersion())){
+//            log.error("版本不能为空");
+//            return new ResultJson(MsgCode.e_COMMON_3001, "版本不能为空");
+//        }
+//
+//        if(StringUtils.isBlank(param.getDescription())){
+//            log.error("描述不能为空");
+//            return new ResultJson(MsgCode.e_COMMON_3001, "描述不能为空");
+//        }
+//
+//        if (!file.isEmpty() && file.getSize() <= 0) {
+//            log.error("文件不能为空");
+//            throw new BaseRuntimeException(MsgCode.e_COMMON_3001, "文件不能为空");
+//        }
+//
+//        cameraVersionService.upload(file, param, savePath);
+//        return new ResultJson(MsgCode.SUCCESS_CODE, MsgCode.msg_SUCCESS);
+//    }
+
     @ApiOperation("上传文件")
     @WebControllerLog(description = "版本管理-上传文件")
-    @PostMapping(value = "manage/version/save", consumes = { "multipart/form-data" })
-    public ResultJson save(@RequestParam("file") MultipartFile file, @Valid CameraVersionRequest param) throws Exception {
-        cameraVersionService.upload(file, param, savePath);
+    @PutMapping(value = "manage/version/save", consumes = { "multipart/form-data" })
+    public ResultJson save(CameraVersionRequest param) throws Exception {
+
+        if(StringUtils.isBlank(param.getVersion())){
+            log.error("版本不能为空");
+            return new ResultJson(MsgCode.e_COMMON_3001, "版本不能为空");
+        }
+
+        if(StringUtils.isBlank(param.getDescription())){
+            log.error("描述不能为空");
+            return new ResultJson(MsgCode.e_COMMON_3001, "描述不能为空");
+        }
+
+        if (param.getFile() == null) {
+            log.error("文件不能为空");
+            return new ResultJson(MsgCode.e_COMMON_3001, "文件不能为空");
+        }
+
+        cameraVersionService.upload(param.getFile(), param, savePath);
         return new ResultJson(MsgCode.SUCCESS_CODE, MsgCode.msg_SUCCESS);
     }
 
 
     /**
      * 给APP部门接口,不需要拦截
+     *
+     * 返回值不一样
      */
     @ApiOperation("获取激活的相机")
     @GetMapping("version/enabled")
-    public ResultJson getEnabledCameraVersion() {
+    public Result getEnabledCameraVersion() {
         return cameraVersionService.findByStatus();
     }
 

+ 46 - 21
xiaoan-web/src/main/java/com/xiaoan/web/backend/ExceptionController.java

@@ -7,13 +7,18 @@ import lombok.extern.log4j.Log4j2;
 import org.apache.shiro.ShiroException;
 import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authz.UnauthorizedException;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.servlet.NoHandlerFoundException;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolationException;
+import javax.validation.ValidationException;
 
 /**
  * 统一捕捉异常,自定义返回参数
@@ -31,27 +36,6 @@ public class ExceptionController {
 //        return new ResultJson(5003, e.getMessage());
     }
 
-//    @ResponseStatus(HttpStatus.UNAUTHORIZED)
-
-//    @ResponseBody
-//    @ResponseStatus(HttpStatus.OK)
-//    @ExceptionHandler(AuthenticationException.class)
-//    public ResultJson handle401(AuthenticationException e) {
-//        return new ResultJson(500001, e.getMessage());
-//    }
-
-
-//    @ResponseBody
-//    @ResponseStatus(HttpStatus.OK)
-//    @ExceptionHandler(AuthenticationException.class)
-//    public ResultJson handle401(AuthenticationException e) {
-//        Throwable throwable = e.getCause();
-//        if (throwable instanceof AuthenticationException) {
-//
-//            return new ResultJson(500001, throwable.getMessage());
-//        }
-//        return new ResultJson(400001, e.getMessage());
-//    }
 
 
     /**
@@ -90,6 +74,47 @@ public class ExceptionController {
         return new ResultJson(e.getCode(), e.getMsg());
     }
 
+    /**
+     * 方法参数校验
+     *
+     * 注解验证异常
+     */
+    @ExceptionHandler(MethodArgumentNotValidException.class)
+    public ResultJson handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
+        return new ResultJson(60001, e.getBindingResult().getFieldError().getDefaultMessage());
+    }
+
+    /**
+     * ValidationException
+     */
+    @ExceptionHandler(ValidationException.class)
+    public ResultJson handleValidationException(ValidationException e) {
+        log.error(e.getMessage(), e);
+        return new ResultJson(60002, e.getCause().getMessage());
+    }
+
+    /**
+     * ConstraintViolationException
+     */
+    @ExceptionHandler(ConstraintViolationException.class)
+    public ResultJson handleConstraintViolationException(ConstraintViolationException e) {
+        log.error(e.getMessage(), e);
+        return new ResultJson(60003, e.getMessage());
+    }
+
+    @ExceptionHandler(NoHandlerFoundException.class)
+    public ResultJson handlerNoFoundException(Exception e) {
+        log.error(e.getMessage(), e);
+        return new ResultJson(60004, "路径不存在,请检查路径是否正确");
+    }
+
+    @ExceptionHandler(DuplicateKeyException.class)
+    public ResultJson handleDuplicateKeyException(DuplicateKeyException e) {
+        log.error(e.getMessage(), e);
+        return new ResultJson(60005, "数据重复,请检查后提交");
+    }
+
+
 
 }