From ddebb2ea352012c10ec31a9d9774b0320af4caac Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Thu, 10 Jun 2021 16:48:15 +0800 Subject: [PATCH] Merge branch 'dev' of http://blit.7drlb.com:8888/r/moral into dev --- screen-api/src/main/resources/mapper/MenuMapper.xml | 4 screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java | 63 +++ screen-common/src/main/java/com/moral/constant/KafkaConstants.java | 19 + screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaReceiver.java | 97 +++++ screen-manage/src/main/java/com/moral/api/service/DeviceService.java | 9 screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 97 ++++ screen-job/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java | 20 + screen-job/src/main/java/com/moral/api/ScreenJobBootStrap.java | 19 + screen-manage/src/main/resources/mapper/HistoryMinutelyMapper.xml | 9 pom.xml | 7 screen-job/pom.xml | 77 ++++ screen-manage/src/main/java/com/moral/api/controller/TestController.java | 43 +- screen-job/screen-job.iml | 152 ++++++++ screen-job/src/main/resources/application-dev.yml | 108 ++++++ screen-job/src/main/java/com/moral/api/config/xxl/XxlJobConfig.java | 135 +++++++ screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java | 20 + screen-job/src/main/resources/logback.xml | 29 + screen-job/src/main/java/com/moral/api/service/Test.java | 4 screen-manage/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java | 20 + screen-job/src/main/java/com/moral/api/config/datasource/DataSourceConfig.java | 22 + screen-common/src/main/java/com/moral/constant/Constants.java | 18 screen-job/src/main/java/com/moral/api/jobHandler/TestHandler.java | 21 + screen-common/src/main/java/com/moral/constant/RedisConstants.java | 28 + 23 files changed, 974 insertions(+), 47 deletions(-) diff --git a/pom.xml b/pom.xml index 02b98d7..b1e7a37 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,7 @@ <io.springfox.version>2.7.0</io.springfox.version> <swagger-bootstrap-ui.version>1.9.6</swagger-bootstrap-ui.version> <spring.kafka.version>2.2.2</spring.kafka.version> + <xxl-job.version>2.3.0</xxl-job.version> </properties> @@ -116,7 +117,11 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> - + <dependency> + <groupId>com.xuxueli</groupId> + <artifactId>xxl-job-core</artifactId> + <version>${xxl-job.version}</version> + </dependency> </dependencies> diff --git a/screen-api/src/main/resources/mapper/MenuMapper.xml b/screen-api/src/main/resources/mapper/MenuMapper.xml index abfa655..bfe661a 100644 --- a/screen-api/src/main/resources/mapper/MenuMapper.xml +++ b/screen-api/src/main/resources/mapper/MenuMapper.xml @@ -28,7 +28,7 @@ AND gm.menu_id = m.id AND ug.is_delete = 0 AND gm.is_delete = 0 - AND gm.channel_key = 1 + AND gm.channel_key = 0 AND m.is_delete = 0 </select> @@ -38,7 +38,7 @@ FROM `menu` m, `organization_menu` om WHERE om.organization_id = #{orgId} AND m.id = om.menu_id - AND om.channel_key = 1 + AND om.channel_key = 0 AND om.menu_id = m.id AND om.is_delete = 0 AND m.is_delete = 0 diff --git a/screen-common/src/main/java/com/moral/constant/Constants.java b/screen-common/src/main/java/com/moral/constant/Constants.java index fb9db76..a56abbd 100644 --- a/screen-common/src/main/java/com/moral/constant/Constants.java +++ b/screen-common/src/main/java/com/moral/constant/Constants.java @@ -85,18 +85,18 @@ public static final String DELETE_OPERATE_TYPE = "3"; /* - * ��������������������������������������� - * */ + * ��������������������������������������� + * */ public static final String FORMULA_PLACEHOLDER = "{0}"; /* - * ������������������ - * */ + * ������������������ + * */ public static final String SYSTEM_DICT_TYPE_UNIT = "unit"; /* - * ������������������ - * */ + * ������������������ + * */ public static final String SYSTEM_DICT_TYPE_PROFESSION = "profession"; /* @@ -115,4 +115,10 @@ public static final String SYSTEM_DICT_TYPE_PURCHASER = "purchaser"; + /* + * ������������������������ + * */ + public static final String UN_ADJUST = "unadjust"; + + } diff --git a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java new file mode 100644 index 0000000..8f904d1 --- /dev/null +++ b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java @@ -0,0 +1,19 @@ +package com.moral.constant; + +public class KafkaConstants { + + /** + * ������������������ + */ + public static final String TOPIC_MINUTE = "test_topic"; + + /** + * ������������������ + */ + public static final String TOPIC_HOUR = "hour"; + + /** + * ��������� + */ + public static final String GROUP_ID = "test"; +} diff --git a/screen-common/src/main/java/com/moral/constant/RedisConstants.java b/screen-common/src/main/java/com/moral/constant/RedisConstants.java index 2578c67..db0ec8c 100644 --- a/screen-common/src/main/java/com/moral/constant/RedisConstants.java +++ b/screen-common/src/main/java/com/moral/constant/RedisConstants.java @@ -12,20 +12,30 @@ @Data public class RedisConstants { /* - * ������������ redis������key - * ������Map<String,List<sysDictData>>���������key������������������������Value������������������������ - * */ + * ������������ redis������key + * ������Map<String,List<sysDictData>>���������key������������������������Value������������������������ + * */ public static final String DICT_DATA_KEY = "dict_data"; /* - * ������������ redis������key - * ������List<sysDictType>������ - * */ + * ������������ redis������key + * ������List<sysDictType>������ + * */ public static final String DICT_TYPE_KEY = "dict_type"; /* - * ������ redis������key - * ������Map<Integer,Sensor>������ - * */ + * ������ redis������key + * ������Map<Integer,Sensor>������ + * */ public static final String SENSOR_KEY = "sensor"; + + /* + * ������������������ + * */ + public static final String DEVICE = "device"; + + /* + * ������������������������ + * */ + public static final String STATE = "state"; } diff --git a/screen-job/pom.xml b/screen-job/pom.xml new file mode 100644 index 0000000..a22891e --- /dev/null +++ b/screen-job/pom.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>screen</artifactId> + <groupId>org.moral</groupId> + <version>1.0-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>screen-job</artifactId> + + + <dependencies> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-devtools</artifactId> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.moral</groupId> + <artifactId>screen-common</artifactId> + <version>1.0-SNAPSHOT</version> + <scope>compile</scope> + </dependency> + </dependencies> + + <build> + <finalName>screen-job</finalName> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>${java.version}</source> + <target>${java.version}</target> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <version>${maven-resources-plugin.version}</version> + <dependencies> + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-filtering</artifactId> + <version>${maven-filtering.version}</version> + </dependency> + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-common-artifact-filters</artifactId> + <version>${maven-common-artifact-filters.version}</version> + </dependency> + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-dependency-tree</artifactId> + <version>${maven-dependency-tree.version}</version> + </dependency> + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-shared-incremental</artifactId> + <version>${maven-shared-incremental.version}</version> + </dependency> + </dependencies> + </plugin> + + </plugins> + </build> + + +</project> \ No newline at end of file diff --git a/screen-job/screen-job.iml b/screen-job/screen-job.iml new file mode 100644 index 0000000..c6acaa0 --- /dev/null +++ b/screen-job/screen-job.iml @@ -0,0 +1,152 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="Spring" name="Spring"> + <configuration /> + </facet> + <facet type="web" name="Web"> + <configuration> + <webroots /> + <sourceRoots> + <root url="file://$MODULE_DIR$/src/main/java" /> + <root url="file://$MODULE_DIR$/src/main/resources" /> + </sourceRoots> + </configuration> + </facet> + </component> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module" module-name="screen-common" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.16.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.16.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.16.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.8.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.45.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.45.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.45.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.45.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.45.Final" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.45.Final" level="project" /> + <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.2.15.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" /> + <orderEntry type="library" name="Maven: redis.clients:jedis:2.9.3" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.6.2" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.46" level="project" /> + <orderEntry type="library" name="Maven: commons-net:commons-net:3.6" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-devtools:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" /> + <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.10.3" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.10" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.10" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.10" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.10" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.31" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.31" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.31" level="project" /> + <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.18.Final" level="project" /> + <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" /> + <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.3.Final" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.7.0" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.13" level="project" /> + <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.13" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.10" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.7.0" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.7.0" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.7.0" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.7.0" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.7.0" level="project" /> + <orderEntry type="library" name="Maven: org.reflections:reflections:0.9.11" level="project" /> + <orderEntry type="library" name="Maven: com.google.guava:guava:18.0" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.1.0.Final" level="project" /> + <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.7.0" level="project" /> + <orderEntry type="library" name="Maven: com.github.xiaoymin:swagger-bootstrap-ui:1.9.6" level="project" /> + <orderEntry type="library" name="Maven: org.javassist:javassist:3.25.0-GA" level="project" /> + <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.16.18" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.3.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.3.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.3.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.3.2" level="project" /> + <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.3.2" level="project" /> + <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.1" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.4" level="project" /> + <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.4" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.kafka:spring-kafka:2.2.12.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.2.5.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.apache.kafka:kafka-streams:2.2.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.kafka:connect-json:2.0.1" level="project" /> + <orderEntry type="library" name="Maven: org.apache.kafka:connect-api:2.0.1" level="project" /> + <orderEntry type="library" name="Maven: org.rocksdb:rocksdbjni:5.15.10" level="project" /> + <orderEntry type="library" name="Maven: org.apache.kafka:kafka-clients:2.2.2" level="project" /> + <orderEntry type="library" name="Maven: com.github.luben:zstd-jni:1.3.8-1" level="project" /> + <orderEntry type="library" name="Maven: org.lz4:lz4-java:1.5.0" level="project" /> + <orderEntry type="library" name="Maven: org.xerial.snappy:snappy-java:1.1.7.2" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.5" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.19" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.11.1" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.23.4" level="project" /> + <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.16" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.16" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.3" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.kaptcha:kaptcha:2.3.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.14.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.5" level="project" /> + </component> +</module> \ No newline at end of file diff --git a/screen-job/src/main/java/com/moral/api/ScreenJobBootStrap.java b/screen-job/src/main/java/com/moral/api/ScreenJobBootStrap.java new file mode 100644 index 0000000..ea8af5a --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/ScreenJobBootStrap.java @@ -0,0 +1,19 @@ +package com.moral.api; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import com.moral.util.SpringContextUtils; + +@MapperScan("com.moral.api.mapper") +@EnableTransactionManagement +@SpringBootApplication +public class ScreenJobBootStrap { + public static void main(String[] args) { + ApplicationContext applicationContext = SpringApplication.run(ScreenJobBootStrap.class, args); + SpringContextUtils.setApplicationContext(applicationContext); + } + +} diff --git a/screen-job/src/main/java/com/moral/api/config/datasource/DataSourceConfig.java b/screen-job/src/main/java/com/moral/api/config/datasource/DataSourceConfig.java new file mode 100644 index 0000000..9e1430a --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/config/datasource/DataSourceConfig.java @@ -0,0 +1,22 @@ +package com.moral.api.config.datasource; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import javax.sql.DataSource; + +@Configuration +public class DataSourceConfig { + + @Primary + @Bean(name = "primaryDataSource") + @Qualifier("primaryDataSource") + @ConfigurationProperties(prefix = "spring.datasource") + public DataSource primaryDataSource(){ + return new DruidDataSource(); + } +} diff --git a/screen-job/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java b/screen-job/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java new file mode 100644 index 0000000..3468cf7 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/config/mybatis/MybatisPlusConfig.java @@ -0,0 +1,20 @@ +package com.moral.api.config.mybatis; + +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MybatisPlusConfig { + + /** + * ������������ + */ + @Bean + public PaginationInterceptor paginationInterceptor() { + PaginationInterceptor page = new PaginationInterceptor(); + return page; + } + + +} diff --git a/screen-job/src/main/java/com/moral/api/config/xxl/XxlJobConfig.java b/screen-job/src/main/java/com/moral/api/config/xxl/XxlJobConfig.java new file mode 100644 index 0000000..fc087e1 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/config/xxl/XxlJobConfig.java @@ -0,0 +1,135 @@ +package com.moral.api.config.xxl; + + +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; + +@Configuration +@ComponentScan(basePackages = "com.moral.api.jobHandler") +@Slf4j +public class XxlJobConfig { + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.executor.appname}") + private String appName; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private Integer port; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private Integer logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobSpringExecutor(){ + log.info("xxl jon config init"); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appName); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + return xxlJobSpringExecutor; + } + + @Override + public String toString() { + return "XxlJobConfig{" + + "adminAddresses='" + adminAddresses + '\'' + + ", appName='" + appName + '\'' + + ", ip='" + ip + '\'' + + ", port=" + port + + ", accessToken='" + accessToken + '\'' + + ", logPath='" + logPath + '\'' + + ", logRetentionDays=" + logRetentionDays + + '}'; + } + + public XxlJobConfig() { + } + + public XxlJobConfig(String adminAddresses, String appName, String ip, Integer port, String accessToken, String logPath, Integer logRetentionDays) { + this.adminAddresses = adminAddresses; + this.appName = appName; + this.ip = ip; + this.port = port; + this.accessToken = accessToken; + this.logPath = logPath; + this.logRetentionDays = logRetentionDays; + } + + public String getAdminAddresses() { + return adminAddresses; + } + + public void setAdminAddresses(String adminAddresses) { + this.adminAddresses = adminAddresses; + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public Integer getPort() { + return port; + } + + public void setPort(Integer port) { + this.port = port; + } + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public String getLogPath() { + return logPath; + } + + public void setLogPath(String logPath) { + this.logPath = logPath; + } + + public Integer getLogRetentionDays() { + return logRetentionDays; + } + + public void setLogRetentionDays(Integer logRetentionDays) { + this.logRetentionDays = logRetentionDays; + } +} diff --git a/screen-job/src/main/java/com/moral/api/jobHandler/TestHandler.java b/screen-job/src/main/java/com/moral/api/jobHandler/TestHandler.java new file mode 100644 index 0000000..9f0cf69 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/jobHandler/TestHandler.java @@ -0,0 +1,21 @@ +package com.moral.api.jobHandler; + +import org.springframework.stereotype.Component; + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; + +@Component +public class TestHandler{ + + @XxlJob("testJobHandler") + public ReturnT<String> execute(){ + //��������������� + String param = XxlJobHelper.getJobParam(); + System.out.println(param); + System.out.println("������������������"); + return ReturnT.SUCCESS; + } + +} diff --git a/screen-job/src/main/java/com/moral/api/service/Test.java b/screen-job/src/main/java/com/moral/api/service/Test.java new file mode 100644 index 0000000..7b34503 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/Test.java @@ -0,0 +1,4 @@ +package com.moral.api.service; + +public class Test { +} diff --git a/screen-job/src/main/resources/application-dev.yml b/screen-job/src/main/resources/application-dev.yml new file mode 100644 index 0000000..d996a3c --- /dev/null +++ b/screen-job/src/main/resources/application-dev.yml @@ -0,0 +1,108 @@ +server: + port: 8083 + tomcat: + uri-encoding: UTF-8 + #��������������� + min-spare-threads: 500 + #��������������� + max-threads: 2500 + #��������������� + max-connections: 6500 + #������������������������ + accept-count: 1000 +spring: + profiles: + active: dev + include: + moduleFormColumn + application: + name: screen-job + redis: + host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com + port: 6379 + password: moral_123456 + timeout: 30000 + jedis: + pool: + max-active: 256 + max-wait: 30000 + max-idle: 64 + min-idle: 32 + lettuce: + pool: + max-active: 256 + max-idle: 64 + max-wait: 30000 + min-idle: 32 + tokenRedis: + host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com + port: 6379 + password: moral_123456 + timeout: 30000 + database: 14 + pool: + max-active: 256 + max-wait: 30000 + max-idle: 64 + min-idle: 32 + + datasource: + minIdle: 1 + time-between-eviction-runs-millis: 60000 + max-active: 20 + test-while-idle: true + validation-query: select 'x' + filters: stat + type: com.alibaba.druid.pool.DruidDataSource + max-wait: 60000 + url: jdbc:mysql://rm-bp1pr3rx9m3fnkwsk.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai + username: root + password: moral_123456 + test-on-borrow: false + sql-script-encoding: utf-8 + pool-prepared-statements: true + min-evictable-idle-time-millis: 300000 + initial-size: 1 + driver-class-name: com.mysql.cj.jdbc.Driver + max-conn-lifetime-millis: 20 + test-on-return: false + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + global-config: + db-config: + id-type: auto + field-strategy: NOT_EMPTY + db-type: MYSQL + configuration: + map-underscore-to-camel-case: true + call-setters-on-nulls: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +logging: + config: classpath:logback.xml +xxl: + job: + admin: + # ���������������������������������������������������������������������������������������������������������������������������������"���������������������"���"������������������" + addresses: http://172.16.44.70:8090/xxl-job-admin + + #���������������TOKEN������TOKEN��������������� + accessToken: + + #���������������,������������������ + executor: + # ������������������������������������������������������������������������������������ + #������������������"���������������������������������"���"���������������"��� + #������������������������9999������������IP������������������������������IP������������������������������������IP������IP������������Host������������������������ + #��������������������������������������������������������������������� + appname: xxl-job-executor-sample-springboot + ip: + port: 9999 + #��������������������������������������������������������������������������������������� + logpath: /data/applogs/xxl-job/jobhandler + #������������������������������������������������������������������������������������������������������3���������������������-1��������������� + logretentiondays: -1 + + + diff --git a/screen-job/src/main/resources/logback.xml b/screen-job/src/main/resources/logback.xml new file mode 100644 index 0000000..d5a0d2c --- /dev/null +++ b/screen-job/src/main/resources/logback.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<configuration debug="false" scan="true" scanPeriod="1 seconds"> + + <contextName>logback</contextName> + <property name="log.path" value="/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log"/> + + <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> + </encoder> + </appender> + + <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <file>${log.path}</file> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern> + </rollingPolicy> + <encoder> + <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n + </pattern> + </encoder> + </appender> + + <root level="info"> + <appender-ref ref="console"/> + <appender-ref ref="file"/> + </root> + +</configuration> \ No newline at end of file diff --git a/screen-manage/src/main/java/com/moral/api/controller/TestController.java b/screen-manage/src/main/java/com/moral/api/controller/TestController.java index f15c064..12d9db2 100644 --- a/screen-manage/src/main/java/com/moral/api/controller/TestController.java +++ b/screen-manage/src/main/java/com/moral/api/controller/TestController.java @@ -8,6 +8,7 @@ import com.moral.util.PageResult; import com.moral.util.TokenEncryptUtils; import com.moral.util.TokenUtils; + import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; + import java.io.*; @@ -32,6 +34,7 @@ @Resource private TestService testService; + /** * name ������ * email ������ @@ -39,9 +42,9 @@ */ @ApiOperation(value = "������������", notes = "������������") @RequestMapping(value = "/saveTest", method = RequestMethod.POST) - public ResultMessage save() { + public ResultMessage save() { - Test test=new Test(); + Test test = new Test(); test.setEmail("test@qq.com"); test.setName("name"); test.setMobile("13965898745"); @@ -49,27 +52,28 @@ return ResultMessage.ok(); } + /** * page ��������� * size ������������ */ @ApiOperation(value = "������", notes = "������") @ApiImplicitParams({ - @ApiImplicitParam(name="page",value="������������",required=true,paramType="path",dataType="Int"), - @ApiImplicitParam(name="size",value="������������",required=true,paramType="path",dataType="Int") + @ApiImplicitParam(name = "page", value = "������������", required = true, paramType = "path", dataType = "Int"), + @ApiImplicitParam(name = "size", value = "������������", required = true, paramType = "path", dataType = "Int") }) @RequestMapping(value = "search/{page}/{size}", method = RequestMethod.GET) public ResultMessage findBypage(@PathVariable("page") Integer page, @PathVariable("size") Integer size) { - log.info("page is:"+ page+" size is:"+size); + log.info("page is:" + page + " size is:" + size); //������������������������ Page<Test> userPage = testService.selectByPage(null, page, size); //������������������������ PageResult<Test> pageResult = new PageResult<>( - userPage.getTotal(), userPage.getPages(),userPage.getRecords() + userPage.getTotal(), userPage.getPages(), userPage.getRecords() ); //������������ - return ResultMessage.ok(pageResult); + return ResultMessage.ok(pageResult); } @@ -79,7 +83,7 @@ @ApiOperation(value = "redis������", notes = "redis������") @RequestMapping(value = "redis", method = RequestMethod.GET) public ResultMessage testRedis() { - RedisUtil.set("redistest","test"); + RedisUtil.set("redistest", "test"); return ResultMessage.ok(RedisUtil.get("redistest")); } @@ -89,7 +93,7 @@ */ @ApiOperation(value = "������������", notes = "������������") @RequestMapping(value = "saveTest", method = RequestMethod.GET) - public ResultMessage saveTest() throws Exception{ + public ResultMessage saveTest() throws Exception { testService.saveTest(); return ResultMessage.ok(); @@ -99,13 +103,16 @@ * kafka������ */ @ApiOperation(value = "kafka������", notes = "kafka������") + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") + }) @RequestMapping(value = "kafkaTest", method = RequestMethod.GET) public void kafkaTest() { - kafkaTemplate.send("test_topic","test111111111111111"); + kafkaTemplate.send("test_topic", "{'mac': 'p5dnd1234567','DataTime':1623058244104,'e1':10,'e2':20,'ver':2}"); } @GetMapping("testToken") - public void testToken(){ + public void testToken() { String decoded = TokenEncryptUtils.decoded("5b53480d4e570b54565f555775"); String decoded2 = TokenEncryptUtils.decoded("584f560a49510f5453515453"); System.out.println(decoded); @@ -117,7 +124,7 @@ BufferedReader fis = new BufferedReader(new FileReader(path)); BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Users\\cdl\\Desktop\\provin1ce.txt")); String line = ""; - while((line = fis.readLine())!=null){ + while ((line = fis.readLine()) != null) { //������code StringBuilder str = new StringBuilder(line); String code = str.substring(31, 37); @@ -127,9 +134,9 @@ int i = 0; StringBuilder buffered = new StringBuilder(); for (char aChar : chars) { - if(aChar=='\'') - i ++; - if(i==1){ + if (aChar == '\'') + i++; + if (i == 1) { buffered.append(aChar); } } @@ -142,15 +149,15 @@ int j = 0; StringBuilder buffered2 = new StringBuilder(); for (char c : chars1) { - if(j==6){ + if (j == 6) { buffered2.append(c); } - if(c==',') + if (c == ',') j++; } StringBuilder parentCode = buffered2.deleteCharAt(buffered2.length() - 1); //������ - writer.write("INSERT INTO `sys_area` VALUES ("+code+","+name+","+parentCode+");"); + writer.write("INSERT INTO `sys_area` VALUES (" + code + "," + name + "," + parentCode + ");"); writer.newLine(); } diff --git a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaReceiver.java b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaReceiver.java new file mode 100644 index 0000000..8119640 --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaReceiver.java @@ -0,0 +1,97 @@ +package com.moral.api.kafka.consumer; + +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.support.Acknowledgment; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.Map; + +import com.alibaba.fastjson.JSON; +import com.moral.api.service.DeviceService; +import com.moral.api.service.HistoryHourlyService; +import com.moral.api.service.HistoryMinutelyService; +import com.moral.constant.KafkaConstants; + +/*@Slf4j +@Component +public class KafkaReceiver { + + @Autowired + private HistoryMinutelyService historyMinutelyService; + + @Autowired + private HistoryHourlyService historyHourlyService; + + @Autowired + private DeviceService deviceService; + + //������������ + @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, groupId = KafkaConstants.GROUP_ID, containerFactory = "kafkaListenerContainerFactory") + public void listenMinute(ConsumerRecord<String, String> record, Acknowledgment ack) { + String msg = record.value(); + try { + Map<String, Object> data = JSON.parseObject(msg, HashMap.class); + System.out.println(data); + Object mac = data.get("mac"); + Object time = data.get("DataTime"); + Object ver = data.get("ver"); + if (StringUtils.isEmpty(ver) || StringUtils.isEmpty(time) || StringUtils.isEmpty(mac)) { + log.warn("some properties is null, param[0] message:" + msg); + return; + } + Map<String, Object> deviceInfo = deviceService.getDeviceByMac(mac.toString()); + if (deviceInfo == null) { + String deviceRealState = "null or deleted"; + log.warn("device record is " + deviceRealState + ", param[0] message:" + msg); + return; + } + //��������������������������� + data.put("DataTime", Math.round(new Double((Long) time) / 1000) * 1000); + + //��������������� + historyMinutelyService.insertHistoryMinutely(data); + + + ack.acknowledge(); + } catch (Exception e) { + log.error("param[0] message:" + msg); + } + } + + //������������ + @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, groupId = KafkaConstants.GROUP_ID, containerFactory = "kafkaListenerContainerFactory") + public void listenHour(ConsumerRecord<String, String> record, Acknowledgment ack) { + String msg = record.value(); + try { + Map<String, Object> data = JSON.parseObject(msg, HashMap.class); + System.out.println(data); + Object mac = data.get("mac"); + Object time = data.get("DataTime"); + Object ver = data.get("ver"); + if (StringUtils.isEmpty(ver) || StringUtils.isEmpty(time) || StringUtils.isEmpty(mac)) { + log.warn("some properties is null, param[0] message:" + msg); + return; + } + Map<String, Object> deviceInfo = deviceService.getDeviceByMac(mac.toString()); + if (deviceInfo == null) { + String deviceRealState = "null or deleted"; + log.warn("device record is " + deviceRealState + ", param[0] message:" + msg); + return; + } + //��������������������������� + data.put("DataTime", Math.round(new Double((Long) time) / 1000) * 1000); + + //��������������� + historyHourlyService.insertHistoryHourly(data); + + ack.acknowledge(); + } catch (Exception e) { + log.error("param[0] message:" + msg); + } + } +}*/ diff --git a/screen-manage/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java new file mode 100644 index 0000000..ce88532 --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java @@ -0,0 +1,20 @@ +package com.moral.api.mapper; + +import java.util.Map; + +import com.moral.api.entity.HistoryHourly; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ��������� Mapper ������ + * </p> + * + * @author moral + * @since 2021-06-04 + */ +public interface HistoryMinutelyMapper{ + + int insertHistoryMinutely(Map<String,Object> params); + +} \ No newline at end of file diff --git a/screen-manage/src/main/java/com/moral/api/service/DeviceService.java b/screen-manage/src/main/java/com/moral/api/service/DeviceService.java index eb68f0a..5fac936 100644 --- a/screen-manage/src/main/java/com/moral/api/service/DeviceService.java +++ b/screen-manage/src/main/java/com/moral/api/service/DeviceService.java @@ -52,4 +52,13 @@ //������������id������������������������������������������������������������������������������������������������ Map<String, Object> selectDeviceInfoById(Integer deviceId); + //������mac������������������ + Map<String, Object> getDeviceByMac(String mac); + + //������������������ + Map<String, Object> adjustDeviceData(Map<String, Object> deviceData, Map<String, Object> deviceInfo); + + //��������������������������� + Map<String, Object> judgeDeviceState(Map<String, Object> data, Map<String, Object> deviceInfo); + } diff --git a/screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java b/screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java new file mode 100644 index 0000000..8d2994c --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java @@ -0,0 +1,20 @@ +package com.moral.api.service; + +import java.util.Map; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.moral.api.entity.HistoryHourly; + +/** + * <p> + * ��������� ��������� + * </p> + * + * @author moral + * @since 2021-06-04 + */ +public interface HistoryMinutelyService { + + void insertHistoryMinutely(Map<String, Object> deviceData); + +} diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java index 01836ff..6a972f9 100644 --- a/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java +++ b/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java @@ -1,5 +1,6 @@ package com.moral.api.service.impl; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -22,11 +23,12 @@ import com.moral.api.util.LogUtils; import com.moral.constant.Constants; -import com.moral.redis.RedisUtil; +import com.moral.constant.RedisConstants; import com.moral.util.ConvertUtils; import com.moral.util.DateUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; @@ -75,6 +77,49 @@ @Autowired private LogUtils logUtils; + @Autowired + private RedisTemplate redisTemplate; + + + /* + * ���redis������������������ + * */ + private Map<String, Object> getDeviceInfoFromRedis(String mac) { + Map<String, Object> deviceInfo = (Map<String, Object>) redisTemplate.opsForValue().get(RedisConstants.DEVICE + mac); + return deviceInfo; + } + + /* + * ������������������redis + */ + private void setDeviceInfoToRedis(String mac, Map<String, Object> deviceInfo) { + redisTemplate.opsForValue().set(getDeviceKey(mac), deviceInfo); + } + + /* + * ���redis������������������ + */ + private void delDeviceInfoFromRedis(String mac) { + redisTemplate.delete(getDeviceKey(mac)); + } + + /* + * ���������������������redis������key + */ + private String getDeviceKey(String mac) { + return keysConnect(RedisConstants.DEVICE, mac); + } + + //redis key������ + private String keysConnect(String... keys) { + StringBuilder key = new StringBuilder(keys[0]); + for (int i = 1; i < keys.length; i++) { + key.append("_"); + key.append(keys[i]); + } + return key.toString().toLowerCase(); + } + @Override @Transactional public void insert(Device device) { @@ -83,12 +128,15 @@ deviceMapper.insert(device); Map<String, Object> deviceInfo = selectDeviceInfoById(device.getId()); //������������������������redis - RedisUtil.del("device_" + device.getMac()); - RedisUtil.set("device_" + device.getMac(), deviceInfo); + String mac = device.getMac(); + //���redis��������������������� + delDeviceInfoFromRedis(mac); + //������������������redis + setDeviceInfoToRedis(mac, deviceInfo); //������������������ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); StringBuilder content = new StringBuilder(); - content.append("������������������").append(device.getName()).append("���").append("mac���").append(device.getMac()); + content.append("������������������").append(device.getName()).append("���").append("mac���").append(mac); logUtils.saveOperationForManage(request, content.toString(), Constants.INSERT_OPERATE_TYPE); } @@ -100,8 +148,8 @@ deviceMapper.update(null, updateWrapper); Device device = deviceMapper.selectById(deviceId); String mac = device.getMac(); - //������redis - RedisUtil.del("device_" + mac); + //���redis��������������������� + delDeviceInfoFromRedis(mac); //������������������ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); StringBuilder content = new StringBuilder(); @@ -116,10 +164,11 @@ Device oldDevice = deviceMapper.selectById(deviceId); deviceMapper.updateById(device); String mac = deviceMapper.selectById(deviceId).getMac(); - //������redis - RedisUtil.del("device_" + mac); + //���redis��������������������� + delDeviceInfoFromRedis(mac); Map<String, Object> deviceInfo = selectDeviceInfoById(deviceId); - RedisUtil.set("device_" + mac, deviceInfo); + //������������������redis + setDeviceInfoToRedis(mac, deviceInfo); //������������������ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); StringBuilder content = new StringBuilder(); @@ -249,7 +298,7 @@ @Override public Map<String, Object> selectDeviceInfoById(Integer deviceId) { String mac = deviceMapper.selectById(deviceId).getMac(); - Map<String, Object> deviceInfo = (Map<String, Object>) RedisUtil.get("device_" + mac); + Map<String, Object> deviceInfo = getDeviceInfoFromRedis(mac); //������redis������ if (deviceInfo != null) { return deviceInfo; @@ -317,7 +366,7 @@ mpInfo.put("name", monitorPoint.getName()); deviceInfo.put("monitorPoint", mpInfo); - RedisUtil.set("device_" + mac, deviceInfo); + setDeviceInfoToRedis(mac, deviceInfo); return deviceInfo; } @@ -335,4 +384,30 @@ return monitorPointMapper.selectMaps(queryWrapper); } + @Override + public Map<String, Object> getDeviceByMac(String mac) { + Map<String, Object> deviceInfo = getDeviceInfoFromRedis(mac); + if (deviceInfo == null) { + QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("mac", mac).eq("is_delete", Constants.NOT_DELETE); + Device device = deviceMapper.selectOne(queryWrapper); + if (device != null) { + deviceInfo = selectDeviceInfoById(device.getId()); + setDeviceInfoToRedis(mac, deviceInfo); + } + } + return deviceInfo; + } + + @Override + public Map<String, Object> adjustDeviceData(Map<String, Object> deviceData, Map<String, Object> deviceInfo) { + return null; + } + + @Override + public Map<String, Object> judgeDeviceState(Map<String, Object> deviceData, Map<String, Object> deviceInfo) { + return null; + } + + } diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java new file mode 100644 index 0000000..6df638c --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java @@ -0,0 +1,63 @@ +package com.moral.api.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import com.alibaba.fastjson.JSON; +import com.moral.api.mapper.HistoryMinutelyMapper; +import com.moral.api.service.DeviceService; +import com.moral.api.service.HistoryMinutelyService; +import com.moral.constant.Constants; +import com.moral.util.DateUtils; + +@Service +public class HistoryMinutelyServiceImpl implements HistoryMinutelyService { + + @Autowired + private HistoryMinutelyMapper historyMinutelyMapper; + + @Autowired + private DeviceService deviceService; + + @Override + public void insertHistoryMinutely(Map<String, Object> deviceData) { + Map<String, Object> result = new HashMap<>(); + Object mac = deviceData.remove("mac"); + result.put("mac", mac); + result.put("version", deviceData.remove("ver")); + Date time = new Date((Long) deviceData.remove("DataTime")); + result.put("time", DateUtils.dateToDateString(time)); + result.put("value", JSON.toJSONString(deviceData)); + String timeUnits = DateUtils.dateToDateString(time, DateUtils.yyyyMM_EN); + result.put("timeUnits", tableSuffix(timeUnits, Constants.UN_ADJUST)); + //��������� + historyMinutelyMapper.insertHistoryMinutely(result); + + //������������ + Map<String, Object> deviceInfo = deviceService.getDeviceByMac(mac.toString()); + + //��������������������������������������� + result.put("timeUnits", timeUnits); + deviceData = deviceService.adjustDeviceData(deviceData, deviceInfo); + result.put("value", JSON.toJSONString(deviceData)); + historyMinutelyMapper.insertHistoryMinutely(result); + + //������������������ + Map<String, Object> deviceState = deviceService.judgeDeviceState(deviceData, deviceInfo); + } + + //��������� + private String tableSuffix(String... keys) { + StringBuilder key = new StringBuilder(keys[0]); + for (int i = 1; i < keys.length; i++) { + key.append("_"); + key.append(keys[i]); + } + return key.toString(); + } + +} diff --git a/screen-manage/src/main/resources/mapper/HistoryMinutelyMapper.xml b/screen-manage/src/main/resources/mapper/HistoryMinutelyMapper.xml new file mode 100644 index 0000000..2094b2a --- /dev/null +++ b/screen-manage/src/main/resources/mapper/HistoryMinutelyMapper.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.moral.api.mapper.HistoryMinutelyMapper"> + + <insert id="insertHistoryMinutely"> + INSERT INTO history_minutely_${timeUnits} VALUES (#{mac}, #{time}, #{value}, #{version}) + </insert> + +</mapper> \ No newline at end of file -- Gitblit v1.8.0