From acdb7759a413e52cc402eb6f64a2deecfe6329f2 Mon Sep 17 00:00:00 2001 From: Bingkun Li Date: Wed, 14 Jan 2026 09:37:49 +0800 Subject: [PATCH] Add basic libraries --- library/skyeye-dev/.DS_Store | Bin 0 -> 14340 bytes library/skyeye-dev/.idea/compiler.xml | 45 ++ library/skyeye-dev/.idea/encodings.xml | 16 + library/skyeye-dev/.idea/jarRepositories.xml | 20 + library/skyeye-dev/.idea/misc.xml | 15 + library/skyeye-dev/.idea/workspace.xml | 109 ++++ library/skyeye-dev/README.md | 20 + library/skyeye-dev/pom.xml | 37 ++ library/skyeye-dev/skyeye-common/.DS_Store | Bin 0 -> 8196 bytes library/skyeye-dev/skyeye-common/pom.xml | 50 ++ .../skyeye-dev/skyeye-common/src/.DS_Store | Bin 0 -> 8196 bytes .../skyeye-common/src/main/.DS_Store | Bin 0 -> 8196 bytes .../skyeye-common/src/main/java/.DS_Store | Bin 0 -> 8196 bytes .../skyeye-common/src/main/java/com/.DS_Store | Bin 0 -> 8196 bytes .../skyeye/common/pojo/CommonConstant.java | 14 + .../skyeye/common/pojo/SecurityConstants.java | 103 +++ .../skyeye/common/pojo/param/IdParam.java | 18 + .../skyeye/common/pojo/result/Result.java | 159 +++++ .../common/pojo/result/ResultConstant.java | 23 + .../skyeye/common/pojo/tree/TreeNode.java | 43 ++ .../skyeye/common/utils/CommonUtil.java | 198 ++++++ .../skyeye/common/utils/CookieUtil.java | 73 +++ .../zhangy/skyeye/common/utils/IPUtil.java | 63 ++ .../zhangy/skyeye/common/utils/JwtUtil.java | 84 +++ .../skyeye/common/utils/SpringUtil.java | 58 ++ .../zhangy/skyeye/common/utils/WebUtil.java | 78 +++ .../main/resources/META-INF/spring.factories | 2 + .../src/main/resources/banner.txt | 12 + .../src/main/resources/logback-spring.xml | 62 ++ .../target/classes/META-INF/spring.factories | 2 + .../skyeye-common/target/classes/banner.txt | 12 + .../skyeye/common/pojo/CommonConstant.class | Bin 0 -> 379 bytes .../common/pojo/SecurityConstants.class | Bin 0 -> 2092 bytes .../skyeye/common/pojo/param/IdParam.class | Bin 0 -> 2619 bytes .../skyeye/common/pojo/result/Result.class | Bin 0 -> 4866 bytes .../common/pojo/result/ResultConstant.class | Bin 0 -> 453 bytes .../skyeye/common/pojo/tree/TreeNode.class | Bin 0 -> 6151 bytes .../skyeye/common/utils/CommonUtil.class | Bin 0 -> 4632 bytes .../skyeye/common/utils/CookieUtil.class | Bin 0 -> 2591 bytes .../zhangy/skyeye/common/utils/IPUtil.class | Bin 0 -> 1907 bytes .../zhangy/skyeye/common/utils/JwtUtil.class | Bin 0 -> 3118 bytes .../skyeye/common/utils/SpringUtil.class | Bin 0 -> 1736 bytes .../zhangy/skyeye/common/utils/WebUtil.class | Bin 0 -> 1270 bytes .../target/classes/logback-spring.xml | 62 ++ .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 12 + .../compile/default-compile/inputFiles.lst | 12 + .../target/skyeye-common-1.0.0.RELEASE.jar | Bin 0 -> 20592 bytes library/skyeye-dev/skyeye-db/pom.xml | 53 ++ .../src/main/java/com/zhangy/skyeye/.DS_Store | Bin 0 -> 8196 bytes .../skyeye/db/config/DTDruidConfig.java | 39 ++ .../skyeye/db/config/DTMybatisPlusConfig.java | 47 ++ .../db/config/DynamicTableNameHelper.java | 20 + .../zhangy/skyeye/db/pojo/page/PageParam.java | 26 + .../db/pojo/props/Knife4jProperties.java | 22 + .../com/zhangy/skyeye/db/utils/MPUtil.java | 81 +++ .../main/resources/META-INF/spring.factories | 3 + .../target/classes/META-INF/spring.factories | 3 + .../skyeye/db/config/DTDruidConfig.class | Bin 0 -> 2641 bytes .../db/config/DTMybatisPlusConfig.class | Bin 0 -> 4428 bytes .../db/config/DynamicTableNameHelper.class | Bin 0 -> 944 bytes .../com/zhangy/skyeye/db/config/MPUtil.class | Bin 0 -> 2514 bytes .../skyeye/db/pojo/page/PageParam.class | Bin 0 -> 3537 bytes .../db/pojo/props/Knife4jProperties.class | Bin 0 -> 2850 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 6 + .../compile/default-compile/inputFiles.lst | 6 + .../target/skyeye-db-1.0.0.RELEASE.jar | Bin 0 -> 11043 bytes library/skyeye-dev/skyeye-generator/.DS_Store | Bin 0 -> 8196 bytes library/skyeye-dev/skyeye-generator/pom.xml | 45 ++ .../skyeye-dev/skyeye-generator/src/.DS_Store | Bin 0 -> 8196 bytes .../skyeye-generator/src/main/.DS_Store | Bin 0 -> 8196 bytes .../zhangy/skyeye/generator/GeneratorApi.java | 194 ++++++ .../resources/templates/controller.java.vm | 134 ++++ .../main/resources/templates/entity.java.vm | 158 +++++ .../main/resources/templates/mapper.java.vm | 14 + .../main/resources/templates/mapping.xml.vm | 38 ++ .../main/resources/templates/service.java.vm | 24 + .../resources/templates/serviceImpl.java.vm | 60 ++ .../skyeye/generator/GeneratorApi$1.class | Bin 0 -> 703 bytes .../skyeye/generator/GeneratorApi$2.class | Bin 0 -> 1460 bytes .../skyeye/generator/GeneratorApi.class | Bin 0 -> 11797 bytes .../classes/templates/controller.java.vm | 134 ++++ .../target/classes/templates/entity.java.vm | 158 +++++ .../target/classes/templates/mapper.java.vm | 14 + .../target/classes/templates/mapping.xml.vm | 38 ++ .../target/classes/templates/service.java.vm | 24 + .../classes/templates/serviceImpl.java.vm | 60 ++ .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 3 + .../compile/default-compile/inputFiles.lst | 1 + .../target/skyeye-generator-1.0.0.RELEASE.jar | Bin 0 -> 13073 bytes library/skyeye-dev/skyeye-job/pom.xml | 42 ++ .../skyeye/job/XxlJobAutoConfiguration.java | 68 ++ .../skyeye/job/annotation/EnableDtXxlJob.java | 15 + .../job/properties/XxlAdminProperties.java | 16 + .../job/properties/XxlExecutorProperties.java | 47 ++ .../job/properties/XxlJobProperties.java | 20 + .../skyeye/job/XxlJobAutoConfiguration.class | Bin 0 -> 5355 bytes .../job/annotation/EnableDtXxlJob.class | Bin 0 -> 603 bytes .../job/properties/XxlAdminProperties.class | Bin 0 -> 1544 bytes .../properties/XxlExecutorProperties.class | Bin 0 -> 4470 bytes .../job/properties/XxlJobProperties.class | Bin 0 -> 2698 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 5 + .../compile/default-compile/inputFiles.lst | 5 + .../target/skyeye-job-1.0.0.RELEASE.jar | Bin 0 -> 9480 bytes library/skyeye-dev/skyeye-knife4j/pom.xml | 38 ++ .../knife4j/config/DTKnife4jConfig.java | 93 +++ .../config/DTKnife4jPropertiesAutoConfig.java | 27 + .../knife4j/props/Knife4jProperties.java | 24 + .../main/resources/META-INF/spring.factories | 3 + .../src/main/resources/bootstrap.yml | 2 + .../target/classes/META-INF/spring.factories | 3 + .../target/classes/bootstrap.yml | 2 + .../knife4j/config/DTKnife4jConfig.class | Bin 0 -> 3083 bytes .../DTKnife4jPropertiesAutoConfig.class | Bin 0 -> 1066 bytes .../knife4j/props/Knife4jProperties.class | Bin 0 -> 3269 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 3 + .../compile/default-compile/inputFiles.lst | 3 + .../target/skyeye-knife4j-1.0.0.RELEASE.jar | Bin 0 -> 6305 bytes library/skyeye-dev/skyeye-quartz/pom.xml | 50 ++ .../skyeye/quartz/config/QuartzConfig.java | 98 +++ .../zhangy/skyeye/quartz/util/CronUtils.java | 73 +++ .../skyeye/quartz/util/ScheduleUtils.java | 173 +++++ .../main/resources/META-INF/spring.factories | 2 + .../target/classes/META-INF/spring.factories | 2 + .../skyeye/quartz/config/QuartzConfig.class | Bin 0 -> 4783 bytes .../zhangy/skyeye/quartz/util/CronUtils.class | Bin 0 -> 2138 bytes .../skyeye/quartz/util/ScheduleUtils.class | Bin 0 -> 5733 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 3 + .../compile/default-compile/inputFiles.lst | 3 + .../target/skyeye-quartz-1.0.0.RELEASE.jar | Bin 0 -> 8473 bytes library/skyeye-dev/skyeye-redis/.DS_Store | Bin 0 -> 8196 bytes library/skyeye-dev/skyeye-redis/pom.xml | 32 + library/skyeye-dev/skyeye-redis/src/.DS_Store | Bin 0 -> 8196 bytes .../skyeye-redis/src/main/.DS_Store | Bin 0 -> 8196 bytes .../skyeye-redis/src/main/java/.DS_Store | Bin 0 -> 8196 bytes .../skyeye-redis/src/main/java/com/.DS_Store | Bin 0 -> 8196 bytes .../src/main/java/com/zhangy/.DS_Store | Bin 0 -> 8196 bytes .../src/main/java/com/zhangy/skyeye/.DS_Store | Bin 0 -> 8196 bytes .../java/com/zhangy/skyeye/redis/.DS_Store | Bin 0 -> 10244 bytes .../config/DTRedisTemplateConfiguration.java | 70 ++ .../redis/config/RedisKeySerializer.java | 55 ++ .../zhangy/skyeye/redis/utils/RedisUtil.java | 600 ++++++++++++++++++ .../main/resources/META-INF/spring.factories | 2 + .../target/classes/META-INF/spring.factories | 2 + .../config/DTRedisTemplateConfiguration.class | Bin 0 -> 4946 bytes .../redis/config/RedisKeySerializer.class | Bin 0 -> 2103 bytes .../zhangy/skyeye/redis/utils/RedisUtil.class | Bin 0 -> 11738 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 3 + .../compile/default-compile/inputFiles.lst | 3 + .../target/skyeye-redis-1.0.0.RELEASE.jar | Bin 0 -> 9316 bytes library/skyeye-dev/skyeye-util/.DS_Store | Bin 0 -> 8196 bytes library/skyeye-dev/skyeye-util/pom.xml | 34 + library/skyeye-dev/skyeye-util/src/.DS_Store | Bin 0 -> 8196 bytes .../skyeye-dev/skyeye-util/src/main/.DS_Store | Bin 0 -> 8196 bytes .../skyeye-util/src/main/java/.DS_Store | Bin 0 -> 8196 bytes .../skyeye-util/src/main/java/com/.DS_Store | Bin 0 -> 8196 bytes .../src/main/java/com/zhangy/.DS_Store | Bin 0 -> 8196 bytes .../src/main/java/com/zhangy/skyeye/.DS_Store | Bin 0 -> 8196 bytes .../java/com/zhangy/skyeye/util/.DS_Store | Bin 0 -> 8196 bytes .../util/other/TemporalAccessorUtil.java | 158 +++++ .../skyeye/util/other/TemporalUtil.java | 140 ++++ .../zhangy/skyeye/util/utils/Base64Util.java | 91 +++ .../skyeye/util/utils/BigDecimalUtil.java | 178 ++++++ .../com/zhangy/skyeye/util/utils/GeoUtil.java | 142 +++++ .../com/zhangy/skyeye/util/utils/IMGUtil.java | 466 ++++++++++++++ .../com/zhangy/skyeye/util/utils/LdtUtil.java | 480 ++++++++++++++ .../zhangy/skyeye/util/utils/NoticeUtil.java | 48 ++ .../zhangy/skyeye/util/utils/PinYinUtil.java | 47 ++ .../main/resources/META-INF/spring.factories | 1 + .../target/classes/META-INF/spring.factories | 1 + .../util/other/TemporalAccessorUtil.class | Bin 0 -> 4251 bytes .../skyeye/util/other/TemporalUtil$1.class | Bin 0 -> 1470 bytes .../skyeye/util/other/TemporalUtil.class | Bin 0 -> 4451 bytes .../zhangy/skyeye/util/utils/Base64Util.class | Bin 0 -> 2930 bytes .../skyeye/util/utils/BigDecimalUtil.class | Bin 0 -> 3579 bytes .../zhangy/skyeye/util/utils/GeoUtil.class | Bin 0 -> 5404 bytes .../zhangy/skyeye/util/utils/IMGUtil.class | Bin 0 -> 9693 bytes .../zhangy/skyeye/util/utils/LdtUtil.class | Bin 0 -> 11725 bytes .../zhangy/skyeye/util/utils/NoticeUtil.class | Bin 0 -> 2373 bytes .../zhangy/skyeye/util/utils/PinYinUtil.class | Bin 0 -> 1950 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 10 + .../compile/default-compile/inputFiles.lst | 9 + .../target/skyeye-util-1.0.0.RELEASE.jar | Bin 0 -> 26236 bytes library/skyeye-dev/skyeye-websocket/pom.xml | 24 + .../skyeye/service/DtWebsocketConfig.java | 18 + .../config/DTStompWebSocketConfig.java | 201 ++++++ .../main/resources/META-INF/spring.factories | 2 + .../target/classes/META-INF/spring.factories | 2 + .../skyeye/service/DtWebsocketConfig.class | Bin 0 -> 972 bytes .../config/DTStompWebSocketConfig.class | Bin 0 -> 4423 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 2 + .../compile/default-compile/inputFiles.lst | 2 + .../target/skyeye-websocket-1.0.0.RELEASE.jar | Bin 0 -> 4825 bytes .../1.0.0.RELEASE/skyeye-1.0.0.RELEASE.pom | 257 ++++++++ .../skyeye-1.0.0.RELEASE.pom.lastUpdated | 4 + 203 files changed, 6738 insertions(+) create mode 100644 library/skyeye-dev/.DS_Store create mode 100644 library/skyeye-dev/.idea/compiler.xml create mode 100644 library/skyeye-dev/.idea/encodings.xml create mode 100644 library/skyeye-dev/.idea/jarRepositories.xml create mode 100644 library/skyeye-dev/.idea/misc.xml create mode 100644 library/skyeye-dev/.idea/workspace.xml create mode 100644 library/skyeye-dev/README.md create mode 100644 library/skyeye-dev/pom.xml create mode 100644 library/skyeye-dev/skyeye-common/.DS_Store create mode 100644 library/skyeye-dev/skyeye-common/pom.xml create mode 100644 library/skyeye-dev/skyeye-common/src/.DS_Store create mode 100644 library/skyeye-dev/skyeye-common/src/main/.DS_Store create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/.DS_Store create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/.DS_Store create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/CommonConstant.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/SecurityConstants.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/param/IdParam.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/result/Result.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/result/ResultConstant.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/tree/TreeNode.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/CommonUtil.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/CookieUtil.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/IPUtil.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/JwtUtil.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/SpringUtil.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/WebUtil.java create mode 100644 library/skyeye-dev/skyeye-common/src/main/resources/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-common/src/main/resources/banner.txt create mode 100644 library/skyeye-dev/skyeye-common/src/main/resources/logback-spring.xml create mode 100644 library/skyeye-dev/skyeye-common/target/classes/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-common/target/classes/banner.txt create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/CommonConstant.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/SecurityConstants.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/param/IdParam.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/result/Result.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/result/ResultConstant.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/tree/TreeNode.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/utils/CommonUtil.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/utils/CookieUtil.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/utils/IPUtil.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/utils/JwtUtil.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/utils/SpringUtil.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/utils/WebUtil.class create mode 100644 library/skyeye-dev/skyeye-common/target/classes/logback-spring.xml create mode 100644 library/skyeye-dev/skyeye-common/target/maven-archiver/pom.properties create mode 100644 library/skyeye-dev/skyeye-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 library/skyeye-dev/skyeye-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 library/skyeye-dev/skyeye-common/target/skyeye-common-1.0.0.RELEASE.jar create mode 100644 library/skyeye-dev/skyeye-db/pom.xml create mode 100644 library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/.DS_Store create mode 100644 library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DTDruidConfig.java create mode 100644 library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DTMybatisPlusConfig.java create mode 100644 library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DynamicTableNameHelper.java create mode 100644 library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/pojo/page/PageParam.java create mode 100644 library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/pojo/props/Knife4jProperties.java create mode 100644 library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/utils/MPUtil.java create mode 100644 library/skyeye-dev/skyeye-db/src/main/resources/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-db/target/classes/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/config/DTDruidConfig.class create mode 100644 library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/config/DTMybatisPlusConfig.class create mode 100644 library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/config/DynamicTableNameHelper.class create mode 100644 library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/config/MPUtil.class create mode 100644 library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/pojo/page/PageParam.class create mode 100644 library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/pojo/props/Knife4jProperties.class create mode 100644 library/skyeye-dev/skyeye-db/target/maven-archiver/pom.properties create mode 100644 library/skyeye-dev/skyeye-db/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 library/skyeye-dev/skyeye-db/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 library/skyeye-dev/skyeye-db/target/skyeye-db-1.0.0.RELEASE.jar create mode 100644 library/skyeye-dev/skyeye-generator/.DS_Store create mode 100644 library/skyeye-dev/skyeye-generator/pom.xml create mode 100644 library/skyeye-dev/skyeye-generator/src/.DS_Store create mode 100644 library/skyeye-dev/skyeye-generator/src/main/.DS_Store create mode 100644 library/skyeye-dev/skyeye-generator/src/main/java/com/zhangy/skyeye/generator/GeneratorApi.java create mode 100644 library/skyeye-dev/skyeye-generator/src/main/resources/templates/controller.java.vm create mode 100644 library/skyeye-dev/skyeye-generator/src/main/resources/templates/entity.java.vm create mode 100644 library/skyeye-dev/skyeye-generator/src/main/resources/templates/mapper.java.vm create mode 100644 library/skyeye-dev/skyeye-generator/src/main/resources/templates/mapping.xml.vm create mode 100644 library/skyeye-dev/skyeye-generator/src/main/resources/templates/service.java.vm create mode 100644 library/skyeye-dev/skyeye-generator/src/main/resources/templates/serviceImpl.java.vm create mode 100644 library/skyeye-dev/skyeye-generator/target/classes/com/zhangy/skyeye/generator/GeneratorApi$1.class create mode 100644 library/skyeye-dev/skyeye-generator/target/classes/com/zhangy/skyeye/generator/GeneratorApi$2.class create mode 100644 library/skyeye-dev/skyeye-generator/target/classes/com/zhangy/skyeye/generator/GeneratorApi.class create mode 100644 library/skyeye-dev/skyeye-generator/target/classes/templates/controller.java.vm create mode 100644 library/skyeye-dev/skyeye-generator/target/classes/templates/entity.java.vm create mode 100644 library/skyeye-dev/skyeye-generator/target/classes/templates/mapper.java.vm create mode 100644 library/skyeye-dev/skyeye-generator/target/classes/templates/mapping.xml.vm create mode 100644 library/skyeye-dev/skyeye-generator/target/classes/templates/service.java.vm create mode 100644 library/skyeye-dev/skyeye-generator/target/classes/templates/serviceImpl.java.vm create mode 100644 library/skyeye-dev/skyeye-generator/target/maven-archiver/pom.properties create mode 100644 library/skyeye-dev/skyeye-generator/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 library/skyeye-dev/skyeye-generator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 library/skyeye-dev/skyeye-generator/target/skyeye-generator-1.0.0.RELEASE.jar create mode 100644 library/skyeye-dev/skyeye-job/pom.xml create mode 100644 library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/XxlJobAutoConfiguration.java create mode 100644 library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/annotation/EnableDtXxlJob.java create mode 100644 library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlAdminProperties.java create mode 100644 library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlExecutorProperties.java create mode 100644 library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlJobProperties.java create mode 100644 library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/XxlJobAutoConfiguration.class create mode 100644 library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/annotation/EnableDtXxlJob.class create mode 100644 library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/properties/XxlAdminProperties.class create mode 100644 library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/properties/XxlExecutorProperties.class create mode 100644 library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/properties/XxlJobProperties.class create mode 100644 library/skyeye-dev/skyeye-job/target/maven-archiver/pom.properties create mode 100644 library/skyeye-dev/skyeye-job/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 library/skyeye-dev/skyeye-job/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 library/skyeye-dev/skyeye-job/target/skyeye-job-1.0.0.RELEASE.jar create mode 100644 library/skyeye-dev/skyeye-knife4j/pom.xml create mode 100644 library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/config/DTKnife4jConfig.java create mode 100644 library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/config/DTKnife4jPropertiesAutoConfig.java create mode 100644 library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/props/Knife4jProperties.java create mode 100644 library/skyeye-dev/skyeye-knife4j/src/main/resources/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-knife4j/src/main/resources/bootstrap.yml create mode 100644 library/skyeye-dev/skyeye-knife4j/target/classes/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-knife4j/target/classes/bootstrap.yml create mode 100644 library/skyeye-dev/skyeye-knife4j/target/classes/com/zhangy/skyeye/knife4j/config/DTKnife4jConfig.class create mode 100644 library/skyeye-dev/skyeye-knife4j/target/classes/com/zhangy/skyeye/knife4j/config/DTKnife4jPropertiesAutoConfig.class create mode 100644 library/skyeye-dev/skyeye-knife4j/target/classes/com/zhangy/skyeye/knife4j/props/Knife4jProperties.class create mode 100644 library/skyeye-dev/skyeye-knife4j/target/maven-archiver/pom.properties create mode 100644 library/skyeye-dev/skyeye-knife4j/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 library/skyeye-dev/skyeye-knife4j/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 library/skyeye-dev/skyeye-knife4j/target/skyeye-knife4j-1.0.0.RELEASE.jar create mode 100644 library/skyeye-dev/skyeye-quartz/pom.xml create mode 100644 library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/config/QuartzConfig.java create mode 100644 library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/util/CronUtils.java create mode 100644 library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/util/ScheduleUtils.java create mode 100644 library/skyeye-dev/skyeye-quartz/src/main/resources/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-quartz/target/classes/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-quartz/target/classes/com/zhangy/skyeye/quartz/config/QuartzConfig.class create mode 100644 library/skyeye-dev/skyeye-quartz/target/classes/com/zhangy/skyeye/quartz/util/CronUtils.class create mode 100644 library/skyeye-dev/skyeye-quartz/target/classes/com/zhangy/skyeye/quartz/util/ScheduleUtils.class create mode 100644 library/skyeye-dev/skyeye-quartz/target/maven-archiver/pom.properties create mode 100644 library/skyeye-dev/skyeye-quartz/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 library/skyeye-dev/skyeye-quartz/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 library/skyeye-dev/skyeye-quartz/target/skyeye-quartz-1.0.0.RELEASE.jar create mode 100644 library/skyeye-dev/skyeye-redis/.DS_Store create mode 100644 library/skyeye-dev/skyeye-redis/pom.xml create mode 100644 library/skyeye-dev/skyeye-redis/src/.DS_Store create mode 100644 library/skyeye-dev/skyeye-redis/src/main/.DS_Store create mode 100644 library/skyeye-dev/skyeye-redis/src/main/java/.DS_Store create mode 100644 library/skyeye-dev/skyeye-redis/src/main/java/com/.DS_Store create mode 100644 library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/.DS_Store create mode 100644 library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/.DS_Store create mode 100644 library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/.DS_Store create mode 100644 library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/config/DTRedisTemplateConfiguration.java create mode 100644 library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/config/RedisKeySerializer.java create mode 100644 library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/utils/RedisUtil.java create mode 100644 library/skyeye-dev/skyeye-redis/src/main/resources/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-redis/target/classes/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-redis/target/classes/com/zhangy/skyeye/redis/config/DTRedisTemplateConfiguration.class create mode 100644 library/skyeye-dev/skyeye-redis/target/classes/com/zhangy/skyeye/redis/config/RedisKeySerializer.class create mode 100644 library/skyeye-dev/skyeye-redis/target/classes/com/zhangy/skyeye/redis/utils/RedisUtil.class create mode 100644 library/skyeye-dev/skyeye-redis/target/maven-archiver/pom.properties create mode 100644 library/skyeye-dev/skyeye-redis/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 library/skyeye-dev/skyeye-redis/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 library/skyeye-dev/skyeye-redis/target/skyeye-redis-1.0.0.RELEASE.jar create mode 100644 library/skyeye-dev/skyeye-util/.DS_Store create mode 100644 library/skyeye-dev/skyeye-util/pom.xml create mode 100644 library/skyeye-dev/skyeye-util/src/.DS_Store create mode 100644 library/skyeye-dev/skyeye-util/src/main/.DS_Store create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/.DS_Store create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/.DS_Store create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/.DS_Store create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/.DS_Store create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/.DS_Store create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/other/TemporalAccessorUtil.java create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/other/TemporalUtil.java create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/Base64Util.java create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/BigDecimalUtil.java create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/GeoUtil.java create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/IMGUtil.java create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/LdtUtil.java create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/NoticeUtil.java create mode 100644 library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/PinYinUtil.java create mode 100644 library/skyeye-dev/skyeye-util/src/main/resources/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-util/target/classes/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/other/TemporalAccessorUtil.class create mode 100644 library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/other/TemporalUtil$1.class create mode 100644 library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/other/TemporalUtil.class create mode 100644 library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/Base64Util.class create mode 100644 library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/BigDecimalUtil.class create mode 100644 library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/GeoUtil.class create mode 100644 library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/IMGUtil.class create mode 100644 library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/LdtUtil.class create mode 100644 library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/NoticeUtil.class create mode 100644 library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/PinYinUtil.class create mode 100644 library/skyeye-dev/skyeye-util/target/maven-archiver/pom.properties create mode 100644 library/skyeye-dev/skyeye-util/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 library/skyeye-dev/skyeye-util/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 library/skyeye-dev/skyeye-util/target/skyeye-util-1.0.0.RELEASE.jar create mode 100644 library/skyeye-dev/skyeye-websocket/pom.xml create mode 100644 library/skyeye-dev/skyeye-websocket/src/main/java/com/zhangy/skyeye/service/DtWebsocketConfig.java create mode 100644 library/skyeye-dev/skyeye-websocket/src/main/java/com/zhangy/skyeye/websocket/config/DTStompWebSocketConfig.java create mode 100644 library/skyeye-dev/skyeye-websocket/src/main/resources/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-websocket/target/classes/META-INF/spring.factories create mode 100644 library/skyeye-dev/skyeye-websocket/target/classes/com/zhangy/skyeye/service/DtWebsocketConfig.class create mode 100644 library/skyeye-dev/skyeye-websocket/target/classes/com/zhangy/skyeye/websocket/config/DTStompWebSocketConfig.class create mode 100644 library/skyeye-dev/skyeye-websocket/target/maven-archiver/pom.properties create mode 100644 library/skyeye-dev/skyeye-websocket/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 library/skyeye-dev/skyeye-websocket/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 library/skyeye-dev/skyeye-websocket/target/skyeye-websocket-1.0.0.RELEASE.jar create mode 100644 library/skyeye/1.0.0.RELEASE/skyeye-1.0.0.RELEASE.pom create mode 100644 library/skyeye/1.0.0.RELEASE/skyeye-1.0.0.RELEASE.pom.lastUpdated diff --git a/library/skyeye-dev/.DS_Store b/library/skyeye-dev/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..aa55b8317b1ade88e66ce7c418b3fa8d601ef6ef GIT binary patch literal 14340 zcmeGiTWl0n^qy&^XDJy?Y2D(2&(u5E3JVh*&99regCXArT6%DRiFJQKbYifK|bYeFQZ`BRa_; zJUD9gXoP?$N?(dqK}v4~y-qCL%ONV_ZQ|sTj%C^w-4}$C(n$z;;S%5y;1b{x;1b{x z_~#O!z88xqGss&m0WJY9fguUd_d^6Lh4BCmGU&fLu%RJ5ou?tZU$9S)0~8ktU_5|> z4B`wHV5A5cDFjChVC0C81nc4f9AuD@;~Bso5(u6Q!3hQYr{n&SU_Q6TGhOJb>D`8&Pbn1%+wxSy(jA|`&~#j~x81NbJKtbuEzR|5lWangL@A}r>F-~; zrmi}&s&@52b)R>b1*@%S^{T!Qge zk}U9dDd10(rpWTNP8J=rYY>wkxd(ivxe8FL`9K3 zBeXCoiOQ+H8Zy~pYjj7=p9zH)E)m5&6rXT(Y#CY(EvrTXwbezIgRdD|AxVncdI;5k zk;SkKDb$Rz3sia zHT0Ddn?$k8?N%LqdmfdrK+!CU{?CYbO46hmp6&S3*tRef>ZDuMYnrYh)AQ!cEe|C_ zZK84>X%xfC8L0O78!+t`qXoT-#+R~g^sM%V-}7Z0jmH?ef`OryI=&Fzzcr98WIyR8 zedIWKfxJ#WB&Wz}a*ljOE|SaSNAeT-nfyYol0Tpnra%SEhefais^9^rg_TeTt04i+ z&;r|_3o@XA4hO-6EaV^$eegIu1xMj&I1bOl%kT=EfY;znco*J-_u*ss1U`jx@EKf$ z@8B|g4_DwfxC*}ul29(p7ec}UVTn*BEESds8-$I*CSj-0C8UII#)D8Wy?sMG`5mDT z!I-ZWG`--}BAmRw>4hKJw0XU*O6k~^{rA~5N<;Q(T@z9B{S24aVllhki`ph^?he0$Cvv8#II)!wR)E zaiX;T3v!-(gIa$Dwf;{i0TE_H1QtUKwR{7_p&lBc2{nBO?1Ut=!ahjB0Z60Xn_z(r zhrxk<7(lHbgeTw_JOj_dbMPX(gt~tMUPaA+3*Lrz-~%`Xr{N5I zc(}sDm5ICq7~lAK$ihRG>)(Cd=^@KFdR-K@+%UQAcDvbIbR%#>KDo2y&XzmdiFCGq z#{{{{xqE3HUWoc N0sL>X0PgPd|6e3RddmO+ literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/.idea/compiler.xml b/library/skyeye-dev/.idea/compiler.xml new file mode 100644 index 0000000..2c3cf5a --- /dev/null +++ b/library/skyeye-dev/.idea/compiler.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/.idea/encodings.xml b/library/skyeye-dev/.idea/encodings.xml new file mode 100644 index 0000000..58ba318 --- /dev/null +++ b/library/skyeye-dev/.idea/encodings.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/.idea/jarRepositories.xml b/library/skyeye-dev/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/library/skyeye-dev/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/.idea/misc.xml b/library/skyeye-dev/.idea/misc.xml new file mode 100644 index 0000000..63019e7 --- /dev/null +++ b/library/skyeye-dev/.idea/misc.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/.idea/workspace.xml b/library/skyeye-dev/.idea/workspace.xml new file mode 100644 index 0000000..e8b58fa --- /dev/null +++ b/library/skyeye-dev/.idea/workspace.xml @@ -0,0 +1,109 @@ + + + + + + + + + + { + "associatedIndex": 8 +} + + + + + + + + + + + + + + + + + + + + + + + 1767609517374 + + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/README.md b/library/skyeye-dev/README.md new file mode 100644 index 0000000..ab162cd --- /dev/null +++ b/library/skyeye-dev/README.md @@ -0,0 +1,20 @@ +# SpaceDT Java开发库 + +## 目录结构 + +```java +dt-dev + |-- dt-dev-common:通用依赖及接口标准封装 + |-- dt-dev-db:数据库集成类库封装 + |-- dt-dev-email:邮件类库封装 + |-- dt-dev-generator:代码生成模块封装 + |-- dt-dev-knife4j:在线API集成封装 + |-- dt-dev-quartz:定时任务集成封装 + |-- dt-dev-redis:Redis集成封装 + |-- dt-dev-tx:分布式事务封装 + |-- dt-dev-util:常用工具类库封装 + |-- dt-dev-websocket:websocket集成封装 + |-- pom.xml:Maven配置文件 + +``` + diff --git a/library/skyeye-dev/pom.xml b/library/skyeye-dev/pom.xml new file mode 100644 index 0000000..d0385eb --- /dev/null +++ b/library/skyeye-dev/pom.xml @@ -0,0 +1,37 @@ + + + + + skyeye + com.zhangy + 1.0.0.RELEASE + + 4.0.0 + + com.zhangy + skyeye-dev + 1.0.0.RELEASE + pom + skyeye library + + + skyeye-common + skyeye-db + skyeye-generator + skyeye-job + skyeye-knife4j + skyeye-quartz + skyeye-redis + skyeye-websocket + skyeye-util + + + + \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-common/.DS_Store b/library/skyeye-dev/skyeye-common/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6330a9962d0ea1e90b381f436bca98f639f81799 GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1G+P+KU-vMVc4p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLGm z+SJr171YERjfy`{MtwkyLeM7@C2C@PAV`!KF(y9o;vYVk7|)$M+foXT8Uk~Zd(S=R zo^$V>GvB$l_m(k+wxYg99YR$p)pi@qJS+D4} zWefW`*X=k~uF}uu_L)XGqt&Gx+sm4^QSc2+-5`|%y{4@@#lE`76XbRD;cd} zbad^8mZsRc=JjJuvC)mqiKbY~#^$jxMXryp-n2J!)Ecs#6T$%mn*f`AgF`1Ly|LU< zO1wr?rE|l=o6CVWvNB6mXGePb`UmzO$Y@&8HTD`-)-y{+d)71DjCPMp&TY#(_U?jF zBBy%uj#V78X=H9bYvqfiY_wWd+I&K2=L?Qy?RH$#Gab9X&ohpDe2h;tWvFk!bqZd} zpRCWM`Gr<3Ut`xWH+J_K1(&FzoSrj3`at8V<_(V|JGOQ0xpc~A}qn$ z*mib^4YLt;lD)*?}LazGau#74{4JmHozkXV=)@sKzYRVG)*MIU4aGnz0rw zSdSDs(S@BDKpr{_9D#)*N+@FlPvU7jgJ*FPFXC0ahEsS0Z{vM@fDiF0KF1e0k1ufv zKjI30!d3iK8ftZG%1fr@XtF1kw9APZ)rx=GclDHjF1SzWAZOc6|5v^}cv%#!~r zjDO88uO#eeWJpaS<|E@d#{{?!iWhMXs literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/pom.xml b/library/skyeye-dev/skyeye-common/pom.xml new file mode 100644 index 0000000..826f644 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/pom.xml @@ -0,0 +1,50 @@ + + + + + skyeye-dev + com.zhangy + 1.0.0.RELEASE + + 4.0.0 + + skyeye-common + + + + + + org.projectlombok + lombok + + + + + com.auth0 + java-jwt + + + + + org.springframework.boot + spring-boot-starter + + + + + javax.servlet + javax.servlet-api + + + + + org.springframework + spring-webmvc + provided + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-common/src/.DS_Store b/library/skyeye-dev/skyeye-common/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7ebb4f9d59f51f7e5136289f9a7f09d6022fdca7 GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1GcP+KU-vMVc4p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLGm z+SJr170|>Njfy`{MtwkyLeM7@C2C@PAV`!KF(y9o;vYVk7|)$MTUve|H3a4+_nv#s zJ?GAzGvB#)?p?+h+KT#W#u^x7GF47Bm6}@=KF;e+MG7RMtGC_(uSu z{0QI|>TA41G#1cgK*t585h@U-M1?7WBL;*y$zy?DGN9vv3Uh|w@PXjT2u>*QpHB0~ ze07GTpkW(EAdJAx5#Z@l&4yT(narMie$NeCrt2jVmmpPDPn%v-qtvK12hxL1IqhY= zqT7}&?BiUw<5;;$KbzZY8s&^umvU?`YuZM^H!yXBRQC6pw(gYMoT9C}zHM3zD2l9P zw1&~qHS1fNVr!e%jWxwaH#8@jVl5k*$Ho-7KE7(>p3D(z$aank7Z5B1Y~~FvotW&8 z<(5+7KB6jJ@#k{jkF3m4)tQmrzW#xI`!kwWbd5cRmG#V$(Vq1TH>1sV$-S+4$KF*i zO5|2=-m!{9HjT{5XRUmZl#N!)N}Ep#?R>$ptX+<4dZuId_j$%KkB{+*rVRBBxK6=K z`IGgTG{4ZQ<M!_YjD5q!5i$2)6vU&ZZ$&RgEyD!ex=G3Zc{oLM?>6$sq z=+C-&!`4mva8KFPy}<#BsO_0gm_|WS=AfzD&JGzDYa8Y-xPM_JB6P0XRA%Wb=FFo- z(;Ly^vMinvSsYhn?aY3ioa}ORKBMlBL?Vlq$?`rfPZbPmg;#cMmy2%vGyN^U=f^mnObBtEAQLU$*di>! z+SoRBkPWjDc7nac-ee!MGwduo&%R}s*cJ8*`<4C1erMO%->Ak6)L|i(U>O?m5Sp=1qB1$M@1W(}^Jd5XW0x#lKyoOVF18?Jfe1H$}DL%&+IFB!J z2|wZre!^A!iEH>vQlwgGp%jr8Nz0^0X}PpQ+9Yk3wn)3B0VyL53Lm6OsvVf{$?r%b zL?)IFO10qXPda_;REs{oW$U)>op)@i{V?U=Qsxd_{ZPE6q#&b*l zuTcIqyTHCDlwT#3|AQ*Xn1>jaB0;F$gd|$gjt)ZhF6>4c-8g^@4k1T4w_wA;Q4}zW zF+%w`p2l&U#PfIoFXI)$`YF6lNPh?K;yrwXGdPQL_{7KjH~0>h@$(HR?wX2X{4p8D zrF6lz9Q!cIDyW~Tephi-!kY$u{_nW`{r_F%bLdPMfiMD7BY^7mbbA}gZnx&~vv!Q? zA*#G^y>UT(6KbYh1Q0**havT2q{?lQ0UZ~VBvk(Qivao{zvZWPxc`Uy|2?$-{|ld_ BXvhEn literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/src/main/.DS_Store b/library/skyeye-dev/skyeye-common/src/main/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a46babd87e631fe6537231d2d329e08b124c501c GIT binary patch literal 8196 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 F{{Y6)Z9@P6 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/CommonConstant.java b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/CommonConstant.java new file mode 100644 index 0000000..e328116 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/CommonConstant.java @@ -0,0 +1,14 @@ +package com.zhangy.skyeye.common.pojo; + +/** + * 通用常量 + */ +public interface CommonConstant { + + /** + * true and false + */ + Integer FALSE = 0; + Integer TRUE = 1; + +} diff --git a/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/SecurityConstants.java b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/SecurityConstants.java new file mode 100644 index 0000000..38d4ca9 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/SecurityConstants.java @@ -0,0 +1,103 @@ +package com.zhangy.skyeye.common.pojo; + +public interface SecurityConstants { + + + /** + * 用户token header + */ + String AUTHORIZATION = "Authorization"; + + /** + * 呕 + */ + String BEARER = "Bearer "; + + /** + * 用户信息 + */ + String DETAILS_USER = "user_info"; + + /** + * 客户端模式 + */ + String CLIENT_CREDENTIALS = "client_credentials"; + + /** + * 客户端ID + */ + String CLIENT_ID = "clientId"; + + /** + * 手机号登录 + */ + String APP = "mobile"; + + /** + * 协议字段 + */ + String DETAILS_LICENSE = "license"; + + /** + * 角色前缀 + */ + String ROLE = "ROLE_"; + + /** + * {bcrypt} 加密的特征码 + */ + String BCRYPT = "{bcrypt}"; + + /** + * sys_oauth_client_details 表的字段,不包括client_id、client_secret + */ + String CLIENT_FIELDS = "client_id, CONCAT('{noop}',client_secret) as client_secret, resource_ids, scope, " + + "authorized_grant_types, web_server_redirect_uri, authorities, access_token_validity, " + + "refresh_token_validity, additional_information, autoapprove"; + + /** + * JdbcClientDetailsService 查询语句 + */ + String BASE_FIND_STATEMENT = "select " + CLIENT_FIELDS + " from sys_oauth_client_details"; + + /** + * 按条件client_id 查询 + */ + String DEFAULT_SELECT_STATEMENT = BASE_FIND_STATEMENT + " where client_id = ? and del_flag = 0"; + + /** + * 默认的查询语句 + */ + String DEFAULT_FIND_STATEMENT = BASE_FIND_STATEMENT + " order by client_id"; + + + /** + * 删除 + */ + String STATUS_DEL = "1"; + + /** + * 正常 + */ + String STATUS_NORMAL = "0"; + + /** + * 锁定 + */ + String STATUS_LOCK = "9"; + + /*** + * 资源服务器默认bean名称 + */ + String RESOURCE_SERVER_CONFIGURER = "resourceServerConfigurerAdapter"; + + /** + * 内部val + */ + String SECRET_VALUE = "Y"; + + /** + * 标志头 + */ + String SECRET_KEY = "secret"; +} diff --git a/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/param/IdParam.java b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/param/IdParam.java new file mode 100644 index 0000000..fb87142 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/param/IdParam.java @@ -0,0 +1,18 @@ +package com.zhangy.skyeye.common.pojo.param; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * Controller接口,ID方法参数封装 + */ +@Data +public class IdParam implements Serializable { + + private static final long serialVersionUID = 1L; + + private T id; + private List ids; +} diff --git a/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/result/Result.java b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/result/Result.java new file mode 100644 index 0000000..d6c65cb --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/result/Result.java @@ -0,0 +1,159 @@ +package com.zhangy.skyeye.common.pojo.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 统一接口返回数据格式 + */ +@Data +public class Result implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 返回代码 + */ + private Integer code; + + /** + * 返回处理消息 + */ + private String message; + + /** + * 返回数据对象 data + */ + private T data; + + public Result() { } + + /** + * 成功 + * @return Result对象 + */ + public static Result success() { + Result r = new Result(); + r.setCode(ResultConstant.SUCCESS_200); + r.setMessage("操作成功"); + return r; + } + + /** + * 成功 + * @param message 消息 + * @return Result对象 + */ + public static Result success(String message) { + Result r = new Result(); + r.setCode(ResultConstant.SUCCESS_200); + r.setMessage(message); + return r; + } + + /** + * 成功 + * @param data data数据 + * @return Result对象 + */ + public static Result successData(Object data) { + Result r = new Result(); + r.setCode(ResultConstant.SUCCESS_200); + r.setData(data); + return r; + } + + /** + * 成功 + * @param msg 消息 + * @param data data数据 + * @return Result对象 + */ + public static Result successData(String msg, Object data) { + Result r = new Result(); + r.setCode(ResultConstant.SUCCESS_200); + r.setMessage(msg); + r.setData(data); + return r; + } + + /** + * 失败 + * @return Result对象 + */ + public static Result error() { + return error(ResultConstant.SERVER_ERROR_500, "操作失败,请重试!"); + } + + /** + * 失败 + * @param msg 消息 + * @return Result对象 + */ + public static Result error(String msg) { + return error(ResultConstant.SERVER_ERROR_500, msg); + } + + /** + * 失败 + * @param code 自定义code + * @param msg 消息 + * @return Result对象 + */ + public static Result error(int code, String msg) { + Result r = new Result(); + r.setCode(code); + r.setMessage(msg); + return r; + } + + /** + * 失败 + * @param msg 消息 + * @param data data数据 + * @return Result对象 + */ + public static Result errorData(String msg, Object data) { + Result r = new Result(); + r.setCode(ResultConstant.SERVER_ERROR_500); + r.setMessage(msg); + r.setData(data); + return r; + } + + /** + * 无权限访问返回结果 + * @param msg 消息 + * @return 无权限访问返回结果 + */ + public static Result unAuth(String msg) { + return error(ResultConstant.NO_AUTH_401, msg); + } + +// /** +// * 增加返回数据对象 +// * @param k +// * @param v +// * @return +// */ +// public Result addData(String k, Object v) { +// if(this.data == null){ +// this.data = new HashMap<>(); +// } +// +// ((Map)this.data).put(k, v); +// return this; +// } + + /** + * 返回成功或失败 + * @param flag 成功失败状态值 + * @return Result对象 + */ + public static Result status(boolean flag){ + return flag ? success() : error(); + } + + +} \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/result/ResultConstant.java b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/result/ResultConstant.java new file mode 100644 index 0000000..4698848 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/result/ResultConstant.java @@ -0,0 +1,23 @@ +package com.zhangy.skyeye.common.pojo.result; + +/** + * 返回状态码枚举类 + */ +public interface ResultConstant { + + /** + * 成功 + */ + Integer SUCCESS_200 = 200; + + /** + * 权限不足 + */ + Integer NO_AUTH_401 = 401; + + /** + * 失败 + */ + Integer SERVER_ERROR_500 = 500; + +} diff --git a/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/tree/TreeNode.java b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/tree/TreeNode.java new file mode 100644 index 0000000..85aee61 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/pojo/tree/TreeNode.java @@ -0,0 +1,43 @@ +package com.zhangy.skyeye.common.pojo.tree; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 树状结构节点封装 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TreeNode implements Serializable { + + private static final long serialVersionUID = 1L; + + private T id; + private String label; + private List children; + private Object data; + private Integer order; + private Object type; + + public TreeNode(T id, String label, List children, Object data) { + this.id = id; + this.label = label; + this.children = children; + this.data = data; + this.order = 0; + } + + public TreeNode(T id, String label, List children, Object data, Object type) { + this.id = id; + this.label = label; + this.children = children; + this.data = data; + this.order = 0; + this.type = type; + } +} diff --git a/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/CommonUtil.java b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/CommonUtil.java new file mode 100644 index 0000000..5a56a16 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/CommonUtil.java @@ -0,0 +1,198 @@ +package com.zhangy.skyeye.common.utils; + +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 通用工具类 + */ +public class CommonUtil { + + /** + * ids字符串转Long list,逗号分隔 + * @param ids + * @return + */ + public static List toList(String ids){ + if(ids == null || ids.isEmpty()){ + return new ArrayList<>(); + } + + String[] strArr = ids.split(","); + Long[] longArr = new Long[strArr.length]; + for (int i = 0; i < strArr.length; i++) { + Long v = Long.valueOf(strArr[i]); + longArr[i] = v; + } + return Arrays.asList(longArr); + } + + /** + * Long list转ids字符串,逗号分隔 + * @param list + * @return + */ + public static String toStr(List list){ + if(list == null || list.isEmpty()){ + return ""; + } + + Iterator it = list.iterator(); + + //使用StringJoiner方式实现 + StringJoiner sj = new StringJoiner(","); + while (it.hasNext()){ + sj.add(String.valueOf(it.next())); + } + return sj.toString(); + + //使用StringBuilder方式实现 + /*StringBuilder sb = new StringBuilder(); + while (it.hasNext()){ + sb.append(it.next()); + if(it.hasNext()){ + sb.append(","); + } + } + return sb.toString();*/ + } + + /** + * java去除字符串中的空格、回车、换行符、制表符 + * + * @param str + * @return + */ + public static String replaceBlank(String str) { + String dest = ""; + if (str != null) { + Pattern p = Pattern.compile("\\s*|\t|\r|\n"); + Matcher m = p.matcher(str); + dest = m.replaceAll(""); + } + return dest; + + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。 + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
+ * 例如:hello_world->helloWorld + * + * @param name + * 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelName(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains("_")) { + // 不含下划线,仅将首字母小写 + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + return name.substring(0, 1).toLowerCase() + name.substring(1).toLowerCase(); + //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + } + // 用下划线将原始字符串分割 + String camels[] = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 处理真正的驼峰片段 + if (result.length() == 0) { + // 第一个驼峰片段,全部字母都小写 + result.append(camel.toLowerCase()); + } else { + // 其他的驼峰片段,首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + } + return result.toString(); + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。 + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
+ * 例如:hello_world,test_id->helloWorld,testId + * + * @param names + * 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelNames(String names) { + if(names==null||names.equals("")){ + return null; + } + StringBuffer sf = new StringBuffer(); + String[] fs = names.split(","); + for (String field : fs) { + field = camelName(field); + sf.append(field + ","); + } + String result = sf.toString(); + return result.substring(0, result.length() - 1); + } + + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + /** + * 将下划线大写方式命名的字符串转换为驼峰式。(首字母写) + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
+ * 例如:hello_world->HelloWorld + * + * @param name + * 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelNameCapFirst(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains("_")) { + // 不含下划线,仅将首字母小写 + return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); + } + // 用下划线将原始字符串分割 + String camels[] = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 其他的驼峰片段,首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + + /** + * 将驼峰命名转化成下划线 + * @param para + * @return + */ + public static String camelToUnderline(String para){ + if(para.length()<3){ + return para.toLowerCase(); + } + StringBuilder sb=new StringBuilder(para); + int temp=0;//定位 + //从第三个字符开始 避免命名不规范 + for(int i=2;i netInterfaces = NetworkInterface.getNetworkInterfaces(); + InetAddress ip = null; + boolean finded = false;// 是否找到外网IP + while (netInterfaces.hasMoreElements() && !finded) { + NetworkInterface ni = netInterfaces.nextElement(); + Enumeration address = ni.getInetAddresses(); + while (address.hasMoreElements()) { + ip = address.nextElement(); + if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 外网IP + netip = ip.getHostAddress(); + finded = true; + break; + } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 内网IP + localip = ip.getHostAddress(); + } + } + } + + if (netip != null && !"".equals(netip)) { + return netip; + } else { + return localip; + } + } + +} diff --git a/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/JwtUtil.java b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/JwtUtil.java new file mode 100644 index 0000000..c42c4a0 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/JwtUtil.java @@ -0,0 +1,84 @@ +package com.zhangy.skyeye.common.utils; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.interfaces.DecodedJWT; + +import java.util.Date; + +/** + * JWT工具类 + **/ +public class JwtUtil { + + // Token过期时间30分钟 + public static final long EXPIRE_TIME = 4 * 60 * 60 * 1000; + + // Reuqest Header中token的key + public static final String AUTH_TOKEN_KEY = "X-Access-Token"; + + /** + * 校验token是否正确 + * + * @param token 密钥 + * @param username 用户名 + * @param secret 用户的密码 + * @return 是否正确 + */ + public static boolean verify(String token, String username, String secret) { + try { + // 根据密码生成JWT效验器 + Algorithm algorithm = Algorithm.HMAC256(secret); + JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build(); + // 效验TOKEN + DecodedJWT jwt = verifier.verify(token); + return true; + } catch (Exception exception) { + return false; + } + } + + /** + * 生成签名,5min后过期 + * + * @param username 用户名 + * @param secret 用户的密码 + * @return 加密的token + */ + public static String sign(String username, String secret) { + Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); + Algorithm algorithm = Algorithm.HMAC256(secret); + // 附带username信息 + return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm); + + } + + /** + * 根据token获取用户账号 + * + * @param accessToken + * @return username + */ + public static String getUserName(String accessToken) { + try { + DecodedJWT jwt = JWT.decode(accessToken); + return jwt.getClaim("username").asString(); + } catch (JWTDecodeException e) { + return null; + } + } + + /** + * 判断token是否已过期 + * + * @param accessToken + * @return true-过期,false-没过期 + */ + public static Boolean isTokenExpired(String accessToken) { + DecodedJWT jwt = JWT.decode(accessToken); + return jwt.getExpiresAt().getTime() < new Date(System.currentTimeMillis()).getTime(); + } + +} diff --git a/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/SpringUtil.java b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/SpringUtil.java new file mode 100644 index 0000000..6447dd3 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/SpringUtil.java @@ -0,0 +1,58 @@ +package com.zhangy.skyeye.common.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class SpringUtil implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + if(SpringUtil.applicationContext == null) { + SpringUtil.applicationContext = applicationContext; + } + } + + /** + * 获取applicationContext + * @return ApplicationContext + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + /** + * 通过name获取 Bean. + * @param name name + * @return Bean对象 + */ + public static Object getBean(String name){ + return getApplicationContext().getBean(name); + } + + /** + * 通过class获取Bean + * @param clazz class + * @param + * @return Bean对象 + */ + public static T getBean(Class clazz){ + return getApplicationContext().getBean(clazz); + } + + /** + * 通过name,以及Clazz返回指定的Bean + * @param name name + * @param clazz class + * @param + * @return Bean对象 + */ + public static T getBean(String name,Class clazz){ + return getApplicationContext().getBean(name, clazz); + } + +} \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/WebUtil.java b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/WebUtil.java new file mode 100644 index 0000000..f58021e --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/java/com/zhangy/skyeye/common/utils/WebUtil.java @@ -0,0 +1,78 @@ +package com.zhangy.skyeye.common.utils; + +import lombok.experimental.UtilityClass; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * web工具类 + */ +@UtilityClass +public class WebUtil { + + private final String UNKNOWN = "unknown"; + + /** + * 获取 HttpServletRequest + * + * @return HttpServletRequest + */ + public HttpServletRequest getRequest() { + try { + RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); + return ((ServletRequestAttributes) requestAttributes).getRequest(); + } catch (IllegalStateException e) { + return null; + } + } + + /** + * 获取 HttpServletResponse + * + * @return HttpServletResponse + */ + public HttpServletResponse getResponse() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); + } + +// /** +// * 获取ip +// * @return +// */ +// public String getIP() { +// return getIP(getRequest()); +// } +// +// /** +// * 获取ip +// * @param request +// * @return +// */ +// public String getIP(HttpServletRequest request) { +// Assert.notNull(request, "HttpServletRequest is null"); +// String ip = request.getHeader("X-Requested-For"); +// if (StrUtil.isBlank(ip) || UNKNOWN.equalsIgnoreCase(ip)) { +// ip = request.getHeader("X-Forwarded-For"); +// } +// if (StrUtil.isBlank(ip) || UNKNOWN.equalsIgnoreCase(ip)) { +// ip = request.getHeader("Proxy-Client-IP"); +// } +// if (StrUtil.isBlank(ip) || UNKNOWN.equalsIgnoreCase(ip)) { +// ip = request.getHeader("WL-Proxy-Client-IP"); +// } +// if (StrUtil.isBlank(ip) || UNKNOWN.equalsIgnoreCase(ip)) { +// ip = request.getHeader("HTTP_CLIENT_IP"); +// } +// if (StrUtil.isBlank(ip) || UNKNOWN.equalsIgnoreCase(ip)) { +// ip = request.getHeader("HTTP_X_FORWARDED_FOR"); +// } +// if (StrUtil.isBlank(ip) || UNKNOWN.equalsIgnoreCase(ip)) { +// ip = request.getRemoteAddr(); +// } +// return StrUtil.isBlank(ip) ? null : ip.split(",")[0]; +// } +} diff --git a/library/skyeye-dev/skyeye-common/src/main/resources/META-INF/spring.factories b/library/skyeye-dev/skyeye-common/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..bcb56e9 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.zhangy.skyeye.common.utils.SpringUtil diff --git a/library/skyeye-dev/skyeye-common/src/main/resources/banner.txt b/library/skyeye-dev/skyeye-common/src/main/resources/banner.txt new file mode 100644 index 0000000..f73ac5b --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/resources/banner.txt @@ -0,0 +1,12 @@ +${AnsiColor.BRIGHT_BLUE} + _____ _ _ ____ ____ _____ + |_ _(_) / \ _ __ ___ ___ / ___| _ __ __ _ ___ ___ | _ \_ _| + | | | | / _ \ | '_ ` _ \ / _ \ \___ \| '_ \ / _` |/ __/ _ \_____| | | || | + | | | |/ ___ \| | | | | | (_) | ___) | |_) | (_| | (_| __/_____| |_| || | + |_| |_/_/ \_\_| |_| |_|\___/ |____/| .__/ \__,_|\___\___| |____/ |_| + |_| +${AnsiColor.BRIGHT_GREEN} +Spring Boot Version: ${spring-boot.version} +Spring Cloud Version: Hoxton.SR9 +Spring Cloud Alibaba Version: 2.2.2.RELEASE +${AnsiColor.BLACK} \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-common/src/main/resources/logback-spring.xml b/library/skyeye-dev/skyeye-common/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..7770c61 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/src/main/resources/logback-spring.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + ${log.path}/java/${spring.application.name}/syslogTodayDebug.log + + ${log.path}/%d{yyyy-MM-dd}/java/${spring.application.name}/syslogYesterdayDebug.%i.log + 50MB + 30 + + + %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n + + + + + + ${log.path}/java/${spring.application.name}/syslogTodayError.log + + ${log.path}/%d{yyyy-MM-dd}/java/${spring.application.name}/syslogYesterdayError.%i.log + 50MB + 30 + + + %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n + + + ERROR + + + + + + + + + + + + + + + diff --git a/library/skyeye-dev/skyeye-common/target/classes/META-INF/spring.factories b/library/skyeye-dev/skyeye-common/target/classes/META-INF/spring.factories new file mode 100644 index 0000000..bcb56e9 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/target/classes/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.zhangy.skyeye.common.utils.SpringUtil diff --git a/library/skyeye-dev/skyeye-common/target/classes/banner.txt b/library/skyeye-dev/skyeye-common/target/classes/banner.txt new file mode 100644 index 0000000..f73ac5b --- /dev/null +++ b/library/skyeye-dev/skyeye-common/target/classes/banner.txt @@ -0,0 +1,12 @@ +${AnsiColor.BRIGHT_BLUE} + _____ _ _ ____ ____ _____ + |_ _(_) / \ _ __ ___ ___ / ___| _ __ __ _ ___ ___ | _ \_ _| + | | | | / _ \ | '_ ` _ \ / _ \ \___ \| '_ \ / _` |/ __/ _ \_____| | | || | + | | | |/ ___ \| | | | | | (_) | ___) | |_) | (_| | (_| __/_____| |_| || | + |_| |_/_/ \_\_| |_| |_|\___/ |____/| .__/ \__,_|\___\___| |____/ |_| + |_| +${AnsiColor.BRIGHT_GREEN} +Spring Boot Version: ${spring-boot.version} +Spring Cloud Version: Hoxton.SR9 +Spring Cloud Alibaba Version: 2.2.2.RELEASE +${AnsiColor.BLACK} \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/CommonConstant.class b/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/CommonConstant.class new file mode 100644 index 0000000000000000000000000000000000000000..6a0e8f6f66da12580dc7da5b97d2fb276ccb1ecd GIT binary patch literal 379 zcmZut!AiqG5Pj36-8M$kTCMgES`_!*rw-=_tD(SiSxo>jQJI2%aBlb)Ba(wVVdCgcWCE@@1%oQAyeZlcq)w zj9z7d&Q8h+0{bpHIB-#ea8ZXK9ET>A&yPI1kgKOc6-u(gFXh6-M*i(WXl|U2XR!)1 zLTe-ankR^LkmPFoK9?yCMy`p0O Wfc3%>!R6?13vj7mM%d=Of}L-BDpF7Y literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/SecurityConstants.class b/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/SecurityConstants.class new file mode 100644 index 0000000000000000000000000000000000000000..d3adbd02f528e60603e5bb2620ec7c00fa841f55 GIT binary patch literal 2092 zcmeH|>ypzp6vvOaY|O1tmQt3M;$D|aN@z>(Q0jFQ@L-Z1+u51z7mZ>oSuc*2k)34% z!;AGpAE0m17wPnGZ_;()4LW?1e@D_eNB<)q{rUIre-P0<+G^34ExN<#oHL9b4+8Hu zC-Me;Mi>2kc_2HP%qN|&G-*Eh8H-$<7p2V09huFQMIAcHjGTx+MM#T&WOSv=d(P00M96*a zVmO-piP7cN?CU#m;?vdAVJN!Xx9C2iF1bGlo;ol+V030_@(1n{i+*8rHQ?c37`Pna zf*l?RchK*7kA}5O4?p+_Wk9Dj&&{aQsiv^?Rv7C9B`xrtRT%@ooLRXjIoxmbx` z+^I^#s1xgH=fxf>wCEJi7HXj?%T(u`ncml(H?}dla8%R5XkW!;Rrh(hr%n1omZ{De zwYHQr%GjvUyii7@`Bih=DnqnY_W$3b+GC@qcCjdguBsrGha_5ccyuWz^AiupihDZJ8%_qB1eg!1kGo(I1-Ez!$ZRG zyfAd~>#H^p)_*rz;y9hm(XgCE&PrvlY8UP3u#K#N=osF)b=sigbOLk|bd1)(tp;1* zQw=^1KGWc{;ByUr2YkN47r^f}_#$|{!I!}AHTW|4{RUqFZ#4KS=z|7-2)@?fkHFU( kY=b{;@F(C;8~hpg^9Fwb-fZv<@XZF_f=Y~T*IKpz0rnGC%K!iX literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/param/IdParam.class b/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/param/IdParam.class new file mode 100644 index 0000000000000000000000000000000000000000..f72bb794b0c4eda9cc1d2317b3e002bf133314e6 GIT binary patch literal 2619 zcmb7GZBrXn6n-|@O*XK!Ar@#VSgKV6fd*@}N=TBs~CwoPaRz$iV$7&b4P%!bS%%92dz{EonpNsfK9AC!qm4;;9skwG# z)v488uX=y}mIiG>L(i;Nt^0P>U$rX@$Dn)p(KJNdl7`gcrv0s*tJu|z+}*WJXWgIF zkSMwvRoidW91YQx6(Ui$RHp}}-0ZqcoaYTprPit01OV^eO`^=Ei8GqS2dpY=*K zc6!mRI!leMHK(>>uT_Yo7QJ=GY%_AMLs0k2F5QhUu6tX#CuPRAldC`8adw;>ku9&9 z+x9lS+_qh_w{r8PWtr)-|FEr{?UudECo$B@z}Rs7c`|e+Gt!A8BQp{(6ARQBZK|br zke-2K;J*2~GT)auZe18l7979qsoWf&H6^DRdX&9baF)m`;o-JR**<#|RX&50&NmIa z!jm1{K4iyu8Vt`bJ2ee)DZ@qS5;H)Q7=pBsXrYuRPDJsjv`A0Ux7QyR?Cr4X=DJ;- zlkn)TY}d=GW!OLS3~Bk^d|{5^QI6G|dZXgAwSs_jjts!`y`o=ps~blvrcnBunOeyo z=X&Niq!8E36@v@qK9Sa>fv%$0sI5DOp=tzP*Yj1BmRhE1FU{8kp9lQjGVj(ey^ut%=|MhW!Pg@G?UPN&YXV6Ev zpKnqG1NUH;SR;5PcQZdDaKyB)&$ zw%eh7w^s@BJ}45kBp zv%?~+<}KujMcGv|n53lRBR1?5B?ARgI!!4SbfT(2nbxEN%EkH)dW3=|PNhyO*%UcRxryGR7yjV0 WlnFC!XCR0)LnOR=3#_NC7XJf_rqIa% literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/result/Result.class b/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/result/Result.class new file mode 100644 index 0000000000000000000000000000000000000000..2101bbb37b120346da9031d1504bfe4842b28709 GIT binary patch literal 4866 zcmbVQ>vJ1d6+c(r)vn}?<0$b%NoZ5zf+ES5<2XDV+fCxQts5&&E!)sg>TcwXEk~AI zX_eIBQA!Ja8VaS*7ZeyEUounL2~LI<2ELRT{tns+pZX6_!td<8l2?wJ+IZ}{_nv$1 z@4U~w=HUlC{E%tS@bD~)c#db!^Y8*MUo>bnOuMOU(vSH2V;){I=_e-r z)TEbr^)rKBG3e)lTFXu;XXj^}QaM*FOpl!qBpwj7ZKPNzyLQ2yvGWy2hc)~o1Zmmg zoFi!G_@aHmPUY>wd}^%VI`dBHh#+IhDVObe>_>e28Ml-x%wt=dvt7G>Z{qBtlXbBd z%H-w?wp%ITaMRQjD8a#8A?FTb89Ok8!y}&H?c=$EbE>j*)+tTdXY-z@VipG2Fav8v z)ZB$!Sy1x37L zIw2|?TNRRNpr}vv{}Z)osXQ-8cS@xqoN+uh=7Ur@wN*vM7&6TRl*R`ug<}8bl?`+E-}@$BVgr!a?$t5Ie85~|LF$e=p@ zYMp*6Ki!3=!hRCeMH(IhcheUz{~|8<0LAc!uzGVu*83v3*zfh`2dNEnWF^LaP>$g% z@YUnjNW6nd6CK7F^oV!RmoT>^1AUpkg4I{+C<9o9IHSPBaA}BVxQ_QI@X$4CIvIbL zv^Ahdf@@^N|A?)CCm;gN37VVGeLHk-gXUFXCMZLmFoqt+35K4*H-K-uf*wyu=tLaI ziH*nyf!qh2L$nL08M$4a=6uJ>q!v$xpnI^=1;}j4Q8?tY#hJH=8v@`k#N7jNN9)9~ z^BaikQR0p(aXEaOK-;6NODCmuNwzMTSR*sJZely}i|zr)JPDcOkeQ|^DwoaNCt+yB zGZTPZ+lYxtJ3WH~p24927zkTzG)A~^|~;41=SefPLZJ2rwwe4zTLb`Qb#Oar*cM!1em!r{hJwy*cLtF&_? z+}=&W^}^r)O+i20#tL>EUv5Ofc;ZjAV`I+@d$_XM1eMj?Pq`@zU-#ra?w+a=;z(n` z*Lx!&k-gX-yNlyr#4+y@$rFxd^+^i7UPxu~Kw~{SkD|_f56i_zxK%8{oH$cRj zLfR&#@C|`|H4*;<>DraV-zo4q=}lJ>f1^N}t8JIJ#H8(162pMj{SRu6Y9G*!%Vc#& zwKZz5a&!#nVCfhLMs?;1en64Sv@NPfapBaMItL6ebq<(OgPBalWJJv>lXe9PX}&fm zBCi(4HEYpaJl>vWEtjvs09`H3AG!vAHSyfggWIk*Wz%gfYAg#(^1@0##s|@J?NX z)A8a*J2{V8fWk064?CLhQtG26%rx}a4k}=#`)r$5u4ji|q~J}kXmGd?a5Da5auWdS zYmjf^veByyRUWOLq}YN!wsp>pR4_wvJcy+?X&K6M%kF=VcH<4TC$e{qKF3a7qdOvZ s%6SJqk$rOB$@IH0U!%`&>~b=|@&(tgoV6ZSrf}s3RGBW*W8SLtKg#ToJpcdz literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/result/ResultConstant.class b/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/result/ResultConstant.class new file mode 100644 index 0000000000000000000000000000000000000000..068d654be5cb7faa23e8c99f316541ae0b8754e2 GIT binary patch literal 453 zcmZutO;5r=5Pb_s`KUlaP}Cm)7mJD~iHT`yBq20ufooIhipA2J(vsl6@TV9r#)D_$ z@9}J$HYUWxJ-nHDyEFUdeSW{a1L)$Q014GRwor>n40;SA-0syek!(N_BE@a0dKBYxDB

;)-_Jtaw6 dVqZy;d8T`Y5@Ctvg1Ymlpo%)NWvWxC`~c-AVtxPs literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/tree/TreeNode.class b/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/pojo/tree/TreeNode.class new file mode 100644 index 0000000000000000000000000000000000000000..896ea2d498672f4c23f872e44dd11f4dd74f97fa GIT binary patch literal 6151 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 Vc-kMjHX==YfonVwm<+Y9{|AKZfe-)y literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/utils/IPUtil.class b/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/utils/IPUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..67c9ef08b71683395b3fae28a42d09b82425f34b GIT binary patch literal 1907 zcma)7-%}e^6#nk!$3n6M8X5|vg^EHGC~VP6TR^m}RFD8I0jkwHvxEz53A-^_TF^Ir za-8v@GmaLgqc09m&eRvIeQ@-}2md1$;3d3ShjAru>Uc}X zgg|)Ic5H7u+MR;4$Y7dV+rrSDr0EHg(NGvgI( zXO-8wwY*%AMY?P$Upvw>C%IfJ>j@FerSsr&!C80Qht7ms^v1WcGVj^0LzHGSNc^}E z4H?hMu1{NezXTnV0`*L4PFgvYnC935?Fas6r1#J*tWP?gEUZ{rN#Cc+x2iI8+}Yfa z1*;NO&nb>n=n!*OvVpQ{%d)~NwzDjkS;k#e;~`47^ZT@#$43}FNUN5UG3IpXKP~=M z$k>REw*?|q+KM`+c+R++g{-`3tENZGjT=y{GH?7_TNtN$a>>%-EjvOR8pi!Y-y=H^0QUQ`PBembYeC$Xc>If3>eU#g`S9A8uMX z`aA@v1W(Ji3e(IQx`=p@e@)OzG!;6(uUvvbrq#`~G?kY4no>pjR!oWX zGlZwbOkgN@;b-UqkMVILxPu2g)d~EH`r%MpXb+L$a9g+nxTALdWpt*055^9nOq zP7#R5_Ry$(hnPB~gG0ex^eEKh(r-Sh^t=XD`avD0c1z#ymOknG9kF;5xjC_eP~TG$ z1eT}Ro?}B)VH(Q`q6c+2j|h@zK#H{VQqzZiT)<_n*D-*5Y}*npLh^sm8eYbycmKNPI7Mf-%2hlqByW_>xq2un`S- z#HjtuX@L2)@UHB`q>nQGB6X@E-3XTm53wQs@1Tw-$LcS1>ZsQ-IQ%ENv=~!WB@3p@ K4=MK=Ui}AWSHLR( literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/utils/JwtUtil.class b/library/skyeye-dev/skyeye-common/target/classes/com/zhangy/skyeye/common/utils/JwtUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..9e957953230cd00c1ab47c24917b6c73fd470151 GIT binary patch literal 3118 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 Om_w1i(;bez=6?YI^;gUQ literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-common/target/classes/logback-spring.xml b/library/skyeye-dev/skyeye-common/target/classes/logback-spring.xml new file mode 100644 index 0000000..7770c61 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/target/classes/logback-spring.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + ${log.path}/java/${spring.application.name}/syslogTodayDebug.log + + ${log.path}/%d{yyyy-MM-dd}/java/${spring.application.name}/syslogYesterdayDebug.%i.log + 50MB + 30 + + + %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n + + + + + + ${log.path}/java/${spring.application.name}/syslogTodayError.log + + ${log.path}/%d{yyyy-MM-dd}/java/${spring.application.name}/syslogYesterdayError.%i.log + 50MB + 30 + + + %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n + + + ERROR + + + + + + + + + + + + + + + diff --git a/library/skyeye-dev/skyeye-common/target/maven-archiver/pom.properties b/library/skyeye-dev/skyeye-common/target/maven-archiver/pom.properties new file mode 100644 index 0000000..6ac9d09 --- /dev/null +++ b/library/skyeye-dev/skyeye-common/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=skyeye-common +groupId=com.zhangy +version=1.0.0.RELEASE diff --git a/library/skyeye-dev/skyeye-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/library/skyeye-dev/skyeye-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..1bacb4a --- /dev/null +++ b/library/skyeye-dev/skyeye-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,12 @@ +com\zhangy\skyeye\common\utils\SpringUtil.class +com\zhangy\skyeye\common\utils\IPUtil.class +com\zhangy\skyeye\common\pojo\result\ResultConstant.class +com\zhangy\skyeye\common\pojo\tree\TreeNode.class +com\zhangy\skyeye\common\pojo\param\IdParam.class +com\zhangy\skyeye\common\pojo\result\Result.class +com\zhangy\skyeye\common\utils\WebUtil.class +com\zhangy\skyeye\common\utils\CommonUtil.class +com\zhangy\skyeye\common\utils\JwtUtil.class +com\zhangy\skyeye\common\pojo\SecurityConstants.class +com\zhangy\skyeye\common\pojo\CommonConstant.class +com\zhangy\skyeye\common\utils\CookieUtil.class diff --git a/library/skyeye-dev/skyeye-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/library/skyeye-dev/skyeye-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..11f828d --- /dev/null +++ b/library/skyeye-dev/skyeye-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,12 @@ +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\pojo\CommonConstant.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\pojo\param\IdParam.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\pojo\SecurityConstants.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\utils\CookieUtil.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\utils\SpringUtil.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\pojo\result\ResultConstant.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\pojo\tree\TreeNode.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\utils\WebUtil.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\pojo\result\Result.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\utils\CommonUtil.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\utils\JwtUtil.java +D:\logisen\ddd\skyeye-dev\skyeye-common\src\main\java\com\zhangy\skyeye\common\utils\IPUtil.java diff --git a/library/skyeye-dev/skyeye-common/target/skyeye-common-1.0.0.RELEASE.jar b/library/skyeye-dev/skyeye-common/target/skyeye-common-1.0.0.RELEASE.jar new file mode 100644 index 0000000000000000000000000000000000000000..122c117a747a11c9b1fd88ebe8a7f88e7e35a1cc GIT binary patch literal 20592 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 + + + + skyeye-dev + com.zhangy + 1.0.0.RELEASE + + 4.0.0 + + skyeye-db + jar + skyeye db library + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.baomidou + mybatis-plus-boot-starter + + + + + com.alibaba + druid-spring-boot-starter + + + + + com.zhangy + skyeye-common + ${skyeye.version} + + + + + com.github.xiaoymin + knife4j-micro-spring-boot-starter + + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/.DS_Store b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..285bd77f97e01c13b12dd00b4d81b79b8c21068a GIT binary patch literal 8196 zcmeHMU2GIp6u#fIzzh>%sFW7$uxnSKQiuxz{-Ch!wvj?hTie?0@>6zq#&+U#X4#qD zQjMlQ`GcDHqEYeZ$*2#g(GvB^M2VUh9|#iVMU070y!eL?CdPB;PFo7}QParWB>oNlT{Sc?hF%{yZz~I$EBDew& zR+Bm?)Yf=|Fdkwm#7TiPLIuK=P`DzzVnDc)J|5boLYx#R+!?~l2f~#R-cS&%PV>hD zbB2__NJbHeB5-vC_}#sV8O&rA+q?Y!Zd;z8OrD2SRlR8O5?NWQsyFC^nW5}~gTtCu z_RRZDJLg*!vn}VF-mtdZ8+FG!3a-;rGAoujK3H(=@|Z&-D+)QgP$pxu#kTvbhlO>a zsh|#Izt)XJm&K;KGB?^OxANtema;eW6}J=s)n!8UF6Q*17^u1RFsp;>SDJv zZQgpvJ*oDNuHLiDwG}n0TDxknVtH2HHivRv!E_AE85tP241Y9h8K&b~4_anPQC476 zzmpp?&(_qhUUO4}t_z!4pXpgL<-B#YZ21#fLYBoEdSgP7wW)&!ZL-TX_>4v{qU((t zWcdKsr%NVDp;q7j4Hr*!6+Lwp#v6nk$*z~GZdAwE@$VVDMOdQJW68of^+khL@9qghVH@`()ea0tqtoR}tB zBDGO86Q3Gy1g#*(iBwXkR|=Ss{20(#lC`qE>@X{`33i;lz+Pt`vMF|ooo3&#bL;~9 znf=0kWxugY>@QSfDOREZ>#zY$xD{J*JGNm5(&$7N_9Ke|444>!jWQ}2#{?e36L=C& z;W(bh%XkGR@EYF4yLb=p;}d*_&v6=G;2eIy1^kGM_yd>lr=&h>srb(2eqMM9uRkbS0Kqc_q9^0&H zkVWS%b*HLTQ!a|`E_JP{F-3G*V{I{wXO{eLar`TGhJ8mIzepVa8&!}|hd9q^ zcn2R~3a9W9J`NcFHNM4p{B#9}yXJBjzt3{G(pPe9*BK$rG~?$QN4*6f0e<#Vspt3q z_W8g62S$;IA`nI3{}};PxAnEP(%$BKlk>ZFoazy(yl}fofq@H&IUfS3Kl6tnwc}*U ceNrJ#3M37c|NKKhaNtMhe{}u_^t*1wKll;vga7~l literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DTDruidConfig.java b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DTDruidConfig.java new file mode 100644 index 0000000..9b47295 --- /dev/null +++ b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DTDruidConfig.java @@ -0,0 +1,39 @@ +package com.zhangy.skyeye.db.config; + +import com.alibaba.druid.support.http.StatViewServlet; +import com.alibaba.druid.support.http.WebStatFilter; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class DTDruidConfig { + + @Bean + public ServletRegistrationBean statViewServletRegistrationBean() { + ServletRegistrationBean registrationBean = new ServletRegistrationBean(); + registrationBean.setServlet(new StatViewServlet()); + registrationBean.addUrlMappings(new String[] { "/druid/*" }); + registrationBean.addInitParameter("loginUsername", "admin"); + registrationBean.addInitParameter("loginPassword", "123456"); + registrationBean.addInitParameter("resetEnable", "false"); + return registrationBean; + } + + @Bean + public FilterRegistrationBean webStatFilterRegistrationBean() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean(); + WebStatFilter filter = new WebStatFilter(); + registrationBean.setFilter(filter); + registrationBean.addUrlPatterns(new String[] { "/*" }); + registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); + registrationBean.addInitParameter("sessionStatEnable", "false"); + registrationBean.addInitParameter("sessionStatMaxCount", "1000"); + registrationBean.addInitParameter("principalSessionName", ""); + registrationBean.addInitParameter("principalCookieName", ""); + registrationBean.addInitParameter("profileEnable", "true"); + return registrationBean; + } + +} diff --git a/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DTMybatisPlusConfig.java b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DTMybatisPlusConfig.java new file mode 100644 index 0000000..0161abc --- /dev/null +++ b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DTMybatisPlusConfig.java @@ -0,0 +1,47 @@ +package com.zhangy.skyeye.db.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler; +import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; + +@MapperScan("com.tiamo.dt.**.mapper") +@Configuration +public class DTMybatisPlusConfig { + + /** + * 分页插件 + */ + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + + //分页插件 + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + + //动态表名插件 + DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor(); + HashMap map = new HashMap<>(); + map.put("res_pos_vel", (sql, tableName) -> tableName + "_" + DynamicTableNameHelper.getTableNameSuffix()); + map.put("env_sat_risk", (sql, tableName) -> getTableName(tableName, DynamicTableNameHelper.getTableNameSuffix())); + map.put("env_goes_proton", (sql, tableName) -> getTableName(tableName, DynamicTableNameHelper.getTableNameSuffix())); + map.put("env_goes_electron", (sql, tableName) -> getTableName(tableName, DynamicTableNameHelper.getTableNameSuffix())); + map.put("env_goes_xray", (sql, tableName) -> getTableName(tableName, DynamicTableNameHelper.getTableNameSuffix())); + map.put("env_goes_geomagnetic", (sql, tableName) -> getTableName(tableName, DynamicTableNameHelper.getTableNameSuffix())); + map.put("env_poes_data", (sql, tableName) -> getTableName(tableName, DynamicTableNameHelper.getTableNameSuffix())); + dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map); + interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor); + + return interceptor; + } + + private String getTableName(String tableName, String suffix) { + return suffix != null ? tableName + suffix : tableName; + } +} diff --git a/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DynamicTableNameHelper.java b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DynamicTableNameHelper.java new file mode 100644 index 0000000..cfe4b95 --- /dev/null +++ b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/config/DynamicTableNameHelper.java @@ -0,0 +1,20 @@ +package com.zhangy.skyeye.db.config; + +/** + * 动态表名参数类 + */ +public class DynamicTableNameHelper { + + /** + * 动态表名参数保存 + */ + private static final ThreadLocal TABLE_NAME_SUFFIX = new ThreadLocal<>(); + + public static void setTableNameSuffix(String tableNameSuffix){ + TABLE_NAME_SUFFIX.set(tableNameSuffix); + } + + public static String getTableNameSuffix() { + return TABLE_NAME_SUFFIX.get(); + } +} diff --git a/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/pojo/page/PageParam.java b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/pojo/page/PageParam.java new file mode 100644 index 0000000..3738b49 --- /dev/null +++ b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/pojo/page/PageParam.java @@ -0,0 +1,26 @@ +package com.zhangy.skyeye.db.pojo.page; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 分页参数 + */ +@Data +@ApiModel(value="PageParam对象", description="分页参数") +public class PageParam { + + @ApiModelProperty(value = "当前页", position = 1) + private Integer pageCurrent = 1; + + @ApiModelProperty(value = "每页数量", position = 2) + private Integer pageSize = 10; + + @ApiModelProperty(value = "排序字段", position = 3) + private String orderBy; + + @ApiModelProperty(value = "正序or倒序", position = 4) + private Boolean isAsc = true; + +} diff --git a/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/pojo/props/Knife4jProperties.java b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/pojo/props/Knife4jProperties.java new file mode 100644 index 0000000..37b716d --- /dev/null +++ b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/pojo/props/Knife4jProperties.java @@ -0,0 +1,22 @@ +package com.zhangy.skyeye.db.pojo.props; + +import lombok.Data; + +/** + * knife4j配置配置信息 + */ +@Data +public class Knife4jProperties { + + /** + * Controller包根路径 + */ + private String basePackage; + + private String title; + + private String description; + + private String version; + +} diff --git a/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/utils/MPUtil.java b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/utils/MPUtil.java new file mode 100644 index 0000000..37a61cf --- /dev/null +++ b/library/skyeye-dev/skyeye-db/src/main/java/com/zhangy/skyeye/db/utils/MPUtil.java @@ -0,0 +1,81 @@ +package com.zhangy.skyeye.db.config; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.zhangy.skyeye.common.utils.CommonUtil; +import com.zhangy.skyeye.db.pojo.page.PageParam; + +/** + * MybatisPlus工具类 + */ +public class MPUtil { + + /** + * 通过PageParam获取分页对象 + * @param pageParam + * @return + */ + public static Page getPage(PageParam pageParam){ + if(pageParam == null){ + pageParam = new PageParam(); + } + + Page page = new Page(pageParam.getPageCurrent(), pageParam.getPageSize()); + if(pageParam.getOrderBy() != null && !pageParam.getOrderBy().isEmpty()){ + String[] orderColumnArr = pageParam.getOrderBy().split(","); + + //驼峰转下划线,数据库中字段为下划线 + for (int i = 0; i < orderColumnArr.length; i++) { + orderColumnArr[i] = CommonUtil.camelToUnderline(orderColumnArr[i]); + } + + if(pageParam.getIsAsc()){ + page.addOrder(OrderItem.ascs(orderColumnArr)); + }else{ + page.addOrder(OrderItem.descs(orderColumnArr)); + } + } + return page; + } + + /** + * 获取QueryWrapper + * @return + */ + public static QueryWrapper getQueryWrapper(){ + return new QueryWrapper<>(); + } + + /** + * 获取QueryWrapper + * @param pageParam + * @return + */ + public static QueryWrapper getQueryWrapper(PageParam pageParam){ + if(pageParam == null){ + return new QueryWrapper<>(); + } + + QueryWrapper queryWrapper = new QueryWrapper<>(); + + if(pageParam.getOrderBy() != null && !pageParam.getOrderBy().isEmpty()){ + String[] orderColumnArr = pageParam.getOrderBy().split(","); + + //驼峰转下划线,数据库中字段为下划线 + for (int i = 0; i < orderColumnArr.length; i++) { + orderColumnArr[i] = CommonUtil.camelToUnderline(orderColumnArr[i]); + } + + if(pageParam.getIsAsc()){ + queryWrapper.orderByAsc(orderColumnArr); + }else{ + queryWrapper.orderByDesc(orderColumnArr); + } + } + + + return queryWrapper; + } + +} diff --git a/library/skyeye-dev/skyeye-db/src/main/resources/META-INF/spring.factories b/library/skyeye-dev/skyeye-db/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..f0e7ff3 --- /dev/null +++ b/library/skyeye-dev/skyeye-db/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.tiamo.dt.dev.db.config.DTDruidConfig,\ + com.tiamo.dt.dev.db.config.DTMybatisPlusConfig diff --git a/library/skyeye-dev/skyeye-db/target/classes/META-INF/spring.factories b/library/skyeye-dev/skyeye-db/target/classes/META-INF/spring.factories new file mode 100644 index 0000000..f0e7ff3 --- /dev/null +++ b/library/skyeye-dev/skyeye-db/target/classes/META-INF/spring.factories @@ -0,0 +1,3 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.tiamo.dt.dev.db.config.DTDruidConfig,\ + com.tiamo.dt.dev.db.config.DTMybatisPlusConfig diff --git a/library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/config/DTDruidConfig.class b/library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/config/DTDruidConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..7110b3a9ff475cd1e35d46871ac8e964c9e51072 GIT binary patch literal 2641 zcmbtW+fo}x5IrLavP;8FT}k|k->82mK?Xt8ssTWz)pcvYCu_CP`3Mke; zu5r(!&PD6?nb}*n@7!hRbcHAU$5z-?+e+N@$To8!j?K%HVd@-;4ONnaK#3t@5RbCr zkq`$3v+9LcH#M2w^`<7%Wm%$e*D2HJSZXYIN-qocR6Pz1y`J!tp}M?vN`0qvEBs)| zranRM%FOiiG(*4Y=mqI;GZ$K}2B8B(-^rIH+uoBR{LtmNHeEeYKRo8URSMU{h2NWo zOg_)=iUNU2PzGvG2gA^KR^|HO{YNFEp2JJLSlo2Y74A4x1Jv3E#$N{8PnSlpvxjy* zrI&P#tLKW^7{iV5ho(SG3mF(TWq5zVHK5u-`l z5!zF+zY*V#>RRpy9VtDbcOD^`(!2Caf$Y|Ml>C#dqk+c}#A)6Q4L$THr59t+N#BQQ z^y3~b2S^4&Z#5(uW|0mEOp~QT8ER%|HcOfaZqZ+-kjovC)LrmZ4f%hBJW9HaWAqYW zJ$sBklKm^GsUuvjV;>;wpQQ9p^}!V$Dov(xj(*?CyyfSKK$; z_kDZtRecB^a*mHac>GNszv}J`O%lk=(Zfkq-CMW5TX(5@d-&_03x5FEgP&69#&{C< zrI1kbiFTaC{V6mft2n2Ucp!x~wR1X!6vo@|V44RXRm5X$csvb(C)yy>6y}^yqe;z1 znh2bWX|$->OrsS~D5RMrtQ4-txEe}ouv2hQPT@v8*#W5E_Rddoey%Sc&8wq&B0_#f`na6G4aPvmlcU*xZJ-q>3PC6yC;8gTT zu*}oCG3Oh$XF9e{vS`|#9>b2oP{CDZ9ChS>!R#tjZCNt&f%)UIWE{6`!;R?`$Tp(L zRLAwhtANs&rjjfRtj(N}vr@14rlpTcZ+c9Yl_xKaOtrii9c#Jx{*YxcQhL^RO}jYU z$bA{%g2fxx>>mvo!v}beP4`!9-z*uYP0wVC9JFo6XV@K^88Vo0+@kK4mBuNTj(f^+ zXHRu3C{Cgx&@pEC(@x=pR99w>(vq!~EaeKad*$@)-pg2dPg<+W-MXs8o>e7o zSyf{9suH_amAF|Tm31n7pGQqq2sWEyLzP=%*I;8~m)|)e7O{us+vJGq4ft>;eRZ03!HALXv1~9^>d_uA) z1@~B58IqXQ@D%3M^{N`4#xnvZ8^&L)R0v$VtVFOBx`sDdcD%`1gPGZJ$Z>qncV#)u zZf{L1p6$RsPS0t09xrG(ix>F@4SROdlm4V@dNXU1cu8%(%-*2*MMpupj_=sqdWCvx zT*ET*z8mmg<*Tak=UiE(>}vw+YP_Q1lw{F1d^69j*CX+=0xw8klJ|y&H}RIhhNVyU zP{p(ghO6OioYU|Q-c8~?4e#S!4Yy;TfS43ug=wfS(K#2@+?P8;LoQ*3C6kGM*}%n0 z+2PzN)?$H{v5D--jKIL0U{#8OxMSYR%+x{+^^hCVwk zYk<=Ki5fmt!)I#vTn%5a(s{9_7IjXRME0eqy##WuT0CGi8jka3)u3VoynIXPlU z&okJD|BgE)!VAk;=vc2iJQz=!$o`l|E;*=PYh1kk%~0i)&&C50A&*GQ%9_40oWzd; zJC^xpC3^%quPldcOtxI!as?OK=9^YUS9wI%; fOr2mBK8#2B7p^92t6XhWsI8`ItLfV63?BX$=>D7$ literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/config/DynamicTableNameHelper.class b/library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/config/DynamicTableNameHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..626f6d8592cc6c0d07f58a696f893106dad16b5e GIT binary patch literal 944 zcmb7D+iuf95IvilW7m+@v=k^%dI6GD!V;=@NmQvoBaqS*$)Tc8)yCO4TO1oX4kCON z7pav%LOk8zDa{KH-q}4nXXebz`q%GoKLBiF%Ycqm9eLa{ki(i<)-`Ns*i_q9 z4fi!XU|4AGKCSN^H+J{;j-A)F+RHZ#%k>lfp4&bTJiFPA1aH?vm-`h4-H~3v<3S`C zwq|=(r(h?JWZ+eHh?%R(K*l=^>0;@SA@eM3Q;b4g2BIQ`nL@kq_X#8nhb7??Bh5JeLulu5{BRHJTFX%lE_dJK>Mzk3(rAGA({8`A`- zpZ_#)bX8FeOj8>eF4jH1#u`0Got`JdEma3ulTImIL5B8J9mZ21iAbKVbbkebe>l8?lpO97L{1>Fkr$|ru2Hk+tXq0FYBada=Ap9nMS$h0r zbkes%K~%W)Bp6^&xKm_)BKwI@`f+F-39_iF+vnOhk|e;~cjS)FpnXM3DVQdx!tW54 G!rec0%GN;u literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/config/MPUtil.class b/library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/config/MPUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..c50e163294b70a3190b75b3cca1b6dca357724ed GIT binary patch literal 2514 zcmb_eTXz#x6#h<|Fzs}p(2L@widY~ml>sc*mXX796S?|r`goqcxt+l!x{0T@Ts#6gT3 zIAfwi%d=XZGjSdlw06-%0ux%BG;s-2U6|JLvWXeYYIEAe6Wt3N3vZuP7@^(s%Sa zHYUPVClDCU6uqkba8E)d5DxI14>V8pOb9A5fwA$^2K3fZK;7x&4+wN@B zYXTRw>%Z$Y3k%2@xMksE_j(ZmFLmDVp zDB_NRk_Cka7Rp$);NXG4#7hDFGc^|0ux_D(b%DceIoNhX*=m~?Vxh36iXpE}d}q^j z-&ZaTgY2|Tw>dXdW#zMf4(u=rbUALgBrA0u3#SV&VNaYb?>wX}nYwX9&m5E11${eb z8v+B{@^9SBEznvvjuR)iTCIhQVRBNNc_0fVFy#1AnuXViP+j4!goEcn`1hH&TBR5c-bu`4(3;rJziX zK8E;-N(bKNb5CTnFht#IIp7_<%T+fHFn z-KE`gN4}aEByrtZd2J_a=eg|#vNlQnrda(ndtw&nkj7=oYy8WR!xhZo9_BY#JGH@@ kjguR!$(XePWNAIMjkRF|{V{8O&yn29n!ssR-hmJQ0`F{{ga7~l literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/pojo/page/PageParam.class b/library/skyeye-dev/skyeye-db/target/classes/com/zhangy/skyeye/db/pojo/page/PageParam.class new file mode 100644 index 0000000000000000000000000000000000000000..6a84c4da4810e50c364c0a521db0cce2e39797ea GIT binary patch literal 3537 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 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-db/target/maven-archiver/pom.properties b/library/skyeye-dev/skyeye-db/target/maven-archiver/pom.properties new file mode 100644 index 0000000..bc96b8f --- /dev/null +++ b/library/skyeye-dev/skyeye-db/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=skyeye-db +groupId=com.zhangy +version=1.0.0.RELEASE diff --git a/library/skyeye-dev/skyeye-db/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/library/skyeye-dev/skyeye-db/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..2d96a96 --- /dev/null +++ b/library/skyeye-dev/skyeye-db/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,6 @@ +com\zhangy\skyeye\db\config\DTDruidConfig.class +com\zhangy\skyeye\db\config\DTMybatisPlusConfig.class +com\zhangy\skyeye\db\pojo\page\PageParam.class +com\zhangy\skyeye\db\config\DynamicTableNameHelper.class +com\zhangy\skyeye\db\config\MPUtil.class +com\zhangy\skyeye\db\pojo\props\Knife4jProperties.class diff --git a/library/skyeye-dev/skyeye-db/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/library/skyeye-dev/skyeye-db/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..5e4d5ef --- /dev/null +++ b/library/skyeye-dev/skyeye-db/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,6 @@ +D:\logisen\ddd\skyeye-dev\skyeye-db\src\main\java\com\zhangy\skyeye\db\utils\MPUtil.java +D:\logisen\ddd\skyeye-dev\skyeye-db\src\main\java\com\zhangy\skyeye\db\config\DynamicTableNameHelper.java +D:\logisen\ddd\skyeye-dev\skyeye-db\src\main\java\com\zhangy\skyeye\db\config\DTDruidConfig.java +D:\logisen\ddd\skyeye-dev\skyeye-db\src\main\java\com\zhangy\skyeye\db\pojo\props\Knife4jProperties.java +D:\logisen\ddd\skyeye-dev\skyeye-db\src\main\java\com\zhangy\skyeye\db\pojo\page\PageParam.java +D:\logisen\ddd\skyeye-dev\skyeye-db\src\main\java\com\zhangy\skyeye\db\config\DTMybatisPlusConfig.java diff --git a/library/skyeye-dev/skyeye-db/target/skyeye-db-1.0.0.RELEASE.jar b/library/skyeye-dev/skyeye-db/target/skyeye-db-1.0.0.RELEASE.jar new file mode 100644 index 0000000000000000000000000000000000000000..11138af44c29c7bde859a3218d0128342520c326 GIT binary patch literal 11043 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 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-generator/.DS_Store b/library/skyeye-dev/skyeye-generator/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fb82c566c55e765d82bd1b61ed4d34f0b182101f GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1GcP+KU-vMVc4p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLGm z+SJr171YERjfy`{MtwkyLeM7@C2C@PAV`!KF(y9o;vYVk7|)$M+foXT8iI3^d(S=R zo^$V>GvB$l_m(k+wxYh4u?EJNOqEkjrRElekMlaMNP(o9D9E0rmk4CuI^!ki(vd>~jE!3_oe>NJ1M zS7%5H8n$5s!U#-{08gJP=CT6I=gK$U-!0Si5{b)@s;Xzqtf^6I)S5%-L8qMdvR=_` z%N7oBuG?{}T&17Q?Kh2bMypFXwwE<+qu?8uxf<1NUB|ywJ#6zg*&sZ zw|m&ICw@|Dn=B8wgV}tS5OvDt`yz)r}~?I&yR6DnGoVSK_*&$s6|+UwXq%S zFdJqg>=b*Ey}>?WXW2P+fqla+v#ac9_6z%!{l>1dzfg@?sKa6`!wNLw0W@PBTCf2r zbfOEpFn~OC7&rhy>dP zC0g+8C!M)z=y$`3qvpR<3Dz@R8OD01CWTAbKP8eY8)> z5g+Y7B5p>ipM&a>Xb+`>abhwFMN(E$QLEu;D_`Q;_o?xyHiHsIu*=oPs5X<5MX;-) ztD~AkIV#vhv{}`vC<7JWc71fUszDaaCUvu_RZ}hsc8j`1)tDlfwrG1) + + + + skyeye-dev + com.zhangy + 1.0.0.RELEASE + + 4.0.0 + + skyeye-generator + skyeye code generator lib + + + + + + com.baomidou + mybatis-plus-generator + + + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.apache.velocity + velocity + 1.7 + + + + + org.projectlombok + lombok + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-generator/src/.DS_Store b/library/skyeye-dev/skyeye-generator/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ad10f0b3215627ad09d2b5a3efc6aca87126e04d GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1GcP+KU-vMVc4p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLGm z+SJr170|>Njfy`{MtwkyLeM7@C2C@PAV`!KF(y9o;vYVk7|)$MTUve|H3a4+_nv#s zJ?GAzGvB#)?p?+h+KT#W#u^x7GF47Bm6}@=KF;e+MG7RMtGC_(uSu z{0QI|>TA41G#1cgK*t585h@U-M1?7WBL;*y$zy?DGN9vv3Uh|w@PXjT2u>*QpHB0~ ze07GTpkW(EAdJAx5#Z@l&4yT(narMie$NeCrt2jVmmpPDPn%v-qtvK12hxL1IqhY= zqT7}&?BiUw<5;;$KbzZY8s&^umvU?`YuZM^H!yXBRQC6pw(gYMoT9C}zHM3zD2l9P zw1&~qmc*K-Sj&d>V@`fj_b`Lse%+di(kZ_U+GTTG2K37*^IZOGbOvGu(_e+a>q5<{f)i!6=bi zy?Mtf4%sv^C!e+QMN&3eEh}w4DYWwi$Fg=guIZVM-QVXK$2>m9Cz>+UH{d!2FXd0x zXVUyatCl}w=P);R_ZkJ4sG^*nH81*Ls`YbwOQvh)ETcc` z<_%jn?ZZ7~Q}+f3D5AD!K4BUKMVW)9ZaX_z0BZ;>6mW0QFuzs_w^yQtQA#%nQvPi03mbI@A@&|Wj zU2o^GVNd*|)D~GDa0jymV`rH_SFz}nW&bsjoSSs$rsov=XzW-ViS+ZST6Nvf$>{|R z^J^pNNRO;tAREoJOD4gb-hn{79IxOko?I@v@z3^%FHU1C?*FYH(L8~dGIV}GL>Gf;? zQs_h%c3=Q`=rC{?7K$jLj1fGAXYeeZ!wI~ISMeH7;SIcv_wfNf#HaWiU*J5x#3lTQ zEBFal@h7g~FG-PVrG-*NS|lx#8l~mZ3TczHS=u7)mIkDZG$?$KDyep0!Y98YjS!hw zIw;kGt3T=Vty3-f_?E5Pws+pKsrJJxo?Q3U)z6(5Te5sr%fpYgPC!r~wgS@0;P>%9 zB};s~`9t9}-$i=sW05XQ0VX(-aNl8jmnPh9yT*M2~aN405`GJ;*IHb%ASlrDl@ z5nUP8B+633CZf%%Rz*3e__k}KD^(4$U^b{5Rjrz`QLvlTMXJUW!L&u&qZ-dG`M*N> z*X#oOo=|?3Q2r09AY&e4Sc(LpdJ~dpMLRkO*}JeCX>{WNGB|`B;oO1^2S-uBD8>lo z<9Hg!aT3qt1-y(`2kn5zgQ&&fyau^WWe*T*l8gptx%)it)!}6qnKk z+j8u~B&(o)s`_2URS9nz`1!x%_V@pHmCvCwVFbbmOpO4l+tclBB)i?3$Isd^s)wlZ y!u7@l^-ZXmauGoM#2<##kC7_3Nd|OWP?Avj-!B5_gZ!4C+Ts2m?*I4D{{JtZfoRA8 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-generator/src/main/.DS_Store b/library/skyeye-dev/skyeye-generator/src/main/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0f81f650f8b07d062dca19ad4cb02c7c0a81ecfb GIT binary patch literal 8196 zcmeHMTWl0n7(U;$&>1GcP+KU-vMVc4p@gLr5K-86+sLKmwk^GIS$20uI$=6fc4oKK zrlvlrfF{0ZRJ=SH^#L^sL7z;NsEP4`AW>e#nE1qtH+(QL{%6i?OQAeyq5++gob#W{ z|DBot-|s(X|6RryT8jE=#_AYjGF2`$m6|CEU+49vA_X&*Btdw_imbr$%wTSA=qBxO zBJ@D$fzSh?2SN{o9=IJmKzBAT@-6Otu^P6a2SN}0FFnA|hZt2ZlYtx)(my(=@lybj zJO%Iz^(hbVF|j}<134z752Zat_J9D2AjN=y(|U}nlS~G3Oh^G|5O9Xz$p|tO_)jNX z%vWbf3K_Pc2SN|r>;WD=3T5q-voq)V{M{YQSx$~t&*cU!)AbUGOOPrmr%kV_QmWLd z1L=NeDD7pvqT7-!?Bk3T{3iQ z-m!NTj1n2xop-F_fK4lN@>wfiBxR%7veM?GLOWk@ENhqJnx5&{y*-|B%;Rf(qe)9W zeXdjRQvPN=Chae@s`)c^4sx)&*C@Co73K7-dC`08S2nJHFxj@XWB0|`+MH@tt)1Il zGF>xg8NFFIZ`itNAMP45b+5mVd~18=Bc@SMlsRbVw6g=o#p=5G3+`SRi3ptuOnH}{ zV$M8TG`(RhF3aK>k;QRE*3RtL$;b{z=R4~DN+hy)nJn+)^QnSCt(aCLD;fxp?R3fH z;58Gg6-9G9j}QR_R9(AHRy4iK%H|9!n0jC%O>OTk35$ct+Rd`klXnIN$QW15MN+M@ ztbKNnKe#>XdOHUVd;FDBTV%PfN+e#JHXCMi<2v`~sji=<^zy|i3fA#IX2OIxJfQlFHO`h^WrIp_|I z+vInoVG>guClqwSaUz|bI_RPgZ`rzSd;4u0bl=S4VRlzd?c8~>CCgVe-TzSYI2i?Z z%XGay41DHKiWi^xK09t?tsjr-qG%U|hH-2nAVq+d!&0l_AuM0y+V`mOs5Xs)M+}#$ z^-*m)1&$c5h^~xk62+?+CZdh1RzcCI_}I14m8u3=3^u46RjrcZQVch#i&Tv%V$c$8 zjcPo~YvTJ=;`<+{fQ)&FVJQ;C?@dUe8Lem|j_<;5q|u23$lwri#CQuf z92`XfBN!#VkKu6~$4NYmXYf2;Al9G4%f$IN@Fw2EdpLu$IEN2>_J4t|a2emoRbIH>n28Il)$Nw;-evDK(CK<>vA!&xnzy3qO#P{*P@})bx P|HJ!#B0c^O-2Z<9mjizz literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-generator/src/main/java/com/zhangy/skyeye/generator/GeneratorApi.java b/library/skyeye-dev/skyeye-generator/src/main/java/com/zhangy/skyeye/generator/GeneratorApi.java new file mode 100644 index 0000000..216271c --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/src/main/java/com/zhangy/skyeye/generator/GeneratorApi.java @@ -0,0 +1,194 @@ +package com.zhangy.skyeye.generator; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.generator.AutoGenerator; +import com.baomidou.mybatisplus.generator.InjectionConfig; +import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.converts.OracleTypeConvert; +import com.baomidou.mybatisplus.generator.config.converts.PostgreSqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.converts.SqlServerTypeConvert; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 代码生成器配置类 + */ +@Data +public class GeneratorApi { + /** + * 数据库驱动名 + */ + private String driverName; + /** + * 数据库链接地址 + */ + private String url; + /** + * 数据库用户名 + */ + private String username; + /** + * 数据库密码 + */ + private String password; + /** + * 输出文件目录 + */ + private String outputDir; + /** + * 作者 + */ + private String author = "Tiamo"; + /** + * 代码生成的包名 + */ + private String packageName; + /** + * 需要生成的表名(两者只能取其一) + */ + private String[] includeTables; + /** + * 需要排除的表名(两者只能取其一) + */ + private String[] excludeTables; + /** + * 是否启用swagger + */ + private Boolean isSwagger2 = Boolean.TRUE; + + public void run() { + AutoGenerator mpg = new AutoGenerator(); + + //全局配置 + GlobalConfig gc = new GlobalConfig(); + //代码输出目录 + gc.setOutputDir(outputDir + "/src/main/java"); + //开发人员 + gc.setAuthor(author); + + gc.setFileOverride(true); + //是否打开输出目录 + gc.setOpen(false); + gc.setActiveRecord(false); + gc.setEnableCache(false); + //Mybatis Mapping.xml中增加BaseResult和BaseColumn + gc.setBaseResultMap(true); + gc.setBaseColumnList(true); + /*gc.setMapperName("%sMapper"); + gc.setXmlName("%sMapping"); + gc.setServiceName("I%sService"); + gc.setServiceImplName("%sServiceImpl"); + gc.setControllerName("%sController");*/ + gc.setSwagger2(isSwagger2); + mpg.setGlobalConfig(gc); + + //数据源配置 + DataSourceConfig dsc = new DataSourceConfig(); + dsc.setDriverName(this.driverName); + dsc.setUrl(this.url); + dsc.setUsername(this.username); + dsc.setPassword(this.password); + if (this.driverName.contains(DbType.MYSQL.getDb())) { + dsc.setDbType(DbType.MYSQL); + dsc.setTypeConvert(new MySqlTypeConvert()); + } else if (this.driverName.contains(DbType.POSTGRE_SQL.getDb())) { + dsc.setDbType(DbType.POSTGRE_SQL); + dsc.setTypeConvert(new PostgreSqlTypeConvert()); + } else if (this.driverName.contains(DbType.SQL_SERVER.getDb())) { + dsc.setDbType(DbType.SQL_SERVER); + dsc.setTypeConvert(new SqlServerTypeConvert()); + } else if (this.driverName.contains(DbType.ORACLE.getDb())) { + dsc.setDbType(DbType.ORACLE); + dsc.setTypeConvert(new OracleTypeConvert()); + } else { + System.out.println("数据库类型异常,代码生成失败!"); + return; + } + mpg.setDataSource(dsc); + + // 策略配置 + StrategyConfig strategy = new StrategyConfig(); + // strategy.setCapitalMode(true);// 全局大写命名 + // strategy.setDbColumnUnderline(true);//全局下划线命名 + strategy.setNaming(NamingStrategy.underline_to_camel); + strategy.setColumnNaming(NamingStrategy.underline_to_camel); +// strategy.setTablePrefix(tablePrefix); + if (includeTables.length > 0) { + strategy.setInclude(includeTables); + } + if (excludeTables.length > 0) { + strategy.setExclude(excludeTables); + } + + // 自定义 controller 父类 +// strategy.setSuperControllerClass("com.tiamo.dev.db.controller.BaseController"); + strategy.setEntityBuilderModel(false); + strategy.setEntityLombokModel(true); + strategy.setRestControllerStyle(true); + strategy.setControllerMappingHyphenStyle(true); + mpg.setStrategy(strategy); + + // 包配置 + PackageConfig pc = new PackageConfig(); + // 控制台扫描 + pc.setModuleName(null); + //父包名 + pc.setParent(packageName); + //controller包名 + pc.setController("controller"); + //entity包名 + pc.setEntity("entity"); + //mapping包名 + pc.setXml("mapping"); + mpg.setPackageInfo(pc); + + //自定义配置 + InjectionConfig injectionConfig = new InjectionConfig() { + @Override + public void initMap() { + + } + }; + + //如果模板引擎是 freemarker + //String templatePath = "/templates/mapping.xml.ftl"; + // 如果模板引擎是 velocity + String templatePath = "/templates/mapping.xml.vm"; + + // 自定义输出配置 + List focList = new ArrayList<>(); + // 自定义配置会被优先输出 + focList.add(new FileOutConfig(templatePath) { + @Override + public String outputFile(TableInfo tableInfo) { + // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! + return outputDir + "/src/main/resources/mapping/" + + tableInfo.getEntityName() + "Mapping" + StringPool.DOT_XML; + } + }); + + injectionConfig.setFileOutConfigList(focList); + mpg.setCfg(injectionConfig); + + // 配置模板 + TemplateConfig templateConfig = new TemplateConfig(); + + // 配置自定义输出模板 + //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 + // templateConfig.setEntity("templates/entity2.java"); + // templateConfig.setService(); + // templateConfig.setController(); + + templateConfig.setXml(null); + mpg.setTemplate(templateConfig); + + mpg.execute(); + } + +} diff --git a/library/skyeye-dev/skyeye-generator/src/main/resources/templates/controller.java.vm b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/controller.java.vm new file mode 100644 index 0000000..63bcbe9 --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/controller.java.vm @@ -0,0 +1,134 @@ +package ${package.Controller}; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springframework.web.bind.annotation.*; +#if(${restControllerStyle}) +#else +import org.springframework.stereotype.Controller; +#end + +#if(${superControllerClassPackage}) +import ${superControllerClassPackage}; +#end +#if(${swagger2}) +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +#end +#if(${entityLombokModel}) +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +#end + +import $!{package.Entity}.$!{entity}; +import $!{package.Service}.$!{table.serviceName}; +import result.pojo.com.zhangy.skyeye.common.Result; +import param.pojo.com.zhangy.skyeye.common.IdParam; +import com.tiamo.dt.dev.db.utils.MPUtil; +import com.tiamo.dt.dev.db.pojo.page.PageParam; + +import java.util.List; + +/** + * $!{table.comment} 前端控制器 + * + * @author ${author} + * @since ${date} + */ +#if(${restControllerStyle}) +@RestController +#else +@Controller +#end +@AllArgsConstructor +@Slf4j +@Api(value = "$!{table.comment}", tags = "$!{table.comment}接口") +@RequestMapping("#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end") +#if(${superControllerClass}) +public class ${table.controllerName} extends ${superControllerClass} { +#else +public class ${table.controllerName} { +#end + + private $!{table.serviceName} $!{table.entityPath}Service; + + /** + * 新增 + */ + @PostMapping("/save") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "新增", notes = "传入$!{table.entityPath}") + public Result save(@RequestBody $!{entity} $!{table.entityPath}) { + if($!{table.entityPath} == null){ + return Result.error("参数异常"); + } + return Result.status($!{table.entityPath}Service.save($!{table.entityPath})); + } + + /** + * 修改 $!{table.comment} + */ + @PostMapping("/update") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "修改", notes = "传入$!{table.entityPath}") + public Result update(@RequestBody $!{entity} $!{table.entityPath}) { + if($!{table.entityPath} == null){ + return Result.error("参数异常"); + } + return Result.status($!{table.entityPath}Service.updateById($!{table.entityPath})); + } + + /** + * 删除 $!{table.comment} + */ + @PostMapping("/remove") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "删除", notes = "传入ids") + public Result remove(@RequestBody IdParam idParam) { + if(idParam == null){ + return Result.error("参数异常!"); + } + + return Result.status($!{table.entityPath}Service.removeByIds(idParam.getIds())); + } + + /** + * 详情 + */ + @GetMapping("/detail") + @ApiOperationSupport(order = 4) + @ApiOperation(value = "详情", notes = "传入id") + public Result<$!{entity}> detail(Long id) { + if(id == null){ + return Result.error("参数异常"); + } + $!{entity} detail = $!{table.entityPath}Service.getById(id); + return Result.successData(detail); + } + + /** + * 查询 $!{table.comment} + */ + @GetMapping("/list") + @ApiOperationSupport(order = 5) + @ApiOperation(value = "查询", notes = "传入$!{table.entityPath}") + public Result> list(PageParam pageParam, $!{entity} $!{table.entityPath}) { + List<$!{entity}> list = $!{table.entityPath}Service.list($!{table.entityPath}Service.getQueryWrapper(pageParam, $!{table.entityPath})); + return Result.successData(list); + } + + /** + * 分页 $!{table.comment} + */ + @GetMapping("/page") + @ApiOperationSupport(order = 6) + @ApiOperation(value = "分页", notes = "传入$!{table.entityPath}") + public Result> page(PageParam pageParam, $!{entity} $!{table.entityPath}) { + IPage<$!{entity}> pages = $!{table.entityPath}Service.page( + MPUtil.getPage(pageParam), + $!{table.entityPath}Service.getQueryWrapper(null, $!{table.entityPath}) + ); + return Result.successData(pages); + } + +} diff --git a/library/skyeye-dev/skyeye-generator/src/main/resources/templates/entity.java.vm b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/entity.java.vm new file mode 100644 index 0000000..9031ae0 --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/entity.java.vm @@ -0,0 +1,158 @@ +package ${package.Entity}; + +#foreach($pkg in ${table.importPackages}) +import ${pkg}; +#end +#if(${swagger2}) +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +#end +#if(${entityLombokModel}) +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +#if(${chainModel}) +import lombok.experimental.Accessors; +#end +#end + +/** + * $!{table.comment} + * + * @author ${author} + * @since ${date} + */ +#if(${entityLombokModel}) +@Data +@AllArgsConstructor +@NoArgsConstructor +#if(${superEntityClass}) +@EqualsAndHashCode(callSuper = true) +#else +@EqualsAndHashCode(callSuper = false) +#end +#if(${chainModel}) +@Accessors(chain = true) +#end +#end +#if(${table.convert}) +@TableName("${table.name}") +#end +#if(${swagger2}) +@ApiModel(value="${entity}对象", description="$!{table.comment}") +#end +#if(${superEntityClass}) +public class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end { +#elseif(${activeRecord}) +public class ${entity} extends Model<${entity}> { +#else +public class ${entity} implements Serializable { +#end + +#if(${entitySerialVersionUID}) + private static final long serialVersionUID = 1L; +#end +## ---------- BEGIN 字段循环遍历 ---------- +#foreach($field in ${table.fields}) + +#if(${field.keyFlag}) +#set($keyPropertyName=${field.propertyName}) +#end +#if("$!field.comment" != "") +#if(${swagger2}) + @ApiModelProperty(value = "${field.comment}", position = ${foreach.index}) +#else + /** + * ${field.comment} + */ +#end +#end +#if(${field.keyFlag}) +## 主键 +#if(${field.keyIdentityFlag}) + @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO) +#elseif(!$null.isNull(${idType}) && "$!idType" != "") + @TableId(value = "${field.annotationColumnName}", type = IdType.${idType}) +#elseif(${field.convert}) + @TableId("${field.annotationColumnName}") +#end +## 普通字段 +#elseif(${field.fill}) +## ----- 存在字段填充设置 ----- +#if(${field.convert}) + @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill}) +#else + @TableField(fill = FieldFill.${field.fill}) +#end +#elseif(${field.convert}) + @TableField("${field.annotationColumnName}") +#end +## 乐观锁注解 +#if(${versionFieldName}==${field.name}) + @Version +#end +## 逻辑删除注解 +#if(${logicDeleteFieldName}==${field.name}) + @TableLogic +#end + private ${field.propertyType} ${field.propertyName}; +#end +## ---------- END 字段循环遍历 ---------- +#if(!${entityLombokModel}) +#foreach($field in ${table.fields}) +#if(${field.propertyType.equals("boolean")}) +#set($getprefix="is") +#else +#set($getprefix="get") +#end + public ${field.propertyType} ${getprefix}${field.capitalName}() { + return ${field.propertyName}; + } +#if(${chainModel}) + public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { +#else + public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { +#end + this.${field.propertyName} = ${field.propertyName}; +#if(${chainModel}) + return this; +#end + } +#end +## --foreach end--- +#end +## --end of #if(!${entityLombokModel})-- +#if(${entityColumnConstant}) +#foreach($field in ${table.fields}) + public static final String ${field.name.toUpperCase()} = "${field.name}"; + +#end +#end +#if(${activeRecord}) + @Override + protected Serializable pkVal() { +#if(${keyPropertyName}) + return this.${keyPropertyName}; +#else + return null; +#end + } + +#end +#if(!${entityLombokModel}) + @Override + public String toString() { + return "${entity}{" + +#foreach($field in ${table.fields}) +#if($!{foreach.index}==0) + "${field.propertyName}=" + ${field.propertyName} + +#else + ", ${field.propertyName}=" + ${field.propertyName} + +#end +#end + "}"; + } +#end + +} diff --git a/library/skyeye-dev/skyeye-generator/src/main/resources/templates/mapper.java.vm b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/mapper.java.vm new file mode 100644 index 0000000..101e157 --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/mapper.java.vm @@ -0,0 +1,14 @@ +package ${package.Mapper}; + +import ${package.Entity}.${entity}; +import ${superMapperClassPackage}; + +/** + * $!{table.comment} Mapper 接口 + * + * @author ${author} + * @since ${date} + */ +public interface ${table.mapperName} extends ${superMapperClass}<${entity}> { + +} diff --git a/library/skyeye-dev/skyeye-generator/src/main/resources/templates/mapping.xml.vm b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/mapping.xml.vm new file mode 100644 index 0000000..7a8e48d --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/mapping.xml.vm @@ -0,0 +1,38 @@ + + + +#if(${enableCache}) + + +#end + +#if(${baseResultMap}) + + +#foreach($field in ${table.fields}) +#if(${field.keyFlag})##生成主键排在第一位 + +#end +#end +#foreach($field in ${table.commonFields})##生成公共字段 + +#end +#foreach($field in ${table.fields}) +#if(!${field.keyFlag})##生成普通字段 + +#end +#end + + +#end +#if(${baseColumnList}) + + +#foreach($field in ${table.commonFields}) + ${field.columnName}, +#end + ${table.fieldNames} + + +#end + diff --git a/library/skyeye-dev/skyeye-generator/src/main/resources/templates/service.java.vm b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/service.java.vm new file mode 100644 index 0000000..818903a --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/service.java.vm @@ -0,0 +1,24 @@ +package ${package.Service}; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.tiamo.dt.dev.db.pojo.page.PageParam; +import ${package.Entity}.${entity}; +import ${superServiceClassPackage}; + +/** + * $!{table.comment} 服务类 + * + * @author ${author} + * @since ${date} + */ +public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { + + /** + * 通过实体类获取QueryWrapper + * @param pageParam 分页参数 + * @param $!{table.entityPath} 实体信息 + * @return + */ + QueryWrapper<$!{entity}> getQueryWrapper(PageParam pageParam, $!{entity} $!{table.entityPath}); + +} diff --git a/library/skyeye-dev/skyeye-generator/src/main/resources/templates/serviceImpl.java.vm b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/serviceImpl.java.vm new file mode 100644 index 0000000..ddb67cb --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/src/main/resources/templates/serviceImpl.java.vm @@ -0,0 +1,60 @@ +package ${package.ServiceImpl}; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.tiamo.dt.dev.db.pojo.page.PageParam; +import com.tiamo.dt.dev.db.utils.MPUtil; +import ${package.Entity}.${entity}; +import ${package.Mapper}.${table.mapperName}; +import ${package.Service}.${table.serviceName}; +import ${superServiceImplClassPackage}; +import org.springframework.stereotype.Service; + +/** + * $!{table.comment} 服务实现类 + * + * @author ${author} + * @since ${date} + */ +@Service +public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} { + + /** + * 通过实体类获取QueryWrapper + * @param pageParam 分页参数 + * @param $!{table.entityPath} 实体信息 + * @return + */ + @Override + public QueryWrapper<$!{entity}> getQueryWrapper(PageParam pageParam, $!{entity} $!{table.entityPath}){ + QueryWrapper<$!{entity}> queryWrapper = MPUtil.getQueryWrapper(pageParam); + + if($!{table.entityPath} == null){ + return queryWrapper; + } + +#foreach($field in ${table.fields}) +## 主键 +#if(${field.keyIdentityFlag}) + //主键 + if($!{table.entityPath}.get${field.capitalName}() != null){ + queryWrapper.lambda() + .eq($!{entity}::get${field.capitalName}, $!{table.entityPath}.get${field.capitalName}()); + return queryWrapper; + } +#end +#end + + //TODO 此处可以根据各字段查询需求修改查询条件,eq、like、ge、gt、le、lt、ne...等等等 + queryWrapper.lambda() +#foreach($field in ${table.fields}) +#if(!${field.keyIdentityFlag}) +#if($!{foreach.last}) + .eq($!{table.entityPath}.get${field.capitalName}() != null, $!{entity}::get${field.capitalName}, $!{table.entityPath}.get${field.capitalName}()); +#else + .eq($!{table.entityPath}.get${field.capitalName}() != null, $!{entity}::get${field.capitalName}, $!{table.entityPath}.get${field.capitalName}()) +#end +#end +#end + return queryWrapper; + } +} diff --git a/library/skyeye-dev/skyeye-generator/target/classes/com/zhangy/skyeye/generator/GeneratorApi$1.class b/library/skyeye-dev/skyeye-generator/target/classes/com/zhangy/skyeye/generator/GeneratorApi$1.class new file mode 100644 index 0000000000000000000000000000000000000000..02457be5e57066ec79dbb24e756c6ea0dd81fca7 GIT binary patch literal 703 zcma)3-A)rh7(LT&yRt62MMXhOyy!(O!V2+DLqZxgB!!SjxSwu^c5rv5*&ma7@ineT7UcfK>{01q#Gtoc|MXqIDLwBHGI z`-#osA7g1o)42FHRZ|s@lu@}XZ61HQi}ok_1G_$Iqsu*ktDz@zws)vCI#lJ@4v%FnGgYdb z48Bu;C?^8-j#CwUwN;*|&)O+z-M{Phx%@7v_mfFdTWB+yllgcVVgs!Z4KzdeXmNpy z?ytQguw` zr;|~Q$HxQuB}RMnt`c-N|3GyAqINOE1hh>E+Fy7`yE;c9#3N?J&)B#X#tnhS&xqg% qEm}vr$>W;E|7^c!Y~lRpEn6Kcgx2r`Pw728TMI~rR3X)(*e4K8Fc4c>`*_}1kC;yEP z_@Ie`(ZnC%k20QVs}iY6wMoxqF6aBsW%k?m&tCz|<9-VLxSGZQt{J$VMjW{`u3$=A z`6LQyOk*aASp!xQMZJ2%z?^}b485x6gxMlPzGO?!dR60owPA((4bc!*Rrn&{N(R>B zpVouAvrM;E9N$s*7*=!LUn@Q5FSz9rfVHCn$FD9=?J^|RWJNFxmK`2ZurD(&E;Vz$er$*M0SqYn@V_fmn*T&RZRn(AjXi{6sjgG z+dSZ&P$D3dw2V|eQjZ+XuGC7r%%$g4WMp}bGFMJmccbuF*=*_WIaRAJttS5se@`w? zb%IMNouuApSZZeTACZaTj*J3Zv?vZ8Z`!QRk;=U8+pY|$_^td5%$vA{1rvkFm>9w$ z!}y=&co;cuMFe`A4ld!gi94V=PFP`JTON0OD-dB5IV87Ur|_166%%(sGh%GEmKch9 z#5yKs%RpF4N_XE;?djMikH%y6rRSPh)q(QePH1+HVezk6zo)w09$l^{ky>juiy_x7 z3`0DKe3Cgm$fLQFjn(UEZrdWHH&&!qcJCkFOUFU!rCJKV!Z6bb?gWE&>!?`^-Phyz zxH9xtg8CY`tns(#L3kzDq2V(NjfMjQ&FyCVh&m4bpMaefh#i zu>AB9V(*)WMo9L8k$i(ul9R1t7{h7u=t47`-tWU1oTV`5$WFyD_&P%igop{8Z=+O6 zYuv&Y#Gf4@k^cbp2|b7C9X3c54w2M$N{c=chcMsK@fb9VfhO_+#_<+;95mUCwZi>k lQ@{mWBuLGnhmixiG)XdsOSnurL7(6(g#glYte-UfegJ`qjEn#P literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-generator/target/classes/com/zhangy/skyeye/generator/GeneratorApi.class b/library/skyeye-dev/skyeye-generator/target/classes/com/zhangy/skyeye/generator/GeneratorApi.class new file mode 100644 index 0000000000000000000000000000000000000000..16b501c3351e0e659130d088336c880084c32e77 GIT binary patch literal 11797 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 idParam) { + if(idParam == null){ + return Result.error("参数异常!"); + } + + return Result.status($!{table.entityPath}Service.removeByIds(idParam.getIds())); + } + + /** + * 详情 + */ + @GetMapping("/detail") + @ApiOperationSupport(order = 4) + @ApiOperation(value = "详情", notes = "传入id") + public Result<$!{entity}> detail(Long id) { + if(id == null){ + return Result.error("参数异常"); + } + $!{entity} detail = $!{table.entityPath}Service.getById(id); + return Result.successData(detail); + } + + /** + * 查询 $!{table.comment} + */ + @GetMapping("/list") + @ApiOperationSupport(order = 5) + @ApiOperation(value = "查询", notes = "传入$!{table.entityPath}") + public Result> list(PageParam pageParam, $!{entity} $!{table.entityPath}) { + List<$!{entity}> list = $!{table.entityPath}Service.list($!{table.entityPath}Service.getQueryWrapper(pageParam, $!{table.entityPath})); + return Result.successData(list); + } + + /** + * 分页 $!{table.comment} + */ + @GetMapping("/page") + @ApiOperationSupport(order = 6) + @ApiOperation(value = "分页", notes = "传入$!{table.entityPath}") + public Result> page(PageParam pageParam, $!{entity} $!{table.entityPath}) { + IPage<$!{entity}> pages = $!{table.entityPath}Service.page( + MPUtil.getPage(pageParam), + $!{table.entityPath}Service.getQueryWrapper(null, $!{table.entityPath}) + ); + return Result.successData(pages); + } + +} diff --git a/library/skyeye-dev/skyeye-generator/target/classes/templates/entity.java.vm b/library/skyeye-dev/skyeye-generator/target/classes/templates/entity.java.vm new file mode 100644 index 0000000..9031ae0 --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/target/classes/templates/entity.java.vm @@ -0,0 +1,158 @@ +package ${package.Entity}; + +#foreach($pkg in ${table.importPackages}) +import ${pkg}; +#end +#if(${swagger2}) +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +#end +#if(${entityLombokModel}) +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +#if(${chainModel}) +import lombok.experimental.Accessors; +#end +#end + +/** + * $!{table.comment} + * + * @author ${author} + * @since ${date} + */ +#if(${entityLombokModel}) +@Data +@AllArgsConstructor +@NoArgsConstructor +#if(${superEntityClass}) +@EqualsAndHashCode(callSuper = true) +#else +@EqualsAndHashCode(callSuper = false) +#end +#if(${chainModel}) +@Accessors(chain = true) +#end +#end +#if(${table.convert}) +@TableName("${table.name}") +#end +#if(${swagger2}) +@ApiModel(value="${entity}对象", description="$!{table.comment}") +#end +#if(${superEntityClass}) +public class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end { +#elseif(${activeRecord}) +public class ${entity} extends Model<${entity}> { +#else +public class ${entity} implements Serializable { +#end + +#if(${entitySerialVersionUID}) + private static final long serialVersionUID = 1L; +#end +## ---------- BEGIN 字段循环遍历 ---------- +#foreach($field in ${table.fields}) + +#if(${field.keyFlag}) +#set($keyPropertyName=${field.propertyName}) +#end +#if("$!field.comment" != "") +#if(${swagger2}) + @ApiModelProperty(value = "${field.comment}", position = ${foreach.index}) +#else + /** + * ${field.comment} + */ +#end +#end +#if(${field.keyFlag}) +## 主键 +#if(${field.keyIdentityFlag}) + @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO) +#elseif(!$null.isNull(${idType}) && "$!idType" != "") + @TableId(value = "${field.annotationColumnName}", type = IdType.${idType}) +#elseif(${field.convert}) + @TableId("${field.annotationColumnName}") +#end +## 普通字段 +#elseif(${field.fill}) +## ----- 存在字段填充设置 ----- +#if(${field.convert}) + @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill}) +#else + @TableField(fill = FieldFill.${field.fill}) +#end +#elseif(${field.convert}) + @TableField("${field.annotationColumnName}") +#end +## 乐观锁注解 +#if(${versionFieldName}==${field.name}) + @Version +#end +## 逻辑删除注解 +#if(${logicDeleteFieldName}==${field.name}) + @TableLogic +#end + private ${field.propertyType} ${field.propertyName}; +#end +## ---------- END 字段循环遍历 ---------- +#if(!${entityLombokModel}) +#foreach($field in ${table.fields}) +#if(${field.propertyType.equals("boolean")}) +#set($getprefix="is") +#else +#set($getprefix="get") +#end + public ${field.propertyType} ${getprefix}${field.capitalName}() { + return ${field.propertyName}; + } +#if(${chainModel}) + public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { +#else + public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { +#end + this.${field.propertyName} = ${field.propertyName}; +#if(${chainModel}) + return this; +#end + } +#end +## --foreach end--- +#end +## --end of #if(!${entityLombokModel})-- +#if(${entityColumnConstant}) +#foreach($field in ${table.fields}) + public static final String ${field.name.toUpperCase()} = "${field.name}"; + +#end +#end +#if(${activeRecord}) + @Override + protected Serializable pkVal() { +#if(${keyPropertyName}) + return this.${keyPropertyName}; +#else + return null; +#end + } + +#end +#if(!${entityLombokModel}) + @Override + public String toString() { + return "${entity}{" + +#foreach($field in ${table.fields}) +#if($!{foreach.index}==0) + "${field.propertyName}=" + ${field.propertyName} + +#else + ", ${field.propertyName}=" + ${field.propertyName} + +#end +#end + "}"; + } +#end + +} diff --git a/library/skyeye-dev/skyeye-generator/target/classes/templates/mapper.java.vm b/library/skyeye-dev/skyeye-generator/target/classes/templates/mapper.java.vm new file mode 100644 index 0000000..101e157 --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/target/classes/templates/mapper.java.vm @@ -0,0 +1,14 @@ +package ${package.Mapper}; + +import ${package.Entity}.${entity}; +import ${superMapperClassPackage}; + +/** + * $!{table.comment} Mapper 接口 + * + * @author ${author} + * @since ${date} + */ +public interface ${table.mapperName} extends ${superMapperClass}<${entity}> { + +} diff --git a/library/skyeye-dev/skyeye-generator/target/classes/templates/mapping.xml.vm b/library/skyeye-dev/skyeye-generator/target/classes/templates/mapping.xml.vm new file mode 100644 index 0000000..7a8e48d --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/target/classes/templates/mapping.xml.vm @@ -0,0 +1,38 @@ + + + +#if(${enableCache}) + + +#end + +#if(${baseResultMap}) + + +#foreach($field in ${table.fields}) +#if(${field.keyFlag})##生成主键排在第一位 + +#end +#end +#foreach($field in ${table.commonFields})##生成公共字段 + +#end +#foreach($field in ${table.fields}) +#if(!${field.keyFlag})##生成普通字段 + +#end +#end + + +#end +#if(${baseColumnList}) + + +#foreach($field in ${table.commonFields}) + ${field.columnName}, +#end + ${table.fieldNames} + + +#end + diff --git a/library/skyeye-dev/skyeye-generator/target/classes/templates/service.java.vm b/library/skyeye-dev/skyeye-generator/target/classes/templates/service.java.vm new file mode 100644 index 0000000..818903a --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/target/classes/templates/service.java.vm @@ -0,0 +1,24 @@ +package ${package.Service}; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.tiamo.dt.dev.db.pojo.page.PageParam; +import ${package.Entity}.${entity}; +import ${superServiceClassPackage}; + +/** + * $!{table.comment} 服务类 + * + * @author ${author} + * @since ${date} + */ +public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { + + /** + * 通过实体类获取QueryWrapper + * @param pageParam 分页参数 + * @param $!{table.entityPath} 实体信息 + * @return + */ + QueryWrapper<$!{entity}> getQueryWrapper(PageParam pageParam, $!{entity} $!{table.entityPath}); + +} diff --git a/library/skyeye-dev/skyeye-generator/target/classes/templates/serviceImpl.java.vm b/library/skyeye-dev/skyeye-generator/target/classes/templates/serviceImpl.java.vm new file mode 100644 index 0000000..ddb67cb --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/target/classes/templates/serviceImpl.java.vm @@ -0,0 +1,60 @@ +package ${package.ServiceImpl}; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.tiamo.dt.dev.db.pojo.page.PageParam; +import com.tiamo.dt.dev.db.utils.MPUtil; +import ${package.Entity}.${entity}; +import ${package.Mapper}.${table.mapperName}; +import ${package.Service}.${table.serviceName}; +import ${superServiceImplClassPackage}; +import org.springframework.stereotype.Service; + +/** + * $!{table.comment} 服务实现类 + * + * @author ${author} + * @since ${date} + */ +@Service +public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} { + + /** + * 通过实体类获取QueryWrapper + * @param pageParam 分页参数 + * @param $!{table.entityPath} 实体信息 + * @return + */ + @Override + public QueryWrapper<$!{entity}> getQueryWrapper(PageParam pageParam, $!{entity} $!{table.entityPath}){ + QueryWrapper<$!{entity}> queryWrapper = MPUtil.getQueryWrapper(pageParam); + + if($!{table.entityPath} == null){ + return queryWrapper; + } + +#foreach($field in ${table.fields}) +## 主键 +#if(${field.keyIdentityFlag}) + //主键 + if($!{table.entityPath}.get${field.capitalName}() != null){ + queryWrapper.lambda() + .eq($!{entity}::get${field.capitalName}, $!{table.entityPath}.get${field.capitalName}()); + return queryWrapper; + } +#end +#end + + //TODO 此处可以根据各字段查询需求修改查询条件,eq、like、ge、gt、le、lt、ne...等等等 + queryWrapper.lambda() +#foreach($field in ${table.fields}) +#if(!${field.keyIdentityFlag}) +#if($!{foreach.last}) + .eq($!{table.entityPath}.get${field.capitalName}() != null, $!{entity}::get${field.capitalName}, $!{table.entityPath}.get${field.capitalName}()); +#else + .eq($!{table.entityPath}.get${field.capitalName}() != null, $!{entity}::get${field.capitalName}, $!{table.entityPath}.get${field.capitalName}()) +#end +#end +#end + return queryWrapper; + } +} diff --git a/library/skyeye-dev/skyeye-generator/target/maven-archiver/pom.properties b/library/skyeye-dev/skyeye-generator/target/maven-archiver/pom.properties new file mode 100644 index 0000000..68fd68e --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=skyeye-generator +groupId=com.zhangy +version=1.0.0.RELEASE diff --git a/library/skyeye-dev/skyeye-generator/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/library/skyeye-dev/skyeye-generator/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..1755832 --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,3 @@ +com\zhangy\skyeye\generator\GeneratorApi.class +com\zhangy\skyeye\generator\GeneratorApi$2.class +com\zhangy\skyeye\generator\GeneratorApi$1.class diff --git a/library/skyeye-dev/skyeye-generator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/library/skyeye-dev/skyeye-generator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..24e52dc --- /dev/null +++ b/library/skyeye-dev/skyeye-generator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1 @@ +D:\logisen\ddd\skyeye-dev\skyeye-generator\src\main\java\com\zhangy\skyeye\generator\GeneratorApi.java diff --git a/library/skyeye-dev/skyeye-generator/target/skyeye-generator-1.0.0.RELEASE.jar b/library/skyeye-dev/skyeye-generator/target/skyeye-generator-1.0.0.RELEASE.jar new file mode 100644 index 0000000000000000000000000000000000000000..291eaab7ceacc2ce72dfe3222825b40077d98153 GIT binary patch literal 13073 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 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-job/pom.xml b/library/skyeye-dev/skyeye-job/pom.xml new file mode 100644 index 0000000..a04d7eb --- /dev/null +++ b/library/skyeye-dev/skyeye-job/pom.xml @@ -0,0 +1,42 @@ + + + + skyeye-dev + com.zhangy + 1.0.0.RELEASE + + 4.0.0 + + skyeye-job + + + + + + org.projectlombok + lombok + + + + + org.springframework.boot + spring-boot-starter + + + + + com.xuxueli + xxl-job-core + 2.3.1 + + + + + org.springframework.cloud + spring-cloud-commons + + + + \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/XxlJobAutoConfiguration.java b/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/XxlJobAutoConfiguration.java new file mode 100644 index 0000000..28e4e11 --- /dev/null +++ b/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/XxlJobAutoConfiguration.java @@ -0,0 +1,68 @@ +package com.zhangy.skyeye.job; + +import com.zhangy.skyeye.job.properties.XxlExecutorProperties; +import com.zhangy.skyeye.job.properties.XxlJobProperties; +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.util.StringUtils; + +import java.util.stream.Collectors; + +/** + * xxl-job自动装配 + */ +@Configuration(proxyBeanMethods = false) +@EnableAutoConfiguration +@EnableConfigurationProperties(XxlJobProperties.class) +public class XxlJobAutoConfiguration { + + /** + * 服务名称 包含 XXL_JOB_ADMIN 则说明是 Admin + */ + private static final String XXL_JOB_ADMIN = "xxl-job-admin"; + + /** + * 配置xxl-job 执行器,提供自动发现 xxl-job-admin 能力 + * + * @param xxlJobProperties xxl 配置 + * @param environment 环境变量 + * @param discoveryClient 注册发现客户端 + * @return + */ + @Bean + public XxlJobSpringExecutor xxlJobSpringExecutor(XxlJobProperties xxlJobProperties, Environment environment, + DiscoveryClient discoveryClient) { + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + XxlExecutorProperties executor = xxlJobProperties.getExecutor(); + // 应用名默认为服务名 + String appName = executor.getAppname(); + if (!StringUtils.hasText(appName)) { + appName = environment.getProperty("spring.application.name"); + } + xxlJobSpringExecutor.setAppname(appName); + xxlJobSpringExecutor.setAddress(executor.getAddress()); + xxlJobSpringExecutor.setIp(executor.getIp()); + xxlJobSpringExecutor.setPort(executor.getPort()); + xxlJobSpringExecutor.setAccessToken(executor.getAccessToken()); + xxlJobSpringExecutor.setLogPath(executor.getLogPath()); + xxlJobSpringExecutor.setLogRetentionDays(executor.getLogRetentionDays()); + + if (!StringUtils.hasText(xxlJobProperties.getAdmin().getAddresses())) { + String serverList = discoveryClient.getServices().stream().filter(s -> s.contains(XXL_JOB_ADMIN)) + .flatMap(s -> discoveryClient.getInstances(s).stream()).map(instance -> String + .format("http://%s:%s/%s", instance.getHost(), instance.getPort(), XXL_JOB_ADMIN)) + .collect(Collectors.joining(",")); + xxlJobSpringExecutor.setAdminAddresses(serverList); + } else { + xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdmin().getAddresses()); + } + + return xxlJobSpringExecutor; + } + +} diff --git a/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/annotation/EnableDtXxlJob.java b/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/annotation/EnableDtXxlJob.java new file mode 100644 index 0000000..2d55427 --- /dev/null +++ b/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/annotation/EnableDtXxlJob.java @@ -0,0 +1,15 @@ +package com.zhangy.skyeye.job.annotation; + +import com.zhangy.skyeye.job.XxlJobAutoConfiguration; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.*; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@Import({XxlJobAutoConfiguration.class}) +public @interface EnableDtXxlJob { + +} diff --git a/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlAdminProperties.java b/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlAdminProperties.java new file mode 100644 index 0000000..63a7e47 --- /dev/null +++ b/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlAdminProperties.java @@ -0,0 +1,16 @@ +package com.zhangy.skyeye.job.properties; + +import lombok.Data; + +/** + * xxl-job管理平台配置 + */ +@Data +public class XxlAdminProperties { + + /** + * 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。 执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册; + */ + private String addresses; + +} diff --git a/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlExecutorProperties.java b/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlExecutorProperties.java new file mode 100644 index 0000000..8fc207c --- /dev/null +++ b/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlExecutorProperties.java @@ -0,0 +1,47 @@ +package com.zhangy.skyeye.job.properties; + +import lombok.Data; + +/** + * xxl-job执行器配置 + */ +@Data +public class XxlExecutorProperties { + + /** + * 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册 + */ + private String appname; + + /** + * 服务注册地址,优先使用该配置作为注册地址 为空时使用内嵌服务 ”IP:PORT“ 作为注册地址 从而更灵活的支持容器类型执行器动态IP和动态映射端口问题 + */ + private String address; + + /** + * 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP ,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 + * "调度中心请求并触发任务" + */ + private String ip; + + /** + * 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9099,单机部署多个执行器时,注意要配置不同执行器端口; + */ + private Integer port = 9099; + + /** + * 执行器通讯TOKEN [选填]:非空时启用; + */ + private String accessToken; + + /** + * 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径; + */ + private String logPath = "logs/applogs/xxl-job/jobhandler"; + + /** + * 执行器日志保存天数 [选填] :值大于3时生效,启用执行器Log文件定期清理功能,否则不生效; + */ + private Integer logRetentionDays = 30; + +} diff --git a/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlJobProperties.java b/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlJobProperties.java new file mode 100644 index 0000000..84c325b --- /dev/null +++ b/library/skyeye-dev/skyeye-job/src/main/java/com/zhangy/skyeye/job/properties/XxlJobProperties.java @@ -0,0 +1,20 @@ +package com.zhangy.skyeye.job.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; + +/** + * xxl-job配置 + */ +@Data +@ConfigurationProperties(prefix = "xxl.job") +public class XxlJobProperties { + + @NestedConfigurationProperty + private XxlAdminProperties admin = new XxlAdminProperties(); + + @NestedConfigurationProperty + private XxlExecutorProperties executor = new XxlExecutorProperties(); + +} diff --git a/library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/XxlJobAutoConfiguration.class b/library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/XxlJobAutoConfiguration.class new file mode 100644 index 0000000000000000000000000000000000000000..bc812a670d86b1a88c97c3f0ce1d0d8f4931acfe GIT binary patch literal 5355 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 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/annotation/EnableDtXxlJob.class b/library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/annotation/EnableDtXxlJob.class new file mode 100644 index 0000000000000000000000000000000000000000..437b9f13b123298e0bc8cb003f27717f2e909593 GIT binary patch literal 603 zcmaiyO;5r=5Qb+Jtl}4n9y}O74jkQ!H%~+`!JrbXM&oH)hqBP_lI<3$Kh1+bz#nCt zf)Pw=JnZK@@66_%{rG%)2Y^%9bzs|piUT_gO1C;OK3>QW8B`idcp=v9!#KRu-br7K z1cSX!qO6SYUdEE5HKnu_R%#V9*l%SF4}}W2_z7@Vm;mh=gW^bp31vRc=NchKsH~d~ zk>G;+*lsX5%x61j38k_`R{ufTI+T7&pwqd#cAHm}^(bFb*M5>c0iTKfqjFRA(8wvm zTiOIX9vZ2Ft`QNwXfxoxrVL{{Z$UE}YLi*OTfUC?YmY2Sc|1rlMc&sQpL$$NtUlMO zD}%&LOwAPef;oSG_lZGy)`c6dkG^GaFuR%)&YD+cz+i#KBK--VU12g8VTo1_MQ|v# b`~(bP1xm1*oeg&I1lm#vls9>_HIMRYS|q4ILTaI+2mveHCkK?KyRv zSK%pjTrhDl0Sk_WOUhoha7Ec^6Gedmw_FZnqahmt>G@Unnd?;D+KRIj23~E258^Xk z%?qyzXxZF-0e#LdOM$_8uO@Fd*Op~)&t0xElAiZVZuPz!c!dCPNtzS6n`Ax>Y*ca_%gz%2HU&JrWT9c2%NJ0)`(}WFU}K1W#PaEEW3F3*1`?;r61>5n$=Jsv9+2N z`km1*zT`K9lDz3D`A2#MoK(}au?J}zgGdRS|BoryIElkH_G8q>A?2OIX?EMWDA$`_ zwX6g=)QcnAm1ow*3}#6$XJZ_roXKXLjycurQ@)F54r4e%JVThI z(j#ntf{|m4X~`m?$_4k%tX-md$39jlm7rytQf}t literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/properties/XxlExecutorProperties.class b/library/skyeye-dev/skyeye-job/target/classes/com/zhangy/skyeye/job/properties/XxlExecutorProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..3129b5093943c634d008a46c19593d1dbe7b1c88 GIT binary patch literal 4470 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 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-knife4j/pom.xml b/library/skyeye-dev/skyeye-knife4j/pom.xml new file mode 100644 index 0000000..5d9a0ce --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/pom.xml @@ -0,0 +1,38 @@ + + + + + skyeye-dev + com.zhangy + 1.0.0.RELEASE + + 4.0.0 + + skyeye-knife4j + skyeye knife4j lib + + + + + + org.springframework.boot + spring-boot-starter + + + + + com.github.xiaoymin + knife4j-micro-spring-boot-starter + + + + + org.projectlombok + lombok + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/config/DTKnife4jConfig.java b/library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/config/DTKnife4jConfig.java new file mode 100644 index 0000000..487f45d --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/config/DTKnife4jConfig.java @@ -0,0 +1,93 @@ +package com.zhangy.skyeye.knife4j.config; + +import com.zhangy.skyeye.knife4j.props.Knife4jProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.core.annotation.Order; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; + +@Configuration +@Import(DTKnife4jPropertiesAutoConfig.class) +@EnableSwagger2WebMvc +public class DTKnife4jConfig { + + @Autowired + Knife4jProperties knife4jProperties; + + @Bean(value = "restApi") + @Order(value = 1) + public Docket groupRestApi() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(groupApiInfo()) + .host(knife4jProperties.getHost()) + .select() + .apis(RequestHandlerSelectors.basePackage(knife4jProperties.getBasePackage())) + .paths(PathSelectors.any()) + .build(); + } + + private ApiInfo groupApiInfo(){ + return new ApiInfoBuilder() + .title(knife4jProperties.getTitle()) + .description(knife4jProperties.getDescription()) + .termsOfServiceUrl("www.tiamotech.com") + .version(knife4jProperties.getVersion()) + .contact(new Contact("tiamo", "www.tiamotech.com", "tiamo@tiamotech.com")) + .build(); + } + + // /** +// * 解决springboot升级到2.6.x之后,与spring-boot-starter-actuator同时使用时,knife4j报错问题 +// * +// * @param webEndpointsSupplier the web endpoints supplier +// * @param servletEndpointsSupplier the servlet endpoints supplier +// * @param controllerEndpointsSupplier the controller endpoints supplier +// * @param endpointMediaTypes the endpoint media types +// * @param corsProperties the cors properties +// * @param webEndpointProperties the web endpoint properties +// * @param environment the environment +// * @return the web mvc endpoint handler mapping +// */ +// @Bean +// public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping( +// WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, +// ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, +// CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, +// Environment environment) { +// List> allEndpoints = new ArrayList<>(); +// Collection webEndpoints = webEndpointsSupplier.getEndpoints(); +// allEndpoints.addAll(webEndpoints); +// allEndpoints.addAll(servletEndpointsSupplier.getEndpoints()); +// allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints()); +// String basePath = webEndpointProperties.getBasePath(); +// EndpointMapping endpointMapping = new EndpointMapping(basePath); +// boolean shouldRegisterLinksMapping = shouldRegisterLinksMapping(webEndpointProperties, +// environment, basePath); +// return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, +// corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), +// shouldRegisterLinksMapping, null); +// } +// +// /** +// * shouldRegisterLinksMapping +// * +// * @param webEndpointProperties webEndpointProperties +// * @param environment environment +// * @param basePath / +// * @return boolean +// */ +// private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, +// Environment environment, String basePath) { +// return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) +// || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT)); +// } +} diff --git a/library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/config/DTKnife4jPropertiesAutoConfig.java b/library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/config/DTKnife4jPropertiesAutoConfig.java new file mode 100644 index 0000000..6b275c0 --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/config/DTKnife4jPropertiesAutoConfig.java @@ -0,0 +1,27 @@ +package com.zhangy.skyeye.knife4j.config; + +import com.zhangy.skyeye.knife4j.props.Knife4jProperties; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 数据库连接和DAO框架的配置 + */ +@Configuration +@AutoConfigureBefore(Knife4jProperties.class) +public class DTKnife4jPropertiesAutoConfig { + + /** + * Knife4j + */ + @Bean + @ConfigurationProperties(prefix = "tiamo.knife4j") + @ConditionalOnMissingBean(Knife4jProperties.class) + public Knife4jProperties druidProperties() { + return new Knife4jProperties(); + } + +} diff --git a/library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/props/Knife4jProperties.java b/library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/props/Knife4jProperties.java new file mode 100644 index 0000000..0961191 --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/src/main/java/com/zhangy/skyeye/knife4j/props/Knife4jProperties.java @@ -0,0 +1,24 @@ +package com.zhangy.skyeye.knife4j.props; + +import lombok.Data; + +/** + * knife4j配置配置信息 + */ +@Data +public class Knife4jProperties { + + /** + * Controller包根路径 + */ + private String basePackage; + + private String title; + + private String description; + + private String version; + + private String host; + +} diff --git a/library/skyeye-dev/skyeye-knife4j/src/main/resources/META-INF/spring.factories b/library/skyeye-dev/skyeye-knife4j/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..f0452cf --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.tiamo.dt.dev.knife4j.config.DTKnife4jPropertiesAutoConfig,\ + com.tiamo.dt.dev.knife4j.config.DTKnife4jConfig diff --git a/library/skyeye-dev/skyeye-knife4j/src/main/resources/bootstrap.yml b/library/skyeye-dev/skyeye-knife4j/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..1b64ce0 --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/src/main/resources/bootstrap.yml @@ -0,0 +1,2 @@ +knife4j: + enable: true \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-knife4j/target/classes/META-INF/spring.factories b/library/skyeye-dev/skyeye-knife4j/target/classes/META-INF/spring.factories new file mode 100644 index 0000000..f0452cf --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/target/classes/META-INF/spring.factories @@ -0,0 +1,3 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.tiamo.dt.dev.knife4j.config.DTKnife4jPropertiesAutoConfig,\ + com.tiamo.dt.dev.knife4j.config.DTKnife4jConfig diff --git a/library/skyeye-dev/skyeye-knife4j/target/classes/bootstrap.yml b/library/skyeye-dev/skyeye-knife4j/target/classes/bootstrap.yml new file mode 100644 index 0000000..1b64ce0 --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/target/classes/bootstrap.yml @@ -0,0 +1,2 @@ +knife4j: + enable: true \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-knife4j/target/classes/com/zhangy/skyeye/knife4j/config/DTKnife4jConfig.class b/library/skyeye-dev/skyeye-knife4j/target/classes/com/zhangy/skyeye/knife4j/config/DTKnife4jConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..907607691e0ce3736b77a7cb0524f49e16086ec6 GIT binary patch literal 3083 zcmbVOc~{g{6#s=SFr+GoQfpPP3tJ(AKv9IsCQ?x-gHWoKW-@Pv$IK+-OETkVt6gmS zb=sbu;3?B-$1sCilAV>0+mfA&;d9)HVIFs5xQ7KvEy~9iDwbks!kCnbOKMqC_a(Jb zk5zeoDc`I~>MIow>hZ81U&nABkL0U$`S?bKp(3H6DP!>z8{AwJcAg2BGe^PIdDG76 zPd5xJUDBOQiItchis^ZhbM!m=l|~huTk)EHbZt@6jU5Gj!gK8+7c5C;>uzw1yWpOOLK~9+BP%HB{RK;hE85x_Qc&A^dx12 zI)*t#Ar2joKnF~xaX{tt)S;9>`WB6$@EZ|5X9oPCroyW z%e1!aOHALUQ7{w?M_@V-RXLrW2s(j`>;G4AE|<53OyJF96mPeSWee?;aw@uVMI)VN zVqi}u9eu`>Nt7OEXNZ8yHe>Iyi6c zGuwfe8h*wv692G*E73cKhU1WtRB%f6o}Q((q%R~knRMA32`qF{8kI48bcFi8DSW$K(;uDFh`mkl(#*YWJCw^7+7i1N zj=OSMQ_wXV!PnW&gCE}xWu3#aLGdPzT1&xQ@!CqI4HXYGZ4ve~p*unFCk=-!8fL~w zQ-w#Oin=owOYE^nyY;qVC9_OaOwu*cnAmHGihUp(VS+rDXZ4h4neuwm7wMwnrr|Pz zGZy8&{QeE`P_n662+4ZrJIc|q5`Spk`l5jDq-oJ`H})i_+OSFr+A2K~g^ad9o)jsD z+Q5>6daBSecjaY53nDmY4o&SF5m6xWK6}0R)66ji&&x_s1(SQZCYOnvvyh6HhwHw` z(&a{IR%km0;%cEnT{{HP!SWw`6AU=*tMUST_~ro*m*r@51$PRtFI@Vg*iL^W>3*jl z-5qp(L{uG}AJbV)C*4r=>>^I5Q_9tLZ$bH;h$?i`QwjrT&_hqHEPzkYOPqo}QmP7+ zp9RK%p>0&H{ekK&)R384A9dY-LiJJaqrpe4%rw4&=Hs1LIN{@@k5j*qv9hzvs3-aY z8gY?aUZVe>ZG^v_oL@#iMKDO;c7Y6qKx9mVE*m!2qsGdX5yT964Dn?c z&Gp=~QzyH2KU*@f=T#an1rGvaJ$DOt-Z*PB>*W5xw6sw#Sp9Rk{~i5z7z84m?FCj~y4MseDHYO<2#T=68&7 zr$wGfJ`c}_Np03`G78~ThE|5^m|@;25u3HKI1GEU8wipo7caHax9ciDh3}GkBHGt4 zRg%ywW4h%d5vBB2kN!)z`dgFQK)z7^x$mC&U~7GGBp9AdWlvQ9l#@8q5{#80JvOHn zX1e}9_GCv$gdG_gD>vp)L6zab?46sj91L5tYl!tf_mpA556&Z6biUu|%fR6dO7yq# zzXIr?QKfHvJ}f literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-knife4j/target/classes/com/zhangy/skyeye/knife4j/props/Knife4jProperties.class b/library/skyeye-dev/skyeye-knife4j/target/classes/com/zhangy/skyeye/knife4j/props/Knife4jProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..5040e24641a59d9b316d046ac9cd40adabbc5472 GIT binary patch literal 3269 zcmb7F+in|G6kW%jo9(gdx=mU`+6D-aYfUdu>a>O4Tbi_?DS?(-C(bl>E_SddmC73u zLI_^q35gG&FGT_YsRRfW9*V>d^aJ2CC}r)Lv12!_zQr8 zs3!3krV}u6MZ{|&W<tJJCr=1sTW@R3%oH9Q65NTpiwjw!?khh`MCleIY-ZJDT4-HWTsvu^#0Gb?U# z6Sb1FG~?7OG7lFuuUu&;9GEE8mJ9Efx&N&~WAT=I%PlNcD>vMO3x$<>ZKYAT5X`1H zaqC{iZSa7ZdDlD99>(^;p{PJC@~#B2h{>t;aFSe@X+~sna?TGb)97;DGq};Sgqxjo zy>e}C%Befcu17}-7Hyl`5q56Jh4t+?3AQub_g0-H+IDPnX?DRadE-OZ6jZIVNTG^F zs(EF%&T~j22Re$n)mL?{C4E}6umK^Q1s*zT9eU_kvwaV(CP)W9TJwaj4mu+l=z>Xl z+GDp(IxAu2t&&qcEm1RJWv5XN+J-%Joy&IZpuUrEgPvA)#kE74VE)ly$>=DtAK81b% zyH{Y^(NB8%tPbDo6YM zv>fH_80~LM3>T84{b6c2F-Q9)IYf$kPhp5Hw7z%HUQE8Tvf@_f6vm?3f5VLk4?E5T zntY7_9WluxQA|?lkIbe&GNJy+oO0X(C26O8in9Vo#Ze!=3-zr}8=y4&MGH?8+W`U3 z;91U;B$u+&_2`O;^HVpQ5*Xmsl0X{TW`Z2%WG>$HW{g+PD-k1 zw%362sOd>0pSjL1YCE?y$C@Ht=Gmx&Vig5zdWf9?O#C-&UXnvBtR|m=psrW&faY19Tl#*|dQjh3j zeIApA9_UR%lcRMmg*2m$w$AKc4asIFd7U4j2u-XFChJzwIvO%f{9XqY$4#b6zLXO` zA$#>Mw&rqc*d~SNklP;Ml;EBK^WJUC^#(XCct?OUf_GA^A>aM|X#e0&ge6mW)o<9# F{{q6f9oPT> literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-knife4j/target/maven-archiver/pom.properties b/library/skyeye-dev/skyeye-knife4j/target/maven-archiver/pom.properties new file mode 100644 index 0000000..652427c --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=skyeye-knife4j +groupId=com.zhangy +version=1.0.0.RELEASE diff --git a/library/skyeye-dev/skyeye-knife4j/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/library/skyeye-dev/skyeye-knife4j/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..51fa8bc --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,3 @@ +com\zhangy\skyeye\knife4j\config\DTKnife4jPropertiesAutoConfig.class +com\zhangy\skyeye\knife4j\props\Knife4jProperties.class +com\zhangy\skyeye\knife4j\config\DTKnife4jConfig.class diff --git a/library/skyeye-dev/skyeye-knife4j/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/library/skyeye-dev/skyeye-knife4j/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..16eb8d3 --- /dev/null +++ b/library/skyeye-dev/skyeye-knife4j/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,3 @@ +D:\logisen\ddd\skyeye-dev\skyeye-knife4j\src\main\java\com\zhangy\skyeye\knife4j\config\DTKnife4jPropertiesAutoConfig.java +D:\logisen\ddd\skyeye-dev\skyeye-knife4j\src\main\java\com\zhangy\skyeye\knife4j\config\DTKnife4jConfig.java +D:\logisen\ddd\skyeye-dev\skyeye-knife4j\src\main\java\com\zhangy\skyeye\knife4j\props\Knife4jProperties.java diff --git a/library/skyeye-dev/skyeye-knife4j/target/skyeye-knife4j-1.0.0.RELEASE.jar b/library/skyeye-dev/skyeye-knife4j/target/skyeye-knife4j-1.0.0.RELEASE.jar new file mode 100644 index 0000000000000000000000000000000000000000..bf74c545594abc9ec4f5eb7f1ccde13fc3c03c5d GIT binary patch literal 6305 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 Kc%FLi+y4Rbb+5w! literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-quartz/pom.xml b/library/skyeye-dev/skyeye-quartz/pom.xml new file mode 100644 index 0000000..311f7e2 --- /dev/null +++ b/library/skyeye-dev/skyeye-quartz/pom.xml @@ -0,0 +1,50 @@ + + + + skyeye-dev + com.zhangy + 1.0.0.RELEASE + + 4.0.0 + + skyeye-quartz + skyeye Quartz lib + + + + + + + + + + + + + + + org.springframework.boot + spring-boot-starter-quartz + + + + + + org.projectlombok + lombok + + + + \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/config/QuartzConfig.java b/library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/config/QuartzConfig.java new file mode 100644 index 0000000..4bee559 --- /dev/null +++ b/library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/config/QuartzConfig.java @@ -0,0 +1,98 @@ +package com.zhangy.skyeye.quartz.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.quartz.QuartzProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.quartz.SchedulerFactoryBean; + +import javax.sql.DataSource; +import java.util.Map; +import java.util.Properties; + +/** + * 定时任务配置 + */ +@Configuration +@Slf4j +public class QuartzConfig { + + @Value("${spring.application.name}") + private String applicationName; + + @Value("${spring.quartz.overwrite-existing-jobs:true}") + private boolean overwriteExistingJobs; + + @Value("${spring.quartz.auto-startup:true}") + private boolean autoStartup; + + @Bean + public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource, QuartzProperties properties) { + log.info("init quartz properties start...."); + /*log.info("startup:{},{},{}", properties.getStartupDelay(), properties.getStartupDelay().isNegative(), properties.getStartupDelay().isZero());*/ + SchedulerFactoryBean factory = new SchedulerFactoryBean(); + factory.setDataSource(dataSource); + + // quartz参数 + Properties prop = initQuartzProperties(properties.getProperties()); + factory.setQuartzProperties(prop); + + if (properties.getSchedulerName() == null) { + properties.setSchedulerName("DTScheduler(" + applicationName + ")"); + } + + // 可选,QuartzScheduler + // 启ob,这样动时更新己存在的J就不用每次修改targetObject后删除qrtz_job_details表对应记录了 + factory.setOverwriteExistingJobs(overwriteExistingJobs); + // 设置自动启动,默认为true + factory.setAutoStartup(autoStartup); +/* + factory.setSchedulerName("DTScheduler(" + applicationName + ")"); + // 延时启动 + factory.setStartupDelay(1); + factory.setApplicationContextSchedulerContextKey("applicationContextKey"); + // 可选,QuartzScheduler + // 启ob,这样动时更新己存在的J就不用每次修改targetObject后删除qrtz_job_details表对应记录了 + factory.setOverwriteExistingJobs(true); + // 设置自动启动,默认为true + factory.setAutoStartup(true); +*/ + return factory; + } + + private Properties initQuartzProperties(Map properties) { + Properties initProp = new Properties(); + initProp.put("org.quartz.scheduler.instanceName", "DTScheduler(" + applicationName + ")"); + initProp.put("org.quartz.scheduler.instanceId", "AUTO"); + // 线程池配置 + initProp.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); + initProp.put("org.quartz.threadPool.threadCount", "20"); + initProp.put("org.quartz.threadPool.threadPriority", "5"); + //initProp.put("org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread:", "true"); + // JobStore配置 +// initProp.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX"); + // 集群配置 + initProp.put("org.quartz.jobStore.isClustered", "true"); + initProp.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); + initProp.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1"); + initProp.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); + + // sqlserver 启用 + // initProp.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); + initProp.put("org.quartz.jobStore.misfireThreshold", "12000"); + initProp.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); + //判断其他属性 + if (properties.isEmpty()) { + return initProp; + } + //如果本地或nacos配置文件上有值,覆盖原有值 + initProp.forEach((k, v) -> { + if (properties.containsKey(k)) { + //log.info("该key:{},有值:{}",k,properties.get(k)); + initProp.put(k, properties.get(k)); + } + }); + return initProp; + } +} diff --git a/library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/util/CronUtils.java b/library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/util/CronUtils.java new file mode 100644 index 0000000..9c0ceff --- /dev/null +++ b/library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/util/CronUtils.java @@ -0,0 +1,73 @@ +package com.zhangy.skyeye.quartz.util; + +import org.quartz.CronExpression; +import org.quartz.TriggerUtils; +import org.quartz.impl.triggers.CronTriggerImpl; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * cron表达式工具类 + */ +public class CronUtils { + /** + * 返回一个布尔值代表一个给定的Cron表达式的有效性 + * + * @param cronExpression Cron表达式 + * @return boolean 表达式是否有效 + */ + public static boolean isValid(String cronExpression) { + return CronExpression.isValidExpression(cronExpression); + } + + /** + * 返回一个字符串值,表示该消息无效Cron表达式给出有效性 + * + * @param cronExpression Cron表达式 + * @return String 无效时返回表达式错误描述,如果有效返回null + */ + public static String getInvalidMessage(String cronExpression) { + try { + new CronExpression(cronExpression); + return null; + } catch (ParseException pe) { + return pe.getMessage(); + } + } + + /** + * 返回下一个执行时间根据给定的Cron表达式 + * + * @param cronExpression Cron表达式 + * @return Date 下次Cron表达式执行时间 + */ + public static Date getNextExecution(String cronExpression) { + try { + CronExpression cron = new CronExpression(cronExpression); + return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis())); + } catch (ParseException e) { + throw new IllegalArgumentException(e.getMessage()); + } + } + + /** + * 通过表达式获取近10次的执行时间 + * + * @param cron 表达式 + * @return 时间列表 + */ + public static List getRecentTriggerTime(String cron) { + List list = new ArrayList<>(); + try { + CronTriggerImpl cronTriggerImpl = new CronTriggerImpl(); + cronTriggerImpl.setCronExpression(cron); + List dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, 10); + } catch (ParseException e) { + return null; + } + return list; + } +} diff --git a/library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/util/ScheduleUtils.java b/library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/util/ScheduleUtils.java new file mode 100644 index 0000000..fb487c1 --- /dev/null +++ b/library/skyeye-dev/skyeye-quartz/src/main/java/com/zhangy/skyeye/quartz/util/ScheduleUtils.java @@ -0,0 +1,173 @@ +package com.zhangy.skyeye.quartz.util; + +import org.quartz.*; + +import java.util.Date; +import java.util.Map; + +/** + * 定时任务工具类 + */ +public class ScheduleUtils { + + private static final String TASK_CLASS_NAME = "DT_TASK_"; + + /** + * 构建任务触发对象 + */ + public static TriggerKey getTriggerKey(String jobId, String jobGroup) { + return TriggerKey.triggerKey(TASK_CLASS_NAME + jobId, jobGroup); + } + + /** + * 构建任务键对象 + */ + public static JobKey getJobKey(String jobId, String jobGroup) { + return JobKey.jobKey(TASK_CLASS_NAME + jobId, jobGroup); + } + + /** + * 创建定时任务 + * @param scheduler scheduler对象 + * @param jobClass job class + * @param jobId jobId + * @param jobGroup job组 + * @param cronExpression cron表达式 + * @throws SchedulerException + */ + public static void createScheduleJob(Scheduler scheduler, Class jobClass, String jobId, String jobGroup, String cronExpression) throws SchedulerException { + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(getJobKey(jobId, jobGroup)).build(); + + // 表达式调度构建器 + CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); + + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(jobId, jobGroup)) + .withSchedule(cronScheduleBuilder).build(); + + // 放入参数,运行时的方法可以获取 + /*jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job);*/ + + // 判断是否存在 + if (scheduler.checkExists(getJobKey(jobId, jobGroup))) { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.deleteJob(getJobKey(jobId, jobGroup)); + } + + scheduler.scheduleJob(jobDetail, trigger); + + } + + /** + * 创建定时任务 + * @param scheduler scheduler对象 + * @param jobClass job class + * @param jobId jobId + * @param jobGroup job组 + * @param startDate 开始执行时间,为null时立即执行 + * @param intervalSeconds 间隔时间,单位秒,为null时只执行一次 + * @param repeatCount 重复次数,为null时一直重复 + * @param dataMap 参数map + * @throws SchedulerException + */ + public static void createScheduleJob(Scheduler scheduler, Class jobClass, String jobId, String jobGroup, Date startDate, Integer intervalSeconds, Integer repeatCount, Map dataMap) throws SchedulerException { + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(getJobKey(jobId, jobGroup)).build(); + + SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule(); + //每隔多少秒执行一次 + simpleScheduleBuilder.withIntervalInSeconds(intervalSeconds); + + if(repeatCount != null){ + //重复固定次数 + simpleScheduleBuilder.withRepeatCount(repeatCount); + }else{ + //一直重复 + simpleScheduleBuilder.repeatForever(); + } + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity(getTriggerKey(jobId, jobGroup)) + .startAt(startDate == null ? new Date() : startDate) //开始执行时间,为空时立即触发 + .withSchedule(simpleScheduleBuilder) + .build(); + + + // 放入参数,运行时的方法可以获取 + if(dataMap != null) { + jobDetail.getJobDataMap().putAll(dataMap); + } + + // 判断是否存在 + if (scheduler.checkExists(getJobKey(jobId, jobGroup))) { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.deleteJob(getJobKey(jobId, jobGroup)); + } + + scheduler.scheduleJob(jobDetail, trigger); + } + + /** + * 删除定时任务 + * @param scheduler scheduler对象 + * @param jobId jobId + * @param jobGroup job组 + * @throws SchedulerException + */ + public static void deleteScheduleJob(Scheduler scheduler, String jobId, String jobGroup) throws SchedulerException { + // 判断是否存在 + if (scheduler.checkExists(getJobKey(jobId, jobGroup))) { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.deleteJob(getJobKey(jobId, jobGroup)); + } + } + + /** + * 暂停定时任务 + * @param scheduler scheduler对象 + * @param jobId jobId + * @param jobGroup job组 + * @throws SchedulerException + */ + public static void pauseScheduleJob(Scheduler scheduler, String jobId, String jobGroup) throws SchedulerException { + // 判断是否存在 + if (scheduler.checkExists(getJobKey(jobId, jobGroup))) { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.pauseJob(getJobKey(jobId, jobGroup)); + } + } + + /** + * 继续定时任务 + * @param scheduler scheduler对象 + * @param jobId jobId + * @param jobGroup job组 + * @throws SchedulerException + */ + public static void resumeScheduleJob(Scheduler scheduler, String jobId, String jobGroup) throws SchedulerException { + // 判断是否存在 + if (scheduler.checkExists(getJobKey(jobId, jobGroup))) { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.resumeJob(getJobKey(jobId, jobGroup)); + } + } + + /** + * 更新jobDetail中的参数Map + * @param scheduler scheduler对象 + * @param jobId jobId + * @param jobGroup job组 + * @throws SchedulerException + */ + public static void putDataMap(Scheduler scheduler, String jobId, String jobGroup, String key, Object value) throws SchedulerException { + // 判断是否存在 + JobDetail jobDetail = scheduler.getJobDetail(getJobKey(jobId, jobGroup)); + + if(jobDetail != null){ + jobDetail.getJobDataMap().put(key, value); + scheduler.addJob(jobDetail, true, true); + } + } + +} \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-quartz/src/main/resources/META-INF/spring.factories b/library/skyeye-dev/skyeye-quartz/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..c1b8b3f --- /dev/null +++ b/library/skyeye-dev/skyeye-quartz/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.tiamo.dt.dev.quartz.config.QuartzConfig diff --git a/library/skyeye-dev/skyeye-quartz/target/classes/META-INF/spring.factories b/library/skyeye-dev/skyeye-quartz/target/classes/META-INF/spring.factories new file mode 100644 index 0000000..c1b8b3f --- /dev/null +++ b/library/skyeye-dev/skyeye-quartz/target/classes/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.tiamo.dt.dev.quartz.config.QuartzConfig diff --git a/library/skyeye-dev/skyeye-quartz/target/classes/com/zhangy/skyeye/quartz/config/QuartzConfig.class b/library/skyeye-dev/skyeye-quartz/target/classes/com/zhangy/skyeye/quartz/config/QuartzConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..87c3bdd771e690c5d72b332aa58e482612c1ceb1 GIT binary patch literal 4783 zcmb7IiC-1h75?r6eB)zO@-%U45;Q~s-+QA*Z7ReDP#Y6)1F<2sW_S!RGH>QNGY>(V zrc1gvwM)9h+PzKp#%vh1P4}iv(|!39`d765^}BP2#{e(>DEyeY%em)#XSwH`;kEx> ze+9rU{4;|+u$OamM#DrS9F)>8z zoSc^w7v##jKp?!^bpy zT*H$ZKB3{FhEHnvl!i}h_>6|9G<>!ZpTp;~M1NWG`I4M|Sw6m!##b}=8or*!Hw5Y& zZ%iQD>-l3w;Ee7%WAu7sW0v0`u*xi#9lL0Tw&xx;OO_-%V@{feW4dETf9Tup7|GTj zuehOIvIgzI9(JrQ*Y(2aOdzmJ@hwZzQJ*}{dH#ekY?*FgjGD#J^QR57dcYVoor*=4 z4U=*pu%YEb5S=X~pcGv4c}(C|Z_@J5`F3a>n6iVA5+3x1DN_syAE!O1jbLKhnzjrD*eH7Ls6A#J zi{SS}6B=esP#m{LDvsqJRMzXJDFvQtjT|#&1ZN#%zZshSUd1n39ks3Rd7&XSQX(pT zRi+Yl)c4AkAKF&X(N>c|jDZH91>0W(713r!s!#-Os|}G<<*Gn|`)f)ZUOHrfbR1X$ zoi&*)8GgM4HVfRSgtlWOY$LFO0aKjlGt044oBFJ9+#5M+%0Le-pAOE~L_oub))bvE z7x~hU(!VmM7P>)TtMaeHK!J2jbP*S0T9w$4gaVpmDRE0pyksa&muJIq_xw|xYMQ*} zi&yrM_ws&w%r!%XkU-x8j7wzlhML^&n5E$nv!#|rTDA-HE|Axe&>`Wb1n?unXRKlv z(?!a~EAsw|iTUX*-r~k2ZP;0K;@h54SL>iH@AfUp>sgR45!ka-m#a%%@uOVXp<_P| z=y)^k6=;^Sn$Jd8zgY&Mx{l3J1}g9;jc@As7M>B<8|Cc<`E_X#uH)PIP8#3U@jZNB z$J_C+jvwHMI(~#_1=cRi^xYNP8L@l;eg8o9zPIYQg6DL+1$$|!HXYC7SsgFn869uM z{W@O6OFFvcXa+AaylX|Rz$PkDQ0f+9?3Q1!UFz!=Em?YWT*b=*cixon&Q+;+YYWr3&;5}fvBP`Hi*8s~kA?*;@Uh7aebtv$hC@y=gNz3WCSiBtj zyeeo(g{$C7N{F;zFzz{2rD4a;2v*W(Rq{}>I_g`a_7o|P9UmAvoyIjC*KtFjshjCO z2z|4x5^At&8GhV^pYZjHj-TRZI)08{==ddmrQ_H5jX>`IDWhq;s^ho#9R;BUvOKOUfd{b%!+ckN(f9q zt;zhU68>reT3kY6Sc}S-gw;f@)hn$!y*0Cplj;gAV;^R@^lrYEH4?d2b%$}zkX1;w zSF#JFG~!zzZ5@}6)b8f$TZbgXm89rO_GoqG3UA=ONf>XO-xI*9d40uPE~4GoHrT;| zQdwSAHgrQ7yoTS;72agESj?<#PV_sK~sKjTLWWcU(t*3v8)jyBJVX zU6z7{cOvdRS^vpMeJ%*xon+S|6YXsKnEa|p;}1Iih`;K16fBmT=Wd|wPI?oT(Hm8L zUVO9K#x=5=nw_Qbcbd7^^Co1Yt{-w;%a4Rv%LUBp(nsKqo6}(v<8u!`1?#avwiq0x zWX*;^2gi+kck=JP0QvVf$GRfGAw0;Lz(eRoU3B#m_bg&Syi_$rni&TpGRx;-}o?JAb< zt{T??Z`=6)K_vH1 zaZg%UgZMWt&YHJDM5cWwH&Qs=l#vOCgfc|W5^z1=>)LbIuro!SnzrTS_?{G1+IUh% ztqPBo5tK(59;X-@rz3dn>TCpxg!HBaB}0B4hEb$6IU3=pE`n7Dv6k4Z>J8Zx5iSanD2xzBZ7N_oRVu zOtj*@fd?kO#gqvH59MUqz>JBrqA_ct1NRKfnMjIx5|2zg#=LOgyh(N)mFeCdsN&(YQ{5cai`f}G?pR-yL! z+DV|d1B;%0J-eOPm4GOSykj}A^RIJuB}zWUaEsKO-PU=gDM+uL9xWtd#tt++#U(?9 z3)!+)I3h|oswYh)MLfL>@l5A+DOmBGLV?9_iWGk=OxE!OdPqu`$Z)<`aTUfIBRUjW zq+R^_VT~Ge1*J=a6NQ1zJ4 z-H*^FVNYPf7y_&!po+}L3n{?iFb-{M0yh63e+8sBMLQmb#l;_zyl9@uf0p5RB zC4m=MGO(V&OMI_z{eO-fi&zJ@wDC&krLJ{RZTOn9tO4tahPB?9r;IIc4wJolJa)b5 z(OT&nhr2oEjvweEhc;jJJZW%tcFu8Kxlec%EwKO63vwg%MPnA;8lpAzBgdV5M@@5F zluQ(|E}(Z`2hEeEFwnqu)bXowIT0TDtW*Q`lcyyTMUT^sBjZ;bYpJ5W@CvL=PNwmE z+IDqm)Alm+jaY=s3@)RG7r6Xd!K~2F{{ikSzLiMF_Mv{`B8GGPZwrM<404^QDd0RV zaMzAcaFJTg#s`S~`kwJXlkp{d%JU&UtqPa;YA2-O$dBenBSu-*AzIc6B>r6OX2oJ&4-iW;qMJl?i_+Ufb0kNxCL~QYptzqtg2mGHx3J+QLX`atfV}|t4lC4J})-md*_@({~H%P^0K7utQ zh4_U>@oV98M!3nHv_wsEi!0%{2eE(XHfG?qK>`$WiX9Q2=J^+VVz^7~FT>SW{{jer B{#O71 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-quartz/target/classes/com/zhangy/skyeye/quartz/util/ScheduleUtils.class b/library/skyeye-dev/skyeye-quartz/target/classes/com/zhangy/skyeye/quartz/util/ScheduleUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..c067d4b53f95f1332c8625a6ce5ce64a250af866 GIT binary patch literal 5733 zcmb_giGLJl8GdH7o7vq=5)vTICW3&_<{%APs*q4Hgir&4BAY{?ElhUDWRuPAc6JsB zR;#sIv09I6ZR33))_SxaODJ0LqFV93{+U{RzHg45J@Wg7Uxmy!Gw=6)-}}7xH~Z@A zFTD(4C;lD99muN4MG+A9hr%$$V_pna6a}1(;vCLLv4{&%1o1xc^spG-AH^YjAd36( zh?w}Gc>0hS9u>ofRXo;!2k;Rwd{hjNM{x=ti{cC}il>i@;R!K(Ld7Se*nq59_hbV` z@u?_2jn9ZhpB2MXV)&e(eO^30t>Oy`n#YIYhffcW4aMW9j}9FfQP4Uzr=QjP(|Ts6 zKW>?+%*>#I#^G!xZ|NCpQco8Q1@(JUnUu9xL0wn(q=MjZHc4vpSSn*2Ei6nM=D0qc zCZ%;Oo6ysfx|tI14l!uWrt%8<#uC|u{tL4dwAi1YUo;kt{)Y;>XJTYq| z3u$A5FL{As#<0fC)Xa=w9yS&g+|yN!w3^aAmNjSGeM`%^UuZ5nJ(^Sy=KWqXTgWL` zbHuP_v&mz+sV^9oVG?D8QV(UPrNrI0F40~}X)OuU&@IDNigX2My8PhWDRa=L#c*2B z=lul7B|erFDZ(?6ykkXEL0fHUwgsdh!t`xy%T~~oFteGF^EuPV=Tq4XH>Jf67?z$& zS8PhHY&sQQD^|HW?JuO#NrMWA~#UEIUIXAerRw}Tk z*S`x94({dp#<-;?=8xz(8IvlWQSq#T=*anmk+Y~|Ud0j>ji+WZx>Yb4%K23~tCl<; zrWL(a%_IEx)GDRkLWs!ZI>1=;uNlo)25r7FNv@*32JNV_n5SY7=8O%zv@7dCio2O- z^>o}wWHU)-(ORE&t|$c!rjcV(3}*`&i+)e)mQD$xj>r<^iBzyYpIXSJz3lPAX^Y>t z@mf6e^*TRODTMAWm$JtPvD!)ZP0tw#i=m_9iz>dP;>#+&qT;J6zNX^qD!!rM<|Q_Tr2<#oyl5yPMyzOV{toCcu{6Z91v6nBOv$$9sy-ol z)14w(HS}V;g4-&arx&Wdx6tiak`IiZmaSRCH}NeEm+);BmoMZ;TO2B;g|T8hF{}18h$H=8@SGPP)bfw0W`dV-)Zk zf5qQ4{2l+$@K5}U0Z=lJZCPfg50BSB6m0a7YxD^P8+;6|J4~;Bv(xzJYgGmXF&~R# z2G3o7Sl;$5O(g}Kj_Fg$jxnZAiOI=KHk^{xWQ}XBmd#_8p34~-o=N&@oHV+tqS*n< z5*N0zuJCnT)r{m=UoB6bX`+_zNY&zFqAw&v{hagQ-+_~!rRp=rIle3C@q@Mx4`rvX z(jwx~&ZVr`(WH^FQWkS>ds&u~ld=a_ULBei2MV4LsBAfA@BE?p&mRhQ`oXy+$-lNn zkP&8-$~mFIkSmu~9x`O63?CS0x=N9%WzrOGj49wL)3=LDcYR%^Z`D?9H4ze81CN1; z`H}Ofyv26hRwlx=_DLRi?4mE-*^qaRj`D3!nE~VHJ=Ajr%8QcaPLB1G*uZH(vl*}h zZ{=G=^gnJS7LV~B;Jy7C0w=DZt~FFdeGji9)ZS%;U*KE-rTx~*{o3p`{KD_%JXhmx z3GnTFjs!>s2|^G%Fj-e2C{ih?YB3fcpv$cq|*RgIu?UBq^u|9xj(d@pp1u)eU3&qr{xUCLT!oERik1bM4 z7h33wc2c$x@D8fImr5TZnhETYDjc`bV36ES3L<^yco*^6+0(n7DdlB} z^Cq%Hq(+@gjV8%@o&kA*wd-MN+fDXz&$gY?qC($JY0-exw+>221>nXy3D}L<2;S>~ zN^wsCs-p~4ll!(MfJ#h{6VpY+@PrRjhli=d!_-lZsnUp5m}XXs=`Gcmo+hSeh-vBn zjA@q9Z9DH0qg2FXuWOmD0k9l~ZlE(3l9|^hvT~a!biv?N+#d89u1yB^B{bqPTKS!| z3D2<+JukuTwYT*Q*y|av*D)Z4GIqM9n|d+NWD9bqjZSS7RVxhTHS{oaEBx-%E7$LH OWS!@wFjqyz%KQ($&cd$% literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-quartz/target/maven-archiver/pom.properties b/library/skyeye-dev/skyeye-quartz/target/maven-archiver/pom.properties new file mode 100644 index 0000000..c7bd980 --- /dev/null +++ b/library/skyeye-dev/skyeye-quartz/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=skyeye-quartz +groupId=com.zhangy +version=1.0.0.RELEASE diff --git a/library/skyeye-dev/skyeye-quartz/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/library/skyeye-dev/skyeye-quartz/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..967ffe0 --- /dev/null +++ b/library/skyeye-dev/skyeye-quartz/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,3 @@ +com\zhangy\skyeye\quartz\util\ScheduleUtils.class +com\zhangy\skyeye\quartz\util\CronUtils.class +com\zhangy\skyeye\quartz\config\QuartzConfig.class diff --git a/library/skyeye-dev/skyeye-quartz/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/library/skyeye-dev/skyeye-quartz/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..93c2952 --- /dev/null +++ b/library/skyeye-dev/skyeye-quartz/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,3 @@ +D:\logisen\ddd\skyeye-dev\skyeye-quartz\src\main\java\com\zhangy\skyeye\quartz\config\QuartzConfig.java +D:\logisen\ddd\skyeye-dev\skyeye-quartz\src\main\java\com\zhangy\skyeye\quartz\util\ScheduleUtils.java +D:\logisen\ddd\skyeye-dev\skyeye-quartz\src\main\java\com\zhangy\skyeye\quartz\util\CronUtils.java diff --git a/library/skyeye-dev/skyeye-quartz/target/skyeye-quartz-1.0.0.RELEASE.jar b/library/skyeye-dev/skyeye-quartz/target/skyeye-quartz-1.0.0.RELEASE.jar new file mode 100644 index 0000000000000000000000000000000000000000..161ce73c2e13327c45e015b17235a25dd89f926e GIT binary patch literal 8473 zcmb7J1zc0@+eQQ>M)!~qL}D}ujFj$BN$D8f8zm_*kw!wgM7lv*l2!Nr8HJw*PUiae0N{xDM(SCN;IzNgNvECUHI$7^&Zj})<%ixHKQQj(UL913B};o^YV z8v~+Zdib7GJ@J*ILJr1d*nO0Uf=NeLJ^o106>fD?N2kR*kE@7TF-mReyw5Y z!}x6m1Wr*ey8LZq>%WW)4cTQ=2fMF>`n?7AKNb%xjqNQw{$fb@Z$qe!2gC#N7ki4| z+B>-zJHsCQ1xEWfn5l!kxs}CV(A0lJyTGh$f5QIi1$ap8cQ3Frc7@pg#TfYC#>jbQ z|F2p6^&(7v#eJJpwx1^HnSB`b6?>OS`dLjQ`n#dx9)nq89U zh}*r>vdGE3*_(lw`^P;JNM(l&;3odyojZ^@{(gaZDirZ4shIVz15mKcEXd3@n$Fd#M$+6|?Pwsj6_~7l@~D6cvc4coZBMsc@7K z7^(872lC1zV5GyTc76=r(0qd|+s`VQF3;QD$x!HSo>(koU`L(I8CV=o*-yg5q1 z8+e?tnhcxJGeMbp3j?Yb+!XeQ+`N``DVdD7v}*dC*m}`t8msg2;pXOJfi~;r@X4ge zC1tI_Pt3E!7B~opr1sq;nwbuHF>5lp4i zz=Q!$-L&wYa!+J-iW%@ond7sGp2@YFU6NF+Um%>29A{lM8wHd|B0)>SwdkuCsq1@q&=Od>IO`iyJZFUp|_Vj#l=r&u_Sj*(}#dEZLtCM;A&d;}R3O zQd#*nZ43hkZ#vst$*P)tIj9}zrown{;h8+BFfEZ@_^F14aUuuwjaL3mHlAXOv1bU| zp=5l{nbgH=s!KTbc&8t5@M8fh^oVxW`~hZ3k?gwrEj=^x2+FV~NL|5pmsWI*qM$c~ zs5)+;x)7RML%;3kk5i>dtc0d5Jr2LeaF5&`k1x8`nIQ;(hbZUL=#x4&q|dsvYa#`Z%DIkExvJT&Mi84V8_SL$7HuUe-r^$(7(_QkdK;ZW2F*wmZJ9(JXK{<1u{Y95qm)_<`acbXAnRgO1;& z%SEJabf}_|xmW}v`oJDOtf1tN$1>_+=9qoNVGu1M^r#YDwF5ObbVMT1AkNlv%9o#-C0IQx4JaOQ-dO0bP0y76V7(Ji3E6k4a;IQY`66+Y6Xr0d z1Ha5qGsoQ&z7@EwPw}qx5Yk8$*>!ZuhiO69Jt8yzQ^}Q2_0jWu0bZ6BFg>XbX}u>q zq}OP(1uCYzRxb z5SzwUb&1=E+3qROBG zOqfCwq!SLaUX?#hMI6jG+jzcI9(&{zW6w_-*irvnVgO%5u1d?~aTR#IYBS?Gee
  • e0r_OpgVj>oDZt&vZ;nm-yVb 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 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-redis/pom.xml b/library/skyeye-dev/skyeye-redis/pom.xml new file mode 100644 index 0000000..a9afeb2 --- /dev/null +++ b/library/skyeye-dev/skyeye-redis/pom.xml @@ -0,0 +1,32 @@ + + + + + skyeye-dev + com.zhangy + 1.0.0.RELEASE + + 4.0.0 + + skyeye-redis + skyeye Redis lib + + + + + + org.projectlombok + lombok + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-redis/src/.DS_Store b/library/skyeye-dev/skyeye-redis/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7ebb4f9d59f51f7e5136289f9a7f09d6022fdca7 GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1GcP+KU-vMVc4p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLGm z+SJr170|>Njfy`{MtwkyLeM7@C2C@PAV`!KF(y9o;vYVk7|)$MTUve|H3a4+_nv#s zJ?GAzGvB#)?p?+h+KT#W#u^x7GF47Bm6}@=KF;e+MG7RMtGC_(uSu z{0QI|>TA41G#1cgK*t585h@U-M1?7WBL;*y$zy?DGN9vv3Uh|w@PXjT2u>*QpHB0~ ze07GTpkW(EAdJAx5#Z@l&4yT(narMie$NeCrt2jVmmpPDPn%v-qtvK12hxL1IqhY= zqT7}&?BiUw<5;;$KbzZY8s&^umvU?`YuZM^H!yXBRQC6pw(gYMoT9C}zHM3zD2l9P zw1&~qHS1fNVr!e%jWxwaH#8@jVl5k*$Ho-7KE7(>p3D(z$aank7Z5B1Y~~FvotW&8 z<(5+7KB6jJ@#k{jkF3m4)tQmrzW#xI`!kwWbd5cRmG#V$(Vq1TH>1sV$-S+4$KF*i zO5|2=-m!{9HjT{5XRUmZl#N!)N}Ep#?R>$ptX+<4dZuId_j$%KkB{+*rVRBBxK6=K z`IGgTG{4ZQ<M!_YjD5q!5i$2)6vU&ZZ$&RgEyD!ex=G3Zc{oLM?>6$sq z=+C-&!`4mva8KFPy}<#BsO_0gm_|WS=AfzD&JGzDYa8Y-xPM_JB6P0XRA%Wb=FFo- z(;Ly^vMinvSsYhn?aY3ioa}ORKBMlBL?Vlq$?`rfPZbPmg;#cMmy2%vGyN^U=f^mnObBtEAQLU$*di>! z+SoRBkPWjDc7nac-ee!MGwduo&%R}s*cJ8*`<4C1erMO%->Ak6)L|i(U>O?m5Sp=1qB1$M@1W(}^Jd5XW0x#lKyoOVF18?Jfe1H$}DL%&+IFB!J z2|wZre!^A!iEH>vQlwgGp%jr8Nz0^0X}PpQ+9Yk3wn)3B0VyL53Lm6OsvVf{$?r%b zL?)IFO10qXPda_;REs{oW$U)>op)@i{V?U=Qsxd_{ZPE6q#&b*l zuTcIqyTHCDlwT#3|AQ*Xn1>jaB0;F$gd|$gjt)ZhF6>4c-8g^@4k1T4w_wA;Q4}zW zF+%w`p2l&U#PfIoFXI)$`YF6lNPh?K;yrwXGdPQL_{7KjH~0>h@$(HR?wX2X{4p8D zrF6lz9Q!cIDyW~Tephi-!kY$u{_nW`{r_F%bLdPMfiMD7BY^7mbbA}gZnx&~vv!Q? zA*#G^y>UT(6KbYh1Q0**havT2q{?lQ0UZ~VBvk(Qivao{zvZWPxc`Uy|2?$-{|ld_ BXvhEn literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-redis/src/main/.DS_Store b/library/skyeye-dev/skyeye-redis/src/main/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a46babd87e631fe6537231d2d329e08b124c501c GIT binary patch literal 8196 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 F{{Y6)Z9@P6 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/.DS_Store b/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..172f3ca64acd7c9b41db47edd3c604a0b0a8486e GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1G+P+KU-uq!K2p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLFv zZEEV13TonuM#Y~eqduTUA?TBd5;ZYC5G2Zr7!#j(@edzNjOWgsEtH=}4S~7Iz2}~D z&$)NbneW`Yca|}Rwvw@mu?EJNOqEkjrRFAukMnv%kwQr|QII{$+isrvXY#|gb%S;! zh$0Y0Ac{Z~fhYn|1a5~2(3#DPe2a5mj7Dt~fhYoZWd!*C5U0v%Dx?#F23rR;!4-fg zzXAk>`Wo*LjfXT9(g{IngbIWyQDKVkiUDCx@_4A13h9KP!ki(zd>~vI;SB}B>NI~m zP-jR98nsabq6pj=0iHe*Gnk(r@rJLxzk7Z%c>z*Y^|a|VHA;F4r$EOR8Q)umm>&smOH3=Ay8B$a)=mSeahZEndiyudai1{6hBvRcE~ z*y?pHP4P9&YsZ`7W9yrfP4SlX&Ew;WT%TCEVR!bhJ>j|M*xO?kJ)(+oa@O3~1C1-1*FBQz*wVG@{5{(2T2-x|(_6MYD{q_q zIj>+khUFaU8Lpo1cT$rkB*2;=z^w_z)X@{bRH;`ysZ&`R83hOt?N?*Yp8X{*rA=A_CvaEe|fG^yc z^ZXsdrZf3S>CLh{;0@-A=8h2pT*abOmV?(wa&FRLSiV~fqOpCEuJ`k)S`EWA$m#hF z^J?{s-Xm-0$VRiAvPBT5cOZ~1Cn^|Aq?U~Blz(twne289n&CC&Cv`V@4eQ6j;X zL1`9l8Pds{r&;W=&0Dr^>%48#?1x!AvF@#_pEEbUc-hL9haPR6gr7ib1)$dgKfwBw z3<jP+15m`AUsph(F|B5E}}Y31`=`+hYM)230n2zH6u7}KUxst9&@ zY(-3yC_@FCj5VuT73H52*sh7KP&LScS+8zTwQ9;l!ERI+sv1)S(-v!wX*{pw{|ez> zvvcfwLilAu_&=zEjJb$o36g~9jYy#t?dTv>@5C--(2f1b;vn*baT^X?96=Fd7$<~J z;3*u#b9f#v;AOl*I6r~c3FYtLUA%{na0;h!2A>3Y{|4XTB7VLO!Cg}kj6W&}E@z64 z?K+2uub_RZ>K)Bh3GW*C{lDYZ-~aFE7(~uR5xCnUfa>;4dmBaJR(l}7YsaY`q{<7| un-DZGp=Qd50OBYAFri7d+0pqQo&R^~`Ts9YCSYp- literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/.DS_Store b/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..93ea90789e2106f2f9779bb7d25ce7a0b2c4d39a GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1G+P+KU-vMVc4p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLGm z+SJr171YERjfy`{MtwkyLeM7@C2C@PAV`!KF(y9o;vYVk7|)$M+foXT8Uk~Zd(S=R zo^$V>GvB$l_m(k+wxYgvkL~SLtVS`%I&p(dtr;?PX2dDEJ1ZZjj1>Uenf{a+_1Mb=S8|ivdNEm5kOf zI=Xg4OH*uJ^ZK!-*yzUQL{qF~WAoUUBG<=PZ`zwVY7N=W3E=>OO@Ph5!J(6r-dJua zC0-+{(z#*b&E>!wS(&A(vm?EI{R8_CWHhbl8hZ^Z>zO5^J?j~6M!Ux)=eFe?dw0Po zkyE{S$0`olG%`1zwem$$Hd-w!Z9XBi^99GUb~~==nU3Ax=NZR6KE@}SGSoNVIt4G~ zPu6GB{6ediud!>G8@v0Af=g6UPS2SieV}nw^M*%~9oxG0T)an{TdS(|^Lk6BYvwGY zKkMcVTQ}_^J!Mn(1_vmfwr4(W8U;m}i>7WnJ7ip}ZCJ4IzD1FU(3!NU%+goPna7Hz zH=@O5S*#IR5?5sH%mJO8>~eHIqwbGHB1@Lb@_sH)6%1;HSdFY~B7-^$zEb_vX9vrc9xxI-?B^W3j2lq%6?T ztVar+=)z76AP*e|j=(|@C6qCOC-F3%!LvAt7x5}y!zsLhxA8tcz=!x0pW_Rh$CtQ- zA8`dg;VS;bHT)$hQmwQ|ib#v4*wccc*_ z!L~t(7Cie&r*EEU(Z{xK+rFdowoSAj=J3?Ix2}HP{MgbJt6Ls=v~>c20s3uX43N{gKR<$b1K*hIR7hR=lkOi|*-K1*Ol#7DhtS(kHrU<4j+8)(-X375* z#=mA4*!P6-tAz1?Pz4$D5yLVh2-BO9L@V0SLAc(HJxHS)2a&;HOk%i{ zF4&f1A0bHv@l%!WNUlnF)xhun9k+h}zaxDQoeComMnFUW)$Qr_HtOGM@8fsv7}dj6 xdEt8Fg8C-ZOnC?(e&Qd7)Q^!Ww@C(cTu_ow`QIM`rvITGp8w(bf7hM={{o({WcdI9 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/.DS_Store b/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b277365378cfd8bff1eaa72a0573d9f729c43d13 GIT binary patch literal 10244 zcmeHMU2GIp6u#fI&>2Qxs4ai8?8*vMC}AlDL=?7vk)M{oZRrm`Wp`(2CroF`&g_=j z)YK=Hs);We6@Q+L`hXgRpid@B)WrBekSH%=Onl^ zbI-Xm=j?ap%stB(Lt|dwz*vkiCR5{7yN9~lTzs9kX_pjm_##N3F_ZOWhTOr7DdLZ<`ga`QhAx4eUWI)FR^BW3;hNPfjA9^74z;qAru$j%W%waY=QF4C2m>IN8*GnX>LMkhtHM^ohsZcA9ruvC7S180yuknjG6po3@ej6-?bAkt3a^tvf@FPTtmCUpFNd z6h&5gwZ$VN8@JTg#x~V$9<7ayY^_Vw#_G4$jgBgEb$tD{gS{uM0oyqv%s}ueU~@~% z8ZWiUatlqOCQ+6u+H@_jNmk~l>fA_YS9j0hBfXlIca4LFmG;bn(VX@Sw^y6*l8L*r zj=eu;6v(vBtYhT|Y+6~6O*FZQ{1I1 zpD|D6O>bC>%d)sfWJO$&wev@GGP2Fl`Hs535{ax>Ez5^FzbR)>FW72iZ7nIJ+g&m_ zc+A8GMbX^$ll0RIRdv&5S<&5#R{q@$U3!6c~DZy*pa$BS5tC)bE!{8Rl+f8_f(o=gaKl^_#6 zPjC^IV2x}yJH`gtFdJttvNzaA>^!@`F0pUeRd${I%zk0NvftQE_7}=A2US>xl~|1$ zJcv4ML_Id639V?uUi2Uf9R~VfA&&xvFpMYg6rRR27{?2E1+U^PUdLN_5AWjxe1gyL zIWFM~T*VK#jvsLYf8ZwmloY8_S|&xL<V=D9E7z>Af9TPM2^b30 z7J)iB0DR0(i4-66J}ye}>PMowJla7)VVu4diXt?N0jX8+;FYg%>HF1qRGUR%Bc`j= zny5CLLPkv2M%P6(i6T`@6VWuG)Gx==gx3{osBzh#BI1ve0dGuDU!7!pb)ur0 ef5-m}_^)zXc>WL1|GXGp@_94q!{@F)|NjGYWQFAb literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/config/DTRedisTemplateConfiguration.java b/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/config/DTRedisTemplateConfiguration.java new file mode 100644 index 0000000..f54c567 --- /dev/null +++ b/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/config/DTRedisTemplateConfiguration.java @@ -0,0 +1,70 @@ +package com.zhangy.skyeye.redis.config; + +import com.zhangy.skyeye.redis.utils.RedisUtil; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.cache.RedisCacheWriter; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializer; + +import java.time.Duration; + +/** + * Redis 配置 + */ +@EnableCaching +@Configuration(proxyBeanMethods = false) +@AutoConfigureBefore(RedisAutoConfiguration.class) +public class DTRedisTemplateConfiguration { + + /** + * value 值 序列化 + * @return RedisSerializer + */ + @Bean + @ConditionalOnMissingBean(RedisSerializer.class) + public RedisSerializer redisSerializer() { + return new JdkSerializationRedisSerializer(); + } + + @Bean(name = "redisTemplate") + @ConditionalOnMissingBean(RedisTemplate.class) + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory, RedisSerializer redisSerializer) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + RedisKeySerializer redisKeySerializer = new RedisKeySerializer(); + // key 序列化 + redisTemplate.setKeySerializer(redisKeySerializer); + redisTemplate.setHashKeySerializer(redisKeySerializer); + // value 序列化 + redisTemplate.setValueSerializer(redisSerializer); + redisTemplate.setHashValueSerializer(redisSerializer); + redisTemplate.setConnectionFactory(redisConnectionFactory); + return redisTemplate; + } + + @Bean + public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { + RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() + .entryTtl(Duration.ofHours(1)); + return RedisCacheManager + .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)) + .cacheDefaults(redisCacheConfiguration).build(); + } + + @Bean(name = "redisUtil") + @ConditionalOnBean(RedisTemplate.class) + public RedisUtil redisUtils(RedisTemplate redisTemplate) { + return new RedisUtil(redisTemplate); + } + +} diff --git a/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/config/RedisKeySerializer.java b/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/config/RedisKeySerializer.java new file mode 100644 index 0000000..34dc23e --- /dev/null +++ b/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/config/RedisKeySerializer.java @@ -0,0 +1,55 @@ +package com.zhangy.skyeye.redis.config; + +import org.springframework.cache.interceptor.SimpleKey; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.support.DefaultConversionService; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.lang.Nullable; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Objects; + +/** + * 将redis key序列化为字符串 + * spring cache中的简单基本类型直接使用 StringRedisSerializer 会有问题 + */ +public class RedisKeySerializer implements RedisSerializer { + private final Charset charset; + private final ConversionService converter; + + public RedisKeySerializer() { + this(StandardCharsets.UTF_8); + } + + public RedisKeySerializer(Charset charset) { + Objects.requireNonNull(charset, "Charset must not be null"); + this.charset = charset; + this.converter = DefaultConversionService.getSharedInstance(); + } + + @Override + public Object deserialize(byte[] bytes) { + // redis keys 会用到反序列化 + if (bytes == null) { + return null; + } + return new String(bytes, charset); + } + + @Override + @Nullable + public byte[] serialize(Object object) { + Objects.requireNonNull(object, "redis key is null"); + String key; + if (object instanceof SimpleKey) { + key = ""; + } else if (object instanceof String) { + key = (String) object; + } else { + key = converter.convert(object, String.class); + } + return key.getBytes(this.charset); + } + +} diff --git a/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/utils/RedisUtil.java b/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/utils/RedisUtil.java new file mode 100644 index 0000000..4ada03d --- /dev/null +++ b/library/skyeye-dev/skyeye-redis/src/main/java/com/zhangy/skyeye/redis/utils/RedisUtil.java @@ -0,0 +1,600 @@ +package com.zhangy.skyeye.redis.utils; + +import lombok.AllArgsConstructor; +import org.springframework.data.redis.core.RedisTemplate; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * Redis工具类 + */ +@AllArgsConstructor +public class RedisUtil { + + private RedisTemplate redisTemplate; + + //=============================common============================ + + /** + * 指定缓存失效时间 + * + * @param key 键 + * @param time 时间(秒) + * @return boolean + */ + public boolean expire(String key, long time) { + try { + if (time > 0) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据key 获取过期时间 + * + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + /** + * 判断key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key) { + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除缓存 + * + * @param key 可以传一个值 或多个 + */ + public void del(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + redisTemplate.delete(key[0]); + } else { + redisTemplate.delete(Arrays.asList(key)); + } + } + } + + //============================String============================= + + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public Object get(String key) { + return key == null ? null : redisTemplate.opsForValue().get(key); + } + + /** + * 普通缓存放入 + * + * @param key 键 + * @param value 值 + * @return true成功 false失败 + */ + public boolean set(String key, Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + /** + * 普通缓存放入并设置时间 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 + * @return true成功 false 失败 + */ + public boolean set(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 普通缓存放入并设置时间 + * + * @param key 键 + * @param value 值 + * @param time 时间 + * @param timeUnit 时间单位 + * @return true成功 false 失败 + */ + public boolean set(String key, Object value, long time, TimeUnit timeUnit) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, timeUnit); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 递增 + * + * @param key 键 + * @param delta 要增加几(大于0) + * @return long + */ + public long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + /** + * 递减 + * + * @param key 键 + * @param delta 要减少几(小于0) + * @return long + */ + public long decr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递减因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, -delta); + } + + //================================Map================================= + + /** + * HashGet + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return 值 + */ + public Object hget(String key, String item) { + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 获取hashKey对应的所有键值 + * + * @param key 键 + * @return 对应的多个键值 + */ + public Map hmget(String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 获取hashKey对应的所有键值 + * + * @param key 键 + * @return 对应的多个键值 + */ + public List hmget(String key, List hk) { + return redisTemplate.opsForHash().multiGet(key, hk); + } + + /** + * HashSet + * + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * HashSet 并设置时间 + * + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time) { + try { + redisTemplate.opsForHash().putAll(key, map); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value, long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除hash表中的值 + * + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + + /** + * 判断hash表中是否有该项的值 + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return double + */ + public double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + /** + * hash递减 + * + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return double + */ + public double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + + //============================set============================= + + /** + * 根据key获取Set中的所有值 + * + * @param key 键 + * @return Set + */ + public Set sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 根据value从一个set中查询,是否存在 + * + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将数据放入set缓存 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 将set数据放入缓存 + * + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if (time > 0) { + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取set缓存的长度 + * + * @param key 键 + * @return long + */ + public long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 移除值为value的 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + //===============================list================================= + + /** + * 获取list缓存的内容 + * + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return List + */ + public List lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取list缓存的长度 + * + * @param key 键 + * @return long + */ + public long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * + * @param key 键 + * @param index 索引 + * @return Object + */ + public Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @return boolean + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return boolean + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @return boolean + */ + public boolean lSet(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return boolean + */ + public boolean lSet(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据索引修改list中的某条数据 + * + * @param key 键 + * @param index 索引 + * @param value 值 + * @return boolean + */ + public boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 移除N个值为value + * + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key, long count, Object value) { + try { + Long remove = redisTemplate.opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + +} diff --git a/library/skyeye-dev/skyeye-redis/src/main/resources/META-INF/spring.factories b/library/skyeye-dev/skyeye-redis/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..3ba0428 --- /dev/null +++ b/library/skyeye-dev/skyeye-redis/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.tiamo.dt.dev.redis.config.DTRedisTemplateConfiguration diff --git a/library/skyeye-dev/skyeye-redis/target/classes/META-INF/spring.factories b/library/skyeye-dev/skyeye-redis/target/classes/META-INF/spring.factories new file mode 100644 index 0000000..3ba0428 --- /dev/null +++ b/library/skyeye-dev/skyeye-redis/target/classes/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.tiamo.dt.dev.redis.config.DTRedisTemplateConfiguration diff --git a/library/skyeye-dev/skyeye-redis/target/classes/com/zhangy/skyeye/redis/config/DTRedisTemplateConfiguration.class b/library/skyeye-dev/skyeye-redis/target/classes/com/zhangy/skyeye/redis/config/DTRedisTemplateConfiguration.class new file mode 100644 index 0000000000000000000000000000000000000000..678a60f35f3e46a701417f96b8c99b6f2986199f GIT binary patch literal 4946 zcmc&&+g21u6x{^_!wh3oG+xkLG+sb19TZK%5TbxY5kv)1G%;yrnxUoXCfz;iXdd&F zxBN+x2V{k{@&Wmld_z`tRrg$AdT3Cy!b5de^{HKFpIaT~uYdmd6Tl#TOyejflK47} zCi%RPMnXPsrqPNCIhmBhEjdidVOkEi)0n}XH16V_e4A~@9PXzvj|XWy#DW|iCGj|o z!}unNZ87wR~HR;PG7XR(lO=abZcIBO*s!2 z6aKR434A$~b5^yN%eq}CY2Hf7C>fe-_4zj?_-MgDQse2|edKZs~0liVcRGL;I+6%R1ArM-+)VMFd9Q zo{Yeyc#sI4I+RYgj8ZjRB~(oQC}vwWNqSo|vb0vt%9%LL8mCT!a9@Z+thawH(yTAD zI2)Zx2c`{w*~#D0Ws>`b%MAMae~q?U%_}MY1`$|`v!ewPHkk`#a(ZsrnAUB*AWNY2 z4vY}3wK_)|t2vF)bTmj7xyX!R(GJVAz(}m~<)$#}>-G~mt)TDwrbXXA*#)h-yyQ~TwmB`_Fy zZs7i!d+53?uXGs?GD`)nL~pCVz_tVmHy&7XofjpkZIIJmGn*L*3`YV+@W00Ut_*67 z8cVF|gq_^&_L|#GRm@trpx4OY7>*0v+3r z{I+b8)_TQOqLFwmzPn>kY;T~r_{kE_d$X%{Ya80%l0-d&Fvprg2L96mEe|+^W+!79PNQAfBc)11kX$U9R$j6@R^=3a z9W8&#++-lSW0vlD27UK)Jk@P67wWlZ&xMMdX`~vN&%7D)hL8gLRQ!wwX+gTb?3r$m zM&(@iFIcxIw+RgGJyAoO%AkoSR{tMR_dHJF2!BYBe=WR+dG~SbnGdu z)S?aNs8=s>4^pa+>j`3kMr{hEKCMU%Q0gLAQ%!^c0YK|Z!(39NJNb5o;DaRW5wuFa zm#dd?B{Z(Zr)--#H?S|gf%n$2f4XM_2R3k!TszirsA}#`It=)NN)4eMS-NZ(hwvr6 zoK*y+!-!NN*clRR$9{Z<^AxJ4+1rDvr7rDp^|heB`65Ja*~ZQ}4k&uhG2HFOXz zW9qEHB&o_-DP=gJ%oT)^Tp1vAcxD$d0|R9v3^Ys{<>-+1AE9&;zEYAWIKRsIHA;*= V!WhOYqSxW`Lz?r4{MpMx>R+=a1?>O; literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-redis/target/classes/com/zhangy/skyeye/redis/config/RedisKeySerializer.class b/library/skyeye-dev/skyeye-redis/target/classes/com/zhangy/skyeye/redis/config/RedisKeySerializer.class new file mode 100644 index 0000000000000000000000000000000000000000..9fb5ef9a6c0bc5a76d82fc2a1682d56bc3e7c46a GIT binary patch literal 2103 zcmb7FYf~Fl7=8``HVG-0fZVj0f)|ohwgseA5Ctk)8)zjIb#TU6HivLZvKx0dIO#v> zFYs%1Y^gfq=qG3VO^)MpHd`(xR{gN&`kv=~-simM-QWNG@n-<@xSzmv%qG!~xg-WK zAIIBCEZ|0hD~n0o#5;PlWMDao1m2Bf#lU-Uyx)UWtm&n71Gfx(U|>VQun#TImw~`| z;emB*nT~SJXw6)2?kx!r36|4xvrn9>Oo$GE%3iK6}Be&|+ed+C3`xUOF3$ATdb}diod9>IW z94cR6u3)=W^WmZ8lpCgh)Q}Bnda|T^?fF2J&22roBO7$9tcrRlJ$k-8{m-FkD*c-> zICM+*EFBC(q@$ja^q)fr3{UT^Wt$ikx;F3bKah4n{vnFqv+N-0+EZh7$qyPBE?Um^O~xkNxs|)wnBf&qFeWDxuNte zkF?&@jMl)whber7p%g|ip_@^G(I^iy)w&;K7-wc*W*i1$;C2ch<4y{L7&1^uVG~;^ zyo6z1>faUBV0Q%u!hFe4_KfmF6alksLRsyBd4XY5a)F!ei2Ntb1+KI_U*@Azvb<6x9}}bN{?5jiixeTWtp}GADH!BfmO+sP zNS1CpJ|nT2H4D?(wrP0*x&@25_bOj-lY6`Rri;Mrzfx|&)z!0E@C0tWSgiGm<@-x* zwTd&&wPqQacu}F+Tf-IB^#QOTpo1TCp8tciPIva5T<2?HJI2`pEtsW<=e~nDLC3co zcVL`tl0A6Bp!LffrJ8nl1(!L~7!$P67+xd zM@N|d6{$x^q%UoLgGo*jkI<9<1qn_ENhF?6Cw@S040`FRX7&_)XUrz3E0AaV7J4zm z8#2l68kx*uj{k10$UM~=pwBlk%}_I^BXT%pzl)2LC3nCp<~@&`wMYm7(oC4 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-redis/target/classes/com/zhangy/skyeye/redis/utils/RedisUtil.class b/library/skyeye-dev/skyeye-redis/target/classes/com/zhangy/skyeye/redis/utils/RedisUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..d0cd85e8f4205a93df7c5f8440162204bf420818 GIT binary patch literal 11738 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 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-redis/target/maven-archiver/pom.properties b/library/skyeye-dev/skyeye-redis/target/maven-archiver/pom.properties new file mode 100644 index 0000000..8647f30 --- /dev/null +++ b/library/skyeye-dev/skyeye-redis/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=skyeye-redis +groupId=com.zhangy +version=1.0.0.RELEASE diff --git a/library/skyeye-dev/skyeye-redis/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/library/skyeye-dev/skyeye-redis/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..711ee24 --- /dev/null +++ b/library/skyeye-dev/skyeye-redis/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,3 @@ +com\zhangy\skyeye\redis\config\RedisKeySerializer.class +com\zhangy\skyeye\redis\utils\RedisUtil.class +com\zhangy\skyeye\redis\config\DTRedisTemplateConfiguration.class diff --git a/library/skyeye-dev/skyeye-redis/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/library/skyeye-dev/skyeye-redis/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..8d3f76a --- /dev/null +++ b/library/skyeye-dev/skyeye-redis/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,3 @@ +D:\logisen\ddd\skyeye-dev\skyeye-redis\src\main\java\com\zhangy\skyeye\redis\config\RedisKeySerializer.java +D:\logisen\ddd\skyeye-dev\skyeye-redis\src\main\java\com\zhangy\skyeye\redis\utils\RedisUtil.java +D:\logisen\ddd\skyeye-dev\skyeye-redis\src\main\java\com\zhangy\skyeye\redis\config\DTRedisTemplateConfiguration.java diff --git a/library/skyeye-dev/skyeye-redis/target/skyeye-redis-1.0.0.RELEASE.jar b/library/skyeye-dev/skyeye-redis/target/skyeye-redis-1.0.0.RELEASE.jar new file mode 100644 index 0000000000000000000000000000000000000000..eb0b90ed0ddde95085a6361773fa93b830842d76 GIT binary patch literal 9316 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 + + + skyeye-dev + com.zhangy + 1.0.0.RELEASE + + 4.0.0 + + skyeye-util + + + + + org.projectlombok + lombok + + + + cn.hutool + hutool-all + + + + com.belerweb + pinyin4j + 2.5.1 + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-util/src/.DS_Store b/library/skyeye-dev/skyeye-util/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ad10f0b3215627ad09d2b5a3efc6aca87126e04d GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1GcP+KU-vMVc4p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLGm z+SJr170|>Njfy`{MtwkyLeM7@C2C@PAV`!KF(y9o;vYVk7|)$MTUve|H3a4+_nv#s zJ?GAzGvB#)?p?+h+KT#W#u^x7GF47Bm6}@=KF;e+MG7RMtGC_(uSu z{0QI|>TA41G#1cgK*t585h@U-M1?7WBL;*y$zy?DGN9vv3Uh|w@PXjT2u>*QpHB0~ ze07GTpkW(EAdJAx5#Z@l&4yT(narMie$NeCrt2jVmmpPDPn%v-qtvK12hxL1IqhY= zqT7}&?BiUw<5;;$KbzZY8s&^umvU?`YuZM^H!yXBRQC6pw(gYMoT9C}zHM3zD2l9P zw1&~qmc*K-Sj&d>V@`fj_b`Lse%+di(kZ_U+GTTG2K37*^IZOGbOvGu(_e+a>q5<{f)i!6=bi zy?Mtf4%sv^C!e+QMN&3eEh}w4DYWwi$Fg=guIZVM-QVXK$2>m9Cz>+UH{d!2FXd0x zXVUyatCl}w=P);R_ZkJ4sG^*nH81*Ls`YbwOQvh)ETcc` z<_%jn?ZZ7~Q}+f3D5AD!K4BUKMVW)9ZaX_z0BZ;>6mW0QFuzs_w^yQtQA#%nQvPi03mbI@A@&|Wj zU2o^GVNd*|)D~GDa0jymV`rH_SFz}nW&bsjoSSs$rsov=XzW-ViS+ZST6Nvf$>{|R z^J^pNNRO;tAREoJOD4gb-hn{79IxOko?I@v@z3^%FHU1C?*FYH(L8~dGIV}GL>Gf;? zQs_h%c3=Q`=rC{?7K$jLj1fGAXYeeZ!wI~ISMeH7;SIcv_wfNf#HaWiU*J5x#3lTQ zEBFal@h7g~FG-PVrG-*NS|lx#8l~mZ3TczHS=u7)mIkDZG$?$KDyep0!Y98YjS!hw zIw;kGt3T=Vty3-f_?E5Pws+pKsrJJxo?Q3U)z6(5Te5sr%fpYgPC!r~wgS@0;P>%9 zB};s~`9t9}-$i=sW05XQ0VX(-aNl8jmnPh9yT*M2~aN405`GJ;*IHb%ASlrDl@ z5nUP8B+633CZf%%Rz*3e__k}KD^(4$U^b{5Rjrz`QLvlTMXJUW!L&u&qZ-dG`M*N> z*X#oOo=|?3Q2r09AY&e4Sc(LpdJ~dpMLRkO*}JeCX>{WNGB|`B;oO1^2S-uBD8>lo z<9Hg!aT3qt1-y(`2kn5zgQ&&fyau^WWe*T*l8gptx%)it)!}6qnKk z+j8u~B&(o)s`_2URS9nz`1!x%_V@pHmCvCwVFbbmOpO4l+tclBB)i?3$Isd^s)wlZ y!u7@l^-ZXmauGoM#2<##kC7_3Nd|OWP?Avj-!B5_gZ!4C+Ts2m?*I4D{{JtZfoRA8 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/src/main/.DS_Store b/library/skyeye-dev/skyeye-util/src/main/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..79007017eaf44711946982f3795b886f5d9f3e9c GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1GcP+KU-vMVc4p@gLr5K-9vMSfcTwxvJ(EVDZ!9huIQo!Kq5 zsi{vYsEIEc6@Q+L`hXgRpid@B)WrBekSH%=Onl( zBS287ukjAiL`c&i9T${Fs6dz!6{ZM}7!c+pPlS5ukd6x~%o)PN2f`;KJfR?XI?bO5 z)EUx(Mr{;tW9(3H}!UcrO0GoN8OD87#V|%4m zaUW5UDf@FN^hZ`^sOrpEPj6rUzWrHED|+T0)7E{fWVY$P>1DOq9=W$Q?>f5*W{KSD z$-8!O(4mnzdEL$zN!e_+?Tqz=(9RcJ+ur4RmT$REU$1W-^Z6K`Xv$D;zvmYG)?l(; zi{=+v)%+Pdhq$q~*DQEM73I{ddGY(}S2nJHINiRrbN7YW+MH@tt)1IbvOFtin|->M zHyy)r4tEb*hCk3x5p{g)G0Q9{${aLwIr^Y^p}KDVf_oRnVnXMdO?j5yV$M2RwEPh* zDa+y+vBgP6)=uv?$jMIE;4>P*NG!H^nJn+)^45Y$tq`lR6%AydcX{M;_%ltvZ5K?ww^QXQ1sA75^e7(36Dcz?Pgi&&AWqx~xOnfOVqTV%Q48_)~p&S3&w*`h<1gV#uMZqja8zFP>Qv14&8*2kx6HVo4srx(=C zua0G6-LiI`Y&6R$Sp;)>2LkPKvW&B2db#K(KQrD6dO?hn>68%H2r|*~jV;Dftc7i3 z2iXuCVJFy2>`nGDJI&6pbL?AokzHoLuwU74?00sR{f$b@Kn)gR36`NA51u1O3RufQiGfQA7#D7{QZx8qeTaoWP5C6|dnW-oV>>}W`nv>)ha0)1-nUIq-snNOiR2iuJPQG|0|S# z&Cav$3FTJ^<^P}pGUg$HrAQH~HzAE?w4t4ly$idMK^G1ni$ll}&TTkwaTEoNVvJBe zj;C-O&*6EzfS2(KVf`dtC#1iFckv!R!fBkrS$q;;{u_LUOZfRZ6n9QVG5(m0;!>vI z*sgP!WM$M(RllRS3gJy1KmWJi`u_ip@;P!Qia->BsS!YBTc)jrWVc%L_*pwa^$=BF yxZb#+feAHJE&_<3_`{I;2~y=Y>5z^KN)jsn`$YhKkl*xEJKF!F{r@i7|NjL6?P$3G literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/src/main/java/.DS_Store b/library/skyeye-dev/skyeye-util/src/main/java/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..186214a7c7bf35610b13fa7e1effefa4425913f9 GIT binary patch literal 8196 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 CuWdsB literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/.DS_Store b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fbfd8c2498059a9118f8683c0d553339d8a11041 GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1G+P+KU-uq!K2p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLFv zZEEV13TonuM#Y~eqduTUA?TBd5;ZYC5G2Zr7!#j(@edzNjOWgsEtH=}4S~7Iz2}~D z&$)NbneW`Yca|}Rwvw@mu?EJNOqEkjrRFAukMnv%kwQr|QII{$+isrvXY#|gb%S;! zh$0Y0Ac{Z~fhYn|1a5~2(3#DPe2a5mj7Dt~fhYoZWd!*C5U0v%Dx?#F23rR;!4-fg zzXAk>`Wo*LjfXT9(g{IngbIWyQDKVkiUDCx@_4A13h9KP!ki(zd>~vI;SB}B>NI~m zP-jR98nsabq6pj=0iHe*Gnk(r@rJLxzk7Z%c>z*Y^|a|VHA;F4r$EOR8Q)umm>&smOH3=Ay8B$a)=mSeahZEndiyudai1{6hBvRcE~ zSW9wsQ@myUy78v?*!t!q?>CQ+D{_5e<%Zqa!}gHl9utp`a0_5FuXE>k#TVNvr-d(7 z8U8JT`*Jb#MOJ30>P)@2uYX|gzO1H|Jae~c=X|Sdw)%WC&{+CF=Wpb&v z;M%1jhel=>a(1Ca%4Vx=XRIfLcA@Cn_DYtMF~aLPVFLelyu30N9n$ctD@}?b%9^OErZM|jTaVV_cBrAOdcW8*5@q|oIx688j)d9Y6XU_9? z44cm6Bc(UX@_;v(E1Ek-2yhjPPFW6KBgwf*hhh0{F^I^D#oZf*zx}2zBERk9!x{1$>w}M^}<3uVc#C3v9w){ZTS(3G}t?U3B zW~1yldx^ctK4z!bX?B)<%Pz1>>=*Vc`;Gn1uCTvRjTxxJ0xZT-G~z)tV>Mc^7HM>% z3)?Y(0t}cq1REukF@jM%iKp=lp2cyzh*$9%PT&o^jrZ{ZKE$W^9ADrpzQhImh)ehh zm+>dA;4ev$YNZ8|E-jRnN{!MoX}Ppf+9Yk3c1Z(LRvHvONR>3(Kj~A@kw%FGTLz_B zxMfHuZ=Pnc$2M=-x~=oJO|u_n@x;2fu71wk_~KgaB&1hjA5J*K7prj z4A0?tynvVS3gP?&UMG~lgLm;BKEf%S#u@P6J?T literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/.DS_Store b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ff683de8eba69040e842a4fe0b4ceac9a6477247 GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1GcP+KU-vMVc4p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLGm z+SJr171YERjfy`{MtwkyLeM7@C2C@PAV`!KF(y9o;vYVk7|)$M+foXT8iI3^d(S=R zo^$V>GvB$l_m(k+wxYh4u?EJNOqEkjrRElekMlaMNP(o9D9E0rmk4CuI^!ki(vd>~jE!3_oe>NJ1M zS7%5H8n$5s!U#-{08gJPrZa<;a^)NE@0RI$iNs|{Rn;?Q*3>99YR#eapi@qJS+D4} zWeW#5*X=k~uF}uu_M1jIqt&Gx+sm4^QSc2+-5`~Ny{4@@#lE`76XbRD;cd} zbhIV0t|`{CY2#Q^Y;;p|g7=%p#uT|ezGm~j%rR@oc1{Wh5NrZ$_Dv3*n)JqUODXXh zQI*aO3vaFj-pI-+4ckDd{qeM>i z<{hgzWYfsJeAdbrN!e(%thD*K(9Rbe%i80(re`{Kf1hWZ@c0;?Xv$FEfa?^zls{RY zN%IS>TE52aVQ%d1HwrFMML9EPLG=E{)y*3pPIheX+IwlPHm_Dy>*x2DOxMg=Mt|1L z8@6uRM|;Yq?hOu5JZ;Z>%rpv$G7nANc6P|PRNJs{(Y=c!5ur0_Q<abt z%d%J_vNW#9+S!9TIoajtd`8_LiA0vJkmUnho+=pB3b7hl)kFr_ZkJpRer95=qG)dS zG5YAjR9(M8Ry4iG%H|9!5IwY+L_2#+!s9?#zg1TH^3Ko@IpYdhB-Jj<+Lwp<}pB1$M@1W({8JdI~?3NPRlyo%F!9dF@1ypIp?2|mN;xPUKk89(4E ze#ABWf$R8FQlwgGu@sS(NGqg9X{EGE+9GY0wn=-X0VyL53Lm6Oq8*y>$?r%bM1pOD z5-oW4lg`{a(V~xT+rDFG=N+49-_PNxbx&RW`~|UPE7!C<_(vz35jP{%&p~xbw1?8cI5C-oA}K4WsMYYal`nDa`_y<;n?VU9*yUWl%45=R@Rc@0E=(wOHq4J+U1Wf-!J3Rlx^Z$Q${{I7>jb!-% literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/.DS_Store b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d084456ea0b93f88591e2184cd4b1589f54ddc8a GIT binary patch literal 8196 zcmeHMU2GIp6u#fI&>1GcP+KU-vMVc4p@gLr5K-86+sIGL-?sFJpJjJvq!XqyWoLFv zZEEV1O4Y;{jfy`{MtwkyLeM7@C2C@PAV`!KF(y9o;vYVk7|)$MTUdU4(-4@O%>C{? z_nbR>&U|NX&y+ESwxYh8u?EJNOczH@rS2w;uk-7MCIymeLXbUUZf?XK&RI_G2Hj8) zMj(tp7=bVXVFbbm+#V62Gn+U07U#ZL4f`+xVFd2V2=Mnqj4qDJ04D_cuMX<`5`d7G z0Dhw})d9XuEWl)d69Rox+EY{y2uu-_7!c;P9^>kS$p9w=3UdZw&Jf%gL4^YU?qnD9 z)ftik!#<2a7=arjz|&_MD>9Fn%&Ms0&*X+J)AbUG3y`X+r%kV^QEJqh1L;9$B<*Fr zqT7}&?Bla;$FXwdaW=QtG)6L7UCOb&tZ5qs-@w!jQrX{Y+PX8+<`iw+^=;E)K~ZES zqcx0;wItRw#acG3A8(3{ZD>yLar5}NBG<=PZQPSNVh!2Oap44l7Xh1jol}#Q9$9WF zCB8^hrOO^&3_OyR8LB!n(%aWRuy21x(~7RK$FQ=VSu)zQp5bP+*)BP_HSgHF3Py<> z>&-h>amc2XIr*%WFOss+YFTOXaiN_rIF_}`aZS&3?EXH_IOg#+zEQ~Qwl=3$RqN;WmQ2^oSw?@> z%^S9E+J}2aOx+tCpqSd8`Iu=G6lD&Yy6x6Ec=g<w<#?HC@#JzbjDM=X>5u#v$CC*mt`jiT^TRE|60D7F zV+YwV8)cL1MfL{!h@E1m*;)1tyTC57pV=?$SN0pb!u~=vW}prWu>{M|hzHP&HE6*) zq|k{j?7#r>&|%;(EEG|~2uAS)p2E|329tOJui#aj!0UJm@8NxXfKTulKF3*nfeZKn zm+&Jl;}2ZHpOPZgN(-fkv`AVeHA>5+71AbYv$RFpEe%K+X;Anem6Pqjlu!OZ8YQ^q z^+CxNeEyS8-aOf&k8atzZF}c!n{40D;^}oyUH#m7u_en_wLJJp>l6tEXUjCbmi|8D zEAqr=yw8g3+3M$^x+vO1DPbJDnusDX%ju}q@YI#hbM5=ocvPE4Nh799)yAkcof1Y& zS43AvHHq?6OcT*&RjZ;bRD9dD(UqzOSxh#l8&$2E@=;7Tsf$#NDPqzVZI5a^yX60h z=U=gN>^tK5W#akYsDg}nh+!!b#OqB+q807vAa3u%ZluwT1IXYIa>R5CHXIy90b>{^ zo=@OO9LKYG4$tEyyi9CAf!B!ZZ{r=jiw|)Mr*Q@!`>g*O-{K;Ex{k+Pl|07pl{_w` z3%2Fhhe=vyex<=3F{=_@H1PVrCO)|g + * 注意请谨慎使用此方法,某些{@link TemporalAccessor#isSupported(TemporalField)}为{@code false}的方法返回最小值 + * + * @param temporalAccessor 需要获取的时间对象 + * @param field 需要获取的属性 + * @return 时间的值,如果无法获取则获取最小值,一般为0 + */ + public static int get(TemporalAccessor temporalAccessor, TemporalField field) { + if (temporalAccessor.isSupported(field)) { + return temporalAccessor.get(field); + } + + return (int) field.range().getMinimum(); + } + + /** + * 格式化日期时间为指定格式
    + * 如果为{@link Month},调用{@link Month#toString()} + * + * @param time {@link TemporalAccessor} + * @param formatter 日期格式化器,预定义的格式见:{@link DateTimeFormatter} + * @return 格式化后的字符串 + */ + public static String format(TemporalAccessor time, DateTimeFormatter formatter) { + if (null == time) { + return null; + } + + if (time instanceof Month) { + return time.toString(); + } + + if (null == formatter) { + formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; + } + + try { + return formatter.format(time); + } catch (UnsupportedTemporalTypeException e) { + if (time instanceof LocalDate && e.getMessage().contains("HourOfDay")) { + // 用户传入LocalDate,但是要求格式化带有时间部分,转换为LocalDateTime重试 + return formatter.format(((LocalDate) time).atStartOfDay()); + } else if (time instanceof LocalTime && e.getMessage().contains("YearOfEra")) { + // 用户传入LocalTime,但是要求格式化带有日期部分,转换为LocalDateTime重试 + return formatter.format(((LocalTime) time).atDate(LocalDate.now())); + } else if (time instanceof Instant) { + // 时间戳没有时区信息,赋予默认时区 + return formatter.format(((Instant) time).atZone(ZoneId.systemDefault())); + } + throw e; + } + } + + /** + * 格式化日期时间为指定格式
    + * 如果为{@link Month},调用{@link Month#toString()} + * + * @param time {@link TemporalAccessor} + * @param format 日期格式 + * @return 格式化后的字符串 + */ + public static String format(TemporalAccessor time, String format) { + if (null == time) { + return null; + } + + if (time instanceof Month) { + return time.toString(); + } + + final DateTimeFormatter formatter = StrUtil.isBlank(format) + ? null : DateTimeFormatter.ofPattern(format); + + return format(time, formatter); + } + + /** + * {@link TemporalAccessor}转换为 时间戳(从1970-01-01T00:00:00Z开始的毫秒数)
    + * 如果为{@link Month},调用{@link Month#getValue()} + * + * @param temporalAccessor Date对象 + * @return {@link Instant}对象 + */ + public static long toEpochMilli(TemporalAccessor temporalAccessor) { + if (temporalAccessor instanceof Month) { + return ((Month) temporalAccessor).getValue(); + } + return toInstant(temporalAccessor).toEpochMilli(); + } + + /** + * {@link TemporalAccessor}转换为 {@link Instant}对象 + * + * @param temporalAccessor Date对象 + * @return {@link Instant}对象 + */ + public static Instant toInstant(TemporalAccessor temporalAccessor) { + if (null == temporalAccessor) { + return null; + } + + Instant result; + if (temporalAccessor instanceof Instant) { + result = (Instant) temporalAccessor; + } else if (temporalAccessor instanceof LocalDateTime) { + result = ((LocalDateTime) temporalAccessor).atZone(ZoneId.systemDefault()).toInstant(); + } else if (temporalAccessor instanceof ZonedDateTime) { + result = ((ZonedDateTime) temporalAccessor).toInstant(); + } else if (temporalAccessor instanceof OffsetDateTime) { + result = ((OffsetDateTime) temporalAccessor).toInstant(); + } else if (temporalAccessor instanceof LocalDate) { + result = ((LocalDate) temporalAccessor).atStartOfDay(ZoneId.systemDefault()).toInstant(); + } else if (temporalAccessor instanceof LocalTime) { + // 指定本地时间转换 为Instant,取当天日期 + result = ((LocalTime) temporalAccessor).atDate(LocalDate.now()).atZone(ZoneId.systemDefault()).toInstant(); + } else if (temporalAccessor instanceof OffsetTime) { + // 指定本地时间转换 为Instant,取当天日期 + result = ((OffsetTime) temporalAccessor).atDate(LocalDate.now()).toInstant(); + } else { + // issue#1891@Github + // Instant.from不能完成日期转换 + //result = Instant.from(temporalAccessor); + result = toInstant(LdtUtil.of(temporalAccessor)); + } + + return result; + } + + /** + * 当前日期是否在日期指定范围内
    + * 起始日期和结束日期可以互换 + * + * @param date 被检查的日期 + * @param beginDate 起始日期(包含) + * @param endDate 结束日期(包含) + * @return 是否在范围内 + */ + public static boolean isIn(TemporalAccessor date, TemporalAccessor beginDate, TemporalAccessor endDate) { + final long thisMills = toEpochMilli(date); + final long beginMills = toEpochMilli(beginDate); + final long endMills = toEpochMilli(endDate); + + return thisMills >= Math.min(beginMills, endMills) && thisMills <= Math.max(beginMills, endMills); + } +} diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/other/TemporalUtil.java b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/other/TemporalUtil.java new file mode 100644 index 0000000..f7f03b3 --- /dev/null +++ b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/other/TemporalUtil.java @@ -0,0 +1,140 @@ +package com.zhangy.skyeye.util.other; + +import java.time.DayOfWeek; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.time.temporal.Temporal; +import java.time.temporal.TemporalAdjusters; +import java.time.temporal.TemporalUnit; +import java.util.concurrent.TimeUnit; + +public class TemporalUtil { + + public static void main(String[] args) { + LocalDateTime of = LocalDateTime.of(2022, 2, 28, 15, 55, 0); + LocalDateTime localDateTime = of.plusMonths(1); + System.out.println(localDateTime); + System.out.println(localDateTime.with(TemporalAdjusters.lastDayOfMonth())); + } + + /** + * 获取两个日期的差,如果结束时间早于开始时间,获取结果为负。 + *

    + * 返回结果为{@link Duration}对象,通过调用toXXX方法返回相差单位 + * + * @param startTimeInclude 开始时间(包含) + * @param endTimeExclude 结束时间(不包含) + * @return 时间差 {@link Duration}对象 + */ + public static Duration between(Temporal startTimeInclude, Temporal endTimeExclude) { + return Duration.between(startTimeInclude, endTimeExclude); + } + + /** + * 获取两个日期的差,如果结束时间早于开始时间,获取结果为负。 + *

    + * 返回结果为时间差的long值 + * + * @param startTimeInclude 开始时间(包括) + * @param endTimeExclude 结束时间(不包括) + * @param unit 时间差单位 + * @return 时间差 + */ + public static long between(Temporal startTimeInclude, Temporal endTimeExclude, ChronoUnit unit) { + return unit.between(startTimeInclude, endTimeExclude); + } + + /** + * 将 {@link TimeUnit} 转换为 {@link ChronoUnit}. + * + * @param unit 被转换的{@link TimeUnit}单位,如果为{@code null}返回{@code null} + * @return {@link ChronoUnit} + */ + public static ChronoUnit toChronoUnit(TimeUnit unit) throws IllegalArgumentException { + if (null == unit) { + return null; + } + switch (unit) { + case NANOSECONDS: + return ChronoUnit.NANOS; + case MICROSECONDS: + return ChronoUnit.MICROS; + case MILLISECONDS: + return ChronoUnit.MILLIS; + case SECONDS: + return ChronoUnit.SECONDS; + case MINUTES: + return ChronoUnit.MINUTES; + case HOURS: + return ChronoUnit.HOURS; + case DAYS: + return ChronoUnit.DAYS; + default: + throw new IllegalArgumentException("Unknown TimeUnit constant"); + } + } + + /** + * 转换 {@link ChronoUnit} 到 {@link TimeUnit}. + * + * @param unit {@link ChronoUnit},如果为{@code null}返回{@code null} + * @return {@link TimeUnit} + * @throws IllegalArgumentException 如果{@link TimeUnit}没有对应单位抛出 + */ + public static TimeUnit toTimeUnit(ChronoUnit unit) throws IllegalArgumentException { + if (null == unit) { + return null; + } + switch (unit) { + case NANOS: + return TimeUnit.NANOSECONDS; + case MICROS: + return TimeUnit.MICROSECONDS; + case MILLIS: + return TimeUnit.MILLISECONDS; + case SECONDS: + return TimeUnit.SECONDS; + case MINUTES: + return TimeUnit.MINUTES; + case HOURS: + return TimeUnit.HOURS; + case DAYS: + return TimeUnit.DAYS; + default: + throw new IllegalArgumentException("ChronoUnit cannot be converted to TimeUnit: " + unit); + } + } + + /** + * 日期偏移,根据field不同加不同值(偏移会修改传入的对象) + * + * @param 日期类型,如LocalDate或LocalDateTime + * @param time {@link Temporal} + * @param number 偏移量,正数为向后偏移,负数为向前偏移 + * @param field 偏移单位,见{@link ChronoUnit},不能为null + * @return 偏移后的日期时间 + */ + @SuppressWarnings("unchecked") + public static T offset(T time, long number, TemporalUnit field) { + if (null == time) { + return null; + } + + return (T) time.plus(number, field); + } + + /** + * 偏移到指定的周几 + * + * @param temporal 日期或者日期时间 + * @param dayOfWeek 周几 + * @param 日期类型,如LocalDate或LocalDateTime + * @param isPrevious 是否向前偏移,{@code true}向前偏移,{@code false}向后偏移。 + * @return 偏移后的日期 + */ + @SuppressWarnings("unchecked") + public T offset(T temporal, DayOfWeek dayOfWeek, boolean isPrevious) { + return (T) temporal.with(isPrevious ? TemporalAdjusters.previous(dayOfWeek) : TemporalAdjusters.next(dayOfWeek)); + } +} diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/Base64Util.java b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/Base64Util.java new file mode 100644 index 0000000..ae2a3c6 --- /dev/null +++ b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/Base64Util.java @@ -0,0 +1,91 @@ +package com.zhangy.skyeye.util.utils; + +import lombok.experimental.UtilityClass; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.Base64; + +/** + * base64与文件转换工具类 + */ +@UtilityClass +public class Base64Util { + + /** + * 根据远程文件url转换base64字符串 + * @param path 远程文件url + * @return base64字符串 + * @throws IOException + */ + public String getBase64ByUrl(String path) throws IOException { + URL url = new URL(path); + HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection(); + httpUrl.connect(); + httpUrl.getInputStream(); + InputStream is = httpUrl.getInputStream(); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + //创建一个Buffer字符串 + byte[] buffer = new byte[1024]; + //每次读取的字符串长度,如果为-1,代表全部读取完毕 + int len = 0; + //使用一个输入流从buffer里把数据读取出来 + while ((len = is.read(buffer)) != -1) { + //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度 + outStream.write(buffer, 0, len); + } + // 对字节数组Base64编码 + return Base64.getEncoder().encodeToString(outStream.toByteArray()); + } + + /** + * base64字符串解码成文件并保存 + * @param base64 base64字符串 + * @param filePath 保存路径 + * @return 文件路径 + */ + public String decryptByBase64(String base64, String filePath) { + if (base64 == null && filePath == null) { + return null; + } + try { + Files.write(Paths.get(filePath), Base64.getDecoder().decode(base64), StandardOpenOption.CREATE); + } catch (IOException e) { + e.printStackTrace(); + } + return filePath; + } + + /** + * 本地文件转base64 + * @param filePath 文件路径 + * @return base64字符串 + */ + public String encryptToBase64(String filePath) { + if (filePath == null) { + return null; + } + try { + byte[] b = Files.readAllBytes(Paths.get(filePath)); + return Base64.getEncoder().encodeToString(b); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) { + try { + String base64Str = Base64Util.getBase64ByUrl("http://127.0.0.1:13000/1.png"); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/BigDecimalUtil.java b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/BigDecimalUtil.java new file mode 100644 index 0000000..e10040d --- /dev/null +++ b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/BigDecimalUtil.java @@ -0,0 +1,178 @@ +package com.zhangy.skyeye.util.utils; + +import lombok.experimental.UtilityClass; + +import java.math.BigDecimal; + +/** + * 加减乘除计算 + */ +@UtilityClass +public class BigDecimalUtil { + private BigDecimal bigDecimal; + + /** + * 加法,默认四舍五入 + * + * @param val1 值1 + * @param val2 值2 + * @param scale 保留位数 + * @return 计算后值 + */ + public double add(double val1, double val2, int scale) { + return add(val1, val2, scale, BigDecimal.ROUND_HALF_UP); + } + + /** + * 加法 + * + * @param val1 值1 + * @param val2 值2 + * @param scale 保留位数 + * @param type BigDecimal 进位方式 + * @return 计算后值 + */ + public double add(double val1, double val2, int scale, int type) { + return new BigDecimal(val1 + "").add(new BigDecimal(val2 + "")).setScale(scale, type).doubleValue(); + } + + + /** + * 减法,默认四舍五入 + * + * @param val1 值1 + * @param val2 值2 + * @param scale 保留位数 + * @return 计算后值 + */ + public double subtract(double val1, double val2, int scale) { + return subtract(val1, val2, scale, BigDecimal.ROUND_HALF_UP); + } + + /** + * 减法 + * + * @param val1 值1 + * @param val2 值2 + * @param scale 保留位数 + * @param type BigDecimal 进位方式 + * @return 计算后值 + */ + public double subtract(double val1, double val2, int scale, int type) { + return new BigDecimal(val1 + "").subtract(new BigDecimal(val2 + "")).setScale(scale, type).doubleValue(); + } + + /** + * 乘法,默认四舍五入 + * + * @param val1 值1 + * @param val2 值2 + * @param scale 保留位数 + * @return 计算后值 + */ + public double multiply(double val1, double val2, int scale) { + return multiply(val1, val2, scale, BigDecimal.ROUND_HALF_UP); + } + + /** + * 乘法 + * + * @param val1 值1 + * @param val2 值2 + * @param scale 保留位数 + * @param type BigDecimal 进位方式 + * @return 计算后值 + */ + public double multiply(double val1, double val2, int scale, int type) { + return new BigDecimal(val1 + "").multiply(new BigDecimal(val2 + "")).setScale(scale, type).doubleValue(); + } + + /** + * 除法,默认四舍五入 + * + * @param val1 值1 + * @param val2 值2 + * @param scale 保留位数 + * @return 计算后值 + */ + public double divide(double val1, double val2, int scale) { + return divide(val1, val2, scale, BigDecimal.ROUND_HALF_UP); + } + + /** + * 除法 + * + * @param val1 值1 + * @param val2 值2 + * @param scale 保留位数 + * @param type BigDecimal 进位方式 + * @return 计算后值 + */ + public double divide(double val1, double val2, int scale, int type) { + return new BigDecimal(val1 + "").divide(new BigDecimal(val2 + ""), scale, type).doubleValue(); + } + + /** + * 格式化,默认四舍五入 + * + * @param val1 值 + * @param scale 保留位数 + * @return 格式化后值 + */ + public double format(double val1, int scale) { + return format(val1, scale, BigDecimal.ROUND_HALF_UP); + } + + /** + * 格式化 + * + * @param val1 值 + * @param scale 保留位数 + * @param type BigDecimal 进位方式 + * @return 格式化后值 + */ + public double format(double val1, int scale, int type) { + return new BigDecimal(val1 + "").setScale(scale, type).doubleValue(); + } + + + /** + * 格式化 科学计数法 + * + * @param v + * @param scale + * @param type + * @return + */ + public double formatScientific(double v, int scale, int type) { + String val = new String(v + ""); + if (val.indexOf('-') != -1) { + String[] split = val.split("-"); + int i = Integer.parseInt(split[split.length-1]); + return BigDecimalUtil.format(v, i + scale, type); + } + + if (v >= 1 / Math.pow(10, scale)) { + return BigDecimalUtil.format(v, scale, type); + } + + return v; + } + + public static void main(String[] args) { + System.out.println(BigDecimalUtil.add(1.3331, 2.313, 2)); + System.out.println(BigDecimalUtil.add(1.3331, 2.313, 2, BigDecimal.ROUND_DOWN)); + System.out.println(BigDecimalUtil.subtract(1.3331, 2.313, 2)); + System.out.println(BigDecimalUtil.multiply(1.3331, 2.313, 2)); + System.out.println(BigDecimalUtil.divide(1, 3, 2)); + System.out.println(BigDecimalUtil.format(2.315, 2)); + System.out.println(BigDecimalUtil.format(2.315, 2, BigDecimal.ROUND_DOWN)); + System.out.println(BigDecimalUtil.formatScientific(0.000128932142533, 1, BigDecimal.ROUND_DOWN)); + System.out.println(BigDecimalUtil.formatScientific(-7.957747154594768E-5, 4, BigDecimal.ROUND_DOWN)); + } + + /*public double add(double val1, double val2, int scale, int type) { + return new BigDecimal(val1 + "").add(new BigDecimal(val2 + "")).setScale(scale, type).doubleValue(); + }*/ + +} diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/GeoUtil.java b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/GeoUtil.java new file mode 100644 index 0000000..01df784 --- /dev/null +++ b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/GeoUtil.java @@ -0,0 +1,142 @@ +package com.zhangy.skyeye.util.utils; + +import lombok.experimental.UtilityClass; + +import java.util.*; + +@UtilityClass +public class GeoUtil { + + + public static void main(String[] args) { + + List idList = new ArrayList<>(); + List pointList = new ArrayList<>(); + + //初始化id跟点位数据 + idList.add("a1"); + idList.add("a2"); + idList.add("a3"); + idList.add("a4"); + idList.add("a5"); + idList.add("a6"); + idList.add("a7"); + idList.add("a8"); + idList.add("a9"); + idList.add("a10"); + idList.add("a11"); + idList.add("a12"); + idList.add("a13"); + + pointList.add(new Double[]{1.1, 3.1}); + pointList.add(new Double[]{2.1, 1.1}); + pointList.add(new Double[]{2.1, 4.1}); + pointList.add(new Double[]{3.1, 2.1}); + pointList.add(new Double[]{4.1, 1.1}); + pointList.add(new Double[]{5.1, 7.1}); + pointList.add(new Double[]{6.1, 2.1}); + pointList.add(new Double[]{7.1, 5.1}); + pointList.add(new Double[]{8.1, 1.1}); + pointList.add(new Double[]{9.1, 1.1}); + pointList.add(new Double[]{10.1, 55.1}); + pointList.add(new Double[]{11.1, 2.1}); + pointList.add(new Double[]{12.1, 4.1}); + + Map pointMap = new HashMap<>(); + for (int i = 0; i < idList.size(); i++) { + Object o = idList.get(i); + pointMap.put(o, pointList.get(i)); + } + + //调用方法返回聚集集合 + List> gatherIdList = GeoUtil.getGatherIds(idList, pointList, 5, 1); + for (Set set1 : gatherIdList) { + System.out.println("================"); + System.out.println(set1.size()); + for (Object next : set1) { + Double[] doubles = pointMap.get(next); + System.out.println(next + "|" + doubles[0] + "," + doubles[1]); + } + System.out.println("================"); + } + System.out.println(pointList.size()); + } + + /** + * 根据传入的点位算出对应ID的聚集信息 返回的 Set 就是某一地点的聚集人员id集合 + * + * @param idList 坐标对应的实体ID集合 + * @param pointList 坐标集合 + * @param checkDistance 聚集计算距离 + * @param scale 1坐标对应米数 + * @return 聚集人员id集合 + */ + public static List> getGatherIds(List idList, List pointList, int checkDistance, int scale) { + Map disMap = new HashMap<>(); //item与所属cluster中心点的距离 + Map> itemToCluster = new HashMap<>(); //item所属的cluster + Set noSvisitedCandidate = new HashSet<>(); //保存还没处理过的item + for (int i = 0; i < idList.size(); i++) { + noSvisitedCandidate.add(i); + } + + List> resList = new ArrayList<>(); + + //判断是否已全部数据都遍历过 + while (!noSvisitedCandidate.isEmpty()) { + + Set cluster = new HashSet<>(); //保存遍历并属于一组的item + resList.add(cluster); + + Integer centerIndex = noSvisitedCandidate.iterator().next(); + //初始化一个中心点 + cluster.add(idList.get(centerIndex)); + + Double[] centerPoint = pointList.get(centerIndex); + noSvisitedCandidate.remove(centerIndex); + + //遍历开始 + for (int nowIndex = 0; nowIndex < pointList.size(); nowIndex++) { + if (nowIndex == centerIndex) { + continue; + } + Double[] nowPoint = pointList.get(nowIndex); + //计算距离 + double distance = getDistance(centerPoint, nowPoint, scale); + + if (distance < checkDistance * scale) { + //如果遍历中点位已被其他包含,就判断他跟现在中心点的距离是否比它所属的中心点距离小,如果小就把这个点放到新的cluster中 + if (itemToCluster.containsKey(idList.get(nowIndex))) { + Double existingDistance = disMap.get(idList.get(nowIndex)); //原来的中心点距离 + if (distance < existingDistance) { + //删除原来的item与cluster关联 + itemToCluster.get(idList.get(nowIndex)).remove(idList.get(nowIndex)); + } else { + continue; + } + } + + //加入新关系,新距离 + disMap.put(idList.get(nowIndex), distance); + itemToCluster.put(idList.get(nowIndex), cluster); + cluster.add(idList.get(nowIndex)); + + //标记为已处理,删除掉,下次不作为中心点处理 + noSvisitedCandidate.remove(nowIndex); + } + } + + } + return resList; + } + + /** + * 判断两点之间距离 + * + * @param size 1x等于多少米 + * @return + */ + public double getDistance(Double[] x, Double[] y, double size) { + double juli = Math.sqrt(Math.pow(Math.abs(x[0] - y[0]), 2) + Math.pow(Math.abs(x[1] - y[1]), 2)); + return juli * size; + } +} diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/IMGUtil.java b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/IMGUtil.java new file mode 100644 index 0000000..34ea005 --- /dev/null +++ b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/IMGUtil.java @@ -0,0 +1,466 @@ +package com.zhangy.skyeye.util.utils; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.List; + +/** + * 图片工具类 + */ +public class IMGUtil { + + public static int[][] makeRGBARangeV3() { + int[][] rgbaRange = new int[5][3]; + rgbaRange[0] = new int[]{0, 119, 255}; + rgbaRange[1] = new int[]{0, 255, 17}; + rgbaRange[2] = new int[]{255, 211, 0}; + rgbaRange[3] = new int[]{255, 123, 0}; + rgbaRange[4] = new int[]{255, 0, 0}; + return rgbaRange; + } + + public static int[] getRGBAV3(int[][] rgbaRange, double value) { + return rgbaRange[(int) Math.ceil(value)]; + } + + + /** + * 生成色棒 + * + * @return 色棒数组 + */ + public static int[][] makeRGBARange() { + int[][] rgbaRange = new int[5 * 255][3]; + int index = 0; + + // 1-2 + // {0, 0, 255}蓝色 - {0, 255, 255}天蓝色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{0, i, 255}; + } + + // 2-3 + // {0, 255, 255}天蓝色 - {0, 255, 0}绿色 + for (int i = 255; i > 0; i--, index++) { + rgbaRange[index] = new int[]{0, 255, i}; + } + + // 3-4 + // {0, 255, 0}绿色 - {255, 255, 0}黄色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{i, 255, 0}; + } + + // 4-5 + // {255, 255, 0}黄色 - {255, 0, 0}红色 + for (int i = 255; i > 0; i--, index++) { + rgbaRange[index] = new int[]{255, i, 0}; + } + + return rgbaRange; + } + + /** + * 生成色棒 有0-1维度 + * + * @return 色棒数组 + */ + public static int[][] makeRGBARangeV2() { + int[][] rgbaRange = new int[5 * 255][3]; + int index = 0; + + // 0-1 + // {0, 0, 255}蓝色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{0, 0, 255}; + } + + // 1-2 + // {0, 0, 255}蓝色 - {0, 255, 255}天蓝色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{0, i, 255}; + } + + // 2-3 + // {0, 255, 255}天蓝色 - {0, 255, 0}绿色 + for (int i = 255; i > 0; i--, index++) { + rgbaRange[index] = new int[]{0, 255, i}; + } + + // 3-4 + // {0, 255, 0}绿色 - {255, 255, 0}黄色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{i, 255, 0}; + } + + // 4-5 + // {255, 255, 0}黄色 - {255, 0, 0}红色 + for (int i = 255; i > 0; i--, index++) { + rgbaRange[index] = new int[]{255, i, 0}; + } + + return rgbaRange; + } + + /** + * 生成色棒 绿-天蓝-蓝-黄-红 + * + * @return + */ + public static int[][] makeRGBARangeV4() { + int[][] rgbaRange = new int[5 * 255][3]; + int index = 0; + + // 0-1 + // {0, 255, 0}绿色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{0, 255, 0}; + } + + // 1-2 + // {0, 255, 0}绿色 - {0, 255, 255}天蓝色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{0, 255, i}; + } + + // 2-3 + // {0, 255, 255}天蓝色 - {0, 0, 255}蓝色 + for (int i = 255; i > 0; i--, index++) { + rgbaRange[index] = new int[]{0, i, 255}; + } + + // 3-4 + // {0, 0, 255}蓝色 - {255, 255, 0}黄色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{i, i, 255 - i}; + } + + // 4-5 + // {255, 255, 0}黄色 - {255, 0, 0}红色 + for (int i = 255; i > 0; i--, index++) { + rgbaRange[index] = new int[]{255, i, 0}; + } + + return rgbaRange; + } + + /** + * 生成色棒 绿蓝黄橙红 + * + * @return + */ + public static int[][] makeRGBARangeV5() { + int[][] rgbaRange = new int[5 * 255][3]; + int index = 0; + + // 0-1 + // {0, 255, 0}绿色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{0, 255, 0}; + } + + // 1-2 + // {0, 255, 0}绿色 - {0, 0, 255}蓝色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{0, 255 - i, i}; + } + + // 2-3 + // {0, 0, 255}蓝色 - {255, 255, 0}黄色 + for (int i = 255; i > 0; i--, index++) { + rgbaRange[index] = new int[]{255 - i, 255 - i, i}; + } + + // 3-4 + // {255, 255, 0}黄色 - {255, 127, 0}橙色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{255, 255 - (int) Math.round(i / 2 + 0.5), 0}; + } + + // 4-5 + // {255, 127, 0}橙色 - {255, 0, 0}红色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{255, 128 - (int) Math.round(i / 2 + 0.5), 0}; + } + + return rgbaRange; + } + + /** + * 生成色棒 绿蓝黄橙红,1-2蓝色无渐变 + * + * @return + */ + public static int[][] makeRGBARangeV6() { + int[][] rgbaRange = new int[5 * 255][3]; + int index = 0; + + // 0-1 + // {0, 255, 0}绿色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{0, 255, 0}; + } + + // 1-2 + // {0, 0, 255}蓝色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{0, 0, 255}; + } + + // 2-3 + // {0, 0, 255}蓝色 - {255, 255, 0}黄色 + for (int i = 255; i > 0; i--, index++) { + rgbaRange[index] = new int[]{255 - i, 255 - i, i}; + } + + // 3-4 + // {255, 255, 0}黄色 - {255, 127, 0}橙色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{255, 255 - (int) Math.round(i / 2 + 0.5), 0}; + } + + // 4-5 + // {255, 127, 0}橙色 - {255, 0, 0}红色 + for (int i = 0; i < 255; i++, index++) { + rgbaRange[index] = new int[]{255, 128 - (int) Math.round(i / 2 + 0.5), 0}; + } + + return rgbaRange; + } + + public static int[] getRGBA(int[][] rgbaRange, double value, double maxValue, double minValue) { + double rate = (value - minValue) / (maxValue - minValue); + int index = new Double(rgbaRange.length * rate).intValue(); + return rgbaRange[index >= rgbaRange.length ? rgbaRange.length - 1 : index]; + } + + public static void outFile(BufferedImage image, String filePath) { + File fileFolder = new File(filePath).getParentFile(); + if (!fileFolder.exists()) { + fileFolder.mkdir(); + } + + File file = new File(filePath); + try { + ImageIO.write(image, "png", file); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static String getRiskPicFileName(String type, String orbitType, long time) { + return type + "-" + orbitType + ".png"; + } + + /** + * 生成风险球壳图片 + * + * @param scale 图片放大倍数 + * @param filePath 保存图片目录 + * @param valArr 环境风险等级值数组 double[360][180] + * @param minVal 风险等级最小值 + * @param maxVal 风险等级最大值 + */ + public static void generatePNG(Integer scale, String filePath, double[][] valArr, double minVal, double maxVal) { + generatePNG(scale, filePath, valArr, minVal, maxVal, 10); + } + + + public static void generatePNG(Integer scale, String filePath, double[][] valArr, double minVal, double maxVal, int alpha) { + generatePNG(scale, filePath, valArr, minVal, maxVal, alpha, IMGUtil.makeRGBARange()); + } + + public static void generatePNG(Integer scale, String filePath, double[][] valArr, double minVal, double maxVal, int alpha, int[][] rgbaRanGE) { + generatePNG(scale, filePath, valArr, minVal, maxVal, alpha, rgbaRanGE, null); + } + + /** + * 生成风险球壳图片 + * + * @param scale 图片放大倍数 + * @param filePath 保存图片目录 + * @param valArr 环境风险等级值数组 double[360][180] + * @param minVal 风险等级最小值 + * @param maxVal 风险等级最大值 + * @param alpha 图片透明度 + */ + public static void generatePNG(Integer scale, String filePath, double[][] valArr, double minVal, double maxVal, int alpha, int[][] rgbaRanGE, Double minLevel) { + BufferedImage image = new BufferedImage(360 * scale, 180 * scale, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = image.createGraphics(); + image = g.getDeviceConfiguration().createCompatibleImage(360 * scale, 180 * scale, Transparency.TRANSLUCENT); + g.dispose(); + g = image.createGraphics(); + +// int[][] rgbaRanGE = IMGUtil.makeRGBARange(); + for (int y1 = 0; y1 < 180; ++y1) { + for (int x1 = 0; x1 < 360; ++x1) { + double val = valArr[y1][x1]; + if (minLevel != null && val <= minLevel.doubleValue()) { + continue; + } + int[] rgba = IMGUtil.getRGBA(rgbaRanGE, val, maxVal, minVal); + Color color = new Color(rgba[0], rgba[1], rgba[2], alpha); + g.setColor(color); + /*for (int i = 0; i < scale; i++) { + int tmpX = (x1 * scale) + i; + int tmpY = (180 * scale) - y1 * scale - 1; + for (int j = 0; j < scale; j++) { + g.drawRect(tmpX, tmpY - j, 1, 1); + } + }*/ + //图片下标从-1开始 + for (int i = 0; i < scale; ++i) { + int tmpX = (x1 * scale) + i; + int tmpY = (180 * scale) - (y1 * scale) - 1; + + for (int j = 0; j < scale; ++j) { + g.drawRect(tmpX, tmpY - j, 1, 1); + } + } + } + } + + //补边,先横轴,从-1,-1开始 + int y1 = -1; + for (int x1 = 0; x1 < 360; ++x1) { + + double val = valArr[y1 + 1][x1]; + if (minLevel != null && val <= minLevel.doubleValue()) { + continue; + } + int[] rgba = IMGUtil.getRGBA(rgbaRanGE, val, maxVal, minVal); + Color color = new Color(rgba[0], rgba[1], rgba[2], alpha); + g.setColor(color); + + for (int i = 0; i < scale; ++i) { + int tmpX = (x1 * scale) + i - 1; + int tmpY = y1; + + for (int j = 0; j < scale; ++j) { + g.drawRect(tmpX, tmpY - j, 1, 1); + } + } + } + + //再补纵轴 + int x1 = -1; + for (y1 = 0; y1 < 180; ++y1) { + + double val = valArr[y1][x1 + 1]; + if (minLevel != null && val <= minLevel.doubleValue()) { + continue; + } + int[] rgba = IMGUtil.getRGBA(rgbaRanGE, val, maxVal, minVal); + Color color = new Color(rgba[0], rgba[1], rgba[2], alpha); + g.setColor(color); + + for (int i = 0; i < scale; ++i) { + int tmpX = x1; + int tmpY = (180 * scale) - (y1 * scale) - 1 - i; + + for (int j = 0; j < scale; ++j) { + g.drawRect(tmpX + j, tmpY, 1, 1); + } + } + } + + IMGUtil.outFile(image, filePath); + } + + public static void main(String[] args) { + double val = 3; + double[][] colorArr = new double[180][360]; + + for (int i = 0; i < colorArr.length; i++) { + double[] doubles = colorArr[i]; + for (int j = 0; j < doubles.length; j++) { + doubles[j] = val; + } + } + + generatePNG(1, "D:\\zhangzhe\\files\\upload-files\\env-img\\2.png", colorArr, 0, 5, 60); + System.out.println("完成"); + } + + /** + * 根据数组长度动态生成图片 + * @param scale + * @param filePath + * @param valArr + * @param minVal + * @param maxVal + * @param alpha + * @param rgbaRanGE + */ + public static void generatePNGDynamicSize(Integer scale, String filePath, double[][] valArr, double minVal, double maxVal, int alpha, int[][] rgbaRanGE) { + int width = valArr[0].length; + int height = valArr.length; + BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = image.createGraphics(); + image = g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT); + g.dispose(); + g = image.createGraphics(); + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + double val = valArr[y][x]; + if (val == -999999) { + //异常值透明处理 + continue; + } + + if (val < minVal) { + val = minVal; + } + + int[] rgba = IMGUtil.getRGBA(rgbaRanGE, val, maxVal, minVal); + Color color = new Color(rgba[0], rgba[1], rgba[2], alpha); + g.setColor(color); + //width为1,height为0时,只会在xy上绘制一个像素点 + g.drawRect(x, y, 1, 0); + } + } + + IMGUtil.outFile(image, filePath); + } + + /** + * 渐变色棒 + * + * @param colList + * @return + */ + public static int[][] makeRGBARange(List colList) { + int size = colList.size()-1; + int[][] rgbaRange = new int[size * 255][3]; + + int index = 0; + + for (int j = 0; j < size ; j++) { + + Integer[] col = colList.get(j); + Integer[] col2 = colList.get(j + 1); + + for (int i = 0; i < 255; i++, index++) { + Integer a1 = col[0]; + Integer a2 = col[1]; + Integer a3 = col[2]; + + Integer b1 = col2[0]; + Integer b2 = col2[1]; + Integer b3 = col2[2]; + + int i1 = i * (b1 - a1) / 255; + int i2 = i * (b2 - a2) / 255; + int i3 = i * (b3 - a3) / 255; + + rgbaRange[index] = new int[]{a1 + i1, a2 + i2, a3 + i3}; + } + } + + return rgbaRange; + } +} diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/LdtUtil.java b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/LdtUtil.java new file mode 100644 index 0000000..e446fa4 --- /dev/null +++ b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/LdtUtil.java @@ -0,0 +1,480 @@ +package com.zhangy.skyeye.util.utils; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import com.zhangy.skyeye.util.other.TemporalAccessorUtil; +import com.zhangy.skyeye.util.other.TemporalUtil; + +import java.time.*; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoField; +import java.time.temporal.ChronoUnit; +import java.time.temporal.TemporalAccessor; +import java.time.temporal.TemporalUnit; +import java.util.List; + +/** + * LocalDateTime时间工具类 + */ +public class LdtUtil { + + public static void main(String[] args) { + //转换UTC时间字符串 + String timeStr = "2021-10-01T16:00:00Z"; + LdtUtil ldtUtil = new LdtUtil(); + LocalDateTime parse = ldtUtil.parseUTC(timeStr); + System.out.println(parse); + + //转换中文格式时间字符串 + String timeStr1 = "2021年10月01日"; + LocalDate localDate = ldtUtil.parseDate(timeStr1, LdtUtil.CHINESE_DATE_PATTERN); + System.out.println(localDate); + + //转换斜线格式时间字符串 + String timeStr2 = "2021/10/1"; + String normalize = ldtUtil.normalize(timeStr2); + LocalDate localDate2 = ldtUtil.parseDate(normalize); + System.out.println(localDate2); + + //转换.格式时间字符串 + String timeStr3 = "2021.10.1"; + System.out.println(ldtUtil.normalize(timeStr3)); + + //格式化成时间字符串 + LocalDateTime localDateTime = LocalDateTime.now(); + String format = ldtUtil.format(localDateTime, LdtUtil.UTC_PATTERN); + System.out.println(format); + + //计算时间间隔 + LocalDateTime time1 = LocalDateTime.of(2021, 10, 1, 0, 0, 0); + LocalDateTime time2 = LocalDateTime.of(2021, 10, 2, 0, 0, 0); + + Duration between = ldtUtil.between(time1, time2); + System.out.println(between.toDays()); + + //根据传入的单位返回间隔 + long between1 = ldtUtil.between(time1, time2, ChronoUnit.DAYS); + System.out.println(between1); + + //判断时间是否在指定的时间范围内 + LocalDateTime time3 = LocalDateTime.of(2021, 10, 2, 0, 0, 0); + boolean in = TemporalAccessorUtil.isIn(time3, time1.toLocalDate(), time2.toLocalDate()); + System.out.println(in); + + //获取中文星期 + DayOfWeek dayOfWeek = LocalDateTime.now().getDayOfWeek(); + String weekStr = ldtUtil.toChineseWeek(dayOfWeek); + System.out.println(weekStr); + + LocalDateTime now = LocalDateTime.now(); + now = ldtUtil.offset(now, 2, ChronoUnit.DAYS); + System.out.println(now); + now = ldtUtil.offset(now, 50, ChronoUnit.SECONDS); + System.out.println(now); + + System.out.println(LocalDate.of(2022,5,10).toString()); + System.out.println(LdtUtil.format(LocalDate.now(), LdtUtil.NORM_DATE_PATTERN)); + + System.out.println(LocalTime.now().toString()); + System.out.println(LdtUtil.format(LocalTime.now(),LdtUtil.NORM_TIME_PATTERN)); + } + + /** + * 转换成LocalDateTime + * + * @param dateStr 日期字符串 + * @return {@link LocalDateTime} + */ + public static LocalDateTime parse(CharSequence dateStr) { + return parse(dateStr, NORM_DATETIME_PATTERN); + } + + /** + * 转换成LocalDateTime + * + * @param dateStr 日期字符串 + * @param format 格式 + * @return {@link LocalDateTime} + */ + public static LocalDateTime parse(CharSequence dateStr, String format) { + DateTimeFormatter df = DateTimeFormatter.ofPattern(format); + return LocalDateTime.parse(dateStr, df); + } + + /** + * utc格式转换成LocalDateTime + * + * @param dateStr 日期字符串 + * @return {@link LocalDateTime} + */ + public static LocalDateTime parseUTC(CharSequence dateStr) { + return parse(dateStr, UTC_PATTERN); + } + + /** + * 转换成LocalDate + * + * @param dateStr 日期字符串 + * @return {@link LocalDate} + */ + public static LocalDate parseDate(CharSequence dateStr) { + return LocalDate.parse(normalize(dateStr)); + } + + /** + * 转换成LocalDate + * + * @param dateStr 日期字符串 + * @param format 格式 + * @return {@link LocalDate} + */ + public static LocalDate parseDate(CharSequence dateStr, String format) { + DateTimeFormatter df = DateTimeFormatter.ofPattern(format); + return LocalDate.parse(dateStr, df); + } + + /** + * 转换成LocalTime + * + * @param dateStr 日期字符串 + * @return {@link LocalTime} + */ + public static LocalTime parseTime(CharSequence dateStr) { + return LocalTime.parse(normalize(dateStr)); + } + + /** + * 转换成LocalTime + * + * @param dateStr 日期字符串 + * @param format 格式 + * @return {@link LocalTime} + */ + public static LocalTime parseTime(CharSequence dateStr, String format) { + DateTimeFormatter df = DateTimeFormatter.ofPattern(format); + return LocalTime.parse(dateStr, df); + } + + /** + * 格式化时间 + * + * @param time 时间 + * @param format 格式 + * @return {@link String} + */ + public static String format(LocalDateTime time, String format) { + return TemporalAccessorUtil.format(time, format); + } + + /** + * 格式化时间 + * + * @param time 时间 + * @param format 格式 + * @return {@link String} + */ + public static String format(LocalDate time, String format) { + return TemporalAccessorUtil.format(time, format); + } + + /** + * 格式化时间 + * + * @param time 时间 + * @param format 格式 + * @return {@link String} + */ + public static String format(LocalTime time, String format) { + return TemporalAccessorUtil.format(time, format); + } + + /** + * 获取两个日期的差,如果结束时间早于开始时间,获取结果为负。 + * 返回结果为{@link Duration}对象,通过调用toXXX方法返回相差单位 + * + * @param startTimeInclude 开始时间(包含) + * @param endTimeExclude 结束时间(不包含) + * @return 时间差 {@link Duration}对象 + */ + public static Duration between(LocalDateTime startTimeInclude, LocalDateTime endTimeExclude) { + return TemporalUtil.between(startTimeInclude, endTimeExclude); + } + + /** + * 获取两个日期的差,如果结束时间早于开始时间,获取结果为负。 + * 返回结果为时间差的long值 + * + * @param startTimeInclude 开始时间(包括) + * @param endTimeExclude 结束时间(不包括) + * @param unit 时间差单位 + * @return 时间差 + */ + public static long between(LocalDateTime startTimeInclude, LocalDateTime endTimeExclude, ChronoUnit unit) { + return TemporalUtil.between(startTimeInclude, endTimeExclude, unit); + } + + /** + * 当前日期是否在日期指定范围内
    + * 起始日期和结束日期可以互换 + * + * @param date 被检查的日期 + * @param beginDate 起始日期(包含) + * @param endDate 结束日期(包含) + * @return 是否在范围内 + */ + public static boolean isIn(TemporalAccessor date, TemporalAccessor beginDate, TemporalAccessor endDate) { + return TemporalAccessorUtil.isIn(date, beginDate, endDate); + } + + /** + * 返回中文星期 + * + * @param dayOfWeek 星期对象 + * @return 星期 + */ + public static String toChineseWeek(DayOfWeek dayOfWeek) { + return toChineseWeek(dayOfWeek, "星期"); + } + + /** + * 返回中文星期,可自定义设置前缀 + * + * @param dayOfWeek 星期对象 + * @param weekNamePre 前缀名 + * @return 星期 + */ + public static String toChineseWeek(DayOfWeek dayOfWeek, String weekNamePre) { + String name = dayOfWeek.name(); + switch (name) { + case "SUNDAY": + return weekNamePre + "日"; + case "MONDAY": + return weekNamePre + "一"; + case "TUESDAY": + return weekNamePre + "二"; + case "WEDNESDAY": + return weekNamePre + "三"; + case "THURSDAY": + return weekNamePre + "四"; + case "FRIDAY": + return weekNamePre + "五"; + case "SATURDAY": + return weekNamePre + "六"; + default: + return null; + } + } + + /** + * 日期偏移,根据field不同加不同值(偏移会修改传入的对象) + * + * @param time {@link LocalDateTime} + * @param number 偏移量,正数为向后偏移,负数为向前偏移 + * @param field 偏移单位,见{@link ChronoUnit},不能为null + * @return 偏移后的日期时间 + */ + public static LocalDateTime offset(LocalDateTime time, long number, TemporalUnit field) { + return TemporalUtil.offset(time, number, field); + } + + /** + * 选择单位 + * + * @param period 单位名 + * @return {@link ChronoUnit} + */ + public static ChronoUnit choiceUnit(String period) { + switch (period) { + case "year": + return ChronoUnit.YEARS; + case "month": + return ChronoUnit.MONTHS; + case "day": + return ChronoUnit.DAYS; + case "hour": + return ChronoUnit.HOURS; + case "minute": + return ChronoUnit.MINUTES; + case "second": + return ChronoUnit.SECONDS; + default: + break; + } + return null; + } + + /** + * 规范化字符串 会对一些不规范的日期格式进行格式化, + * 年月日转为`-`分割,时分秒转为`:`分割, + * 并进行补零,如2022-10-1会输出2022-10-01 + * + * @param dateStr 日期字符串 支持格式:2022年10月12日 10时10分10秒,2022/10/2,2022.10.1, + * @return 规范后日期字符串 + */ + public static String normalize(CharSequence dateStr) { + if (StrUtil.isBlank(dateStr)) { + return StrUtil.str(dateStr); + } else { + List dateAndTime = StrUtil.splitTrim(dateStr, ' '); + int size = dateAndTime.size(); + if (size >= 1 && size <= 2) { + StringBuilder builder = StrUtil.builder(); + String datePart = ((String) dateAndTime.get(0)).replaceAll("[/.年月]", "-"); + datePart = StrUtil.removeSuffix(datePart, "日"); + datePart = zeroFill(datePart); + builder.append(datePart); + if (size == 2) { + builder.append(' '); + String timePart = ((String) dateAndTime.get(1)).replaceAll("[时分秒]", ":"); + timePart = StrUtil.removeSuffix(timePart, ":"); + timePart = timePart.replace(',', '.'); + timePart = zeroFill(timePart); + builder.append(timePart); + } + + return builder.toString(); + } else { + return StrUtil.str(dateStr); + } + } + } + + + /** + * 补零,如2022-10-1会输出2022-10-01 + * + * @param dateStr 日期字符串 + * @return 日期字符串 + */ + public static String zeroFill(String dateStr) { + String[] split = dateStr.split("-"); + for (int i = 0; i < split.length; i++) { + if (split[i].length() < 2) { + split[i] = "0" + split[i]; + } + } + return ArrayUtil.join(split, "-"); + } + + + /** + * {@link TemporalAccessor}转{@link LocalDateTime},使用默认时区 + * + * @param temporalAccessor {@link TemporalAccessor} + * @return {@link LocalDateTime} + */ + public static LocalDateTime of(TemporalAccessor temporalAccessor) { + if (null == temporalAccessor) { + return null; + } + + if (temporalAccessor instanceof LocalDate) { + return ((LocalDate) temporalAccessor).atStartOfDay(); + } else if (temporalAccessor instanceof Instant) { + return LocalDateTime.ofInstant((Instant) temporalAccessor, ZoneId.systemDefault()); + } else if (temporalAccessor instanceof ZonedDateTime) { + return ((ZonedDateTime) temporalAccessor).toLocalDateTime(); + } + + return LocalDateTime.of( + TemporalAccessorUtil.get(temporalAccessor, ChronoField.YEAR), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.MONTH_OF_YEAR), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.DAY_OF_MONTH), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.HOUR_OF_DAY), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.MINUTE_OF_HOUR), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.SECOND_OF_MINUTE), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.NANO_OF_SECOND) + ); + } + + /** + * 毫秒转{@link LocalDateTime},使用默认时区 + * + *

    注意:此方法使用默认时区,如果非UTC,会产生时间偏移

    + * + * @param epochMilli 从1970-01-01T00:00:00Z开始计数的毫秒数 + * @return {@link LocalDateTime} + */ + public static LocalDateTime of(long epochMilli) { + return of(Instant.ofEpochMilli(epochMilli)); + } + + /** + * yyyy-MM-dd + */ + public static final String NORM_DATE_PATTERN = "yyyy-MM-dd"; + /** + * HH:mm:ss + */ + public static final String NORM_TIME_PATTERN = "HH:mm:ss"; + /** + * yyyy-MM-dd HH:mm + */ + public static final String NORM_DATETIME_MINUTE_PATTERN = "yyyy-MM-dd HH:mm"; + /** + * yyyy-MM-dd HH:mm:ss + */ + public static final String NORM_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; + /** + * yyyy-MM-dd HH:mm:ss.SSS + */ + public static final String NORM_DATETIME_MS_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS"; + /** + * yyyy-MM-dd HH:mm:ss,SSS + */ + public static final String ISO8601_PATTERN = "yyyy-MM-dd HH:mm:ss,SSS"; + /** + * yyyy年MM月dd日 + */ + public static final String CHINESE_DATE_PATTERN = "yyyy年MM月dd日"; + /** + * yyyyMMdd + */ + public static final String PURE_DATE_PATTERN = "yyyyMMdd"; + /** + * HHmmss + */ + public static final String PURE_TIME_PATTERN = "HHmmss"; + /** + * yyyyMMddHHmmss + */ + public static final String PURE_DATETIME_PATTERN = "yyyyMMddHHmmss"; + /** + * yyyyMMddHHmmssSSS + */ + public static final String PURE_DATETIME_MS_PATTERN = "yyyyMMddHHmmssSSS"; + + /** + * yyyyMMddHH + */ + public static final String PURE_DATETIME_HH_PATTERN = "yyyyMMddHH"; + + /** + * EEE, dd MMM yyyy HH:mm:ss z + */ + public static final String HTTP_DATETIME_PATTERN = "EEE, dd MMM yyyy HH:mm:ss z"; + /** + * EEE MMM dd HH:mm:ss zzz yyyy + */ + public static final String JDK_DATETIME_PATTERN = "EEE MMM dd HH:mm:ss zzz yyyy"; + /** + * yyyy-MM-dd'T'HH:mm:ss'Z' + */ + public static final String UTC_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'"; + /** + * yyyy-MM-dd'T'HH:mm:ssZ + */ + public static final String UTC_WITH_ZONE_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZ"; + /** + * yyyy-MM-dd'T'HH:mm:ss.SSS'Z' + */ + public static final String UTC_MS_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + /** + * yyyy-MM-dd'T'HH:mm:ss.SSSZ + */ + public static final String UTC_MS_WITH_ZONE_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; + /** + * yyyy/MM/dd + */ + public static final String DIAGONAL_DATE_PATTERN = "yyyy/MM/dd"; +} diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/NoticeUtil.java b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/NoticeUtil.java new file mode 100644 index 0000000..d906c08 --- /dev/null +++ b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/NoticeUtil.java @@ -0,0 +1,48 @@ +package com.zhangy.skyeye.util.utils; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONObject; +import lombok.experimental.UtilityClass; + +@UtilityClass +public class NoticeUtil { + + public void sendDingTalkEventNotice(String url, String typeName, Integer level, String time) { + if (level == 0) { + return; + } + String[] levelArr = new String[]{"蓝色", "黄色", "橙色", "红色"}; + String content = String.format("[空间天气事件预警]:%s发布\n%s【%s】预警", time, typeName, levelArr[level - 1]); + String msgStr = "{\"at\":{\"atMobiles\":[\"\"],\"atUserIds\":[\"\"],\"isAtAll\":true},\"text\":{\"content\":\"" + content + "\"},\"msgtype\":\"text\"}"; + HttpUtil.post(url, msgStr); + } + + public void sendDingTalkEventNoticeV2(String url, String content) { + String msgStr = "{\"at\":{\"atMobiles\":[\"\"],\"atUserIds\":[\"\"],\"isAtAll\":true},\"text\":{\"content\":\"" + content + "\"},\"msgtype\":\"text\"}"; + HttpUtil.post(url, msgStr); + } + + /** + * 飞书机器人 + * + * @param url + * @param content + */ + public void sendFeishuEventNotice(String url, String content) { + JSONObject json = new JSONObject(); + json.put("receive_id", IdUtil.simpleUUID()); + json.put("msg_type", "text"); + JSONObject contJson = new JSONObject(); + contJson.put("text", content + "所有人"); + json.put("content", contJson.toString()); + String res = HttpUtil.post(url, json.toString()); + + } + + /*public static void main(String[] args) { + String content = "[空间天气事件预警]\n" + + "北京时2023年3月15日1时50分,太阳质子事件达到蓝色告警级别,10MeV质子积分通量质子达到10.0。"; + sendFeishuEventNotice("https://open.feishu.cn/open-apis/bot/v2/hook/1db0ec9b-b74a-492a-8a94-398291f67d5c", content); + }*/ +} diff --git a/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/PinYinUtil.java b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/PinYinUtil.java new file mode 100644 index 0000000..ecf3f8b --- /dev/null +++ b/library/skyeye-dev/skyeye-util/src/main/java/com/zhangy/skyeye/util/utils/PinYinUtil.java @@ -0,0 +1,47 @@ +package com.zhangy.skyeye.util.utils; + +import cn.hutool.extra.pinyin.PinyinUtil; +import lombok.experimental.UtilityClass; + +/** + * 姓名拼音筛选工具类 + */ +@UtilityClass +public class PinYinUtil { + + public static void main(String[] args) { + boolean result1 = PinYinUtil.validPinYin("张三", "zs"); + boolean result2 = PinYinUtil.validPinYin("张三","zha"); + boolean result3 = PinYinUtil.validPinYin("张三","zjs"); + System.out.println("result1:"+result1); + System.out.println("result2:"+result2); + System.out.println("result3:"+result3); + } + + /** + * 根据传入的名称和拼音判断是否通过验证 + * @param str 名称 + * @param searchStr 传入的拼音 + * @return 验证结果 + */ + public boolean validPinYin(String str,String searchStr){ + //全拼 + if (PinyinUtil.getPinyin(str).contains(searchStr)) return true; + //拼音首字母 + if (getPinYinGetFirstLetter(str).contains(searchStr)) return true; + return false; + } + + /** + * 获取拼音首字母 + * @param name + * @return 拼音首字母 + */ + private String getPinYinGetFirstLetter(String name){ + String firstStr = ""; + for (int i = 0; i < name.length(); i++) { + firstStr += PinyinUtil.getFirstLetter(name.charAt(i)); + } + return firstStr; + } +} diff --git a/library/skyeye-dev/skyeye-util/src/main/resources/META-INF/spring.factories b/library/skyeye-dev/skyeye-util/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..ab43764 --- /dev/null +++ b/library/skyeye-dev/skyeye-util/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration= diff --git a/library/skyeye-dev/skyeye-util/target/classes/META-INF/spring.factories b/library/skyeye-dev/skyeye-util/target/classes/META-INF/spring.factories new file mode 100644 index 0000000..ab43764 --- /dev/null +++ b/library/skyeye-dev/skyeye-util/target/classes/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration= diff --git a/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/other/TemporalAccessorUtil.class b/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/other/TemporalAccessorUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..acd70ab9656247824ecb4ca421c5d3df8be3ba13 GIT binary patch literal 4251 zcmb7H`+F4C8Gg@ZH?uoCgxp9X5KKsvWCN~LEou}ANvMgt21$a2YUyNmk{z}6?ce0%)A!8GULr{fd7jLCd(L-#zsouE-*5i$ zPXG_&uPO#`JdEe@efc;M#!37@#S3^*!4Ku$sSrl+Bb5(b!Hj~03Khv93>CAOQxQf= zff>YUNzSWiL|Q>cMHZHdRxGG^2{|dAR}q1&q8}0(=1OzSO6ck1dd`%;y+yyBGV=lt#S&H~dOoFR=N6;+`9)*Vh!$)!9kuL~ zk&8|lnFTASr-u>=BcHc&)7%=Q!8yYg81IXn*3als+sqhI+vB`VWNVO$pq$nPi!b-UMc)7J=QH@w=7;woKZ3Vm_`fcsMl14LfBekLo!+W7tNHnAFc& zxs1*LU%cx8UCHQ(ZW~iX<%pw*S_k`G-_pc6I%((3>>M2zOwJ?gIX#`t7ZwP-Z6wPX zm|9#gM$aXT1>3Z;l=Vy01wyVxnh@x%QMI8X0?*t{RJ9JT8$lrw{5d>Vd(cNzNAbbexXMCa)Ht%mne)bIg5yj@22 z5!p`|I@w2a4Cf_K~5Tu;6!Bjc+sv1bV7Wm6U$Fhy=oB zezH7^IFdJQ7H^ufzVC>SQ@?8y9~^C*?m5m(RzP>3H-BuVr+VBR*V6^#m}FtccdnzZ z%D_(IxfSQ3nJHwPQ)>9GALN!vYW1hE~y14#k1LvMQ^ZvThL0mh6);p2l19i+R@7 zh%u`>L%4!&4VP5g?YwT6L@Uqq5w24zvaotWaqKrv&0)6A-@&K;O=;wG5 zjqnC6{}c#$g7EnOe?|EgdyV-dTY?IvftS#CG3qPc_?kE68+XSH<|+e&DY zt9$=NUw0DS-HghO@*uX-r~47W9%3Cq195L5Tph$C0>M12X{FWro+ zVn+!(Z*s4;q-N+h4B zJ$letL@R%GI$7UU!o6I-!1b;o8o1u&uFP|#+g<4{@!Mq?C%D3zld@q)w#Vfh;yR0M zJJ-GXs@2@X-CkF!*QvhyTy0^-em}#H4OH_o&Nc!p=4F8h*vw0T?RADtbe08ojB0Gk0;y+NKo~%$46>6?R zU8+!5D-`kc@V`!UU41eWjR+|X?M+SXo$X(rs#t~Z8|?G@{fGETL&+_5 QR0k>oRe;K-`1E1=e@mQ01poj5 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/other/TemporalUtil$1.class b/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/other/TemporalUtil$1.class new file mode 100644 index 0000000000000000000000000000000000000000..6ad96bac6ea1efe6d0cc802d5298ef1d74ffc944 GIT binary patch literal 1470 zcma)*-EY%o6viL7Nu2~!(vC64SAltLGd8?-!1&%unyzW{u{CKY#LZmCA_mv49EYh$ z+#|s~65NB}jv}gVLR=w%;C9mX2Ov%RC#F5eY35#ZFv)(N^Rv(Up5ym@{rc};p946C zxePwVa2mTXl4dk2m{akYz!8zpMZOR@Dq@IynZX#wWzbh?M#ltm5*-&gA@a4zNs&_` zr&XL$aZbUgUi;Yzt!CL=)~}e?OuZdCu5S6B)eZvN3-!9QWY2p}sG#Rkaf|$r@Ac4L zTJ{6e)$`53_xw(N>a68D9C=7Cg)KTaI_RY==$1q2j!XZ!~<1 z2@QMjv4#uCYnVhq!5$f6xTbg6sQ9(E)tqu{w^0ZJKhQ8GY2S%Vixfp>L}rm!QIZ+U z8g|Q!6;w5RFY<%Pv`A58Mr0OM1xGA@$++HRsTHGjb;Vw>4OwHu51V#iZ2k^?Oo3MP zJUhs{W~*hl6lCK*tBY4`i`$U<-}5Qh9}Sl+GP+x2Y~G^2Yo^_wN9tq0YvGygV}@p!#?6~+LPTa+Yiur zu=qql3VX4SzMt?0y^Mgr)}cIqmU)7nRk?cCkVsS?ATb+ZA2AuDO6-d(HW_+gHJ>e+@gjHHlebw{sTa)~ua3}pS z`jN&?E>4mQ^9hFOBN)eV`Uy<%pG%^^|D;B*<0n}32A0vH-@r}WqTj|H+@;^ceLSQ; z!c(l%f58j9q`$&%_?`X--r`SsFAi{tGw7jSM2OQEVkC5s_cZqXs4}a(g;eBOBnw-- djYh;NtaB)u_b|T;NI<8a<(=Uc@1i4{`UlRjQ2YP@ literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/other/TemporalUtil.class b/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/other/TemporalUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..f87be9204461412a108c5598f78e26e5b6eada12 GIT binary patch literal 4451 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 K?keA(AoMThXtVJE literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/BigDecimalUtil.class b/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/BigDecimalUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..82b1f81303d5cbba26c53f130fe667de856baccd GIT binary patch literal 3579 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 JPEywmZvo5{K`Q_N literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/IMGUtil.class b/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/IMGUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..f4b0df02b0f301e9e1e899ea9f96eb2134a20a85 GIT binary patch literal 9693 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 T&z&58FE1BA(Fs$M>fQf;Yx*>W literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/LdtUtil.class b/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/LdtUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..538dea29ba52cd0a6bf3606f14f3c46fa3011148 GIT binary patch literal 11725 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 M0I@j-Z5j{x52QKUdH?_b literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/NoticeUtil.class b/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/NoticeUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..fb9f32ca1f2835c4f4224e637fdad40905dfee8b GIT binary patch literal 2373 zcma)7Yi|@)7=EUEo30COhf66SE{oU;EsGTumV%a>Eo@t4+u~Xfr@M#lw7WB#nX?Vm zkdVk1!UrXq7>#}*#)J*uOI1$0gDC+P*1btCN(XZo_x}MgNR@Z?j1~C-DnJAi+ z@xv(2BBO4Gb&Tj3)p1Tomr@X_qd$U=bY!F0j*lZ4)6nb*JAd4=Cx*@9)QM?f%Rxt4 zIiVrlmYy`H&1BKECz2WI5_9NUe_gVYz43u zl7>jmA#+=52$#GGsx_?3NHaGzV3uoi8V7_dIQcWC%X6i0Jq<0-N!)0+hSrx#oyy84 z<>jQXyh7!vGDCwy2-D{FDz2xPqL*J(g|B zBN_s2e#&LRqP9Jqb4tn23asNy(wmwQGa^}$R?%O)WVPNSRM2HK<5b+7IBBWMG%TC; zszO9?K86eUL__1Vb>Z2MzW(vi_1`EwUbt2j7H@x76&}vt@`e3l4{y&u{`U6=KiyvZ z^_%e0lT1+!xW^-al8rQp?S%>8aDIvBz)`pR#wKWpT7( z74yQ4;Q$V@fj>`}GLcg2fHTgByhLg&k+{%F#fT@|{```{@_J=&v6x6nw<4}|CZxFR z@2qu3B9(~2#JGly30m1Dst2j{aaUrN=;Swg;8PBa5^XrP7u%^XDiyI0tSjfjP zi76J7UN0)Qs&RR|hIo%D;}sGm_;A7`y(5d)uP**@{r>!XPtsI%Ze7m6i0xI%Wyh5w zKU5a3DJ{o7aXBZ-O3=_f%wCA|XU0|SEjbg<6-|%#c0QgnZQGIYaS^v{Pnx#0OuA8N ztenqUo42nuvSG7a=HO`P zTEofe9ksqtBO{&a+_RKztARu`FITT1WjWc$MGXhbQg%G@KCs4-t2wUed+W0Aoa5G} zus>gQAN8zKxhO_P`j0bL%xy+&=74B#W&!O?$9i9`wF0MQLGhzSSIT0SoE8lWz|GMqgtq8aGud=g8YAIo|lzZorPW{$V` z+~ZXrOWfl=Cq60|lj2n8Q>m}>sdV`i-ddvY7sCiqmsvm)GinTU8XM-YaTc4-bsC$E zW+l{2gIz{*ji}FYOEu$FXiL{DwkolMb=peOsi3Mrm36}JhMim!%=s>CBkx_LbC~S< zn4PoCu&ToTDwU;3GPOu_oTlw<-`hUCLn**L8s6pp;Iq-ysRuNTs^Jb0sEWA0<1V%> gV0+eh^)7b&xkN1NTkHM9V^t(lI7GXK9v^l1e|6|z1poj5 literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/PinYinUtil.class b/library/skyeye-dev/skyeye-util/target/classes/com/zhangy/skyeye/util/utils/PinYinUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..ec68d6168be7739a10ab33e1513be0983cc01151 GIT binary patch literal 1950 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 Z%SpmPJXTOpPau!CkPFuX2nP!4e*h8K@EiaD literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-websocket/pom.xml b/library/skyeye-dev/skyeye-websocket/pom.xml new file mode 100644 index 0000000..64e31de --- /dev/null +++ b/library/skyeye-dev/skyeye-websocket/pom.xml @@ -0,0 +1,24 @@ + + + + skyeye-dev + com.zhangy + 1.0.0.RELEASE + + 4.0.0 + + skyeye-websocket + + + + + + org.springframework.boot + spring-boot-starter-websocket + + + + + \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-websocket/src/main/java/com/zhangy/skyeye/service/DtWebsocketConfig.java b/library/skyeye-dev/skyeye-websocket/src/main/java/com/zhangy/skyeye/service/DtWebsocketConfig.java new file mode 100644 index 0000000..7053c4f --- /dev/null +++ b/library/skyeye-dev/skyeye-websocket/src/main/java/com/zhangy/skyeye/service/DtWebsocketConfig.java @@ -0,0 +1,18 @@ +package com.zhangy.skyeye.service; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +@ConditionalOnProperty(name = "tiamo.dev.websocket.tomcat", havingValue = "false", matchIfMissing = true) +@Configuration +@EnableWebSocket +public class DtWebsocketConfig { + + @Bean + public ServerEndpointExporter serverEndpoint() { + return new ServerEndpointExporter(); + } +} diff --git a/library/skyeye-dev/skyeye-websocket/src/main/java/com/zhangy/skyeye/websocket/config/DTStompWebSocketConfig.java b/library/skyeye-dev/skyeye-websocket/src/main/java/com/zhangy/skyeye/websocket/config/DTStompWebSocketConfig.java new file mode 100644 index 0000000..eac6d95 --- /dev/null +++ b/library/skyeye-dev/skyeye-websocket/src/main/java/com/zhangy/skyeye/websocket/config/DTStompWebSocketConfig.java @@ -0,0 +1,201 @@ +package com.zhangy.skyeye.websocket.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.ChannelRegistration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.config.annotation.WebSocketTransportRegistration; + +/** + * <配置基于STOMP的websocket> + **/ +@Configuration +@EnableWebSocketMessageBroker +public class DTStompWebSocketConfig implements WebSocketMessageBrokerConfigurer { + + /** + * 将"/stomp/ws"路径注册为STOMP端点,这个路径与发送和接收消息的目的路径有所不同,这是一个端点,客户端在订阅或发布消息到目的地址前,要连接该端点, + * 即用户发送请求url="/applicationName/stomp/ws"与STOMP server进行连接。之后再转发到订阅url; + * PS:端点的作用——客户端在订阅或发布消息到目的地址前,要连接该端点。 + * + * @param stompEndpointRegistry + */ + @Override + public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) { + + //支持原生websocket连接方式 + stompEndpointRegistry.addEndpoint("/ws") + .setAllowedOriginPatterns("*");//跨域 + + /* + * 1. 将 /serviceName/stomp/ws路径注册为STOMP的端点, + * 用户连接了这个端点后就可以进行websocket通讯,支持socketJs + * 2. setAllowedOrigins("*")表示可以跨域 + * 3. withSockJS()表示支持socktJS访问 + * 4. addInterceptors 添加自定义拦截器,这个拦截器是上一个demo自己定义的获取httpsession的拦截器 + * 5. addInterceptors 添加拦截处理,这里MyPrincipalHandshakeHandler 封装的认证用户信息 + */ + stompEndpointRegistry.addEndpoint("/stomp/ws") + .setAllowedOriginPatterns("*") + //.addInterceptors(new SessionAuthHandshakeInterceptor()) + //.setHandshakeHandler(new MyPrincipalHandshakeHandler()) + .withSockJS(); + } + + /** + * 配置消息代理 + * + * @param registry + */ + @Override + public void configureMessageBroker(MessageBrokerRegistry registry) { + /* + * enableStompBrokerRelay 配置外部的STOMP服务,需要安装额外的支持 比如rabbitmq或activemq + * 1. 配置代理域,可以配置多个,此段代码配置代理目的地的前缀为 /topicTest 或者 /userTest + * 我们就可以在配置的域上向客户端推送消息 + * 3. 可以通过 setRelayHost 配置代理监听的host,默认为localhost + * 4. 可以通过 setRelayPort 配置代理监听的端口,默认为61613 + * 5. 可以通过 setClientLogin 和 setClientPasscode 配置账号和密码 + * 6. setxxx这种设置方法是可选的,根据业务需要自行配置,也可以使用默认配置 + */ + /*registry.enableStompBrokerRelay("/topicTest","/userTest") + .setRelayHost("rabbit.someotherserver") + .setRelayPort(62623); + .setClientLogin("userName") + .setClientPasscode("password");*/ + + // 自定义调度器,用于控制心跳线程 + ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); + // 线程池线程数,心跳连接开线程 + taskScheduler.setPoolSize(1); + // 线程名前缀 + taskScheduler.setThreadNamePrefix("websocket-heartbeat-thread-"); + // 初始化 + taskScheduler.initialize(); + + /* + * spring 内置broker对象 + * 1. 配置代理域,可以配置多个,此段代码配置代理目的地的前缀为 /topicTest 或者 /userTest + * 我们就可以在配置的域上向客户端推送消息 + * 2,进行心跳设置,第一值表示server最小能保证发的心跳间隔毫秒数, 第二个值代码server希望client发的心跳间隔毫秒数 + * 3. 可以配置心跳线程调度器 setHeartbeatValue这个不能单独设置,不然不起作用,要配合setTaskScheduler才可以生效 + * 调度器我们可以自己写一个,也可以自己使用默认的调度器 new DefaultManagedTaskScheduler() + */ + registry.enableSimpleBroker("/topic", "/user") + .setHeartbeatValue(new long[]{10000, 10000}) + .setTaskScheduler(taskScheduler); + /* + * "/app" 为配置应用服务器的地址前缀,表示所有以/app 开头的客户端消息或请求 + * 都会路由到带有@MessageMapping 注解的方法中 + */ + registry.setApplicationDestinationPrefixes("/app"); + + /* + * 1. 配置一对一消息前缀, 客户端接收一对一消息需要配置的前缀 如“'/user/'+userid + '/message'”, + * 是客户端订阅一对一消息的地址 stompClient.subscribe js方法调用的地址 + * 2. 使用@SendToUser发送私信的规则不是这个参数设定,在框架内部是用UserDestinationMessageHandler处理, + * 而不是而不是 AnnotationMethodMessageHandler 或 SimpleBrokerMessageHandler + * or StompBrokerRelayMessageHandler,是在@SendToUser的URL前加“user+sessionId"组成 + */ + registry.setUserDestinationPrefix("/user"); + + /* + * 自定义路径分割符 + * 注释掉的这段代码添加的分割符为. 分割是类级别的@messageMapping和方法级别的@messageMapping的路径 + * 例如类注解路径为 “topic”,方法注解路径为“hello”,那么客户端JS stompClient.send 方法调用的路径为“/app/topic.hello” + * 注释掉此段代码后,类注解路径“/topic”,方法注解路径“/hello”,JS调用的路径为“/app/topic/hello” + */ + //registry.setPathMatcher(new AntPathMatcher(".")); + + } + + /** + * 配置发送与接收的消息参数,可以指定消息字节大小,缓存大小,发送超时时间 + * + * @param registration + */ + @Override + public void configureWebSocketTransport(WebSocketTransportRegistration registration) { + /* + * 1. setMessageSizeLimit 设置消息缓存的字节数大小 字节 + * 2. setSendBufferSizeLimit 设置websocket会话时,缓存的大小 字节 + * 3. setSendTimeLimit 设置消息发送会话超时时间,毫秒 + */ + registration.setMessageSizeLimit(502400) + .setSendBufferSizeLimit(502400) + .setSendTimeLimit(10000); + } + + /** + * 设置输入消息通道的线程数,默认线程为1,可以自己自定义线程数,最大线程数,线程存活时间 + * + * @param registration + */ + @Override + public void configureClientInboundChannel(ChannelRegistration registration) { + + /* + * 配置消息线程池 + * 1. corePoolSize 配置核心线程池,当线程数小于此配置时,不管线程中有无空闲的线程,都会产生新线程处理任务 + * 2. maxPoolSize 配置线程池最大数,当线程池数等于此配置时,不会产生新线程 + * 3. keepAliveSeconds 线程池维护线程所允许的空闲时间,单位秒 + */ + registration.taskExecutor().corePoolSize(10) + .maxPoolSize(20) + .keepAliveSeconds(60); + /* + * 添加stomp自定义拦截器,可以根据业务做一些处理 + * springframework 4.3.12 之后版本此方法废弃,代替方法 interceptors(ChannelInterceptor... interceptors) + * 消息拦截器,实现ChannelInterceptor接口 + */ +// registration.interceptors(webSocketChannelInterceptor()); + } + + /** + * 设置输出消息通道的线程数,默认线程为1,可以自己自定义线程数,最大线程数,线程存活时间 + * + * @param registration + */ + @Override + public void configureClientOutboundChannel(ChannelRegistration registration) { + registration.taskExecutor().corePoolSize(10) + .maxPoolSize(20) + .keepAliveSeconds(60); + //registration.interceptors(new WebSocketChannelInterceptor()); + } + + /** + * 添加自定义的消息转换器,spring 提供多种默认的消息转换器, + * 返回false,不会添加消息转换器,返回true,会添加默认的消息转换器,当然也可以把自己写的消息转换器添加到转换链中 + * + * @param list + * @return + */ + /*@Override + public boolean configureMessageConverters(List list) { + return true; + }*/ + + /** + * 自定义控制器方法的参数类型,有兴趣可以百度google HandlerMethodArgumentResolver这个的用法 + * @param list + */ + /*@Override + public void addArgumentResolvers(List list) { + + }*/ + + /** + * 自定义控制器方法返回值类型,有兴趣可以百度google HandlerMethodReturnValueHandler这个的用法 + * @param list + */ + /*@Override + public void addReturnValueHandlers(List list) { + + }*/ + + +} \ No newline at end of file diff --git a/library/skyeye-dev/skyeye-websocket/src/main/resources/META-INF/spring.factories b/library/skyeye-dev/skyeye-websocket/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..cd050d7 --- /dev/null +++ b/library/skyeye-dev/skyeye-websocket/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.zhangy.skyeye.websocket.config.DTStompWebSocketConfig diff --git a/library/skyeye-dev/skyeye-websocket/target/classes/META-INF/spring.factories b/library/skyeye-dev/skyeye-websocket/target/classes/META-INF/spring.factories new file mode 100644 index 0000000..cd050d7 --- /dev/null +++ b/library/skyeye-dev/skyeye-websocket/target/classes/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.zhangy.skyeye.websocket.config.DTStompWebSocketConfig diff --git a/library/skyeye-dev/skyeye-websocket/target/classes/com/zhangy/skyeye/service/DtWebsocketConfig.class b/library/skyeye-dev/skyeye-websocket/target/classes/com/zhangy/skyeye/service/DtWebsocketConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..1a3336209b42042040ee7197857051a30700884c GIT binary patch literal 972 zcmb7CZEF)j5PmlArZJ6GtF3SKTdSA_5x-OfTO$^t6(bS#)85@C+2(FH>~7M=U!|W4 z3jP3plsI=O8u36pxSiQ~d3NTR`Tpa}HvkW?RYw`utGH1|A(c0)xW!O;q_pyn8H(FG zeTLG$i6p~nS84fjngr6m5kX9rwXO+8+!t1*_cLS3kCbD$*9}d=KaPYR&bb@U+n z?M#J|KlN{A;7mA{e&6VU8tyVQQ>U~Y9ZihVp5b77r)%txyNOkLIItp-$HtENu?+Yk zH^Y;bJ1=x3Y{YwiKy*$f#(HT9eB7m=Q~T5l<ZCUo z0azi8XvKLn2_#LvpMe3juPD4bMe!5a3izGhTFS4T<*!mqir&g%FJ$K$QtK9qxJdt{ V4`2?LvF>mMSKng;o8-L)`~*`b6kz}W literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-websocket/target/classes/com/zhangy/skyeye/websocket/config/DTStompWebSocketConfig.class b/library/skyeye-dev/skyeye-websocket/target/classes/com/zhangy/skyeye/websocket/config/DTStompWebSocketConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..854d4364c5663197856051f315ef10da6681f8f8 GIT binary patch literal 4423 zcmb_fX?GJ<7=CV>G$9!zO&2yHX# zG>A*M?8jITqgVKRVShzK#|$Fz9P2yxAi>wYK!L^10nUG#S%6hI7fLfr5p zE~efT;$|~^zuXJpExawnEg{|s;9aNzB#;y$B?R|j-iNdg8HScYP1o!T49#8LF$Pb> zNO6We6PnJa3b_O~qiP~cBjE`nsb*uUsfq9MpvTT=7Q?_q(#XkoGOC_lm9529zRKlg zp0JGMBDdwFq0eh+c_gaXMlL_c6N)n)afSyNI!&I|ESsCo{HUJF8=7vD+N)g?hMAVF zys7Ewc~i~tWy4$)n&o=cs;(QhYHNlr*Xg+KC^lCIgk>F;fUl^pOfii8Umy&jNp5G1 z)Ql>)l0jrcXUY14$tSsGscAlJ8jIXy7;!f)=d2=oWlPKDE557STcPe)M>8f@Q!|EouQ*xYct$FF#u;I_=4#2)fG`}Y+7-!a}1CuY=+6I-1i3yPju2F$!jqU(!UOA9OF&lMCvS%CP@>LASLW zk7<@hePF0sd6esCT$vKM%~x!>rbr`B=@-mWuo$LYH*Oi5QC+m5Y8uoP$bf|B@dA~j zpe$#pD^XhzJ%pN^ylnZPNm#%l1MBf2D-I?D;F$o`cROtgk>LAB&_0&g!k}1HE3DQ z=OuiA4<+2iJs<8%_y`Xqd@RH#c;LgQ5X<=w3myK0AKupaR$eUwbH?O#dt6`2I z5s})Hm%(;FfNHu}-G)sHqG2Y-h{;espVg91hacgVt?ABdDNi`1Z0u>H<(e9F*$`zi zOZ{^LD#NT>cDnWecat}RoOa8O?e)RxJ*YO}O4U_H6IC~%#5+9 zQ@lCctUQ6I3FR*@eYG@Ut}^R$n|%U5!`vG30U`(-#y%V&*^M)VI)Hu*;iSW+vxHb? zL)bKTl32;K%gg9PP<#n5mnr^6>Y8aR_6K&wA0sf?=P4rC7nX|H-B-jjz1|Y@JxbgY z4k<;ndjAZ@o7)kdiF<@BqMg=tRE_AQHGAiJ!=WPf)zI!ifKV>OPrtQy<0{%PiM^P^ zS=_)N;&=nMFoiT`aoaKDXo*$Tj2KSg6=LqERj2VPu`e5R$}#8+UMm}<&{O!ltv9^C zhyy|#Y&}72o~>aMhKH8iC2jZc4DKULS2z*MlJnZCsBOgW+?w;wI#{ohzf19*En{`` z7I7#PDB^Iay@(^B!6J@sK>G$ke2WmiLp#2&LF=fZbr9O%dbIO9L;Hcyek8P?2<_+X WqBY?HS=fY&6b?|pnkcJ82H`&tlT5q- literal 0 HcmV?d00001 diff --git a/library/skyeye-dev/skyeye-websocket/target/maven-archiver/pom.properties b/library/skyeye-dev/skyeye-websocket/target/maven-archiver/pom.properties new file mode 100644 index 0000000..b2b4128 --- /dev/null +++ b/library/skyeye-dev/skyeye-websocket/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=skyeye-websocket +groupId=com.zhangy +version=1.0.0.RELEASE diff --git a/library/skyeye-dev/skyeye-websocket/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/library/skyeye-dev/skyeye-websocket/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..85dd24a --- /dev/null +++ b/library/skyeye-dev/skyeye-websocket/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,2 @@ +com\zhangy\skyeye\service\DtWebsocketConfig.class +com\zhangy\skyeye\websocket\config\DTStompWebSocketConfig.class diff --git a/library/skyeye-dev/skyeye-websocket/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/library/skyeye-dev/skyeye-websocket/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..d7f8515 --- /dev/null +++ b/library/skyeye-dev/skyeye-websocket/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,2 @@ +D:\logisen\ddd\skyeye-dev\skyeye-websocket\src\main\java\com\zhangy\skyeye\websocket\config\DTStompWebSocketConfig.java +D:\logisen\ddd\skyeye-dev\skyeye-websocket\src\main\java\com\zhangy\skyeye\service\DtWebsocketConfig.java diff --git a/library/skyeye-dev/skyeye-websocket/target/skyeye-websocket-1.0.0.RELEASE.jar b/library/skyeye-dev/skyeye-websocket/target/skyeye-websocket-1.0.0.RELEASE.jar new file mode 100644 index 0000000000000000000000000000000000000000..f2626c1ce1ad37f9f0eb84419191830cea982bb6 GIT binary patch literal 4825 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 literal 0 HcmV?d00001 diff --git a/library/skyeye/1.0.0.RELEASE/skyeye-1.0.0.RELEASE.pom b/library/skyeye/1.0.0.RELEASE/skyeye-1.0.0.RELEASE.pom new file mode 100644 index 0000000..54c7172 --- /dev/null +++ b/library/skyeye/1.0.0.RELEASE/skyeye-1.0.0.RELEASE.pom @@ -0,0 +1,257 @@ + + + + 4.0.0 + + com.zhangy + skyeye + 1.0.0.RELEASE + pom + Skyeye parent project + + + org.springframework.boot + spring-boot-starter-parent + 2.7.8 + + + + 1.0.0.RELEASE + 1.8 + UTF-8 + 2.7.8 + 2021.0.5 + + 1.2.75 + 2.0.8 + 8.0.21 + 5.3.8 + 3.4.1 + 1.1.22 + 1.18.16 + + 2.2.0 + + + + 3.11.0 + 3.2.0 + 3.13.6 + 1.9.4 + 29.0-jre + 2.6 + + + 1.7.1 + 3.1.0 + 1.3.3 + + + 1.3.4 + + + + + + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + + + + org.redisson + redisson + ${redisson.version} + + + + + + + + cn.hutool + hutool-all + ${hutool-all.version} + + + + + commons-beanutils + commons-beanutils + ${commons-beanutils.version} + + + + + commons-fileupload + commons-fileupload + 1.4 + + + commons-io + commons-io + + + + + + + com.auth0 + java-jwt + ${java-jwt.version} + + + + + + + + com.github.xiaoymin + knife4j-spring-boot-starter + ${knife4j.version} + + + + + com.github.xiaoymin + knife4j-micro-spring-boot-starter + ${knife4j.version} + + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus.version} + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + mysql + mysql-connector-java + ${mysql-connector-java.version} + runtime + + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + UTF-8 + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + + + src/main/resources + true + + + src/main/java + + **/*.xml + **/*.json + **/*.ftl + + + + + + + + + releases + Nexue Release Repository + http://127.0.0.1:8081/repository/maven-releases/ + + + + snapshots + Nexue Snapshot Repository + http://127.0.0.1:8081/repository/maven-snapshots/ + + + + + \ No newline at end of file diff --git a/library/skyeye/1.0.0.RELEASE/skyeye-1.0.0.RELEASE.pom.lastUpdated b/library/skyeye/1.0.0.RELEASE/skyeye-1.0.0.RELEASE.pom.lastUpdated new file mode 100644 index 0000000..09e7ce1 --- /dev/null +++ b/library/skyeye/1.0.0.RELEASE/skyeye-1.0.0.RELEASE.pom.lastUpdated @@ -0,0 +1,4 @@ +#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. +#Mon Jan 12 18:02:06 CST 2026 +https\://repo.maven.apache.org/maven2/.lastUpdated=1768212126438 +https\://repo.maven.apache.org/maven2/.error=