Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/resources/application-dev.yml
lileilei 2 years ago
parent
commit
81dce56fe5
35 changed files with 1248 additions and 828 deletions
  1. 33 2
      .gitignore
  2. 102 0
      doc/app.sh
  3. 48 189
      pom.xml
  4. 2 2
      src/main/java/com/rshy/project/hy/RshyApplication.java
  5. 4 40
      src/main/java/com/rshy/project/hy/aop/ExceptionAdvice.java
  6. 0 1
      src/main/java/com/rshy/project/hy/baseRe/Ret.java
  7. 0 8
      src/main/java/com/rshy/project/hy/cache/redis/RedisCacheImpl.java
  8. 0 51
      src/main/java/com/rshy/project/hy/config/SaTokenConfigure.java
  9. 0 38
      src/main/java/com/rshy/project/hy/config/WebSocketConfig.java
  10. 1 1
      src/main/java/com/rshy/project/hy/mapper/RshyJkMapper.java
  11. 3 3
      src/main/java/com/rshy/project/hy/model/entity/RshyJk.java
  12. 27 0
      src/main/java/com/rshy/project/hy/model/enums/HyTypeEnum.java
  13. 21 0
      src/main/java/com/rshy/project/hy/model/enums/PassStatusEnum.java
  14. 124 0
      src/main/java/com/rshy/project/hy/server/FaceRetrievaServer.java
  15. 310 318
      src/main/java/com/rshy/project/hy/server/RshyServer.java
  16. 15 0
      src/main/java/com/rshy/project/hy/server/dto/OrderDTO.java
  17. 35 0
      src/main/java/com/rshy/project/hy/server/dto/RetrievalDTO.java
  18. 21 0
      src/main/java/com/rshy/project/hy/server/param/RetrievaLoginParam.java
  19. 45 0
      src/main/java/com/rshy/project/hy/server/param/RetrievalRepositoryParam.java
  20. 5 0
      src/main/java/com/rshy/project/hy/server/param/RshyParam.java
  21. 24 0
      src/main/java/com/rshy/project/hy/server/param/RshyQuickParam.java
  22. 30 0
      src/main/java/com/rshy/project/hy/server/vo/RepositoryVO.java
  23. 24 0
      src/main/java/com/rshy/project/hy/server/vo/RetrievaResultVO.java
  24. 60 0
      src/main/java/com/rshy/project/hy/server/vo/RetrievalRepositoryVO.java
  25. 1 1
      src/main/java/com/rshy/project/hy/service/RshyJkService.java
  26. 1 2
      src/main/java/com/rshy/project/hy/service/impl/RshyJkServiceImpl.java
  27. 48 0
      src/main/java/com/rshy/project/hy/task/RshyJkJob.java
  28. 84 0
      src/main/java/com/rshy/project/hy/util/PatternUtil.java
  29. 9 69
      src/main/java/com/rshy/project/hy/web/controller/RshyController.java
  30. 1 5
      src/main/java/com/rshy/project/hy/web/controller/RshyJkController.java
  31. 11 0
      src/main/resources/application-local.yml
  32. 15 13
      src/main/resources/application-prod.yml
  33. 1 1
      src/main/resources/application.yml
  34. 142 83
      src/main/resources/logback-spring.xml
  35. 1 1
      src/main/resources/mapper/RshyJk.xml

+ 33 - 2
.gitignore

