Преглед изворни кода

提交接收推送的图片处理
提交后台管理

zhuoning пре 4 година
родитељ
комит
ffa93d5e62
26 измењених фајлова са 1733 додато и 34 уклоњено
  1. 118 0
      huimv-video/.mvn/wrapper/MavenWrapperDownloader.java
  2. BIN
      huimv-video/.mvn/wrapper/maven-wrapper.jar
  3. 2 0
      huimv-video/.mvn/wrapper/maven-wrapper.properties
  4. 15 0
      huimv-video/huimv-video-manager/src/main/java/com/huimv/manager/HuimvVideoManagerApplication.java
  5. 34 0
      huimv-video/huimv-video-manager/src/main/java/com/huimv/manager/controller/ImageController.java
  6. 27 0
      huimv-video/huimv-video-manager/src/main/java/com/huimv/manager/service/IImageService.java
  7. 55 0
      huimv-video/huimv-video-manager/src/main/java/com/huimv/manager/service/impl/ImageServiceImpl.java
  8. 221 0
      huimv-video/huimv-video-manager/src/main/java/com/huimv/process/dao/entity/ImagePathEntity.java
  9. 14 0
      huimv-video/huimv-video-manager/src/main/java/com/huimv/process/dao/repo/ImagePathRepo.java
  10. 4 7
      huimv-video/huimv-video-process/pom.xml
  11. 2 0
      huimv-video/huimv-video-process/src/main/java/com/huimv/process/HuimvVideoProcessApplication.java
  12. 25 0
      huimv-video/huimv-video-process/src/main/java/com/huimv/process/config/Config.java
  13. 33 0
      huimv-video/huimv-video-process/src/main/java/com/huimv/process/config/RestTemplateConfig.java
  14. 126 12
      huimv-video/huimv-video-process/src/main/java/com/huimv/process/controller/ImageController.java
  15. 221 0
      huimv-video/huimv-video-process/src/main/java/com/huimv/process/dao/entity/ImagePathEntity.java
  16. 9 0
      huimv-video/huimv-video-process/src/main/java/com/huimv/process/dao/repo/ImagePathEntityRepository.java
  17. 42 1
      huimv-video/huimv-video-process/src/main/java/com/huimv/process/service/IImageService.java
  18. 167 8
      huimv-video/huimv-video-process/src/main/java/com/huimv/process/service/impl/ImageServiceImpl.java
  19. 77 0
      huimv-video/huimv-video-process/src/main/java/com/huimv/process/utils/utils.java
  20. 4 3
      huimv-video/huimv-video-process/src/main/resources/application-dev.yml
  21. 322 0
      huimv-video/mvnw
  22. 182 0
      huimv-video/mvnw.cmd
  23. 33 3
      huimv-video/pom.xml
  24. BIN
      huimv-video/uploadImages/东舍1号_1611132486259.jpg
  25. BIN
      huimv-video/uploadImages/东舍1号_1611133125959.jpg
  26. BIN
      huimv-video/uploadImages/东舍1号_1611133490108.jpg

+ 118 - 0
huimv-video/.mvn/wrapper/MavenWrapperDownloader.java

@@ -0,0 +1,118 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.6";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+            + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if (mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if (mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if (!outputFile.getParentFile().exists()) {
+            if (!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}

BIN
huimv-video/.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
huimv-video/.mvn/wrapper/maven-wrapper.properties

@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

+ 15 - 0
huimv-video/huimv-video-manager/src/main/java/com/huimv/manager/HuimvVideoManagerApplication.java

@@ -0,0 +1,15 @@
+package com.huimv.manager;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import tk.mybatis.spring.annotation.MapperScan;
+
+@MapperScan(basePackages = {"com.huimv.process.dao"})
+@SpringBootApplication
+public class HuimvVideoManagerApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(HuimvVideoManagerApplication.class, args);
+    }
+
+}

+ 34 - 0
huimv-video/huimv-video-manager/src/main/java/com/huimv/manager/controller/ImageController.java

@@ -0,0 +1,34 @@
+package com.huimv.manager.controller;
+
+import com.huimv.manager.service.IImageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@RestController
+@RequestMapping("/image")
+public class ImageController {
+    @Autowired
+    private IImageService imageService;
+
+    @RequestMapping(value="/getLastImageAiResult",method = RequestMethod.GET)
+    public String getLastImageAiResult(){
+        //
+        return imageService.getLastImage();
+    }
+
+    @RequestMapping(value="/getNextImageAiResult",method = RequestMethod.GET)
+    public String getNextImageAiResult(){
+        //
+        return imageService.getNextImage();
+    }
+}

+ 27 - 0
huimv-video/huimv-video-manager/src/main/java/com/huimv/manager/service/IImageService.java

@@ -0,0 +1,27 @@
+package com.huimv.manager.service;
+
+public interface IImageService {
+    /**
+     * @Method      : getLastImage
+     * @Description : 
+     * @Params      : []
+     * @Return      : java.lang.String
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/21       
+     * @Time        : 20:56
+     */
+    String getLastImage();
+
+    /**
+     * @Method      : getNextImage
+     * @Description : 
+     * @Params      : []
+     * @Return      : java.lang.String
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/21       
+     * @Time        : 20:56
+     */
+    String getNextImage();
+}

