Procházet zdrojové kódy

添加了相机的版本管理

wuweihao před 5 roky
rodič
revize
d9cb652f44

+ 1 - 0
README.md

@@ -61,5 +61,6 @@ server
         123456
         
     http://192.168.0.163:8088/dist
+    http://192.168.0.163:8088/xiaoan/doc.html
     
     /root/user/java/apache-tomcat-8.0.52-4dkankan-xiaoan/webapps

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

@@ -51,3 +51,6 @@ spring.redis.jedis.pool.max-wait=-1ms
 
 #log
 logging.path=E:/javaProject/log/xiaoan
+
+# file path
+camera.version.path=F:\\test\\xiaoan\\camera_version\\

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

@@ -47,4 +47,7 @@ spring.redis.jedis.pool.max-active=8
 # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
 spring.redis.jedis.pool.max-wait=-1ms
 
-logging.path=/root/user/java/log/xiaoan
+logging.path=/root/user/java/log/xiaoan
+
+# file path
+camera.version.path=/oss/4Dkankan/camera_version/

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

@@ -47,4 +47,7 @@ spring.redis.jedis.pool.max-active=8
 # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
 spring.redis.jedis.pool.max-wait=-1ms
 
-logging.path=/root/user/java/log/xiaoan
+logging.path=/root/user/java/log/xiaoan
+
+# file path
+camera.version.path=/oss/4Dkankan/camera_version/

+ 41 - 10
xiaoan-common/src/main/java/com/xiaoan/common/util/FileUtils.java

@@ -1,9 +1,14 @@
 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;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
@@ -11,10 +16,7 @@ import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.nio.charset.Charset;
 import java.text.SimpleDateFormat;
-import java.util.Base64;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Properties;
+import java.util.*;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
@@ -94,13 +96,13 @@ public class FileUtils {
 
 
     public static void main(String[] args) {
-        String resource = getResource();
-        System.out.println(resource);
-
-        String path = ClassUtils.getDefaultClassLoader().getResource("").getPath();
-        System.out.println(path);
-
+//        String resource = getResource();
+//        System.out.println(resource);
+//
+//        String path = ClassUtils.getDefaultClassLoader().getResource("").getPath();
+//        System.out.println(path);
 
+        System.out.println(DateUtil.format(new Date(),"yyyyMMdd_HHmmss"));
     }
 
 
@@ -454,6 +456,35 @@ public class FileUtils {
     }
 
 
+    /**
+     * 文件上传
+     * savePath 路径(目录)
+     */
+    public static Map<String, String> upload(MultipartFile file, String savePath) throws IOException{
+        if (!file.isEmpty()&& file.getSize() <= 0) {
+            throw new BaseRuntimeException(MsgCode.e_COMMON_3001, "文件为空");
+        }
+
+        // 创建目录
+        FileUtil.mkdir(savePath);
+
+        String time = DateUtil.format(new Date(), "yyyyMMdd_HHmmss");
+        String name = file.getOriginalFilename();
+        name = time+ "_"+name;
+
+        savePath = savePath + name;
+
+        FileUtils.bigFileWrite(file.getInputStream(), savePath);
+
+        HashMap<String, String> resultMap = new HashMap<>();
+        resultMap.put("path", savePath);
+        resultMap.put("name", name);
+
+        return resultMap;
+    }
+
+
+
 
 
 }

+ 24 - 0
xiaoan-dao/src/main/java/com/xiaoan/dao/backend/CameraVersionMapper.java

@@ -0,0 +1,24 @@
+package com.xiaoan.dao.backend;
+
+import com.xiaoan.common.model.PageDto;
+import com.xiaoan.dao.backend.provider.CameraVersionProvider;
+import com.xiaoan.domain.backend.CameraVersionEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.ResultMap;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * Created by owen on 2020/4/21.
+ */
+@Mapper
+@Component
+public interface CameraVersionMapper extends IBaseMapper<CameraVersionEntity, Long> {
+
+//    @ResultMap("BaseResultMap")
+    @SelectProvider(type = CameraVersionProvider.class, method = "findAllBySearchKey")
+    List<CameraVersionEntity> findAllBySearchKey(PageDto param);
+}

+ 0 - 1
xiaoan-dao/src/main/java/com/xiaoan/dao/backend/LogRepository.java

@@ -1,7 +1,6 @@
 package com.xiaoan.dao.backend;
 
 import com.xiaoan.common.model.PageDto;