@@ -1,2 +1,33 @@
-/.idea/
-*.iml
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**
+!**/src/test/**
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+
+### VS Code ###
+.vscode/
+/jar/
+/logs/

+ 102 - 0
doc/app.sh

@@ -0,0 +1,102 @@
+#!/bin/bash
+
+#JVM参数
+JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
+APP_HOME=`pwd`
+echo $APP_HOME
+
+AppName="$2"
+
+#输出日志目录
+LOG_PATH=$APP_HOME/logs
+#日志目录不存在就创建
+if [ ! -d $LOG_PATH  ];then
+  mkdir -p $LOG_PATH
+fi
+#输出日志文件
+LOG_FILE=$LOG_PATH/$AppName.log
+echo "log: $LOG_FILE"
+
+if [ "$1" = "" ];
+then
+    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
+    exit 1
+fi
+
+if [ "$AppName" = "" ];
+then
+    echo -e "\033[0;31m 未输入应用名 \033[0m"
+    exit 1
+fi
+
+if [ ! -e $AppName.jar ]; then 
+	echo -e "\033[0;31m 应用的 jar 文件($AppName.jar)不存在 \033[0m"
+	exit 1
+fi
+
+function start()
+{
+    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
+
+	if [ x"$PID" != x"" ]; then
+	    echo "$AppName is running..."
+	else
+		#nohup java -jar  $JVM_OPTS $AppName > /dev/null 2>&1 &
+		nohup java -jar  $JVM_OPTS $AppName.jar > $LOG_FILE 2>&1 &
+		echo "Start $AppName success..."
+	fi
+}
+
+function stop()
+{
+    echo "Stop $AppName"
+	
+	PID=""
+	query(){
+		PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
+	}
+
+	query
+	if [ x"$PID" != x"" ]; then
+		kill -TERM $PID
+		echo "$AppName (pid:$PID) exiting..."
+		while [ x"$PID" != x"" ]
+		do
+			sleep 1
+			query
+		done
+		echo "$AppName exited."
+	else
+		echo "$AppName already stopped."
+	fi
+}
+
+function restart()
+{
+    stop
+    sleep 2
+    start
+}
+
+function status()
+{
+    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
+    if [ $PID != 0 ];then
+        echo "$AppName is running..."
+    else
+        echo "$AppName is not running..."
+    fi
+}
+
+case $1 in
+    start)
+    start;;
+    stop)
+    stop;;
+    restart)
+    restart;;
+    status)
+    status;;
+    *)
+
+esac

+ 48 - 189
pom.xml

@@ -13,25 +13,6 @@
     <artifactId>rshy-project-hy</artifactId>
     <description>人身核验</description>
 
-    <profiles>
-        <profile>
-            <id>dev</id>
-            <properties>
-                <currentConfig>dev</currentConfig>
-            </properties>
-            <activation>
-                <activeByDefault>true</activeByDefault>
-            </activation>
-        </profile>
-
-        <profile>
-            <id>prod</id>
-            <properties>
-                <currentConfig>prod</currentConfig>
-            </properties>
-        </profile>
-    </profiles>
-
     <properties>
         <java.version>1.8</java.version>
         <!-- javacpp当前版本 -->
@@ -43,39 +24,20 @@
     </properties>
 
     <dependencies>
-
-        <!-- 热部署模块 -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-devtools</artifactId>
-            <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
-        </dependency>
-
-
-
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
         <dependency>
-            <groupId>cn.dev33</groupId>
-            <artifactId>sa-token-spring-boot-starter</artifactId>
-            <version>1.19.0</version>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+            <version>2.0.7</version>
         </dependency>
 
-        <!-- Sa-Token整合redis (使用jackson序列化方式) -->
         <dependency>
-            <groupId>cn.dev33</groupId>
-            <artifactId>sa-token-dao-redis-jackson</artifactId>
-            <version>1.19.0</version>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>com.github.rholder</groupId>
-            <artifactId>guava-retrying</artifactId>
-            <version>2.0.0</version>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
 
         <dependency>
@@ -90,44 +52,40 @@
             </exclusions>
         </dependency>
 
-        <dependency>
-            <groupId>com.github.xiaoymin</groupId>
-            <artifactId>knife4j-spring-boot-starter</artifactId>
-            <version>2.0.7</version>
-        </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-websocket</artifactId>
+            <artifactId>spring-boot-starter-redis</artifactId>
+            <version>1.4.7.RELEASE</version>
         </dependency>
 
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>3.3.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>mybatis-plus-extension</artifactId>
+                    <groupId>com.baomidou</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
-        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus -->
-        <dependency>
-            <groupId>com.baomidou</groupId>
-            <artifactId>mybatis-plus</artifactId>
-            <version>3.3.2</version>
-        </dependency>
-        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-extension -->
+
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-extension</artifactId>
             <version>3.4.1</version>
         </dependency>
 
-
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-validation</artifactId>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+            <version>3.3.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>mybatis-plus-extension</artifactId>
+                    <groupId>com.baomidou</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
@@ -135,97 +93,25 @@
             <artifactId>fastjson</artifactId>
             <version>1.2.68</version>
         </dependency>
-        <dependency>
-            <groupId>cn.hutool</groupId>
-            <artifactId>hutool-all</artifactId>
-            <version>5.3.7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-aop</artifactId>
-        </dependency>
-        <dependency>
-            <!--Freemarker模板引擎-->
-            <groupId>org.freemarker</groupId>
-            <artifactId>freemarker</artifactId>
-            <version>2.3.28</version>
-        </dependency>
 
         <dependency>
-            <groupId>com.baomidou</groupId>
-            <artifactId>mybatis-plus-generator</artifactId>
-            <version>3.3.0</version>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>1.2.9</version>
         </dependency>
+
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <scope>runtime</scope>
         </dependency>
 
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-models</artifactId>
-            <version>1.5.21</version>
-        </dependency>
-
-        <!-- 引入swagger-bootstrap-ui包 -->
-        <dependency>
-            <groupId>com.github.xiaoymin</groupId>
-            <artifactId>swagger-bootstrap-ui</artifactId>
-            <version>1.8.5</version>
-        </dependency>
-        <!--       ============================= swagger =============-->
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>2.10.5</version>
-        </dependency>
-
-        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-core -->
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-core</artifactId>
-            <version>2.10.5</version>
-        </dependency>
-
-
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>2.10.5</version>
-        </dependency>
-        <!--防止进入swagger页面报类型转换错误,排除2.9.2中的引用,手动增加1.5.21版本-->
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.21</version>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>druid-spring-boot-starter</artifactId>
-        </dependency>
-        <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-commons -->
-        <dependency>
-            <groupId>org.springframework.data</groupId>
-            <artifactId>spring-data-commons</artifactId>
-            <version>2.3.1.RELEASE</version>
-        </dependency>
-
-
-      <!--  <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-amqp</artifactId>
-        </dependency>-->
-        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient</artifactId>
             <version>4.5.12</version>
         </dependency>
 
-
-
-
         <dependency>
             <groupId>commons-httpclient</groupId>
             <artifactId>commons-httpclient</artifactId>
@@ -233,61 +119,34 @@
         </dependency>
 
         <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>druid-spring-boot-starter</artifactId>
-            <version>1.1.20</version>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.9</version>
         </dependency>
 
         <dependency>
-            <groupId>io.projectreactor</groupId>
-            <artifactId>reactor-core</artifactId>
-        </dependency>
-        <dependency>
-
-            <groupId>org.springframework.security</groupId>
-            <artifactId>spring-security-core</artifactId>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
         </dependency>
 
-        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
         <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>3.9</version>
+            <groupId>com.github.rholder</groupId>
+            <artifactId>guava-retrying</artifactId>
+            <version>2.0.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>jsr305</artifactId>
+                    <groupId>com.google.code.findbugs</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
+
         <dependency>
-            <groupId>org.apache.shiro</groupId>
-            <artifactId>shiro-core</artifactId>
-            <version>1.4.0</version>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.3.7</version>
         </dependency>
-
-<!--        <dependency>-->
-<!--            <groupId>org.bytedeco</groupId>-->
-<!--            <artifactId>javacv-platform</artifactId>-->
-<!--            <version>${javacpp.version}</version>-->
-<!--        </dependency>-->
-<!--        <dependency>-->
-<!--            <groupId>org.bytedeco</groupId>-->
-<!--            <artifactId>javacv</artifactId>-->
-<!--            <version>${javacpp.version}</version>-->
-<!--        </dependency>-->
-<!--        &lt;!&ndash; javacpp &ndash;&gt;-->
-<!--        <dependency>-->
-<!--            <groupId>org.bytedeco</groupId>-->
-<!--            <artifactId>javacpp</artifactId>-->
-<!--            <version>${javacpp.version}</version>-->
-<!--        </dependency>-->
-<!--        &lt;!&ndash; ffmpeg &ndash;&gt;-->
-<!--        <dependency>-->
-<!--            <groupId>org.bytedeco.javacpp-presets</groupId>-->
-<!--            <artifactId>ffmpeg-platform</artifactId>-->
-<!--            <version>${ffmpeg.version}-${javacpp.version}</version>-->
-<!--        </dependency>-->
-<!--        <dependency>-->
-<!--            <groupId>org.bytedeco.javacpp-presets</groupId>-->
-<!--            <artifactId>ffmpeg</artifactId>-->
-<!--            <version>${ffmpeg.version}-${javacpp.version}</version>-->
-<!--        </dependency>-->
-
     </dependencies>
 
     <build>

+ 2 - 2
src/main/java/com/rshy/project/hy/RshyApplication.java

@@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 
@@ -12,12 +13,11 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 @ComponentScan(basePackages = {"com.rshy.**"})
 @SpringBootApplication
 @EnableScheduling
+@EnableAsync
 public class RshyApplication {
 
     public static void main(String[] args) {
         ConfigurableApplicationContext applicationContext = SpringApplication.run(RshyApplication.class, args);
-        //解决websocket不能注入bean的问题
-        //WebSocketServer.setApplicationContext(applicationContext);
     }
 
 

+ 4 - 40
src/main/java/com/rshy/project/hy/aop/ExceptionAdvice.java

@@ -1,8 +1,10 @@
 package com.rshy.project.hy.aop;
 
-import cn.dev33.satoken.exception.NotLoginException;
 import cn.hutool.core.util.StrUtil;
-import com.rshy.project.hy.baseRe.*;
+import com.rshy.project.hy.baseRe.BaseException;
+import com.rshy.project.hy.baseRe.EnvEnum;
+import com.rshy.project.hy.baseRe.ResultCode;
+import com.rshy.project.hy.baseRe.Ret;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.dao.DuplicateKeyException;
@@ -13,9 +15,6 @@ import org.springframework.web.bind.MissingServletRequestParameterException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /**
  * @author dxy
  * @description: 异常处理类
@@ -92,39 +91,4 @@ public class ExceptionAdvice {
             return Ret.error(10001,e.getMessage());
         }
     }
-
-
-    // 全局异常拦截(拦截项目中的NotLoginException异常)
-    @ExceptionHandler(NotLoginException.class)
-    public Ret<?> handlerNotLoginException(NotLoginException nle, HttpServletRequest request, HttpServletResponse response)
-            throws Exception {
-
-        // 打印堆栈,以供调试
-        nle.printStackTrace();
-
-        // 判断场景值,定制化异常信息
-        String errMsg = "";
-        if(nle.getType().equals(NotLoginException.NOT_TOKEN)) {
-            errMsg = "未提供token";
-        }
-        else if(nle.getType().equals(NotLoginException.INVALID_TOKEN)) {
-            errMsg = "token无效";
-        }
-        else if(nle.getType().equals(NotLoginException.TOKEN_TIMEOUT)) {
-            errMsg = "token已过期";
-        }
-        else if(nle.getType().equals(NotLoginException.BE_REPLACED)) {
-            errMsg = "token已被顶下线";
-        }
-        else if(nle.getType().equals(NotLoginException.KICK_OUT)) {
-            errMsg = "token已被踢下线";
-        }
-        else {
-            errMsg = "当前会话未登录";
-        }
-
-        // 返回给前端
-        return Ret.error(ResultCode.TOKEN_FAILED.getCode(),errMsg);
-    }
-
 }

+ 0 - 1
src/main/java/com/rshy/project/hy/baseRe/Ret.java

@@ -51,7 +51,6 @@ public final class Ret<T> implements Serializable {
         result.errCode = SUCCESSFUL_CODE;
         result.data = data;
         result.errMsg = SUCCESSFUL_errMsg;
-        System.out.println("组装数据返回"+result);
         return result;
     }
 

+ 0 - 8
src/main/java/com/rshy/project/hy/cache/redis/RedisCacheImpl.java

@@ -68,11 +68,6 @@ public class RedisCacheImpl implements ICache {
         return String.format("%s::%s", cacheName, key);
     }
 
-
-
-
-
-
     /**
      * 设置有效时间
      *
@@ -311,7 +306,4 @@ public class RedisCacheImpl implements ICache {
     public  List<Object> lGet(final String key, final int start, final int end) {
         return redisTemplate.opsForList().range(key, start, end);
     }
-
-
-
 }

+ 0 - 51
src/main/java/com/rshy/project/hy/config/SaTokenConfigure.java

@@ -1,51 +0,0 @@
-package com.rshy.project.hy.config;
-
-import org.springframework.beans.factory.annotation.Configurable;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-
-/**
- * <h3>SaTokenConfigure</h3>
- * <p></p>
- *
- * @author : lishuo
- * @version : 1.0
- * @date : 2021-05-18 11:39
- **/
-@Configurable
-@Component
-public class SaTokenConfigure implements WebMvcConfigurer {
-
-    /**
-     * 放行路径
-     */
-    String [] excludePatterns = {
-            "/appUser/wxLoginTwo",
-            "/appUser/wxLogin",
-            "/user/login",
-            "/webSocket",
-            "/appUser/getUserInfo",
-            "/static/**",
-            "/doc.html/**",
-            "/webjars/**",
-            "/favicon.ico",
-            "/error",
-            "/sockjs-node/info",
-            "/swagger-resources/**",
-            "/callBack/**",
-            "/task/refreshAccessToken"
-    };
-
-    // 注册sa-token的拦截器
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        // 注册路由拦截器,自定义验证规则
-//        registry.addInterceptor(new SaRouteInterceptor((request, response, handler) -> {
-//            // 登录验证 -- 排除多个路径
-//            SaRouterUtil.match(Arrays.asList("/**"),Arrays.asList(excludePatterns),
-//                    () -> StpUtil.checkLogin());
-//        })).addPathPatterns("/**");
-    }
-}