+ 55 - 0
huimv-video/huimv-video-manager/src/main/java/com/huimv/manager/service/impl/ImageServiceImpl.java

@@ -0,0 +1,55 @@
+package com.huimv.manager.service.impl;
+
+import com.huimv.manager.service.IImageService;
+import com.huimv.process.dao.entity.ImagePathEntity;
+import com.huimv.process.dao.repo.ImagePathRepo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Service
+public class ImageServiceImpl implements IImageService {
+    @Autowired
+    private ImagePathRepo imagePathRepo;
+
+    /**
+     * @Method      : getLastImage
+     * @Description : 读取最后一幅图像
+     * @Params      : []
+     * @Return      : java.lang.String
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/21
+     * @Time        : 20:49
+     */
+    @Override
+    public String getLastImage() {
+        // 读取最后一幅图像
+        ImagePathEntity imagePathEntity = imagePathRepo.getLastImage();
+        return imagePathEntity.toString();
+    }
+
+    /**
+     * @Method      : getNextImage
+     * @Description : 读取下一副图像
+     * @Params      : []
+     * @Return      : java.lang.String
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/21
+     * @Time        : 20:49
+     */
+    @Override
+    public String getNextImage() {
+        // 读取下一副图像
+        ImagePathEntity imagePathEntity = imagePathRepo.getNextImage();
+        return imagePathEntity.toString();
+    }
+}

+ 221 - 0
huimv-video/huimv-video-manager/src/main/java/com/huimv/process/dao/entity/ImagePathEntity.java

@@ -0,0 +1,221 @@
+package com.huimv.process.dao.entity;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "image_path")
+public class ImagePathEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false)
+    private Integer id;
+
+    /**
+     * 摄像机名称
+     */
+    @Column(name = "name")
+    private String name;
+
+    /**
+     * 文件相对路径
+     */
+    @Column(name = "img_path")
+    private String imgPath;
+
+    /**
+     * 文件绝对路径
+     */
+    @Column(name = "relative_path")
+    private String relativePath;
+
+    /**
+     * 文件名称
+     */
+    @Column(name = "file_name")
+    private String fileName;
+
+    /**
+     * 是否有效(1:有效 0:无效)
+     */
+    @Column(name = "effective")
+    private Integer effective;
+
+    /**
+     * AI识别结果
+     */
+    @Column(name = "ai_result")
+    private String aiResult;
+
+    /**
+     * AI用时
+     */
+    @Column(name = "ai_time_used")
+    private Integer aiTimeUsed;
+
+    /**
+     * AI数据
+     */
+    @Column(name = "ai_data")
+    private String aiData;
+
+    @Column(name = "create_date")
+    private Timestamp createDate;
+
+    /**
+     * 主键
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 主键
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * 摄像机名称
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * 摄像机名称
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * 文件相对路径
+     */
+    public void setImgPath(String imgPath) {
+        this.imgPath = imgPath;
+    }
+
+    /**
+     * 文件相对路径
+     */
+    public String getImgPath() {
+        return imgPath;
+    }
+
+    /**
+     * 文件绝对路径
+     */
+    public void setRelativePath(String relativePath) {
+        this.relativePath = relativePath;
+    }
+
+    /**
+     * 文件绝对路径
+     */
+    public String getRelativePath() {
+        return relativePath;
+    }
+
+    /**
+     * 文件名称
+     */
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    /**
+     * 文件名称
+     */
+    public String getFileName() {
+        return fileName;
+    }
+
+    /**
+     * 是否有效(1:有效 0:无效)
+     */
+    public void setEffective(Integer effective) {
+        this.effective = effective;
+    }
+
+    /**
+     * 是否有效(1:有效 0:无效)
+     */
+    public Integer getEffective() {
+        return effective;
+    }
+
+    /**
+     * AI识别结果
+     */
+    public void setAiResult(String aiResult) {
+        this.aiResult = aiResult;
+    }
+
+    /**
+     * AI识别结果
+     */
+    public String getAiResult() {
+        return aiResult;
+    }
+
+    /**
+     * AI用时
+     */
+    public void setAiTimeUsed(Integer aiTimeUsed) {
+        this.aiTimeUsed = aiTimeUsed;
+    }
+
+    /**
+     * AI用时
+     */
+    public Integer getAiTimeUsed() {
+        return aiTimeUsed;
+    }
+
+    /**
+     * AI数据
+     */
+    public void setAiData(String aiData) {
+        this.aiData = aiData;
+    }
+
+    /**
+     * AI数据
+     */
+    public String getAiData() {
+        return aiData;
+    }
+
+    public void setCreateDate(Timestamp createDate) {
+        this.createDate = createDate;
+    }
+
+    public Timestamp getCreateDate() {
+        return createDate;
+    }
+
+    @Override
+    public String toString() {
+        return "ImagePathEntity{" +
+                "id=" + id + '\'' +
+                "name=" + name + '\'' +
+                "imgPath=" + imgPath + '\'' +
+                "relativePath=" + relativePath + '\'' +
+                "fileName=" + fileName + '\'' +
+                "effective=" + effective + '\'' +
+                "aiResult=" + aiResult + '\'' +
+                "aiTimeUsed=" + aiTimeUsed + '\'' +
+                "aiData=" + aiData + '\'' +
+                "createDate=" + createDate + '\'' +
+                '}';
+    }
+}