-//import com.xiaoan.dao.backend.provider.LogProvider;
 import com.xiaoan.dao.backend.provider.LogProvider;
 import com.xiaoan.domain.backend.LogEntity;
 import com.xiaoan.domain.dto.response.LogResponse;

+ 36 - 0
xiaoan-dao/src/main/java/com/xiaoan/dao/backend/provider/CameraVersionProvider.java

@@ -0,0 +1,36 @@
+package com.xiaoan.dao.backend.provider;
+
+import com.xiaoan.common.model.PageDto;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+
+
+/**
+ * Created by owen on 2020/4/23.
+ */
+@Log4j2
+public class CameraVersionProvider {
+
+    public String findAllBySearchKey(PageDto param){
+        StringBuffer sql = new StringBuffer(
+                "select * from t_camera_version where rec_status = 'A' ");
+
+        if(StringUtils.isNotBlank(param.getStartTime()) && StringUtils.isNotBlank(param.getEndTime())){
+
+            sql.append(" and create_time >= ").append("'").append(param.getStartTime()).append("'");
+            sql.append(" and create_time <= ").append("'").append(param.getEndTime()).append("'");
+        }
+
+        String searchKey = param.getSearchKey();
+        if(!StringUtils.isAllBlank(searchKey)){
+            sql.append(" and (( description like '%").append(searchKey).append("%' )");
+            sql.append(" or ( version like '%").append(searchKey).append("%' ))");
+        }
+
+        sql.append(" order by create_time desc");
+        log.info("sql: {}", sql.toString());
+        return sql.toString();
+    }
+
+
+}

+ 1 - 1
xiaoan-dao/src/main/java/com/xiaoan/dao/backend/provider/SceneProvider.java