+ 0 - 38
src/main/java/com/rshy/project/hy/config/WebSocketConfig.java

@@ -1,38 +0,0 @@
-package com.rshy.project.hy.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import org.springframework.web.socket.server.standard.ServerEndpointExporter;
-
-/**
- * 开启WebSocket支持
- * @author zhengkai.blog.csdn.net
- */
-@Configuration
-public class WebSocketConfig implements WebMvcConfigurer {
-
-
-    //服务器支持跨域
-    @Override
-    public void addCorsMappings(CorsRegistry registry) {
-        registry.addMapping("/**")
-                .allowedOrigins("*")
-                .allowedMethods("GET", "POST","OPTIONS")
-                .allowedHeaders("*")
-                .exposedHeaders("Access-Control-Allow-Headers",
-                        "Access-Control-Allow-Methods",
-                        "Access-Control-Allow-Origin",
-                        "Access-Control-Max-Age",
-                        "X-Frame-Options")
-                .allowCredentials(false)
-                .maxAge(3600);
-    }
-
-    @Bean
-    public ServerEndpointExporter serverEndpointExporter() {
-        return new ServerEndpointExporter();
-    }
-
-}

+ 1 - 1
src/main/java/com/rshy/project/hy/mapper/RshyJkMapper.java

@@ -1,6 +1,6 @@
 package com.rshy.project.hy.mapper;
 
-import com.rshy.project.hy.entity.RshyJk;
+import com.rshy.project.hy.model.entity.RshyJk;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**

+ 3 - 3
src/main/java/com/rshy/project/hy/entity/RshyJk.java → src/main/java/com/rshy/project/hy/model/entity/RshyJk.java