+ 14 - 0
huimv-video/huimv-video-manager/src/main/java/com/huimv/process/dao/repo/ImagePathRepo.java

@@ -0,0 +1,14 @@
+package com.huimv.process.dao.repo;
+
+import com.huimv.process.dao.entity.ImagePathEntity;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+
+public interface ImagePathRepo extends JpaRepository<ImagePathEntity, Integer>, JpaSpecificationExecutor<ImagePathEntity> {
+    @Query(nativeQuery = true, value = "SELECT * FROM image_path ORDER BY create_time DESC LIMIT 1")
+    ImagePathEntity getLastImage();
+
+    @Query(nativeQuery = true, value = "SELECT * FROM image_path")
+    ImagePathEntity getNextImage();
+}

+ 4 - 7
huimv-video/huimv-video-process/pom.xml

@@ -45,17 +45,14 @@
 <!--            <artifactId>mapper-generator</artifactId>-->
 <!--            <version>1.0.0</version>-->
 <!--        </dependency>-->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <scope>runtime</scope>
-            <version>5.1.46</version>
-        </dependency>
 <!--        <dependency>-->
 <!--            <groupId>mysql</groupId>-->
 <!--            <artifactId>mysql-connector-java</artifactId>-->
-<!--            <version>5.1.29</version>-->
+<!--            <scope>runtime</scope>-->
+<!--            <version>5.1.46</version>-->
 <!--        </dependency>-->
+
+
     </dependencies>
 
 <!--    <build>-->

+ 2 - 0
huimv-video/huimv-video-process/src/main/java/com/huimv/process/HuimvVideoProcessApplication.java

@@ -2,7 +2,9 @@ package com.huimv.process;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import tk.mybatis.spring.annotation.MapperScan;
 
+@MapperScan(basePackages = {"com.huimv.process.dao"})
 @SpringBootApplication
 public class HuimvVideoProcessApplication {
 

+ 25 - 0
huimv-video/huimv-video-process/src/main/java/com/huimv/process/config/Config.java

@@ -0,0 +1,25 @@
+package com.huimv.process.config;
+
+import org.springframework.boot.web.client.RestTemplateBuilder;
+//import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+//@Configuration
+public class Config {
+//    @LoadBalanced
+    @Bean
+    public RestTemplate restTemplate(RestTemplateBuilder builder){
+        return builder.build();
+    }
+
+}

+ 33 - 0
huimv-video/huimv-video-process/src/main/java/com/huimv/process/config/RestTemplateConfig.java

@@ -0,0 +1,33 @@
+package com.huimv.process.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+
+@Configuration
+public class RestTemplateConfig {
+    @Bean
+    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
+        return new RestTemplate(factory);
+    }
+
+    @Bean
+    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
+        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+        factory.setReadTimeout(5000);//ms
+        factory.setConnectTimeout(15000);//ms
+        return factory;
+    }
+
+}

+ 126 - 12
huimv-video/huimv-video-process/src/main/java/com/huimv/process/controller/ImageController.java

@@ -1,13 +1,18 @@
 package com.huimv.process.controller;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.huimv.process.service.IImageService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.client.RestTemplate;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 
 /**
@@ -23,17 +28,126 @@ import java.io.IOException;
 @Slf4j
 public class ImageController {
     @Autowired
-    private IImageService iImageService;
+    private IImageService imageService;
 
-    @RequestMapping(value = "/upload", method = RequestMethod.POST)
-    public void uploadPicture(@RequestParam("name") String name, @RequestParam("image") String imageBase64) throws IOException {
-        log.info(" name>>" + name);
-        log.info(" image_base64.length>>" + imageBase64.length());
-        //
-        if(iImageService.saveImage(imageBase64,name)){
+    @ResponseBody
+    @RequestMapping(value = "/upload", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
+    public void uploadImage(@RequestBody JSONObject paramJo) throws IOException {
+//        log.info(" name>>" + paramJo.getString("name"));
+//        log.info(" image>>" + paramJo.getString("image"));
+        String name = paramJo.getString("name");
+        if (name == null) {
+            log.error("出错:参数name为null");
+        }
+        String image = paramJo.getString("image");
+        if (image == null) {
+            log.error("出错:参数image为null");
+        }
+//    }
+//        if(imageService.saveImage(imageBase64,name)){
+        // 保存图片
+        JSONObject saveResultJo = imageService.saveImage(image, name);
+        if (saveResultJo.getBoolean("result")) {
             log.info("保存图片成功");
-        }else{
+            String imgPath = saveResultJo.getString("imgPath");
+            String relativePath = saveResultJo.getString("relativePath");
+            String fileName = saveResultJo.getString("fileName");
+            // AI识别程序的结果
+//            String aiResult = imageService.getAiResult2(imgPath);
+            JSONObject aiResultJo = imageService.getAiResult(imgPath,fileName);
+//            System.out.println("aiResultJo>>" + aiResultJo);
+            String aiResult = aiResultJo.getString("result");
+            if(!aiResult.trim().equalsIgnoreCase("success")){
+                log.error("AI识别结果出错: "+aiResultJo);
+            }else{
+                log.info("AI正常识别.");
+            }
+            int aiTimeUsed = aiResultJo.getInteger("timeUsed");
+            JSONArray aiPiggyJa = aiResultJo.getJSONArray("piggy");
+            // 图片入库
+            if(imageService.addImage(name, imgPath, relativePath, fileName,aiResult,aiTimeUsed,aiPiggyJa.toString())){
+                log.info("图片入库成功.");
+            }else{
+                log.info("图片入库出错.");
+            }
+        } else {
+            log.error("保存图片出错");
+        }
+    }
+
+    /**
+     * @Method      : uploadPicture
+     * @Description : 
+     * @Params      : [name, image]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/21       
+     * @Time        : 17:55
+     */
+    @RequestMapping(value = "/uploadPicture", method = RequestMethod.POST)
+    public void uploadPicture(@RequestParam(value = "name", required = false) String name, @RequestParam(value = "image", required = false) String image) throws IOException {
+        log.info(" name>>" + name);
+        log.info(" image>>" + image);
+
+        // 保存图片
+        JSONObject saveResultJo = imageService.saveImage(image, name);
+        if (saveResultJo.getBoolean("result")) {
+            String imgPath = saveResultJo.getString("imgPath");
+            String relativePath = saveResultJo.getString("relativePath");
+            String fileName = saveResultJo.getString("fileName");
+            // AI识别程序的结果
+//            String aiResult = imageService.getAiResult(imgPath);
+            String aiResult = imageService.getAiResult2("D:\\pic\\20210120175259.jpg");
+            System.out.println("aiResult>>" + aiResult);
+            // 图片入库
+//            boolean result = imageService.addImage(name, imgPath, relativePath, fileName);
+//            log.info("保存图片成功");
+        } else {
             log.error("保存图片出错");
         }
     }