@@ -13,7 +13,7 @@ public class  SceneProvider {
 
     public String findAllBySearchKey(SceneProRequest param, Long userId){
         StringBuffer sql = new StringBuffer("SELECT a.id, a.thumb, a.view_count, " +
-                "a.scene_name, a.create_time, a.status, a.web_site, b.sn_code, c.real_name " +
+                "a.scene_name, a.create_time, a.update_time, a.status, a.web_site, b.sn_code, c.real_name " +
                 "FROM t_scene_pro a LEFT JOIN t_camera b ON a.camera_id = b.id " +
                 "LEFT JOIN tb_user c ON a.user_id = c.id where a.rec_status = 'A' ");
 

+ 38 - 0
xiaoan-domain/src/main/java/com/xiaoan/domain/backend/CameraVersionEntity.java

@@ -0,0 +1,38 @@
+package com.xiaoan.domain.backend;
+
+import com.xiaoan.common.model.BaseModel;
+import lombok.Data;
+
+import javax.persistence.Column;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * Created by Owen on 2020/4/21 0014 18:05
+ *
+ * 相机版本实体
+ */
+@Data
+@Table(name = "t_camera_version")
+public class CameraVersionEntity extends BaseModel implements Serializable {
+
+    private static final long serialVersionUID = -896361044367701269L;
+
+    @Column(name = "name")
+    private String name; // 名称
+
+    @Column(name = "file_url")
+    private String fileUrl; // 文件路径
+
+    @Column(name = "file_md5")
+    private String fileMd5;
+
+    @Column(name = "description")
+    private String description; // 描述
+
+    @Column(name = "version")
+    private String version; // 相机版本
+
+    @Column(name = "status")
+    private String status; // 状态,是否可用 A:可用, I:禁用
+}

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

@@ -0,0 +1,25 @@
+package com.xiaoan.domain.dto.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Created by owen on 2020/2/27.
+ *
+ * 相机版本上传
+ */
+@Data
+public class CameraVersionRequest {
+
+    @NotBlank(message = "版本不能为空")
+    private String version;
+
+
+    @NotBlank(message = "描述不能为空")
+    private String description;
+
+
+
+
+}

+ 26 - 0
xiaoan-service/src/main/java/com/xiaoan/service/backend/CameraVersionService.java

@@ -0,0 +1,26 @@
+package com.xiaoan.service.backend;
+
+import com.xiaoan.common.model.PageDto;
+import com.xiaoan.common.util.ResultJson;
+import com.xiaoan.domain.backend.CameraVersionEntity;
+import com.xiaoan.domain.dto.request.CameraVersionRequest;
+import com.xiaoan.service.IBaseService;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+
+/**
+ * Created by owen on 2020/3/4 0004 17:15
+ */
+public interface CameraVersionService extends IBaseService<CameraVersionEntity, Long> {
+
+
+    List<CameraVersionEntity> findAllBySearchKey(PageDto param);
+
+    void upload(MultipartFile file, CameraVersionRequest param, String savePath) throws Exception;
+
+    ResultJson updateStatus(Long id, String upperCase);
+
+    ResultJson findByStatus();
+}

+ 115 - 0
xiaoan-service/src/main/java/com/xiaoan/service/backend/impl/CameraVersionServiceImpl.java

@@ -0,0 +1,115 @@
+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.ResultJson;
+import com.xiaoan.dao.backend.CameraVersionMapper;
+import com.xiaoan.dao.backend.IBaseMapper;
+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 org.springframework.beans.factory.annotation.Autowired;
+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;
+
+/**
+ * Created by Hb_zzZ on 2020/2/27.
+ */
+@Service
+@Transactional
+public class CameraVersionServiceImpl extends BaseServiceImpl<CameraVersionEntity, Long> implements CameraVersionService {
+
+    @Autowired
+    private CameraVersionMapper entityMapper;
+
+    @Override
+    public IBaseMapper<CameraVersionEntity, Long> getBaseMapper() {
+        return this.entityMapper;
+    }
+
+
+    @Override
+    public List<CameraVersionEntity> findAllBySearchKey(PageDto param) {
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        return entityMapper.findAllBySearchKey(param);
+    }
+
+    @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);
+
+        String path = uploadMap.get("path");
+        String name = uploadMap.get("name");
+
+                // 添加对象信息
+        CameraVersionEntity versionEntity = new CameraVersionEntity();
+        versionEntity.setName(name);
+        versionEntity.setFileUrl(path);
+        versionEntity.setVersion(param.getVersion());
+        versionEntity.setDescription(param.getDescription());
+        versionEntity.setStatus("I");
+        versionEntity.setFileMd5(SecureUtil.md5(new File(path)));
+
+        this.save(versionEntity);
+    }
+
+    @Override
+    public ResultJson updateStatus(Long id, String status) {
+
+        CameraVersionEntity cameraVersionEntity = entityMapper.selectByPrimaryKey(id);
+        if (cameraVersionEntity == null){
+            throw new BaseRuntimeException(MsgCode.e_COMMON_3001, "id不存在");
+        }
+
+        // 仅有有一台相机是活动状态
+        // 查找所以活动状态相机
+        Condition condition = new Condition(CameraVersionEntity.class);
+        condition.createCriteria().andEqualTo("status", "A");
+        List<CameraVersionEntity> entityList  = entityMapper.selectByCondition(condition);
+        for (CameraVersionEntity entity : entityList) {
+            entity.setStatus("I");
+            entity.setUpdateTime(new Date());
+            entityMapper.updateByPrimaryKey(entity);
+        }
+
+        cameraVersionEntity.setStatus(status);
+        cameraVersionEntity.setUpdateTime(new Date());
+        entityMapper.updateByPrimaryKey(cameraVersionEntity);
+
+        return new ResultJson(MsgCode.SUCCESS_CODE, MsgCode.msg_SUCCESS);
+    }
+
+    @Override
+    public ResultJson findByStatus() {
+        Condition condition = new Condition(CameraVersionEntity.class);
+        // condition property参数是实体类
+        condition.createCriteria().andEqualTo("status", "A");
+        condition.createCriteria().andEqualTo("recStatus", "A");
+        List<CameraVersionEntity> cameraVersionEntities = entityMapper.selectByCondition(condition);
+        CameraVersionEntity entity = null;
+        if (cameraVersionEntities.size() > 0) {
+            entity = cameraVersionEntities.get(0);
+        }
+        return new ResultJson(MsgCode.SUCCESS_CODE, entity);
+    }
+}

+ 85 - 0
xiaoan-web/src/main/java/com/xiaoan/web/backend/CameraVersionController.java