@@ -1,9 +1,8 @@
-package com.rshy.project.hy.entity;
+package com.rshy.project.hy.model.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
-import java.io.Serializable;
 
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import io.swagger.annotations.ApiModel;
@@ -14,7 +13,7 @@ import lombok.experimental.Accessors;
 
 /**
  * <p>
- * 
+ *
  * </p>
  *
  * @author xiaopi
@@ -55,6 +54,7 @@ public class RshyJk extends Model<RshyJk> {
     @ApiModelProperty(value = "创建时间")
     private LocalDateTime gmtCreateTime;
 
+    @ApiModelProperty(value = "修改时间")
     private LocalDateTime gmtUpdateTime;
 
 

+ 27 - 0
src/main/java/com/rshy/project/hy/model/enums/HyTypeEnum.java

@@ -0,0 +1,27 @@
+package com.rshy.project.hy.model.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/20 16:21
+ * @description:
+ */
+@AllArgsConstructor
+@Getter
+public enum HyTypeEnum {
+    /**
+     * 核验类型
+     */
+    pctdfk("打防控"),
+    pctjsry("监所人员"),
+    pctxdry("吸毒人员"),
+    pctqkry("前科人员"),
+    pctjkm("健康码"),
+    pctzt("在逃人员"),
+    pctzfba("执法办案"),
+    pctzdry("重点人员");
+
+    private String desc;
+}

+ 21 - 0
src/main/java/com/rshy/project/hy/model/enums/PassStatusEnum.java

@@ -0,0 +1,21 @@
+package com.rshy.project.hy.model.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/21 15:32
+ * @description:
+ */
+@Getter
+@AllArgsConstructor
+public enum PassStatusEnum {
+    NO_PASSING(0, "阻止同行"),
+    RIGHT_WAY(1, "可通行,警示信息"),
+    NORMAL_TRAFFIC(2, "正常通行");
+
+    private Integer code;
+
+    private String desc;
+}

+ 124 - 0
src/main/java/com/rshy/project/hy/server/FaceRetrievaServer.java

@@ -0,0 +1,124 @@
+package com.rshy.project.hy.server;
+
+import cn.hutool.cache.CacheUtil;
+import cn.hutool.cache.impl.TimedCache;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.thread.ThreadUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
+import com.rshy.project.hy.baseRe.BaseException;
+import com.rshy.project.hy.server.dto.OrderDTO;
+import com.rshy.project.hy.server.dto.RetrievalDTO;
+import com.rshy.project.hy.server.param.RetrievaLoginParam;
+import com.rshy.project.hy.server.param.RetrievalRepositoryParam;
+import com.rshy.project.hy.server.vo.RepositoryVO;
+import com.rshy.project.hy.server.vo.RetrievaResultVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/20 10:11
+ * @description: 依图人脸检索第三方服务
+ */
+@Component
+@Slf4j
+public class FaceRetrievaServer {
+    /**
+     * 授权凭证请求头
+     */
+    private static final String HEADERS_KEY = "session_id";
+    /**
+     * 人像库标识
+     */
+    private static final String REPOSITORY_KEY = "repository_ids";
+
+    @Value("${face.retrieva.loginUrl}")
+    private String loginUrl;
+    @Value("${face.retrieva.repositoryUrl}")
+    private String repositoryUrl;
+    @Value("${face.retrieva.retrievalUrl}")
+    private String retrievalUrl;
+    @Value("${face.retrieva.userInfo.name}")
+    private String name;
+    @Value("${face.retrieva.userInfo.password}")
+    private String password;
+    @Value("${face.retrieva.userInfo.threshold}")
+    private Double threshold;
+
+    /**
+     * 创建缓存,默认15分钟过期
+     * @see <a href="https://www.hutool.cn/docs/#/cache/TimedCache">定时缓存</a>
+     */
+    private static TimedCache<String, String> timedCache = CacheUtil.newTimedCache(15 * 60 *1000);
+
+    /**
+     * 登录接口
+     *
+     * @param retrievaLoginParam
+     * @return
+     */
+    public RetrievaResultVO login(RetrievaLoginParam retrievaLoginParam) {
+        String body = timedCache.get(HEADERS_KEY, false);
+
+        if(StrUtil.isEmpty(body)) {
+            body = HttpUtil.post(loginUrl, JSON.toJSONString(retrievaLoginParam));
+            timedCache.put(HEADERS_KEY, body);
+        }
+
+        return JSON.parseObject(body, RetrievaResultVO.class);
+    }
+
+    /**
+     * 获取人像库
+     *
+     * @param sessionId 会话标识
+     */
+    public RetrievaResultVO repository(String sessionId) {
+        String body = timedCache.get(REPOSITORY_KEY, false);
+        if(StrUtil.isEmpty(body)){
+            body = HttpRequest.get(repositoryUrl).header(HEADERS_KEY, sessionId).execute().body();
+            //缓存一天失效
+            timedCache.put(REPOSITORY_KEY, body, 24 * 60 * 60 * 1000);
+        }
+
+        return JSON.parseObject(body, RetrievaResultVO.class);
+    }
+
+    /**
+     * 人脸库检索
+     *
+     * @param photo base64图片
+     */
+    public RetrievaResultVO retrieval(String photo) {
+        RetrievaResultVO login = this.login(new RetrievaLoginParam().setName(name).setPassword(password));
+        log.info("依图 login: {}", login.toString());
+        if(login.getRtn() != null && !login.getRtn().equals(0)){
+            throw new BaseException(login.getMessage());
+        }
+
+        RetrievaResultVO repository = this.repository(login.getSession_id());
+        if(repository != null && !repository.getRtn().equals(0)){
+            throw new BaseException(repository.getMessage());
+        }
+
+        List<RepositoryVO> voList = Convert.toList(RepositoryVO.class, repository.getResults());
+        RetrievalRepositoryParam param = new RetrievalRepositoryParam().setExtra_fields(Lists.newArrayList("custom_field_1")).setOrder(new OrderDTO().setSimilarity("-1"))
+                .setStart(0).setLimit(1).setRetrieval_query_id("1").setRetrieval(new RetrievalDTO().setPicture_image_content_base64(photo).setFast(true).setThreshold(threshold)
+                        .setRepository_ids(voList.stream().map(RepositoryVO::getId).collect(Collectors.toList())));
+        log.info("依图调用参数: {}", JSON.toJSONString(param));
+        String body = HttpRequest.post(retrievalUrl).header(HEADERS_KEY, login.getSession_id()).body(JSON.toJSONString(param)).execute().body();
+        log.info("依图返回结果: {}", body);
+        return JSON.parseObject(body, RetrievaResultVO.class);
+    }
+
+
+}

File diff suppressed because it is too large
+ 310 - 318
src/main/java/com/rshy/project/hy/server/RshyServer.java


+ 15 - 0
src/main/java/com/rshy/project/hy/server/dto/OrderDTO.java

@@ -0,0 +1,15 @@
+package com.rshy.project.hy.server.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/20 11:06
+ * @description:
+ */
+@Data
+@Accessors(chain = true)
+public class OrderDTO {
+    private String similarity;
+}

+ 35 - 0
src/main/java/com/rshy/project/hy/server/dto/RetrievalDTO.java