+
+//    @RequestMapping(value = "/upload", method = RequestMethod.POST)
+//    public void uploadPicture(@RequestParam(value = "name",required = false) String name, @RequestParam(value = "image",required = false) String image) throws IOException {
+//        log.info(" name>>" + name);
+//        log.info(" image>>" + image);
+//        log.info(" image.length>>" + image.length());
+////
+//
+//        //
+////        if(saveResultJo.getBoolean("result")){
+////            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
+////            File file=new File("D:\\pic\\微信图片_20210120175259.jpg");
+////            byte[] bytesArray = new byte[(int) file.length()];
+////            FileInputStream fis = new FileInputStream(file);
+////            fis.read(bytesArray); //read file into bytes[]
+////            fis.close();
+////            ByteArrayResource contentsAsResource = new ByteArrayResource(bytesArray) {
+////                @Override
+////                public String getFilename() {
+////                    return "imageData";
+////                }
+////            };
+////            paramMap.add("imageData", contentsAsResource);
+////            JSONObject json = restTemplate.postForObject("http://122.112.224.199:31288/api/piggy",paramMap,JSONObject.class);
+////            System.out.println("post json : " + json);
+////        if(imageService.saveImage(imageBase64,name)){
+//        JSONObject saveResultJo = imageService.saveImage(image, name);
+//        if (saveResultJo.getBoolean("result")) {
+//            String imgPath = saveResultJo.getString("imgPath");
+//            String relativePath = saveResultJo.getString("relativePath");
+//            String fileName = saveResultJo.getString("fileName");
+//            // 图片入库
+//            boolean result = imageService.addImage(name, imgPath, relativePath, fileName);
+//            log.info("保存图片成功");
+//        } else {
+//            log.error("保存图片出错");
+//        }
+//    }
+
+
+//    @RequestMapping(value = "/upload", method = RequestMethod.POST)
+//    public void distinguishPig(){
+//    }
 }

+ 221 - 0
huimv-video/huimv-video-process/src/main/java/com/huimv/process/dao/entity/ImagePathEntity.java