@@ -0,0 +1,85 @@
+package com.xiaoan.web.backend;
+
+
+import com.github.pagehelper.PageInfo;
+import com.xiaoan.common.constant.MsgCode;
+import com.xiaoan.common.model.PageDto;
+import com.xiaoan.common.util.ResultJson;
+import com.xiaoan.dao.backend.CameraVersionMapper;
+import com.xiaoan.domain.backend.CameraVersionEntity;
+import com.xiaoan.domain.dto.request.CameraVersionRequest;
+import com.xiaoan.domain.dto.response.UserResponse;
+import com.xiaoan.service.backend.CameraVersionService;
+import com.xiaoan.web.aop.WebControllerLog;
+import io.swagger.annotations.Api;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+
+/**
+ * Created by Owen on 2020/4/21 0014 18:05
+ *
+ * 相机版本管理
+ */
+@Api(tags = "后台相机版本管理")
+@Log4j2
+@RestController
+@RequestMapping("api")
+public class CameraVersionController extends BaseController {
+
+    @Autowired
+    private CameraVersionService cameraVersionService;
+
+    @Value("${camera.version.path}")
+    private String savePath;
+
+
+    @WebControllerLog(description = "版本管理-固件列表")
+    @ApiOperation("相机列表")
+    @PostMapping("manage/version/list")
+    public ResultJson list(@RequestBody PageDto param){
+        PageInfo<CameraVersionEntity> page =  new PageInfo<CameraVersionEntity>(cameraVersionService.findAllBySearchKey(param));
+        return new ResultJson(MsgCode.SUCCESS_CODE, page);
+    }
+
+
+    /**
+     * 仅有有一台相机是活动状态
+     */
+    @ApiOperation("更新状态")
+    @GetMapping("manage/version/update/{id}/{status}")
+    public ResultJson updateStatus(@PathVariable("id") Long id, @PathVariable("status") String status) {
+        return cameraVersionService.updateStatus(id, StringUtils.upperCase(status));
+
+    }
+
+    @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);
+        return new ResultJson(MsgCode.SUCCESS_CODE, MsgCode.msg_SUCCESS);
+    }
+
+
+    /**
+     * 给APP部门接口,不需要拦截
+     */
+    @ApiOperation("获取激活的相机")
+    @GetMapping("version/enabled")
+    public ResultJson getEnabledCameraVersion() {
+        return cameraVersionService.findByStatus();
+    }
+
+}

+ 26 - 4
xiaoan-web/src/main/java/com/xiaoan/web/backend/TestController.java

@@ -2,13 +2,13 @@ package com.xiaoan.web.backend;
 
 import com.xiaoan.common.constant.MsgCode;
 import com.xiaoan.common.model.PageDto;
+import com.xiaoan.common.util.FileUtils;
 import com.xiaoan.common.util.ResultJson;
-import com.xiaoan.dao.backend.LogRepository;
-import com.xiaoan.dao.backend.RoleRepository;
-import com.xiaoan.dao.backend.SceneRepository;
-import com.xiaoan.dao.backend.UserRepository;
+import com.xiaoan.dao.backend.*;
+import com.xiaoan.domain.backend.CameraVersionEntity;
 import com.xiaoan.domain.backend.ResourceEntity;
 import com.xiaoan.domain.backend.UserEntity;
+import com.xiaoan.domain.dto.request.CameraVersionRequest;
 import com.xiaoan.domain.dto.request.SceneProRequest;
 import com.xiaoan.domain.dto.response.LogResponse;
 import com.xiaoan.domain.dto.response.SceneResponse;
@@ -20,7 +20,9 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.validation.Valid;
 import java.util.Date;
 import java.util.List;
 
@@ -50,6 +52,11 @@ public class TestController {
     @Autowired
     private SceneRepository sceneRepository;
 
+    @Autowired
+    private CameraVersionMapper cameraVersionMapper;
+
+
+
 
 
     @Autowired
@@ -68,6 +75,21 @@ public class TestController {
         return new ResultJson(2000, resource);
     }
 
+    @ApiOperation("cameraVersionMapper")
+    @PostMapping("cameraVersionMapper")
+    public ResultJson cameraVersionMapper(@RequestBody PageDto param){
+        List<CameraVersionEntity> allBySearchKey = cameraVersionMapper.findAllBySearchKey(param);
+
+        return new ResultJson(2000, allBySearchKey);
+    }
+
+
+//    @ApiOperation("测试上传文件")
+//    @PostMapping(value = "upload", consumes = { "multipart/form-data" })
+//    public ResultJson upload(@RequestParam("file") MultipartFile file) throws Exception{
+//        return new ResultJson(2000, FileUtils.upload(file));
+//    }
+
 
     @ApiOperation("测试scene按日期查询")
     @PostMapping("scene/search/date")