@@ -0,0 +1,35 @@
+package com.rshy.project.hy.server.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/20 11:08
+ * @description:
+ */
+@Data
+@Accessors(chain = true)
+public class RetrievalDTO {
+    /**
+     * base64 编码后的照片内 容
+     */
+    private String picture_image_content_base64;
+
+    /**
+     * 库 id 列表
+     */
+    private List<String> repository_ids;
+
+    /**
+     * 相似度分数线
+     */
+    private Double threshold;
+
+    /**
+     * 检索是否开启加速
+     */
+    private Boolean fast;
+}

+ 21 - 0
src/main/java/com/rshy/project/hy/server/param/RetrievaLoginParam.java

@@ -0,0 +1,21 @@
+package com.rshy.project.hy.server.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/20 10:20
+ * @description:
+ */
+@Data
+@Accessors(chain = true)
+public class RetrievaLoginParam {
+    @ApiModelProperty("用户名")
+    private String name;
+
+    @ApiModelProperty("密码")
+    private String password;
+
+}

+ 45 - 0
src/main/java/com/rshy/project/hy/server/param/RetrievalRepositoryParam.java

@@ -0,0 +1,45 @@
+package com.rshy.project.hy.server.param;
+
+import com.rshy.project.hy.server.dto.OrderDTO;
+import com.rshy.project.hy.server.dto.RetrievalDTO;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/20 11:02
+ * @description:
+ */
+@Data
+@Accessors(chain = true)
+public class RetrievalRepositoryParam {
+    /**
+     * 导图时导入 extra_metra 字段, 在检索结果中显 示 相关字段。
+     */
+    private List<String> extra_fields;
+
+    /**
+     * 从第几个结果开始返回
+     */
+    private Integer start;
+
+    /**
+     * 返回至多多少个结果
+     */
+    private Integer limit;
+
+    /**
+     * 表示返回结果的排序方 式 , 支 持 similarity 排序
+     */
+    private OrderDTO order;
+
+    private RetrievalDTO retrieval;
+
+    /**
+     * 结果翻页的时候 , 使用 这个 id 来查询
+     */
+    private String retrieval_query_id;
+}
+

+ 5 - 0
src/main/java/com/rshy/project/hy/server/param/RshyParam.java

@@ -3,6 +3,7 @@ package com.rshy.project.hy.server.param;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 /**
  * @ProjectName: rshy
@@ -14,6 +15,7 @@ import lombok.Data;
  * @Version: 1.0
  */
 @Data