@@ -0,0 +1,221 @@
+package com.huimv.process.dao.entity;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "image_path")
+public class ImagePathEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false)
+    private Integer id;
+
+    /**
+     * 摄像机名称
+     */
+    @Column(name = "name")
+    private String name;
+
+    /**
+     * 文件相对路径
+     */
+    @Column(name = "img_path")
+    private String imgPath;
+
+    /**
+     * 文件绝对路径
+     */
+    @Column(name = "relative_path")
+    private String relativePath;
+
+    /**
+     * 文件名称
+     */
+    @Column(name = "file_name")
+    private String fileName;
+
+    /**
+     * 是否有效(1:有效 0:无效)
+     */
+    @Column(name = "effective")
+    private Integer effective;
+
+    /**
+     * AI识别结果
+     */
+    @Column(name = "ai_result")
+    private String aiResult;
+
+    /**
+     * AI用时
+     */
+    @Column(name = "ai_time_used")
+    private Integer aiTimeUsed;
+
+    /**
+     * AI数据
+     */
+    @Column(name = "ai_data")
+    private String aiData;
+
+    @Column(name = "create_date")
+    private Timestamp createDate;
+
+    /**
+     * 主键
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 主键
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * 摄像机名称
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * 摄像机名称
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * 文件相对路径
+     */
+    public void setImgPath(String imgPath) {
+        this.imgPath = imgPath;
+    }
+
+    /**
+     * 文件相对路径
+     */
+    public String getImgPath() {
+        return imgPath;
+    }
+
+    /**
+     * 文件绝对路径
+     */
+    public void setRelativePath(String relativePath) {
+        this.relativePath = relativePath;
+    }
+
+    /**
+     * 文件绝对路径
+     */
+    public String getRelativePath() {
+        return relativePath;
+    }
+
+    /**
+     * 文件名称
+     */
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    /**
+     * 文件名称
+     */
+    public String getFileName() {
+        return fileName;
+    }
+
+    /**
+     * 是否有效(1:有效 0:无效)
+     */
+    public void setEffective(Integer effective) {
+        this.effective = effective;
+    }
+
+    /**
+     * 是否有效(1:有效 0:无效)
+     */
+    public Integer getEffective() {
+        return effective;
+    }
+
+    /**
+     * AI识别结果
+     */
+    public void setAiResult(String aiResult) {
+        this.aiResult = aiResult;
+    }
+
+    /**
+     * AI识别结果
+     */
+    public String getAiResult() {
+        return aiResult;
+    }
+
+    /**
+     * AI用时
+     */
+    public void setAiTimeUsed(Integer aiTimeUsed) {
+        this.aiTimeUsed = aiTimeUsed;
+    }
+
+    /**
+     * AI用时
+     */
+    public Integer getAiTimeUsed() {
+        return aiTimeUsed;
+    }
+
+    /**
+     * AI数据
+     */
+    public void setAiData(String aiData) {
+        this.aiData = aiData;
+    }
+
+    /**
+     * AI数据
+     */
+    public String getAiData() {
+        return aiData;
+    }
+
+    public void setCreateDate(Timestamp createDate) {
+        this.createDate = createDate;
+    }
+
+    public Timestamp getCreateDate() {
+        return createDate;
+    }
+
+    @Override
+    public String toString() {
+        return "ImagePathEntity{" +
+                "id=" + id + '\'' +
+                "name=" + name + '\'' +
+                "imgPath=" + imgPath + '\'' +
+                "relativePath=" + relativePath + '\'' +
+                "fileName=" + fileName + '\'' +
+                "effective=" + effective + '\'' +
+                "aiResult=" + aiResult + '\'' +
+                "aiTimeUsed=" + aiTimeUsed + '\'' +
+                "aiData=" + aiData + '\'' +
+                "createDate=" + createDate + '\'' +
+                '}';
+    }
+}

+ 9 - 0
huimv-video/huimv-video-process/src/main/java/com/huimv/process/dao/repo/ImagePathEntityRepository.java

@@ -0,0 +1,9 @@
+package com.huimv.process.dao.repo;
+
+import com.huimv.process.dao.entity.ImagePathEntity;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface ImagePathEntityRepository extends JpaRepository<ImagePathEntity, Integer>, JpaSpecificationExecutor<ImagePathEntity> {
+
+}

+ 42 - 1
huimv-video/huimv-video-process/src/main/java/com/huimv/process/service/IImageService.java

@@ -1,5 +1,9 @@
 package com.huimv.process.service;
 
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.IOException;
+
 public interface IImageService {
 
     /**
@@ -12,5 +16,42 @@ public interface IImageService {
      * @Date        : 2021/1/20       
      * @Time        : 15:51
      */
-    public boolean saveImage(String imageBase64, String name);
+    public JSONObject saveImage(String imageBase64, String name);
+//    public boolean saveImage(String imageBase64, String name);
+
+    /**
+     * @Method      : addImage
+     * @Description : 
+     * @Params      : [name, imgPath, relativePath, fileName]
+     * @Return      : boolean
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/21       
+     * @Time        : 14:23
+     */
+    boolean addImage(String name, String imgPath, String relativePath, String fileName,String aiResult,int aiTimeUsed,String aiData);
+
+    /**
+     * @Method      : getAIResult2
+     * @Description : 获取AI识别结果
+     * @Params      : [imgPath]
+     * @Return      : java.lang.String
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/21       
+     * @Time        : 16:18
+     */
+    String getAiResult2(String imgPath) throws IOException;
+
+    /**
+     * @Method      : getAiResult
+     * @Description : 
+     * @Params      : [imgPath, fileName]
+     * @Return      : com.alibaba.fastjson.JSONObject
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2021/1/21       
+     * @Time        : 19:55
+     */
+    JSONObject getAiResult(String imgPath,String fileName) throws IOException;
 }

+ 167 - 8
huimv-video/huimv-video-process/src/main/java/com/huimv/process/service/impl/ImageServiceImpl.java

@@ -1,12 +1,22 @@
 package com.huimv.process.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.huimv.process.dao.entity.ImagePathEntity;
+import com.huimv.process.dao.repo.ImagePathEntityRepository;
 import com.huimv.process.service.IImageService;
 import com.huimv.process.utils.PictureUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ByteArrayResource;
 import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+import sun.misc.BASE64Decoder;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
 
 /**
  * @Project : huimv.shiwan
@@ -19,22 +29,36 @@ import java.io.File;
 @Service
 @Slf4j
 public class ImageServiceImpl implements IImageService {
-
     @Autowired
     private PictureUtil pictureUtil;
+    @Autowired
+    private ImagePathEntityRepository imagePathRepo;
+    @Autowired
+    private RestTemplate restTemplate;
+    @Autowired
+    private com.huimv.process.utils.utils utils;
 
+    /**
+     * @Method : saveImage
+     * @Description :
+     * @Params : [imageBase64, name]
+     * @Return : com.alibaba.fastjson.JSONObject
+     * @Author : ZhuoNing
+     * @Date : 2021/1/21
+     * @Time : 17:31
+     */
     @Override
