From eb51b2364e9a3fbe806fde61fa255660a098fc8b Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Thu, 24 Jun 2021 14:06:41 +0800 Subject: [PATCH] Merge branch 'dev' of http://blit.7drlb.com:8888/r/moral into dev --- screen-job/src/main/java/com/moral/api/service/DeviceService.java | 20 screen-api/src/main/java/com/moral/api/service/impl/GroupServiceImpl.java | 32 screen-api/src/main/java/com/moral/api/service/GroupMenuService.java | 2 screen-job/src/main/java/com/moral/api/entity/HistoryDaily.java | 36 screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java | 21 screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java | 83 + screen-job/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java | 11 screen-manage/src/main/java/com/moral/api/controller/DeviceController.java | 2 screen-api/src/main/resources/application-dev.yml | 13 screen-job/src/main/java/com/moral/api/mapper/CityAqiConfigMapper.java | 16 screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java | 33 screen-api/src/main/java/com/moral/api/service/impl/UserGroupServiceImpl.java | 16 screen-job/src/main/java/com/moral/api/mapper/HistoryDailyMapper.java | 21 screen-job/src/main/java/com/moral/api/entity/HistoryAqi.java | 45 + screen-api/src/main/resources/mapper/GroupMapper.xml | 5 screen-api/src/main/java/com/moral/api/controller/MenuController.java | 4 screen-common/src/main/java/com/moral/util/DateUtils.java | 42 screen-job/src/main/java/com/moral/api/service/HistoryMinutelyService.java | 12 screen-manage/src/main/java/com/moral/api/service/DeviceService.java | 6 screen-job/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml | 25 screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java | 63 + screen-manage/src/main/java/com/moral/api/service/impl/SensorServiceImpl.java | 25 screen-job/src/main/java/com/moral/api/config/redis/RedisConfig.java | 67 + screen-manage/src/main/resources/application-dev.yml | 9 screen-job/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java | 9 screen-manage/src/main/resources/mapper/HistoryHourlyMapper.xml | 17 screen-api/src/main/java/com/moral/api/entity/Group.java | 2 screen-manage/src/main/resources/mapper/DeviceMapper.xml | 8 myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java | 3 screen-job/src/main/java/com/moral/api/mapper/DeviceMapper.java | 16 screen-job/src/main/java/com/moral/api/task/CreateTableTask.java | 52 + screen-job/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java | 27 screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java | 64 + screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java | 34 screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java | 81 + .gitignore | 5 screen-job/src/main/java/com/moral/api/entity/CityAqiConfig.java | 50 + screen-job/src/main/resources/logback-spring.xml | 56 + screen-api/src/main/java/com/moral/api/service/GroupService.java | 9 screen.iml | 125 ++ pom.xml | 9 screen-api/src/main/java/com/moral/api/controller/GroupController.java | 37 screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java | 123 ++ screen-api/src/main/java/com/moral/api/kafka/consumer/SecondsDataConsumer.java | 2 screen-job/src/main/java/com/moral/api/service/impl/CityAqiConfigServiceImpl.java | 31 screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java | 4 screen-api/src/main/java/com/moral/api/service/UserService.java | 12 screen-manage/src/main/java/com/moral/api/entity/HistoryHourly.java | 51 + screen-job/src/main/java/com/moral/api/config/xxljob/XxlJobConfig.java | 68 + screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java | 74 + screen-api/src/main/java/com/moral/api/entity/User.java | 7 screen-common/src/main/java/com/moral/constant/Constants.java | 5 screen-job/src/main/java/com/moral/api/task/JudgeOffLineDeviceTask.java | 28 screen-api/src/main/resources/mapper/GroupMenuMapper.xml | 22 screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 69 + screen-common/src/main/java/com/moral/constant/RedisConstants.java | 32 screen-api/src/main/resources/mapper/MenuMapper.xml | 17 screen-job/src/main/java/com/moral/api/service/CityAqiConfigService.java | 20 screen-job/src/main/resources/mapper/DeviceMapper.xml | 29 screen-common/src/main/java/com/moral/constant/KafkaConstants.java | 16 screen-job/src/main/resources/mapper/CityAqiConfigMapper.xml | 13 screen-api/src/main/java/com/moral/api/service/impl/GroupMenuServiceImpl.java | 6 screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 175 ++- screen-api/src/main/java/com/moral/api/controller/LoginController.java | 32 screen-api/src/main/java/com/moral/api/controller/UserController.java | 31 myBatisPlusGenerator/myBatisPlusGenerator.iml | 137 +++ screen-manage/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java | 13 screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java | 77 + screen-api/src/main/java/com/moral/api/service/UserGroupService.java | 3 screen-job/src/main/resources/mapper/HistoryDailyMapper.xml | 19 screen-job/src/main/java/com/moral/api/service/HistoryAqiService.java | 10 screen-job/src/main/resources/mapper/HistoryAqiMapper.xml | 12 screen-job/src/main/java/com/moral/api/mapper/HistoryAqiMapper.java | 17 /dev/null | 4 screen-job/src/main/java/com/moral/api/mapper/HistoryFiveMinutelyMapper.java | 15 screen-manage/src/main/java/com/moral/api/controller/TestController.java | 25 screen-job/src/main/java/com/moral/api/task/HistoryAqiInsertTask.java | 27 screen-manage/src/main/java/com/moral/api/service/HistoryHourlyService.java | 20 screen-job/src/main/resources/application-dev.yml | 1 screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java | 2 screen-manage/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java | 20 screen-job/src/main/java/com/moral/api/entity/Device.java | 132 ++ screen-job/src/main/resources/mapper/HistoryMinutelyMapper.xml | 50 + 83 files changed, 2,355 insertions(+), 309 deletions(-) diff --git a/.gitignore b/.gitignore index 9a8a286..fae67da 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,8 @@ myBatisPlusGenerator/src/test/ screen-common/src/main/resources/ screen-manage/src/test/ +/home +/screen-api/screen-api.iml +/screen-job/screen-job.iml +/screen-common/screen-common.iml +/screen-manage/screen-manage.iml \ No newline at end of file diff --git a/myBatisPlusGenerator/myBatisPlusGenerator.iml b/myBatisPlusGenerator/myBatisPlusGenerator.iml new file mode 100644 index 0000000..9128d11 --- /dev/null +++ b/myBatisPlusGenerator/myBatisPlusGenerator.iml @@ -0,0 +1,137 @@ +<?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="web" name="Web"> + <configuration> + <webroots /> + </configuration> + </facet> + <facet type="Spring" name="Spring"> + <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" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.12" 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: org.springframework.boot:spring-boot-autoconfigure: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-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: com.baomidou:mybatis-plus-generator: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.apache.velocity:velocity-engine-core:2.0" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" /> + <orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.23" level="project" /> + <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.19" level="project" /> + <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.5" 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.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.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.springframework.boot:spring-boot-starter-websocket:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-websocket:5.1.14.RELEASE" 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" 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" /> + <orderEntry type="library" name="Maven: com.xuxueli:xxl-job-core:2.3.0" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.45.Final" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" /> + <orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:2.5.9" level="project" /> + <orderEntry type="library" name="Maven: com.googlecode.aviator:aviator:5.2.5" level="project" /> + </component> +</module> \ No newline at end of file diff --git a/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java b/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java index 23d5672..1ace387 100644 --- a/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java +++ b/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java @@ -43,7 +43,7 @@ // ������������ GlobalConfig gc = new GlobalConfig(); //String projectPath = System.getProperty("user.dir"); - String projectPath="C:\\Users\\cdl\\Desktop\\comProject\\newProject\\moral\\screen-manage\\"; + String projectPath="D:\\tools\\IdeaProjects\\moral\\screen-job"; gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("moral"); gc.setOpen(false); @@ -67,6 +67,7 @@ // ��������������� DataSourceConfig dsc = new DataSourceConfig(); + dsc.setUrl("jdbc:mysql://rm-bp1pr3rx9m3fnkwsk8o.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"); dsc.setUrl("jdbc:mysql://rm-bp1pr3rx9m3fnkwsk8o.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); diff --git a/pom.xml b/pom.xml index 247deb0..10090e3 100644 --- a/pom.xml +++ b/pom.xml @@ -43,6 +43,7 @@ <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> + <aviator.version>5.2.5</aviator.version> </properties> @@ -51,7 +52,6 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> - <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> @@ -126,6 +126,13 @@ <artifactId>xxl-job-core</artifactId> <version>${xxl-job.version}</version> </dependency> + <!-- https://mvnrepository.com/artifact/com.googlecode.aviator/aviator --> + <dependency> + <groupId>com.googlecode.aviator</groupId> + <artifactId>aviator</artifactId> + <version>${aviator.version}</version> + </dependency> + </dependencies> diff --git a/screen-api/src/main/java/com/moral/api/controller/GroupController.java b/screen-api/src/main/java/com/moral/api/controller/GroupController.java index 3223ef9..302b910 100644 --- a/screen-api/src/main/java/com/moral/api/controller/GroupController.java +++ b/screen-api/src/main/java/com/moral/api/controller/GroupController.java @@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.moral.api.entity.Group; import com.moral.api.service.GroupService; @@ -25,6 +24,7 @@ import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; import com.moral.util.PageResult; +import com.moral.util.WebUtils; @Slf4j @Api(tags = {"���������"}) @@ -57,21 +57,16 @@ @ApiOperation(value = "���������", notes = "���������") @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "���id", required = true, paramType = "query", dataType = "int"), @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") }) - @RequestMapping(value = "delete", method = RequestMethod.POST) - public ResultMessage delete(@RequestBody Group group) { - if (group.getId() == null) { + @RequestMapping(value = "delete", method = RequestMethod.GET) + public ResultMessage delete(Integer id) { + if (id == null) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } - QueryWrapper<Group> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("id", group.getId()); - group = groupService.getOne(queryWrapper); - if (group == null) { - return ResultMessage.fail(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getCode(), ResponseCodeEnum.ACCOUNT_NOT_EXIST.getMsg()); - } - groupService.deleteGroup(group); + groupService.deleteGroup(id); return ResultMessage.ok(); } @@ -80,8 +75,7 @@ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") }) @RequestMapping(value = "update", method = RequestMethod.POST) - public ResultMessage update(@RequestBody Group group, HttpServletRequest request) { - String token = request.getHeader("token"); + public ResultMessage update(@RequestBody Group group) { Map<String, Object> result = groupService.updateGroup(group); if (!result.isEmpty()) { return ResultMessage.fail((int) result.get("code"), result.get("msg").toString()); @@ -98,8 +92,9 @@ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"), @ApiImplicitParam(name = "groupName", value = "������������������", required = false, paramType = "query", dataType = "String") }) - @RequestMapping(value = "select", method = RequestMethod.POST) - public ResultMessage select(@RequestBody Map<String, Object> parameters) { + @RequestMapping(value = "select", method = RequestMethod.GET) + public ResultMessage select(HttpServletRequest request) { + Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null); Page<Group> userPage = groupService.selectGroups(parameters); PageResult<Group> pageResult = new PageResult<>( userPage.getTotal(), userPage.getPages(), userPage.getRecords() @@ -109,12 +104,18 @@ @ApiOperation(value = "���������������������ids", notes = "���������������������ids") @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "������id", required = true, paramType = "query", dataType = "int"), @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") }) - @RequestMapping(value = "get-group-ids", method = RequestMethod.GET) + @RequestMapping(value = "getGroupIds", method = RequestMethod.GET) public ResultMessage getGroupIds(Integer userId) { - List<Integer> groupIds = userGroupService.getGroupIds(userId); - return ResultMessage.ok(groupIds); + System.out.println(userId); + if (userId == null) { + return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), + ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); + } + List<Map<String, Object>> groups = groupService.getGroupIds(userId); + return ResultMessage.ok(groups); } @ApiOperation(value = "���������������", notes = "���������������") diff --git a/screen-api/src/main/java/com/moral/api/controller/LoginController.java b/screen-api/src/main/java/com/moral/api/controller/LoginController.java index 2f34eee..ea704fe 100644 --- a/screen-api/src/main/java/com/moral/api/controller/LoginController.java +++ b/screen-api/src/main/java/com/moral/api/controller/LoginController.java @@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j; import java.io.IOException; +import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; @@ -22,7 +23,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.SysConfig; import com.moral.api.service.SysConfigService; -import com.moral.api.service.UserLogService; import com.moral.api.service.UserService; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; @@ -50,25 +50,35 @@ ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } Map<String, Object> result = userService.login(parameters); - if (!result.containsKey("data")) { + if (!result.containsKey("token")) { return ResultMessage.fail((int) result.get("code"), (String) result.get("msg")); } - Map<String, Object> data = (Map<String, Object>) result.get("data"); - return ResultMessage.ok(data); + return ResultMessage.ok(result); } - @ApiOperation(value = "������", notes = "������") - @RequestMapping(value = "logout", method = RequestMethod.POST) + @ApiOperation(value = "������������������", notes = "������������������") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") }) - public ResultMessage logout(@RequestBody Map<String, Object> parameters, HttpServletRequest request) { - if (!parameters.containsKey("uid")) { + @RequestMapping(value = "getUserInfo", method = RequestMethod.POST) + public ResultMessage getUserInfo(HttpServletRequest request) { + String token = request.getHeader("token"); + Map<String, Object> result = userService.getUserInfo(token); + return ResultMessage.ok(result); + } + + @ApiOperation(value = "������", notes = "������") + @RequestMapping(value = "logout", method = RequestMethod.GET) + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") + }) + public ResultMessage logout(Integer userId, HttpServletRequest request) { + if (userId == null) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } String token = request.getHeader("token"); - TokenUtils.destoryToken(parameters.get("uid").toString(), token); + TokenUtils.destoryToken(userId.toString(), token); return ResultMessage.ok(); } @@ -79,9 +89,9 @@ queryWrapper.eq(Constants.FRONT_VERIFICATIONCODE_COLUMN, Constants.FRONT_ERIFICATIONCODE_VALUE); SysConfig sysConfig = sysConfigService.getOne(queryWrapper); if (Constants.VERFICATIONCODE_OPEN.equals(sysConfig.getCode())) { - return new ResultMessage(ResponseCodeEnum.VERIFICATION_OPEN,null); + return new ResultMessage(ResponseCodeEnum.VERIFICATION_OPEN, null); } - return new ResultMessage(ResponseCodeEnum.VERIFICATION_CLOSE,null); + return new ResultMessage(ResponseCodeEnum.VERIFICATION_CLOSE, null); } @ApiOperation(value = "���������������", notes = "���������������") diff --git a/screen-api/src/main/java/com/moral/api/controller/MenuController.java b/screen-api/src/main/java/com/moral/api/controller/MenuController.java index f8b69ba..7ae682a 100644 --- a/screen-api/src/main/java/com/moral/api/controller/MenuController.java +++ b/screen-api/src/main/java/com/moral/api/controller/MenuController.java @@ -67,7 +67,7 @@ @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"), }) - @RequestMapping(value = "select", method = RequestMethod.POST) + @RequestMapping(value = "select", method = RequestMethod.GET) public ResultMessage select(HttpServletRequest request) { String token = request.getHeader("token"); Map<String, Object> currentUserInfo = (Map<String, Object>) TokenUtils.getUserInfoByToken(token); @@ -80,7 +80,7 @@ @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") }) - @RequestMapping(value = "get-menu-ids", method = RequestMethod.GET) + @RequestMapping(value = "getMenuIds", method = RequestMethod.GET) public ResultMessage getMenuIds(Integer groupId) { List<Integer> menusIds = groupMenuService.getMenusIds(groupId); return ResultMessage.ok(menusIds); diff --git a/screen-api/src/main/java/com/moral/api/controller/UserController.java b/screen-api/src/main/java/com/moral/api/controller/UserController.java index ba6d30a..39b7c5a 100644 --- a/screen-api/src/main/java/com/moral/api/controller/UserController.java +++ b/screen-api/src/main/java/com/moral/api/controller/UserController.java @@ -24,6 +24,7 @@ import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; import com.moral.util.PageResult; +import com.moral.util.WebUtils; @Slf4j @Api(tags = {"������������"}) @@ -40,6 +41,7 @@ }) @RequestMapping(value = "insert", method = RequestMethod.POST) public ResultMessage insert(@RequestBody User user) { + System.out.println(user); if (user.getAccount().isEmpty() || user.getPassword().isEmpty()) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); @@ -53,22 +55,16 @@ @ApiOperation(value = "������������", notes = "������������") @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "������id", required = true, paramType = "query", dataType = "int"), @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") }) - @RequestMapping(value = "delete", method = RequestMethod.POST) - public ResultMessage delete(@RequestBody User user) { - if (user.getId() == null) { + @RequestMapping(value = "delete", method = RequestMethod.GET) + public ResultMessage delete(Integer id) { + if (id == null) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } - QueryWrapper<User> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("id", user.getId()); - user = userService.getOne(queryWrapper); - if (user == null) { - return ResultMessage.fail(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getCode(), - ResponseCodeEnum.ACCOUNT_NOT_EXIST.getMsg()); - } - userService.deleteUser(user); + userService.deleteUser(id); return ResultMessage.ok(); } @@ -91,8 +87,8 @@ @ApiOperation(value = "������������������������", notes = "������������������������") @ApiImplicitParams({ - @ApiImplicitParam(name = "page", value = "���������", required = false, paramType = "query", dataType = "Integer"), - @ApiImplicitParam(name = "size", value = "������������", required = false, paramType = "query", dataType = "Integer"), + @ApiImplicitParam(name = "page", value = "���������", required = false, paramType = "query", dataType = "int"), + @ApiImplicitParam(name = "size", value = "������������", required = false, paramType = "query", dataType = "int"), @ApiImplicitParam(name = "order", value = "������������", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "orderType", value = "������������������������0������������1", defaultValue = "0", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"), @@ -103,8 +99,13 @@ @ApiImplicitParam(name = "wechat", value = "������������������", required = false, paramType = "query", dataType = "String"), }) - @RequestMapping(value = "select", method = RequestMethod.POST) - public ResultMessage select(@RequestBody Map<String, Object> parameters) { + @RequestMapping(value = "select", method = RequestMethod.GET) + public ResultMessage select(HttpServletRequest request) { + Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null); + if (!parameters.containsKey("page") || !parameters.containsKey("size")) { + return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), + ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); + } Page<User> userPage = userService.selectUsers(parameters); PageResult<User> pageResult = new PageResult<>( userPage.getTotal(), userPage.getPages(), userPage.getRecords() diff --git a/screen-api/src/main/java/com/moral/api/entity/Group.java b/screen-api/src/main/java/com/moral/api/entity/Group.java index dc0d63e..0b79a9b 100644 --- a/screen-api/src/main/java/com/moral/api/entity/Group.java +++ b/screen-api/src/main/java/com/moral/api/entity/Group.java @@ -22,7 +22,7 @@ */ @Data @EqualsAndHashCode(callSuper = false) -@TableName("`groupMenu`") +@TableName("`group`") public class Group extends Model<Group> { private static final long serialVersionUID = 1L; diff --git a/screen-api/src/main/java/com/moral/api/entity/User.java b/screen-api/src/main/java/com/moral/api/entity/User.java index 678ff19..cf22cd8 100644 --- a/screen-api/src/main/java/com/moral/api/entity/User.java +++ b/screen-api/src/main/java/com/moral/api/entity/User.java @@ -13,9 +13,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; - -import javax.persistence.Transient; - +import org.springframework.format.annotation.DateTimeFormat; /** * <p> @@ -93,7 +91,8 @@ /** * ������������ */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date expireTime; /** diff --git a/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondsDataConsumer.java b/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondsDataConsumer.java index 710e4a9..6b412cd 100644 --- a/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondsDataConsumer.java +++ b/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondsDataConsumer.java @@ -19,7 +19,7 @@ * @Date 2021/6/15 14:49 * @Version TODO **/ -@Component +//@Component public class SecondsDataConsumer implements ConsumerSeekAware { @KafkaListener(topics = "test",groupId = "SecondsDataGroup3") diff --git a/screen-api/src/main/java/com/moral/api/service/GroupMenuService.java b/screen-api/src/main/java/com/moral/api/service/GroupMenuService.java index 45edad9..70d23fb 100644 --- a/screen-api/src/main/java/com/moral/api/service/GroupMenuService.java +++ b/screen-api/src/main/java/com/moral/api/service/GroupMenuService.java @@ -16,7 +16,9 @@ */ public interface GroupMenuService extends IService<GroupMenu> { + //������������ void allotMenus(Map<String, Object> parameters); + //��������������������������������������� List<Integer> getMenusIds(Integer groupId); } diff --git a/screen-api/src/main/java/com/moral/api/service/GroupService.java b/screen-api/src/main/java/com/moral/api/service/GroupService.java index 02c1ea8..cde76b5 100644 --- a/screen-api/src/main/java/com/moral/api/service/GroupService.java +++ b/screen-api/src/main/java/com/moral/api/service/GroupService.java @@ -18,12 +18,19 @@ */ public interface GroupService extends IService<Group> { + //��������������������� Map<String, Object> addGroup(Group group); - void deleteGroup(Group group); + //��������������������� + void deleteGroup(Integer id); + //��������������������� Map<String, Object> updateGroup(Group group); + //��������������������������� Page<Group> selectGroups(Map<String, Object> parameters); + //��������������������������� + List<Map<String, Object>> getGroupIds(Integer userId); + } diff --git a/screen-api/src/main/java/com/moral/api/service/UserGroupService.java b/screen-api/src/main/java/com/moral/api/service/UserGroupService.java index 4bf9c24..8743a60 100644 --- a/screen-api/src/main/java/com/moral/api/service/UserGroupService.java +++ b/screen-api/src/main/java/com/moral/api/service/UserGroupService.java @@ -1,6 +1,5 @@ package com.moral.api.service; -import java.util.List; import java.util.Map; import com.moral.api.entity.UserGroup; @@ -16,7 +15,7 @@ */ public interface UserGroupService extends IService<UserGroup> { + //��������������������������� void allotGroups(Map<String, Object> parameters); - List<Integer> getGroupIds(Integer userId); } diff --git a/screen-api/src/main/java/com/moral/api/service/UserService.java b/screen-api/src/main/java/com/moral/api/service/UserService.java index 5680a37..90e5581 100644 --- a/screen-api/src/main/java/com/moral/api/service/UserService.java +++ b/screen-api/src/main/java/com/moral/api/service/UserService.java @@ -20,18 +20,28 @@ */ public interface UserService extends IService<User> { + //������ Map<String, Object> login(Map<String, Object> parameters); + //������token������������������ + Map<String,Object> getUserInfo(String token); + + //������������ Map<String, Object> getMenus(Map<String, Object> parameters); + //������������ Map<String, Object> addUser(User user); - void deleteUser(User user); + //������������ + void deleteUser(Integer userId); + //������������ Map<String, Object> updateUser(User user); + //������������������ Page<User> selectUsers(Map<String, Object> parameters); + //������������������������������������ UserBO selectUserInfo(Map<String, Object> parameters); } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/GroupMenuServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/GroupMenuServiceImpl.java index 7ddf506..ec6709b 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/GroupMenuServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/GroupMenuServiceImpl.java @@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -62,7 +63,7 @@ deleteWrapper.eq("group_id", groupId).eq("channel_key", Constants.WEB_CHANNEL); groupMenuMapper.delete(deleteWrapper); List<String> menus = new ArrayList<>(); - if (menuIds != null && !menuIds.isEmpty()) { + if (!ObjectUtils.isEmpty(menuIds)) { menuIds.forEach(menuId -> { menus.add(menuMapper.selectById(menuId).getName()); GroupMenu groupMenu = new GroupMenu(); @@ -74,10 +75,9 @@ }); } - //������ String groupName = groupMapper.selectById((Integer) parameters.get("groupId")).getGroupName(); - String content = "���������" + groupName + "������������������" + menus.toString(); + String content = "���������" + groupName + "������������������" + menus; operationLogUtils.insertLog(request, content, Constants.UPDATE_OPERATE_TYPE); } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/GroupServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/GroupServiceImpl.java index f03442c..166a709 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/GroupServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/GroupServiceImpl.java @@ -2,6 +2,7 @@ import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -80,21 +81,22 @@ } @Override - public void deleteGroup(Group group) { + public void deleteGroup(Integer id) { //������������group - group.setIsDelete(Constants.DELETE); - groupMapper.updateById(group); + UpdateWrapper<Group> updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", id).set("is_delete", Constants.DELETE); + groupMapper.update(null, updateWrapper); //������group_menu UpdateWrapper<GroupMenu> deleteGroupWrapper = new UpdateWrapper<>(); - deleteGroupWrapper.eq("group_id", group.getId()); + deleteGroupWrapper.eq("group_id", id); groupMenuMapper.delete(deleteGroupWrapper); //������user_group UpdateWrapper<UserGroup> deleteUserGroupWrapper = new UpdateWrapper<>(); - deleteUserGroupWrapper.eq("group_id", group.getId()); + deleteUserGroupWrapper.eq("group_id", id); userGroupMapper.delete(deleteUserGroupWrapper); //������ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); - String content = "���������������" + group.getGroupName(); + String content = "���������������" + groupMapper.selectById(id).getGroupName(); operationLogUtils.insertLog(request, content, Constants.DELETE_OPERATE_TYPE); } @@ -136,7 +138,8 @@ Integer orgId = (Integer) orgInfo.get("id"); QueryWrapper<Group> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("organization_id", orgId) - .eq("is_delete", Constants.NOT_DELETE); + .eq("is_delete", Constants.NOT_DELETE) + .ne("group_name", "admin"); Object order = parameters.get("order"); Object orderType = parameters.get("orderType"); Object groupName = parameters.get("groupName"); @@ -145,18 +148,9 @@ queryWrapper.like("group_name", groupName); } - //������������ - if (!parameters.containsKey("page")) { - parameters.put("page", 0); - } - if (!parameters.containsKey("size")) { - parameters.put("size", 10); - } - int page = Integer.parseInt(parameters.get("page").toString()); int size = Integer.parseInt(parameters.get("size").toString()); Page<Group> pageData = new Page<>(page, size); - //������������,������id������ //������������,������create_time������ if (order != null && orderType != null) { if (Constants.ORDER_ASC.equals(orderType)) { @@ -171,4 +165,10 @@ return pageData; } + @Override + public List<Map<String, Object>> getGroupIds(Integer userId) { + Map<String, Object> params = new HashMap<>(); + params.put("userId", userId); + return groupMapper.selectUserGroup(params); + } } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/UserGroupServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/UserGroupServiceImpl.java index 4515798..bcdc290 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/UserGroupServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/UserGroupServiceImpl.java @@ -5,7 +5,6 @@ import java.util.Map; import java.util.Objects; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.moral.api.entity.UserGroup; import com.moral.api.mapper.GroupMapper; @@ -20,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -62,7 +62,7 @@ deleteWrapper.eq("user_id", userId); userGroupMapper.delete(deleteWrapper); List<String> groups = new ArrayList<>(); - if (groupIds != null && !groupIds.isEmpty()) { + if (!ObjectUtils.isEmpty(groupIds)) { groupIds.forEach(groupId -> { groups.add(groupMapper.selectById(groupId).getGroupName()); UserGroup userGroup = new UserGroup(); @@ -75,17 +75,7 @@ //������ String account = userMapper.selectById((Integer) parameters.get("userId")).getAccount(); - String content = "������������" + account + "���������������" + groups.toString(); + String content = "������������" + account + "���������������" + groups; operationLogUtils.insertLog(request, content, Constants.UPDATE_OPERATE_TYPE); - } - - @Override - public List<Integer> getGroupIds(Integer userId) { - QueryWrapper<UserGroup> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("user_id", userId).eq("is_delete", Constants.NOT_DELETE); - List<UserGroup> userGroups = userGroupMapper.selectList(queryWrapper); - List<Integer> groupIds = new ArrayList<>(); - userGroups.forEach(userGroup -> groupIds.add(userGroup.getGroupId())); - return groupIds; } } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java index 9a82667..12dad29 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java @@ -1,9 +1,11 @@ package com.moral.api.service.impl; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -57,6 +59,7 @@ * @since 2021-03-09 */ @Service +@Slf4j public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired @@ -76,7 +79,6 @@ @Value("${AES.KEY}") private String AESKey; - @Override public UserBO selectUserInfo(Map<String, Object> parameters) { @@ -153,14 +155,12 @@ try { //������token������������redis String token = TokenUtils.getToken(userBo.getId().toString(), userInfo); - Map<String, Object> data = new HashMap<>(); - data.put("token", token); - data.put("user", userInfo); - result.put("data", data); + result.put("token", token); } catch (Exception e) { log.error("token���������������" + e.getMessage()); result.put("code", ResponseCodeEnum.TOKEN_CREATE_ERROR.getCode()); result.put("msg", ResponseCodeEnum.TOKEN_CREATE_ERROR.getMsg()); + return result; } //������ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); @@ -172,6 +172,12 @@ userLog.setContent("������������������" + userBo.getAccount()); userLogMapper.insert(userLog); return result; + } + + @Override + public Map<String, Object> getUserInfo(String token) { + Map<String, Object> userInfo = (Map<String, Object>) TokenUtils.getUserInfoByToken(token); + return userInfo; } @Override @@ -195,10 +201,10 @@ oneMenu.forEach(o -> { Map<String, Object> menuMap = new LinkedHashMap<>(); menuMap.put("id", o.getId()); - menuMap.put("name", o.getName()); + menuMap.put("label", o.getName()); menuMap.put("url", o.getUrl()); menuMap.put("icon", o.getIcon()); - menuMap.put("child", getMenusByRecursion(o, allMenus)); + menuMap.put("children", getMenusByRecursion(o, allMenus)); newList.add(menuMap); }); resultMap.put("menus", newList); @@ -242,24 +248,25 @@ QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("account", user.getAccount()).eq("is_delete", Constants.NOT_DELETE); //������������������������ - if (user.selectOne(queryWrapper) != null) { + if (user.selectCount(queryWrapper) > 0) { result.put("code", ResponseCodeEnum.ACCOUNT_EXIST.getCode()); result.put("msg", ResponseCodeEnum.ACCOUNT_EXIST.getMsg()); return result; } - //������������������ + //������������ if (!RegexUtils.checkAccount(user.getAccount())) { result.put("code", ResponseCodeEnum.ACCOUNT_INVALID.getCode()); result.put("msg", ResponseCodeEnum.ACCOUNT_INVALID.getMsg()); return result; } - //������������������ - if (user.getEmail() != null && !RegexUtils.checkEmail(user.getEmail())) { + + //������������ + if (!ObjectUtils.isEmpty(user.getEmail()) && !RegexUtils.checkEmail(user.getEmail())) { result.put("code", ResponseCodeEnum.EMAIL_INVALID.getCode()); result.put("msg", ResponseCodeEnum.EMAIL_INVALID.getMsg()); return result; } - //������������������ + //������������ String password = user.getPassword(); //������������ password = AESUtils.decrypt(password, AESKey); @@ -268,8 +275,8 @@ result.put("msg", ResponseCodeEnum.PASSWORD_INVALID.getMsg()); return result; } - //��������������������� - if (user.getMobile() != null && !RegexUtils.checkMobile(user.getMobile())) { + //��������������� + if (!ObjectUtils.isEmpty(user.getMobile()) && !RegexUtils.checkMobile(user.getMobile())) { result.put("code", ResponseCodeEnum.MOBILE_INVALID.getCode()); result.put("msg", ResponseCodeEnum.MOBILE_INVALID.getMsg()); return result; @@ -304,19 +311,20 @@ @Override @Transactional - public void deleteUser(User user) { - String userId = user.getId().toString(); + public void deleteUser(Integer userId) { + User user = userMapper.selectById(userId); //������������user - user.setIsDelete(Constants.DELETE); - userMapper.updateById(user); + UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", userId).set("is_delete", Constants.DELETE); + userMapper.update(null, updateWrapper); //������user_group UpdateWrapper<UserGroup> deleteWrapper = new UpdateWrapper<>(); deleteWrapper.eq("user_id", userId); userGroupMapper.delete(deleteWrapper); - //������redis - if (TokenUtils.hHasKey(userId)) { - String token = TokenUtils.hget(userId).toString(); - TokenUtils.destoryToken(userId, token); + //������redis + if (TokenUtils.hHasKey(userId.toString())) { + String token = TokenUtils.hget(userId.toString()).toString(); + TokenUtils.destoryToken(userId.toString(), token); } //������ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); @@ -330,25 +338,36 @@ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); String token = request.getHeader("token"); + Map<String, Object> result = new HashMap<>(); //��������������� Map<String, Object> update = JSONObject.parseObject(JSON.toJSONString(user), Map.class); - Map<String, Object> result = new HashMap<>(); Map<String, Object> currentUserInfo = (Map<String, Object>) TokenUtils.getUserInfoByToken(token); User beforeUser = userMapper.selectById(user.getId()); Map<String, Object> before = JSONObject.parseObject(JSON.toJSONString(beforeUser), Map.class); - String account = beforeUser.getAccount(); + /*String account = beforeUser.getAccount(); //account������������ - user.setAccount(account); + user.setAccount(account);*/ + System.out.println(user); + if (!ObjectUtils.isEmpty(user.getAccount())) { + QueryWrapper<User> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete", Constants.NOT_DELETE).eq("account", user.getAccount()); + if (userMapper.selectCount(queryWrapper) > 0) { + result.put("code", ResponseCodeEnum.ACCOUNT_EXIST.getCode()); + result.put("msg", ResponseCodeEnum.ACCOUNT_EXIST.getMsg()); + return result; + } + } //������������ - if (user.getEmail() != null && !RegexUtils.checkEmail(user.getEmail())) { + if (!ObjectUtils.isEmpty(user.getEmail()) && !RegexUtils.checkEmail(user.getEmail())) { result.put("code", ResponseCodeEnum.EMAIL_INVALID.getCode()); result.put("msg", ResponseCodeEnum.EMAIL_INVALID.getMsg()); return result; } //������������ String password = user.getPassword(); - if (password != null) { + System.out.println("password==" + password); + if (!ObjectUtils.isEmpty(password)) { //������������ password = AESUtils.decrypt(password, AESKey); if (!RegexUtils.checkPassword(password)) { @@ -359,7 +378,7 @@ } //��������������������� - if (user.getMobile() != null && !RegexUtils.checkMobile(user.getMobile())) { + if (!ObjectUtils.isEmpty(user.getMobile()) && !RegexUtils.checkMobile(user.getMobile())) { result.put("code", ResponseCodeEnum.MOBILE_INVALID.getCode()); result.put("msg", ResponseCodeEnum.MOBILE_INVALID.getMsg()); return result; @@ -404,7 +423,6 @@ } } operationLogUtils.insertLog(request, content.toString(), Constants.UPDATE_OPERATE_TYPE); - return result; } @@ -417,7 +435,8 @@ Map<String, Object> orgInfo = (Map<String, Object>) currentUserInfo.get("organization"); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("organization_id", orgInfo.get("id")) - .eq("is_delete", Constants.NOT_DELETE); + .eq("is_delete", Constants.NOT_DELETE) + .eq("is_admin", false); Object order = parameters.get("order"); Object orderType = parameters.get("orderType"); Object account = parameters.get("account"); @@ -442,8 +461,8 @@ queryWrapper.like("wechat", wechat); } - Integer page = (Integer) parameters.get("page"); - Integer size = (Integer) parameters.get("size"); + int page = Integer.parseInt(parameters.get("page").toString()); + int size = Integer.parseInt(parameters.get("size").toString()); Page<User> pageData = new Page<>(page, size); //������������,������create_time������ if (order != null && orderType != null) { diff --git a/screen-api/src/main/resources/application-dev.yml b/screen-api/src/main/resources/application-dev.yml index 3ec8fff..e8c8b6b 100644 --- a/screen-api/src/main/resources/application-dev.yml +++ b/screen-api/src/main/resources/application-dev.yml @@ -13,8 +13,10 @@ spring: profiles: active: dev + include: + moduleFormColumn application: - name: screen-manage + name: screen-api redis: host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com port: 6379 @@ -90,14 +92,11 @@ enable: auto: commit: false - group: - id: test - servers: 192.168.0.191:9092 + servers: 172.16.44.65:9092,172.16.44.67:9092,172.16.44.66:9092 session: timeout: 6000 - topic: test_topic zookeeper: - connect: 192.168.0.16:2181,192.168.0.17:2181,192.168.0.18:2181 + connect: 172.16.44.65:2181,172.16.44.67:2181,172.16.44.66:2181 producer: batch: size: 4096 @@ -105,7 +104,7 @@ memory: 40960 linger: 1 retries: 0 - servers: 192.168.0.16:9092,192.168.0.17:9092,192.168.0.18:9092 + servers: 172.16.44.65:9092,172.16.44.67:9092,172.16.44.66:9092 mvc: interceptor: exclude: diff --git a/screen-api/src/main/resources/mapper/GroupMapper.xml b/screen-api/src/main/resources/mapper/GroupMapper.xml index 1123a96..36edc9d 100644 --- a/screen-api/src/main/resources/mapper/GroupMapper.xml +++ b/screen-api/src/main/resources/mapper/GroupMapper.xml @@ -12,11 +12,6 @@ <result column="is_delete" property="isDelete"/> </resultMap> - <resultMap id="GroupResultMap" type="java.util.LinkedHashMap"> - <id column="id" property="id"/> - <result column="group_name" property="groupName"/> - </resultMap> - <select id="selectUserGroup" resultMap="GroupResultMap"> SELECT g.id,g.group_name FROM `group` g,`user_group` ug diff --git a/screen-api/src/main/resources/mapper/GroupMenuMapper.xml b/screen-api/src/main/resources/mapper/GroupMenuMapper.xml index 5930463..f0a661b 100644 --- a/screen-api/src/main/resources/mapper/GroupMenuMapper.xml +++ b/screen-api/src/main/resources/mapper/GroupMenuMapper.xml @@ -2,16 +2,16 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.moral.api.mapper.GroupMenuMapper"> - <!-- ������������������������ --> - <resultMap id="BaseResultMap" type="com.moral.api.entity.GroupMenu"> - <id column="id" property="id" /> - <result column="group_id" property="groupId" /> - <result column="menu_id" property="menuId" /> - <result column="channel_key" property="channelKey" /> - <result column="organization_id" property="organizationId" /> - <result column="create_time" property="createTime" /> - <result column="update_time" property="updateTime" /> - <result column="is_delete" property="isDelete" /> - </resultMap> + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.GroupMenu"> + <id column="id" property="id"/> + <result column="group_id" property="groupId"/> + <result column="menu_id" property="menuId"/> + <result column="channel_key" property="channelKey"/> + <result column="organization_id" property="organizationId"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + <result column="is_delete" property="isDelete"/> + </resultMap> </mapper> \ No newline at end of file diff --git a/screen-api/src/main/resources/mapper/MenuMapper.xml b/screen-api/src/main/resources/mapper/MenuMapper.xml index bfe661a..2634fdb 100644 --- a/screen-api/src/main/resources/mapper/MenuMapper.xml +++ b/screen-api/src/main/resources/mapper/MenuMapper.xml @@ -20,7 +20,7 @@ </sql> <select id="selectUserMenu" resultMap="BaseResultMap"> - select + SELECT <include refid="Base_Column_List"/> FROM `user_group` ug,`group_menu` gm,`menu` m WHERE ug.user_id = #{userId} @@ -33,14 +33,13 @@ </select> <select id="selectOrganizationMenu" resultMap="BaseResultMap"> - select - <include refid="Base_Column_List"/> - FROM `menu` m, `organization_menu` om - WHERE om.organization_id = #{orgId} - AND m.id = om.menu_id - AND om.channel_key = 0 - AND om.menu_id = m.id - AND om.is_delete = 0 + SELECT + DISTINCT m.id, m.name, m.url, m.icon, m.parent_id, m.order, m.create_time, m.update_time + FROM `menu` m, `group_menu` gm + WHERE gm.organization_id = #{orgId} + AND m.id = gm.menu_id + AND gm.channel_key = 0 + AND gm.is_delete = 0 AND m.is_delete = 0 </select> </mapper> \ No newline at end of file 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 a56abbd..535af51 100644 --- a/screen-common/src/main/java/com/moral/constant/Constants.java +++ b/screen-common/src/main/java/com/moral/constant/Constants.java @@ -120,5 +120,10 @@ * */ public static final String UN_ADJUST = "unadjust"; + /* + * ��������������������� + * */ + public static final String DEVICE_STATE_OFFLINE = "4"; + } diff --git a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java index 8f904d1..e1d6e80 100644 --- a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java +++ b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java @@ -5,15 +5,25 @@ /** * ������������������ */ - public static final String TOPIC_MINUTE = "test_topic"; + public static final String TOPIC_MINUTE = "minute"; /** * ������������������ */ public static final String TOPIC_HOUR = "hour"; + /* + * ��������������� + * */ + public static final String TOPIC_SECOND = "test"; + /** - * ��������� + * ������������������������������������������ */ - public static final String GROUP_ID = "test"; + public static final String GROUP_ID_INSERT = "insert"; + + /** + * ��������������������������������� + */ + public static final String GROUP_ID_STATE = "state"; } 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 dd34339..05e95cd 100644 --- a/screen-common/src/main/java/com/moral/constant/RedisConstants.java +++ b/screen-common/src/main/java/com/moral/constant/RedisConstants.java @@ -32,19 +32,31 @@ /* * ������������������ * */ - public static final String DEVICE = "device"; + public static final String DEVICE = "device_"; /* - * ������������������������ + * ��������������������������������������������������������������� + * ���������������hash + * key���mac + * value���Device + * ���������������Map<String,Device> * */ - public static final String STATE = "state"; + public static final String DEVICE_INFO = "device_alarm_info"; /* - * ��������������������������������������������������������������� - * ���������������hash - * key���mac - * value���Device - * ���������������Map<String,Device> - * */ - public static final String DEVICE_INFO = "device_alarm_info"; + * ������������������������ + * */ + public static final String ADJUST = "adjust_"; + + /* + * ������������������ + * */ + public static final String DEVICE_DATA = "data_"; + + /* + * ������������������ + * */ + public static final String AQI_DATA = "aqi_"; + + } diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java index cbc63a2..f5ecd8a 100644 --- a/screen-common/src/main/java/com/moral/util/DateUtils.java +++ b/screen-common/src/main/java/com/moral/util/DateUtils.java @@ -67,6 +67,14 @@ * ������������(HH:mm:ss) */ public static final String HH_mm_ss_EN = "HH:mm:ss"; + /* + * ������������(yyyy-MM-dd HH:mm) + * */ + public static final String yyyy_MM_dd_HH_mm_EN = "yyyy-MM-dd HH:mm"; + /* + * ������������(yyyy-MM-dd HH) + * */ + public static final String yyyy_MM_dd_HH_EN = "yyyy-MM-dd HH"; /** * DateFormat������ */ @@ -443,14 +451,14 @@ } /** - * @Description: ������������������day��������������� - * @Param: [date, day] - * @return: java.util.Date - * @Author: ��������� - * @Date: 2021/3/30 - */ + * @Description: ������������������day��������������� + * @Param: [date, day] + * @return: java.util.Date + * @Author: ��������� + * @Date: 2021/3/30 + */ public static Date getDateOfDay(Date date, int day) { - if(date==null) + if (date == null) return null; Calendar now = Calendar.getInstance(TimeZone.getDefault()); now.setTime(date); @@ -1293,11 +1301,23 @@ return date; } + //������������������������������������ + public static Date convertDate(Date date) { + String dateString = dateToDateString(date, yyyy_MM_dd_HH_mm_EN); + return getDate(dateString, yyyy_MM_dd_HH_mm_EN); + } + + //��������������������������������� + public static Date dataToTimeStampTime(Date time, String dateFormat) { + String dateString = dateToDateString(time, dateFormat); + try { + return getDateFormat(dateFormat).parse(dateString); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } public static void main(String[] args) throws InterruptedException { - Date date1 = new Date(); - Thread.sleep(1000); - Date date2 = new Date(); - System.out.println(DateUtils.compareDateStr(date1, date2)); + System.out.println(new Date().getTime()); } } diff --git a/screen-job/src/main/java/com/moral/api/config/redis/RedisConfig.java b/screen-job/src/main/java/com/moral/api/config/redis/RedisConfig.java new file mode 100644 index 0000000..1b34bb0 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/config/redis/RedisConfig.java @@ -0,0 +1,67 @@ +package com.moral.api.config.redis; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; + + +@Configuration +public class RedisConfig { + + @Bean(name = "redisTemplate") + @ConditionalOnMissingBean(StringRedisTemplate.class) //������������������ ���������������������RedisTemplate ������������ ������������������ + public RedisTemplate<String, Object> stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(objectMapper); + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + // key������String������������������ + redisTemplate.setKeySerializer(stringRedisSerializer); + // hash���key���������String������������������ + redisTemplate.setHashKeySerializer(stringRedisSerializer); + // valuevalue������jackson��������������� + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); + // hash���value������jackson��������������� + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); + redisTemplate.afterPropertiesSet(); + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + + public RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + + Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(objectMapper); + + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + // key������String������������������ + redisTemplate.setKeySerializer(stringRedisSerializer); + // hash���key���������String������������������ + redisTemplate.setHashKeySerializer(stringRedisSerializer); + // valuevalue������jackson��������������� + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); + // hash���value������jackson��������������� + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); + redisTemplate.afterPropertiesSet(); + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } +} 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 deleted file mode 100644 index fc087e1..0000000 --- a/screen-job/src/main/java/com/moral/api/config/xxl/XxlJobConfig.java +++ /dev/null @@ -1,135 +0,0 @@ -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/config/xxljob/XxlJobConfig.java b/screen-job/src/main/java/com/moral/api/config/xxljob/XxlJobConfig.java new file mode 100644 index 0000000..ccb076d --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/config/xxljob/XxlJobConfig.java @@ -0,0 +1,68 @@ +package com.moral.api.config.xxljob; + + +import lombok.extern.slf4j.Slf4j; +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.job") +@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; + } + + /** + * ������������������������������������������������������ "spring-cloud-commons" ��������� "InetUtils" ������������������������IP��� + * + * 1������������������ + * <dependency> + * <groupId>org.springframework.cloud</groupId> + * <artifactId>spring-cloud-commons</artifactId> + * <version>${version}</version> + * </dependency> + * + * 2������������������������������������������ + * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.' + * + * 3���������IP + * String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); + */ +} diff --git a/screen-job/src/main/java/com/moral/api/entity/CityAqiConfig.java b/screen-job/src/main/java/com/moral/api/entity/CityAqiConfig.java new file mode 100644 index 0000000..4c95fa0 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/CityAqiConfig.java @@ -0,0 +1,50 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ������������aqi������������ + * </p> + * + * @author moral + * @since 2021-06-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class CityAqiConfig extends Model<CityAqiConfig> { + + private static final long serialVersionUID = 1L; + + /** + * ������id + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * ������code + */ + private String cityCode; + + /** + * ������������ + */ + private String cityName; + + /** + * ���������������������������id + */ + private Integer cityId; + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/screen-job/src/main/java/com/moral/api/entity/Device.java b/screen-job/src/main/java/com/moral/api/entity/Device.java new file mode 100644 index 0000000..842a27f --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/Device.java @@ -0,0 +1,132 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ��������� + * </p> + * + * @author moral + * @since 2021-06-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class Device extends Model<Device> { + + private static final long serialVersionUID = 1L; + + /** + * ������id + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * ������������ + */ + private String name; + + /** + * mac��� + */ + private String mac; + + /** + * ������������ + */ + private String address; + + /** + * ������ + */ + private Double longitude; + + /** + * ������ + */ + private Double latitude; + + /** + * ��������������������������������� + */ + private String state; + + /** + * ���������id���������������������������������manage_account + */ + private String operateIds; + + /** + * ������id + */ + private Integer monitorPointId; + + /** + * ������id + */ + private Integer organizationId; + + /** + * ������������id + */ + private Integer deviceVersionId; + + /** + * ��������������������������� + */ + private String profession; + + /** + * ���������������1������������2������������3������������������������������������ + */ + private String tech; + + /** + * ������������������������������������ + */ + private String detector; + + /** + * ������������������������������ + */ + private String purchaser; + + /** + * ������(������)������ + */ + private LocalDateTime createTime; + + /** + * ������������ + */ + private LocalDateTime updateTime; + + /** + * ������������ + */ + private LocalDateTime installTime; + + /** + * ������������,0���������������1��������� + */ + private String isDelete; + + /** + * ������������������������ + */ + private String extend; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/screen-job/src/main/java/com/moral/api/entity/HistoryAqi.java b/screen-job/src/main/java/com/moral/api/entity/HistoryAqi.java new file mode 100644 index 0000000..95327da --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/HistoryAqi.java @@ -0,0 +1,45 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ������aqi��������� + * </p> + * + * @author moral + * @since 2021-06-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class HistoryAqi extends Model<HistoryAqi> { + + private static final long serialVersionUID = 1L; + + /** + * ������code + */ + private String cityCode; + + /** + * ������ + */ + private Date time; + + /** + * ������ + */ + private String value; + + + @Override + protected Serializable pkVal() { + return null; + } + +} diff --git a/screen-job/src/main/java/com/moral/api/entity/HistoryDaily.java b/screen-job/src/main/java/com/moral/api/entity/HistoryDaily.java new file mode 100644 index 0000000..b24913d --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/entity/HistoryDaily.java @@ -0,0 +1,36 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.extension.activerecord.Model; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * + * </p> + * + * @author moral + * @since 2021-06-11 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class HistoryDaily extends Model<HistoryDaily> { + + private static final long serialVersionUID = 1L; + + private String mac; + + private Date time; + + private String value; + + + @Override + protected Serializable pkVal() { + return null; + } + +} 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 deleted file mode 100644 index 9f0cf69..0000000 --- a/screen-job/src/main/java/com/moral/api/jobHandler/TestHandler.java +++ /dev/null @@ -1,21 +0,0 @@ -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/mapper/CityAqiConfigMapper.java b/screen-job/src/main/java/com/moral/api/mapper/CityAqiConfigMapper.java new file mode 100644 index 0000000..825f5ac --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/CityAqiConfigMapper.java @@ -0,0 +1,16 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.CityAqiConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ������������aqi������������ Mapper ������ + * </p> + * + * @author moral + * @since 2021-06-15 + */ +public interface CityAqiConfigMapper extends BaseMapper<CityAqiConfig> { + +} diff --git a/screen-job/src/main/java/com/moral/api/mapper/DeviceMapper.java b/screen-job/src/main/java/com/moral/api/mapper/DeviceMapper.java new file mode 100644 index 0000000..4bb2d15 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/DeviceMapper.java @@ -0,0 +1,16 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.Device; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ��������� Mapper ������ + * </p> + * + * @author moral + * @since 2021-06-22 + */ +public interface DeviceMapper extends BaseMapper<Device> { + +} diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryAqiMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryAqiMapper.java new file mode 100644 index 0000000..87650be --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryAqiMapper.java @@ -0,0 +1,17 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.HistoryAqi; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ������aqi��������� Mapper ������ + * </p> + * + * @author moral + * @since 2021-06-15 + */ +public interface HistoryAqiMapper extends BaseMapper<HistoryAqi> { + +} + diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryDailyMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryDailyMapper.java new file mode 100644 index 0000000..0159fde --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryDailyMapper.java @@ -0,0 +1,21 @@ +package com.moral.api.mapper; + +import java.util.List; +import java.util.Map; + +import com.moral.api.entity.HistoryDaily; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * Mapper ������ + * </p> + * + * @author moral + * @since 2021-06-11 + */ +public interface HistoryDailyMapper extends BaseMapper<HistoryDaily> { + + void insertHistoryDaily(List<HistoryDaily> list); + +} diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryFiveMinutelyMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryFiveMinutelyMapper.java new file mode 100644 index 0000000..40c1caa --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryFiveMinutelyMapper.java @@ -0,0 +1,15 @@ +package com.moral.api.mapper; + + +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface HistoryFiveMinutelyMapper { + + void createTable(String timeUnits); + + void insertHistoryFiveMinutely(@Param("list") List<Map<String, Object>> list, @Param("timeUnits") String timeUnits); + +} diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java new file mode 100644 index 0000000..dd466df --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java @@ -0,0 +1,11 @@ +package com.moral.api.mapper; + +import java.util.List; +import java.util.Map; + +public interface HistoryMinutelyMapper { + + void createTable(String timeUnits); + + List<Map<String, Object>> getHistoryFiveMinutelyData(Map<String,Object> params); +} diff --git a/screen-job/src/main/java/com/moral/api/service/CityAqiConfigService.java b/screen-job/src/main/java/com/moral/api/service/CityAqiConfigService.java new file mode 100644 index 0000000..26e6691 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/CityAqiConfigService.java @@ -0,0 +1,20 @@ +package com.moral.api.service; + +import java.util.List; + +import com.moral.api.entity.CityAqiConfig; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ������������aqi������������ ��������� + * </p> + * + * @author moral + * @since 2021-06-15 + */ +public interface CityAqiConfigService extends IService<CityAqiConfig> { + + List<CityAqiConfig> getCityAqiConfigs(); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/DeviceService.java b/screen-job/src/main/java/com/moral/api/service/DeviceService.java new file mode 100644 index 0000000..f33824e --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/DeviceService.java @@ -0,0 +1,20 @@ +package com.moral.api.service; + +import com.moral.api.entity.Device; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ��������� ��������� + * </p> + * + * @author moral + * @since 2021-06-22 + */ +public interface DeviceService extends IService<Device> { + + void judgeOffLineDevice(); + + void updateDeviceState(Device device); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryAqiService.java b/screen-job/src/main/java/com/moral/api/service/HistoryAqiService.java new file mode 100644 index 0000000..078a270 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/HistoryAqiService.java @@ -0,0 +1,10 @@ +package com.moral.api.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.moral.api.entity.HistoryAqi; + +public interface HistoryAqiService extends IService<HistoryAqi> { + + void insertHistoryAqi(); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java new file mode 100644 index 0000000..b08dd7b --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java @@ -0,0 +1,21 @@ +package com.moral.api.service; + +import java.util.List; +import java.util.Map; + +import com.moral.api.entity.HistoryDaily; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ��������� + * </p> + * + * @author moral + * @since 2021-06-11 + */ +public interface HistoryDailyService extends IService<HistoryDaily> { + + void insertHistoryDaily(List<HistoryDaily> list); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java new file mode 100644 index 0000000..23ad4ef --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java @@ -0,0 +1,9 @@ +package com.moral.api.service; + +public interface HistoryFiveMinutelyService { + + void createTable(String timeUnits); + + void insertHistoryFiveMinutely(); + +} diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryMinutelyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryMinutelyService.java new file mode 100644 index 0000000..7b614af --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/HistoryMinutelyService.java @@ -0,0 +1,12 @@ +package com.moral.api.service; + +import java.util.List; +import java.util.Map; + +public interface HistoryMinutelyService { + + void createTable(String timeUnits); + + List<Map<String, Object>> getHistoryFiveMinutelyData(Map<String, Object> params); + +} 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 deleted file mode 100644 index 7b34503..0000000 --- a/screen-job/src/main/java/com/moral/api/service/Test.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.moral.api.service; - -public class Test { -} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiConfigServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiConfigServiceImpl.java new file mode 100644 index 0000000..5d7aca6 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiConfigServiceImpl.java @@ -0,0 +1,31 @@ +package com.moral.api.service.impl; + +import com.moral.api.entity.CityAqiConfig; +import com.moral.api.mapper.CityAqiConfigMapper; +import com.moral.api.service.CityAqiConfigService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * <p> + * ������������aqi������������ ��������������� + * </p> + * + * @author moral + * @since 2021-06-15 + */ +@Service +public class CityAqiConfigServiceImpl extends ServiceImpl<CityAqiConfigMapper, CityAqiConfig> implements CityAqiConfigService { + + @Autowired + private CityAqiConfigMapper cityAqiConfigMapper; + + @Override + public List<CityAqiConfig> getCityAqiConfigs() { + return cityAqiConfigMapper.selectList(null); + } +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..8850e00 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java @@ -0,0 +1,69 @@ +package com.moral.api.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.moral.api.entity.Device; +import com.moral.api.mapper.DeviceMapper; +import com.moral.api.service.DeviceService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.moral.constant.Constants; +import com.moral.constant.RedisConstants; +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 java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * <p> + * ��������� ��������������� + * </p> + * + * @author moral + * @since 2021-06-22 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService { + + @Autowired + private DeviceMapper deviceMapper; + + @Autowired + private RedisTemplate redisTemplate; + + @Override + public void judgeOffLineDevice() { + QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); + queryWrapper.ne("state", Constants.DEVICE_STATE_OFFLINE); + //������������������������ + List<Device> devices = deviceMapper.selectList(queryWrapper); + for (Device device : devices) { + Map<String, Object> data = getDataFromRedis(device.getMac()); + device.setState(Constants.DEVICE_STATE_OFFLINE); + if (data != null && data.containsKey("DataTime")) { + long time = Long.parseLong(data.get("DataTime").toString()); + //��������������������������������� + if (DateUtils.getDateOfMin(new Date(time), 2).getTime() < new Date().getTime()) { + updateDeviceState(device); + } + } else { + updateDeviceState(device); + } + } + } + + @Override + public void updateDeviceState(Device device) { + UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", device.getId()).set("state", device.getState()); + deviceMapper.update(null, updateWrapper); + } + + private Map<String, Object> getDataFromRedis(String mac) { + return (Map<String, Object>) redisTemplate.opsForValue().get(RedisConstants.DEVICE_DATA + mac); + } +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java new file mode 100644 index 0000000..0fadead --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java @@ -0,0 +1,77 @@ +package com.moral.api.service.impl; + +import com.alibaba.fastjson.JSON; +import com.moral.api.entity.CityAqiConfig; +import com.moral.api.entity.HistoryAqi; +import com.moral.api.mapper.HistoryAqiMapper; +import com.moral.api.service.CityAqiConfigService; +import com.moral.api.service.HistoryAqiService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import org.springframework.web.client.RestTemplate; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * <p> + * ������aqi��������� ��������������� + * </p> + * + * @author moral + * @since 2021-06-15 + */ +@Service +@Slf4j +public class HistoryAqiServiceImpl extends ServiceImpl<HistoryAqiMapper, HistoryAqi> implements HistoryAqiService { + + @Autowired + private HistoryAqiMapper historyAqiMapper; + + @Autowired + private CityAqiConfigService cityAqiConfigService; + + @Autowired + private RedisTemplate redisTemplate; + + @Override + public void insertHistoryAqi() { + RestTemplate restTemplate = new RestTemplate(); + //������aqi������������ + List<CityAqiConfig> cityAqiConfigs = cityAqiConfigService.getCityAqiConfigs(); + for (CityAqiConfig cityAqiConfig : cityAqiConfigs) { + Map<String, Object> mjMap = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=aqi", Map.class, cityAqiConfig.getCityId()); + if (ObjectUtils.isEmpty(mjMap)) { + continue; + } + HistoryAqi historyAqi = new HistoryAqi(); + //city_code + String cityCode = cityAqiConfig.getCityCode(); + historyAqi.setCityCode(cityCode); + Map<String, Object> value = new HashMap<>(); + Map<String, Object> data = (Map<String, Object>) ((Map) mjMap.get("data")).get("aqi"); + //������������ + historyAqi.setTime(new Date(Long.parseLong(data.get("pubtime").toString()))); + value.put("PM25", data.get("pm25C")); + value.put("PM10", data.get("pm10C")); + value.put("SO2", data.get("so2C")); + value.put("NO2", data.get("no2C")); + value.put("CO", data.get("coC")); + value.put("O3", data.get("o3C")); + value.put("AQI", data.get("value")); + //������ + historyAqi.setValue(JSON.toJSONString(value)); + //��������������������� + historyAqiMapper.insert(historyAqi); + //������redis + redisTemplate.opsForHash().putAll("aqi_" + cityCode, value); + } + } +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java new file mode 100644 index 0000000..07b3958 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java @@ -0,0 +1,33 @@ +package com.moral.api.service.impl; + +import com.moral.api.entity.HistoryDaily; +import com.moral.api.mapper.HistoryDailyMapper; +import com.moral.api.service.HistoryDailyService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * <p> + * ��������������� + * </p> + * + * @author moral + * @since 2021-06-11 + */ +@Service +public class HistoryDailyServiceImpl extends ServiceImpl<HistoryDailyMapper, HistoryDaily> implements HistoryDailyService { + + @Autowired + private HistoryDailyMapper historyDailyMapper; + + @Override + public void insertHistoryDaily(List<HistoryDaily> list) { + System.out.println(list); + historyDailyMapper.insertHistoryDaily(list); + } +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java new file mode 100644 index 0000000..fb85a9d --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java @@ -0,0 +1,64 @@ +package com.moral.api.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSON; +import com.moral.api.mapper.HistoryFiveMinutelyMapper; +import com.moral.api.service.HistoryFiveMinutelyService; +import com.moral.api.service.HistoryMinutelyService; +import com.moral.util.DateUtils; + +@Service +public class HistoryFiveMinutelyServiceImpl implements HistoryFiveMinutelyService { + + @Autowired + private HistoryFiveMinutelyMapper historyFiveMinutelyMapper; + + @Autowired + private HistoryMinutelyService historyMinutelyService; + + @Override + public void createTable(String timeUnits) { + historyFiveMinutelyMapper.createTable(timeUnits); + } + + @Override + public void insertHistoryFiveMinutely() { + Map<String, Object> params = new HashMap<>(); + //������������������������ + Date start = DateUtils.convertDate(DateUtils.getDateOfMin(-5)); + //������������������������ + Date end = DateUtils.convertDate(new Date()); + params.put("start", start); + params.put("end", end); + //��������������� + String timeUnits = DateUtils.dateToDateString(start, DateUtils.yyyyMM_EN); + params.put("timeUnits", timeUnits); + + //������ + + params.put("sensorKeys", null); + + historyMinutelyService.getHistoryFiveMinutelyData(params); + /*List<Map<String, Object>> list = new ArrayList<>(); + Map<String, Object> map = new HashMap<>(); + map.put("mac", "123456"); + Date date = new Date(); + map.put("time", date); + Map<String, Object> value = new HashMap<>(); + value.put("e1", 10); + value.put("e2", 20); + map.put("value", JSON.toJSONString(value)); + list.add(map);*/ + + historyFiveMinutelyMapper.insertHistoryFiveMinutely(null, null); + } +} diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java new file mode 100644 index 0000000..730ef35 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java @@ -0,0 +1,27 @@ +package com.moral.api.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import com.moral.api.mapper.HistoryMinutelyMapper; +import com.moral.api.service.HistoryMinutelyService; + +@Service +public class HistoryMinutelyServiceImpl implements HistoryMinutelyService { + + @Autowired + private HistoryMinutelyMapper historyMinutelyMapper; + + @Override + public void createTable(String timeUnits) { + historyMinutelyMapper.createTable(timeUnits); + } + + @Override + public List<Map<String, Object>> getHistoryFiveMinutelyData(Map<String, Object> params) { + return historyMinutelyMapper.getHistoryFiveMinutelyData(params); + } +} diff --git a/screen-job/src/main/java/com/moral/api/task/CreateTableTask.java b/screen-job/src/main/java/com/moral/api/task/CreateTableTask.java new file mode 100644 index 0000000..2fab184 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/task/CreateTableTask.java @@ -0,0 +1,52 @@ +package com.moral.api.task; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.moral.api.service.HistoryFiveMinutelyService; +import com.moral.api.service.HistoryMinutelyService; +import com.moral.constant.Constants; +import com.moral.util.DateUtils; +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 CreateTableTask { + + @Autowired + private HistoryFiveMinutelyService historyFiveMinutelyService; + + @Autowired + private HistoryMinutelyService historyMinutelyService; + + + //��������������������� + @XxlJob("createHistoryMinutelyTable") + public ReturnT createHistoryMinutelyTable() { + String timeUnits = DateUtils.getDateStringOfMon(1, DateUtils.yyyyMM_EN); + try { + //������������������ + historyMinutelyService.createTable(timeUnits); + //������������������ + historyMinutelyService.createTable(timeUnits + "_" + Constants.UN_ADJUST); + } catch (Exception e) { + XxlJobHelper.log(e.getMessage()); + return ReturnT.FAIL; + } + return ReturnT.SUCCESS; + } + + //5��������������������� + @XxlJob("createHistoryFiveMinutelyTable") + public ReturnT createHistoryFiveMinutelyTable() { + String timeUnits = DateUtils.getDateStringOfMon(1, DateUtils.yyyyMM_EN); + try { + historyFiveMinutelyService.createTable(timeUnits); + } catch (Exception e) { + XxlJobHelper.log(e.getMessage()); + return ReturnT.FAIL; + } + return ReturnT.SUCCESS; + } +} diff --git a/screen-job/src/main/java/com/moral/api/task/HistoryAqiInsertTask.java b/screen-job/src/main/java/com/moral/api/task/HistoryAqiInsertTask.java new file mode 100644 index 0000000..603e2d2 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/task/HistoryAqiInsertTask.java @@ -0,0 +1,27 @@ +package com.moral.api.task; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.moral.api.service.HistoryAqiService; +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 HistoryAqiInsertTask { + + @Autowired + private HistoryAqiService historyAqiService; + + @XxlJob("insertHistoryAqi") + public ReturnT insertHistoryAqi() { + try { + historyAqiService.insertHistoryAqi(); + } catch (Exception e) { + XxlJobHelper.log(e.getMessage()); + return ReturnT.FAIL; + } + return ReturnT.SUCCESS; + } +} diff --git a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java new file mode 100644 index 0000000..eb9b6af --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java @@ -0,0 +1,74 @@ +package com.moral.api.task; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSON; +import com.moral.api.entity.HistoryDaily; +import com.moral.api.service.HistoryDailyService; +import com.moral.api.service.HistoryFiveMinutelyService; +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 HistoryTableInsertTask { + + @Autowired + private HistoryDailyService historyDailyService; + + @Autowired + private HistoryFiveMinutelyService historyFiveMinutelyService; + + //5������������������ + @XxlJob("insertHistoryFiveMinutely") + public ReturnT insertHistoryFiveMinutely() { + try { + /* List<Map<String, Object>> list = new ArrayList<>(); + Map<String, Object> map = new HashMap<>(); + map.put("mac", "123456"); + Date date = new Date(); + map.put("time", date); + Map<String, Object> value = new HashMap<>(); + value.put("e1", 10); value.put("e2", 20); + map.put("value", JSON.toJSONString(value)); + list.add(map); + String timeUnits = DateUtils.dateToDateString(date, DateUtils.yyyyMM_EN);*/ + + historyFiveMinutelyService.insertHistoryFiveMinutely(); + } catch (Exception e) { + XxlJobHelper.log(e.getMessage()); + return ReturnT.FAIL; + } + return ReturnT.SUCCESS; + } + + //��������������� + @XxlJob("insertHistoryDaily") + public ReturnT insertHistoryDaily() { + try { + List<HistoryDaily> list = new ArrayList<>(); + HistoryDaily historyDaily = new HistoryDaily(); + historyDaily.setMac("123456"); + historyDaily.setTime(new Date()); + Map<String, Object> value = new HashMap<>(); + value.put("e1", 1); + value.put("e2", 2); + historyDaily.setValue(JSON.toJSONString(value)); + for (int i = 0; i < 20000; i++) { + list.add(historyDaily); + } + historyDailyService.insertHistoryDaily(list); + } catch (Exception e) { + XxlJobHelper.log(e.getMessage()); + return ReturnT.FAIL; + } + return ReturnT.SUCCESS; + } +} diff --git a/screen-job/src/main/java/com/moral/api/task/JudgeOffLineDeviceTask.java b/screen-job/src/main/java/com/moral/api/task/JudgeOffLineDeviceTask.java new file mode 100644 index 0000000..aa5d7a6 --- /dev/null +++ b/screen-job/src/main/java/com/moral/api/task/JudgeOffLineDeviceTask.java @@ -0,0 +1,28 @@ +package com.moral.api.task; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.moral.api.service.DeviceService; +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 JudgeOffLineDeviceTask { + + @Autowired + private DeviceService deviceService; + + //������������������������ + @XxlJob("judgeOffLineDevice") + public ReturnT judgeOffLineDevice() { + try { + deviceService.judgeOffLineDevice(); + } catch (Exception e) { + XxlJobHelper.log(e.getMessage()); + return ReturnT.FAIL; + } + return ReturnT.SUCCESS; + } +} diff --git a/screen-job/src/main/resources/application-dev.yml b/screen-job/src/main/resources/application-dev.yml index d996a3c..248edec 100644 --- a/screen-job/src/main/resources/application-dev.yml +++ b/screen-job/src/main/resources/application-dev.yml @@ -81,6 +81,7 @@ logging: config: classpath:logback.xml + xxl: job: admin: diff --git a/screen-job/src/main/resources/logback-spring.xml b/screen-job/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..d830e7a --- /dev/null +++ b/screen-job/src/main/resources/logback-spring.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<configuration> + <include resource="org/springframework/boot/logging/logback/defaults.xml"/> + + <springProperty scope="context" name="springAppName" source="spring.application.name"/> + <!-- ��������������������������������� --> + <property name="LOG_FILE" value="/home/moral/soft/log/${springAppName}"/> + <!-- ������������������������������ --> + <property name="CONSOLE_LOG_PATTERN" + value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%X{logseq}]{faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([${springAppName}]){yellow} %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> + + <property name="FILE_LOG_PATTERN" + value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{logseq}] [%thread] %X{T} [%level] %logger.%method:%line %msg%n"/> + + <!-- ���������Appender --> + <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> + <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> + <level>INFO</level> + </filter> + <encoder> + <pattern>${CONSOLE_LOG_PATTERN}</pattern> + <charset>utf8</charset> + </encoder> + </appender> + <!-- ������������Appender --> + <appender name="screenJobLog" class="ch.qos.logback.classic.sift.SiftingAppender"> + <discriminator> + <key>taskId</key> + <defaultValue>default</defaultValue> + </discriminator> + <sift> + <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> + + <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> + <level>INFO</level> + </filter> + <file>${LOG_FILE}/%d{yyyy-MM-dd}/${springAppName}.log</file> + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> + <maxFileSize>30MB</maxFileSize> + <fileNamePattern>${LOG_FILE}/%d{yyyy-MM-dd}/${springAppName}-%d{yyyy-MM-dd}.log%i.log</fileNamePattern> + <maxHistory>30</maxHistory> + </rollingPolicy> + <encoder> + <pattern>${FILE_LOG_PATTERN}</pattern> + <charset>utf8</charset> + </encoder> + </appender> + </sift> + </appender> + + + <root level="INFO"> + <appender-ref ref="console"/> + <appender-ref ref="screenJobLog"/> + </root> +</configuration> diff --git a/screen-job/src/main/resources/mapper/CityAqiConfigMapper.xml b/screen-job/src/main/resources/mapper/CityAqiConfigMapper.xml new file mode 100644 index 0000000..a465401 --- /dev/null +++ b/screen-job/src/main/resources/mapper/CityAqiConfigMapper.xml @@ -0,0 +1,13 @@ +<?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.CityAqiConfigMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.CityAqiConfig"> + <id column="id" property="id"/> + <result column="city_code" property="cityCode"/> + <result column="city_name" property="cityName"/> + <result column="city_id" property="cityId"/> + </resultMap> + +</mapper> \ No newline at end of file diff --git a/screen-job/src/main/resources/mapper/DeviceMapper.xml b/screen-job/src/main/resources/mapper/DeviceMapper.xml new file mode 100644 index 0000000..493dc7b --- /dev/null +++ b/screen-job/src/main/resources/mapper/DeviceMapper.xml @@ -0,0 +1,29 @@ +<?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.DeviceMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.Device"> + <id column="id" property="id" /> + <result column="name" property="name" /> + <result column="mac" property="mac" /> + <result column="address" property="address" /> + <result column="longitude" property="longitude" /> + <result column="latitude" property="latitude" /> + <result column="state" property="state" /> + <result column="operate_ids" property="operateIds" /> + <result column="monitor_point_id" property="monitorPointId" /> + <result column="organization_id" property="organizationId" /> + <result column="device_version_id" property="deviceVersionId" /> + <result column="profession" property="profession" /> + <result column="tech" property="tech" /> + <result column="detector" property="detector" /> + <result column="purchaser" property="purchaser" /> + <result column="create_time" property="createTime" /> + <result column="update_time" property="updateTime" /> + <result column="install_time" property="installTime" /> + <result column="is_delete" property="isDelete" /> + <result column="extend" property="extend" /> + </resultMap> + +</mapper> \ No newline at end of file diff --git a/screen-job/src/main/resources/mapper/HistoryAqiMapper.xml b/screen-job/src/main/resources/mapper/HistoryAqiMapper.xml new file mode 100644 index 0000000..24658a1 --- /dev/null +++ b/screen-job/src/main/resources/mapper/HistoryAqiMapper.xml @@ -0,0 +1,12 @@ +<?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.HistoryAqiMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryAqi"> + <result column="city_code" property="cityCode" /> + <result column="time" property="time" /> + <result column="value" property="value" /> + </resultMap> + +</mapper> \ No newline at end of file diff --git a/screen-job/src/main/resources/mapper/HistoryDailyMapper.xml b/screen-job/src/main/resources/mapper/HistoryDailyMapper.xml new file mode 100644 index 0000000..f1582cd --- /dev/null +++ b/screen-job/src/main/resources/mapper/HistoryDailyMapper.xml @@ -0,0 +1,19 @@ +<?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.HistoryDailyMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryDaily"> + <result column="mac" property="mac"/> + <result column="time" property="time"/> + <result column="value" property="value"/> + </resultMap> + + <insert id="insertHistoryDaily" parameterType="com.moral.api.entity.HistoryDaily"> + INSERT INTO history_daily + VALUES + <foreach collection="list" item="item" separator=","> + (#{item.mac},#{item.time},#{item.value}) + </foreach> + </insert> +</mapper> \ No newline at end of file diff --git a/screen-job/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml b/screen-job/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml new file mode 100644 index 0000000..13de990 --- /dev/null +++ b/screen-job/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml @@ -0,0 +1,25 @@ +<?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.HistoryFiveMinutelyMapper"> + + <update id="createTable" parameterType="String"> + CREATE TABLE IF NOT EXISTS `history_five_minutely_${timeUnits}` ( + `mac` VARCHAR (20) DEFAULT NULL COMMENT '������mac', + `time` datetime DEFAULT NULL COMMENT '������������', + `value` json DEFAULT NULL COMMENT '������', + KEY `idx_mac` (`mac`), + KEY `idx_time` (`time`), + KEY `idx_mac_time` (`mac`,`time`) + ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '5���������������' + </update> + + <insert id="insertHistoryFiveMinutely"> + INSERT INTO + history_five_minutely_${timeUnits} + VALUES + <foreach collection="list" item="item" separator=","> + (#{item.mac}, #{item.time}, #{item.value}) + </foreach> + </insert> + +</mapper> \ No newline at end of file diff --git a/screen-job/src/main/resources/mapper/HistoryMinutelyMapper.xml b/screen-job/src/main/resources/mapper/HistoryMinutelyMapper.xml new file mode 100644 index 0000000..d705dd2 --- /dev/null +++ b/screen-job/src/main/resources/mapper/HistoryMinutelyMapper.xml @@ -0,0 +1,50 @@ +<?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"> + + <update id="createTable" parameterType="String"> + CREATE TABLE IF NOT EXISTS `history_minutely_${timeUnits}` ( + `mac` VARCHAR (20) DEFAULT NULL COMMENT '������mac', + `time` datetime DEFAULT NULL COMMENT '������������', + `value` json DEFAULT NULL COMMENT '������', + `version` INT (11) DEFAULT NULL COMMENT '������', + KEY `idx_mac` (`mac`), + KEY `idx_time` (`time`), + KEY `idx_mac_time` (`mac`,`time`) + ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '���������������' + </update> + + <select id="getHistoryFiveMinutelyData" resultType="java.util.LinkedHashMap"> + SELECT + mac + <foreach collection="sensorKeys" open="," separator="," item="sensorKey"> + <choose> + <when test="sensorKey=='e23[0]'"> + ROUND((CASE WHEN AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))<![CDATA[>]]>0 AND + AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI()))<![CDATA[>]]>0 + THEN + ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI() + WHEN AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))>0 AND + AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0 + THEN + (ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI())+180 + WHEN AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0 AND + AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0 + THEN + (ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI())+180 + ELSE + (ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI())+360 + END),3) AS '${sensorKey}' + </when> + <otherwise> + ROUND(AVG(value->'$.${sensorKey}[0]'),3) AS '${sensorKey}' + </otherwise> + </choose> + </foreach> + FROM + history_minutely_${timeUnits} + WHERE time <![CDATA[>=]]> #{start} AND time <![CDATA[<]]> #{end} + GROUP BY mac + </select> + +</mapper> \ No newline at end of file diff --git a/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java b/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java index 9d983d0..8ce1e76 100644 --- a/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java +++ b/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java @@ -2,7 +2,6 @@ import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.common.serialization.StringDeserializer; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -13,11 +12,12 @@ import org.springframework.kafka.core.DefaultKafkaConsumerFactory; import org.springframework.kafka.listener.ConcurrentMessageListenerContainer; import org.springframework.kafka.listener.ContainerProperties; + import java.util.HashMap; import java.util.Map; -/*@Configuration -@EnableKafka*/ +@Configuration +@EnableKafka public class KafkaConsumerConfig { @Value("${kafka.consumer.servers}") private String servers; @@ -27,8 +27,6 @@ private String sessionTimeout; @Value("${kafka.consumer.auto.commit.interval}") private String autoCommitInterval; - @Value("${kafka.consumer.groupMenu.id}") - private String groupId; @Value("${kafka.consumer.auto.offset.reset}") private String autoOffsetReset; @Value("${kafka.consumer.concurrency}") @@ -41,16 +39,12 @@ factory.setConcurrency(concurrency); factory.getContainerProperties().setPollTimeout(1500); factory.getContainerProperties().setAckMode(ContainerProperties.AckMode.MANUAL_IMMEDIATE); - - /*factory.setBatchListener(true);//@KafkaListener ������������ ���������������������Kafka���������������������ConsumerConfig.MAX_POLL_RECORDS_CONFIG - factory.getContainerProperties().setAckMode(ContainerProperties.AckMode.MANUAL_IMMEDIATE);//������������������������������*/ return factory; } public ConsumerFactory<String, String> consumerFactory() { return new DefaultKafkaConsumerFactory<>(consumerConfigs()); } - public Map<String, Object> consumerConfigs() { Map<String, Object> propsMap = new HashMap<>(); @@ -60,7 +54,6 @@ propsMap.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, sessionTimeout); propsMap.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); propsMap.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); - propsMap.put(ConsumerConfig.GROUP_ID_CONFIG, groupId); propsMap.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, autoOffsetReset); return propsMap; } diff --git a/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java b/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java index ef5b141..a5603f1 100644 --- a/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java +++ b/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java @@ -13,8 +13,8 @@ import java.util.HashMap; import java.util.Map; -/*@Configuration -@EnableKafka*/ +@Configuration +@EnableKafka public class KafkaProducerConfig { @Value("${kafka.producer.servers}") private String servers; diff --git a/screen-manage/src/main/java/com/moral/api/controller/DeviceController.java b/screen-manage/src/main/java/com/moral/api/controller/DeviceController.java index 8b0f88e..bb495c8 100644 --- a/screen-manage/src/main/java/com/moral/api/controller/DeviceController.java +++ b/screen-manage/src/main/java/com/moral/api/controller/DeviceController.java @@ -56,7 +56,7 @@ //������mac��������������� QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("mac", device.getMac()); - if (deviceService.getOne(queryWrapper) != null) { + if (deviceService.count(queryWrapper) > 0) { return ResultMessage.fail(ResponseCodeEnum.MAC_IS_EXIST.getCode(), ResponseCodeEnum.MAC_IS_EXIST.getMsg()); } deviceService.insert(device); 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 a3e07fc..13865dc 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 @@ -4,6 +4,7 @@ import com.moral.api.entity.Test; import com.moral.api.service.TestService; import com.moral.api.util.CacheUtils; +import com.moral.constant.KafkaConstants; import com.moral.constant.ResultMessage; import com.moral.redis.RedisUtil; import com.moral.util.PageResult; @@ -101,15 +102,31 @@ } /** - * kafka������ + * ������������kafka������ */ @ApiOperation(value = "kafka������", notes = "kafka������") @ApiImplicitParams({ + @ApiImplicitParam(name = "data", value = "data", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") }) - @RequestMapping(value = "kafkaTest", method = RequestMethod.GET) - public void kafkaTest() { - kafkaTemplate.send("test_topic", "{'mac': 'p5dnd1234567','DataTime':1623058244104,'e1':10,'e2':20,'ver':2}"); + @RequestMapping(value = "minuteKafkaTest", method = RequestMethod.GET) + public void minuteKafkaTest(String data) { + System.out.println(data); + kafkaTemplate.send(KafkaConstants.TOPIC_MINUTE, data); + } + + /** + * ������������kafka������ + */ + @ApiOperation(value = "kafka������", notes = "kafka������") + @ApiImplicitParams({ + @ApiImplicitParam(name = "data", value = "data", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") + }) + @RequestMapping(value = "hourKafkaTest", method = RequestMethod.GET) + public void hourKafkaTest(String data) { + System.out.println(data); + kafkaTemplate.send(KafkaConstants.TOPIC_HOUR, data); } @GetMapping("testToken") diff --git a/screen-manage/src/main/java/com/moral/api/entity/HistoryHourly.java b/screen-manage/src/main/java/com/moral/api/entity/HistoryHourly.java new file mode 100644 index 0000000..08c64b6 --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/entity/HistoryHourly.java @@ -0,0 +1,51 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.extension.activerecord.Model; + +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ������������������ + * </p> + * + * @author moral + * @since 2021-06-04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class HistoryHourly extends Model<HistoryHourly> { + + private static final long serialVersionUID = 1L; + + /** + * ������mac + */ + private String mac; + + /** + * ������������ + */ + private Date time; + + /** + * ������ + */ + private String value; + + /** + * ������ + */ + private Integer version; + + + @Override + protected Serializable pkVal() { + return null; + } + +} diff --git a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java index af6c8cc..54c9d35 100644 --- a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java +++ b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java @@ -1,37 +1,126 @@ package com.moral.api.kafka.consumer; -import com.moral.api.constant.TopicConstants; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; 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.Random; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; -@Component +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; +import com.moral.constant.RedisConstants; + +//@Component @Slf4j public class KafkaConsumer { -/* *//** - * ��������������������������������� - * @param record - * @param ack - * @throws Exception - *//* - @KafkaListener(topics = TopicConstants.TEST_TOPIC_MESSAGE,groupId = "test") - public void listenTest(ConsumerRecord<String, String> record , Acknowledgment ack) throws Exception { + @Autowired + private HistoryMinutelyService historyMinutelyService; + + @Autowired + private HistoryHourlyService historyHourlyService; + + @Autowired + private DeviceService deviceService; + + @Autowired + private RedisTemplate redisTemplate; + + //������������ + @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, groupId = KafkaConstants.GROUP_ID_INSERT, containerFactory = "kafkaListenerContainerFactory") + public void listenMinute(ConsumerRecord<String, String> record, Acknowledgment ack) { String msg = record.value(); System.out.println(msg); - if (new Random().nextInt(100)<50){ - log.info(String.format("kafka ������������������---------------- listen1 topic = %s, offset = %d, value = %s ", record.topic(), record.offset(), record.value())); + try { + Map<String, Object> data = JSON.parseObject(msg, HashMap.class); + 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{}", msg); + ack.acknowledge(); + return; + } + + //������������ + data = data.entrySet().stream() + .filter(map -> { + String key = map.getKey(); + return !(key.contains("Min") || key.contains("Max") || key.contains("Cou")); + }).collect(Collectors.toMap(m -> m.getKey().replaceAll("-Avg", ""), Map.Entry::getValue)); + data.remove("time"); + //��������������� + historyMinutelyService.insertHistoryMinutely(data); ack.acknowledge(); + } catch (Exception e) { + //log.error("param{}" + msg); } + } - }*/ + //������������ + @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, groupId = KafkaConstants.GROUP_ID_INSERT, 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); + 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{}", msg); + ack.acknowledge(); + return; + } + //������������ + data = data.entrySet().stream() + .filter(map -> { + String key = map.getKey(); + return !(key.contains("Min") || key.contains("Max") || key.contains("Cou")); + }).collect(Collectors.toMap(m -> m.getKey().replaceAll("-Avg", ""), Map.Entry::getValue)); + data.remove("time"); + //��������������� + historyHourlyService.insertHistoryHourly(data); + ack.acknowledge(); + } catch (Exception e) { + //log.error("param{}" + msg); + } + } - - - + //������������������������������������������������������ + @KafkaListener(topics = KafkaConstants.TOPIC_SECOND, groupId = KafkaConstants.GROUP_ID_STATE, containerFactory = "kafkaListenerContainerFactory") + public void listenSecond(ConsumerRecord<String, String> record, Acknowledgment ack) { + String msg = record.value(); + //System.out.println(record.offset() + "===>" + msg); + try { + Map<String, Object> data = JSON.parseObject(msg, HashMap.class); + 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{}", msg); + ack.acknowledge(); + return; + } + //������������ + data = deviceService.adjustDeviceData(data); + //������redis + redisTemplate.opsForValue().set(RedisConstants.DEVICE_DATA + mac, data); + //��������������������������� + deviceService.judgeDeviceState(data); + ack.acknowledge(); + } catch (Exception e) { + //log.error("param{}" + msg); + } + } } diff --git a/screen-manage/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java new file mode 100644 index 0000000..46898e3 --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.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 HistoryHourlyMapper extends BaseMapper<HistoryHourly> { + + void insertHistoryHourlyUnAdjust(Map<String, Object> params); + +} 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 5fac936..0d3fa02 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 @@ -56,9 +56,9 @@ Map<String, Object> getDeviceByMac(String mac); //������������������ - Map<String, Object> adjustDeviceData(Map<String, Object> deviceData, Map<String, Object> deviceInfo); + Map<String, Object> adjustDeviceData(Map<String, Object> deviceData); - //��������������������������� - Map<String, Object> judgeDeviceState(Map<String, Object> data, Map<String, Object> deviceInfo); + //��������������������������� + void judgeDeviceState(Map<String, Object> data); } diff --git a/screen-manage/src/main/java/com/moral/api/service/HistoryHourlyService.java b/screen-manage/src/main/java/com/moral/api/service/HistoryHourlyService.java new file mode 100644 index 0000000..1a5a63e --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/service/HistoryHourlyService.java @@ -0,0 +1,20 @@ +package com.moral.api.service; + +import java.util.Map; + +import com.moral.api.entity.HistoryHourly; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ��������� ��������� + * </p> + * + * @author moral + * @since 2021-06-04 + */ +public interface HistoryHourlyService extends IService<HistoryHourly> { + + void insertHistoryHourly(Map<String, Object> data); + +} 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 index 4834d08..91c4fa6 100644 --- a/screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java +++ b/screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java @@ -13,6 +13,6 @@ */ public interface HistoryMinutelyService { - void insertHistoryMinutely(Map<String, Object> deviceData); + void insertHistoryMinutely(Map<String, Object> data); } 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 9365ad2..fcf29d3 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,9 +1,11 @@ package com.moral.api.service.impl; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.googlecode.aviator.AviatorEvaluator; +import com.googlecode.aviator.Expression; import com.moral.api.entity.*; import com.moral.api.mapper.*; import com.moral.api.pojo.vo.device.DeviceVO; @@ -11,17 +13,20 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.util.CacheUtils; +import com.moral.api.util.AdjustDataUtils; import com.moral.api.util.LogUtils; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import com.moral.util.ConvertUtils; import com.moral.util.DateUtils; +import lombok.extern.slf4j.Slf4j; 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.util.ObjectUtils; +import org.springframework.util.StringUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -45,6 +50,7 @@ * @since 2021-05-11 */ @Service +@Slf4j public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService { @Autowired @@ -77,45 +83,28 @@ @Autowired private VersionSensorUnitMapper versionSensorUnitMapper; - + @Autowired + private AdjustDataUtils adjustDataUtils; /* * ���redis������������������ * */ private Map<String, Object> getDeviceInfoFromRedis(String mac) { - Map<String, Object> deviceInfo = (Map<String, Object>) redisTemplate.opsForValue().get(RedisConstants.DEVICE + mac); - return deviceInfo; + return (Map<String, Object>) redisTemplate.opsForValue().get(RedisConstants.DEVICE + mac); } /* * ������������������redis */ private void setDeviceInfoToRedis(String mac, Map<String, Object> deviceInfo) { - redisTemplate.opsForValue().set(getDeviceKey(mac), deviceInfo); + redisTemplate.opsForValue().set(RedisConstants.DEVICE + 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(); + redisTemplate.delete(RedisConstants.DEVICE + mac); } @Override @@ -126,7 +115,7 @@ deviceMapper.insert(device); Map<String, Object> deviceInfo = selectDeviceInfoById(device.getId()); //��������������������������� - insertOrganizationUnitAlarm(orgId,device.getDeviceVersionId()); + insertOrganizationUnitAlarm(orgId, device.getDeviceVersionId()); //������������������������redis String mac = device.getMac(); //���redis��������������������� @@ -145,17 +134,17 @@ @Override @Transactional public void delete(Integer deviceId) { + Device device = deviceMapper.selectById(deviceId); UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id", deviceId).set("is_delete", Constants.DELETE); deviceMapper.update(null, updateWrapper); - Device device = deviceMapper.selectById(deviceId); String mac = device.getMac(); //���redis��������������������� delDeviceInfoFromRedis(mac); //��������������������������� Integer versionId = device.getDeviceVersionId(); Integer orgId = device.getOrganizationId(); - deleteOrganizationUnitAlarm(orgId,versionId); + deleteOrganizationUnitAlarm(orgId, versionId); //������deviceInfo������ CacheUtils.flushDeviceAlarmInfo(); //������������������ @@ -171,7 +160,7 @@ Integer deviceId = device.getId(); Device oldDevice = deviceMapper.selectById(deviceId); //���������������������������������������������������������������������������������id������������ - if(!ObjectUtils.isEmpty(device.getMonitorPointId())){ + if (!ObjectUtils.isEmpty(device.getMonitorPointId())) { MonitorPoint monitorPoint = monitorPointMapper.selectById(device.getMonitorPointId()); device.setOrganizationId(monitorPoint.getOrganizationId()); } @@ -179,14 +168,14 @@ Device updateDevice = deviceMapper.selectById(deviceId); String mac = updateDevice.getMac(); //��������������������������� - Integer oldOrgId = oldDevice.getOrganizationId(); - Integer newOrgId = updateDevice.getOrganizationId(); - Integer oldVersionId = oldDevice.getDeviceVersionId(); - Integer newVersionId = updateDevice.getDeviceVersionId(); - if(!oldOrgId.equals(newOrgId)||!oldVersionId.equals(newVersionId)){ - deleteOrganizationUnitAlarm(oldOrgId,oldVersionId); - insertOrganizationUnitAlarm(newOrgId,newVersionId); - } + Integer oldOrgId = oldDevice.getOrganizationId(); + Integer newOrgId = updateDevice.getOrganizationId(); + Integer oldVersionId = oldDevice.getDeviceVersionId(); + Integer newVersionId = updateDevice.getDeviceVersionId(); + if (!oldOrgId.equals(newOrgId) || !oldVersionId.equals(newVersionId)) { + deleteOrganizationUnitAlarm(oldOrgId, oldVersionId); + insertOrganizationUnitAlarm(newOrgId, newVersionId); + } //���redis��������������������� delDeviceInfoFromRedis(mac); Map<String, Object> deviceInfo = selectDeviceInfoById(deviceId); @@ -283,13 +272,15 @@ queryWrapper.eq("monitor_point_id", mpId); } + //��������������������� if (name != null) { queryWrapper.like("name", name); } + + //mac������������ if (mac != null) { queryWrapper.like("mac", mac); } - //������������,������create_time������ if (order != null && orderType != null) { @@ -318,7 +309,6 @@ result.put("item", items); return result; } - @Override public Map<String, Object> selectDeviceInfoById(Integer deviceId) { @@ -389,6 +379,9 @@ MonitorPoint monitorPoint = device.getMonitorPoint(); mpInfo.put("id", monitorPoint.getId()); mpInfo.put("name", monitorPoint.getName()); + mpInfo.put("areaCode", monitorPoint.getAreaCode()); + mpInfo.put("cityCode", monitorPoint.getCityCode()); + mpInfo.put("provinceCode", monitorPoint.getProvinceCode()); deviceInfo.put("monitorPoint", mpInfo); setDeviceInfoToRedis(mac, deviceInfo); @@ -425,27 +418,89 @@ } @Override - public Map<String, Object> adjustDeviceData(Map<String, Object> deviceData, Map<String, Object> deviceInfo) { - return null; + public Map<String, Object> adjustDeviceData(Map<String, Object> deviceData) { + String mac = deviceData.get("mac").toString(); + //���redis������������������ + Map<String, Object> adjustFormula = redisTemplate.opsForHash().entries(RedisConstants.ADJUST + mac); + if (!ObjectUtils.isEmpty(adjustFormula)) { + Map<String, Object> deviceInfo = getDeviceByMac(mac); + Map<String, Object> monitorPoint = (Map<String, Object>) deviceInfo.get("monitorPoint"); + Object areaCode = monitorPoint.get("areaCode"); + Object cityCode = monitorPoint.get("cityCode"); + + Map<String, Object> aqiMap = redisTemplate.opsForHash().entries(RedisConstants.AQI_DATA + areaCode); + if (ObjectUtils.isEmpty(aqiMap)) { + aqiMap = redisTemplate.opsForHash().entries(RedisConstants.AQI_DATA + cityCode); + } + return adjustDataUtils.adjust(deviceData, adjustFormula, ObjectUtils.isEmpty(aqiMap) ? null : aqiMap); + } + return deviceData; } @Override - public Map<String, Object> judgeDeviceState(Map<String, Object> deviceData, Map<String, Object> deviceInfo) { - return null; + public void judgeDeviceState(Map<String, Object> deviceData) { + String mac = deviceData.remove("mac").toString(); + Device device = (Device) redisTemplate.opsForHash().get(RedisConstants.DEVICE_INFO, mac); + Version version = device.getVersion(); + List<Sensor> sensors = version.getSensors(); + Expression expression; + int state = 1; + for (Sensor sensor : sensors) { + //������������������ + String alarmLevel = sensor.getAlarmLevel(); + if (StringUtils.isEmpty(alarmLevel)) { + continue; + } + List<Double> list = JSONObject.parseObject(alarmLevel, List.class); + String sensorCode = sensor.getCode(); + //������������ + String formula = sensor.getFormula(); + //������������������������ + String sensorValue = (String) deviceData.get(sensorCode); + double value = Double.parseDouble(String.format("%.3f", sensorValue)); + //������������ + if (formula != null) { + //������������������ + sensorValue = formula.replace("{0}", sensorValue); + expression = AviatorEvaluator.compile(sensorValue); + value = Double.parseDouble(String.format("%.3f", expression.execute())); + } + int sensorState = judgeState(list, value); + if (sensorState > state) { + state = sensorState; + } + } + //������������������ + UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", device.getId()).set("state", state); + deviceMapper.update(null, updateWrapper); } - private void insertOrganizationUnitAlarm(Integer orgId,Integer versionId){ + //��������������������������� + private int judgeState(List<Double> levels, Double data) { + int state = 1; + for (int i = levels.size() - 1; i >= 0; i--) { + Double level = levels.get(i); + if (data >= level) { + state = i + 2; + break; + } + } + return state; + } + + private void insertOrganizationUnitAlarm(Integer orgId, Integer versionId) { QueryWrapper<OrganizationUnitAlarm> queryOrganizationVersionWrapper = new QueryWrapper<>(); - queryOrganizationVersionWrapper.eq("organization_id",orgId); - queryOrganizationVersionWrapper.eq("version_id",versionId); - queryOrganizationVersionWrapper.eq("is_delete",Constants.NOT_DELETE); + queryOrganizationVersionWrapper.eq("organization_id", orgId); + queryOrganizationVersionWrapper.eq("version_id", versionId); + queryOrganizationVersionWrapper.eq("is_delete", Constants.NOT_DELETE); List<OrganizationUnitAlarm> organizationUnitAlarms = organizationUnitAlarmMapper.selectList(queryOrganizationVersionWrapper); - if(ObjectUtils.isEmpty(organizationUnitAlarms)){ - QueryWrapper<VersionSensorUnit> queryVersionSensorUnitWrapper =new QueryWrapper<>(); - queryVersionSensorUnitWrapper.eq("version_id",versionId); - queryVersionSensorUnitWrapper.eq("is_delete",Constants.NOT_DELETE); + if (ObjectUtils.isEmpty(organizationUnitAlarms)) { + QueryWrapper<VersionSensorUnit> queryVersionSensorUnitWrapper = new QueryWrapper<>(); + queryVersionSensorUnitWrapper.eq("version_id", versionId); + queryVersionSensorUnitWrapper.eq("is_delete", Constants.NOT_DELETE); List<VersionSensorUnit> versionSensorUnits = versionSensorUnitMapper.selectList(queryVersionSensorUnitWrapper); - if(!ObjectUtils.isEmpty(versionSensorUnits)){ + if (!ObjectUtils.isEmpty(versionSensorUnits)) { for (VersionSensorUnit versionSensorUnit : versionSensorUnits) { OrganizationUnitAlarm organizationUnitAlarm = new OrganizationUnitAlarm(); organizationUnitAlarm.setOrganizationId(orgId); @@ -459,19 +514,19 @@ } } - private void deleteOrganizationUnitAlarm(Integer orgId,Integer versionId){ + private void deleteOrganizationUnitAlarm(Integer orgId, Integer versionId) { QueryWrapper<Device> queryOrganizationVersionWrapper = new QueryWrapper<>(); - queryOrganizationVersionWrapper.eq("organization_id",orgId); - queryOrganizationVersionWrapper.eq("device_version_id",versionId); - queryOrganizationVersionWrapper.eq("is_delete",Constants.NOT_DELETE); + queryOrganizationVersionWrapper.eq("organization_id", orgId); + queryOrganizationVersionWrapper.eq("device_version_id", versionId); + queryOrganizationVersionWrapper.eq("is_delete", Constants.NOT_DELETE); List<Device> devices = deviceMapper.selectList(queryOrganizationVersionWrapper); - if(ObjectUtils.isEmpty(devices)){//������������������������������������������������������ + if (ObjectUtils.isEmpty(devices)) {//������������������������������������������������������ UpdateWrapper deleteWrapper = new UpdateWrapper(); - deleteWrapper.eq("organization_id",orgId); - deleteWrapper.eq("version_id",versionId); - deleteWrapper.eq("is_delete",Constants.NOT_DELETE); - deleteWrapper.set("is_delete",Constants.DELETE); - organizationUnitAlarmMapper.update(null,deleteWrapper); + deleteWrapper.eq("organization_id", orgId); + deleteWrapper.eq("version_id", versionId); + deleteWrapper.eq("is_delete", Constants.NOT_DELETE); + deleteWrapper.set("is_delete", Constants.DELETE); + organizationUnitAlarmMapper.update(null, deleteWrapper); } } } diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java new file mode 100644 index 0000000..26598b6 --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java @@ -0,0 +1,63 @@ +package com.moral.api.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.moral.api.entity.HistoryHourly; +import com.moral.api.mapper.HistoryHourlyMapper; +import com.moral.api.service.DeviceService; +import com.moral.api.service.HistoryHourlyService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.moral.constant.Constants; +import com.moral.util.DateUtils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * <p> + * ��������� ��������������� + * </p> + * + * @author moral + * @since 2021-06-04 + */ +@Service +public class HistoryHourlyServiceImpl extends ServiceImpl<HistoryHourlyMapper, HistoryHourly> implements HistoryHourlyService { + + @Autowired + private HistoryHourlyMapper historyHourlyMapper; + + @Autowired + private DeviceService deviceService; + + @Override + public void insertHistoryHourly(Map<String, Object> data) { + Map<String, Object> dataAdjust = new HashMap<>(data); + String mac = data.remove("mac").toString(); + Date time = DateUtils.dataToTimeStampTime(new Date(new Long((String) data.remove("DataTime"))), DateUtils.yyyy_MM_dd_HH_EN); + Integer version = (Integer) data.remove("ver"); + Map<String, Object> result = new HashMap<>(data); + result.put("mac", mac); + result.put("time", time); + result.put("version", version); + result.put("timeUnits", Constants.UN_ADJUST); + result.put("value", JSONObject.toJSONString(data)); + //��������������������������� + historyHourlyMapper.insertHistoryHourlyUnAdjust(result); + + //������������ + dataAdjust = deviceService.adjustDeviceData(dataAdjust); + dataAdjust.remove("mac"); + dataAdjust.remove("DataTime"); + dataAdjust.remove("ver"); + HistoryHourly historyHourly = new HistoryHourly(); + historyHourly.setMac(mac); + historyHourly.setTime(time); + historyHourly.setVersion(version); + historyHourly.setValue(JSONObject.toJSONString(dataAdjust)); + historyHourlyMapper.insert(historyHourly); + } +} 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 index 6df638c..9360a70 100644 --- 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 @@ -7,7 +7,7 @@ import java.util.HashMap; import java.util.Map; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.moral.api.mapper.HistoryMinutelyMapper; import com.moral.api.service.DeviceService; import com.moral.api.service.HistoryMinutelyService; @@ -24,30 +24,31 @@ private DeviceService deviceService; @Override - public void insertHistoryMinutely(Map<String, Object> deviceData) { + public void insertHistoryMinutely(Map<String, Object> data) { Map<String, Object> result = new HashMap<>(); - Object mac = deviceData.remove("mac"); + Map<String, Object> dataAdjust = new HashMap<>(data); + Object mac = data.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)); + result.put("version", data.remove("ver")); + Date time = new Date(new Long((String) data.remove("DataTime"))); + result.put("time", DateUtils.dataToTimeStampTime(time,DateUtils.yyyy_MM_dd_HH_mm_EN)); + result.put("value", JSONObject.toJSONString(data)); 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()); - - //��������������������������������������� + //������������ + dataAdjust = deviceService.adjustDeviceData(dataAdjust); + dataAdjust.remove("mac"); + dataAdjust.remove("DataTime"); + dataAdjust.remove("ver"); result.put("timeUnits", timeUnits); - deviceData = deviceService.adjustDeviceData(deviceData, deviceInfo); - result.put("value", JSON.toJSONString(deviceData)); + result.put("value", JSONObject.toJSONString(dataAdjust)); historyMinutelyMapper.insertHistoryMinutely(result); - //������������������ - Map<String, Object> deviceState = deviceService.judgeDeviceState(deviceData, deviceInfo); + } //��������� @@ -59,5 +60,4 @@ } return key.toString(); } - } diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/SensorServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/SensorServiceImpl.java index 537ffe4..23301f1 100644 --- a/screen-manage/src/main/java/com/moral/api/service/impl/SensorServiceImpl.java +++ b/screen-manage/src/main/java/com/moral/api/service/impl/SensorServiceImpl.java @@ -3,10 +3,8 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.moral.api.entity.ManageRole; -import com.moral.api.entity.Sensor; -import com.moral.api.entity.SysDictData; -import com.moral.api.entity.VersionSensorUnit; +import com.moral.api.entity.*; +import com.moral.api.mapper.OrganizationUnitAlarmMapper; import com.moral.api.mapper.SensorMapper; import com.moral.api.mapper.SysDictDataMapper; import com.moral.api.mapper.VersionSensorUnitMapper; @@ -52,6 +50,9 @@ @Autowired(required = false) private SysDictDataMapper sysDictDataMapper; + + @Autowired(required = false) + private OrganizationUnitAlarmMapper organizationUnitAlarmMapper; @Autowired LogUtils logUtils; @@ -131,6 +132,14 @@ return resultMap; } sensorMapper.updateSensor(updateSensorMap); + if (!ObjectUtils.isEmpty(updateSensorMap.get("code"))&&!oldSensor.getCode().equals(updateSensorMap.get("code"))){ + QueryWrapper<OrganizationUnitAlarm> wrapper_OUA = new QueryWrapper<>(); + wrapper_OUA.eq("is_delete",Constants.NOT_DELETE); + wrapper_OUA.eq("sensor_code",oldSensor.getCode()); + OrganizationUnitAlarm organizationUnitAlarm = new OrganizationUnitAlarm(); + organizationUnitAlarm.setSensorCode(updateSensorMap.get("code").toString()); + organizationUnitAlarmMapper.update(organizationUnitAlarm,wrapper_OUA); + } HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String content = "������������:"+oldSensor.getName()+";"; for (Object key:updateSensorMap.keySet()) { @@ -269,6 +278,14 @@ VersionSensorUnit versionSensorUnit = new VersionSensorUnit(); versionSensorUnit.setIsDelete(Constants.DELETE); versionSensorUnitMapper.update(versionSensorUnit,wrapper_Version); + if (!ObjectUtils.isEmpty(sensor.getCode())&&!sensor.getCode().equals("")){ + QueryWrapper<OrganizationUnitAlarm> wrapper_OUA = new QueryWrapper<>(); + wrapper_OUA.eq("is_delete",Constants.NOT_DELETE); + wrapper_OUA.eq("sensor_code",sensor.getCode()); + OrganizationUnitAlarm organizationUnitAlarm = new OrganizationUnitAlarm(); + organizationUnitAlarm.setIsDelete(Constants.DELETE); + organizationUnitAlarmMapper.update(organizationUnitAlarm,wrapper_OUA); + } //������������������ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String content = "������������:"+sensor.getName()+";"; diff --git a/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java b/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java new file mode 100644 index 0000000..1f1deba --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java @@ -0,0 +1,81 @@ +package com.moral.api.util; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSON; +import com.googlecode.aviator.AviatorEvaluator; +import com.googlecode.aviator.Expression; +import com.moral.api.entity.DeviceAdjustValue; +import com.moral.util.DateUtils; + +@Slf4j +@Component +public class AdjustDataUtils { + //��������������� + public Map<String, Object> adjust(Map<String, Object> deviceData, Map<String, Object> adjustFormula, Map<String, Object> aqiMap) { + try { + Object dataTime = deviceData.get("DataTime"); + //��������������������������� + long time = Math.round(new Double((String) dataTime) / 1000) * 1000L; + long finalTime = DateUtils.dataToTimeStampTime(new Date(time), DateUtils.HH_mm_ss_EN).getTime(); + for (String key : deviceData.keySet()) { + if (!key.equals("mac") && !key.equals("time") && !key.equals("DataTime") && !key.equals("ver") && !key.contains("Flag")) { + //��������� + Object measuredValue = deviceData.get(key); + //������������������������ + List<DeviceAdjustValue> sensorFormulas = (List<DeviceAdjustValue>) adjustFormula.get(key); + if (ObjectUtils.isEmpty(sensorFormulas)) { + deviceData.put(key, measuredValue); + continue; + } + + //��������������������������������� + DeviceAdjustValue deviceAdjustValue = sensorFormulas.stream() + .filter(o -> o.getStartTime().getTime() <= finalTime && o.getEndTime().getTime() > finalTime) + .findFirst().get(); + String formula = deviceAdjustValue.getValue(); + if (StringUtils.isEmpty(formula)) { + deviceData.put(key, measuredValue); + continue; + } + + Expression expression = AviatorEvaluator.compile(formula); + Map<String, Object> env = new HashMap<>(); + if (formula.contains("aqi")) { + Object aqiValue = null; + if (aqiMap != null) { + aqiValue = aqiMap.get(key); + } + env.put("aqi", ObjectUtils.isEmpty(aqiValue) ? 0F : Float.parseFloat((String) aqiValue)); + } + if (formula.contains("vocs")) { + Object vocsValue = ObjectUtils.isEmpty(deviceData.get("a99054")) ? 0F : deviceData.get("a99054"); + env.put("vocs", vocsValue); + } + if (formula.contains("cel")) { + env.put("cel", Float.parseFloat((String) measuredValue)); + } + //������ + measuredValue = expression.execute(env); + //������������ + if (Float.parseFloat(measuredValue.toString()) < 0 && !"a01001".equals(measuredValue)) { + measuredValue = 0F; + } + deviceData.put(key, Double.parseDouble(String.format("%.3f", measuredValue))); + } + } + } catch (Exception e) { + log.error("param[0] deviceData:" + JSON.toJSONString(deviceData)); + log.error(e.getMessage()); + } + return deviceData; + } +} diff --git a/screen-manage/src/main/resources/application-dev.yml b/screen-manage/src/main/resources/application-dev.yml index 4a6899a..16c7e70 100644 --- a/screen-manage/src/main/resources/application-dev.yml +++ b/screen-manage/src/main/resources/application-dev.yml @@ -92,14 +92,11 @@ enable: auto: commit: false - group: - id: test - servers: 192.168.0.16:9092,192.168.0.17:9092,192.168.0.18:9092 + servers: 172.16.44.65:9092,172.16.44.67:9092,172.16.44.66:9092 session: timeout: 6000 - topic: test_topic zookeeper: - connect: 192.168.0.16:2181,192.168.0.17:2181,192.168.0.18:2181 + connect: 172.16.44.65:2181,172.16.44.67:2181,172.16.44.66:2181 producer: batch: size: 4096 @@ -107,7 +104,7 @@ memory: 40960 linger: 1 retries: 0 - servers: 192.168.0.16:9092,192.168.0.17:9092,192.168.0.18:9092 + servers: 172.16.44.65:9092,172.16.44.67:9092,172.16.44.66:9092 mvc: interceptor: exclude: diff --git a/screen-manage/src/main/resources/mapper/DeviceMapper.xml b/screen-manage/src/main/resources/mapper/DeviceMapper.xml index 6e7f549..d1c0809 100644 --- a/screen-manage/src/main/resources/mapper/DeviceMapper.xml +++ b/screen-manage/src/main/resources/mapper/DeviceMapper.xml @@ -49,7 +49,9 @@ <association property="monitorPoint" javaType="com.moral.api.entity.MonitorPoint"> <result column="mp_id" property="id"/> <result column="mp_name" property="name"/> - <result column="mp_address" property="address"/> + <result column="mp_area_code" property="areaCode"/> + <result column="mp_city_code" property="cityCode"/> + <result column="mp_province_code" property="provinceCode"/> </association> <!--������--> @@ -116,7 +118,9 @@ o.`name` org_name, mp.id mp_id, mp.`name` mp_name, - mp.address mp_address, + mp.area_code mp_area_code, + mp.city_code mp_city_code, + mp.province_code mp_province_code, ma.id operate_id, v.id version_id, v.`name` version_name, diff --git a/screen-manage/src/main/resources/mapper/HistoryHourlyMapper.xml b/screen-manage/src/main/resources/mapper/HistoryHourlyMapper.xml new file mode 100644 index 0000000..a2dde7f --- /dev/null +++ b/screen-manage/src/main/resources/mapper/HistoryHourlyMapper.xml @@ -0,0 +1,17 @@ +<?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.HistoryHourlyMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryHourly"> + <result column="mac" property="mac"/> + <result column="time" property="time"/> + <result column="value" property="value"/> + <result column="version" property="version"/> + </resultMap> + + <insert id="insertHistoryHourlyUnAdjust"> + INSERT INTO history_hourly_${timeUnits} VALUES (#{mac}, #{time}, #{value}, #{version}) + </insert> + +</mapper> \ No newline at end of file diff --git a/screen.iml b/screen.iml new file mode 100644 index 0000000..5933ffe --- /dev/null +++ b/screen.iml @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <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$"> + <excludeFolder url="file://$MODULE_DIR$/target" /> + <excludeFolder url="file://$MODULE_DIR$/home/moral/soft/log/screen-manage/%d{yyyy-MM-dd}" /> + <excludeFolder url="file://$MODULE_DIR$/home/moral/soft/log/screen-manage/2021-06-08" /> + <excludeFolder url="file://$MODULE_DIR$/home/moral/soft/log/springAppName_IS_UNDEFINED" /> + <excludeFolder url="file://$MODULE_DIR$/home" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <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: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-autoconfigure:2.1.13.RELEASE" 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.springframework.boot:spring-boot-starter-websocket:2.1.13.RELEASE" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-websocket:5.1.14.RELEASE" 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" /> + <orderEntry type="library" name="Maven: com.xuxueli:xxl-job-core:2.3.0" level="project" /> + <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.45.Final" level="project" /> + <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" /> + <orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:2.5.9" level="project" /> + <orderEntry type="library" name="Maven: com.googlecode.aviator:aviator:5.2.5" level="project" /> + </component> +</module> \ No newline at end of file -- Gitblit v1.8.0