+@Accessors(chain = true)
 @ApiModel("请求人员盘查请求参数")
 public class RshyParam {
     @ApiModelProperty("身份证号")
@@ -24,4 +26,7 @@ public class RshyParam {
 
     @ApiModelProperty("健康码")
     private String barCode;
+
+    @ApiModelProperty("超时时间")
+    private Integer timeout;
 }

+ 24 - 0
src/main/java/com/rshy/project/hy/server/param/RshyQuickParam.java

@@ -0,0 +1,24 @@
+package com.rshy.project.hy.server.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @ProjectName: rshy
+ * @Package: com.rshy.project.hy.server.param
+ * @ClassName: RshyParam
+ * @Author: shihongbo
+ * @Description:
+ * @Date: 2022/3/2 14:48
+ * @Version: 1.0
+ */
+@Data
+@ApiModel("人脸快速核验请求参数")
+public class RshyQuickParam {
+    @ApiModelProperty("人员照片")
+    private String photo;
+
+    @ApiModelProperty("超时时间")
+    private Integer timeout;
+}

+ 30 - 0
src/main/java/com/rshy/project/hy/server/vo/RepositoryVO.java

@@ -0,0 +1,30 @@
+package com.rshy.project.hy.server.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Map;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/20 10:49
+ * @description:
+ */
+@Data
+public class RepositoryVO {
+    @ApiModelProperty("库id")
+    private String id;
+
+    @ApiModelProperty("库名称")
+    private String name;
+
+    @ApiModelProperty("库中人脸数目")
+    private Integer face_image_num;
+
+    @ApiModelProperty("创建者id")
+    private Integer creator_id;
+
+    @ApiModelProperty("创建时间")
+    private Integer create_time;
+
+    private Map<String, Integer> permission_map;
+}

+ 24 - 0
src/main/java/com/rshy/project/hy/server/vo/RetrievaResultVO.java

@@ -0,0 +1,24 @@
+package com.rshy.project.hy.server.vo;
+
+import lombok.Data;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/20 10:13
+ * @description: 依图第三方接口返回参数
+ */
+@Data
+public class RetrievaResultVO {
+    /**
+     * 返回值(rtn)说明: 0 表示此次请求成功 < 0 表示服务器端错误 > 0 表示请求错误 -1 表示服务器暂时不可用, 需要进行重试 1 表示无法访问资源,
+     * 返回的 message 的格式: xxx not exist (无法访问可能是资源不 存在也可能是没有权限)
+     * 2 表示缺少必填字段(举例:修改库的接口要求用户必须输入库 id,但是请求的参数中没有 这个字段) 返回 message 格式: mandatory field xxx is not included
+     * 3 表示字段输入不符合限制,返回 message 格式: xxx is out of range
+     */
+    private Integer rtn;
+    private String message;
+    private String session_id;
+    private String retrieval_query_id;
+    private Object results;
+    private Integer total;
+}

+ 60 - 0
src/main/java/com/rshy/project/hy/server/vo/RetrievalRepositoryVO.java

@@ -0,0 +1,60 @@
+package com.rshy.project.hy.server.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/20 11:20
+ * @description:
+ */
+@Data
+@Accessors(chain = true)
+public class RetrievalRepositoryVO {
+    /**
+     * 人脸库id
+     */
+    private String repository_id;
+    /**
+     * 人脸图id
+     */
+    private String face_image_id;
+    /**
+     * 人脸图 uri, 可以通过取图接口拿图
+     */
+    private String face_image_uri;
+    /**
+     * 入库图片(场景图)的 uri, 可以通过取图接口拿图
+     */
+    private String picture_uri;
+    /**
+     * 相似度
+     */
+    private Double similarity;
+    /**
+     * 图片入库时间
+     */
+    private Integer timestamp;
+    /**
+     * 身份证号码
+     */
+    private String personId;
+    /**
+     * 姓名
+     */
+    private String name;
+    /**
+     * 1 是男,2 是女,0 是未知
+     */
+    private Integer gender;
+    /**
+     * 民族, 见民族列表
+     *
+     * , 0 表示未知
+     */
+    private Integer nation;
+    /**
+     * 出生年份
+     */
+    private Integer born_year;
+}

+ 1 - 1
src/main/java/com/rshy/project/hy/service/RshyJkService.java

@@ -1,6 +1,6 @@
 package com.rshy.project.hy.service;
 
-import com.rshy.project.hy.entity.RshyJk;
+import com.rshy.project.hy.model.entity.RshyJk;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;

+ 1 - 2
src/main/java/com/rshy/project/hy/service/impl/RshyJkServiceImpl.java

@@ -1,8 +1,7 @@
 package com.rshy.project.hy.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.rshy.project.hy.entity.RshyJk;
+import com.rshy.project.hy.model.entity.RshyJk;
 import com.rshy.project.hy.mapper.RshyJkMapper;
 import com.rshy.project.hy.service.RshyJkService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

+ 48 - 0
src/main/java/com/rshy/project/hy/task/RshyJkJob.java

@@ -0,0 +1,48 @@
+package com.rshy.project.hy.task;
+
+import com.rshy.project.hy.model.entity.RshyJk;
+import com.rshy.project.hy.server.RshyServer;
+import com.rshy.project.hy.service.RshyJkService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+import java.util.List;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/20 15:44
+ * @description:
+ */
+@Component
+@Slf4j
+public class RshyJkJob {
+    @Autowired
+    private RshyJkService rshyJkService;
+    @Autowired
+    private RshyServer rshyServer;
+
+    /**
+     * 每十分钟执行一次
+     */
+    @Async
+    @Scheduled(cron = "0 0/10 * * * ?")
+    public void taskRshy() {
+        log.info("第三方接口服务状态调用 start");
+        List<RshyJk> rshyError = rshyJkService.getRshyError();
+        if (CollectionUtils.isEmpty(rshyError)) {
+            return;
+        }
+        rshyError.forEach(rshyJk -> {
+            String map = rshyServer.getMap("412728199706030513", rshyJk, "ff70eae2e37a6e6ce7ff34d0a9e92f5d");
+            if (StringUtils.isNotBlank(map)) {
+                rshyJk.setErrCount(0);
+                rshyJk.updateById();
+            }
+        });
+        log.info("第三方接口服务状态调用 end");
+    }
+}

+ 84 - 0
src/main/java/com/rshy/project/hy/util/PatternUtil.java

@@ -0,0 +1,84 @@
+package com.rshy.project.hy.util;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author: lileilei
+ * @date: 2022/4/18 13:51
+ * @description: 正则校验
+ */
+@Slf4j
+public class PatternUtil {
+    /**
+     * 校验身份证
+     * @param IDNumber
+     * @return
+     */
+    public static boolean isIDNumber(String IDNumber) {
+        if (IDNumber == null || "".equals(IDNumber)) {
+            return false;
+        }
+        // 定义判别用户身份证号的正则表达式(15位或者18位,最后一位能够为字母)
+        String regularExpression = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|" +
+                "(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";
+        //假设18位身份证号码:41000119910101123X  410001 19910101 123X
+        //^开头
+        //[1-9] 第一位1-9中的一个      4
+        //\\d{5} 五位数字           10001(前六位省市县地区)
+        //(18|19|20)                19(现阶段可能取值范围18xx-20xx年)
+        //\\d{2}                    91(年份)
+        //((0[1-9])|(10|11|12))     01(月份)
+        //(([0-2][1-9])|10|20|30|31)01(日期)
+        //\\d{3} 三位数字            123(第十七位奇数表明男,偶数表明女)
+        //[0-9Xx] 0123456789Xx其中的一个 X(第十八位为校验值)
+        //$结尾
+
+        //假设15位身份证号码:410001910101123  410001 910101 123
+        //^开头
+        //[1-9] 第一位1-9中的一个      4
+        //\\d{5} 五位数字           10001(前六位省市县地区)
+        //\\d{2}                    91(年份)
+        //((0[1-9])|(10|11|12))     01(月份)
+        //(([0-2][1-9])|10|20|30|31)01(日期)
+        //\\d{3} 三位数字            123(第十五位奇数表明男,偶数表明女),15位身份证不含X
+        //$结尾
+
+
+        boolean matches = IDNumber.matches(regularExpression);
+
+        //判断第18位校验值
+        if (matches) {
+            if (IDNumber.length() == 18) {
+                try {
+                    char[] charArray = IDNumber.toCharArray();
+                    //前十七位加权因子
+                    int[] idCardWi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
+                    //这是除以11后,可能产生的11位余数对应的验证码
+                    String[] idCardY = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
+                    int sum = 0;
+                    for (int i = 0; i < idCardWi.length; i++) {
+                        int current = Integer.parseInt(String.valueOf(charArray[i]));
+                        int count = current * idCardWi[i];
+                        sum += count;
+                    }
+                    char idCardLast = charArray[17];
+                    int idCardMod = sum % 11;
+                    if (idCardY[idCardMod].toUpperCase().equals(String.valueOf(idCardLast).toUpperCase())) {
+                        return true;
+                    } else {
+                        log.error("身份证最后一位:" + String.valueOf(idCardLast).toUpperCase() +
+                                "错误,正确的应该是:" + idCardY[idCardMod].toUpperCase());
+                        return false;
+                    }
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    log.error("异常:" + IDNumber);
+                    return false;
+                }
+            }
+
+        }
+        return matches;
+    }
+}

+ 9 - 69
src/main/java/com/rshy/project/hy/web/controller/RshyController.java

@@ -3,7 +3,9 @@ package com.rshy.project.hy.web.controller;
 import com.rshy.project.hy.baseRe.Ret;
 import com.rshy.project.hy.server.RshyServer;
 import com.rshy.project.hy.server.param.RshyParam;
+import com.rshy.project.hy.server.param.RshyQuickParam;
 import com.rshy.project.hy.server.vo.RshyVo;
+import com.rshy.project.hy.util.PatternUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
@@ -30,81 +32,19 @@ public class RshyController {
     @Autowired
     private RshyServer rshyServer;
 
-    @ApiOperation("查询普通盘查")
+    @ApiOperation("普通核验模式")
     @PostMapping("getRyhyInfo")
     public Ret<RshyVo> getRyhyInfo(@RequestBody RshyParam rshyParam) {
-        if (StringUtils.isNotBlank(rshyParam.getSfzh()) && !isIDNumber(rshyParam.getSfzh())) {
+        if (StringUtils.isNotBlank(rshyParam.getSfzh()) && !PatternUtil.isIDNumber(rshyParam.getSfzh())) {
             return Ret.error(10001,"身份证不合法");
         }
+
         return Ret.success(rshyServer.getRshyInfo(rshyParam));
     }
 
-    public static boolean isIDNumber(String IDNumber) {
-        if (IDNumber == null || "".equals(IDNumber)) {
-            return false;
-        }
-        // 定义判别用户身份证号的正则表达式(15位或者18位,最后一位能够为字母)
-        String regularExpression = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|" +
-                "(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";
-        //假设18位身份证号码:41000119910101123X  410001 19910101 123X
-        //^开头
-        //[1-9] 第一位1-9中的一个      4
-        //\\d{5} 五位数字           10001(前六位省市县地区)
-        //(18|19|20)                19(现阶段可能取值范围18xx-20xx年)
-        //\\d{2}                    91(年份)
-        //((0[1-9])|(10|11|12))     01(月份)
-        //(([0-2][1-9])|10|20|30|31)01(日期)
-        //\\d{3} 三位数字            123(第十七位奇数表明男,偶数表明女)
-        //[0-9Xx] 0123456789Xx其中的一个 X(第十八位为校验值)
-        //$结尾
-
-        //假设15位身份证号码:410001910101123  410001 910101 123
-        //^开头
-        //[1-9] 第一位1-9中的一个      4
-        //\\d{5} 五位数字           10001(前六位省市县地区)
-        //\\d{2}                    91(年份)
-        //((0[1-9])|(10|11|12))     01(月份)
-        //(([0-2][1-9])|10|20|30|31)01(日期)
-        //\\d{3} 三位数字            123(第十五位奇数表明男,偶数表明女),15位身份证不含X
-        //$结尾
-
-
-        boolean matches = IDNumber.matches(regularExpression);
-
-        //判断第18位校验值
-        if (matches) {
-
-            if (IDNumber.length() == 18) {
-                try {
-                    char[] charArray = IDNumber.toCharArray();
-                    //前十七位加权因子
-                    int[] idCardWi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
-                    //这是除以11后,可能产生的11位余数对应的验证码
-                    String[] idCardY = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
-                    int sum = 0;
-                    for (int i = 0; i < idCardWi.length; i++) {
-                        int current = Integer.parseInt(String.valueOf(charArray[i]));
-                        int count = current * idCardWi[i];
-                        sum += count;
-                    }
-                    char idCardLast = charArray[17];
-                    int idCardMod = sum % 11;
-                    if (idCardY[idCardMod].toUpperCase().equals(String.valueOf(idCardLast).toUpperCase())) {
-                        return true;
-                    } else {
-                        System.out.println("身份证最后一位:" + String.valueOf(idCardLast).toUpperCase() +
-                                "错误,正确的应该是:" + idCardY[idCardMod].toUpperCase());
-                        return false;
-                    }
-
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    System.out.println("异常:" + IDNumber);
-                    return false;
-                }
-            }
-
-        }
-        return matches;
+    @ApiOperation("人脸快速核验模式")
+    @PostMapping("getQuickRyhyInfo")
+    public Ret<RshyVo> getQuickRyhyInfo(@RequestBody RshyQuickParam rshyQuickParam){
+        return Ret.success(rshyServer.getQuickRyhyInfo(rshyQuickParam));
     }
 }

+ 1 - 5
src/main/java/com/rshy/project/hy/web/controller/RshyJkController.java

@@ -2,8 +2,7 @@ package com.rshy.project.hy.web.controller;
 
 
 import com.rshy.project.hy.baseRe.Ret;
-import com.rshy.project.hy.entity.RshyJk;
-import com.rshy.project.hy.server.vo.RshyVo;
+import com.rshy.project.hy.model.entity.RshyJk;
 import com.rshy.project.hy.service.RshyJkService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -12,7 +11,6 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
@@ -29,8 +27,6 @@ import java.util.List;
 @Api(tags = "接口控制层")
 @RequestMapping("/rshyJk")
 public class RshyJkController {
-
-
     @Autowired
     private RshyJkService rshyJkService;
 

+ 11 - 0
src/main/resources/application-local.yml

@@ -34,3 +34,14 @@ spring:
 
 task:
   enableTask: true
+
+#依图人脸检索第三方服务
+face:
+  retrieva:
+    userInfo:
+      name: dt_hskj
+      password: 0b8fa71f4e652ead665fa59b09974b6c
+      threshold: 90.00
+    loginUrl: http://41.196.217.203:11180/business/api/login
+    repositoryUrl: http://41.196.217.203:11180/business/api/repository
+    retrievalUrl: http://41.196.217.203:11180/business/api/retrieval_repository

+ 15 - 13
src/main/resources/application-prod.yml

@@ -17,22 +17,24 @@ spring:
 #        max-idle: 8 # 连接池中的最大空闲连接
 #        min-idle: 0 # 连接池中的最小空闲连接
 #    timeout: 5000 # 连接超时时间(毫秒)
-  #redis设置
-  #redis:
-    #database: 1
-    #host: www.angie910.com
-    #port: 6379
-    #password:
-    #timeout: 5000
-    #jedis:
-      #pool:
-        #max-active: 100   # 连接池最大连接数(使用负值表示没有限制)
-        #max-idle: 10 # 连接池中的最大空闲连接
-        #max-wait: -1  # 连接池最大阻塞等待时间(使用负值表示没有限制)
-        #min-idle: 0 # 连接池中的最小空闲连接
+
 swagger:
   enabled: true
 task:
   enableTask: true
 
+#依图人脸检索第三方服务
+face:
+  retrieva:
+    userInfo:
+      name: dt_hskj
+      password: 0b8fa71f4e652ead665fa59b09974b6c
+      threshold: 90.00
+    loginUrl: http://41.196.217.203:11180/business/api/login
+    repositoryUrl: http://41.196.217.203:11180/business/api/repository
+    retrievalUrl: http://41.196.217.203:11180/business/api/retrieval_repository
+
+
+
+
 

+ 1 - 1
src/main/resources/application.yml

@@ -9,7 +9,7 @@ spring:
     name: rshy
   profiles:
     active: prod
-    #active: '@currentConfig@'
+  #active: '@currentConfig@'
   servlet:
     multipart:
       max-file-size: 10MB

+ 142 - 83
src/main/resources/logback-spring.xml

@@ -1,93 +1,152 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scanPeriod="10 seconds">
-  <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{96} [%line] - %msg%n"/>
+    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{96} [%line] - %msg%n"/>
 
-  <springProfile name="dev">
-    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-        <level>DEBUG</level>
-      </filter>
-      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-        <pattern>${LOG_PATTERN}</pattern>
-      </encoder>
-    </appender>
-    <logger name="com.zjjcnt" level="DEBUG" additivity="false">
-      <appender-ref ref="STDOUT"/>
-    </logger>
-    <root level="INFO">
-      <appender-ref ref="STDOUT"/>
-    </root>
-  </springProfile>
+    <!-- 彩色日志 -->
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex"/>
 
-  <springProfile name="prod-nw">
-    <property name="LOG_PATH" value="logs"/>
-    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
-      <filter class="ch.qos.logback.classic.filter.LevelFilter">
-        <level>INFO</level>
-        <onMatch>ACCEPT</onMatch>
-        <onMismatch>DENY</onMismatch>
-      </filter>
-      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-        <FileNamePattern>${LOG_PATH}/fkj/info.%d{yyyy-MM-dd}.log</FileNamePattern>
-      </rollingPolicy>
-      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-        <pattern>${LOG_PATTERN}</pattern>
-      </encoder>
+    <springProfile name="local">
+        <!--输出到控制台 ConsoleAppender-->
+        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+            <encoder>
+                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+                <charset>utf8</charset>
+            </encoder>
+        </appender>
+        <root level="INFO">
+            <appender-ref ref="CONSOLE"/>
+        </root>
+    </springProfile>
 
-    </appender>
-    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
-      <filter class="ch.qos.logback.classic.filter.LevelFilter">
-        <level>ERROR</level>
-        <onMatch>ACCEPT</onMatch>
-        <onMismatch>DENY</onMismatch>
-      </filter>
-      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-        <FileNamePattern>${LOG_PATH}/fkj/error.%d{yyyy-MM-dd}.log</FileNamePattern>
-      </rollingPolicy>
-      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-        <pattern>${LOG_PATTERN}</pattern>
-      </encoder>
 
-    </appender>
-    <root>
-      <appender-ref ref="FILE_INFO"/>
-      <appender-ref ref="FILE_ERROR"/>
-    </root>
-  </springProfile>
+    <springProfile name="dev">
+        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+                <level>DEBUG</level>
+            </filter>
+            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+                <pattern>${LOG_PATTERN}</pattern>
+            </encoder>
+        </appender>
+        <logger name="com.zjjcnt" level="DEBUG" additivity="false">
+            <appender-ref ref="STDOUT"/>
+        </logger>
+        <root level="INFO">
+            <appender-ref ref="STDOUT"/>
+        </root>
+    </springProfile>
 
-  <springProfile name="prod-ww">
-    <property name="LOG_PATH" value="logs"/>
-    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
-      <filter class="ch.qos.logback.classic.filter.LevelFilter">
-        <level>INFO</level>
-        <onMatch>ACCEPT</onMatch>
-        <onMismatch>DENY</onMismatch>
-      </filter>
-      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-        <FileNamePattern>${LOG_PATH}/fkj/info.%d{yyyy-MM-dd}.log</FileNamePattern>
-      </rollingPolicy>
-      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-        <pattern>${LOG_PATTERN}</pattern>
-      </encoder>
+    <springProfile name="prod">
+        <property name="LOG_PATH" value="logs"/>
+        <!--输出到控制台 ConsoleAppender-->
+        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+            <encoder>
+                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+                <charset>utf8</charset>
+            </encoder>
+        </appender>
+        <root level="INFO">
+            <appender-ref ref="CONSOLE"/>
+        </root>
+        <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+            <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                <level>INFO</level>
+                <onMatch>ACCEPT</onMatch>
+                <onMismatch>DENY</onMismatch>
+            </filter>
+            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                <FileNamePattern>${LOG_PATH}/info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
+                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                    <!-- or whenever the file size reaches 64 MB -->
+                    <maxFileSize>64 MB</maxFileSize>
+                </timeBasedFileNamingAndTriggeringPolicy>
+                <MaxHistory>180</MaxHistory>
+            </rollingPolicy>
+            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+                <pattern>${LOG_PATTERN}</pattern>
+                <charset>UTF-8</charset>
+            </encoder>
+        </appender>
 
-    </appender>
-    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
-      <filter class="ch.qos.logback.classic.filter.LevelFilter">
-        <level>ERROR</level>
-        <onMatch>ACCEPT</onMatch>
-        <onMismatch>DENY</onMismatch>
-      </filter>
-      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-        <FileNamePattern>${LOG_PATH}/fkj/error.%d{yyyy-MM-dd}.log</FileNamePattern>
-      </rollingPolicy>
-      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-        <pattern>${LOG_PATTERN}</pattern>
-      </encoder>
+        <!--WARN 级别的日志-->
+        <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
+            <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                <level>WARN</level>
+                <onMatch>ACCEPT</onMatch>
+                <onMismatch>DENY</onMismatch>
+            </filter>
+            <encoder>
+                <pattern>${FILE_LOG_PATTERN}</pattern>
+                <charset>UTF-8</charset>
+            </encoder>
+            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                <fileNamePattern>${LOG_PATH}/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
+                <MaxHistory>180</MaxHistory>
+            </rollingPolicy>
+        </appender>
 
-    </appender>
-    <root>
-      <appender-ref ref="FILE_INFO"/>
-      <appender-ref ref="FILE_ERROR"/>
-    </root>
-  </springProfile>
+        <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+            <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                <level>ERROR</level>
+                <onMatch>ACCEPT</onMatch>
+                <onMismatch>DENY</onMismatch>
+            </filter>
+            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                <FileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.log</FileNamePattern>
+                <MaxHistory>180</MaxHistory>
+            </rollingPolicy>
+            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+                <pattern>${LOG_PATTERN}</pattern>
+                <charset>UTF-8</charset>
+            </encoder>
+        </appender>
+        <root>
+            <appender-ref ref="CONSOLE"/>
+            <appender-ref ref="FILE_INFO"/>
+            <appender-ref ref="FILE_WARN"/>
+            <appender-ref ref="FILE_ERROR"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="prod-ww">
+        <property name="LOG_PATH" value="logs"/>
+        <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+            <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                <level>INFO</level>
+                <onMatch>ACCEPT</onMatch>
+                <onMismatch>DENY</onMismatch>
+            </filter>
+            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                <FileNamePattern>${LOG_PATH}/fkj/info.%d{yyyy-MM-dd}.log</FileNamePattern>
+            </rollingPolicy>
+            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+                <pattern>${LOG_PATTERN}</pattern>
+            </encoder>
+
+        </appender>
+        <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+            <filter class="ch.qos.logback.classic.filter.LevelFilter">
+                <level>ERROR</level>
+                <onMatch>ACCEPT</onMatch>
+                <onMismatch>DENY</onMismatch>
+            </filter>
+            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                <FileNamePattern>${LOG_PATH}/fkj/error.%d{yyyy-MM-dd}.log</FileNamePattern>
+            </rollingPolicy>
+            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+                <pattern>${LOG_PATTERN}</pattern>
+            </encoder>
+
+        </appender>
+        <root>
+            <appender-ref ref="FILE_INFO"/>
+            <appender-ref ref="FILE_ERROR"/>
+        </root>
+    </springProfile>
 </configuration>

+ 1 - 1
src/main/resources/mapper/RshyJk.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.rshy.project.hy.mapper.RshyJkMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.rshy.project.hy.entity.RshyJk">
+    <resultMap id="BaseResultMap" type="com.rshy.project.hy.model.entity.RshyJk">
         <id column="id" property="id" />
         <result column="hy_url" property="hyUrl" />
         <result column="hy_param" property="hyParam" />

Some files were not shown because too many files changed in this diff