-    public boolean saveImage(String imageBase64, String name) {
-        String uploadPath = "";
+    public JSONObject saveImage(String imageBase64, String name) {
+        String uploadPath = "uploadImages";
         //
         String os = System.getProperty("os.name");
         String userDir = System.getProperty("user.dir");
         if (os.toLowerCase().indexOf("windows") != -1) {
             // Windows
-            uploadPath = userDir + "\\uploadImages\\";
+            uploadPath = "\\" + uploadPath + "\\";
         } else {
             // Linux
-            uploadPath = userDir+ "/uploadImages/";
+            uploadPath = "/" + uploadPath + "/";
         }
         // 时间戳
         long timeMillis = System.currentTimeMillis();
@@ -43,10 +67,145 @@ public class ImageServiceImpl implements IImageService {
         if (!dir.exists()) { // && dir.isDirectory()
             dir.mkdirs();
         }
+        // type1
 //        String imgPath = uploadPath + name + "_"+ timeMillis + ".jpg";
-        StringBuilder imgBuild = new StringBuilder();
-        String imgPath = imgBuild.append(uploadPath).append(name).append("_").append(timeMillis).append(".jpg").toString();
+        // type2
+//        StringBuilder imgBuild = new StringBuilder();
+//        String imgPath = imgBuild.append(uploadPath).append(name).append("_").append(timeMillis).append(".jpg").toString();
+        // type 3
+        StringBuilder fileNameBuild = new StringBuilder();
+        String fileName = fileNameBuild.append(name).append("_").append(timeMillis).append(".jpg").toString();
+        String relativePath = uploadPath + fileName;
+        String imgPath = userDir + relativePath;
+        JSONObject resultJo = new JSONObject();
+        resultJo.put("result", pictureUtil.base64ToImage(imageBase64, imgPath));
+        resultJo.put("imgPath", imgPath);
+        resultJo.put("relativePath", uploadPath + fileName);
+        resultJo.put("fileName", fileName);
+        log.info("resultJo>>" + resultJo);
         // 保存
-         return pictureUtil.base64ToImage(imageBase64, imgPath);
+        return resultJo;
     }
+
+    /**
+     * @Method : addImage
+     * @Description :
+     * @Params : [name, imgPath, relativePath, fileName]
+     * @Return : boolean
+     * @Author : ZhuoNing
+     * @Date : 2021/1/21
+     * @Time : 17:31
+     */
+    @Override
+    public boolean addImage(String name, String imgPath, String relativePath, String fileName,String aiResult,int aiTimeUsed,String aiData) {
+        ImagePathEntity imagePathEntity = new ImagePathEntity();
+        imagePathEntity.setName(name);
+        imagePathEntity.setImgPath(imgPath);
+        imagePathEntity.setRelativePath(relativePath);
+        imagePathEntity.setFileName(fileName);
+        imagePathEntity.setEffective(1);
+        imagePathEntity.setAiResult(aiResult);
+        imagePathEntity.setAiTimeUsed(aiTimeUsed);
+        imagePathEntity.setAiData(aiData);
+        imagePathRepo.saveAndFlush(imagePathEntity);
+        return true;
+    }
+
+    /**
+     * @Method : getAIResult
+     * @Description : 用RestTemplate调取第三方接口进行AI识别出猪
+     * @Params : [imgPath]
+     * @Return : java.lang.String
+     * @Author : ZhuoNing
+     * @Date : 2021/1/21
+     * @Time : 16:25
+     */
+    @Override
+    public String getAiResult2(String imgPath) throws IOException {
+        System.out.println("AI识别图片路径imgPath>>" + imgPath);
+        //
+        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
+//            File file=new File("D:\\pic\\微信图片_20210120175259.jpg");
+        File file = new File(imgPath);
+        byte[] bytesArray = new byte[(int) file.length()];
+        FileInputStream fis = new FileInputStream(file);
+        fis.read(bytesArray); //read file into bytes[]
+        fis.close();
+        ByteArrayResource contentsAsResource = new ByteArrayResource(bytesArray) {
+            @Override
+            public String getFilename() {
+                return "imageData";
+            }
+        };
+        paramMap.add("imageData", contentsAsResource);
+        System.out.println("AI参数>>" + paramMap);
+        JSONObject json = restTemplate.postForObject("http://122.112.224.199:31288/api/piggy", paramMap, JSONObject.class);
+        System.out.println("post json : " + json);
+        return null;
+    }
+
+    /**
+     * @Method :
+     * @Description :
+     * @Params :
+     * @Return :
+     * @Author : ZhuoNing
+     * @Date : 2021/1/21
+     * @Time : 17:44
+     */
+    @Override
+    public JSONObject getAiResult(String imgPath,String fileName) throws IOException {
+        log.info("Ai识别图片路径>>" + imgPath);
+        //      FileSystemResource fileResource = new FileSystemResource(new File("d://image"));
+        BASE64Decoder decoder = new BASE64Decoder();
+//      byte[] rawBytes = utils.File2byte("D:\\pic\\20210120175259.jpg");//将图片转为byte[]
+        byte[] rawBytes = utils.File2byte(imgPath);//将图片转为byte[]
+//        byte[] rawBytes = decoder.decodeBuffer(imgPath);
+//        String suffix = utils.getSuffix(rawBytes);//获取图片的后缀名,也可以是其他任意文件名
+//        System.out.println("suffix>>"+suffix);
+//        String fileName = "myImage" + suffix;//
+        ByteArrayResource fileResource = new ByteArrayResource(rawBytes) {
+            @Override
+            public String getFilename() {
+                return fileName;
+            }
+        };
+        MultiValueMap<String, Object> postParameters = new LinkedMultiValueMap<String, Object>();
+        postParameters.add("imageData", fileResource);
+//        HttpHeaders headers = new HttpHeaders();
+//        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
+//        HttpEntity<MultiValueMap<String, Object>> requestEntity  = new HttpEntity<MultiValueMap<String, Object>>(postParameters, headers);
+        RestTemplate restTemplate = new RestTemplate();
+//        String url=localUri+"/image/upload";
+//        BasicResponse basicResponse=restTemplate.postForObject(url,postParameters,BasicResponse.class);
+        String url = "http://122.112.224.199:31288/api/piggy";
+        return restTemplate.postForObject(url, postParameters, JSONObject.class);
+    }
+
+//    @Override
+//    public boolean saveImage(String imageBase64, String name) {
+//        String uploadPath = "";
+//        //
+//        String os = System.getProperty("os.name");
+//        String userDir = System.getProperty("user.dir");
+//        if (os.toLowerCase().indexOf("windows") != -1) {
+//            // Windows
+//            uploadPath = userDir + "\\uploadImages\\";
+//        } else {
+//            // Linux
+//            uploadPath = userDir+ "/uploadImages/";
+//        }
+//        // 时间戳
+//        long timeMillis = System.currentTimeMillis();
+//        //判断文件目录是否存在
+//        File dir = new File(uploadPath);
+//        if (!dir.exists()) { // && dir.isDirectory()
+//            dir.mkdirs();
+//        }
+////        String imgPath = uploadPath + name + "_"+ timeMillis + ".jpg";
+//        StringBuilder imgBuild = new StringBuilder();
+//        String imgPath = imgBuild.append(uploadPath).append(name).append("_").append(timeMillis).append(".jpg").toString();
+//        // 保存
+//        return pictureUtil.base64ToImage(imageBase64, imgPath);
+//    }
 }

+ 77 - 0
huimv-video/huimv-video-process/src/main/java/com/huimv/process/utils/utils.java

@@ -0,0 +1,77 @@
+package com.huimv.process.utils;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+import java.util.Arrays;
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Component
+public class utils {
+    public  String getSuffix(byte[] source){
+
+        byte[] byteSuffix= Arrays.copyOf(source,3);
+
+        String hexSuffix=bytesToHexString(byteSuffix);
+
+        switch (hexSuffix){
+            case "89504e":
+                return ".png";
+            case "ffd8ff":
+                return ".jpg";
+            default:
+                return ".jpg";
+        }
+
+    }
+
+    public  String bytesToHexString(byte[] src) {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (src == null || src.length <= 0) {
+            return null;
+        }
+        for (int i = 0; i < src.length; i++) {
+            int v = src[i] & 0xFF;
+            String hv = Integer.toHexString(v);
+            if (hv.length() < 2) {
+                stringBuilder.append(0);
+            }
+            stringBuilder.append(hv);
+        }
+        return stringBuilder.toString().toLowerCase();
+    }
+
+    public  byte[] File2byte(String filePath)
+    {
+        byte[] buffer = null;
+        try
+        {
+            File file = new File(filePath);
+            FileInputStream fis = new FileInputStream(file);
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            byte[] b = new byte[1024];
+            int n;
+            while ((n = fis.read(b)) != -1)
+            {
+                bos.write(b, 0, n);
+            }
+            fis.close();
+            bos.close();
+            buffer = bos.toByteArray();
+        }
+        catch (FileNotFoundException e)
+        {
+            e.printStackTrace();
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();
+        }
+        return buffer;
+    }
+}

+ 4 - 3
huimv-video/huimv-video-process/src/main/resources/application-dev.yml

@@ -4,12 +4,12 @@ server:
 spring:
   datasource:
     url: jdbc:mysql://192.168.1.7:3306/huimv-video_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
-    username: huimv
+    username: root
     password: hm123456
     driver-class-name: com.mysql.cj.jdbc.Driver
   jpa:
     hibernate:
-      ddl-auto: update
+      ddl-auto: update  #validate
     database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
     show-sql: true
   servlet:
@@ -20,7 +20,8 @@ spring:
     view:
       prefix: /
       suffix: .html
-
+  main:
+    allow-bean-definition-overriding: true
 #  redis:
 #    database: 0
 #    host: 124.71.192.190

+ 322 - 0
huimv-video/mvnw

@@ -0,0 +1,322 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ]; then
+
+  if [ -f /etc/mavenrc ]; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ]; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false
+darwin=false
+mingw=false
+case "$(uname)" in
+CYGWIN*) cygwin=true ;;
+MINGW*) mingw=true ;;
+Darwin*)
+  darwin=true
+  # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+  # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+  if [ -z "$JAVA_HOME" ]; then
+    if [ -x "/usr/libexec/java_home" ]; then
+      export JAVA_HOME="$(/usr/libexec/java_home)"
+    else
+      export JAVA_HOME="/Library/Java/Home"
+    fi
+  fi
+  ;;
+esac
+
+if [ -z "$JAVA_HOME" ]; then
+  if [ -r /etc/gentoo-release ]; then
+    JAVA_HOME=$(java-config --jre-home)
+  fi
+fi
+
+if [ -z "$M2_HOME" ]; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ]; do
+    ls=$(ls -ld "$PRG")
+    link=$(expr "$ls" : '.*-> \(.*\)$')
+    if expr "$link" : '/.*' >/dev/null; then
+      PRG="$link"
+    else
+      PRG="$(dirname "$PRG")/$link"
+    fi
+  done
+
+  saveddir=$(pwd)
+
+  M2_HOME=$(dirname "$PRG")/..
+
+  # make it fully qualified
+  M2_HOME=$(cd "$M2_HOME" && pwd)
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=$(cygpath --unix "$M2_HOME")
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="$( (
+      cd "$M2_HOME"
+      pwd
+    ))"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="$( (
+      cd "$JAVA_HOME"
+      pwd
+    ))"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="$(which javac)"
+  if [ -n "$javaExecutable" ] && ! [ "$(expr \"$javaExecutable\" : '\([^ ]*\)')" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=$(which readlink)
+    if [ ! $(expr "$readLink" : '\([^ ]*\)') = "no" ]; then
+      if $darwin; then
+        javaHome="$(dirname \"$javaExecutable\")"
+        javaExecutable="$(cd \"$javaHome\" && pwd -P)/javac"
+      else
+        javaExecutable="$(readlink -f \"$javaExecutable\")"
+      fi
+      javaHome="$(dirname \"$javaExecutable\")"
+      javaHome=$(expr "$javaHome" : '\(.*\)/bin')
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ]; then
+  if [ -n "$JAVA_HOME" ]; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ]; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="$(which java)"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ]; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]; then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ]; do
+    if [ -d "$wdir"/.mvn ]; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=$(
+        cd "$wdir/.."
+        pwd
+      )
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' <"$1")"
+  fi
+}
+
+BASE_DIR=$(find_maven_basedir "$(pwd)")
+if [ -z "$BASE_DIR" ]; then
+  exit 1
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+  if [ "$MVNW_VERBOSE" = true ]; then
+    echo "Found .mvn/wrapper/maven-wrapper.jar"
+  fi
+else
+  if [ "$MVNW_VERBOSE" = true ]; then
+    echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+  fi
+  if [ -n "$MVNW_REPOURL" ]; then
+    jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+  else
+    jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+  fi
+  while IFS="=" read key value; do
+    case "$key" in wrapperUrl)
+      jarUrl="$value"
+      break
+      ;;
+    esac
+  done <"$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+  if [ "$MVNW_VERBOSE" = true ]; then
+    echo "Downloading from: $jarUrl"
+  fi
+  wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+  if $cygwin; then
+    wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
+  fi
+
+  if command -v wget >/dev/null; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found wget ... using wget"
+    fi
+    if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+      wget "$jarUrl" -O "$wrapperJarPath"
+    else
+      wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+    fi
+  elif command -v curl >/dev/null; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found curl ... using curl"
+    fi
+    if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+      curl -o "$wrapperJarPath" "$jarUrl" -f
+    else
+      curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+    fi
+
+  else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Falling back to using Java to download"
+    fi
+    javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+    # For Cygwin, switch paths to Windows format before running javac
+    if $cygwin; then
+      javaClass=$(cygpath --path --windows "$javaClass")
+    fi
+    if [ -e "$javaClass" ]; then
+      if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo " - Compiling MavenWrapperDownloader.java ..."
+        fi
+        # Compiling the Java class
+        ("$JAVA_HOME/bin/javac" "$javaClass")
+      fi
+      if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+        # Running the downloader
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo " - Running MavenWrapperDownloader.java ..."
+        fi
+        ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+      fi
+    fi
+  fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=$(cygpath --path --windows "$M2_HOME")
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 182 - 0
huimv-video/mvnw.cmd

@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %DOWNLOAD_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%

+ 33 - 3
huimv-video/pom.xml

@@ -29,17 +29,24 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
-
+<!--        <dependency>-->
+<!--            <groupId>mysql</groupId>-->
+<!--            <artifactId>mysql-connector-java</artifactId>-->
+<!--            <version>5.1.46</version>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
-            <version>5.1.46</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
         </dependency>
         <dependency>
             <groupId>tk.mybatis</groupId>
@@ -50,6 +57,29 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.62</version>
+        </dependency>
+        <!--通用mapper起步依赖-->
+        <dependency>
+            <groupId>tk.mybatis</groupId>
+            <artifactId>mapper-spring-boot-starter</artifactId>
+            <version>2.1.5</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+            <version>1.2.3</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.persistence</groupId>
+            <artifactId>persistence-api</artifactId>
+            <version>1.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

BIN
huimv-video/uploadImages/东舍1号_1611132486259.jpg


BIN
huimv-video/uploadImages/东舍1号_1611133125959.jpg


BIN
huimv-video/uploadImages/东舍1号_1611133490108.jpg