diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java index f91d7bd..2dd34b6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java @@ -21,11 +21,13 @@ import com.casic.missiles.modular.model.GroupDevice; import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.GroupDeviceService; +import com.casic.missiles.modular.system.model.Dict; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -179,7 +181,11 @@ if (CollectionUtil.isNotEmpty(list)) { return list; } - this.saveBatch(collect); + try{ + this.saveBatch(collect); + }catch (DuplicateKeyException exception){ + list.add("存在重复设备编号数据,请检查后重试"); + } } return list; } @@ -212,7 +218,8 @@ deviceRepairLogDTO.setCreateTime(v.get(0).getCreateTime()); list.add(deviceRepairLogDTO); }); - return list; + List collect = list.stream().sorted(Comparator.comparing(DeviceRepairLogDTO::getCreateTime).reversed()).collect(Collectors.toList()); + return collect; } @Override @@ -437,4 +444,29 @@ return deviceInfo; } + @Override + public List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoMapper.selectDeviceStatusGroupByStatusAndArea(deviceAreaRequest); +// if(CollectionUtils.isEmpty(deviceStatusDTOS)){ +// return new ArrayList<>(); +// } + for (DeviceStatusDTO deviceStatusDTO : deviceStatusDTOS) { + String dictNameByCode = dictService.getDictNameByCode(SecurityEventDict.DEVICE_STATUS, deviceStatusDTO.getStatus()); + deviceStatusDTO.setStatusName(dictNameByCode); + } + List collect1 = deviceStatusDTOS.stream().map(DeviceStatusDTO::getStatusName).collect(Collectors.toList()); + List dict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); + List collect = dict.stream().map(Dict::getName).collect(Collectors.toList()); + collect.forEach(name -> { + if(!collect1.contains(name)){ + DeviceStatusDTO deviceStatusDTO = new DeviceStatusDTO(); + deviceStatusDTO.setStatusName(name); + deviceStatusDTO.setQuantity(0); + deviceStatusDTOS.add(deviceStatusDTO); + } + }); + + return deviceStatusDTOS; + } + } diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java index f91d7bd..2dd34b6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java @@ -21,11 +21,13 @@ import com.casic.missiles.modular.model.GroupDevice; import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.GroupDeviceService; +import com.casic.missiles.modular.system.model.Dict; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -179,7 +181,11 @@ if (CollectionUtil.isNotEmpty(list)) { return list; } - this.saveBatch(collect); + try{ + this.saveBatch(collect); + }catch (DuplicateKeyException exception){ + list.add("存在重复设备编号数据,请检查后重试"); + } } return list; } @@ -212,7 +218,8 @@ deviceRepairLogDTO.setCreateTime(v.get(0).getCreateTime()); list.add(deviceRepairLogDTO); }); - return list; + List collect = list.stream().sorted(Comparator.comparing(DeviceRepairLogDTO::getCreateTime).reversed()).collect(Collectors.toList()); + return collect; } @Override @@ -437,4 +444,29 @@ return deviceInfo; } + @Override + public List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoMapper.selectDeviceStatusGroupByStatusAndArea(deviceAreaRequest); +// if(CollectionUtils.isEmpty(deviceStatusDTOS)){ +// return new ArrayList<>(); +// } + for (DeviceStatusDTO deviceStatusDTO : deviceStatusDTOS) { + String dictNameByCode = dictService.getDictNameByCode(SecurityEventDict.DEVICE_STATUS, deviceStatusDTO.getStatus()); + deviceStatusDTO.setStatusName(dictNameByCode); + } + List collect1 = deviceStatusDTOS.stream().map(DeviceStatusDTO::getStatusName).collect(Collectors.toList()); + List dict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); + List collect = dict.stream().map(Dict::getName).collect(Collectors.toList()); + collect.forEach(name -> { + if(!collect1.contains(name)){ + DeviceStatusDTO deviceStatusDTO = new DeviceStatusDTO(); + deviceStatusDTO.setStatusName(name); + deviceStatusDTO.setQuantity(0); + deviceStatusDTOS.add(deviceStatusDTO); + } + }); + + return deviceStatusDTOS; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index d29d38d..0f02ccb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; @@ -49,6 +50,9 @@ @Autowired private CaseInfoMapper caseInfoMapper; + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -59,7 +63,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -86,7 +90,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -122,7 +126,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -160,7 +164,7 @@ String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); - // TODO: 2022/7/28 事件状态字典值选择 + //事件状态字典值选择 caseInfo.setStatus(dict.get(0).getCode()); //事件状态("未解决"的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); if(Objects.isNull(deviceInfo)){ @@ -176,7 +180,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -195,7 +199,7 @@ log.info("接收到监控点上线事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return; } - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); int upDevFlag = deviceInfoMapper.updateById(deviceInfo); @@ -217,7 +221,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -234,7 +238,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -250,7 +254,7 @@ public void deviceOnlineHandle(JSONObject event) { String srcIndex = event.getString("srcIndex"); DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -266,7 +270,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -286,6 +290,56 @@ } @Override + public void doorPassHandle(JSONObject event) { + JSONObject data = event.getJSONObject("data"); + Integer eventType = event.getInteger("eventType"); + String srcIndex = event.getString("srcIndex"); + String srcName = event.getString("srcName"); + String indexCode = event.getString("srcParentIndex"); + String staffCode = data.getString("ExtEventPersonNo"); + String cardNum = data.getString("ExtEventCardNo"); + Integer channelNum = data.getInteger("ExtAccessChannel"); + //进出类型,文档为1进0出,实际为1进2出,和字典一样 + Integer inoutType = data.getInteger("ExtEventInOut"); + String passWay = ""; + String description = ""; + //通过方式:卡、人脸、身份证 + //当合法卡比对通过且ExtEventIdentityCardInfo有值且ExtEventIdentityCardInfo中的IdNum有值为身份证通过 + if(SecurityEventType.CARD_COMPARE_PASS.equals(eventType)){ + JSONObject extEventIdentityCardInfo = data.getJSONObject("ExtEventIdentityCardInfo"); + if(!Objects.isNull(extEventIdentityCardInfo) && StringUtils.isNotEmpty(extEventIdentityCardInfo.getString("IdNum"))){ + passWay = "2";//身份证 + description = "身份证核对成功"; + }else{ + passWay = "0";//刷卡 + description = "刷卡比对成功"; + } + }else if(SecurityEventType.FACE_COMPARE_PASS.equals(eventType) || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + passWay = "1";//人脸 + description = "人脸比对成功"; + } + DateTime parse = DateUtil.parse(event.getString("happenTime")); + String happenTime = DateUtil.formatDateTime(parse); + + StaffInoutLog staffInoutLog = new StaffInoutLog(); + staffInoutLog.setStaffCode(staffCode); + staffInoutLog.setSrcIndex(srcIndex); + staffInoutLog.setIndexCode(indexCode); + staffInoutLog.setCardNum(cardNum); + staffInoutLog.setChannelNum(channelNum); + staffInoutLog.setWayName(srcName); + staffInoutLog.setInoutType(String.valueOf(inoutType)); + staffInoutLog.setPassWay(passWay); + staffInoutLog.setDescription(description); + staffInoutLog.setPassTime(happenTime); + if(inoutLogMapper.insert(staffInoutLog) <= 0){ + log.error("新增人员进出记录异常"); + return; + } + + } + + @Override @Transactional(rollbackFor = Exception.class) public void propertyAttendanceHandle(JSONObject event) { JSONObject data = event.getJSONObject("data"); @@ -300,7 +354,8 @@ String happenTime = DateUtil.formatDateTime(parse); //使用海康人脸唯一标识获取员工信息 Map columnMap = new HashMap<>(); - columnMap.put("staff_face_id", faceInfoCode); + //已验证,海康存储的faceInfoCode是staff_code + columnMap.put("staff_code", faceInfoCode); List staffInfos = staffInfoMapper.selectByMap(columnMap); StaffInfo staffInfo = staffInfos.get(0); //存储考勤信息 @@ -311,13 +366,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); info.setStaffCode(staffInfo.getStaffCode()); + info.setJobNo(staffInfo.getJobNo()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 物业人员字典值选择 + //物业人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(0).getCode()); info.setStaffTypeName(staffDict.get(0).getName()); @@ -358,13 +415,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); + info.setJobNo(staffInfo.getJobNo()); info.setStaffCode(staffInfo.getStaffCode()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 安保人员字典值选择 + //安保人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(1).getCode()); info.setStaffTypeName(staffDict.get(1).getName()); diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java index f91d7bd..2dd34b6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java @@ -21,11 +21,13 @@ import com.casic.missiles.modular.model.GroupDevice; import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.GroupDeviceService; +import com.casic.missiles.modular.system.model.Dict; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -179,7 +181,11 @@ if (CollectionUtil.isNotEmpty(list)) { return list; } - this.saveBatch(collect); + try{ + this.saveBatch(collect); + }catch (DuplicateKeyException exception){ + list.add("存在重复设备编号数据,请检查后重试"); + } } return list; } @@ -212,7 +218,8 @@ deviceRepairLogDTO.setCreateTime(v.get(0).getCreateTime()); list.add(deviceRepairLogDTO); }); - return list; + List collect = list.stream().sorted(Comparator.comparing(DeviceRepairLogDTO::getCreateTime).reversed()).collect(Collectors.toList()); + return collect; } @Override @@ -437,4 +444,29 @@ return deviceInfo; } + @Override + public List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoMapper.selectDeviceStatusGroupByStatusAndArea(deviceAreaRequest); +// if(CollectionUtils.isEmpty(deviceStatusDTOS)){ +// return new ArrayList<>(); +// } + for (DeviceStatusDTO deviceStatusDTO : deviceStatusDTOS) { + String dictNameByCode = dictService.getDictNameByCode(SecurityEventDict.DEVICE_STATUS, deviceStatusDTO.getStatus()); + deviceStatusDTO.setStatusName(dictNameByCode); + } + List collect1 = deviceStatusDTOS.stream().map(DeviceStatusDTO::getStatusName).collect(Collectors.toList()); + List dict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); + List collect = dict.stream().map(Dict::getName).collect(Collectors.toList()); + collect.forEach(name -> { + if(!collect1.contains(name)){ + DeviceStatusDTO deviceStatusDTO = new DeviceStatusDTO(); + deviceStatusDTO.setStatusName(name); + deviceStatusDTO.setQuantity(0); + deviceStatusDTOS.add(deviceStatusDTO); + } + }); + + return deviceStatusDTOS; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index d29d38d..0f02ccb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; @@ -49,6 +50,9 @@ @Autowired private CaseInfoMapper caseInfoMapper; + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -59,7 +63,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -86,7 +90,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -122,7 +126,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -160,7 +164,7 @@ String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); - // TODO: 2022/7/28 事件状态字典值选择 + //事件状态字典值选择 caseInfo.setStatus(dict.get(0).getCode()); //事件状态("未解决"的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); if(Objects.isNull(deviceInfo)){ @@ -176,7 +180,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -195,7 +199,7 @@ log.info("接收到监控点上线事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return; } - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); int upDevFlag = deviceInfoMapper.updateById(deviceInfo); @@ -217,7 +221,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -234,7 +238,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -250,7 +254,7 @@ public void deviceOnlineHandle(JSONObject event) { String srcIndex = event.getString("srcIndex"); DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -266,7 +270,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -286,6 +290,56 @@ } @Override + public void doorPassHandle(JSONObject event) { + JSONObject data = event.getJSONObject("data"); + Integer eventType = event.getInteger("eventType"); + String srcIndex = event.getString("srcIndex"); + String srcName = event.getString("srcName"); + String indexCode = event.getString("srcParentIndex"); + String staffCode = data.getString("ExtEventPersonNo"); + String cardNum = data.getString("ExtEventCardNo"); + Integer channelNum = data.getInteger("ExtAccessChannel"); + //进出类型,文档为1进0出,实际为1进2出,和字典一样 + Integer inoutType = data.getInteger("ExtEventInOut"); + String passWay = ""; + String description = ""; + //通过方式:卡、人脸、身份证 + //当合法卡比对通过且ExtEventIdentityCardInfo有值且ExtEventIdentityCardInfo中的IdNum有值为身份证通过 + if(SecurityEventType.CARD_COMPARE_PASS.equals(eventType)){ + JSONObject extEventIdentityCardInfo = data.getJSONObject("ExtEventIdentityCardInfo"); + if(!Objects.isNull(extEventIdentityCardInfo) && StringUtils.isNotEmpty(extEventIdentityCardInfo.getString("IdNum"))){ + passWay = "2";//身份证 + description = "身份证核对成功"; + }else{ + passWay = "0";//刷卡 + description = "刷卡比对成功"; + } + }else if(SecurityEventType.FACE_COMPARE_PASS.equals(eventType) || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + passWay = "1";//人脸 + description = "人脸比对成功"; + } + DateTime parse = DateUtil.parse(event.getString("happenTime")); + String happenTime = DateUtil.formatDateTime(parse); + + StaffInoutLog staffInoutLog = new StaffInoutLog(); + staffInoutLog.setStaffCode(staffCode); + staffInoutLog.setSrcIndex(srcIndex); + staffInoutLog.setIndexCode(indexCode); + staffInoutLog.setCardNum(cardNum); + staffInoutLog.setChannelNum(channelNum); + staffInoutLog.setWayName(srcName); + staffInoutLog.setInoutType(String.valueOf(inoutType)); + staffInoutLog.setPassWay(passWay); + staffInoutLog.setDescription(description); + staffInoutLog.setPassTime(happenTime); + if(inoutLogMapper.insert(staffInoutLog) <= 0){ + log.error("新增人员进出记录异常"); + return; + } + + } + + @Override @Transactional(rollbackFor = Exception.class) public void propertyAttendanceHandle(JSONObject event) { JSONObject data = event.getJSONObject("data"); @@ -300,7 +354,8 @@ String happenTime = DateUtil.formatDateTime(parse); //使用海康人脸唯一标识获取员工信息 Map columnMap = new HashMap<>(); - columnMap.put("staff_face_id", faceInfoCode); + //已验证,海康存储的faceInfoCode是staff_code + columnMap.put("staff_code", faceInfoCode); List staffInfos = staffInfoMapper.selectByMap(columnMap); StaffInfo staffInfo = staffInfos.get(0); //存储考勤信息 @@ -311,13 +366,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); info.setStaffCode(staffInfo.getStaffCode()); + info.setJobNo(staffInfo.getJobNo()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 物业人员字典值选择 + //物业人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(0).getCode()); info.setStaffTypeName(staffDict.get(0).getName()); @@ -358,13 +415,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); + info.setJobNo(staffInfo.getJobNo()); info.setStaffCode(staffInfo.getStaffCode()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 安保人员字典值选择 + //安保人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(1).getCode()); info.setStaffTypeName(staffDict.get(1).getName()); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 06f8bf3..b2e826f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java @@ -200,7 +200,7 @@ String hazardName = hazardLevelMapper.selectHazardNameByCode(key); monthAndWeekDTO.setLevelName(hazardName); if (year.equals(String.valueOf(DateUtil.thisYear()))) { - monthAndWeekDTO.setMonthQuantity(sum / DateUtil.thisMonth()); + monthAndWeekDTO.setMonthQuantity(sum / (DateUtil.thisMonth()+1)); strAvgMap.put(key, monthAndWeekDTO); } else { monthAndWeekDTO.setMonthQuantity(sum / 12); @@ -247,7 +247,9 @@ resultList.add(strAvgMap.get(key)); }); //输出顺序 - Collections.swap(resultList, 1, 2); + if(!CollectionUtils.isEmpty(resultList) && resultList.size() > 1){ + Collections.swap(resultList, 1, 2); + } return ResponseData.success(resultList); } @@ -768,6 +770,7 @@ map.put("date", date); resultList.add(map); } + resultList.sort(Comparator.comparing(o -> o.get("date").toString())); return ResponseData.success(resultList); } @@ -952,16 +955,16 @@ //2个map有一个为空 if (CollectionUtils.isEmpty(onDutyMap)) { if (!Objects.isNull(levelAssessMap.get(date))) { - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } if (CollectionUtils.isEmpty(levelAssessMap)) { if (!Objects.isNull(onDutyMap.get(date))) { - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } } else if (Objects.isNull(onDutyMap.get(date)) && Objects.isNull(levelAssessMap.get(date))) { @@ -971,18 +974,18 @@ } else if (Objects.isNull(onDutyMap.get(date)) && !Objects.isNull(levelAssessMap.get(date))) { //2、补全到岗率数据处理 //该日期onDutyMap空,levelAssessMap不空 - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //2、补全安保等级评估数据处理 //该日期levelAssessMap空,onDutyMap不空 - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (!Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //该日期2个都不空 BigDecimal onDutyDecimal = onDutyMap.get(date); BigDecimal levelAssessDecimal = levelAssessMap.get(date); - map.put("score", onDutyDecimal.add(levelAssessDecimal).stripTrailingZeros().toPlainString()); + map.put("score", onDutyDecimal.add(levelAssessDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } }); @@ -1167,6 +1170,13 @@ return ResponseData.success(resultList); } + @Override + public Object highFrequency() { + //事件表近一个月按description分组 + List list = caseInfoMapper.getCountForRank(); + return ResponseData.success(list); + } + private List> getForResult(List weekCaseDTOS, List weekCaseKeyAreaDTOS, List caseInfos, HashMap weekCaseMap, HashMap caseScoreMap, HashMap keyAreaScoreMap, HashMap assessScoreMap, @@ -1255,7 +1265,7 @@ BigDecimal caseScore = preCaseScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("case"))); BigDecimal keyAreaScore = preKeyAreaScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("keyArea"))); BigDecimal responseAssessScore = preAssessScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("responseAssess"))); - map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).stripTrailingZeros().toPlainString()); + map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); }); return resultList; diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java index f91d7bd..2dd34b6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java @@ -21,11 +21,13 @@ import com.casic.missiles.modular.model.GroupDevice; import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.GroupDeviceService; +import com.casic.missiles.modular.system.model.Dict; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -179,7 +181,11 @@ if (CollectionUtil.isNotEmpty(list)) { return list; } - this.saveBatch(collect); + try{ + this.saveBatch(collect); + }catch (DuplicateKeyException exception){ + list.add("存在重复设备编号数据,请检查后重试"); + } } return list; } @@ -212,7 +218,8 @@ deviceRepairLogDTO.setCreateTime(v.get(0).getCreateTime()); list.add(deviceRepairLogDTO); }); - return list; + List collect = list.stream().sorted(Comparator.comparing(DeviceRepairLogDTO::getCreateTime).reversed()).collect(Collectors.toList()); + return collect; } @Override @@ -437,4 +444,29 @@ return deviceInfo; } + @Override + public List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoMapper.selectDeviceStatusGroupByStatusAndArea(deviceAreaRequest); +// if(CollectionUtils.isEmpty(deviceStatusDTOS)){ +// return new ArrayList<>(); +// } + for (DeviceStatusDTO deviceStatusDTO : deviceStatusDTOS) { + String dictNameByCode = dictService.getDictNameByCode(SecurityEventDict.DEVICE_STATUS, deviceStatusDTO.getStatus()); + deviceStatusDTO.setStatusName(dictNameByCode); + } + List collect1 = deviceStatusDTOS.stream().map(DeviceStatusDTO::getStatusName).collect(Collectors.toList()); + List dict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); + List collect = dict.stream().map(Dict::getName).collect(Collectors.toList()); + collect.forEach(name -> { + if(!collect1.contains(name)){ + DeviceStatusDTO deviceStatusDTO = new DeviceStatusDTO(); + deviceStatusDTO.setStatusName(name); + deviceStatusDTO.setQuantity(0); + deviceStatusDTOS.add(deviceStatusDTO); + } + }); + + return deviceStatusDTOS; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index d29d38d..0f02ccb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; @@ -49,6 +50,9 @@ @Autowired private CaseInfoMapper caseInfoMapper; + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -59,7 +63,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -86,7 +90,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -122,7 +126,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -160,7 +164,7 @@ String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); - // TODO: 2022/7/28 事件状态字典值选择 + //事件状态字典值选择 caseInfo.setStatus(dict.get(0).getCode()); //事件状态("未解决"的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); if(Objects.isNull(deviceInfo)){ @@ -176,7 +180,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -195,7 +199,7 @@ log.info("接收到监控点上线事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return; } - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); int upDevFlag = deviceInfoMapper.updateById(deviceInfo); @@ -217,7 +221,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -234,7 +238,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -250,7 +254,7 @@ public void deviceOnlineHandle(JSONObject event) { String srcIndex = event.getString("srcIndex"); DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -266,7 +270,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -286,6 +290,56 @@ } @Override + public void doorPassHandle(JSONObject event) { + JSONObject data = event.getJSONObject("data"); + Integer eventType = event.getInteger("eventType"); + String srcIndex = event.getString("srcIndex"); + String srcName = event.getString("srcName"); + String indexCode = event.getString("srcParentIndex"); + String staffCode = data.getString("ExtEventPersonNo"); + String cardNum = data.getString("ExtEventCardNo"); + Integer channelNum = data.getInteger("ExtAccessChannel"); + //进出类型,文档为1进0出,实际为1进2出,和字典一样 + Integer inoutType = data.getInteger("ExtEventInOut"); + String passWay = ""; + String description = ""; + //通过方式:卡、人脸、身份证 + //当合法卡比对通过且ExtEventIdentityCardInfo有值且ExtEventIdentityCardInfo中的IdNum有值为身份证通过 + if(SecurityEventType.CARD_COMPARE_PASS.equals(eventType)){ + JSONObject extEventIdentityCardInfo = data.getJSONObject("ExtEventIdentityCardInfo"); + if(!Objects.isNull(extEventIdentityCardInfo) && StringUtils.isNotEmpty(extEventIdentityCardInfo.getString("IdNum"))){ + passWay = "2";//身份证 + description = "身份证核对成功"; + }else{ + passWay = "0";//刷卡 + description = "刷卡比对成功"; + } + }else if(SecurityEventType.FACE_COMPARE_PASS.equals(eventType) || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + passWay = "1";//人脸 + description = "人脸比对成功"; + } + DateTime parse = DateUtil.parse(event.getString("happenTime")); + String happenTime = DateUtil.formatDateTime(parse); + + StaffInoutLog staffInoutLog = new StaffInoutLog(); + staffInoutLog.setStaffCode(staffCode); + staffInoutLog.setSrcIndex(srcIndex); + staffInoutLog.setIndexCode(indexCode); + staffInoutLog.setCardNum(cardNum); + staffInoutLog.setChannelNum(channelNum); + staffInoutLog.setWayName(srcName); + staffInoutLog.setInoutType(String.valueOf(inoutType)); + staffInoutLog.setPassWay(passWay); + staffInoutLog.setDescription(description); + staffInoutLog.setPassTime(happenTime); + if(inoutLogMapper.insert(staffInoutLog) <= 0){ + log.error("新增人员进出记录异常"); + return; + } + + } + + @Override @Transactional(rollbackFor = Exception.class) public void propertyAttendanceHandle(JSONObject event) { JSONObject data = event.getJSONObject("data"); @@ -300,7 +354,8 @@ String happenTime = DateUtil.formatDateTime(parse); //使用海康人脸唯一标识获取员工信息 Map columnMap = new HashMap<>(); - columnMap.put("staff_face_id", faceInfoCode); + //已验证,海康存储的faceInfoCode是staff_code + columnMap.put("staff_code", faceInfoCode); List staffInfos = staffInfoMapper.selectByMap(columnMap); StaffInfo staffInfo = staffInfos.get(0); //存储考勤信息 @@ -311,13 +366,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); info.setStaffCode(staffInfo.getStaffCode()); + info.setJobNo(staffInfo.getJobNo()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 物业人员字典值选择 + //物业人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(0).getCode()); info.setStaffTypeName(staffDict.get(0).getName()); @@ -358,13 +415,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); + info.setJobNo(staffInfo.getJobNo()); info.setStaffCode(staffInfo.getStaffCode()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 安保人员字典值选择 + //安保人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(1).getCode()); info.setStaffTypeName(staffDict.get(1).getName()); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 06f8bf3..b2e826f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java @@ -200,7 +200,7 @@ String hazardName = hazardLevelMapper.selectHazardNameByCode(key); monthAndWeekDTO.setLevelName(hazardName); if (year.equals(String.valueOf(DateUtil.thisYear()))) { - monthAndWeekDTO.setMonthQuantity(sum / DateUtil.thisMonth()); + monthAndWeekDTO.setMonthQuantity(sum / (DateUtil.thisMonth()+1)); strAvgMap.put(key, monthAndWeekDTO); } else { monthAndWeekDTO.setMonthQuantity(sum / 12); @@ -247,7 +247,9 @@ resultList.add(strAvgMap.get(key)); }); //输出顺序 - Collections.swap(resultList, 1, 2); + if(!CollectionUtils.isEmpty(resultList) && resultList.size() > 1){ + Collections.swap(resultList, 1, 2); + } return ResponseData.success(resultList); } @@ -768,6 +770,7 @@ map.put("date", date); resultList.add(map); } + resultList.sort(Comparator.comparing(o -> o.get("date").toString())); return ResponseData.success(resultList); } @@ -952,16 +955,16 @@ //2个map有一个为空 if (CollectionUtils.isEmpty(onDutyMap)) { if (!Objects.isNull(levelAssessMap.get(date))) { - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } if (CollectionUtils.isEmpty(levelAssessMap)) { if (!Objects.isNull(onDutyMap.get(date))) { - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } } else if (Objects.isNull(onDutyMap.get(date)) && Objects.isNull(levelAssessMap.get(date))) { @@ -971,18 +974,18 @@ } else if (Objects.isNull(onDutyMap.get(date)) && !Objects.isNull(levelAssessMap.get(date))) { //2、补全到岗率数据处理 //该日期onDutyMap空,levelAssessMap不空 - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //2、补全安保等级评估数据处理 //该日期levelAssessMap空,onDutyMap不空 - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (!Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //该日期2个都不空 BigDecimal onDutyDecimal = onDutyMap.get(date); BigDecimal levelAssessDecimal = levelAssessMap.get(date); - map.put("score", onDutyDecimal.add(levelAssessDecimal).stripTrailingZeros().toPlainString()); + map.put("score", onDutyDecimal.add(levelAssessDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } }); @@ -1167,6 +1170,13 @@ return ResponseData.success(resultList); } + @Override + public Object highFrequency() { + //事件表近一个月按description分组 + List list = caseInfoMapper.getCountForRank(); + return ResponseData.success(list); + } + private List> getForResult(List weekCaseDTOS, List weekCaseKeyAreaDTOS, List caseInfos, HashMap weekCaseMap, HashMap caseScoreMap, HashMap keyAreaScoreMap, HashMap assessScoreMap, @@ -1255,7 +1265,7 @@ BigDecimal caseScore = preCaseScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("case"))); BigDecimal keyAreaScore = preKeyAreaScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("keyArea"))); BigDecimal responseAssessScore = preAssessScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("responseAssess"))); - map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).stripTrailingZeros().toPlainString()); + map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); }); return resultList; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java index 97ed308..c39a5fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.modular.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,6 +10,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.dao.StaffInfoMapper; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.*; import com.casic.missiles.modular.enums.HikUri; @@ -59,7 +62,8 @@ List pageList = staffInfoMapper.getStaffInfoListPage(page, staffInfoRequest); pageList.stream().forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); - staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); +// staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); + getFiledFromHik(staffInfo); }); return pageList; } catch (DataAccessException ex) { @@ -280,6 +284,7 @@ List list = staffInfoMapper.getStaffInfoList(staffInfoRequest); list.forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); + staffInfo.setStaffGenderName(dictService.getDictNameByCode(SecurityEventDict.SYS_SEX, staffInfo.getStaffGender())); }); return list; } catch (DataAccessException ex) { @@ -318,6 +323,115 @@ return ResponseData.success(url); } + @Override + public int saveOrUpdateStaffInfoBatch(List personList) { + return staffInfoMapper.saveOrUpdateStaffInfoBatch(personList); + } + + @Override + public List getStaffCardList(String staffCode) { + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(1000); + request.setPersonIds(staffCode); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + List list = new ArrayList<>(); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + CardListResponse cardListResponse = new CardListResponse(); + cardListResponse.setCardNum(jsonObject.getString("cardNo")); + //卡状态 + Integer useStatus = jsonObject.getInteger("useStatus"); + if(!Objects.isNull(useStatus) && 1 == useStatus){ + cardListResponse.setStatusName("正常"); + }else if(!Objects.isNull(useStatus) && 2 == useStatus){ + cardListResponse.setStatusName("挂失"); + } + //卡起始时间 + String startDateISO = jsonObject.getString("startDate"); + DateTime startDateParse = DateUtil.parse(startDateISO); + String startTime = DateUtil.formatDateTime(startDateParse); + cardListResponse.setStartTime(startTime); + //卡终止时间 + String endDateISO = jsonObject.getString("endDate"); + DateTime endDateParse = DateUtil.parse(endDateISO); + String endTime = DateUtil.formatDateTime(endDateParse); + cardListResponse.setEndTime(endTime); + //生物特征(只有人脸) + Integer isBindFace = jsonObject.getInteger("isBindFace"); + if(!Objects.isNull(useStatus) && 1 == isBindFace){ + cardListResponse.setFeatures("人脸"); + } + //挂失时间 + String lossDateISO = jsonObject.getString("lossDate"); + DateTime lossDateParse = DateUtil.parse(lossDateISO); + String cancelTime = DateUtil.formatDateTime(lossDateParse); + cardListResponse.setCancelTime(cancelTime); + //解挂时间 + String unlossDateISO = jsonObject.getString("unlossDate"); + DateTime unlossDateParse = DateUtil.parse(unlossDateISO); + String unhookTime = DateUtil.formatDateTime(unlossDateParse); + cardListResponse.setUnhookTime(unhookTime); + + list.add(cardListResponse); + }); + return list; + } + + + private void getFiledFromHik(StaffInfo staffInfo) { + String staffCode = staffInfo.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInfo.setDeptName(replace); + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInfo.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInfo.setPicture(pictureFromHik); + } + } + private String getPictureFromHik(String staffCode) { PersonInfoRequest request = new PersonInfoRequest(); List list = new ArrayList<>(); diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java index f91d7bd..2dd34b6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java @@ -21,11 +21,13 @@ import com.casic.missiles.modular.model.GroupDevice; import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.GroupDeviceService; +import com.casic.missiles.modular.system.model.Dict; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -179,7 +181,11 @@ if (CollectionUtil.isNotEmpty(list)) { return list; } - this.saveBatch(collect); + try{ + this.saveBatch(collect); + }catch (DuplicateKeyException exception){ + list.add("存在重复设备编号数据,请检查后重试"); + } } return list; } @@ -212,7 +218,8 @@ deviceRepairLogDTO.setCreateTime(v.get(0).getCreateTime()); list.add(deviceRepairLogDTO); }); - return list; + List collect = list.stream().sorted(Comparator.comparing(DeviceRepairLogDTO::getCreateTime).reversed()).collect(Collectors.toList()); + return collect; } @Override @@ -437,4 +444,29 @@ return deviceInfo; } + @Override + public List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoMapper.selectDeviceStatusGroupByStatusAndArea(deviceAreaRequest); +// if(CollectionUtils.isEmpty(deviceStatusDTOS)){ +// return new ArrayList<>(); +// } + for (DeviceStatusDTO deviceStatusDTO : deviceStatusDTOS) { + String dictNameByCode = dictService.getDictNameByCode(SecurityEventDict.DEVICE_STATUS, deviceStatusDTO.getStatus()); + deviceStatusDTO.setStatusName(dictNameByCode); + } + List collect1 = deviceStatusDTOS.stream().map(DeviceStatusDTO::getStatusName).collect(Collectors.toList()); + List dict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); + List collect = dict.stream().map(Dict::getName).collect(Collectors.toList()); + collect.forEach(name -> { + if(!collect1.contains(name)){ + DeviceStatusDTO deviceStatusDTO = new DeviceStatusDTO(); + deviceStatusDTO.setStatusName(name); + deviceStatusDTO.setQuantity(0); + deviceStatusDTOS.add(deviceStatusDTO); + } + }); + + return deviceStatusDTOS; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index d29d38d..0f02ccb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; @@ -49,6 +50,9 @@ @Autowired private CaseInfoMapper caseInfoMapper; + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -59,7 +63,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -86,7 +90,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -122,7 +126,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -160,7 +164,7 @@ String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); - // TODO: 2022/7/28 事件状态字典值选择 + //事件状态字典值选择 caseInfo.setStatus(dict.get(0).getCode()); //事件状态("未解决"的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); if(Objects.isNull(deviceInfo)){ @@ -176,7 +180,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -195,7 +199,7 @@ log.info("接收到监控点上线事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return; } - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); int upDevFlag = deviceInfoMapper.updateById(deviceInfo); @@ -217,7 +221,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -234,7 +238,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -250,7 +254,7 @@ public void deviceOnlineHandle(JSONObject event) { String srcIndex = event.getString("srcIndex"); DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -266,7 +270,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -286,6 +290,56 @@ } @Override + public void doorPassHandle(JSONObject event) { + JSONObject data = event.getJSONObject("data"); + Integer eventType = event.getInteger("eventType"); + String srcIndex = event.getString("srcIndex"); + String srcName = event.getString("srcName"); + String indexCode = event.getString("srcParentIndex"); + String staffCode = data.getString("ExtEventPersonNo"); + String cardNum = data.getString("ExtEventCardNo"); + Integer channelNum = data.getInteger("ExtAccessChannel"); + //进出类型,文档为1进0出,实际为1进2出,和字典一样 + Integer inoutType = data.getInteger("ExtEventInOut"); + String passWay = ""; + String description = ""; + //通过方式:卡、人脸、身份证 + //当合法卡比对通过且ExtEventIdentityCardInfo有值且ExtEventIdentityCardInfo中的IdNum有值为身份证通过 + if(SecurityEventType.CARD_COMPARE_PASS.equals(eventType)){ + JSONObject extEventIdentityCardInfo = data.getJSONObject("ExtEventIdentityCardInfo"); + if(!Objects.isNull(extEventIdentityCardInfo) && StringUtils.isNotEmpty(extEventIdentityCardInfo.getString("IdNum"))){ + passWay = "2";//身份证 + description = "身份证核对成功"; + }else{ + passWay = "0";//刷卡 + description = "刷卡比对成功"; + } + }else if(SecurityEventType.FACE_COMPARE_PASS.equals(eventType) || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + passWay = "1";//人脸 + description = "人脸比对成功"; + } + DateTime parse = DateUtil.parse(event.getString("happenTime")); + String happenTime = DateUtil.formatDateTime(parse); + + StaffInoutLog staffInoutLog = new StaffInoutLog(); + staffInoutLog.setStaffCode(staffCode); + staffInoutLog.setSrcIndex(srcIndex); + staffInoutLog.setIndexCode(indexCode); + staffInoutLog.setCardNum(cardNum); + staffInoutLog.setChannelNum(channelNum); + staffInoutLog.setWayName(srcName); + staffInoutLog.setInoutType(String.valueOf(inoutType)); + staffInoutLog.setPassWay(passWay); + staffInoutLog.setDescription(description); + staffInoutLog.setPassTime(happenTime); + if(inoutLogMapper.insert(staffInoutLog) <= 0){ + log.error("新增人员进出记录异常"); + return; + } + + } + + @Override @Transactional(rollbackFor = Exception.class) public void propertyAttendanceHandle(JSONObject event) { JSONObject data = event.getJSONObject("data"); @@ -300,7 +354,8 @@ String happenTime = DateUtil.formatDateTime(parse); //使用海康人脸唯一标识获取员工信息 Map columnMap = new HashMap<>(); - columnMap.put("staff_face_id", faceInfoCode); + //已验证,海康存储的faceInfoCode是staff_code + columnMap.put("staff_code", faceInfoCode); List staffInfos = staffInfoMapper.selectByMap(columnMap); StaffInfo staffInfo = staffInfos.get(0); //存储考勤信息 @@ -311,13 +366,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); info.setStaffCode(staffInfo.getStaffCode()); + info.setJobNo(staffInfo.getJobNo()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 物业人员字典值选择 + //物业人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(0).getCode()); info.setStaffTypeName(staffDict.get(0).getName()); @@ -358,13 +415,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); + info.setJobNo(staffInfo.getJobNo()); info.setStaffCode(staffInfo.getStaffCode()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 安保人员字典值选择 + //安保人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(1).getCode()); info.setStaffTypeName(staffDict.get(1).getName()); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 06f8bf3..b2e826f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java @@ -200,7 +200,7 @@ String hazardName = hazardLevelMapper.selectHazardNameByCode(key); monthAndWeekDTO.setLevelName(hazardName); if (year.equals(String.valueOf(DateUtil.thisYear()))) { - monthAndWeekDTO.setMonthQuantity(sum / DateUtil.thisMonth()); + monthAndWeekDTO.setMonthQuantity(sum / (DateUtil.thisMonth()+1)); strAvgMap.put(key, monthAndWeekDTO); } else { monthAndWeekDTO.setMonthQuantity(sum / 12); @@ -247,7 +247,9 @@ resultList.add(strAvgMap.get(key)); }); //输出顺序 - Collections.swap(resultList, 1, 2); + if(!CollectionUtils.isEmpty(resultList) && resultList.size() > 1){ + Collections.swap(resultList, 1, 2); + } return ResponseData.success(resultList); } @@ -768,6 +770,7 @@ map.put("date", date); resultList.add(map); } + resultList.sort(Comparator.comparing(o -> o.get("date").toString())); return ResponseData.success(resultList); } @@ -952,16 +955,16 @@ //2个map有一个为空 if (CollectionUtils.isEmpty(onDutyMap)) { if (!Objects.isNull(levelAssessMap.get(date))) { - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } if (CollectionUtils.isEmpty(levelAssessMap)) { if (!Objects.isNull(onDutyMap.get(date))) { - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } } else if (Objects.isNull(onDutyMap.get(date)) && Objects.isNull(levelAssessMap.get(date))) { @@ -971,18 +974,18 @@ } else if (Objects.isNull(onDutyMap.get(date)) && !Objects.isNull(levelAssessMap.get(date))) { //2、补全到岗率数据处理 //该日期onDutyMap空,levelAssessMap不空 - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //2、补全安保等级评估数据处理 //该日期levelAssessMap空,onDutyMap不空 - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (!Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //该日期2个都不空 BigDecimal onDutyDecimal = onDutyMap.get(date); BigDecimal levelAssessDecimal = levelAssessMap.get(date); - map.put("score", onDutyDecimal.add(levelAssessDecimal).stripTrailingZeros().toPlainString()); + map.put("score", onDutyDecimal.add(levelAssessDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } }); @@ -1167,6 +1170,13 @@ return ResponseData.success(resultList); } + @Override + public Object highFrequency() { + //事件表近一个月按description分组 + List list = caseInfoMapper.getCountForRank(); + return ResponseData.success(list); + } + private List> getForResult(List weekCaseDTOS, List weekCaseKeyAreaDTOS, List caseInfos, HashMap weekCaseMap, HashMap caseScoreMap, HashMap keyAreaScoreMap, HashMap assessScoreMap, @@ -1255,7 +1265,7 @@ BigDecimal caseScore = preCaseScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("case"))); BigDecimal keyAreaScore = preKeyAreaScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("keyArea"))); BigDecimal responseAssessScore = preAssessScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("responseAssess"))); - map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).stripTrailingZeros().toPlainString()); + map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); }); return resultList; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java index 97ed308..c39a5fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.modular.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,6 +10,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.dao.StaffInfoMapper; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.*; import com.casic.missiles.modular.enums.HikUri; @@ -59,7 +62,8 @@ List pageList = staffInfoMapper.getStaffInfoListPage(page, staffInfoRequest); pageList.stream().forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); - staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); +// staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); + getFiledFromHik(staffInfo); }); return pageList; } catch (DataAccessException ex) { @@ -280,6 +284,7 @@ List list = staffInfoMapper.getStaffInfoList(staffInfoRequest); list.forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); + staffInfo.setStaffGenderName(dictService.getDictNameByCode(SecurityEventDict.SYS_SEX, staffInfo.getStaffGender())); }); return list; } catch (DataAccessException ex) { @@ -318,6 +323,115 @@ return ResponseData.success(url); } + @Override + public int saveOrUpdateStaffInfoBatch(List personList) { + return staffInfoMapper.saveOrUpdateStaffInfoBatch(personList); + } + + @Override + public List getStaffCardList(String staffCode) { + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(1000); + request.setPersonIds(staffCode); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + List list = new ArrayList<>(); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + CardListResponse cardListResponse = new CardListResponse(); + cardListResponse.setCardNum(jsonObject.getString("cardNo")); + //卡状态 + Integer useStatus = jsonObject.getInteger("useStatus"); + if(!Objects.isNull(useStatus) && 1 == useStatus){ + cardListResponse.setStatusName("正常"); + }else if(!Objects.isNull(useStatus) && 2 == useStatus){ + cardListResponse.setStatusName("挂失"); + } + //卡起始时间 + String startDateISO = jsonObject.getString("startDate"); + DateTime startDateParse = DateUtil.parse(startDateISO); + String startTime = DateUtil.formatDateTime(startDateParse); + cardListResponse.setStartTime(startTime); + //卡终止时间 + String endDateISO = jsonObject.getString("endDate"); + DateTime endDateParse = DateUtil.parse(endDateISO); + String endTime = DateUtil.formatDateTime(endDateParse); + cardListResponse.setEndTime(endTime); + //生物特征(只有人脸) + Integer isBindFace = jsonObject.getInteger("isBindFace"); + if(!Objects.isNull(useStatus) && 1 == isBindFace){ + cardListResponse.setFeatures("人脸"); + } + //挂失时间 + String lossDateISO = jsonObject.getString("lossDate"); + DateTime lossDateParse = DateUtil.parse(lossDateISO); + String cancelTime = DateUtil.formatDateTime(lossDateParse); + cardListResponse.setCancelTime(cancelTime); + //解挂时间 + String unlossDateISO = jsonObject.getString("unlossDate"); + DateTime unlossDateParse = DateUtil.parse(unlossDateISO); + String unhookTime = DateUtil.formatDateTime(unlossDateParse); + cardListResponse.setUnhookTime(unhookTime); + + list.add(cardListResponse); + }); + return list; + } + + + private void getFiledFromHik(StaffInfo staffInfo) { + String staffCode = staffInfo.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInfo.setDeptName(replace); + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInfo.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInfo.setPicture(pictureFromHik); + } + } + private String getPictureFromHik(String staffCode) { PersonInfoRequest request = new PersonInfoRequest(); List list = new ArrayList<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java new file mode 100644 index 0000000..f3687cd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.modular.dao.StaffInoutLogMapper; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.dto.hik.PersonInfoRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 18:38 + */ +@Slf4j +@Service +public class StaffInoutLogServiceImpl extends ServiceImpl implements StaffInoutLogService { + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Resource + private AbstractDictService dictService; + + @Override + public List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest) { + try { +// todo员工编号和员工列表一致,进出记录中空数据问题,进出方式问题 + List pageList = inoutLogMapper.selectStaffInoutLogList(page, inoutLogRequest); + pageList.stream().forEach(inoutLog -> { + inoutLog.setPassWayName(dictService.getDictNameByCode(SecurityEventDict.PASS_WAY, inoutLog.getPassWay())); + inoutLog.setInoutTypeName(dictService.getDictNameByCode(SecurityEventDict.INOUT_TYPE, inoutLog.getInoutType())); + inoutLog.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getPosition())); + //doorArea为前端文档参数,先取position + inoutLog.setDoorArea(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getDoorArea())); + inoutLog.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, inoutLog.getArea())); + //获取海康组织名,根据组织编号获取 + getFiledFromHik(inoutLog); + }); + return pageList; + } catch (DataAccessException ex) { + log.error("员工: 查询分页出现异常,异常:{}", ex); + } + return null; + + } + + private void getFiledFromHik(StaffInoutLog staffInoutLog) { + String staffCode = staffInoutLog.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInoutLog.setDeptName(replace); + + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInoutLog.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInoutLog.setPicture(pictureFromHik); + } + } +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java index f91d7bd..2dd34b6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java @@ -21,11 +21,13 @@ import com.casic.missiles.modular.model.GroupDevice; import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.GroupDeviceService; +import com.casic.missiles.modular.system.model.Dict; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -179,7 +181,11 @@ if (CollectionUtil.isNotEmpty(list)) { return list; } - this.saveBatch(collect); + try{ + this.saveBatch(collect); + }catch (DuplicateKeyException exception){ + list.add("存在重复设备编号数据,请检查后重试"); + } } return list; } @@ -212,7 +218,8 @@ deviceRepairLogDTO.setCreateTime(v.get(0).getCreateTime()); list.add(deviceRepairLogDTO); }); - return list; + List collect = list.stream().sorted(Comparator.comparing(DeviceRepairLogDTO::getCreateTime).reversed()).collect(Collectors.toList()); + return collect; } @Override @@ -437,4 +444,29 @@ return deviceInfo; } + @Override + public List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoMapper.selectDeviceStatusGroupByStatusAndArea(deviceAreaRequest); +// if(CollectionUtils.isEmpty(deviceStatusDTOS)){ +// return new ArrayList<>(); +// } + for (DeviceStatusDTO deviceStatusDTO : deviceStatusDTOS) { + String dictNameByCode = dictService.getDictNameByCode(SecurityEventDict.DEVICE_STATUS, deviceStatusDTO.getStatus()); + deviceStatusDTO.setStatusName(dictNameByCode); + } + List collect1 = deviceStatusDTOS.stream().map(DeviceStatusDTO::getStatusName).collect(Collectors.toList()); + List dict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); + List collect = dict.stream().map(Dict::getName).collect(Collectors.toList()); + collect.forEach(name -> { + if(!collect1.contains(name)){ + DeviceStatusDTO deviceStatusDTO = new DeviceStatusDTO(); + deviceStatusDTO.setStatusName(name); + deviceStatusDTO.setQuantity(0); + deviceStatusDTOS.add(deviceStatusDTO); + } + }); + + return deviceStatusDTOS; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index d29d38d..0f02ccb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; @@ -49,6 +50,9 @@ @Autowired private CaseInfoMapper caseInfoMapper; + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -59,7 +63,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -86,7 +90,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -122,7 +126,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -160,7 +164,7 @@ String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); - // TODO: 2022/7/28 事件状态字典值选择 + //事件状态字典值选择 caseInfo.setStatus(dict.get(0).getCode()); //事件状态("未解决"的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); if(Objects.isNull(deviceInfo)){ @@ -176,7 +180,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -195,7 +199,7 @@ log.info("接收到监控点上线事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return; } - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); int upDevFlag = deviceInfoMapper.updateById(deviceInfo); @@ -217,7 +221,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -234,7 +238,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -250,7 +254,7 @@ public void deviceOnlineHandle(JSONObject event) { String srcIndex = event.getString("srcIndex"); DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -266,7 +270,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -286,6 +290,56 @@ } @Override + public void doorPassHandle(JSONObject event) { + JSONObject data = event.getJSONObject("data"); + Integer eventType = event.getInteger("eventType"); + String srcIndex = event.getString("srcIndex"); + String srcName = event.getString("srcName"); + String indexCode = event.getString("srcParentIndex"); + String staffCode = data.getString("ExtEventPersonNo"); + String cardNum = data.getString("ExtEventCardNo"); + Integer channelNum = data.getInteger("ExtAccessChannel"); + //进出类型,文档为1进0出,实际为1进2出,和字典一样 + Integer inoutType = data.getInteger("ExtEventInOut"); + String passWay = ""; + String description = ""; + //通过方式:卡、人脸、身份证 + //当合法卡比对通过且ExtEventIdentityCardInfo有值且ExtEventIdentityCardInfo中的IdNum有值为身份证通过 + if(SecurityEventType.CARD_COMPARE_PASS.equals(eventType)){ + JSONObject extEventIdentityCardInfo = data.getJSONObject("ExtEventIdentityCardInfo"); + if(!Objects.isNull(extEventIdentityCardInfo) && StringUtils.isNotEmpty(extEventIdentityCardInfo.getString("IdNum"))){ + passWay = "2";//身份证 + description = "身份证核对成功"; + }else{ + passWay = "0";//刷卡 + description = "刷卡比对成功"; + } + }else if(SecurityEventType.FACE_COMPARE_PASS.equals(eventType) || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + passWay = "1";//人脸 + description = "人脸比对成功"; + } + DateTime parse = DateUtil.parse(event.getString("happenTime")); + String happenTime = DateUtil.formatDateTime(parse); + + StaffInoutLog staffInoutLog = new StaffInoutLog(); + staffInoutLog.setStaffCode(staffCode); + staffInoutLog.setSrcIndex(srcIndex); + staffInoutLog.setIndexCode(indexCode); + staffInoutLog.setCardNum(cardNum); + staffInoutLog.setChannelNum(channelNum); + staffInoutLog.setWayName(srcName); + staffInoutLog.setInoutType(String.valueOf(inoutType)); + staffInoutLog.setPassWay(passWay); + staffInoutLog.setDescription(description); + staffInoutLog.setPassTime(happenTime); + if(inoutLogMapper.insert(staffInoutLog) <= 0){ + log.error("新增人员进出记录异常"); + return; + } + + } + + @Override @Transactional(rollbackFor = Exception.class) public void propertyAttendanceHandle(JSONObject event) { JSONObject data = event.getJSONObject("data"); @@ -300,7 +354,8 @@ String happenTime = DateUtil.formatDateTime(parse); //使用海康人脸唯一标识获取员工信息 Map columnMap = new HashMap<>(); - columnMap.put("staff_face_id", faceInfoCode); + //已验证,海康存储的faceInfoCode是staff_code + columnMap.put("staff_code", faceInfoCode); List staffInfos = staffInfoMapper.selectByMap(columnMap); StaffInfo staffInfo = staffInfos.get(0); //存储考勤信息 @@ -311,13 +366,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); info.setStaffCode(staffInfo.getStaffCode()); + info.setJobNo(staffInfo.getJobNo()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 物业人员字典值选择 + //物业人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(0).getCode()); info.setStaffTypeName(staffDict.get(0).getName()); @@ -358,13 +415,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); + info.setJobNo(staffInfo.getJobNo()); info.setStaffCode(staffInfo.getStaffCode()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 安保人员字典值选择 + //安保人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(1).getCode()); info.setStaffTypeName(staffDict.get(1).getName()); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 06f8bf3..b2e826f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java @@ -200,7 +200,7 @@ String hazardName = hazardLevelMapper.selectHazardNameByCode(key); monthAndWeekDTO.setLevelName(hazardName); if (year.equals(String.valueOf(DateUtil.thisYear()))) { - monthAndWeekDTO.setMonthQuantity(sum / DateUtil.thisMonth()); + monthAndWeekDTO.setMonthQuantity(sum / (DateUtil.thisMonth()+1)); strAvgMap.put(key, monthAndWeekDTO); } else { monthAndWeekDTO.setMonthQuantity(sum / 12); @@ -247,7 +247,9 @@ resultList.add(strAvgMap.get(key)); }); //输出顺序 - Collections.swap(resultList, 1, 2); + if(!CollectionUtils.isEmpty(resultList) && resultList.size() > 1){ + Collections.swap(resultList, 1, 2); + } return ResponseData.success(resultList); } @@ -768,6 +770,7 @@ map.put("date", date); resultList.add(map); } + resultList.sort(Comparator.comparing(o -> o.get("date").toString())); return ResponseData.success(resultList); } @@ -952,16 +955,16 @@ //2个map有一个为空 if (CollectionUtils.isEmpty(onDutyMap)) { if (!Objects.isNull(levelAssessMap.get(date))) { - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } if (CollectionUtils.isEmpty(levelAssessMap)) { if (!Objects.isNull(onDutyMap.get(date))) { - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } } else if (Objects.isNull(onDutyMap.get(date)) && Objects.isNull(levelAssessMap.get(date))) { @@ -971,18 +974,18 @@ } else if (Objects.isNull(onDutyMap.get(date)) && !Objects.isNull(levelAssessMap.get(date))) { //2、补全到岗率数据处理 //该日期onDutyMap空,levelAssessMap不空 - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //2、补全安保等级评估数据处理 //该日期levelAssessMap空,onDutyMap不空 - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (!Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //该日期2个都不空 BigDecimal onDutyDecimal = onDutyMap.get(date); BigDecimal levelAssessDecimal = levelAssessMap.get(date); - map.put("score", onDutyDecimal.add(levelAssessDecimal).stripTrailingZeros().toPlainString()); + map.put("score", onDutyDecimal.add(levelAssessDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } }); @@ -1167,6 +1170,13 @@ return ResponseData.success(resultList); } + @Override + public Object highFrequency() { + //事件表近一个月按description分组 + List list = caseInfoMapper.getCountForRank(); + return ResponseData.success(list); + } + private List> getForResult(List weekCaseDTOS, List weekCaseKeyAreaDTOS, List caseInfos, HashMap weekCaseMap, HashMap caseScoreMap, HashMap keyAreaScoreMap, HashMap assessScoreMap, @@ -1255,7 +1265,7 @@ BigDecimal caseScore = preCaseScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("case"))); BigDecimal keyAreaScore = preKeyAreaScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("keyArea"))); BigDecimal responseAssessScore = preAssessScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("responseAssess"))); - map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).stripTrailingZeros().toPlainString()); + map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); }); return resultList; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java index 97ed308..c39a5fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.modular.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,6 +10,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.dao.StaffInfoMapper; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.*; import com.casic.missiles.modular.enums.HikUri; @@ -59,7 +62,8 @@ List pageList = staffInfoMapper.getStaffInfoListPage(page, staffInfoRequest); pageList.stream().forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); - staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); +// staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); + getFiledFromHik(staffInfo); }); return pageList; } catch (DataAccessException ex) { @@ -280,6 +284,7 @@ List list = staffInfoMapper.getStaffInfoList(staffInfoRequest); list.forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); + staffInfo.setStaffGenderName(dictService.getDictNameByCode(SecurityEventDict.SYS_SEX, staffInfo.getStaffGender())); }); return list; } catch (DataAccessException ex) { @@ -318,6 +323,115 @@ return ResponseData.success(url); } + @Override + public int saveOrUpdateStaffInfoBatch(List personList) { + return staffInfoMapper.saveOrUpdateStaffInfoBatch(personList); + } + + @Override + public List getStaffCardList(String staffCode) { + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(1000); + request.setPersonIds(staffCode); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + List list = new ArrayList<>(); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + CardListResponse cardListResponse = new CardListResponse(); + cardListResponse.setCardNum(jsonObject.getString("cardNo")); + //卡状态 + Integer useStatus = jsonObject.getInteger("useStatus"); + if(!Objects.isNull(useStatus) && 1 == useStatus){ + cardListResponse.setStatusName("正常"); + }else if(!Objects.isNull(useStatus) && 2 == useStatus){ + cardListResponse.setStatusName("挂失"); + } + //卡起始时间 + String startDateISO = jsonObject.getString("startDate"); + DateTime startDateParse = DateUtil.parse(startDateISO); + String startTime = DateUtil.formatDateTime(startDateParse); + cardListResponse.setStartTime(startTime); + //卡终止时间 + String endDateISO = jsonObject.getString("endDate"); + DateTime endDateParse = DateUtil.parse(endDateISO); + String endTime = DateUtil.formatDateTime(endDateParse); + cardListResponse.setEndTime(endTime); + //生物特征(只有人脸) + Integer isBindFace = jsonObject.getInteger("isBindFace"); + if(!Objects.isNull(useStatus) && 1 == isBindFace){ + cardListResponse.setFeatures("人脸"); + } + //挂失时间 + String lossDateISO = jsonObject.getString("lossDate"); + DateTime lossDateParse = DateUtil.parse(lossDateISO); + String cancelTime = DateUtil.formatDateTime(lossDateParse); + cardListResponse.setCancelTime(cancelTime); + //解挂时间 + String unlossDateISO = jsonObject.getString("unlossDate"); + DateTime unlossDateParse = DateUtil.parse(unlossDateISO); + String unhookTime = DateUtil.formatDateTime(unlossDateParse); + cardListResponse.setUnhookTime(unhookTime); + + list.add(cardListResponse); + }); + return list; + } + + + private void getFiledFromHik(StaffInfo staffInfo) { + String staffCode = staffInfo.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInfo.setDeptName(replace); + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInfo.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInfo.setPicture(pictureFromHik); + } + } + private String getPictureFromHik(String staffCode) { PersonInfoRequest request = new PersonInfoRequest(); List list = new ArrayList<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java new file mode 100644 index 0000000..f3687cd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.modular.dao.StaffInoutLogMapper; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.dto.hik.PersonInfoRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 18:38 + */ +@Slf4j +@Service +public class StaffInoutLogServiceImpl extends ServiceImpl implements StaffInoutLogService { + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Resource + private AbstractDictService dictService; + + @Override + public List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest) { + try { +// todo员工编号和员工列表一致,进出记录中空数据问题,进出方式问题 + List pageList = inoutLogMapper.selectStaffInoutLogList(page, inoutLogRequest); + pageList.stream().forEach(inoutLog -> { + inoutLog.setPassWayName(dictService.getDictNameByCode(SecurityEventDict.PASS_WAY, inoutLog.getPassWay())); + inoutLog.setInoutTypeName(dictService.getDictNameByCode(SecurityEventDict.INOUT_TYPE, inoutLog.getInoutType())); + inoutLog.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getPosition())); + //doorArea为前端文档参数,先取position + inoutLog.setDoorArea(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getDoorArea())); + inoutLog.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, inoutLog.getArea())); + //获取海康组织名,根据组织编号获取 + getFiledFromHik(inoutLog); + }); + return pageList; + } catch (DataAccessException ex) { + log.error("员工: 查询分页出现异常,异常:{}", ex); + } + return null; + + } + + private void getFiledFromHik(StaffInoutLog staffInoutLog) { + String staffCode = staffInoutLog.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInoutLog.setDeptName(replace); + + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInoutLog.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInoutLog.setPicture(pictureFromHik); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java index f6756ce..4b8e0b4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java @@ -7,20 +7,24 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.config.PositionPrivilegeInitCache; import com.casic.missiles.modular.dao.VisitorApplyMapper; import com.casic.missiles.modular.dto.VisitorApplyRequest; import com.casic.missiles.modular.dto.hik.AppointmentFreeRegisterRequest; import com.casic.missiles.modular.dto.hik.VisitorInfo; +import com.casic.missiles.modular.dto.hik.VisitorPermissionSet; import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.CaseInfo; import com.casic.missiles.modular.model.VisitorApply; import com.casic.missiles.modular.service.VisitorApplyService; import com.casic.missiles.modular.util.HikUtil; +import com.casic.missiles.modular.util.NumberGeneratorUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -48,12 +52,12 @@ public class VisitorApplyServiceImpl extends ServiceImpl implements VisitorApplyService { @Autowired private VisitorApplyMapper visitorApplyMapper; - @Resource private AbstractDictService dictService; - @Resource private Validator validator; + @Resource + private PositionPrivilegeInitCache positionPrivilegeInitCache; @Override public List visitorApplyListPage(Page page, VisitorApplyRequest visitorApplyRequest) { @@ -62,6 +66,8 @@ pageList.forEach(visitorApply ->{ visitorApply.setVisitReason(dictService.getDictNameByCode(SecurityEventDict.VISIT_REASON, visitorApply.getVisitReason())); visitorApply.setVisitPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorApply.getVisitPosition())); + visitorApply.setStatusName(dictService.getDictNameByCode(SecurityEventDict.APPLICATION_STATUS, visitorApply.getStatus())); + visitorApply.setApplicationTypeName(dictService.getDictNameByCode(SecurityEventDict.APPLICATION_TYPE, visitorApply.getApplicationType())); }); return pageList; } catch (DataAccessException ex) { @@ -73,6 +79,16 @@ @Override @Transactional(rollbackFor = Exception.class) public Object addVisitorApply(VisitorApply visitorApply) { + //单号判重 + if(StringUtils.isNotEmpty(visitorApply.getListCode())){ + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("list_code", visitorApply.getListCode()); + List applyList = visitorApplyMapper.selectList(wrapper); + if(!CollectionUtils.isEmpty(applyList)){ + return ResponseData.error("申请编号重复,请重新添加"); + } + } + //无需判重,可预约多个时间段 AppointmentFreeRegisterRequest appointmentFreeRegisterRequest = new AppointmentFreeRegisterRequest(); //将时间转换为海康ISO8601格式 @@ -86,6 +102,9 @@ appointmentFreeRegisterRequest.setVisitStartTime(inTimeISODate); appointmentFreeRegisterRequest.setVisitEndTime(outTimeISODate); appointmentFreeRegisterRequest.setVisitPurpose(visitorApply.getVisitReason()); + VisitorPermissionSet visitorPermissionSet = new VisitorPermissionSet(); + visitorPermissionSet.setPrivilegeGroupIds(positionPrivilegeInitCache.getPositionPrivilegeMap(visitorApply.getVisitReason())); + appointmentFreeRegisterRequest.setVisitorPermissionSet(visitorPermissionSet); VisitorInfo visitorInfo = new VisitorInfo(); visitorInfo.setVisitorName(visitorApply.getVisitorName()); @@ -155,7 +174,10 @@ if(StringUtils.isNotEmpty(visitorApply.getPicUri())){ visitorInfo.setVisitorPhoto(visitorApply.getPicUri()); } - appointmentFreeRegisterRequest.setVisitorInfo(visitorInfo); +// appointmentFreeRegisterRequest.setVisitorInfo(visitorInfo); + List visitorInfoList = new ArrayList<>(); + visitorInfoList.add(visitorInfo); + appointmentFreeRegisterRequest.setVisitorInfoList(visitorInfoList); String body = JSONObject.toJSONString(appointmentFreeRegisterRequest); String resultStr = HikUtil.hikApi(HikUri.APPOINTMENT_UPDATE, body); @@ -216,7 +238,14 @@ log.error("访客列表:{},未在海康进行预约成功,无法取消预约", appointRecordIds); return 0; } - return deleteBatchVisitorApply(ids); + return visitorApplyMapper.deleteBatchIds(ids); + } + + @Override + public String visitorApplyListCode() { + String maxNo = visitorApplyMapper.selectListCode(); + String messageId = NumberGeneratorUtil.getContactNo(Long.parseLong(maxNo)); + return messageId; } @Override diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java index f91d7bd..2dd34b6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java @@ -21,11 +21,13 @@ import com.casic.missiles.modular.model.GroupDevice; import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.GroupDeviceService; +import com.casic.missiles.modular.system.model.Dict; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -179,7 +181,11 @@ if (CollectionUtil.isNotEmpty(list)) { return list; } - this.saveBatch(collect); + try{ + this.saveBatch(collect); + }catch (DuplicateKeyException exception){ + list.add("存在重复设备编号数据,请检查后重试"); + } } return list; } @@ -212,7 +218,8 @@ deviceRepairLogDTO.setCreateTime(v.get(0).getCreateTime()); list.add(deviceRepairLogDTO); }); - return list; + List collect = list.stream().sorted(Comparator.comparing(DeviceRepairLogDTO::getCreateTime).reversed()).collect(Collectors.toList()); + return collect; } @Override @@ -437,4 +444,29 @@ return deviceInfo; } + @Override + public List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoMapper.selectDeviceStatusGroupByStatusAndArea(deviceAreaRequest); +// if(CollectionUtils.isEmpty(deviceStatusDTOS)){ +// return new ArrayList<>(); +// } + for (DeviceStatusDTO deviceStatusDTO : deviceStatusDTOS) { + String dictNameByCode = dictService.getDictNameByCode(SecurityEventDict.DEVICE_STATUS, deviceStatusDTO.getStatus()); + deviceStatusDTO.setStatusName(dictNameByCode); + } + List collect1 = deviceStatusDTOS.stream().map(DeviceStatusDTO::getStatusName).collect(Collectors.toList()); + List dict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); + List collect = dict.stream().map(Dict::getName).collect(Collectors.toList()); + collect.forEach(name -> { + if(!collect1.contains(name)){ + DeviceStatusDTO deviceStatusDTO = new DeviceStatusDTO(); + deviceStatusDTO.setStatusName(name); + deviceStatusDTO.setQuantity(0); + deviceStatusDTOS.add(deviceStatusDTO); + } + }); + + return deviceStatusDTOS; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index d29d38d..0f02ccb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; @@ -49,6 +50,9 @@ @Autowired private CaseInfoMapper caseInfoMapper; + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -59,7 +63,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -86,7 +90,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -122,7 +126,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -160,7 +164,7 @@ String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); - // TODO: 2022/7/28 事件状态字典值选择 + //事件状态字典值选择 caseInfo.setStatus(dict.get(0).getCode()); //事件状态("未解决"的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); if(Objects.isNull(deviceInfo)){ @@ -176,7 +180,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -195,7 +199,7 @@ log.info("接收到监控点上线事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return; } - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); int upDevFlag = deviceInfoMapper.updateById(deviceInfo); @@ -217,7 +221,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -234,7 +238,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -250,7 +254,7 @@ public void deviceOnlineHandle(JSONObject event) { String srcIndex = event.getString("srcIndex"); DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -266,7 +270,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -286,6 +290,56 @@ } @Override + public void doorPassHandle(JSONObject event) { + JSONObject data = event.getJSONObject("data"); + Integer eventType = event.getInteger("eventType"); + String srcIndex = event.getString("srcIndex"); + String srcName = event.getString("srcName"); + String indexCode = event.getString("srcParentIndex"); + String staffCode = data.getString("ExtEventPersonNo"); + String cardNum = data.getString("ExtEventCardNo"); + Integer channelNum = data.getInteger("ExtAccessChannel"); + //进出类型,文档为1进0出,实际为1进2出,和字典一样 + Integer inoutType = data.getInteger("ExtEventInOut"); + String passWay = ""; + String description = ""; + //通过方式:卡、人脸、身份证 + //当合法卡比对通过且ExtEventIdentityCardInfo有值且ExtEventIdentityCardInfo中的IdNum有值为身份证通过 + if(SecurityEventType.CARD_COMPARE_PASS.equals(eventType)){ + JSONObject extEventIdentityCardInfo = data.getJSONObject("ExtEventIdentityCardInfo"); + if(!Objects.isNull(extEventIdentityCardInfo) && StringUtils.isNotEmpty(extEventIdentityCardInfo.getString("IdNum"))){ + passWay = "2";//身份证 + description = "身份证核对成功"; + }else{ + passWay = "0";//刷卡 + description = "刷卡比对成功"; + } + }else if(SecurityEventType.FACE_COMPARE_PASS.equals(eventType) || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + passWay = "1";//人脸 + description = "人脸比对成功"; + } + DateTime parse = DateUtil.parse(event.getString("happenTime")); + String happenTime = DateUtil.formatDateTime(parse); + + StaffInoutLog staffInoutLog = new StaffInoutLog(); + staffInoutLog.setStaffCode(staffCode); + staffInoutLog.setSrcIndex(srcIndex); + staffInoutLog.setIndexCode(indexCode); + staffInoutLog.setCardNum(cardNum); + staffInoutLog.setChannelNum(channelNum); + staffInoutLog.setWayName(srcName); + staffInoutLog.setInoutType(String.valueOf(inoutType)); + staffInoutLog.setPassWay(passWay); + staffInoutLog.setDescription(description); + staffInoutLog.setPassTime(happenTime); + if(inoutLogMapper.insert(staffInoutLog) <= 0){ + log.error("新增人员进出记录异常"); + return; + } + + } + + @Override @Transactional(rollbackFor = Exception.class) public void propertyAttendanceHandle(JSONObject event) { JSONObject data = event.getJSONObject("data"); @@ -300,7 +354,8 @@ String happenTime = DateUtil.formatDateTime(parse); //使用海康人脸唯一标识获取员工信息 Map columnMap = new HashMap<>(); - columnMap.put("staff_face_id", faceInfoCode); + //已验证,海康存储的faceInfoCode是staff_code + columnMap.put("staff_code", faceInfoCode); List staffInfos = staffInfoMapper.selectByMap(columnMap); StaffInfo staffInfo = staffInfos.get(0); //存储考勤信息 @@ -311,13 +366,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); info.setStaffCode(staffInfo.getStaffCode()); + info.setJobNo(staffInfo.getJobNo()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 物业人员字典值选择 + //物业人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(0).getCode()); info.setStaffTypeName(staffDict.get(0).getName()); @@ -358,13 +415,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); + info.setJobNo(staffInfo.getJobNo()); info.setStaffCode(staffInfo.getStaffCode()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 安保人员字典值选择 + //安保人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(1).getCode()); info.setStaffTypeName(staffDict.get(1).getName()); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 06f8bf3..b2e826f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java @@ -200,7 +200,7 @@ String hazardName = hazardLevelMapper.selectHazardNameByCode(key); monthAndWeekDTO.setLevelName(hazardName); if (year.equals(String.valueOf(DateUtil.thisYear()))) { - monthAndWeekDTO.setMonthQuantity(sum / DateUtil.thisMonth()); + monthAndWeekDTO.setMonthQuantity(sum / (DateUtil.thisMonth()+1)); strAvgMap.put(key, monthAndWeekDTO); } else { monthAndWeekDTO.setMonthQuantity(sum / 12); @@ -247,7 +247,9 @@ resultList.add(strAvgMap.get(key)); }); //输出顺序 - Collections.swap(resultList, 1, 2); + if(!CollectionUtils.isEmpty(resultList) && resultList.size() > 1){ + Collections.swap(resultList, 1, 2); + } return ResponseData.success(resultList); } @@ -768,6 +770,7 @@ map.put("date", date); resultList.add(map); } + resultList.sort(Comparator.comparing(o -> o.get("date").toString())); return ResponseData.success(resultList); } @@ -952,16 +955,16 @@ //2个map有一个为空 if (CollectionUtils.isEmpty(onDutyMap)) { if (!Objects.isNull(levelAssessMap.get(date))) { - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } if (CollectionUtils.isEmpty(levelAssessMap)) { if (!Objects.isNull(onDutyMap.get(date))) { - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } } else if (Objects.isNull(onDutyMap.get(date)) && Objects.isNull(levelAssessMap.get(date))) { @@ -971,18 +974,18 @@ } else if (Objects.isNull(onDutyMap.get(date)) && !Objects.isNull(levelAssessMap.get(date))) { //2、补全到岗率数据处理 //该日期onDutyMap空,levelAssessMap不空 - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //2、补全安保等级评估数据处理 //该日期levelAssessMap空,onDutyMap不空 - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (!Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //该日期2个都不空 BigDecimal onDutyDecimal = onDutyMap.get(date); BigDecimal levelAssessDecimal = levelAssessMap.get(date); - map.put("score", onDutyDecimal.add(levelAssessDecimal).stripTrailingZeros().toPlainString()); + map.put("score", onDutyDecimal.add(levelAssessDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } }); @@ -1167,6 +1170,13 @@ return ResponseData.success(resultList); } + @Override + public Object highFrequency() { + //事件表近一个月按description分组 + List list = caseInfoMapper.getCountForRank(); + return ResponseData.success(list); + } + private List> getForResult(List weekCaseDTOS, List weekCaseKeyAreaDTOS, List caseInfos, HashMap weekCaseMap, HashMap caseScoreMap, HashMap keyAreaScoreMap, HashMap assessScoreMap, @@ -1255,7 +1265,7 @@ BigDecimal caseScore = preCaseScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("case"))); BigDecimal keyAreaScore = preKeyAreaScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("keyArea"))); BigDecimal responseAssessScore = preAssessScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("responseAssess"))); - map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).stripTrailingZeros().toPlainString()); + map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); }); return resultList; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java index 97ed308..c39a5fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.modular.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,6 +10,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.dao.StaffInfoMapper; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.*; import com.casic.missiles.modular.enums.HikUri; @@ -59,7 +62,8 @@ List pageList = staffInfoMapper.getStaffInfoListPage(page, staffInfoRequest); pageList.stream().forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); - staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); +// staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); + getFiledFromHik(staffInfo); }); return pageList; } catch (DataAccessException ex) { @@ -280,6 +284,7 @@ List list = staffInfoMapper.getStaffInfoList(staffInfoRequest); list.forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); + staffInfo.setStaffGenderName(dictService.getDictNameByCode(SecurityEventDict.SYS_SEX, staffInfo.getStaffGender())); }); return list; } catch (DataAccessException ex) { @@ -318,6 +323,115 @@ return ResponseData.success(url); } + @Override + public int saveOrUpdateStaffInfoBatch(List personList) { + return staffInfoMapper.saveOrUpdateStaffInfoBatch(personList); + } + + @Override + public List getStaffCardList(String staffCode) { + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(1000); + request.setPersonIds(staffCode); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + List list = new ArrayList<>(); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + CardListResponse cardListResponse = new CardListResponse(); + cardListResponse.setCardNum(jsonObject.getString("cardNo")); + //卡状态 + Integer useStatus = jsonObject.getInteger("useStatus"); + if(!Objects.isNull(useStatus) && 1 == useStatus){ + cardListResponse.setStatusName("正常"); + }else if(!Objects.isNull(useStatus) && 2 == useStatus){ + cardListResponse.setStatusName("挂失"); + } + //卡起始时间 + String startDateISO = jsonObject.getString("startDate"); + DateTime startDateParse = DateUtil.parse(startDateISO); + String startTime = DateUtil.formatDateTime(startDateParse); + cardListResponse.setStartTime(startTime); + //卡终止时间 + String endDateISO = jsonObject.getString("endDate"); + DateTime endDateParse = DateUtil.parse(endDateISO); + String endTime = DateUtil.formatDateTime(endDateParse); + cardListResponse.setEndTime(endTime); + //生物特征(只有人脸) + Integer isBindFace = jsonObject.getInteger("isBindFace"); + if(!Objects.isNull(useStatus) && 1 == isBindFace){ + cardListResponse.setFeatures("人脸"); + } + //挂失时间 + String lossDateISO = jsonObject.getString("lossDate"); + DateTime lossDateParse = DateUtil.parse(lossDateISO); + String cancelTime = DateUtil.formatDateTime(lossDateParse); + cardListResponse.setCancelTime(cancelTime); + //解挂时间 + String unlossDateISO = jsonObject.getString("unlossDate"); + DateTime unlossDateParse = DateUtil.parse(unlossDateISO); + String unhookTime = DateUtil.formatDateTime(unlossDateParse); + cardListResponse.setUnhookTime(unhookTime); + + list.add(cardListResponse); + }); + return list; + } + + + private void getFiledFromHik(StaffInfo staffInfo) { + String staffCode = staffInfo.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInfo.setDeptName(replace); + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInfo.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInfo.setPicture(pictureFromHik); + } + } + private String getPictureFromHik(String staffCode) { PersonInfoRequest request = new PersonInfoRequest(); List list = new ArrayList<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java new file mode 100644 index 0000000..f3687cd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.modular.dao.StaffInoutLogMapper; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.dto.hik.PersonInfoRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 18:38 + */ +@Slf4j +@Service +public class StaffInoutLogServiceImpl extends ServiceImpl implements StaffInoutLogService { + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Resource + private AbstractDictService dictService; + + @Override + public List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest) { + try { +// todo员工编号和员工列表一致,进出记录中空数据问题,进出方式问题 + List pageList = inoutLogMapper.selectStaffInoutLogList(page, inoutLogRequest); + pageList.stream().forEach(inoutLog -> { + inoutLog.setPassWayName(dictService.getDictNameByCode(SecurityEventDict.PASS_WAY, inoutLog.getPassWay())); + inoutLog.setInoutTypeName(dictService.getDictNameByCode(SecurityEventDict.INOUT_TYPE, inoutLog.getInoutType())); + inoutLog.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getPosition())); + //doorArea为前端文档参数,先取position + inoutLog.setDoorArea(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getDoorArea())); + inoutLog.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, inoutLog.getArea())); + //获取海康组织名,根据组织编号获取 + getFiledFromHik(inoutLog); + }); + return pageList; + } catch (DataAccessException ex) { + log.error("员工: 查询分页出现异常,异常:{}", ex); + } + return null; + + } + + private void getFiledFromHik(StaffInoutLog staffInoutLog) { + String staffCode = staffInoutLog.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInoutLog.setDeptName(replace); + + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInoutLog.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInoutLog.setPicture(pictureFromHik); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java index f6756ce..4b8e0b4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java @@ -7,20 +7,24 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.config.PositionPrivilegeInitCache; import com.casic.missiles.modular.dao.VisitorApplyMapper; import com.casic.missiles.modular.dto.VisitorApplyRequest; import com.casic.missiles.modular.dto.hik.AppointmentFreeRegisterRequest; import com.casic.missiles.modular.dto.hik.VisitorInfo; +import com.casic.missiles.modular.dto.hik.VisitorPermissionSet; import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.CaseInfo; import com.casic.missiles.modular.model.VisitorApply; import com.casic.missiles.modular.service.VisitorApplyService; import com.casic.missiles.modular.util.HikUtil; +import com.casic.missiles.modular.util.NumberGeneratorUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -48,12 +52,12 @@ public class VisitorApplyServiceImpl extends ServiceImpl implements VisitorApplyService { @Autowired private VisitorApplyMapper visitorApplyMapper; - @Resource private AbstractDictService dictService; - @Resource private Validator validator; + @Resource + private PositionPrivilegeInitCache positionPrivilegeInitCache; @Override public List visitorApplyListPage(Page page, VisitorApplyRequest visitorApplyRequest) { @@ -62,6 +66,8 @@ pageList.forEach(visitorApply ->{ visitorApply.setVisitReason(dictService.getDictNameByCode(SecurityEventDict.VISIT_REASON, visitorApply.getVisitReason())); visitorApply.setVisitPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorApply.getVisitPosition())); + visitorApply.setStatusName(dictService.getDictNameByCode(SecurityEventDict.APPLICATION_STATUS, visitorApply.getStatus())); + visitorApply.setApplicationTypeName(dictService.getDictNameByCode(SecurityEventDict.APPLICATION_TYPE, visitorApply.getApplicationType())); }); return pageList; } catch (DataAccessException ex) { @@ -73,6 +79,16 @@ @Override @Transactional(rollbackFor = Exception.class) public Object addVisitorApply(VisitorApply visitorApply) { + //单号判重 + if(StringUtils.isNotEmpty(visitorApply.getListCode())){ + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("list_code", visitorApply.getListCode()); + List applyList = visitorApplyMapper.selectList(wrapper); + if(!CollectionUtils.isEmpty(applyList)){ + return ResponseData.error("申请编号重复,请重新添加"); + } + } + //无需判重,可预约多个时间段 AppointmentFreeRegisterRequest appointmentFreeRegisterRequest = new AppointmentFreeRegisterRequest(); //将时间转换为海康ISO8601格式 @@ -86,6 +102,9 @@ appointmentFreeRegisterRequest.setVisitStartTime(inTimeISODate); appointmentFreeRegisterRequest.setVisitEndTime(outTimeISODate); appointmentFreeRegisterRequest.setVisitPurpose(visitorApply.getVisitReason()); + VisitorPermissionSet visitorPermissionSet = new VisitorPermissionSet(); + visitorPermissionSet.setPrivilegeGroupIds(positionPrivilegeInitCache.getPositionPrivilegeMap(visitorApply.getVisitReason())); + appointmentFreeRegisterRequest.setVisitorPermissionSet(visitorPermissionSet); VisitorInfo visitorInfo = new VisitorInfo(); visitorInfo.setVisitorName(visitorApply.getVisitorName()); @@ -155,7 +174,10 @@ if(StringUtils.isNotEmpty(visitorApply.getPicUri())){ visitorInfo.setVisitorPhoto(visitorApply.getPicUri()); } - appointmentFreeRegisterRequest.setVisitorInfo(visitorInfo); +// appointmentFreeRegisterRequest.setVisitorInfo(visitorInfo); + List visitorInfoList = new ArrayList<>(); + visitorInfoList.add(visitorInfo); + appointmentFreeRegisterRequest.setVisitorInfoList(visitorInfoList); String body = JSONObject.toJSONString(appointmentFreeRegisterRequest); String resultStr = HikUtil.hikApi(HikUri.APPOINTMENT_UPDATE, body); @@ -216,7 +238,14 @@ log.error("访客列表:{},未在海康进行预约成功,无法取消预约", appointRecordIds); return 0; } - return deleteBatchVisitorApply(ids); + return visitorApplyMapper.deleteBatchIds(ids); + } + + @Override + public String visitorApplyListCode() { + String maxNo = visitorApplyMapper.selectListCode(); + String messageId = NumberGeneratorUtil.getContactNo(Long.parseLong(maxNo)); + return messageId; } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java new file mode 100644 index 0000000..27bdead --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.util; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.concurrent.atomic.AtomicLong; + +/** + * @Description: 编号生成工具 + * @Author: wangpeng + * @Date: 2022/12/15 20:31 + */ +public class NumberGeneratorUtil { + /** + * 支持每天最多生成9999个序号 + */ + public static synchronized String getContactNo(long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + String datePrefix = format.format(new Date()); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是当前日期,从0计算后4位 + if (Long.valueOf(datePrefix) > Long.valueOf(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + // 组合 + builder.append(num); + return builder.toString(); + } +} diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java index f91d7bd..2dd34b6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java @@ -21,11 +21,13 @@ import com.casic.missiles.modular.model.GroupDevice; import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.GroupDeviceService; +import com.casic.missiles.modular.system.model.Dict; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -179,7 +181,11 @@ if (CollectionUtil.isNotEmpty(list)) { return list; } - this.saveBatch(collect); + try{ + this.saveBatch(collect); + }catch (DuplicateKeyException exception){ + list.add("存在重复设备编号数据,请检查后重试"); + } } return list; } @@ -212,7 +218,8 @@ deviceRepairLogDTO.setCreateTime(v.get(0).getCreateTime()); list.add(deviceRepairLogDTO); }); - return list; + List collect = list.stream().sorted(Comparator.comparing(DeviceRepairLogDTO::getCreateTime).reversed()).collect(Collectors.toList()); + return collect; } @Override @@ -437,4 +444,29 @@ return deviceInfo; } + @Override + public List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoMapper.selectDeviceStatusGroupByStatusAndArea(deviceAreaRequest); +// if(CollectionUtils.isEmpty(deviceStatusDTOS)){ +// return new ArrayList<>(); +// } + for (DeviceStatusDTO deviceStatusDTO : deviceStatusDTOS) { + String dictNameByCode = dictService.getDictNameByCode(SecurityEventDict.DEVICE_STATUS, deviceStatusDTO.getStatus()); + deviceStatusDTO.setStatusName(dictNameByCode); + } + List collect1 = deviceStatusDTOS.stream().map(DeviceStatusDTO::getStatusName).collect(Collectors.toList()); + List dict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); + List collect = dict.stream().map(Dict::getName).collect(Collectors.toList()); + collect.forEach(name -> { + if(!collect1.contains(name)){ + DeviceStatusDTO deviceStatusDTO = new DeviceStatusDTO(); + deviceStatusDTO.setStatusName(name); + deviceStatusDTO.setQuantity(0); + deviceStatusDTOS.add(deviceStatusDTO); + } + }); + + return deviceStatusDTOS; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index d29d38d..0f02ccb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; @@ -49,6 +50,9 @@ @Autowired private CaseInfoMapper caseInfoMapper; + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -59,7 +63,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -86,7 +90,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -122,7 +126,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -160,7 +164,7 @@ String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); - // TODO: 2022/7/28 事件状态字典值选择 + //事件状态字典值选择 caseInfo.setStatus(dict.get(0).getCode()); //事件状态("未解决"的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); if(Objects.isNull(deviceInfo)){ @@ -176,7 +180,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -195,7 +199,7 @@ log.info("接收到监控点上线事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return; } - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); int upDevFlag = deviceInfoMapper.updateById(deviceInfo); @@ -217,7 +221,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -234,7 +238,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -250,7 +254,7 @@ public void deviceOnlineHandle(JSONObject event) { String srcIndex = event.getString("srcIndex"); DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -266,7 +270,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -286,6 +290,56 @@ } @Override + public void doorPassHandle(JSONObject event) { + JSONObject data = event.getJSONObject("data"); + Integer eventType = event.getInteger("eventType"); + String srcIndex = event.getString("srcIndex"); + String srcName = event.getString("srcName"); + String indexCode = event.getString("srcParentIndex"); + String staffCode = data.getString("ExtEventPersonNo"); + String cardNum = data.getString("ExtEventCardNo"); + Integer channelNum = data.getInteger("ExtAccessChannel"); + //进出类型,文档为1进0出,实际为1进2出,和字典一样 + Integer inoutType = data.getInteger("ExtEventInOut"); + String passWay = ""; + String description = ""; + //通过方式:卡、人脸、身份证 + //当合法卡比对通过且ExtEventIdentityCardInfo有值且ExtEventIdentityCardInfo中的IdNum有值为身份证通过 + if(SecurityEventType.CARD_COMPARE_PASS.equals(eventType)){ + JSONObject extEventIdentityCardInfo = data.getJSONObject("ExtEventIdentityCardInfo"); + if(!Objects.isNull(extEventIdentityCardInfo) && StringUtils.isNotEmpty(extEventIdentityCardInfo.getString("IdNum"))){ + passWay = "2";//身份证 + description = "身份证核对成功"; + }else{ + passWay = "0";//刷卡 + description = "刷卡比对成功"; + } + }else if(SecurityEventType.FACE_COMPARE_PASS.equals(eventType) || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + passWay = "1";//人脸 + description = "人脸比对成功"; + } + DateTime parse = DateUtil.parse(event.getString("happenTime")); + String happenTime = DateUtil.formatDateTime(parse); + + StaffInoutLog staffInoutLog = new StaffInoutLog(); + staffInoutLog.setStaffCode(staffCode); + staffInoutLog.setSrcIndex(srcIndex); + staffInoutLog.setIndexCode(indexCode); + staffInoutLog.setCardNum(cardNum); + staffInoutLog.setChannelNum(channelNum); + staffInoutLog.setWayName(srcName); + staffInoutLog.setInoutType(String.valueOf(inoutType)); + staffInoutLog.setPassWay(passWay); + staffInoutLog.setDescription(description); + staffInoutLog.setPassTime(happenTime); + if(inoutLogMapper.insert(staffInoutLog) <= 0){ + log.error("新增人员进出记录异常"); + return; + } + + } + + @Override @Transactional(rollbackFor = Exception.class) public void propertyAttendanceHandle(JSONObject event) { JSONObject data = event.getJSONObject("data"); @@ -300,7 +354,8 @@ String happenTime = DateUtil.formatDateTime(parse); //使用海康人脸唯一标识获取员工信息 Map columnMap = new HashMap<>(); - columnMap.put("staff_face_id", faceInfoCode); + //已验证,海康存储的faceInfoCode是staff_code + columnMap.put("staff_code", faceInfoCode); List staffInfos = staffInfoMapper.selectByMap(columnMap); StaffInfo staffInfo = staffInfos.get(0); //存储考勤信息 @@ -311,13 +366,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); info.setStaffCode(staffInfo.getStaffCode()); + info.setJobNo(staffInfo.getJobNo()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 物业人员字典值选择 + //物业人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(0).getCode()); info.setStaffTypeName(staffDict.get(0).getName()); @@ -358,13 +415,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); + info.setJobNo(staffInfo.getJobNo()); info.setStaffCode(staffInfo.getStaffCode()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 安保人员字典值选择 + //安保人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(1).getCode()); info.setStaffTypeName(staffDict.get(1).getName()); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 06f8bf3..b2e826f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java @@ -200,7 +200,7 @@ String hazardName = hazardLevelMapper.selectHazardNameByCode(key); monthAndWeekDTO.setLevelName(hazardName); if (year.equals(String.valueOf(DateUtil.thisYear()))) { - monthAndWeekDTO.setMonthQuantity(sum / DateUtil.thisMonth()); + monthAndWeekDTO.setMonthQuantity(sum / (DateUtil.thisMonth()+1)); strAvgMap.put(key, monthAndWeekDTO); } else { monthAndWeekDTO.setMonthQuantity(sum / 12); @@ -247,7 +247,9 @@ resultList.add(strAvgMap.get(key)); }); //输出顺序 - Collections.swap(resultList, 1, 2); + if(!CollectionUtils.isEmpty(resultList) && resultList.size() > 1){ + Collections.swap(resultList, 1, 2); + } return ResponseData.success(resultList); } @@ -768,6 +770,7 @@ map.put("date", date); resultList.add(map); } + resultList.sort(Comparator.comparing(o -> o.get("date").toString())); return ResponseData.success(resultList); } @@ -952,16 +955,16 @@ //2个map有一个为空 if (CollectionUtils.isEmpty(onDutyMap)) { if (!Objects.isNull(levelAssessMap.get(date))) { - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } if (CollectionUtils.isEmpty(levelAssessMap)) { if (!Objects.isNull(onDutyMap.get(date))) { - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } } else if (Objects.isNull(onDutyMap.get(date)) && Objects.isNull(levelAssessMap.get(date))) { @@ -971,18 +974,18 @@ } else if (Objects.isNull(onDutyMap.get(date)) && !Objects.isNull(levelAssessMap.get(date))) { //2、补全到岗率数据处理 //该日期onDutyMap空,levelAssessMap不空 - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //2、补全安保等级评估数据处理 //该日期levelAssessMap空,onDutyMap不空 - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (!Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //该日期2个都不空 BigDecimal onDutyDecimal = onDutyMap.get(date); BigDecimal levelAssessDecimal = levelAssessMap.get(date); - map.put("score", onDutyDecimal.add(levelAssessDecimal).stripTrailingZeros().toPlainString()); + map.put("score", onDutyDecimal.add(levelAssessDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } }); @@ -1167,6 +1170,13 @@ return ResponseData.success(resultList); } + @Override + public Object highFrequency() { + //事件表近一个月按description分组 + List list = caseInfoMapper.getCountForRank(); + return ResponseData.success(list); + } + private List> getForResult(List weekCaseDTOS, List weekCaseKeyAreaDTOS, List caseInfos, HashMap weekCaseMap, HashMap caseScoreMap, HashMap keyAreaScoreMap, HashMap assessScoreMap, @@ -1255,7 +1265,7 @@ BigDecimal caseScore = preCaseScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("case"))); BigDecimal keyAreaScore = preKeyAreaScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("keyArea"))); BigDecimal responseAssessScore = preAssessScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("responseAssess"))); - map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).stripTrailingZeros().toPlainString()); + map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); }); return resultList; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java index 97ed308..c39a5fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.modular.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,6 +10,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.dao.StaffInfoMapper; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.*; import com.casic.missiles.modular.enums.HikUri; @@ -59,7 +62,8 @@ List pageList = staffInfoMapper.getStaffInfoListPage(page, staffInfoRequest); pageList.stream().forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); - staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); +// staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); + getFiledFromHik(staffInfo); }); return pageList; } catch (DataAccessException ex) { @@ -280,6 +284,7 @@ List list = staffInfoMapper.getStaffInfoList(staffInfoRequest); list.forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); + staffInfo.setStaffGenderName(dictService.getDictNameByCode(SecurityEventDict.SYS_SEX, staffInfo.getStaffGender())); }); return list; } catch (DataAccessException ex) { @@ -318,6 +323,115 @@ return ResponseData.success(url); } + @Override + public int saveOrUpdateStaffInfoBatch(List personList) { + return staffInfoMapper.saveOrUpdateStaffInfoBatch(personList); + } + + @Override + public List getStaffCardList(String staffCode) { + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(1000); + request.setPersonIds(staffCode); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + List list = new ArrayList<>(); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + CardListResponse cardListResponse = new CardListResponse(); + cardListResponse.setCardNum(jsonObject.getString("cardNo")); + //卡状态 + Integer useStatus = jsonObject.getInteger("useStatus"); + if(!Objects.isNull(useStatus) && 1 == useStatus){ + cardListResponse.setStatusName("正常"); + }else if(!Objects.isNull(useStatus) && 2 == useStatus){ + cardListResponse.setStatusName("挂失"); + } + //卡起始时间 + String startDateISO = jsonObject.getString("startDate"); + DateTime startDateParse = DateUtil.parse(startDateISO); + String startTime = DateUtil.formatDateTime(startDateParse); + cardListResponse.setStartTime(startTime); + //卡终止时间 + String endDateISO = jsonObject.getString("endDate"); + DateTime endDateParse = DateUtil.parse(endDateISO); + String endTime = DateUtil.formatDateTime(endDateParse); + cardListResponse.setEndTime(endTime); + //生物特征(只有人脸) + Integer isBindFace = jsonObject.getInteger("isBindFace"); + if(!Objects.isNull(useStatus) && 1 == isBindFace){ + cardListResponse.setFeatures("人脸"); + } + //挂失时间 + String lossDateISO = jsonObject.getString("lossDate"); + DateTime lossDateParse = DateUtil.parse(lossDateISO); + String cancelTime = DateUtil.formatDateTime(lossDateParse); + cardListResponse.setCancelTime(cancelTime); + //解挂时间 + String unlossDateISO = jsonObject.getString("unlossDate"); + DateTime unlossDateParse = DateUtil.parse(unlossDateISO); + String unhookTime = DateUtil.formatDateTime(unlossDateParse); + cardListResponse.setUnhookTime(unhookTime); + + list.add(cardListResponse); + }); + return list; + } + + + private void getFiledFromHik(StaffInfo staffInfo) { + String staffCode = staffInfo.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInfo.setDeptName(replace); + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInfo.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInfo.setPicture(pictureFromHik); + } + } + private String getPictureFromHik(String staffCode) { PersonInfoRequest request = new PersonInfoRequest(); List list = new ArrayList<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java new file mode 100644 index 0000000..f3687cd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.modular.dao.StaffInoutLogMapper; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.dto.hik.PersonInfoRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 18:38 + */ +@Slf4j +@Service +public class StaffInoutLogServiceImpl extends ServiceImpl implements StaffInoutLogService { + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Resource + private AbstractDictService dictService; + + @Override + public List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest) { + try { +// todo员工编号和员工列表一致,进出记录中空数据问题,进出方式问题 + List pageList = inoutLogMapper.selectStaffInoutLogList(page, inoutLogRequest); + pageList.stream().forEach(inoutLog -> { + inoutLog.setPassWayName(dictService.getDictNameByCode(SecurityEventDict.PASS_WAY, inoutLog.getPassWay())); + inoutLog.setInoutTypeName(dictService.getDictNameByCode(SecurityEventDict.INOUT_TYPE, inoutLog.getInoutType())); + inoutLog.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getPosition())); + //doorArea为前端文档参数,先取position + inoutLog.setDoorArea(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getDoorArea())); + inoutLog.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, inoutLog.getArea())); + //获取海康组织名,根据组织编号获取 + getFiledFromHik(inoutLog); + }); + return pageList; + } catch (DataAccessException ex) { + log.error("员工: 查询分页出现异常,异常:{}", ex); + } + return null; + + } + + private void getFiledFromHik(StaffInoutLog staffInoutLog) { + String staffCode = staffInoutLog.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInoutLog.setDeptName(replace); + + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInoutLog.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInoutLog.setPicture(pictureFromHik); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java index f6756ce..4b8e0b4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java @@ -7,20 +7,24 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.config.PositionPrivilegeInitCache; import com.casic.missiles.modular.dao.VisitorApplyMapper; import com.casic.missiles.modular.dto.VisitorApplyRequest; import com.casic.missiles.modular.dto.hik.AppointmentFreeRegisterRequest; import com.casic.missiles.modular.dto.hik.VisitorInfo; +import com.casic.missiles.modular.dto.hik.VisitorPermissionSet; import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.CaseInfo; import com.casic.missiles.modular.model.VisitorApply; import com.casic.missiles.modular.service.VisitorApplyService; import com.casic.missiles.modular.util.HikUtil; +import com.casic.missiles.modular.util.NumberGeneratorUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -48,12 +52,12 @@ public class VisitorApplyServiceImpl extends ServiceImpl implements VisitorApplyService { @Autowired private VisitorApplyMapper visitorApplyMapper; - @Resource private AbstractDictService dictService; - @Resource private Validator validator; + @Resource + private PositionPrivilegeInitCache positionPrivilegeInitCache; @Override public List visitorApplyListPage(Page page, VisitorApplyRequest visitorApplyRequest) { @@ -62,6 +66,8 @@ pageList.forEach(visitorApply ->{ visitorApply.setVisitReason(dictService.getDictNameByCode(SecurityEventDict.VISIT_REASON, visitorApply.getVisitReason())); visitorApply.setVisitPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorApply.getVisitPosition())); + visitorApply.setStatusName(dictService.getDictNameByCode(SecurityEventDict.APPLICATION_STATUS, visitorApply.getStatus())); + visitorApply.setApplicationTypeName(dictService.getDictNameByCode(SecurityEventDict.APPLICATION_TYPE, visitorApply.getApplicationType())); }); return pageList; } catch (DataAccessException ex) { @@ -73,6 +79,16 @@ @Override @Transactional(rollbackFor = Exception.class) public Object addVisitorApply(VisitorApply visitorApply) { + //单号判重 + if(StringUtils.isNotEmpty(visitorApply.getListCode())){ + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("list_code", visitorApply.getListCode()); + List applyList = visitorApplyMapper.selectList(wrapper); + if(!CollectionUtils.isEmpty(applyList)){ + return ResponseData.error("申请编号重复,请重新添加"); + } + } + //无需判重,可预约多个时间段 AppointmentFreeRegisterRequest appointmentFreeRegisterRequest = new AppointmentFreeRegisterRequest(); //将时间转换为海康ISO8601格式 @@ -86,6 +102,9 @@ appointmentFreeRegisterRequest.setVisitStartTime(inTimeISODate); appointmentFreeRegisterRequest.setVisitEndTime(outTimeISODate); appointmentFreeRegisterRequest.setVisitPurpose(visitorApply.getVisitReason()); + VisitorPermissionSet visitorPermissionSet = new VisitorPermissionSet(); + visitorPermissionSet.setPrivilegeGroupIds(positionPrivilegeInitCache.getPositionPrivilegeMap(visitorApply.getVisitReason())); + appointmentFreeRegisterRequest.setVisitorPermissionSet(visitorPermissionSet); VisitorInfo visitorInfo = new VisitorInfo(); visitorInfo.setVisitorName(visitorApply.getVisitorName()); @@ -155,7 +174,10 @@ if(StringUtils.isNotEmpty(visitorApply.getPicUri())){ visitorInfo.setVisitorPhoto(visitorApply.getPicUri()); } - appointmentFreeRegisterRequest.setVisitorInfo(visitorInfo); +// appointmentFreeRegisterRequest.setVisitorInfo(visitorInfo); + List visitorInfoList = new ArrayList<>(); + visitorInfoList.add(visitorInfo); + appointmentFreeRegisterRequest.setVisitorInfoList(visitorInfoList); String body = JSONObject.toJSONString(appointmentFreeRegisterRequest); String resultStr = HikUtil.hikApi(HikUri.APPOINTMENT_UPDATE, body); @@ -216,7 +238,14 @@ log.error("访客列表:{},未在海康进行预约成功,无法取消预约", appointRecordIds); return 0; } - return deleteBatchVisitorApply(ids); + return visitorApplyMapper.deleteBatchIds(ids); + } + + @Override + public String visitorApplyListCode() { + String maxNo = visitorApplyMapper.selectListCode(); + String messageId = NumberGeneratorUtil.getContactNo(Long.parseLong(maxNo)); + return messageId; } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java new file mode 100644 index 0000000..27bdead --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.util; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.concurrent.atomic.AtomicLong; + +/** + * @Description: 编号生成工具 + * @Author: wangpeng + * @Date: 2022/12/15 20:31 + */ +public class NumberGeneratorUtil { + /** + * 支持每天最多生成9999个序号 + */ + public static synchronized String getContactNo(long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + String datePrefix = format.format(new Date()); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是当前日期,从0计算后4位 + if (Long.valueOf(datePrefix) > Long.valueOf(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + // 组合 + builder.append(num); + return builder.toString(); + } +} diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index e7e5127..d3a3e77 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -65,5 +65,21 @@ #1/2对应字典中一期(包含一期+录制楼)、二期主楼 accessgroup: configMap: - 1: [eaf4c45a20734a6d88cdf32cbec3fdab] - 2: [2,3,4] \ No newline at end of file + 1: [1eacbe03363c4b2980a59999188fc116,d725b8f57a2b45d79183ca12dc8a3261,093dd030940e498f86f7f870bff8cbfe,90a807c1a88d4dce9103de5061379d34, + 889916c8a9b749febb56c569fab4a2b2,8c4c55ba8314442e8cb65e9e601451c9,23acc9b05a0f47bb91dc909398bc139c,43db86d573f14c2381cce28e34f438aa, + 7e6b4f58908040bd871279a0701b2b62,6eb09c1c860e4f678b8d3652076edcb5,07b2999273324b72ba1a1c542aa5a88b,3e3fdf0784404e39b4f7563730c7f312, + 9efea996b23840b691ddb80e823f3d8d,92c32cdfbd7145d7bc16cebc65ad48d5,382c0d2132284386966328b0f350ae2d,a8bf7cf55af548d5a4b2fefc5380a51a, + 534542c51e9c4499becf464ec80895f5,16966b4881b04b1395f630809269635a,650e0d3bdbf04f26813f259a09132663,3c703c711fb64c2789cc30f5d9e3fd73, + 2014a1d8fead4b76a5cb836ecf1c4db6,dd46d272d7bc456d905f6f43d7c33595,48d6ea5159b645fab7d83676b6d59a5a,0c5d9238f341487186410f830df8da37, + 4b56821684224b8ea0467acae2fa4f6f,79a99a18b2214c0980b69bda08e66f0a,ba0c41363b114cf19f713955c47b13d1,7d82995e49b046e199387cf2052753f3, + 7840b20c767b47b68f1cfd5050be0333,4eed33089b4541b7ba715dceff10fafe,3c5b03502c1042ba802544be02a0be1a,f8394537b5784c30be0afc362cb01150] + 2: [b5b3c0482f3c4415b63ae9b0572f66f9,d0a261d6a8bd4af09302970e392dd771,ff9ff627e19e4e7085602fd552ecf57b,64be19ab18104690989c19269eb6d871, + e49a526cd8d246f9ba9fe3120594585d,734530c21fb84bdbabc2ad50d6272ba4,677300a1407e41939e9bc4643b8a65e1,3c758aca143444838e922a466484560a, + 3b02701f81d94cc282a695723f8c3f9f,bd86703f5ffe4f4d8ce437416d32fe8b,899447f907784abc89bf4ec8d8904fe7,2c640e74c7924ae8a1c11200778a555a, + a02e957b3e8d446fb41c1adb729524fe,9b51e18cb09d4f19bb108bdbc5e0ab11,2beb8ec76b1c4d80b64f4fbd224fbd98,6e6eaa79998b48318cd8b0430d79ce4f, + 8f659690e27244bdba65dd2d0fa313ba,6fa3615892c142b58851a31b161d3b18,398c805bb4bc4e80a0a98a4bead14abf,b111784e9f1e44be81bc4113a5a73a62, + 03bfd8c696fa46018f10b17faa7c5e41,a9689131cfcc44dba4bd299016b6f459,f2be71eff13b4305b9ab03d0276df852,efc583938bba4c869a633f52b69db010, + 2e22b7c9206c4184a756c7c091422a8d,bbb12547f1d1453c8be02d6e8c413338,d4612a78089a4dcab0df417591c346e8,d277ae7102774ba6bd568cff9bbdfc08, + 57c2a7b7c19d48c9b04ac5f2e1c4b3ed,69dee9f5bb51435bb9045cc5d59fa194,e5c6c81beee24131b18e12862123a68b,950b1a1708534bbbbb40dcb36d21eb70, + 9b8450815d47401482dd7d4b075e4229,d69c2a94fb0a49ca86b0d9faa920068a,588593de9e7f42f9819f08f7cfc6ae86,ed7de18f260441f3aef025696e3bdb09, + dd6dd56306c746fabdd637a3489cef00,6b660fcc97e34c7c82c1ef517a88bb52,b62e4f68120249babd6203c90b53cb7a,0513c3e1926f450fb403f441dd644fcd] \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java index f91d7bd..2dd34b6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java @@ -21,11 +21,13 @@ import com.casic.missiles.modular.model.GroupDevice; import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.GroupDeviceService; +import com.casic.missiles.modular.system.model.Dict; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -179,7 +181,11 @@ if (CollectionUtil.isNotEmpty(list)) { return list; } - this.saveBatch(collect); + try{ + this.saveBatch(collect); + }catch (DuplicateKeyException exception){ + list.add("存在重复设备编号数据,请检查后重试"); + } } return list; } @@ -212,7 +218,8 @@ deviceRepairLogDTO.setCreateTime(v.get(0).getCreateTime()); list.add(deviceRepairLogDTO); }); - return list; + List collect = list.stream().sorted(Comparator.comparing(DeviceRepairLogDTO::getCreateTime).reversed()).collect(Collectors.toList()); + return collect; } @Override @@ -437,4 +444,29 @@ return deviceInfo; } + @Override + public List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoMapper.selectDeviceStatusGroupByStatusAndArea(deviceAreaRequest); +// if(CollectionUtils.isEmpty(deviceStatusDTOS)){ +// return new ArrayList<>(); +// } + for (DeviceStatusDTO deviceStatusDTO : deviceStatusDTOS) { + String dictNameByCode = dictService.getDictNameByCode(SecurityEventDict.DEVICE_STATUS, deviceStatusDTO.getStatus()); + deviceStatusDTO.setStatusName(dictNameByCode); + } + List collect1 = deviceStatusDTOS.stream().map(DeviceStatusDTO::getStatusName).collect(Collectors.toList()); + List dict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); + List collect = dict.stream().map(Dict::getName).collect(Collectors.toList()); + collect.forEach(name -> { + if(!collect1.contains(name)){ + DeviceStatusDTO deviceStatusDTO = new DeviceStatusDTO(); + deviceStatusDTO.setStatusName(name); + deviceStatusDTO.setQuantity(0); + deviceStatusDTOS.add(deviceStatusDTO); + } + }); + + return deviceStatusDTOS; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index d29d38d..0f02ccb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; @@ -49,6 +50,9 @@ @Autowired private CaseInfoMapper caseInfoMapper; + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -59,7 +63,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -86,7 +90,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -122,7 +126,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -160,7 +164,7 @@ String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); - // TODO: 2022/7/28 事件状态字典值选择 + //事件状态字典值选择 caseInfo.setStatus(dict.get(0).getCode()); //事件状态("未解决"的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); if(Objects.isNull(deviceInfo)){ @@ -176,7 +180,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -195,7 +199,7 @@ log.info("接收到监控点上线事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return; } - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); int upDevFlag = deviceInfoMapper.updateById(deviceInfo); @@ -217,7 +221,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -234,7 +238,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -250,7 +254,7 @@ public void deviceOnlineHandle(JSONObject event) { String srcIndex = event.getString("srcIndex"); DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -266,7 +270,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -286,6 +290,56 @@ } @Override + public void doorPassHandle(JSONObject event) { + JSONObject data = event.getJSONObject("data"); + Integer eventType = event.getInteger("eventType"); + String srcIndex = event.getString("srcIndex"); + String srcName = event.getString("srcName"); + String indexCode = event.getString("srcParentIndex"); + String staffCode = data.getString("ExtEventPersonNo"); + String cardNum = data.getString("ExtEventCardNo"); + Integer channelNum = data.getInteger("ExtAccessChannel"); + //进出类型,文档为1进0出,实际为1进2出,和字典一样 + Integer inoutType = data.getInteger("ExtEventInOut"); + String passWay = ""; + String description = ""; + //通过方式:卡、人脸、身份证 + //当合法卡比对通过且ExtEventIdentityCardInfo有值且ExtEventIdentityCardInfo中的IdNum有值为身份证通过 + if(SecurityEventType.CARD_COMPARE_PASS.equals(eventType)){ + JSONObject extEventIdentityCardInfo = data.getJSONObject("ExtEventIdentityCardInfo"); + if(!Objects.isNull(extEventIdentityCardInfo) && StringUtils.isNotEmpty(extEventIdentityCardInfo.getString("IdNum"))){ + passWay = "2";//身份证 + description = "身份证核对成功"; + }else{ + passWay = "0";//刷卡 + description = "刷卡比对成功"; + } + }else if(SecurityEventType.FACE_COMPARE_PASS.equals(eventType) || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + passWay = "1";//人脸 + description = "人脸比对成功"; + } + DateTime parse = DateUtil.parse(event.getString("happenTime")); + String happenTime = DateUtil.formatDateTime(parse); + + StaffInoutLog staffInoutLog = new StaffInoutLog(); + staffInoutLog.setStaffCode(staffCode); + staffInoutLog.setSrcIndex(srcIndex); + staffInoutLog.setIndexCode(indexCode); + staffInoutLog.setCardNum(cardNum); + staffInoutLog.setChannelNum(channelNum); + staffInoutLog.setWayName(srcName); + staffInoutLog.setInoutType(String.valueOf(inoutType)); + staffInoutLog.setPassWay(passWay); + staffInoutLog.setDescription(description); + staffInoutLog.setPassTime(happenTime); + if(inoutLogMapper.insert(staffInoutLog) <= 0){ + log.error("新增人员进出记录异常"); + return; + } + + } + + @Override @Transactional(rollbackFor = Exception.class) public void propertyAttendanceHandle(JSONObject event) { JSONObject data = event.getJSONObject("data"); @@ -300,7 +354,8 @@ String happenTime = DateUtil.formatDateTime(parse); //使用海康人脸唯一标识获取员工信息 Map columnMap = new HashMap<>(); - columnMap.put("staff_face_id", faceInfoCode); + //已验证,海康存储的faceInfoCode是staff_code + columnMap.put("staff_code", faceInfoCode); List staffInfos = staffInfoMapper.selectByMap(columnMap); StaffInfo staffInfo = staffInfos.get(0); //存储考勤信息 @@ -311,13 +366,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); info.setStaffCode(staffInfo.getStaffCode()); + info.setJobNo(staffInfo.getJobNo()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 物业人员字典值选择 + //物业人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(0).getCode()); info.setStaffTypeName(staffDict.get(0).getName()); @@ -358,13 +415,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); + info.setJobNo(staffInfo.getJobNo()); info.setStaffCode(staffInfo.getStaffCode()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 安保人员字典值选择 + //安保人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(1).getCode()); info.setStaffTypeName(staffDict.get(1).getName()); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 06f8bf3..b2e826f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java @@ -200,7 +200,7 @@ String hazardName = hazardLevelMapper.selectHazardNameByCode(key); monthAndWeekDTO.setLevelName(hazardName); if (year.equals(String.valueOf(DateUtil.thisYear()))) { - monthAndWeekDTO.setMonthQuantity(sum / DateUtil.thisMonth()); + monthAndWeekDTO.setMonthQuantity(sum / (DateUtil.thisMonth()+1)); strAvgMap.put(key, monthAndWeekDTO); } else { monthAndWeekDTO.setMonthQuantity(sum / 12); @@ -247,7 +247,9 @@ resultList.add(strAvgMap.get(key)); }); //输出顺序 - Collections.swap(resultList, 1, 2); + if(!CollectionUtils.isEmpty(resultList) && resultList.size() > 1){ + Collections.swap(resultList, 1, 2); + } return ResponseData.success(resultList); } @@ -768,6 +770,7 @@ map.put("date", date); resultList.add(map); } + resultList.sort(Comparator.comparing(o -> o.get("date").toString())); return ResponseData.success(resultList); } @@ -952,16 +955,16 @@ //2个map有一个为空 if (CollectionUtils.isEmpty(onDutyMap)) { if (!Objects.isNull(levelAssessMap.get(date))) { - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } if (CollectionUtils.isEmpty(levelAssessMap)) { if (!Objects.isNull(onDutyMap.get(date))) { - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } } else if (Objects.isNull(onDutyMap.get(date)) && Objects.isNull(levelAssessMap.get(date))) { @@ -971,18 +974,18 @@ } else if (Objects.isNull(onDutyMap.get(date)) && !Objects.isNull(levelAssessMap.get(date))) { //2、补全到岗率数据处理 //该日期onDutyMap空,levelAssessMap不空 - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //2、补全安保等级评估数据处理 //该日期levelAssessMap空,onDutyMap不空 - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (!Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //该日期2个都不空 BigDecimal onDutyDecimal = onDutyMap.get(date); BigDecimal levelAssessDecimal = levelAssessMap.get(date); - map.put("score", onDutyDecimal.add(levelAssessDecimal).stripTrailingZeros().toPlainString()); + map.put("score", onDutyDecimal.add(levelAssessDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } }); @@ -1167,6 +1170,13 @@ return ResponseData.success(resultList); } + @Override + public Object highFrequency() { + //事件表近一个月按description分组 + List list = caseInfoMapper.getCountForRank(); + return ResponseData.success(list); + } + private List> getForResult(List weekCaseDTOS, List weekCaseKeyAreaDTOS, List caseInfos, HashMap weekCaseMap, HashMap caseScoreMap, HashMap keyAreaScoreMap, HashMap assessScoreMap, @@ -1255,7 +1265,7 @@ BigDecimal caseScore = preCaseScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("case"))); BigDecimal keyAreaScore = preKeyAreaScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("keyArea"))); BigDecimal responseAssessScore = preAssessScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("responseAssess"))); - map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).stripTrailingZeros().toPlainString()); + map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); }); return resultList; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java index 97ed308..c39a5fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.modular.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,6 +10,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.dao.StaffInfoMapper; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.*; import com.casic.missiles.modular.enums.HikUri; @@ -59,7 +62,8 @@ List pageList = staffInfoMapper.getStaffInfoListPage(page, staffInfoRequest); pageList.stream().forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); - staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); +// staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); + getFiledFromHik(staffInfo); }); return pageList; } catch (DataAccessException ex) { @@ -280,6 +284,7 @@ List list = staffInfoMapper.getStaffInfoList(staffInfoRequest); list.forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); + staffInfo.setStaffGenderName(dictService.getDictNameByCode(SecurityEventDict.SYS_SEX, staffInfo.getStaffGender())); }); return list; } catch (DataAccessException ex) { @@ -318,6 +323,115 @@ return ResponseData.success(url); } + @Override + public int saveOrUpdateStaffInfoBatch(List personList) { + return staffInfoMapper.saveOrUpdateStaffInfoBatch(personList); + } + + @Override + public List getStaffCardList(String staffCode) { + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(1000); + request.setPersonIds(staffCode); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + List list = new ArrayList<>(); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + CardListResponse cardListResponse = new CardListResponse(); + cardListResponse.setCardNum(jsonObject.getString("cardNo")); + //卡状态 + Integer useStatus = jsonObject.getInteger("useStatus"); + if(!Objects.isNull(useStatus) && 1 == useStatus){ + cardListResponse.setStatusName("正常"); + }else if(!Objects.isNull(useStatus) && 2 == useStatus){ + cardListResponse.setStatusName("挂失"); + } + //卡起始时间 + String startDateISO = jsonObject.getString("startDate"); + DateTime startDateParse = DateUtil.parse(startDateISO); + String startTime = DateUtil.formatDateTime(startDateParse); + cardListResponse.setStartTime(startTime); + //卡终止时间 + String endDateISO = jsonObject.getString("endDate"); + DateTime endDateParse = DateUtil.parse(endDateISO); + String endTime = DateUtil.formatDateTime(endDateParse); + cardListResponse.setEndTime(endTime); + //生物特征(只有人脸) + Integer isBindFace = jsonObject.getInteger("isBindFace"); + if(!Objects.isNull(useStatus) && 1 == isBindFace){ + cardListResponse.setFeatures("人脸"); + } + //挂失时间 + String lossDateISO = jsonObject.getString("lossDate"); + DateTime lossDateParse = DateUtil.parse(lossDateISO); + String cancelTime = DateUtil.formatDateTime(lossDateParse); + cardListResponse.setCancelTime(cancelTime); + //解挂时间 + String unlossDateISO = jsonObject.getString("unlossDate"); + DateTime unlossDateParse = DateUtil.parse(unlossDateISO); + String unhookTime = DateUtil.formatDateTime(unlossDateParse); + cardListResponse.setUnhookTime(unhookTime); + + list.add(cardListResponse); + }); + return list; + } + + + private void getFiledFromHik(StaffInfo staffInfo) { + String staffCode = staffInfo.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInfo.setDeptName(replace); + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInfo.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInfo.setPicture(pictureFromHik); + } + } + private String getPictureFromHik(String staffCode) { PersonInfoRequest request = new PersonInfoRequest(); List list = new ArrayList<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java new file mode 100644 index 0000000..f3687cd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.modular.dao.StaffInoutLogMapper; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.dto.hik.PersonInfoRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 18:38 + */ +@Slf4j +@Service +public class StaffInoutLogServiceImpl extends ServiceImpl implements StaffInoutLogService { + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Resource + private AbstractDictService dictService; + + @Override + public List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest) { + try { +// todo员工编号和员工列表一致,进出记录中空数据问题,进出方式问题 + List pageList = inoutLogMapper.selectStaffInoutLogList(page, inoutLogRequest); + pageList.stream().forEach(inoutLog -> { + inoutLog.setPassWayName(dictService.getDictNameByCode(SecurityEventDict.PASS_WAY, inoutLog.getPassWay())); + inoutLog.setInoutTypeName(dictService.getDictNameByCode(SecurityEventDict.INOUT_TYPE, inoutLog.getInoutType())); + inoutLog.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getPosition())); + //doorArea为前端文档参数,先取position + inoutLog.setDoorArea(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getDoorArea())); + inoutLog.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, inoutLog.getArea())); + //获取海康组织名,根据组织编号获取 + getFiledFromHik(inoutLog); + }); + return pageList; + } catch (DataAccessException ex) { + log.error("员工: 查询分页出现异常,异常:{}", ex); + } + return null; + + } + + private void getFiledFromHik(StaffInoutLog staffInoutLog) { + String staffCode = staffInoutLog.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInoutLog.setDeptName(replace); + + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInoutLog.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInoutLog.setPicture(pictureFromHik); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java index f6756ce..4b8e0b4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java @@ -7,20 +7,24 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.config.PositionPrivilegeInitCache; import com.casic.missiles.modular.dao.VisitorApplyMapper; import com.casic.missiles.modular.dto.VisitorApplyRequest; import com.casic.missiles.modular.dto.hik.AppointmentFreeRegisterRequest; import com.casic.missiles.modular.dto.hik.VisitorInfo; +import com.casic.missiles.modular.dto.hik.VisitorPermissionSet; import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.CaseInfo; import com.casic.missiles.modular.model.VisitorApply; import com.casic.missiles.modular.service.VisitorApplyService; import com.casic.missiles.modular.util.HikUtil; +import com.casic.missiles.modular.util.NumberGeneratorUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -48,12 +52,12 @@ public class VisitorApplyServiceImpl extends ServiceImpl implements VisitorApplyService { @Autowired private VisitorApplyMapper visitorApplyMapper; - @Resource private AbstractDictService dictService; - @Resource private Validator validator; + @Resource + private PositionPrivilegeInitCache positionPrivilegeInitCache; @Override public List visitorApplyListPage(Page page, VisitorApplyRequest visitorApplyRequest) { @@ -62,6 +66,8 @@ pageList.forEach(visitorApply ->{ visitorApply.setVisitReason(dictService.getDictNameByCode(SecurityEventDict.VISIT_REASON, visitorApply.getVisitReason())); visitorApply.setVisitPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorApply.getVisitPosition())); + visitorApply.setStatusName(dictService.getDictNameByCode(SecurityEventDict.APPLICATION_STATUS, visitorApply.getStatus())); + visitorApply.setApplicationTypeName(dictService.getDictNameByCode(SecurityEventDict.APPLICATION_TYPE, visitorApply.getApplicationType())); }); return pageList; } catch (DataAccessException ex) { @@ -73,6 +79,16 @@ @Override @Transactional(rollbackFor = Exception.class) public Object addVisitorApply(VisitorApply visitorApply) { + //单号判重 + if(StringUtils.isNotEmpty(visitorApply.getListCode())){ + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("list_code", visitorApply.getListCode()); + List applyList = visitorApplyMapper.selectList(wrapper); + if(!CollectionUtils.isEmpty(applyList)){ + return ResponseData.error("申请编号重复,请重新添加"); + } + } + //无需判重,可预约多个时间段 AppointmentFreeRegisterRequest appointmentFreeRegisterRequest = new AppointmentFreeRegisterRequest(); //将时间转换为海康ISO8601格式 @@ -86,6 +102,9 @@ appointmentFreeRegisterRequest.setVisitStartTime(inTimeISODate); appointmentFreeRegisterRequest.setVisitEndTime(outTimeISODate); appointmentFreeRegisterRequest.setVisitPurpose(visitorApply.getVisitReason()); + VisitorPermissionSet visitorPermissionSet = new VisitorPermissionSet(); + visitorPermissionSet.setPrivilegeGroupIds(positionPrivilegeInitCache.getPositionPrivilegeMap(visitorApply.getVisitReason())); + appointmentFreeRegisterRequest.setVisitorPermissionSet(visitorPermissionSet); VisitorInfo visitorInfo = new VisitorInfo(); visitorInfo.setVisitorName(visitorApply.getVisitorName()); @@ -155,7 +174,10 @@ if(StringUtils.isNotEmpty(visitorApply.getPicUri())){ visitorInfo.setVisitorPhoto(visitorApply.getPicUri()); } - appointmentFreeRegisterRequest.setVisitorInfo(visitorInfo); +// appointmentFreeRegisterRequest.setVisitorInfo(visitorInfo); + List visitorInfoList = new ArrayList<>(); + visitorInfoList.add(visitorInfo); + appointmentFreeRegisterRequest.setVisitorInfoList(visitorInfoList); String body = JSONObject.toJSONString(appointmentFreeRegisterRequest); String resultStr = HikUtil.hikApi(HikUri.APPOINTMENT_UPDATE, body); @@ -216,7 +238,14 @@ log.error("访客列表:{},未在海康进行预约成功,无法取消预约", appointRecordIds); return 0; } - return deleteBatchVisitorApply(ids); + return visitorApplyMapper.deleteBatchIds(ids); + } + + @Override + public String visitorApplyListCode() { + String maxNo = visitorApplyMapper.selectListCode(); + String messageId = NumberGeneratorUtil.getContactNo(Long.parseLong(maxNo)); + return messageId; } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java new file mode 100644 index 0000000..27bdead --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.util; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.concurrent.atomic.AtomicLong; + +/** + * @Description: 编号生成工具 + * @Author: wangpeng + * @Date: 2022/12/15 20:31 + */ +public class NumberGeneratorUtil { + /** + * 支持每天最多生成9999个序号 + */ + public static synchronized String getContactNo(long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + String datePrefix = format.format(new Date()); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是当前日期,从0计算后4位 + if (Long.valueOf(datePrefix) > Long.valueOf(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + // 组合 + builder.append(num); + return builder.toString(); + } +} diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index e7e5127..d3a3e77 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -65,5 +65,21 @@ #1/2对应字典中一期(包含一期+录制楼)、二期主楼 accessgroup: configMap: - 1: [eaf4c45a20734a6d88cdf32cbec3fdab] - 2: [2,3,4] \ No newline at end of file + 1: [1eacbe03363c4b2980a59999188fc116,d725b8f57a2b45d79183ca12dc8a3261,093dd030940e498f86f7f870bff8cbfe,90a807c1a88d4dce9103de5061379d34, + 889916c8a9b749febb56c569fab4a2b2,8c4c55ba8314442e8cb65e9e601451c9,23acc9b05a0f47bb91dc909398bc139c,43db86d573f14c2381cce28e34f438aa, + 7e6b4f58908040bd871279a0701b2b62,6eb09c1c860e4f678b8d3652076edcb5,07b2999273324b72ba1a1c542aa5a88b,3e3fdf0784404e39b4f7563730c7f312, + 9efea996b23840b691ddb80e823f3d8d,92c32cdfbd7145d7bc16cebc65ad48d5,382c0d2132284386966328b0f350ae2d,a8bf7cf55af548d5a4b2fefc5380a51a, + 534542c51e9c4499becf464ec80895f5,16966b4881b04b1395f630809269635a,650e0d3bdbf04f26813f259a09132663,3c703c711fb64c2789cc30f5d9e3fd73, + 2014a1d8fead4b76a5cb836ecf1c4db6,dd46d272d7bc456d905f6f43d7c33595,48d6ea5159b645fab7d83676b6d59a5a,0c5d9238f341487186410f830df8da37, + 4b56821684224b8ea0467acae2fa4f6f,79a99a18b2214c0980b69bda08e66f0a,ba0c41363b114cf19f713955c47b13d1,7d82995e49b046e199387cf2052753f3, + 7840b20c767b47b68f1cfd5050be0333,4eed33089b4541b7ba715dceff10fafe,3c5b03502c1042ba802544be02a0be1a,f8394537b5784c30be0afc362cb01150] + 2: [b5b3c0482f3c4415b63ae9b0572f66f9,d0a261d6a8bd4af09302970e392dd771,ff9ff627e19e4e7085602fd552ecf57b,64be19ab18104690989c19269eb6d871, + e49a526cd8d246f9ba9fe3120594585d,734530c21fb84bdbabc2ad50d6272ba4,677300a1407e41939e9bc4643b8a65e1,3c758aca143444838e922a466484560a, + 3b02701f81d94cc282a695723f8c3f9f,bd86703f5ffe4f4d8ce437416d32fe8b,899447f907784abc89bf4ec8d8904fe7,2c640e74c7924ae8a1c11200778a555a, + a02e957b3e8d446fb41c1adb729524fe,9b51e18cb09d4f19bb108bdbc5e0ab11,2beb8ec76b1c4d80b64f4fbd224fbd98,6e6eaa79998b48318cd8b0430d79ce4f, + 8f659690e27244bdba65dd2d0fa313ba,6fa3615892c142b58851a31b161d3b18,398c805bb4bc4e80a0a98a4bead14abf,b111784e9f1e44be81bc4113a5a73a62, + 03bfd8c696fa46018f10b17faa7c5e41,a9689131cfcc44dba4bd299016b6f459,f2be71eff13b4305b9ab03d0276df852,efc583938bba4c869a633f52b69db010, + 2e22b7c9206c4184a756c7c091422a8d,bbb12547f1d1453c8be02d6e8c413338,d4612a78089a4dcab0df417591c346e8,d277ae7102774ba6bd568cff9bbdfc08, + 57c2a7b7c19d48c9b04ac5f2e1c4b3ed,69dee9f5bb51435bb9045cc5d59fa194,e5c6c81beee24131b18e12862123a68b,950b1a1708534bbbbb40dcb36d21eb70, + 9b8450815d47401482dd7d4b075e4229,d69c2a94fb0a49ca86b0d9faa920068a,588593de9e7f42f9819f08f7cfc6ae86,ed7de18f260441f3aef025696e3bdb09, + dd6dd56306c746fabdd637a3489cef00,6b660fcc97e34c7c82c1ef517a88bb52,b62e4f68120249babd6203c90b53cb7a,0513c3e1926f450fb403f441dd644fcd] \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index f19ec0f..d1c6782 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -15,6 +15,10 @@ database: 1 serializer: org.springframework.data.redis.serializer.StringRedisSerializer redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + spring: + mvc: + async: + request-timeout: 100000 casic: kaptcha-open: false #是否开启登录时验证码 (true/false) @@ -60,9 +64,24 @@ level.org.springframework.web: info #所属楼栋及各楼栋内门禁点列表配置 -#1/2/3对应字典中一期二期主楼和录制楼 +#1/2对应字典中一期(包含一期+录制楼)、二期主楼 accessgroup: configMap: - 1: [eaf4c45a20734a6d88cdf32cbec3fdab] - 2: [2,3,4] - 3: [3,4,5] \ No newline at end of file + 1: [1eacbe03363c4b2980a59999188fc116,d725b8f57a2b45d79183ca12dc8a3261,093dd030940e498f86f7f870bff8cbfe,90a807c1a88d4dce9103de5061379d34, + 889916c8a9b749febb56c569fab4a2b2,8c4c55ba8314442e8cb65e9e601451c9,23acc9b05a0f47bb91dc909398bc139c,43db86d573f14c2381cce28e34f438aa, + 7e6b4f58908040bd871279a0701b2b62,6eb09c1c860e4f678b8d3652076edcb5,07b2999273324b72ba1a1c542aa5a88b,3e3fdf0784404e39b4f7563730c7f312, + 9efea996b23840b691ddb80e823f3d8d,92c32cdfbd7145d7bc16cebc65ad48d5,382c0d2132284386966328b0f350ae2d,a8bf7cf55af548d5a4b2fefc5380a51a, + 534542c51e9c4499becf464ec80895f5,16966b4881b04b1395f630809269635a,650e0d3bdbf04f26813f259a09132663,3c703c711fb64c2789cc30f5d9e3fd73, + 2014a1d8fead4b76a5cb836ecf1c4db6,dd46d272d7bc456d905f6f43d7c33595,48d6ea5159b645fab7d83676b6d59a5a,0c5d9238f341487186410f830df8da37, + 4b56821684224b8ea0467acae2fa4f6f,79a99a18b2214c0980b69bda08e66f0a,ba0c41363b114cf19f713955c47b13d1,7d82995e49b046e199387cf2052753f3, + 7840b20c767b47b68f1cfd5050be0333,4eed33089b4541b7ba715dceff10fafe,3c5b03502c1042ba802544be02a0be1a,f8394537b5784c30be0afc362cb01150] + 2: [b5b3c0482f3c4415b63ae9b0572f66f9,d0a261d6a8bd4af09302970e392dd771,ff9ff627e19e4e7085602fd552ecf57b,64be19ab18104690989c19269eb6d871, + e49a526cd8d246f9ba9fe3120594585d,734530c21fb84bdbabc2ad50d6272ba4,677300a1407e41939e9bc4643b8a65e1,3c758aca143444838e922a466484560a, + 3b02701f81d94cc282a695723f8c3f9f,bd86703f5ffe4f4d8ce437416d32fe8b,899447f907784abc89bf4ec8d8904fe7,2c640e74c7924ae8a1c11200778a555a, + a02e957b3e8d446fb41c1adb729524fe,9b51e18cb09d4f19bb108bdbc5e0ab11,2beb8ec76b1c4d80b64f4fbd224fbd98,6e6eaa79998b48318cd8b0430d79ce4f, + 8f659690e27244bdba65dd2d0fa313ba,6fa3615892c142b58851a31b161d3b18,398c805bb4bc4e80a0a98a4bead14abf,b111784e9f1e44be81bc4113a5a73a62, + 03bfd8c696fa46018f10b17faa7c5e41,a9689131cfcc44dba4bd299016b6f459,f2be71eff13b4305b9ab03d0276df852,efc583938bba4c869a633f52b69db010, + 2e22b7c9206c4184a756c7c091422a8d,bbb12547f1d1453c8be02d6e8c413338,d4612a78089a4dcab0df417591c346e8,d277ae7102774ba6bd568cff9bbdfc08, + 57c2a7b7c19d48c9b04ac5f2e1c4b3ed,69dee9f5bb51435bb9045cc5d59fa194,e5c6c81beee24131b18e12862123a68b,950b1a1708534bbbbb40dcb36d21eb70, + 9b8450815d47401482dd7d4b075e4229,d69c2a94fb0a49ca86b0d9faa920068a,588593de9e7f42f9819f08f7cfc6ae86,ed7de18f260441f3aef025696e3bdb09, + dd6dd56306c746fabdd637a3489cef00,6b660fcc97e34c7c82c1ef517a88bb52,b62e4f68120249babd6203c90b53cb7a,0513c3e1926f450fb403f441dd644fcd] \ No newline at end of file diff --git a/casic-mini/pom.xml b/casic-mini/pom.xml deleted file mode 100644 index 5f96ca4..0000000 --- a/casic-mini/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - casic-security-cockpit - com.casic - 2.0.0 - - 4.0.0 - - casic-mini - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - io.micrometer - micrometer-core - - - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-devtools - runtime - - - - com.casic - casic-core - ${core.version} - - - com.casic - casic-admin-core - ${admin.version} - - - io.springfox - springfox-swagger-ui - - - - - com.casic - casic-admin-support - ${admin.version} - - - mysql - mysql-connector-java - ${mysql.driver.version} - - - com.casic - casic-area-starter - ${admin.version} - - - - com.casic - casic-server - ${pro.version} - - - com.casic - casic-file-support - ${admin.version} - - - - com.casic - casic-file - ${admin.version} - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - /config/*-*.yml - **/MockController.class - - - - com.casic.missiles.CasicApplication - true - ./ - - - - - - org.apache.maven.plugins - maven-assembly-plugin - ${maven.assembly.plugin.version} - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - - - true - true - - - - - - src/main/resources - - - /config/*/* - /config/*-*.yml - - true - - - src/main/java - - **/*.xml - - true - - - - \ No newline at end of file diff --git a/casic-mini/src/main/build/bin/start.sh b/casic-mini/src/main/build/bin/start.sh deleted file mode 100644 index 03e8d4a..0000000 --- a/casic-mini/src/main/build/bin/start.sh +++ /dev/null @@ -1 +0,0 @@ -nohup java -jar ./lib/casic-web-2.0.0.jar > /dev/null 2>&1 & \ No newline at end of file diff --git a/casic-mini/src/main/build/package.xml b/casic-mini/src/main/build/package.xml deleted file mode 100644 index 6085832..0000000 --- a/casic-mini/src/main/build/package.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - package - - zip - tar.gz - - true - - - - - true - true - lib - runtime - - - - - src/main/build/bin - - start.sh - - true - 0744 - / - - - src/main/resources/config - true - - *.yml - /*/* - - /config - - - src/main/resources/i18n - / - - - \ No newline at end of file diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java b/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java deleted file mode 100644 index 7289258..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles; - -import lombok.extern.slf4j.Slf4j; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -/** - * SpringBoot方式启动类 - * - */ -@SpringBootApplication -@EnableCaching -@EnableTransactionManagement(proxyTargetClass = true) -@EnableAsync -@Slf4j -@MapperScan("com.casic.missiles.modular.dao") -public class CasicApplication { - public static void main(String[] args) { - SpringApplication.run(CasicApplication.class, args); - - log.info("CasicApplication is success!"); - } - -} diff --git a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java deleted file mode 100644 index e30585b..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/CasicServletInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * Guns Web程序启动类 - * - * @author fengshuonan - * @date 2017-05-21 9:43 - */ -public class CasicServletInitializer extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(CasicApplication.class); - } -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java deleted file mode 100644 index e6c24e1..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MIniController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.casic.missiles.controller; - -/** - * @Description: - * @Author: wangpeng - * @Date: 2022/11/8 14:39 - */ -public class MIniController { - //Controller写在casic-mini模块,其它模块引用casic-server模块,打包放在5904端口 -} diff --git a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java b/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java deleted file mode 100644 index eae6c54..0000000 --- a/casic-mini/src/main/java/com/casic/missiles/controller/MockController.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.casic.missiles.controller; - -import cn.hutool.core.util.StrUtil; -import com.casic.missiles.core.application.enums.LoginType; -import com.casic.missiles.core.base.controller.BaseController; -import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.core.model.auth.CasicCustomToken; -import com.casic.missiles.core.shiro.ShiroKit; -import com.casic.missiles.core.util.RSAUtils; -import com.casic.missiles.model.response.SuccessResponseData; -import com.casic.missiles.modular.domain.constants.PermissionConstants; -import com.casic.missiles.modular.interfaces.log.LogManager; -import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; -import com.casic.missiles.modular.system.dto.LoginSuccessDTO; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.subject.Subject; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -import static com.casic.missiles.core.util.HttpContext.getIp; - - -/** - * 仅为mock登录使用 - * - * @author lenovo - */ -@Controller -@RequestMapping("/route") -@Slf4j -public class MockController extends BaseController { - - /** - * 获取mockToken - */ - @GetMapping("/mockToken") - @ResponseBody - public Object mockToken(String username, String password) { - super.getSession().setAttribute(PermissionConstants.IS_APP, false); - SuccessResponseData resultData = new SuccessResponseData(); - if (StrUtil.hasEmpty(username, password)) { - username = "admin"; - password = "111111"; - } - Subject currentUser = ShiroKit.getSubject(); - - try { - Map key = RSAUtils.genKeyPair(); - ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - - //token自定义 - CasicCustomToken token = new CasicCustomToken(username, password); - token.setType(LoginType.PASSWORD); - token.setRememberMe(false); - - try { - currentUser.login(token); - } catch (Exception e) { - e.printStackTrace(); - } - AuthUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); - resultData.setMessage("登录成功"); - return resultData; - } -} diff --git a/casic-mini/src/main/resources/config/application-dev.yml b/casic-mini/src/main/resources/config/application-dev.yml deleted file mode 100644 index 3f62737..0000000 --- a/casic-mini/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,36 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 111.198.10.15 - port: 11412 - password: ew5T4K3#203lwh - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -# session: -# store-type: redis - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/** - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-prod.yml b/casic-mini/src/main/resources/config/application-prod.yml deleted file mode 100644 index 4403faf..0000000 --- a/casic-mini/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,34 +0,0 @@ -server: - port: 5904 -# context-path: /callcenter/api -################### spring配置 ################### -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.10.6:3306/casic_security_cockpit?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true - username: root - password: Casic203 - redis: - host: 192.168.10.6 - port: 6379 - password: Casic203 - database: 1 - serializer: org.springframework.data.redis.serializer.StringRedisSerializer - redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer - -casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: /websocket/**,${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/cockpit/**,/propertyManage/**,/eventRcv/**,/hik/**,/staffInfo/**,/**/listPage,/**/list,/**/drawNo,/socket/repost,/caseInfo/update,/**/list/unResolved,/last/drawNo,/multiScore/**,/caseInfo/oneClickSolved - #flowable数据源和多数据源配置 - db: - init: - enable: false - #图片下载本地地址 - file: - uploadPath: D:\tmp\ - commponentType: disk - -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application-test.yml b/casic-mini/src/main/resources/config/application-test.yml deleted file mode 100644 index 9f1d195..0000000 --- a/casic-mini/src/main/resources/config/application-test.yml +++ /dev/null @@ -1,29 +0,0 @@ -server: - port: 5904 -################### spring配置 ################### -spring: - datasource: - url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true -# session: -# store-type: redis -casic: - # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /websocket/**,/user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** - #flowable数据源和多数据源配置 - flowable: - datasource: - url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull - username: root - password: Casic203! -flowable: - checkProcessDefinitions: false #不校验process文件 -logging: - level.root: info - level.com.casic: debug - level.org.springframework.web: info \ No newline at end of file diff --git a/casic-mini/src/main/resources/config/application.yml b/casic-mini/src/main/resources/config/application.yml deleted file mode 100644 index d410e56..0000000 --- a/casic-mini/src/main/resources/config/application.yml +++ /dev/null @@ -1,36 +0,0 @@ -########################################################## -################## 所有profile共有的配置 ################# -########################################################## -spring: - profiles: - active: prod - servlet: - multipart: - max-file-size: 50MB - max-request-size: 80MB -#mybatis-plus: -# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector -################### mybatis-plus配置 ################### -mybatis-plus: - global-config: - #字段策略 0:"所有字段都更新和插入" 1:"只更新和插入非NULL值" 2:"只更新和插入非NULL值且非空字符串" - field-strategy: 1 - enable-sql-runner: true - configuration: - # 配置结果集属性为空时 是否映射返回结果 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 - map-underscore-to-camel-case: true -################### guns配置 ################### -casic: - swagger-open: false #是否开启swagger (true/false) - kaptcha-open: false #是否开启登录时验证码 (true/false) - muti-datasource-open: false #是否开启多数据源(true/false) - spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) - session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 - session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken - file: - uploadPath: D:\tmp\ -# config: -# export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ -# config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/casic-mini/src/main/resources/logback-spring.xml b/casic-mini/src/main/resources/logback-spring.xml deleted file mode 100644 index c0c7ac9..0000000 --- a/casic-mini/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/missiles_error.log - - - - - - ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/missiles_total.log - - - - - - ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log - - - - 10MB - - - - - true - - - - ${FILE_LOG_PATTERN} - utf-8 - - - - - - - - - - - \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java new file mode 100644 index 0000000..2a69218 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/config/PositionPrivilegeInitCache.java @@ -0,0 +1,106 @@ +package com.casic.missiles.modular.config; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.dto.hik.PrivilegeGroupRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @Description: 访客申请访问区域对应海康权限分组初始化 + * @Author: wangpeng + * @Date: 2023/1/4 14:31 + */ +@Slf4j +@Component +public class PositionPrivilegeInitCache { + + //<楼栋区域key,权限组id> + private HashMap> map = new HashMap<>(); + + @PostConstruct + public void postConstruct() { + //获取全部访客区域权限组 + PrivilegeGroupRequest privilegeGroupRequest = new PrivilegeGroupRequest(); + privilegeGroupRequest.setPageNo(1); + privilegeGroupRequest.setPageSize(1000); + String body = JSONObject.toJSONString(privilegeGroupRequest); + try{ + //查询海康访客权限组,用于为访客分配对应区域的门禁访问 + String resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + JSONObject resultJson = (JSONObject)JSONObject.parse(resultStr); + if(!"0".equals(resultJson.get("code"))){ + log.error("项目启动初始化,请求海康,查询访客权限组失败,海康response:{}", resultStr); + //失败再请求2次 + for (int i = 0; i < 2; i++) { + resultStr = HikUtil.hikApi(HikUri.PRIVILEGE_GROUP, body); + resultJson = (JSONObject)JSONObject.parse(resultStr); + if("0".equals(resultJson.get("code"))){ + break; + } + } + } + JSONObject jsonData = (JSONObject)resultJson.get("data"); + JSONArray list = jsonData.getJSONArray("list"); + if(CollectionUtils.isEmpty(list)){ + log.error("项目启动初始化,请求海康,查询访客权限组获取权限list为空"); + return; + } + //初始化map + for (int i = 1; i < 8; i++) { + map.put(String.valueOf(i), new ArrayList<>()); + } + for (Object o : list) { + JSONObject jsonObject = (JSONObject)o; + String privilegeGroupName = jsonObject.getString("privilegeGroupName"); + //以下为字典中取值 + //1、一期主楼,2、二期主楼,3、录制楼,4、1600演播厅,5、大院工作区,6、大院生活区(户外),7、食堂 + //根据海康配置的权限组名字进行组装map + if("一期主楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("1"); + list1.add(privilegeGroupId); + map.put("1", list1); + }else if(privilegeGroupName.contains("二期主楼") || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("2"); + list1.add(privilegeGroupId); + map.put("2", list1); + }else if("录制楼".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("3"); + list1.add(privilegeGroupId); + map.put("3", list1); + } + if(privilegeGroupName.contains("大院") || "西二门".equals(privilegeGroupName) || privilegeGroupName.contains("北区车库")){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("5"); + list1.add(privilegeGroupId); + map.put("5", list1); + } + if("大院西门".equals(privilegeGroupName) || "西二门".equals(privilegeGroupName)){ + String privilegeGroupId = jsonObject.getString("privilegeGroupId"); + List list1 = map.get("6"); + list1.add(privilegeGroupId); + map.put("6", list1); + } + } + System.out.println(map); + }catch (Exception e){ + log.error("初始化访客权限组失败,异常:{}", e.getMessage()); + } + + } + + public List getPositionPrivilegeMap(String key){ + return map.get(key); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java index ad858b6..6beaceb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/DeviceController.java @@ -260,7 +260,7 @@ @PostMapping("/gateGroup/statusControl") @ResponseBody public Object gateStatusControl(@RequestBody GateGroupDTO gateGroupDTO) { - // TODO: 2022/7/27 门禁状态字典要与海康的状态相同 + //门禁状态字典与海康的状态相同 //0: 常开 //1: 门闭 //2: 门开 diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java index f5b21d7..85d07c4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffController.java @@ -145,4 +145,35 @@ public Object personPicture(@PathVariable("staffCode") String staffCode){ return staffInfoService.getStaffPicture(staffCode); } + + /** + * 人员卡片信息 + * 海康每人最多5张卡 + */ + @PostMapping("/cardList") + @ResponseBody + public Object cardList(String staffCode){ + return ResponseData.success(staffInfoService.getStaffCardList(staffCode)); + } + + /** + * 导出(只员工列表是全部导出) + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { + List caseInfos = staffInfoService.staffInfoList(staffInfoRequest); + super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); + } + +// /** +// * 导出(分页导出,废弃) +// */ +// @RequestMapping("/export") +// @ResponseBody +// public void listExport(StaffInfoRequest staffInfoRequest) throws IOException { +// Page page = PageFactory.defaultPage(); +// List caseInfos = staffInfoService.staffInfoListPage(page, staffInfoRequest); +// super.exportExcel(StaffInfo.class, caseInfos, "StaffInfo"); +// } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java new file mode 100644 index 0000000..f547203 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/StaffInoutLogController.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * @Description: 员工进出记录管理Controller + * @Author: wangpeng + * @Date: 2022/12/08 17:10 + */ + +@Slf4j +@RestController +@RequestMapping("/inoutInfo") +public class StaffInoutLogController extends ExportController { + @Autowired + private StaffInoutLogService inoutLogService; + + /** + * 员工进出记录列表(分页) + */ + @PostMapping("/listPage") + @ResponseBody + public Object listPage(StaffInoutLogRequest inoutLogRequest) { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + page.setRecords(inoutLogs); + return ResponseData.success(super.packForBT(page)); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(StaffInoutLogRequest inoutLogRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List inoutLogs = inoutLogService.staffInoutLogListPage(page, inoutLogRequest); + super.exportExcel(StaffInoutLog.class, inoutLogs, "StaffInoutLog"); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java index bd265c9..bfcf473 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/UtilController.java @@ -86,8 +86,8 @@ String resultStr = HikUtil.hikApi(HikUri.ACS_DEVICE_LIST, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { - log.error("请求海康,查询门禁设备列表v2失败,海康response:{}", resultStr); - return ResponseData.error("查询门禁设备列表失败"); + log.error("请求海康,查询门禁点列表v2失败,海康response:{}", resultStr); + return ResponseData.error("查询门禁点列表v2失败"); } List acsDeviceList = new ArrayList<>(); JSONObject data = (JSONObject) resultJson.get("data"); @@ -96,11 +96,11 @@ while(iterator.hasNext()){ JSONObject next = (JSONObject) iterator.next(); String indexCode = next.getString("indexCode"); - String ip = next.getString("ip"); - if(StringUtils.isNotEmpty(ip)){ + String name = next.getString("name"); + if(StringUtils.isNotEmpty(name)){ AcsDeviceListDTO acsDeviceListDTO = new AcsDeviceListDTO(); acsDeviceListDTO.setIndexCode(indexCode); - acsDeviceListDTO.setIp(ip); + acsDeviceListDTO.setName(name); acsDeviceList.add(acsDeviceListDTO); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java index 83045f5..f00aa12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/VisitorApplyController.java @@ -95,4 +95,25 @@ return ResponseData.success(); } + /** + * 访问申请单号获取 + */ + @GetMapping("/listCode") + @ResponseBody + public Object listCode() { + String code = visitorApplyService.visitorApplyListCode(); + return ResponseData.success(code); + } + + /** + * 导出 + */ + @RequestMapping("/export") + @ResponseBody + public void listExport(VisitorApplyRequest applyRequest) throws IOException { + Page page = PageFactory.defaultPage(); + List caseCategoryLevels = visitorApplyService.visitorApplyListPage(page, applyRequest); + super.exportExcel(VisitorApply.class, caseCategoryLevels, "StaffApply"); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java index a63865d..071424c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/CockpitController.java @@ -40,7 +40,7 @@ //查询海康门禁点事件v2,只查询当天的,将返回的list中的所有进出类型进行计算,得到当天的人数 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java index 9e063a9..f59ae03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/cockpit/PropertyManageController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.controller.cockpit; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceRepairLogDTO; import com.casic.missiles.modular.dto.DeviceRepairRequest; import com.casic.missiles.modular.dto.statistics.AttendanceRatioDTO; @@ -148,6 +149,16 @@ } /** + * 设备在线状态统计(可按楼层查询) + */ + @GetMapping("/device/status") + @ResponseBody + public Object statusDevice(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoService.getDeviceStatusGroupByArea(deviceAreaRequest); + return ResponseData.success(deviceStatusDTOS); + } + + /** * 安防事件时域频次统计,每月的每天安防事件个数(原方案) * 月维度:展示每个月的每天的数据 */ @@ -163,4 +174,14 @@ // }); // return ResponseData.success(resultList); // } + + /** + * 近1月高频事件排行榜 + */ + @GetMapping("/case/highFrequency") + @ResponseBody + public Object highFrequencyEvents() { + return propertyManageService.highFrequency(); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java index 34011af..3cf8b77 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/controller/hik/HikController.java @@ -25,15 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * @Description: 海康事件Controller @@ -84,6 +78,9 @@ list.add(SecurityEventType.VISITOR_REGISTER); list.add(SecurityEventType.VISITOR_CHECKOUT); list.add(SecurityEventType.HIGH_ALTITUDE_PARABOLIC); + list.add(SecurityEventType.CARD_COMPARE_PASS); + list.add(SecurityEventType.FACE_COMPARE_PASS); + list.add(SecurityEventType.FACE_CARD_COMPARE_PASS); // InetAddress localHost = InetAddress.getLocalHost(); eventSubscribeRequest.setEventTypes(list); eventSubscribeRequest.setEventDest("http://" + "192.168.10.6" + ":" + serverPort + "/eventRcv"); @@ -209,6 +206,11 @@ } else if (SecurityEventType.HIGH_ALTITUDE_PARABOLIC.equals(eventType)){ //高空抛物事件处理 caseInfo1 = hikService.highAltitudeParabolicHandle(event, caseInfo1); + } else if (SecurityEventType.CARD_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_COMPARE_PASS.equals(eventType) + || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + //门禁事件,添加到人员进出记录表 + hikService.doorPassHandle(event); } //过滤掉无发生时间 if (!Objects.isNull(caseInfo1) && !StringUtils.isEmpty(caseInfo1.getHappenTime()) && !StringUtils.isEmpty(caseInfo1.getDeviceCode())) { @@ -277,7 +279,7 @@ @ResponseBody public Object faceGroupAddition(@RequestBody FaceGroupAdditionRequest faceGroupAdditionRequest) { String body = JSONObject.toJSONString(faceGroupAdditionRequest); - String resultStr = HikUtil.hikApi(HikUri.FACEGROUP_SINGLE_ADDITION, body); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_SINGLE_ADDITION, body); JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); if (!"0".equals(resultJson.get("code"))) { log.error("请求海康,单个添加人脸分组失败,海康response:{}", resultStr); @@ -295,6 +297,17 @@ } /** + * 人脸分组查询 + */ + @PostMapping("/hik/faceGroup/query") + @ResponseBody + public Object faceGroupAddition(@RequestBody Map map) { + String body = JSONObject.toJSONString(map); + String resultStr = HikUtil.hikApi(HikUri.FACE_GROUP_QUERY, body); + return ResponseData.success(resultStr); + } + + /** * 批量添加海康组织 * api->hik批量添加组织api->response */ @@ -335,14 +348,14 @@ /** * 获取组织列表 */ - @PostMapping("/hik/org/orgList") + @GetMapping("/hik/org/orgList") @ResponseBody public Object orgList() { PersonListRequest request = new PersonListRequest(); request.setPageNo(1); - request.setPageSize(100); + request.setPageSize(1000); String body = JSONObject.toJSONString(request); - String resultStr = HikUtil.hikApi("/api/resource/v1/org/orgList", body); + String resultStr = HikUtil.hikApi(HikUri.ORG_LIST, body); return resultStr; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java index af971b6..09e2a84 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/CaseInfoMapper.java @@ -91,4 +91,6 @@ List selectPreDayCountByBeforeMonth(); List selectListByBeforeMonthKeyArea(); + + List getCountForRank(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java index 222b0c6..13d0a12 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/DeviceInfoMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.DeviceAreaRequest; import com.casic.missiles.modular.dto.DeviceInfoDTO; import com.casic.missiles.modular.dto.DeviceInfoRequest; import com.casic.missiles.modular.dto.hik.AcsDeviceListDTO; @@ -35,7 +36,7 @@ List selectByType(@Param("devType") String devType); - int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status")String status); + int updateStatusBatchByCodes(@Param("deviceCodes") List deviceCodes, @Param("status") String status); int updateDeviceInfoBatch(@Param("acsDeviceList") List acsDeviceList); @@ -43,4 +44,5 @@ List selectDeviceStatusGroupByStatus(); + List selectDeviceStatusGroupByStatusAndArea(@Param("deviceAreaRequest") DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java index 4c94656..f4a47fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.statistics.StaffTypeAndSumDTO; import com.casic.missiles.modular.model.StaffInfo; import org.apache.ibatis.annotations.Mapper; @@ -34,4 +35,6 @@ List selectCountByType(); List selectListLimitTen(); + + int saveOrUpdateStaffInfoBatch(@Param("personList") List personList); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java new file mode 100644 index 0000000..f42802e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/StaffInoutLogMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Description: 员工进出记录mapper + * @Author: wangpeng + * @Date: 2022/12/08 10:23 + */ +@Mapper +public interface StaffInoutLogMapper extends BaseMapper { + + List selectStaffInoutLogList(@Param("page") Page page, @Param("inoutLogRequest") StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java index df6985a..f65083e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/VisitorApplyMapper.java @@ -23,4 +23,6 @@ List selectByVisitReason(); List selectListBySevenDay(); + + String selectListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml index 60bd1ea..ff9e9a0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/AttendanceInfoMapper.xml @@ -7,7 +7,7 @@ FROM bus_attendance_info WHERE 1=1 - and (staff_code like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like + and (job_no like concat('%',#{attendanceInfoRequest.keywords},'%') or staff_name like concat('%',#{attendanceInfoRequest.keywords},'%')) @@ -17,10 +17,10 @@ and phone = #{attendanceInfoRequest.phone} - and DATE_FORMAT(atte_start_time,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") >= DATE_FORMAT(#{attendanceInfoRequest.startDate},"%y%m%d") - and DATE_FORMAT(atte_end_time,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") + and DATE_FORMAT(atte_date,"%y%m%d") <= DATE_FORMAT(#{attendanceInfoRequest.endDate},"%y%m%d") ORDER by create_time DESC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml index 614dc91..6625f86 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/CaseInfoMapper.xml @@ -372,4 +372,14 @@ AND hazard_level_code is not null AND is_key_area = 1 + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml index 9ec3467..1290fee 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/DeviceInfoMapper.xml @@ -112,7 +112,7 @@ update bus_device_info set index_code = #{device.indexCode} - where ip = #{device.ip} + where dev_name = #{device.name} @@ -128,4 +128,17 @@ FROM bus_device_info GROUP BY status + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml index 4aa130b..0e7b93d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/FireEquipInfoMapper.xml @@ -4,21 +4,27 @@ @@ -33,11 +35,17 @@ FROM bus_staff_info WHERE 1=1 - and (staff_code like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) + and (job_no like concat('%',#{staffInfoRequest.keywords},'%') or staff_name like concat('%',#{staffInfoRequest.keywords},'%')) and staff_type = #{staffInfoRequest.staffType} + + and phone like concat('%',#{staffInfoRequest.phone},'%') + + + and card_num like concat('%',#{staffInfoRequest.cardNum},'%') + ORDER by create_time DESC @@ -82,4 +90,17 @@ WHERE staff_type = 2 LIMIT 10 + + + INSERT INTO bus_staff_info (staff_code, job_no, staff_face_id, staff_name, staff_gender, staff_type, staff_id_card, phone, org_index_code, card_num) + VALUES + + (#{item.personId}, #{item.jobNo}, #{item.faceId}, #{item.personName}, #{item.gender}, #{item.personType}, #{item.idCard}, #{item.phone}, #{item.orgIndexCode}, #{item.cardNum}) + + ON DUPLICATE KEY UPDATE + staff_face_id = values(staff_face_id), + staff_name = values(staff_name), + staff_id_card = values(staff_id_card), + card_num = values(card_num) + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml new file mode 100644 index 0000000..d8d0725 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/StaffInoutLogMapper.xml @@ -0,0 +1,39 @@ + + + + + bsil.id, asset_id, file_name, minio_file_name, remark, create_user, is_del, create_time, update_time + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml index 42f0645..47ad927 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/dao/mapping/VisitorApplyMapper.xml @@ -6,8 +6,28 @@ SELECT * FROM bus_visit_apply WHERE 1=1 - - and visitor_name like concat('%',#{visitorApplyRequest.keywords},'%') + + and ( + staff_name like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_phone like concat('%',#{visitorApplyRequest.staffKeywords},'%') or + staff_code like concat('%',#{visitorApplyRequest.staffKeywords},'%') + ) + + + and ( + visitor_name like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + visitor_phone like concat('%',#{visitorApplyRequest.visitorKeywords},'%') or + id_card like concat('%',#{visitorApplyRequest.visitorKeywords},'%') + ) + + + and list_code like concat('%',#{visitorApplyRequest.listCode},'%') + + + and application_type = #{visitorApplyRequest.applicationType} + + + and status = #{visitorApplyRequest.applicationStatus} and visit_reason = #{visitorApplyRequest.visitReason} @@ -35,4 +55,8 @@ WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(out_time) AND appoint_record_id is not null + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java new file mode 100644 index 0000000..9468b8c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/CardListResponse.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: 卡片列表响应实体 + * @Author: wangpeng + * @Date: 2022/12/16 12:01 + */ +@Data +public class CardListResponse { + private String cardNum; + private String statusName; + private String startTime; + private String endTime; + private String features; + private String cancelTime; + private String unhookTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java new file mode 100644 index 0000000..8cfabb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/DeviceAreaRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/7/19 14:49 + */ +@Data +public class DeviceAreaRequest { + private String position; + private String area; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java index e74998c..ee58a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/FireEquipRequest.java @@ -13,4 +13,8 @@ private String equipName; private String equipType; private String position; + //生产日期 + private String productDate; + //截止有效期 + private String expireDate; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java index e0bcc03..11c72a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInfoRequest.java @@ -15,4 +15,7 @@ //起止日期,考勤列表使用 private String startDate; private String endDate; + + //卡编号 + private String cardNum; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java new file mode 100644 index 0000000..3662ba6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/StaffInoutLogRequest.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.dto; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 17:26 + */ +@Data +public class StaffInoutLogRequest { + //员工号/员工姓名关键字模糊查询 + private String staffKeywords; + + //门禁编号/名称/区域关键字模糊查询 + private String doorKeywords; + + //进出方式(字典) + private String inoutType; + //通过方式(字典) + private String passWay; + //起始时间 + private String startTime; + //终止时间 + private String endTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java index 1321ea4..2430f99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/VisitorApplyRequest.java @@ -9,9 +9,20 @@ */ @Data public class VisitorApplyRequest { - private String keywords; +// private String keywords; private String visitReason; private String position; private String startTime; private String endTime; + + //申请单号 + private String listCode; + //申请类型 + private String applicationType; + //申请状态 + private String applicationStatus; + //员工姓名/身份证/联系方式关键字模糊查询 + private String staffKeywords; + //访客姓名/身份证/联系方式关键字模糊查询 + private String visitorKeywords; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java index a3bf376..cd244ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AcsDeviceListDTO.java @@ -11,6 +11,6 @@ public class AcsDeviceListDTO { //门禁点编号 private String indexCode; - //ip - private String ip; + //门禁点名称 + private String name; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java index aaf34cf..110680d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/AppointmentFreeRegisterRequest.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.util.List; + /** * @Description: 海康-预约免登记请求实体 * @Author: wangpeng @@ -28,4 +30,9 @@ //预约记录ID,修改预约使用 private String appointRecordId; + //访客列表,修改访客申请接口参数 + private List visitorInfoList; + + private VisitorPermissionSet visitorPermissionSet; + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java new file mode 100644 index 0000000..e3509ed --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/OrgListRequest.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/8 16:53 + */ +@Data +public class OrgListRequest { + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java index 3f7149b..2a3edaf 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonListRequest.java @@ -13,4 +13,7 @@ private Number pageSize; private String orderId; + + //查询卡片列表参数-人员ID集 + private String personIds; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java new file mode 100644 index 0000000..1d531ba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PersonSyncListDTO.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 海康人员同步DTO + * @Author: wangpeng + * @Date: 2022/12/7 15:02 + */ +@Data +public class PersonSyncListDTO { + private Long Id; + private String personId; + private String jobNo; + private String faceId; + private String personName; + private String gender; + private String personType; + private String idCard; + private String phone; + private String orgIndexCode; + private String cardNum; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java new file mode 100644 index 0000000..fd3ef8a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/PrivilegeGroupRequest.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +/** + * @Description: 查询访客权限组请求实体 + * @Author: wangpeng + * @Date: 2023/1/4 14:16 + */ +@Data +public class PrivilegeGroupRequest { + private String name; + private Number pageNo; + private Number pageSize; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java new file mode 100644 index 0000000..349c1dc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/hik/VisitorPermissionSet.java @@ -0,0 +1,16 @@ +package com.casic.missiles.modular.dto.hik; + +import lombok.Data; + +import java.util.List; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/1/4 17:01 + */ +@Data +public class VisitorPermissionSet { + private List privilegeGroupIds; + private String defaultPrivilegeGroupFlag; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java new file mode 100644 index 0000000..6b3e27c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/dto/statistics/HighFrequencyRankDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.dto.statistics; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/20 11:03 + */ +@Data +public class HighFrequencyRankDTO { + private String typeName; + private Integer quantity; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java index a902479..a054a51 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/HikUri.java @@ -19,13 +19,17 @@ //取消访客预约 String APPOINTMENT_CANCEL = "/api/visitor/v1/appointment/cancel"; //单个添加人脸分组 - String FACEGROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + String FACE_GROUP_SINGLE_ADDITION = "/api/frs/v1/face/group/single/addition"; + //按条件查询人脸分组 + String FACE_GROUP_QUERY = "/api/frs/v1/face/group"; //单个添加人脸 String FACE_SINGLE_ADDITION = "/api/frs/v1/face/single/addition"; //批量删除人脸 String FACE_BATCH_DELETION = "/api/frs/v1/face/deletion"; //单个修改人脸 String FACE_SINGLE_UPDATE = "/api/frs/v1/face/single/update"; + //按条件批量查询人脸 + String FACE_CONDITION = "/api/frs/v1/face"; //批量添加组织 String ORG_BATCH_ADD = "/api/resource/v1/org/batch/add"; //单个添加人员 @@ -52,7 +56,13 @@ String SEARCH_PICTURES = "/api/frs/v1/application/captureSearch"; //获取人员列表v2 String PERSON_LIST = "/api/resource/v2/person/personList"; - //门禁设备列表 - String ACS_DEVICE_LIST = "/api/resource/v2/acsDevice/search"; + //查询门禁点列表v2 + String ACS_DEVICE_LIST = "/api/resource/v2/door/search"; + //获取组织列表 + String ORG_LIST = "/api/resource/v1/org/orgList"; + //查询卡片列表 + String CARD_LIST = "/api/irds/v1/card/advance/cardList"; + //查询访客权限组 + String PRIVILEGE_GROUP = "/api/visitor/v1/privilege/group"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java index 84e98a5..6381235 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventDict.java @@ -7,6 +7,7 @@ */ public interface SecurityEventDict { String STAFF_TYPE = "staffType"; + String SYS_SEX = "sysSex"; String CASE_STATUS = "caseStatus"; String ASSET_TYPE = "assetType"; String DEVICE_TYPE = "deviceType"; @@ -19,4 +20,8 @@ String GROUP_DEVICE_STATUS = "groupDeviceStatus"; String EQUIP_TYPE = "equipType"; String FIRE_LEVEL = "fireLevel"; + String PASS_WAY = "passWay"; + String INOUT_TYPE = "inoutType"; + String APPLICATION_STATUS = "applicationStatus"; + String APPLICATION_TYPE = "applicationType"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java index 42eacf8..9619d63 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/enums/SecurityEventType.java @@ -32,8 +32,12 @@ Number CARD_COMPARE_PASS = 198914; //人脸认证通过 Number FACE_COMPARE_PASS = 196893; - - + //人证比对通过(海康客服:有的设备刷脸会产生人证比对通过事件) + Number FACE_CARD_COMPARE_PASS = 197162; +// //人脸认证失败 +// Number FACE_COMPARE_FAIL = 197151; +// //人证比对失败 +// Number FACE_CARD_COMPARE_FAIL = 197163; // //正常开门 // Number NORMAL_OPENING = 198913; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java index 85dd016..bb00c7c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/job/CockpitJob.java @@ -2,21 +2,29 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.config.AccessGroupConfig; import com.casic.missiles.modular.dao.StatisticNumberMapper; import com.casic.missiles.modular.dto.hik.DoorEventsRequest; +import com.casic.missiles.modular.dto.hik.PersonListRequest; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; +import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.StatisticNumber; import com.casic.missiles.modular.service.CockpitService; +import com.casic.missiles.modular.service.StaffInfoService; +import com.casic.missiles.modular.util.HikUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @Description: 驾驶舱驻留页面-定时推送任务 @@ -30,15 +38,14 @@ @Autowired private AccessGroupConfig accessGroupConfig; - @Autowired private CockpitService cockpitService; - @Autowired private StatisticNumberMapper statisticNumberMapper; - @Autowired private AbstractDictService dictService; + @Autowired + private StaffInfoService staffInfoService; /** * 统计一期二期楼栋,每小时存储各楼栋人数 @@ -48,12 +55,12 @@ log.info("定时任务执行,每小时存储各楼栋人数"); //每小时人数存储 DoorEventsRequest doorEventsRequest = new DoorEventsRequest(); - // TODO: 2022/7/29 将所属楼栋及楼栋内的门禁点列表放到yml中 + //yml获取楼栋门禁点配置 HashMap> configMap = accessGroupConfig.getConfigMap(); HashMap jsonMap = new HashMap<>(); HashMap resultMap = new HashMap<>(); cockpitService.dataHandle(doorEventsRequest, configMap, jsonMap, resultMap); - if(resultMap.size() == 0){ + if (resultMap.size() == 0) { //将当前时间的人数置为0 configMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); @@ -62,11 +69,11 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(0); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败1"); } }); - }else{ + } else { resultMap.keySet().forEach(key -> { StatisticNumber statisticNumber = new StatisticNumber(); statisticNumber.setStatisticPosition(String.valueOf(key)); @@ -74,11 +81,160 @@ statisticNumber.setStatisticPositionName(dictName); statisticNumber.setStatisticTime(DateUtil.now()); statisticNumber.setStatisticQuantity(resultMap.get(key)); - if(statisticNumberMapper.insert(statisticNumber) <= 0){ + if (statisticNumberMapper.insert(statisticNumber) <= 0) { log.info("定时任务,每小时存储各楼栋人数入库失败2"); } }); } } + /** + * 每星期一的零点同步海康人员数据 + * 包括工号、姓名、手机号、照片(照片不用存,查询时候会调海康) + * staffCode=personId,staffType=orgIndexCode,faceId=personPhotoIndexCode + */ + @Scheduled(cron = "0 0 0 ? * 2") + @Transactional +// @PostConstruct +// @Scheduled(cron = "0 0/1 * * * ?") + public void syncHikStaff() { + //海康获取人员列表v2接口 + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(200); //一个人最多开5张卡,保证卡片分页可用1000 + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_LIST, body); + List personList = new ArrayList<>(); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + getSyncPersonList(request, resultJson, personList); + JSONObject dataJson = (JSONObject) resultJson.get("data"); + //海康分页限制,需循环请求数据 + Integer page = (Integer) dataJson.get("total") / 200 + 1; + if (page > 1) { + for (int i = 2; i <= page; i++) { + request.setPageNo(i); + String body1 = JSONObject.toJSONString(request); + String resultStr1 = HikUtil.hikApi(HikUri.PERSON_LIST, body1); + if (StringUtils.isNotEmpty(resultStr1)) { + JSONObject resultJson1 = (JSONObject) JSONObject.parse(resultStr1); + getSyncPersonList(request, resultJson1, personList); + } + } + } + + int i = staffInfoService.saveOrUpdateStaffInfoBatch(personList); + if (i >= 0) { + return; + } + log.error("---------------------批量保存海康人员数据失败"); + + } + + private List getSyncPersonList(PersonListRequest request, JSONObject resultJson, List personList) { + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,获取人员列表v2失败,海康response:{}", resultJson.toJSONString()); + log.error("----------------------同步海康人员数据失败,requestPageNo:{},时间:{}", request.getPageNo(), DateUtil.now()); + return personList; + } + JSONObject data = (JSONObject) resultJson.get("data"); + JSONArray dataArray = (JSONArray) data.get("list"); + Iterator iterator = dataArray.stream().iterator(); + while (iterator.hasNext()) { + JSONObject next = (JSONObject) iterator.next(); + String personId = next.getString("personId"); + String jobNo = next.getString("jobNo"); + String personName = next.getString("personName"); + Integer gender = next.getInteger("gender"); + String phoneNo = next.getString("phoneNo"); + Long certificateType = next.getLong("certificateType"); + String certificateNo = ""; + if (StringUtils.isNoneBlank(next.getString("certificateNo")) && 111 == certificateType) { + certificateNo = next.getString("certificateNo"); + } + String faceId = ""; + JSONArray personPhotos = (JSONArray) next.get("personPhoto"); + if (!Objects.isNull(personPhotos)) { + JSONObject personPhoto = (JSONObject) personPhotos.get(0); + faceId = personPhoto.getString("personPhotoIndexCode"); + } + String orgIndexCode = next.getString("orgIndexCode"); + PersonSyncListDTO personSyncListDTO = new PersonSyncListDTO(); + //物业人员(广州广电城市服务集团股份有限公司) + if ("f7671dbc-4bed-4921-8b4c-2bb1831dfeb7".equals(orgIndexCode)) { + //由于安保人员和物业人员都在海康物业人员组织中,根据安保人员人脸分组获取人脸信息,根据人脸名字匹配安保人员(id不可以),设置安保人员类型 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("faceGroupIndexCode", "9f8c3c6b3d254279852d6f57862fece3"); + String body = JSONObject.toJSONString(jsonObject); + String resultStr = HikUtil.hikApi(HikUri.FACE_CONDITION, body); + log.info("项目启动,按条件批量查询人脸resultStr:{}", JSONObject.toJSONString(resultStr)); + JSONObject result = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(result.get("code"))) { + log.error("请求海康,项目启动,按条件批量查询人脸失败,海康response:{}", resultStr); + } + JSONObject dataJson = (JSONObject) result.get("data"); + List indexCodeList = new ArrayList<>(); + if (!Objects.isNull(dataJson)) { + JSONArray list = dataJson.getJSONArray("list"); + list.stream().forEach(o -> { + JSONObject jsonObject1 = (JSONObject) o; + JSONObject faceInfo = jsonObject1.getJSONObject("faceInfo"); + String name = faceInfo.getString("name"); + indexCodeList.add(name); + }); + } + + if (indexCodeList.contains(personName)) { + personSyncListDTO.setPersonType("2"); + } + + if (StringUtils.isEmpty(personSyncListDTO.getPersonType())) { + personSyncListDTO.setPersonType("1"); + } + } else { + //正式员工(非广州广电城市服务集团股份有限公司) + personSyncListDTO.setPersonType("3"); + } + personSyncListDTO.setOrgIndexCode(orgIndexCode); + personSyncListDTO.setPersonId(personId); + personSyncListDTO.setJobNo(jobNo); + personSyncListDTO.setPersonName(personName); + personSyncListDTO.setGender(String.valueOf(gender)); + personSyncListDTO.setPhone(phoneNo); + personSyncListDTO.setIdCard(certificateNo); + personSyncListDTO.setFaceId(faceId); + personList.add(personSyncListDTO); + } + //获取卡号,批量获取人员卡号 + List personIdList = dataArray.stream().map(o -> { + JSONObject jsonObject = (JSONObject) o; + return jsonObject.getString("personId"); + }).collect(Collectors.toList()); + String personIds = StringUtils.join(personIdList, ","); + PersonListRequest request1 = new PersonListRequest(); + request1.setPageNo(1); + request1.setPageSize(1000); + request1.setPersonIds(personIds); + String body = JSONObject.toJSONString(request1); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + String personId = jsonObject.getString("personId"); + String cardNo = jsonObject.getString("cardNo"); + personList.forEach(person -> { + if (person.getPersonId().equals(personId)) { + //卡片字段存储格式xxx,yyy,zzz,一个人最多支持5张卡 + if (StringUtils.isNotEmpty(person.getCardNum())) { + person.setCardNum(person.getCardNum() + "," + cardNo); + } else { + person.setCardNum(cardNo); + } + } + }); + }); + return personList; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java index c4ca3f1..71e3315 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/AttendanceInfo.java @@ -16,6 +16,7 @@ @TableId private Long id; private String staffCode; + private String jobNo; private String staffName; private String staffGender; private String staffType; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java index 0dc8104..47c1eb1 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInfo.java @@ -30,22 +30,35 @@ public class StaffInfo extends Model { @TableId private Long id; - @ExcelProperty("员工编号") +// @ExcelProperty("员工编号") private String staffCode; + @ExcelProperty("员工编号") + private String jobNo; + //海康员工组织编号 + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + private String deptName; + @ExcelProperty("卡号") + private String cardNum; + private String staffFaceId; @ExcelProperty("姓名") private String staffName; - @ExcelProperty("性别") + private String staffGender; + @ExcelProperty("性别") + @TableField(exist = false) + private String staffGenderName; @ExcelProperty("身份证号") private String staffIdCard; - @ExcelProperty("员工类型") private String staffType; + @ExcelProperty("员工类型") @TableField(exist = false) private String staffTypeName; @ExcelProperty("手机号") private String phone; - @ExcelProperty("照片") +// @ExcelProperty("照片") private String picture; @ExcelProperty("工作起始日期") private String onDate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java new file mode 100644 index 0000000..14c22d6 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/StaffInoutLog.java @@ -0,0 +1,108 @@ +package com.casic.missiles.modular.model; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * @Description: 员工进出实体类 + * @Author: wangpeng + * @Date: 2022/12/08 10:24 + */ +@ColumnWidth(30) +@HeadRowHeight(15) +@ContentRowHeight(20) +@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN) +@ExcelIgnoreUnannotated +@Data +@TableName("bus_staff_inout_log") +public class StaffInoutLog extends Model { + @TableId + private Long id; +// @ExcelProperty("员工编号") + private String staffCode; + //以下字段与员工表联表查询获取 + @ExcelProperty("员工编号") + private String jobNo; + @ExcelProperty("员工姓名") + @TableField(exist = false) + private String staffName; + @ExcelProperty("卡号") + private String cardNum; + //海康员工组织编号 + @TableField(exist = false) + private String orgIndexCode; + //海康员工组织编号对应名字 + @TableField(exist = false) + @ExcelProperty("所属组织") + private String deptName; + + //海康控制器设备唯一接入编码(设备表index_code) + private String srcIndex; + //海康控制器设备唯一接入编码 + private String indexCode; + //以下字段与设备表联表查询获取 + @ExcelProperty("门禁点名称") + @TableField(exist = false) + private String doorName; + @ExcelProperty("门禁点编号") + @TableField(exist = false) + private String doorCode; + + @TableField(exist = false) + private String doorArea; + + //4个楼,字典值 + @TableField(exist = false) + private String position; + @ExcelProperty("所在区域") + @TableField(exist = false) + private String positionName; + //楼层划分,字典值 + @TableField(exist = false) + private String area; + @ExcelProperty("所在楼层") + @TableField(exist = false) + private String areaName; + @ExcelProperty("详细位置") + @TableField(exist = false) + private String detailLocation; + + //海康门禁通道号(ExtAccessChannel) +// @ExcelProperty("门禁通道号") + private Integer channelNum; + @ExcelProperty("门禁通道") + private String wayName; + //进出方向(1进0出-1未知) + private String inoutType; + @TableField(exist = false) + @ExcelProperty("进出方式") + private String inoutTypeName; + + //通过方式(卡、人脸、身份证),字典code + private String passWay; + @ExcelProperty("通过方式") + @TableField(exist = false) + private String passWayName; + //描述,刷卡比对成功、人脸比对成功、身份证核对成功 + @ExcelProperty("描述") + private String description; + @ExcelProperty("通过时间") + private String passTime; + + //照片 + @TableField(exist = false) + private String picture; + + private String createTime; + private String updateTime; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java index 7b8105e..c1eb85d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/model/VisitorApply.java @@ -27,6 +27,16 @@ @Data @TableName("bus_visit_apply") public class VisitorApply { + //申请单号 + @ExcelProperty("申请单号") + private String listCode; + //申请类型(字典code) + private String applicationType; + //申请类型(字典value) + @ExcelProperty("申请类型") + @TableField(exist = false) + private String applicationTypeName; + @TableId private Long id; @ExcelProperty("访客姓名") @@ -39,14 +49,16 @@ private String visitorPhone; @ExcelProperty("访问目的") private String visitReason; - @ExcelProperty("访问楼栋") + private String visitPosition; + @ExcelProperty("访问楼栋") @TableField(exist = false) private String visitPositionName; @ExcelProperty("备注") private String remarks; - @ExcelProperty("状态") + private String status; + @ExcelProperty("状态") @TableField(exist = false) private String statusName; @ExcelProperty("申请者工号") diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java index d6a3fcb..7e29e1f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/DeviceInfoService.java @@ -64,4 +64,6 @@ Map>> getCameraMap(String keywords, List positionIds, List areaIds); DeviceInfo deviceInfoByDrawNo(String drawNo); + + List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java index bc4ce9f..fbfbc55 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/HikService.java @@ -33,4 +33,6 @@ void deviceOnlineHandle(JSONObject event); CaseInfo highAltitudeParabolicHandle(JSONObject event, CaseInfo caseInfo); + + void doorPassHandle(JSONObject event); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java index 178b909..5b8189f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/PropertyManageService.java @@ -40,4 +40,6 @@ Object patrol(); Object other(); + + Object highFrequency(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java index 0b31726..c1f6d03 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInfoService.java @@ -1,8 +1,11 @@ package com.casic.missiles.modular.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.PersonListDTO; +import com.casic.missiles.modular.dto.hik.PersonSyncListDTO; import com.casic.missiles.modular.dto.hik.StaffCardRequest; import com.casic.missiles.modular.model.StaffInfo; @@ -13,7 +16,7 @@ * @Author: wangpeng * @Date: 2022/7/19 18:37 */ -public interface StaffInfoService { +public interface StaffInfoService extends IService { List staffInfoListPage(Page page, StaffInfoRequest staffInfoRequest); @@ -36,4 +39,8 @@ int updateStaffInfoBatch(List personList); Object getStaffPicture(String staffCode); + + int saveOrUpdateStaffInfoBatch(List personList); + + List getStaffCardList(String staffCode); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java new file mode 100644 index 0000000..5a92eba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/StaffInoutLogService.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.model.StaffInoutLog; + +import java.util.List; + +/** + * @Description: 员工service + * @Author: wangpeng + * @Date: 2022/7/19 18:37 + */ +public interface StaffInoutLogService extends IService { + + List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java index 0c5da7a..b521f30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/VisitorApplyService.java @@ -23,4 +23,6 @@ int deleteVisitorApply(VisitorApply visitorApply); int deleteBatchVisitorApply(List ids); + + String visitorApplyListCode(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java index f370c06..799b01d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/BlackInfoServiceImpl.java @@ -95,7 +95,7 @@ //数据库照片存海康的人脸url JSONObject facePicture = (JSONObject)dataJson.get("facePic"); String faceUrl = facePicture.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + blackInfo.setPicture("https://192.168.10.2" + faceUrl); //插入数据库 if(blackInfoMapper.insert(blackInfo) > 0){ return ResponseData.success(); @@ -135,8 +135,7 @@ faceSingleAddOrUpdateRequest.setFaceInfo(faceInfo); FacePic facePic = new FacePic(); if(StringUtils.isNotEmpty(blackInfo.getPicture())){ - String substringPicture = blackInfo.getPicture().substring(blackInfo.getPicture().indexOf(",") + 1); - facePic.setFaceBinaryData(substringPicture); + facePic.setFaceUrl(blackInfo.getPicture()); } faceSingleAddOrUpdateRequest.setFacePic(facePic); String body = JSONObject.toJSONString(faceSingleAddOrUpdateRequest); @@ -166,7 +165,10 @@ JSONObject jsonObject = (JSONObject) dataArray.get(0); JSONObject facePicObject = jsonObject.getJSONObject("facePic"); String faceUrl = facePicObject.getString("faceUrl"); - blackInfo.setPicture(faceUrl); + if(StringUtils.isNotEmpty(faceUrl)){ + String replace1 = faceUrl.replace("https://192.168.10.2", ""); + blackInfo.setPicture(replace1); + } if(blackInfoMapper.updateById(blackInfo) > 0){ return ResponseData.success(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java index 7fb5a6e..f452b5f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/CockpitServiceImpl.java @@ -78,7 +78,8 @@ List doorIndexCodes = configMap.get(key); doorEventsRequest.setPageNo(1); doorEventsRequest.setPageSize(1000); - doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 + //海康该接口仅支持查10个门禁点,更改为查全量后筛选 +// doorEventsRequest.setDoorIndexCodes(doorIndexCodes); //门禁点列表 doorEventsRequest.setEventTypes(eventTypes); //事件类型列表 doorEventsRequest.setStartTime(startTime); //开始时间,当日0点 doorEventsRequest.setEndTime(endTime); //结束时间,当日23:59 @@ -89,18 +90,18 @@ log.error("请求海康,查询海康门禁点事件v2失败,海康response:{}", resultStr); return; } - JSONObject dataJson = (JSONObject)resultJson.get("data"); - if(Objects.isNull(dataJson)){ + JSONObject dataJson = (JSONObject) resultJson.get("data"); + if (Objects.isNull(dataJson)) { return; } - JSONArray dataArray = (JSONArray)dataJson.get("list"); - if(Objects.isNull(dataArray)){ + JSONArray dataArray = (JSONArray) dataJson.get("list"); + if (Objects.isNull(dataArray)) { return; } //海康分页限制,需循环请求数据 - if((Integer)dataJson.get("totalPage") > 1){ - for (int i = 2; i <=(Integer)dataJson.get("totalPage"); i++) { + if ((Integer) dataJson.get("totalPage") > 1) { + for (int i = 2; i <= (Integer) dataJson.get("totalPage"); i++) { doorEventsRequest.setPageNo(i); String body1 = JSONObject.toJSONString(doorEventsRequest); String resultStr1 = HikUtil.hikApi(HikUri.DOOR_EVENTS, body1); @@ -109,18 +110,26 @@ log.error("请求海康,循环查询海康门禁点事件v2失败,海康response:{}", resultStr1); return; } - JSONObject dataJson1 = (JSONObject)resultJson1.get("data"); - if(Objects.isNull(dataJson1)){ + JSONObject dataJson1 = (JSONObject) resultJson1.get("data"); + if (Objects.isNull(dataJson1)) { return; } - JSONArray dataArray1 = (JSONArray)dataJson1.get("list"); - if(Objects.isNull(dataArray1)){ + JSONArray dataArray1 = (JSONArray) dataJson1.get("list"); + if (Objects.isNull(dataArray1)) { return; } dataArray.addAll(dataArray1); } } - jsonMap.put(key, dataArray); + JSONArray arrays = new JSONArray(); + dataArray.stream().forEach(o -> { + JSONObject jsonObject = (JSONObject) o; + if (doorIndexCodes.contains(jsonObject.getString("doorIndexCode"))) { + arrays.add(jsonObject); + } + + }); + jsonMap.put(key, arrays); }); //构造结构 @@ -152,20 +161,21 @@ public Object buildingNumberPerHour() { //当天按小时分组的人数 List list = numberMapper.selectListByTime(); - Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime)); + Map> collect = list.stream().collect(Collectors.groupingBy(BuildingNumberDTO::getStatisticTime,LinkedHashMap::new,Collectors.toCollection(ArrayList::new))); //定时任务中已将每小时三栋楼人数存到数据库 - //将一期主楼和录制楼人数合并,二期单算 + //一期主楼和录制楼人数已在存储时合并 List> resultList = new ArrayList<>(); for (String key : collect.keySet()) { List buildingNumberDTOS = collect.get(key); BuildingNumberDTO mainBuildingOne = buildingNumberDTOS.get(0); BuildingNumberDTO mainBuildingTwo = buildingNumberDTOS.get(1); - BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); +// BuildingNumberDTO recordingBuilding = buildingNumberDTOS.get(2); HashMap resultMap = new HashMap<>(); - Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); - Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); +// Integer oneQuantity = Integer.valueOf(mainBuildingOne.getStatisticQuantity()); +// Integer recordingQuantity = Integer.valueOf(recordingBuilding.getStatisticQuantity()); resultMap.put("staticTime", mainBuildingOne.getStatisticTime()); - resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); +// resultMap.put(mainBuildingOne.getStatisticPositionName() + "、" + recordingBuilding.getStatisticPositionName(), String.valueOf(oneQuantity + recordingQuantity)); + resultMap.put(mainBuildingOne.getStatisticPositionName(), mainBuildingOne.getStatisticQuantity()); resultMap.put(mainBuildingTwo.getStatisticPositionName(), mainBuildingTwo.getStatisticQuantity()); resultList.add(resultMap); } @@ -225,10 +235,27 @@ @Override public Object visitorApplyDetail() { - List reasonGroup = applyMapper.selectByVisitReason(); + List oldReasonGroup = applyMapper.selectByVisitReason(); + List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); + List collect1 = visitReason.stream().map(Dict::getCode).collect(Collectors.toList()); + oldReasonGroup.stream().forEach(reason -> { + if (!collect1.contains(reason.getVisitReason())) { + //将临时即访设置为空,后面进行赋值 + reason.setVisitReason(""); + } + }); + List reasonGroup = new ArrayList<>(); + oldReasonGroup.stream().collect(Collectors.groupingBy(dto -> dto.getVisitReason(), + Collectors.summingInt(m -> m.getQuantity()))) + .forEach((k, v) -> { + ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); + applyReasonGroupDTO.setVisitReason(k); + applyReasonGroupDTO.setQuantity(v); + reasonGroup.add(applyReasonGroupDTO); + }); + List resultList = new ArrayList<>(); //空数据处理 - List visitReason = dictService.findInDictByCode(SecurityEventDict.VISIT_REASON); if (CollectionUtils.isEmpty(reasonGroup)) { for (Dict dict : visitReason) { ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); @@ -251,7 +278,11 @@ String result = numberFormat.format((float) group.getQuantity() / (float) sum * 100); ApplyReasonGroupDTO applyReasonGroupDTO = new ApplyReasonGroupDTO(); applyReasonGroupDTO.setQuantity(group.getQuantity()); - applyReasonGroupDTO.setVisitReason(reasonName); + if (StringUtils.isEmpty(reasonName)) { + applyReasonGroupDTO.setVisitReason("其他(临时即访)"); + } else { + applyReasonGroupDTO.setVisitReason(reasonName); + } applyReasonGroupDTO.setRatio(result + "%"); resultList.add(applyReasonGroupDTO); }); @@ -288,9 +319,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -309,9 +340,9 @@ results.stream().sorted(); results.stream().forEach(result -> { String monthName = String.valueOf(result.get("月份")); - if(monthName.length() == 1){ + if (monthName.length() == 1) { result.put("月份", monthAndLevelGroupDTO.getYear() + "-0" + monthName); - }else{ + } else { result.put("月份", monthAndLevelGroupDTO.getYear() + "-" + monthName); } }); @@ -378,8 +409,8 @@ for (String date : currentDateHourList) { OnDutyRatioDTO onDutyRatioDTO = new OnDutyRatioDTO(); onDutyRatioDTO.setDate(date); - onDutyRatioDTO.setRatio("0%"); - onDutyRatioDTO.setQuantity(String.valueOf(0)); + onDutyRatioDTO.setRatio("100%"); + onDutyRatioDTO.setQuantity(String.valueOf(total)); onDutyRatioDTOS.add(onDutyRatioDTO); } return ResponseData.success(onDutyRatioDTOS); @@ -549,7 +580,13 @@ @Override public Object securityFrequency() { String year = String.valueOf(DateUtil.thisYear()); - String month = String.valueOf(DateUtil.thisMonth()); + int monthInt = DateUtil.thisMonth()+1; + String month = ""; + if(monthInt < 10){ + month = "0"+monthInt; + }else{ + month = String.valueOf(monthInt); + } Integer quantity = caseInfoMapper.selectCountByMonth(year, month); SecurityFrequencyDTO securityFrequencyDTO = new SecurityFrequencyDTO(); securityFrequencyDTO.setQuantity(quantity); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java index f91d7bd..2dd34b6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/DeviceInfoServiceImpl.java @@ -21,11 +21,13 @@ import com.casic.missiles.modular.model.GroupDevice; import com.casic.missiles.modular.service.DeviceInfoService; import com.casic.missiles.modular.service.GroupDeviceService; +import com.casic.missiles.modular.system.model.Dict; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -179,7 +181,11 @@ if (CollectionUtil.isNotEmpty(list)) { return list; } - this.saveBatch(collect); + try{ + this.saveBatch(collect); + }catch (DuplicateKeyException exception){ + list.add("存在重复设备编号数据,请检查后重试"); + } } return list; } @@ -212,7 +218,8 @@ deviceRepairLogDTO.setCreateTime(v.get(0).getCreateTime()); list.add(deviceRepairLogDTO); }); - return list; + List collect = list.stream().sorted(Comparator.comparing(DeviceRepairLogDTO::getCreateTime).reversed()).collect(Collectors.toList()); + return collect; } @Override @@ -437,4 +444,29 @@ return deviceInfo; } + @Override + public List getDeviceStatusGroupByArea(DeviceAreaRequest deviceAreaRequest) { + List deviceStatusDTOS = deviceInfoMapper.selectDeviceStatusGroupByStatusAndArea(deviceAreaRequest); +// if(CollectionUtils.isEmpty(deviceStatusDTOS)){ +// return new ArrayList<>(); +// } + for (DeviceStatusDTO deviceStatusDTO : deviceStatusDTOS) { + String dictNameByCode = dictService.getDictNameByCode(SecurityEventDict.DEVICE_STATUS, deviceStatusDTO.getStatus()); + deviceStatusDTO.setStatusName(dictNameByCode); + } + List collect1 = deviceStatusDTOS.stream().map(DeviceStatusDTO::getStatusName).collect(Collectors.toList()); + List dict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); + List collect = dict.stream().map(Dict::getName).collect(Collectors.toList()); + collect.forEach(name -> { + if(!collect1.contains(name)){ + DeviceStatusDTO deviceStatusDTO = new DeviceStatusDTO(); + deviceStatusDTO.setStatusName(name); + deviceStatusDTO.setQuantity(0); + deviceStatusDTOS.add(deviceStatusDTO); + } + }); + + return deviceStatusDTOS; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java index d29d38d..0f02ccb 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/HikServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.dao.*; import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.enums.SecurityEventType; import com.casic.missiles.modular.model.*; import com.casic.missiles.modular.service.HikService; import com.casic.missiles.modular.system.model.Dict; @@ -49,6 +50,9 @@ @Autowired private CaseInfoMapper caseInfoMapper; + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Override public CaseInfo blackListHandle(JSONObject event, CaseInfo caseInfo) { JSONObject data = event.getJSONObject("data"); @@ -59,7 +63,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -86,7 +90,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -122,7 +126,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -160,7 +164,7 @@ String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); - // TODO: 2022/7/28 事件状态字典值选择 + //事件状态字典值选择 caseInfo.setStatus(dict.get(0).getCode()); //事件状态("未解决"的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); if(Objects.isNull(deviceInfo)){ @@ -176,7 +180,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -195,7 +199,7 @@ log.info("接收到监控点上线事件,但数据库中无该事件发生的设备信息, srcIndex:{}", srcIndex); return; } - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); int upDevFlag = deviceInfoMapper.updateById(deviceInfo); @@ -217,7 +221,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -234,7 +238,7 @@ caseInfo.setDetailLocation(deviceInfo.getDetailLocation()); caseInfo.setDrawNo(deviceInfo.getDrawNo()); //图纸编号 //更新设备状态 - // TODO: 2022/7/28 设备离线字典值选择 + //设备离线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(1).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -250,7 +254,7 @@ public void deviceOnlineHandle(JSONObject event) { String srcIndex = event.getString("srcIndex"); DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); - // TODO: 2022/7/28 设备在线字典值选择 + //设备在线字典值选择 List deviceDict = dictService.findInDictByCode(SecurityEventDict.DEVICE_STATUS); deviceInfo.setStatus(deviceDict.get(0).getCode()); if(deviceInfoMapper.updateById(deviceInfo) <= 0){ @@ -266,7 +270,7 @@ DateTime parse = DateUtil.parse(happenTimeISO); String happenTime = DateUtil.formatDateTime(parse); caseInfo.setHappenTime(happenTime); //发生时间 - // TODO: 2022/7/28 字典值选择 + //字典值选择 List dict = dictService.findInDictByCode(SecurityEventDict.CASE_STATUS); caseInfo.setStatus(dict.get(0).getCode()); //事件状态(未解决的字典值) DeviceInfo deviceInfo = deviceInfoMapper.getByIndexCode(srcIndex); @@ -286,6 +290,56 @@ } @Override + public void doorPassHandle(JSONObject event) { + JSONObject data = event.getJSONObject("data"); + Integer eventType = event.getInteger("eventType"); + String srcIndex = event.getString("srcIndex"); + String srcName = event.getString("srcName"); + String indexCode = event.getString("srcParentIndex"); + String staffCode = data.getString("ExtEventPersonNo"); + String cardNum = data.getString("ExtEventCardNo"); + Integer channelNum = data.getInteger("ExtAccessChannel"); + //进出类型,文档为1进0出,实际为1进2出,和字典一样 + Integer inoutType = data.getInteger("ExtEventInOut"); + String passWay = ""; + String description = ""; + //通过方式:卡、人脸、身份证 + //当合法卡比对通过且ExtEventIdentityCardInfo有值且ExtEventIdentityCardInfo中的IdNum有值为身份证通过 + if(SecurityEventType.CARD_COMPARE_PASS.equals(eventType)){ + JSONObject extEventIdentityCardInfo = data.getJSONObject("ExtEventIdentityCardInfo"); + if(!Objects.isNull(extEventIdentityCardInfo) && StringUtils.isNotEmpty(extEventIdentityCardInfo.getString("IdNum"))){ + passWay = "2";//身份证 + description = "身份证核对成功"; + }else{ + passWay = "0";//刷卡 + description = "刷卡比对成功"; + } + }else if(SecurityEventType.FACE_COMPARE_PASS.equals(eventType) || SecurityEventType.FACE_CARD_COMPARE_PASS.equals(eventType)){ + passWay = "1";//人脸 + description = "人脸比对成功"; + } + DateTime parse = DateUtil.parse(event.getString("happenTime")); + String happenTime = DateUtil.formatDateTime(parse); + + StaffInoutLog staffInoutLog = new StaffInoutLog(); + staffInoutLog.setStaffCode(staffCode); + staffInoutLog.setSrcIndex(srcIndex); + staffInoutLog.setIndexCode(indexCode); + staffInoutLog.setCardNum(cardNum); + staffInoutLog.setChannelNum(channelNum); + staffInoutLog.setWayName(srcName); + staffInoutLog.setInoutType(String.valueOf(inoutType)); + staffInoutLog.setPassWay(passWay); + staffInoutLog.setDescription(description); + staffInoutLog.setPassTime(happenTime); + if(inoutLogMapper.insert(staffInoutLog) <= 0){ + log.error("新增人员进出记录异常"); + return; + } + + } + + @Override @Transactional(rollbackFor = Exception.class) public void propertyAttendanceHandle(JSONObject event) { JSONObject data = event.getJSONObject("data"); @@ -300,7 +354,8 @@ String happenTime = DateUtil.formatDateTime(parse); //使用海康人脸唯一标识获取员工信息 Map columnMap = new HashMap<>(); - columnMap.put("staff_face_id", faceInfoCode); + //已验证,海康存储的faceInfoCode是staff_code + columnMap.put("staff_code", faceInfoCode); List staffInfos = staffInfoMapper.selectByMap(columnMap); StaffInfo staffInfo = staffInfos.get(0); //存储考勤信息 @@ -311,13 +366,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); info.setStaffCode(staffInfo.getStaffCode()); + info.setJobNo(staffInfo.getJobNo()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 物业人员字典值选择 + //物业人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(0).getCode()); info.setStaffTypeName(staffDict.get(0).getName()); @@ -358,13 +415,15 @@ attendanceInfo.setAtteEndTime(happenTime); attendanceInfo.setAtteEndDev(deviceInfo.getDevCode()); attendanceInfo.setAtteEndDevName(deviceInfo.getDevName()); + attendanceInfoMapper.updateById(attendanceInfo); return; }else{ AttendanceInfo info = new AttendanceInfo(); + info.setJobNo(staffInfo.getJobNo()); info.setStaffCode(staffInfo.getStaffCode()); info.setStaffName(staffInfo.getStaffName()); info.setStaffGender(staffInfo.getStaffGender()); - // TODO: 2022/7/29 安保人员字典值选择 + //安保人员字典值选择 List staffDict = dictService.findInDictByCode(SecurityEventDict.STAFF_TYPE); info.setStaffType(staffDict.get(1).getCode()); info.setStaffTypeName(staffDict.get(1).getName()); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java index 06f8bf3..b2e826f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/PropertyManageServiceImpl.java @@ -200,7 +200,7 @@ String hazardName = hazardLevelMapper.selectHazardNameByCode(key); monthAndWeekDTO.setLevelName(hazardName); if (year.equals(String.valueOf(DateUtil.thisYear()))) { - monthAndWeekDTO.setMonthQuantity(sum / DateUtil.thisMonth()); + monthAndWeekDTO.setMonthQuantity(sum / (DateUtil.thisMonth()+1)); strAvgMap.put(key, monthAndWeekDTO); } else { monthAndWeekDTO.setMonthQuantity(sum / 12); @@ -247,7 +247,9 @@ resultList.add(strAvgMap.get(key)); }); //输出顺序 - Collections.swap(resultList, 1, 2); + if(!CollectionUtils.isEmpty(resultList) && resultList.size() > 1){ + Collections.swap(resultList, 1, 2); + } return ResponseData.success(resultList); } @@ -768,6 +770,7 @@ map.put("date", date); resultList.add(map); } + resultList.sort(Comparator.comparing(o -> o.get("date").toString())); return ResponseData.success(resultList); } @@ -952,16 +955,16 @@ //2个map有一个为空 if (CollectionUtils.isEmpty(onDutyMap)) { if (!Objects.isNull(levelAssessMap.get(date))) { - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * levelAssessWeight).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } if (CollectionUtils.isEmpty(levelAssessMap)) { if (!Objects.isNull(onDutyMap.get(date))) { - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } else { - map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", BigDecimal.valueOf(100 * onDutyWeight).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); } } } else if (Objects.isNull(onDutyMap.get(date)) && Objects.isNull(levelAssessMap.get(date))) { @@ -971,18 +974,18 @@ } else if (Objects.isNull(onDutyMap.get(date)) && !Objects.isNull(levelAssessMap.get(date))) { //2、补全到岗率数据处理 //该日期onDutyMap空,levelAssessMap不空 - map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).stripTrailingZeros().toPlainString()); + map.put("score", levelAssessMap.get(date).add(BigDecimal.valueOf(100 * onDutyWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //2、补全安保等级评估数据处理 //该日期levelAssessMap空,onDutyMap不空 - map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).stripTrailingZeros().toPlainString()); + map.put("score", onDutyMap.get(date).add(BigDecimal.valueOf(100 * levelAssessWeight)).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } else if (!Objects.isNull(levelAssessMap.get(date)) && !Objects.isNull(onDutyMap.get(date))) { //该日期2个都不空 BigDecimal onDutyDecimal = onDutyMap.get(date); BigDecimal levelAssessDecimal = levelAssessMap.get(date); - map.put("score", onDutyDecimal.add(levelAssessDecimal).stripTrailingZeros().toPlainString()); + map.put("score", onDutyDecimal.add(levelAssessDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); } }); @@ -1167,6 +1170,13 @@ return ResponseData.success(resultList); } + @Override + public Object highFrequency() { + //事件表近一个月按description分组 + List list = caseInfoMapper.getCountForRank(); + return ResponseData.success(list); + } + private List> getForResult(List weekCaseDTOS, List weekCaseKeyAreaDTOS, List caseInfos, HashMap weekCaseMap, HashMap caseScoreMap, HashMap keyAreaScoreMap, HashMap assessScoreMap, @@ -1255,7 +1265,7 @@ BigDecimal caseScore = preCaseScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("case"))); BigDecimal keyAreaScore = preKeyAreaScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("keyArea"))); BigDecimal responseAssessScore = preAssessScore.multiply(BigDecimal.valueOf(keyAreaWeight.get("responseAssess"))); - map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).stripTrailingZeros().toPlainString()); + map.put("score", caseScore.add(keyAreaScore).add(responseAssessScore).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); resultList.add(map); }); return resultList; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java index 97ed308..c39a5fa 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.modular.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,6 +10,7 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.dao.StaffInfoMapper; +import com.casic.missiles.modular.dto.CardListResponse; import com.casic.missiles.modular.dto.StaffInfoRequest; import com.casic.missiles.modular.dto.hik.*; import com.casic.missiles.modular.enums.HikUri; @@ -59,7 +62,8 @@ List pageList = staffInfoMapper.getStaffInfoListPage(page, staffInfoRequest); pageList.stream().forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); - staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); +// staffInfo.setPicture(getPictureFromHik(staffInfo.getStaffCode())); + getFiledFromHik(staffInfo); }); return pageList; } catch (DataAccessException ex) { @@ -280,6 +284,7 @@ List list = staffInfoMapper.getStaffInfoList(staffInfoRequest); list.forEach(staffInfo -> { staffInfo.setStaffTypeName(dictService.getDictNameByCode(SecurityEventDict.STAFF_TYPE, staffInfo.getStaffType())); + staffInfo.setStaffGenderName(dictService.getDictNameByCode(SecurityEventDict.SYS_SEX, staffInfo.getStaffGender())); }); return list; } catch (DataAccessException ex) { @@ -318,6 +323,115 @@ return ResponseData.success(url); } + @Override + public int saveOrUpdateStaffInfoBatch(List personList) { + return staffInfoMapper.saveOrUpdateStaffInfoBatch(personList); + } + + @Override + public List getStaffCardList(String staffCode) { + PersonListRequest request = new PersonListRequest(); + request.setPageNo(1); + request.setPageSize(1000); + request.setPersonIds(staffCode); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.CARD_LIST, body); + JSONObject json = (JSONObject) JSONObject.parse(resultStr); + JSONObject dataJson = (JSONObject) json.get("data"); + JSONArray array = (JSONArray) dataJson.get("list"); + List list = new ArrayList<>(); + array.stream().forEach(a -> { + JSONObject jsonObject = (JSONObject) a; + CardListResponse cardListResponse = new CardListResponse(); + cardListResponse.setCardNum(jsonObject.getString("cardNo")); + //卡状态 + Integer useStatus = jsonObject.getInteger("useStatus"); + if(!Objects.isNull(useStatus) && 1 == useStatus){ + cardListResponse.setStatusName("正常"); + }else if(!Objects.isNull(useStatus) && 2 == useStatus){ + cardListResponse.setStatusName("挂失"); + } + //卡起始时间 + String startDateISO = jsonObject.getString("startDate"); + DateTime startDateParse = DateUtil.parse(startDateISO); + String startTime = DateUtil.formatDateTime(startDateParse); + cardListResponse.setStartTime(startTime); + //卡终止时间 + String endDateISO = jsonObject.getString("endDate"); + DateTime endDateParse = DateUtil.parse(endDateISO); + String endTime = DateUtil.formatDateTime(endDateParse); + cardListResponse.setEndTime(endTime); + //生物特征(只有人脸) + Integer isBindFace = jsonObject.getInteger("isBindFace"); + if(!Objects.isNull(useStatus) && 1 == isBindFace){ + cardListResponse.setFeatures("人脸"); + } + //挂失时间 + String lossDateISO = jsonObject.getString("lossDate"); + DateTime lossDateParse = DateUtil.parse(lossDateISO); + String cancelTime = DateUtil.formatDateTime(lossDateParse); + cardListResponse.setCancelTime(cancelTime); + //解挂时间 + String unlossDateISO = jsonObject.getString("unlossDate"); + DateTime unlossDateParse = DateUtil.parse(unlossDateISO); + String unhookTime = DateUtil.formatDateTime(unlossDateParse); + cardListResponse.setUnhookTime(unhookTime); + + list.add(cardListResponse); + }); + return list; + } + + + private void getFiledFromHik(StaffInfo staffInfo) { + String staffCode = staffInfo.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (!"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInfo.setDeptName(replace); + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInfo.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInfo.setPicture(pictureFromHik); + } + } + private String getPictureFromHik(String staffCode) { PersonInfoRequest request = new PersonInfoRequest(); List list = new ArrayList<>(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java new file mode 100644 index 0000000..f3687cd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/StaffInoutLogServiceImpl.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.modular.dao.StaffInoutLogMapper; +import com.casic.missiles.modular.dto.StaffInoutLogRequest; +import com.casic.missiles.modular.dto.hik.PersonInfoRequest; +import com.casic.missiles.modular.enums.HikUri; +import com.casic.missiles.modular.enums.SecurityEventDict; +import com.casic.missiles.modular.model.StaffInoutLog; +import com.casic.missiles.modular.service.StaffInoutLogService; +import com.casic.missiles.modular.util.HikUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2022/12/08 18:38 + */ +@Slf4j +@Service +public class StaffInoutLogServiceImpl extends ServiceImpl implements StaffInoutLogService { + @Autowired + private StaffInoutLogMapper inoutLogMapper; + @Resource + private AbstractDictService dictService; + + @Override + public List staffInoutLogListPage(Page page, StaffInoutLogRequest inoutLogRequest) { + try { +// todo员工编号和员工列表一致,进出记录中空数据问题,进出方式问题 + List pageList = inoutLogMapper.selectStaffInoutLogList(page, inoutLogRequest); + pageList.stream().forEach(inoutLog -> { + inoutLog.setPassWayName(dictService.getDictNameByCode(SecurityEventDict.PASS_WAY, inoutLog.getPassWay())); + inoutLog.setInoutTypeName(dictService.getDictNameByCode(SecurityEventDict.INOUT_TYPE, inoutLog.getInoutType())); + inoutLog.setPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getPosition())); + //doorArea为前端文档参数,先取position + inoutLog.setDoorArea(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, inoutLog.getDoorArea())); + inoutLog.setAreaName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_AREA, inoutLog.getArea())); + //获取海康组织名,根据组织编号获取 + getFiledFromHik(inoutLog); + }); + return pageList; + } catch (DataAccessException ex) { + log.error("员工: 查询分页出现异常,异常:{}", ex); + } + return null; + + } + + private void getFiledFromHik(StaffInoutLog staffInoutLog) { + String staffCode = staffInoutLog.getStaffCode(); + PersonInfoRequest request = new PersonInfoRequest(); + List list = new ArrayList<>(); + list.add(staffCode); + request.setParamName("personId"); + request.setParamValue(list); + String body = JSONObject.toJSONString(request); + String resultStr = HikUtil.hikApi(HikUri.PERSON_INFO, body); + JSONObject resultJson = (JSONObject) JSONObject.parse(resultStr); + if (Objects.isNull(resultJson) || !"0".equals(resultJson.get("code"))) { + log.error("请求海康,根据人员唯一字段获取人员详细信息-照片失败,海康response:{}", resultStr); + return; + } + //获取照片 + JSONObject data = (JSONObject) resultJson.get("data"); + if(Objects.isNull(data)){ + return; + } + JSONArray dataArray = (JSONArray) data.get("list"); + if(0 == dataArray.size()){ + return; + } + + log.info("请求海康,根据人员唯一字段获取人员详细信息response:{}", resultStr); + JSONObject jsonObject = (JSONObject) dataArray.get(0); + //海康组织名 + String orgPathName = jsonObject.getString("orgPathName"); + String replace = orgPathName.replace("🆗", ""); + staffInoutLog.setDeptName(replace); + + JSONArray personPhoto = (JSONArray) jsonObject.get("personPhoto"); + if(0 == personPhoto.size()){ + return; + } + + JSONObject photo = (JSONObject) personPhoto.get(0); + String picUri = photo.getString("picUri"); + String serverIndexCode = photo.getString("serverIndexCode"); + PersonInfoRequest picRequest = new PersonInfoRequest(); + picRequest.setPicUri(picUri); + picRequest.setServerIndexCode(serverIndexCode); + String reBody = JSONObject.toJSONString(picRequest); + //重定向地址获取 + String pictureFromHik = HikUtil.hikApiFor302(HikUri.PERSON_PICTURE, reBody); + if(StringUtils.isNotEmpty(pictureFromHik) && !pictureFromHik.startsWith("http")){ + staffInoutLog.setPicture("https://192.168.10.2:443" + pictureFromHik); + }else{ + staffInoutLog.setPicture(pictureFromHik); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java index f6756ce..4b8e0b4 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/service/impl/VisitorApplyServiceImpl.java @@ -7,20 +7,24 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.config.PositionPrivilegeInitCache; import com.casic.missiles.modular.dao.VisitorApplyMapper; import com.casic.missiles.modular.dto.VisitorApplyRequest; import com.casic.missiles.modular.dto.hik.AppointmentFreeRegisterRequest; import com.casic.missiles.modular.dto.hik.VisitorInfo; +import com.casic.missiles.modular.dto.hik.VisitorPermissionSet; import com.casic.missiles.modular.enums.HikUri; import com.casic.missiles.modular.enums.SecurityEventDict; import com.casic.missiles.modular.model.CaseInfo; import com.casic.missiles.modular.model.VisitorApply; import com.casic.missiles.modular.service.VisitorApplyService; import com.casic.missiles.modular.util.HikUtil; +import com.casic.missiles.modular.util.NumberGeneratorUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -48,12 +52,12 @@ public class VisitorApplyServiceImpl extends ServiceImpl implements VisitorApplyService { @Autowired private VisitorApplyMapper visitorApplyMapper; - @Resource private AbstractDictService dictService; - @Resource private Validator validator; + @Resource + private PositionPrivilegeInitCache positionPrivilegeInitCache; @Override public List visitorApplyListPage(Page page, VisitorApplyRequest visitorApplyRequest) { @@ -62,6 +66,8 @@ pageList.forEach(visitorApply ->{ visitorApply.setVisitReason(dictService.getDictNameByCode(SecurityEventDict.VISIT_REASON, visitorApply.getVisitReason())); visitorApply.setVisitPositionName(dictService.getDictNameByCode(SecurityEventDict.DEVICE_POSITION, visitorApply.getVisitPosition())); + visitorApply.setStatusName(dictService.getDictNameByCode(SecurityEventDict.APPLICATION_STATUS, visitorApply.getStatus())); + visitorApply.setApplicationTypeName(dictService.getDictNameByCode(SecurityEventDict.APPLICATION_TYPE, visitorApply.getApplicationType())); }); return pageList; } catch (DataAccessException ex) { @@ -73,6 +79,16 @@ @Override @Transactional(rollbackFor = Exception.class) public Object addVisitorApply(VisitorApply visitorApply) { + //单号判重 + if(StringUtils.isNotEmpty(visitorApply.getListCode())){ + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("list_code", visitorApply.getListCode()); + List applyList = visitorApplyMapper.selectList(wrapper); + if(!CollectionUtils.isEmpty(applyList)){ + return ResponseData.error("申请编号重复,请重新添加"); + } + } + //无需判重,可预约多个时间段 AppointmentFreeRegisterRequest appointmentFreeRegisterRequest = new AppointmentFreeRegisterRequest(); //将时间转换为海康ISO8601格式 @@ -86,6 +102,9 @@ appointmentFreeRegisterRequest.setVisitStartTime(inTimeISODate); appointmentFreeRegisterRequest.setVisitEndTime(outTimeISODate); appointmentFreeRegisterRequest.setVisitPurpose(visitorApply.getVisitReason()); + VisitorPermissionSet visitorPermissionSet = new VisitorPermissionSet(); + visitorPermissionSet.setPrivilegeGroupIds(positionPrivilegeInitCache.getPositionPrivilegeMap(visitorApply.getVisitReason())); + appointmentFreeRegisterRequest.setVisitorPermissionSet(visitorPermissionSet); VisitorInfo visitorInfo = new VisitorInfo(); visitorInfo.setVisitorName(visitorApply.getVisitorName()); @@ -155,7 +174,10 @@ if(StringUtils.isNotEmpty(visitorApply.getPicUri())){ visitorInfo.setVisitorPhoto(visitorApply.getPicUri()); } - appointmentFreeRegisterRequest.setVisitorInfo(visitorInfo); +// appointmentFreeRegisterRequest.setVisitorInfo(visitorInfo); + List visitorInfoList = new ArrayList<>(); + visitorInfoList.add(visitorInfo); + appointmentFreeRegisterRequest.setVisitorInfoList(visitorInfoList); String body = JSONObject.toJSONString(appointmentFreeRegisterRequest); String resultStr = HikUtil.hikApi(HikUri.APPOINTMENT_UPDATE, body); @@ -216,7 +238,14 @@ log.error("访客列表:{},未在海康进行预约成功,无法取消预约", appointRecordIds); return 0; } - return deleteBatchVisitorApply(ids); + return visitorApplyMapper.deleteBatchIds(ids); + } + + @Override + public String visitorApplyListCode() { + String maxNo = visitorApplyMapper.selectListCode(); + String messageId = NumberGeneratorUtil.getContactNo(Long.parseLong(maxNo)); + return messageId; } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java new file mode 100644 index 0000000..27bdead --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/util/NumberGeneratorUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.util; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.concurrent.atomic.AtomicLong; + +/** + * @Description: 编号生成工具 + * @Author: wangpeng + * @Date: 2022/12/15 20:31 + */ +public class NumberGeneratorUtil { + /** + * 支持每天最多生成9999个序号 + */ + public static synchronized String getContactNo(long nowNum) { + StringBuilder builder = new StringBuilder(); + StringBuilder num = new StringBuilder(); + AtomicLong count = new AtomicLong(nowNum); + + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + String datePrefix = format.format(new Date()); + + if(nowNum == 0){ + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + }else{ + String s = String.valueOf(nowNum); + String substring = s.substring(0, s.length() - 4); + //不是当前日期,从0计算后4位 + if (Long.valueOf(datePrefix) > Long.valueOf(substring)) { + count = new AtomicLong(0); + num.append(datePrefix).append("000").append(count.incrementAndGet()); + } else { + num.append(count.incrementAndGet()); + } + } + // 组合 + builder.append(num); + return builder.toString(); + } +} diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index e7e5127..d3a3e77 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -65,5 +65,21 @@ #1/2对应字典中一期(包含一期+录制楼)、二期主楼 accessgroup: configMap: - 1: [eaf4c45a20734a6d88cdf32cbec3fdab] - 2: [2,3,4] \ No newline at end of file + 1: [1eacbe03363c4b2980a59999188fc116,d725b8f57a2b45d79183ca12dc8a3261,093dd030940e498f86f7f870bff8cbfe,90a807c1a88d4dce9103de5061379d34, + 889916c8a9b749febb56c569fab4a2b2,8c4c55ba8314442e8cb65e9e601451c9,23acc9b05a0f47bb91dc909398bc139c,43db86d573f14c2381cce28e34f438aa, + 7e6b4f58908040bd871279a0701b2b62,6eb09c1c860e4f678b8d3652076edcb5,07b2999273324b72ba1a1c542aa5a88b,3e3fdf0784404e39b4f7563730c7f312, + 9efea996b23840b691ddb80e823f3d8d,92c32cdfbd7145d7bc16cebc65ad48d5,382c0d2132284386966328b0f350ae2d,a8bf7cf55af548d5a4b2fefc5380a51a, + 534542c51e9c4499becf464ec80895f5,16966b4881b04b1395f630809269635a,650e0d3bdbf04f26813f259a09132663,3c703c711fb64c2789cc30f5d9e3fd73, + 2014a1d8fead4b76a5cb836ecf1c4db6,dd46d272d7bc456d905f6f43d7c33595,48d6ea5159b645fab7d83676b6d59a5a,0c5d9238f341487186410f830df8da37, + 4b56821684224b8ea0467acae2fa4f6f,79a99a18b2214c0980b69bda08e66f0a,ba0c41363b114cf19f713955c47b13d1,7d82995e49b046e199387cf2052753f3, + 7840b20c767b47b68f1cfd5050be0333,4eed33089b4541b7ba715dceff10fafe,3c5b03502c1042ba802544be02a0be1a,f8394537b5784c30be0afc362cb01150] + 2: [b5b3c0482f3c4415b63ae9b0572f66f9,d0a261d6a8bd4af09302970e392dd771,ff9ff627e19e4e7085602fd552ecf57b,64be19ab18104690989c19269eb6d871, + e49a526cd8d246f9ba9fe3120594585d,734530c21fb84bdbabc2ad50d6272ba4,677300a1407e41939e9bc4643b8a65e1,3c758aca143444838e922a466484560a, + 3b02701f81d94cc282a695723f8c3f9f,bd86703f5ffe4f4d8ce437416d32fe8b,899447f907784abc89bf4ec8d8904fe7,2c640e74c7924ae8a1c11200778a555a, + a02e957b3e8d446fb41c1adb729524fe,9b51e18cb09d4f19bb108bdbc5e0ab11,2beb8ec76b1c4d80b64f4fbd224fbd98,6e6eaa79998b48318cd8b0430d79ce4f, + 8f659690e27244bdba65dd2d0fa313ba,6fa3615892c142b58851a31b161d3b18,398c805bb4bc4e80a0a98a4bead14abf,b111784e9f1e44be81bc4113a5a73a62, + 03bfd8c696fa46018f10b17faa7c5e41,a9689131cfcc44dba4bd299016b6f459,f2be71eff13b4305b9ab03d0276df852,efc583938bba4c869a633f52b69db010, + 2e22b7c9206c4184a756c7c091422a8d,bbb12547f1d1453c8be02d6e8c413338,d4612a78089a4dcab0df417591c346e8,d277ae7102774ba6bd568cff9bbdfc08, + 57c2a7b7c19d48c9b04ac5f2e1c4b3ed,69dee9f5bb51435bb9045cc5d59fa194,e5c6c81beee24131b18e12862123a68b,950b1a1708534bbbbb40dcb36d21eb70, + 9b8450815d47401482dd7d4b075e4229,d69c2a94fb0a49ca86b0d9faa920068a,588593de9e7f42f9819f08f7cfc6ae86,ed7de18f260441f3aef025696e3bdb09, + dd6dd56306c746fabdd637a3489cef00,6b660fcc97e34c7c82c1ef517a88bb52,b62e4f68120249babd6203c90b53cb7a,0513c3e1926f450fb403f441dd644fcd] \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index f19ec0f..d1c6782 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -15,6 +15,10 @@ database: 1 serializer: org.springframework.data.redis.serializer.StringRedisSerializer redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + spring: + mvc: + async: + request-timeout: 100000 casic: kaptcha-open: false #是否开启登录时验证码 (true/false) @@ -60,9 +64,24 @@ level.org.springframework.web: info #所属楼栋及各楼栋内门禁点列表配置 -#1/2/3对应字典中一期二期主楼和录制楼 +#1/2对应字典中一期(包含一期+录制楼)、二期主楼 accessgroup: configMap: - 1: [eaf4c45a20734a6d88cdf32cbec3fdab] - 2: [2,3,4] - 3: [3,4,5] \ No newline at end of file + 1: [1eacbe03363c4b2980a59999188fc116,d725b8f57a2b45d79183ca12dc8a3261,093dd030940e498f86f7f870bff8cbfe,90a807c1a88d4dce9103de5061379d34, + 889916c8a9b749febb56c569fab4a2b2,8c4c55ba8314442e8cb65e9e601451c9,23acc9b05a0f47bb91dc909398bc139c,43db86d573f14c2381cce28e34f438aa, + 7e6b4f58908040bd871279a0701b2b62,6eb09c1c860e4f678b8d3652076edcb5,07b2999273324b72ba1a1c542aa5a88b,3e3fdf0784404e39b4f7563730c7f312, + 9efea996b23840b691ddb80e823f3d8d,92c32cdfbd7145d7bc16cebc65ad48d5,382c0d2132284386966328b0f350ae2d,a8bf7cf55af548d5a4b2fefc5380a51a, + 534542c51e9c4499becf464ec80895f5,16966b4881b04b1395f630809269635a,650e0d3bdbf04f26813f259a09132663,3c703c711fb64c2789cc30f5d9e3fd73, + 2014a1d8fead4b76a5cb836ecf1c4db6,dd46d272d7bc456d905f6f43d7c33595,48d6ea5159b645fab7d83676b6d59a5a,0c5d9238f341487186410f830df8da37, + 4b56821684224b8ea0467acae2fa4f6f,79a99a18b2214c0980b69bda08e66f0a,ba0c41363b114cf19f713955c47b13d1,7d82995e49b046e199387cf2052753f3, + 7840b20c767b47b68f1cfd5050be0333,4eed33089b4541b7ba715dceff10fafe,3c5b03502c1042ba802544be02a0be1a,f8394537b5784c30be0afc362cb01150] + 2: [b5b3c0482f3c4415b63ae9b0572f66f9,d0a261d6a8bd4af09302970e392dd771,ff9ff627e19e4e7085602fd552ecf57b,64be19ab18104690989c19269eb6d871, + e49a526cd8d246f9ba9fe3120594585d,734530c21fb84bdbabc2ad50d6272ba4,677300a1407e41939e9bc4643b8a65e1,3c758aca143444838e922a466484560a, + 3b02701f81d94cc282a695723f8c3f9f,bd86703f5ffe4f4d8ce437416d32fe8b,899447f907784abc89bf4ec8d8904fe7,2c640e74c7924ae8a1c11200778a555a, + a02e957b3e8d446fb41c1adb729524fe,9b51e18cb09d4f19bb108bdbc5e0ab11,2beb8ec76b1c4d80b64f4fbd224fbd98,6e6eaa79998b48318cd8b0430d79ce4f, + 8f659690e27244bdba65dd2d0fa313ba,6fa3615892c142b58851a31b161d3b18,398c805bb4bc4e80a0a98a4bead14abf,b111784e9f1e44be81bc4113a5a73a62, + 03bfd8c696fa46018f10b17faa7c5e41,a9689131cfcc44dba4bd299016b6f459,f2be71eff13b4305b9ab03d0276df852,efc583938bba4c869a633f52b69db010, + 2e22b7c9206c4184a756c7c091422a8d,bbb12547f1d1453c8be02d6e8c413338,d4612a78089a4dcab0df417591c346e8,d277ae7102774ba6bd568cff9bbdfc08, + 57c2a7b7c19d48c9b04ac5f2e1c4b3ed,69dee9f5bb51435bb9045cc5d59fa194,e5c6c81beee24131b18e12862123a68b,950b1a1708534bbbbb40dcb36d21eb70, + 9b8450815d47401482dd7d4b075e4229,d69c2a94fb0a49ca86b0d9faa920068a,588593de9e7f42f9819f08f7cfc6ae86,ed7de18f260441f3aef025696e3bdb09, + dd6dd56306c746fabdd637a3489cef00,6b660fcc97e34c7c82c1ef517a88bb52,b62e4f68120249babd6203c90b53cb7a,0513c3e1926f450fb403f441dd644fcd] \ No newline at end of file diff --git a/pom.xml b/pom.xml index e8eee66..ec30791 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,6 @@ casic-web casic-server - casic-mini com.casic