From 27ecb12cccb37bf3d300e3eb179a622121e30349 Mon Sep 17 00:00:00 2001 From: sunyugang Date: Thu, 12 Sep 2024 15:38:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=EF=BC=8C?= =?UTF-8?q?=E8=A7=A3=E5=8E=8B=20=E6=89=A7=E8=A1=8Cexe=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 50 ++ META-INF/MANIFEST.MF | 92 +++ README.md | Bin 6598 -> 40 bytes pom.xml | 299 ++++++++++ .../microservice/MicroserviceApplication.java | 28 + .../common/account/AccountCredentials.java | 29 + .../account/CustomAuthenticationProvider.java | 109 ++++ .../account/CustomGrantedAuthority.java | 25 + .../account/JwtAuthenticationFilter.java | 28 + .../common/account/JwtLoginFilter.java | 146 +++++ .../account/TokenAuthenticationProvider.java | 125 ++++ .../common/config/ConfigConstant.java | 36 ++ .../common/config/CorsConfig.java | 32 ++ .../config/MetricsRepositoryMethodConfig.java | 18 + .../microservice/common/config/MvcConfig.java | 37 ++ .../config/RedisCacheAutoConfiguration.java | 30 + .../common/config/RedisConfig.java | 196 +++++++ .../config/RedisKeyExpirationListener.java | 42 ++ .../microservice/common/config/RedisUtil.java | 533 ++++++++++++++++++ .../common/config/WebSecurityConfig.java | 64 +++ .../encapsulation/EncapsulationObject.java | 59 ++ .../encapsulation/OutputEncapsulation.java | 94 +++ .../encapsulation/PromptMessageEnum.java | 65 +++ .../common/tool/FileServerManageTool.java | 92 +++ .../microservice/common/tool/JackSonUtil.java | 139 +++++ .../microservice/common/tool/TokenUtil.java | 45 ++ .../common/tool/VarcharArrayType.java | 30 + .../controller/DataFileController.java | 109 ++++ .../controller/FileServerController.java | 119 ++++ .../controller/MapServiceController.java | 158 ++++++ .../controller/SysManageController.java | 56 ++ .../controller/SysMenuController.java | 108 ++++ .../controller/SysUserController.java | 260 +++++++++ .../xkrs/microservice/dao/DataFileDao.java | 60 ++ .../xkrs/microservice/dao/MapServiceDao.java | 59 ++ .../microservice/dao/SysAuthorityDao.java | 27 + .../com/xkrs/microservice/dao/SysMenuDao.java | 35 ++ .../com/xkrs/microservice/dao/SysRoleDao.java | 61 ++ .../com/xkrs/microservice/dao/SysUserDao.java | 111 ++++ .../model/entity/DataFileEntity.java | 215 +++++++ .../model/entity/MapServiceEntity.java | 296 ++++++++++ .../model/entity/RelRoleAuthorityEntity.java | 60 ++ .../model/entity/RelUserRoleEntity.java | 60 ++ .../model/entity/SysAuthorityEntity.java | 84 +++ .../model/entity/SysMenuEntity.java | 187 ++++++ .../model/entity/SysRoleEntity.java | 84 +++ .../model/entity/SysUserEntity.java | 299 ++++++++++ .../microservice/model/qo/DataFileQo.java | 152 +++++ .../microservice/model/qo/MapServiceQo.java | 231 ++++++++ .../qo/StatisticalDataIndependentQo.java | 130 +++++ .../model/qo/StatisticalDataQo.java | 135 +++++ .../xkrs/microservice/model/qo/SysMenuQo.java | 101 ++++ .../xkrs/microservice/model/qo/SysUserQo.java | 206 +++++++ .../microservice/model/qo/ZipFileInfoQo.java | 141 +++++ .../model/validation/DataFileQoInsert.java | 9 + .../model/validation/DataFileQoUpdate.java | 9 + .../model/validation/MapServiceQoInsert.java | 9 + .../model/validation/MapServiceUpdate.java | 9 + .../StatisticalDataIndependentQoInsert.java | 9 + .../StatisticalDataIndependentQoUpdate.java | 9 + .../validation/StatisticalDataQoInsert.java | 9 + .../validation/StatisticalDataQoUpdate.java | 9 + .../model/validation/SysMenuQoInsert.java | 9 + .../model/validation/SysMenuQoUpdate.java | 9 + .../model/validation/SysUserQoInsert.java | 8 + .../model/validation/SysUserQoUpdate.java | 8 + .../model/validation/ZipFileQoInsert.java | 9 + .../model/validation/ZipFileQoUpdate.java | 9 + .../model/vo/AliWeatherAllVo.java | 353 ++++++++++++ .../model/vo/AliWeatherBaseVo.java | 248 ++++++++ .../model/vo/FileServerResultVo.java | 67 +++ .../model/vo/FileServiceResDetailVo.java | 170 ++++++ .../microservice/model/vo/HardDiskInfoVo.java | 61 ++ .../model/vo/MapLayerGroupVo.java | 52 ++ .../xkrs/microservice/model/vo/ResultVo.java | 44 ++ .../xkrs/microservice/model/vo/ShpCityVo.java | 108 ++++ .../microservice/model/vo/ShpCountyVo.java | 131 +++++ .../microservice/model/vo/ShpProvinceVo.java | 84 +++ .../xkrs/microservice/model/vo/SysUserVo.java | 257 +++++++++ .../microservice/service/DataFileService.java | 82 +++ .../service/FileServerService.java | 64 +++ .../service/MapServiceService.java | 111 ++++ .../service/SysAuthorityService.java | 19 + .../microservice/service/SysMenuService.java | 52 ++ .../microservice/service/SysRoleService.java | 19 + .../microservice/service/SysUserService.java | 105 ++++ .../service/impl/DataFileServiceImpl.java | 281 +++++++++ .../service/impl/FileServerServiceImpl.java | 151 +++++ .../impl/MapServiceServiceServiceImpl.java | 311 ++++++++++ .../service/impl/SysAuthorityServiceImpl.java | 29 + .../service/impl/SysMenuServiceImpl.java | 143 +++++ .../service/impl/SysRoleServiceImpl.java | 29 + .../service/impl/SysUserServiceImpl.java | 242 ++++++++ .../xkrs/microservice/util/AliMapWeather.java | 173 ++++++ .../xkrs/microservice/util/AliMsgUtil.java | 42 ++ .../microservice/util/CopyPropertiesUtil.java | 52 ++ .../xkrs/microservice/util/DateTimeUtil.java | 211 +++++++ .../microservice/util/EncryptDecryptUtil.java | 96 ++++ .../com/xkrs/microservice/util/FileUtil.java | 80 +++ .../xkrs/microservice/util/HardDiskInfo.java | 65 +++ .../com/xkrs/microservice/util/IpUtil.java | 43 ++ .../xkrs/microservice/util/MbTilesUtils.java | 103 ++++ .../xkrs/microservice/util/NumberUtil.java | 106 ++++ .../microservice/util/OpenGeoGisUtil.java | 117 ++++ .../microservice/util/RandomStringUtil.java | 62 ++ .../xkrs/microservice/util/RequestUtil.java | 188 ++++++ .../xkrs/microservice/util/SnowFlakeUtil.java | 124 ++++ .../xkrs/microservice/util/StringUtil.java | 14 + .../com/xkrs/microservice/util/UdpUtil.java | 13 + .../microservice/util/VersionNumberUtil.java | 34 ++ .../com/xkrs/microservice/util/ZipUtil.java | 172 ++++++ src/main/resources/META-INF/MANIFEST.MF | 92 +++ src/main/resources/application-dev.properties | 56 ++ .../resources/application-test.properties | 49 ++ src/main/resources/application.properties | 64 +++ src/main/resources/banner.txt | 6 + src/main/resources/i18n/messages.properties | 137 +++++ .../resources/i18n/messages_en_US.properties | 137 +++++ .../resources/i18n/messages_zh_CN.properties | 137 +++++ src/main/resources/log4j2.xml | 97 ++++ src/test/java/HelloWorld.java | 4 + src/test/java/ProcessBuilderDemo.java | 31 + src/test/java/RunTimeDemo.java | 29 + 123 files changed, 11858 insertions(+) create mode 100644 .gitignore create mode 100644 META-INF/MANIFEST.MF create mode 100644 pom.xml create mode 100644 src/main/java/com/xkrs/microservice/MicroserviceApplication.java create mode 100644 src/main/java/com/xkrs/microservice/common/account/AccountCredentials.java create mode 100644 src/main/java/com/xkrs/microservice/common/account/CustomAuthenticationProvider.java create mode 100644 src/main/java/com/xkrs/microservice/common/account/CustomGrantedAuthority.java create mode 100644 src/main/java/com/xkrs/microservice/common/account/JwtAuthenticationFilter.java create mode 100644 src/main/java/com/xkrs/microservice/common/account/JwtLoginFilter.java create mode 100644 src/main/java/com/xkrs/microservice/common/account/TokenAuthenticationProvider.java create mode 100644 src/main/java/com/xkrs/microservice/common/config/ConfigConstant.java create mode 100644 src/main/java/com/xkrs/microservice/common/config/CorsConfig.java create mode 100644 src/main/java/com/xkrs/microservice/common/config/MetricsRepositoryMethodConfig.java create mode 100644 src/main/java/com/xkrs/microservice/common/config/MvcConfig.java create mode 100644 src/main/java/com/xkrs/microservice/common/config/RedisCacheAutoConfiguration.java create mode 100644 src/main/java/com/xkrs/microservice/common/config/RedisConfig.java create mode 100644 src/main/java/com/xkrs/microservice/common/config/RedisKeyExpirationListener.java create mode 100644 src/main/java/com/xkrs/microservice/common/config/RedisUtil.java create mode 100644 src/main/java/com/xkrs/microservice/common/config/WebSecurityConfig.java create mode 100644 src/main/java/com/xkrs/microservice/common/encapsulation/EncapsulationObject.java create mode 100644 src/main/java/com/xkrs/microservice/common/encapsulation/OutputEncapsulation.java create mode 100644 src/main/java/com/xkrs/microservice/common/encapsulation/PromptMessageEnum.java create mode 100644 src/main/java/com/xkrs/microservice/common/tool/FileServerManageTool.java create mode 100644 src/main/java/com/xkrs/microservice/common/tool/JackSonUtil.java create mode 100644 src/main/java/com/xkrs/microservice/common/tool/TokenUtil.java create mode 100644 src/main/java/com/xkrs/microservice/common/tool/VarcharArrayType.java create mode 100644 src/main/java/com/xkrs/microservice/controller/DataFileController.java create mode 100644 src/main/java/com/xkrs/microservice/controller/FileServerController.java create mode 100644 src/main/java/com/xkrs/microservice/controller/MapServiceController.java create mode 100644 src/main/java/com/xkrs/microservice/controller/SysManageController.java create mode 100644 src/main/java/com/xkrs/microservice/controller/SysMenuController.java create mode 100644 src/main/java/com/xkrs/microservice/controller/SysUserController.java create mode 100644 src/main/java/com/xkrs/microservice/dao/DataFileDao.java create mode 100644 src/main/java/com/xkrs/microservice/dao/MapServiceDao.java create mode 100644 src/main/java/com/xkrs/microservice/dao/SysAuthorityDao.java create mode 100644 src/main/java/com/xkrs/microservice/dao/SysMenuDao.java create mode 100644 src/main/java/com/xkrs/microservice/dao/SysRoleDao.java create mode 100644 src/main/java/com/xkrs/microservice/dao/SysUserDao.java create mode 100644 src/main/java/com/xkrs/microservice/model/entity/DataFileEntity.java create mode 100644 src/main/java/com/xkrs/microservice/model/entity/MapServiceEntity.java create mode 100644 src/main/java/com/xkrs/microservice/model/entity/RelRoleAuthorityEntity.java create mode 100644 src/main/java/com/xkrs/microservice/model/entity/RelUserRoleEntity.java create mode 100644 src/main/java/com/xkrs/microservice/model/entity/SysAuthorityEntity.java create mode 100644 src/main/java/com/xkrs/microservice/model/entity/SysMenuEntity.java create mode 100644 src/main/java/com/xkrs/microservice/model/entity/SysRoleEntity.java create mode 100644 src/main/java/com/xkrs/microservice/model/entity/SysUserEntity.java create mode 100644 src/main/java/com/xkrs/microservice/model/qo/DataFileQo.java create mode 100644 src/main/java/com/xkrs/microservice/model/qo/MapServiceQo.java create mode 100644 src/main/java/com/xkrs/microservice/model/qo/StatisticalDataIndependentQo.java create mode 100644 src/main/java/com/xkrs/microservice/model/qo/StatisticalDataQo.java create mode 100644 src/main/java/com/xkrs/microservice/model/qo/SysMenuQo.java create mode 100644 src/main/java/com/xkrs/microservice/model/qo/SysUserQo.java create mode 100644 src/main/java/com/xkrs/microservice/model/qo/ZipFileInfoQo.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/DataFileQoInsert.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/DataFileQoUpdate.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/MapServiceQoInsert.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/MapServiceUpdate.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/StatisticalDataIndependentQoInsert.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/StatisticalDataIndependentQoUpdate.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/StatisticalDataQoInsert.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/StatisticalDataQoUpdate.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/SysMenuQoInsert.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/SysMenuQoUpdate.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/SysUserQoInsert.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/SysUserQoUpdate.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/ZipFileQoInsert.java create mode 100644 src/main/java/com/xkrs/microservice/model/validation/ZipFileQoUpdate.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/AliWeatherAllVo.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/AliWeatherBaseVo.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/FileServerResultVo.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/FileServiceResDetailVo.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/HardDiskInfoVo.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/MapLayerGroupVo.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/ResultVo.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/ShpCityVo.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/ShpCountyVo.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/ShpProvinceVo.java create mode 100644 src/main/java/com/xkrs/microservice/model/vo/SysUserVo.java create mode 100644 src/main/java/com/xkrs/microservice/service/DataFileService.java create mode 100644 src/main/java/com/xkrs/microservice/service/FileServerService.java create mode 100644 src/main/java/com/xkrs/microservice/service/MapServiceService.java create mode 100644 src/main/java/com/xkrs/microservice/service/SysAuthorityService.java create mode 100644 src/main/java/com/xkrs/microservice/service/SysMenuService.java create mode 100644 src/main/java/com/xkrs/microservice/service/SysRoleService.java create mode 100644 src/main/java/com/xkrs/microservice/service/SysUserService.java create mode 100644 src/main/java/com/xkrs/microservice/service/impl/DataFileServiceImpl.java create mode 100644 src/main/java/com/xkrs/microservice/service/impl/FileServerServiceImpl.java create mode 100644 src/main/java/com/xkrs/microservice/service/impl/MapServiceServiceServiceImpl.java create mode 100644 src/main/java/com/xkrs/microservice/service/impl/SysAuthorityServiceImpl.java create mode 100644 src/main/java/com/xkrs/microservice/service/impl/SysMenuServiceImpl.java create mode 100644 src/main/java/com/xkrs/microservice/service/impl/SysRoleServiceImpl.java create mode 100644 src/main/java/com/xkrs/microservice/service/impl/SysUserServiceImpl.java create mode 100644 src/main/java/com/xkrs/microservice/util/AliMapWeather.java create mode 100644 src/main/java/com/xkrs/microservice/util/AliMsgUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/CopyPropertiesUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/DateTimeUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/EncryptDecryptUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/FileUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/HardDiskInfo.java create mode 100644 src/main/java/com/xkrs/microservice/util/IpUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/MbTilesUtils.java create mode 100644 src/main/java/com/xkrs/microservice/util/NumberUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/OpenGeoGisUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/RandomStringUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/RequestUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/SnowFlakeUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/StringUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/UdpUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/VersionNumberUtil.java create mode 100644 src/main/java/com/xkrs/microservice/util/ZipUtil.java create mode 100644 src/main/resources/META-INF/MANIFEST.MF create mode 100644 src/main/resources/application-dev.properties create mode 100644 src/main/resources/application-test.properties create mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/banner.txt create mode 100644 src/main/resources/i18n/messages.properties create mode 100644 src/main/resources/i18n/messages_en_US.properties create mode 100644 src/main/resources/i18n/messages_zh_CN.properties create mode 100644 src/main/resources/log4j2.xml create mode 100644 src/test/java/HelloWorld.java create mode 100644 src/test/java/ProcessBuilderDemo.java create mode 100644 src/test/java/RunTimeDemo.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e586a6d --- /dev/null +++ b/.gitignore @@ -0,0 +1,50 @@ +# ---> Java +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ + diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 0000000..2377d93 --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,92 @@ +Manifest-Version: 1.0 +Main-Class: +Class-Path: antlr-2.7.7.jar org.w3.xlink-28.0.jar okhttp-3.14.9.jar ejml + -ddense-0.41.jar slf4j-api-1.7.36.jar httpclient-4.5.13.jar hibernate-s + patial-5.6.15.Final.jar gt-metadata-28.0.jar tea-util-0.2.16.jar reacto + r-netty-http-1.0.25.jar spring-boot-starter-webflux-2.6.14.jar spring-b + oot-2.6.14.jar netty-all-4.1.86.Final.jar jakarta.websocket-api-1.1.2.j + ar netty-codec-http-4.1.85.Final.jar netty-resolver-dns-native-macos-4. + 1.85.Final-osx-x86_64.jar postgresql-42.3.8.jar dom4j-2.0.3.jar net.ope + ngis.ows-28.0.jar httpmime-4.5.14.jar log4j-jul-2.17.2.jar GeographicLi + b-Java-1.49.jar prefixmap-2.0.jar snakeyaml-1.29.jar spring-boot-starte + r-undertow-2.6.14.jar spring-jdbc-5.3.24.jar micrometer-registry-promet + heus-1.10.2.jar netty-resolver-dns-4.1.85.Final.jar uom-lib-common-2.0. + jar netty-codec-xml-4.1.85.Final.jar spring-orm-5.3.24.jar spring-secur + ity-core-5.6.9.jar spring-boot-starter-data-redis-2.6.14.jar spring-dat + a-commons-2.6.10.jar checker-qual-3.5.0.jar openapiutil-0.2.0.jar sprin + g-expression-5.3.24.jar spring-aspects-5.3.24.jar ejml-core-0.41.jar co + mmons-io-2.4.jar spring-boot-starter-json-2.6.14.jar jackson-datatype-j + sr310-2.13.4.jar spring-boot-starter-reactor-netty-2.6.14.jar netty-tra + nsport-rxtx-4.1.85.Final.jar si-quantity-2.0.1.jar error_prone_annotati + ons-2.10.0.jar gt-main-28.0.jar HdrHistogram-2.1.12.jar reactor-core-3. + 4.25.jar undertow-core-2.2.20.Final.jar spring-security-config-5.6.9.ja + r jakarta.persistence-api-2.2.3.jar commons-codec-1.15.jar netty-resolv + er-dns-classes-macos-4.1.85.Final.jar jgridshift-core-1.3.jar spring-bo + ot-actuator-autoconfigure-2.6.14.jar spring-boot-starter-websocket-2.6. + 14.jar endpoint-util-0.0.7.jar org.jacoco.agent-0.8.4-runtime.jar netty + -transport-4.1.85.Final.jar netty-transport-native-kqueue-4.1.85.Final- + osx-aarch_64.jar caffeine-2.9.3.jar unit-api-2.0.jar netty-codec-memcac + he-4.1.85.Final.jar commons-text-1.10.0.jar tea-openapi-0.2.8.jar aspec + tjweaver-1.9.7.jar commons-dbcp-1.4.jar netty-codec-4.1.85.Final.jar js + oup-1.15.3.jar lettuce-core-6.1.10.RELEASE.jar jakarta.transaction-api- + 1.3.3.jar jackson-annotations-2.13.4.jar dysmsapi20170525-2.0.23.jar ne + tty-transport-native-kqueue-4.1.85.Final-osx-x86_64.jar jts-core-1.18.2 + .jar jandex-2.4.2.Final.jar LatencyUtils-2.0.3.jar netty-codec-haproxy- + 4.1.85.Final.jar netty-transport-native-epoll-4.1.85.Final-linux-aarch_ + 64.jar spring-boot-starter-jdbc-2.6.14.jar jakarta.annotation-api-1.3.5 + .jar spring-boot-starter-security-2.6.14.jar spring-boot-autoconfigure- + 2.6.14.jar HikariCP-4.0.3.jar httpclient5-5.1.4.jar spring-webmvc-5.3.2 + 4.jar jakarta.validation-api-2.0.2.jar ini4j-0.5.4.jar jaxb-impl-2.3.0. + jar org.eclipse.emf.ecore.xmi-2.15.0.jar netty-codec-smtp-4.1.85.Final. + jar hibernate-core-5.6.14.Final.jar alibabacloud-gateway-spi-0.0.1.jar + hutool-all-5.8.10.jar netty-resolver-dns-native-macos-4.1.85.Final-osx- + aarch_64.jar mysql-connector-j-8.0.31.jar hibernate-types-55-2.15.2.jar + log4j-api-2.17.2.jar wildfly-common-1.5.4.Final.jar jakarta.activation + -api-1.2.2.jar netty-transport-udt-4.1.85.Final.jar netty-handler-4.1.8 + 5.Final.jar javax.inject-1.jar micrometer-core-1.8.12.jar gt-shapefile- + 28.0.jar spring-context-5.3.24.jar gt-jdbc-postgis-28.0.jar hibernate-c + ommons-annotations-5.1.2.Final.jar spring-oxm-5.3.24.jar wildfly-client + -config-1.0.1.Final.jar netty-codec-stomp-4.1.85.Final.jar spring-boot- + starter-data-jpa-2.6.14.jar undertow-servlet-2.2.20.Final.jar tea-1.2.0 + .jar jackson-databind-2.13.4.2.jar httpcore5-5.1.5.jar spring-security- + crypto-5.6.9.jar spring-web-5.3.24.jar jakarta.servlet-api-4.0.4.jar co + mmons-pool2-2.11.1.jar simpleclient_common-0.12.0.jar jboss-threads-3.1 + .0.Final.jar spring-data-jpa-2.6.10.jar httpcore-4.4.15.jar gt-referenc + ing-28.0.jar systems-common-2.0.2.jar xnio-nio-3.8.7.Final.jar org.ecli + pse.emf.ecore-2.15.0.jar spring-boot-starter-2.6.14.jar undertow-websoc + kets-jsr-2.2.20.Final.jar netty-handler-ssl-ocsp-4.1.86.Final.jar jsr30 + 5-3.0.2.jar netty-common-4.1.85.Final.jar sqlite-jdbc-3.36.0.3.jar spri + ng-websocket-5.3.24.jar jaxb-core-2.3.0.jar javax.activation-api-1.2.0. + jar bcprov-jdk15on-1.65.jar spring-boot-starter-actuator-2.6.14.jar hib + ernate-validator-7.0.5.Final.jar jakarta.activation-1.2.2.jar spring-tx + -5.3.24.jar txw2-2.3.7.jar gt-http-28.0.jar simpleclient-0.12.0.jar log + 4j-web-2.19.0.jar gt-jdbc-28.0.jar org.eclipse.emf.common-2.15.0.jar is + tack-commons-runtime-3.0.12.jar jul-to-slf4j-1.7.36.jar spring-boot-act + uator-2.6.14.jar yauaa-7.9.0.jar spring-data-redis-2.6.10.jar netty-buf + fer-4.1.85.Final.jar classmate-1.5.1.jar netty-handler-proxy-4.1.85.Fin + al.jar tomcat-embed-el-9.0.69.jar tea-xml-0.1.5.jar simpleclient_tracer + _otel_agent-0.12.0.jar spring-aop-5.3.24.jar bcpkix-jdk15on-1.65.jar sp + ring-beans-5.3.24.jar simpleclient_tracer_otel-0.12.0.jar jai_core-1.1. + 3.jar indriya-2.0.2.jar netty-codec-http2-4.1.85.Final.jar jackson-data + type-jdk8-2.13.4.jar mbtiles4j-1.2.0.jar netty-transport-classes-epoll- + 4.1.85.Final.jar xnio-api-3.8.7.Final.jar log4j-slf4j-impl-2.17.2.jar l + og4j-core-2.17.2.jar netty-codec-redis-4.1.85.Final.jar disruptor-3.4.4 + .jar spring-jcl-5.3.24.jar commons-pool-1.6.jar spring-core-5.3.24.jar + spring-boot-starter-aop-2.6.14.jar httpcore5-h2-5.1.5.jar netty-resolve + r-4.1.85.Final.jar commons-lang3-3.12.0.jar gson-2.8.9.jar netty-codec- + dns-4.1.85.Final.jar jaxb-runtime-2.3.7.jar reactive-streams-1.0.4.jar + spring-security-web-5.6.9.jar spring-webflux-5.3.24.jar jackson-core-2. + 13.4.jar jackson-module-jaxb-annotations-2.13.4.jar netty-transport-nat + ive-unix-common-4.1.85.Final.jar simpleclient_tracer_common-0.12.0.jar + byte-buddy-1.11.22.jar java-jwt-4.2.2.jar si-units-2.0.1.jar spring-boo + t-starter-log4j2-2.6.14.jar spring-boot-devtools-2.6.14.jar spring-data + -keyvalue-2.6.10.jar reactor-netty-core-1.0.25.jar jakarta.xml.bind-api + -2.3.3.jar spring-messaging-5.3.24.jar commons-collections4-4.4.jar net + ty-codec-mqtt-4.1.85.Final.jar credentials-java-0.2.4.jar re2j-1.6.jar + spring-boot-starter-web-2.6.14.jar jackson-module-parameter-names-2.13. + 4.jar jaxb-api-2.3.1.jar netty-transport-native-epoll-4.1.85.Final-linu + x-x86_64.jar okio-1.17.2.jar geolatte-geom-1.8.2.jar netty-codec-socks- + 4.1.85.Final.jar jboss-logging-3.4.3.Final.jar netty-transport-sctp-4.1 + .85.Final.jar spring-context-support-5.3.24.jar gt-opengis-28.0.jar net + ty-transport-classes-kqueue-4.1.85.Final.jar + diff --git a/README.md b/README.md index 4c48ae908e82a91684b57af5ab258ab7c40727f6..cf80a00d770633f7b01cd35f438f27c888697c8d 100644 GIT binary patch literal 40 ycmV+@0N4K`An32O=9rEO3h9BR=7gW+v9aX1oaeK<=ewWfpStIvfaalw=AO3t%^GO{ literal 6598 zcmeHLXH-*bvktu}1PE0?nxY^bMXL1P2?7B`fgmje0)`gpRaA0 z>Am+}6>ju=ew^cX?_KNuzi(FdUTeSmnXJq+Gw;l!qmG9U0uTa-0RR9SAXC2;qlE(i z5aR;?)YvB`@^D92sH3Yn*ux3xV#enVb0~b(rPV9|R6JDqEi4-5(Tw7j4(}aUmktp&`j;}_FI2xNN#gf}=sx=)4pXv-G$dh3w2~d|dD8@V znDHebw_bfpFTwNjo#YQP9ER6v-d!1)5DR-4NrS0tOfe8-@c&YwF$XS8K2f}Rh_96( zMkv9&_0mB=P-RK`jBssNI#)!O=f;9iwwrB7@DTm>`s_~E>9u>jLQ{RBFN$T4J)wEH zO!D}7C3q@>TOSZS6%t3%O_-(|J3aji4$MY_AdFN&Z`K8Hz(om$bQu6r4bIXf1F*Wz&iK*91o!L z5BFCX2ypCScQkMT05a^|907H3;ph8#EsWOGZWg!{ys7d%1bsL#9to6Fcav4AV*`8p zs*X`qyvX3ZGX9Z^2?%Bkz*F|A_x|2FIxhKQ1Z5wk6^ zNI{6Rdzf1}H0~-Sex&|^;?+t*>#>Va9SLES+pneV`#{P?w!4x&T0}{j3(#8~{^3`1 zC$JHC;T(KyZ1O$rQp%Eq2bN-YzTp7?K&*4D;FdZFxRVS2BPXYyftjS=4} z{+Q*UEy#dY9V`}xP%%(P_6b8LJ#~>d+Yjy|eTqW7^?cGxTHcQu!3?yvtmzjnZ_SRn zIajRLS@`<44L|G2zQ)sNXLzM9Z>ag?U`>iAGN#C2@fO&D2wgmW;|GW#sv*V|;d5?u=?p6EoTeyQ z>uk%pe)r3}B#?6`#e|y@&$Hyt2qmJB;`ABof^_Qd^xb<)E(9lH^dlX5TeHyXh2<*` zDKSwmR)F~TKtj{x;7;c}jmEV{dxE_vfF>WvrlCy*W4x`%#`%us3Rs}CFMP2@TRu~Y zL5vuBBOqCsbf=6=dk7au%HlRRvos%@xWW~C<{4NMS*CkO>rB=qb3xjCXA!;&w3la| z%CXMF{c$s6*jdTaoQtaSN3kAYco~k9RN^{=dhb+kh~y%e#OyqoxN;gu;k{l=({%RP zhu3;0-vDRj=;1-8JR9}Kj6n!r2QLIFsX-{jm`cbpWd&vJuDaER6T%EZ~K(CNg6@rDI|OuDAr z*mcw+wH=)jbpM3O`9Zind8-t2!&6BoWzK^3($>4$v<#A`b31ew;RgczE-yU_{0Bo= zpS&Uh051RK7Z+C#2dK-hL(f3naZ~^}z6ioUB)!&(fXS=rv{M3Ec}Y15YO}6&UjGy! z+m|=~mT2jbrynwE)@qo?b*~IGisPU5z**W8&hq%~+3BKS!;p#}OZe2f~^c@a}dYzHp z8ecWhCSPkC>PwnKLf~RNst)0dBEGSkzEox)Nz0ImmmTrFh4Q#VRcr*5+s%-pV-kOJ zQ=9o)oqG^58yuaOSnZA2v;00Gu=wg%GtbBO`A#oO>EL+aT=z=XAcI8)WH%-=1=GY9 zo*gWI!{kgx5KYp75$}uiKLywftP{#0s!zR@G}NFk&?^pCGN$C#Kp~hGSu1UvyFxqj}~CRnri>5IdR!@@O{gZLKpC5szRsJ zWI@z>Nhk685lo`};zNN$poXdnRTa0_$O*o~cAtm_M5hf|F(r3dL@SYYVLT zm3pjGmW#H(d3%R(BYyAws`zZ*{&{?F_FXxWBdJQYF=yMl6CJTlk~1U6YdHKxvWmO6 z>0TCaFx|G3e+93t+a1*nGplh*DQn)JFHEza-at0tyDd`OTC^t#&+9m8xmsSpN;Q@Y z?<64!mSC@R7OnKq88Gt0E4r+`by%=mx4p)FxjyP1vqyk1t;ej5`0m@LdDlDY?cPh~ zXG@jereJkl{8bMt$_}$B?+><+8YN}dgeZN3Evh?Va$_q#ar5H0xaK-@!I;Q@9O_Pa zEhk)c4`5^V$e1>s%hCmY4h~p0h*6TV{W6+KAWh;=SFT9ievR6+!pzZY^ia;L302fq z9bGJz?b`!VkV^Oi(!D`>T~-+{JBnjb zk`d67`I1gFuWp=!W9cyGlBZt;UuSLq6xk5uZv~}MiN_$Fh=Gzdi zSMMFmhH!k;{$guh#Am=@R;yYbn5Q<>J$sssPG|G8wUz&is6Y`o%DU0MC|!Fxfy@0! z#4bU{=LXFqMd|36r*mY$Y_54DJ`|(mBF{utgYz?+F8svoHHW}d;{LQyG8>zOtSKn1 z!E%5FA!ly7oS~*%E2}#+Z^)laNlzCRriA`+>@E!IDlLLYkRd#ysVEAyq`LgqzMWQh z^O8kBi@7WFwgVp(E3ee2SJ%I`w{~ktBlNPX8Z^7L-t!&gbBLC#Lt4SG{)|Ef5_ zd%wy9c?v=^;u_QvsD*H3f&yl|ulB9;*K78t>8n{tO#Y&L4l7_Jy+vY}!nD+Wz%iRz z7yv-FE%8dtWy3D7#NK*UB{+wg%zQJnB$LWjE)*HgBJ9&BNg2+y161^P4>sc6x}?cU zfuy`WZkCjupcRoJbDhVhf}$H!!n4vYek{!7TSGp| zp-};$xPDB%#Tg$c&eYTP3X7L z5@H*rH9@nQ{9Jx?Sll2-i;-S=yH+hZf)4UYenw1n8goq2tz$K2DW`rGpC_j19RiR| z@y?XyGz$A#g>I*K7_0e`og6t_y7%Pm22dD!LT>09yfuhmwL#7QXE**`SQ-By!s|fa7>1-m08glf`c-rv|zxe zeiHIgd9YZx!7%hDt6Sytwk+xvYjfX#1UQ~jEyO}`n-U{! zIHjYZNz}^|Y_9B6E=KX$c6(vYX}Yn!dyjN*Lk2HnQJNIYAWdyfHGPS>-1ib#E4i(B zU!5eywyLk$NPwK^su*inaROck%K=2KA%MYknWfCuo!FGG3vcokZnRt!t1>(7t>F`Y zry&lxrxmrqG0$Uqwst}|>w2gcXBlWQ9_XC%{hhl~6t}r^3@#(tAGah8KFQ=u>1Rbq z6X+$vpL@s;J6~SJ8I%{X{2YHaaW-MOeKZ7 z+$KTz2!~X;S77tdf2Mv=mq zD@j=P{DT7ii5YtdTxX_IgMnxmhx0h|!NLkq&!AW)8QD58qFPsDCs*&*YQSRns1T~H z9cn0q>QHJ{OVwtYwb|wL(DvUUm>pKn#NALu#|9{>++;> zWb2xzvC?#m)6sY>Q}A3&(%>ppyy=k*;=af%lc$q$vu565sn)E0%t}q?Wv0I65UpdRHs`YJofCS%uzK=lGk_= zq}6TufoJ0U!A)5$&BxE}wO%nO+ZVXv%&CMj=Tr-<@~xFC<#(D`Ta7MsOLnL4=sF1- z*Na}FeZOs)TjJ@|@2E-;fgq9$3I8bV|DsbsrOkO6bmwNlgCn%jNhVa9cNkV+^1d!e zuX%&6FyDY%WDQx-Te)sm1AnbvuQhLMcjXByQ|>Ie$%M_by8kUc5Tvo+aAX22^_uT_~w+dt&L&eDL7f+ac4 z-oy5_|2*~;-sNgxrl{2p{xw+t)FrUT{@-VT!dE>nM+AWFo2Q_-%_dc1V;PbHz1(MD zg8{yAsl*mG+OtrH9N&EDVU`n>r$H}YUCtWsVp$1qpY4V(Y$km7JWCi)&Xk$_+4eFi zX8<{}NzD)ynC)-tArGHLJpsppZCVj1YuZU($I^^DA<2V8_}iTe)yU!mYK!nUs&>k? zk4PQ4VVqB#M7%7nG~3wPwf=*xXWNBkRobjNCN zQ1p$JYy6JD!onGUsRQi@n|@SwUk(*LiQRbZ+{;)ot?Ar|HU1FWL}(Ymn35`0Nc;yt zNH$6^*NO%fG%6<%%(V67O`xvp@z~*JR9VJ)bKM)lz{8AwYQrq)1^Vn66!faZAvM2Q z^6cH0`qi6HuQE)2BNuA56{_K6Key_vy;-d_Di*o&V5%uX1>bV<@C991RDz2@clLLE zshVIb0vZDJfeBr7TbT{&rf>2X*J`nqKVC)f;*nQO;HG1c-vv=K7 z3upG{ko6FLu6t)byFV;XW1A#`9MJ1pN z46Nak{}Cd~p{+_vPB>&JY>1>_2PFE75OJ}ALS0?>f8BnyhtKrMHxQe9nzw5Bv== z@ue9?%Zj>oL0|M{Eew})QtMVR5NPm_Z%$~e^rOMV{ecw~+f*-w`?xKp%PAg4jIUr3 zI0#uhrQ?1*(nhN6&vR^SBK=uYJ(|YeLO7;h%Stph1#@A^t-QnXjcDQMUOe^V8aH`q z`=*8vvdDvw=@C8pz}#dv)SF)6-O?jsc-EA|TMb@1M1S|~df4W~*p(6pK^|I-hk4!AP^lCHnGJ;?4^=3dFtV|#;>~q5oEDr*h zV&4VUm?k_o9@6YOiUSAmGD-U6%o@6yVdTcu+AZI8EtI!9K&$;}M61qUmlFine8Le& z1%9oGk8MYG*7tMw7#X8Q`vpkdaKE)^Of&885bMO5(OxaL3p-*Wt`~akR&j>y*e{a$ zx01VM*B>r{WekjEj1tS(ztu8JI0E{!laGn+`8nMOZU!|3d>N0U5oM#S#DjI@`N`?) zc~bXX7p(A({3`Bo+KHSIk5rGS6FxyAbsHo*#ZPcnxr;~@qCtvj)wHoAbW2amo-N)$ zq}*(>D@v2$a2f#oL+72sT@rp1KY^ba->!wv# zswzm>U3FS8BbeC+FB~apZ}B-}a43T=m20DPD~J1ct%EvM)v}$%!~2(myKfrzu1%LQ zd+ay#d=;JZ*!mb6PPvV{9oL50=8e zsldO1KShh5n%SS4=mjtd%lp4M|Cd7g7y5rz+%C{4tp5L}{`UK~e@ED#Led3#mf(Mr zm44g#{U81mUM}pM68^GtA;bI${c~WwfS!^3g8n(a{%PRPqwm7NJ~nCoI0*j)|5+3- w!1SPhga4yM{ + + 4.0.0 + + com.xkrs.microservice + gsm_gui + 1.0.0 + jar + + GSM_GUI + GSM_GUI + + + org.springframework.boot + spring-boot-starter-parent + 2.6.14 + + + + + 7.9.0 + 4.2.2 + 2.19.0 + 4.5.14 + 7.0.5.Final + 5.6.15.Final + 3.4.4 + 1.15.3 + 2.0.23 + 4.1.86.Final + 2.15.2 + 1.10.2 + 3.12.0 + 5.8.10 + 1.2.0 + 28.0 + UTF-8 + UTF-8 + 17 + 17 + 17 + + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + org.apache.logging.log4j + log4j-web + ${log4j-web.version} + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-logging + + + spring-boot-starter-tomcat + org.springframework.boot + + + + + + org.springframework.boot + spring-boot-starter-undertow + + + org.springframework.boot + spring-boot-starter-data-redis + + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-security + + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-webflux + + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-test + + + + org.springframework.boot + spring-boot-starter-logging + + + test + + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-devtools + true + + + org.apache.commons + commons-pool2 + + + org.postgresql + postgresql + + + com.mysql + mysql-connector-j + + + com.auth0 + java-jwt + ${java-jwt.version} + + + io.netty + netty-all + ${netty-all.version} + + + ch.poole.geo + mbtiles4j + ${mbtiles4j.version} + + + + nl.basjes.parse.useragent + yauaa + ${yauaa.version} + + + io.micrometer + micrometer-registry-prometheus + ${micrometer-registry-prometheus.version} + + + com.vladmihalcea + hibernate-types-55 + ${hibernate-types-55.version} + + + org.apache.httpcomponents + httpmime + ${httpmime.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + org.hibernate.validator + hibernate-validator + ${hibernate-validator.version} + + + org.hibernate + hibernate-spatial + ${hibernate-spatial.version} + + + com.lmax + disruptor + ${disruptor.version} + + + org.jsoup + jsoup + ${jsoup.version} + + + com.aliyun + dysmsapi20170525 + ${dysmsapi20170525.version} + + + org.geotools + gt-shapefile + ${geotools.version} + + + org.geotools.jdbc + gt-jdbc-postgis + ${geotools.version} + + + cn.hutool + hutool-all + ${hutool-all.version} + + + + + + + + + + alimaven + aliyun maven + https://maven.aliyun.com/nexus/content/groups/public/ + + + osgeo + Open Source Geospatial Foundation Repository + https://repo.osgeo.org/repository/release/ + + + + + + src/main/java + + **/*.properties + **/*.xml + + false + + + src/main/resources + + **/*.properties + **/*.xml + **/*.txt + + false + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + + + + + + + diff --git a/src/main/java/com/xkrs/microservice/MicroserviceApplication.java b/src/main/java/com/xkrs/microservice/MicroserviceApplication.java new file mode 100644 index 0000000..16fd5d1 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/MicroserviceApplication.java @@ -0,0 +1,28 @@ +package com.xkrs.microservice; + +import io.micrometer.core.instrument.MeterRegistry; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.scheduling.annotation.EnableAsync; + +/** + * 微服务入口 + * @author tajochen + */ +@SpringBootApplication(exclude = {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class}) +@EnableAsync +public class MicroserviceApplication { + + public static void main(String[] args) { + SpringApplication.run(MicroserviceApplication.class, args); + } + + @Bean + MeterRegistryCustomizer configurer(@Value("${spring.application.name}") String applicationName){ + return registry -> registry.config().commonTags("application", applicationName); + } + +} diff --git a/src/main/java/com/xkrs/microservice/common/account/AccountCredentials.java b/src/main/java/com/xkrs/microservice/common/account/AccountCredentials.java new file mode 100644 index 0000000..5944932 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/account/AccountCredentials.java @@ -0,0 +1,29 @@ +package com.xkrs.microservice.common.account; + +/** + * 账户实体 + * @author tajochen + */ +public class AccountCredentials { + + private String userName; + + private String password; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + +} diff --git a/src/main/java/com/xkrs/microservice/common/account/CustomAuthenticationProvider.java b/src/main/java/com/xkrs/microservice/common/account/CustomAuthenticationProvider.java new file mode 100644 index 0000000..ec0cd4d --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/account/CustomAuthenticationProvider.java @@ -0,0 +1,109 @@ +package com.xkrs.microservice.common.account; + +import com.xkrs.microservice.model.entity.SysAuthorityEntity; +import com.xkrs.microservice.model.entity.SysUserEntity; +import com.xkrs.microservice.service.SysAuthorityService; +import com.xkrs.microservice.service.SysRoleService; +import com.xkrs.microservice.service.SysUserService; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.DisabledException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +import static com.xkrs.microservice.util.EncryptDecryptUtil.encrypt256; + +/** + * 自定义认证Provider + * @author tajochen + */ +@Component +public class CustomAuthenticationProvider implements AuthenticationProvider { + + @Resource + private SysUserService sysUserService; + + @Resource + private SysRoleService sysRoleService; + + @Resource + private SysAuthorityService sysAuthorityService; + + /** + * 初使化时将已静态化的Service实例化 + */ + protected static CustomAuthenticationProvider customAuthenticationProvider; + + /** + * 通过@PostConstruct实现初始化bean之前进行的操作 + */ + @PostConstruct + public void init() { + customAuthenticationProvider = this; + customAuthenticationProvider.sysUserService = this.sysUserService; + customAuthenticationProvider.sysRoleService = this.sysRoleService; + customAuthenticationProvider.sysAuthorityService = this.sysAuthorityService; + } + + /** + * 用户认证授权 + * @param authentication 认证类 + */ + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + // 获取认证的用户名 & 密码 + String userName = authentication.getName(); + String password = authentication.getCredentials().toString(); + + SysUserEntity userEntity = customAuthenticationProvider.sysUserService.getSysUserByUserName(userName); + + // 检查用户是否存在 + if(userEntity == null){ + throw new BadCredentialsException("user don't exist"); + } + + // 检查用户是否激活 + if(userEntity.getActiveFlag() != 0){ + throw new DisabledException("user not activated"); + } + + //检查用户状态是否正常 + if(userEntity.getStatusCode() != 0){ + throw new DisabledException("user state exception"); + } + + // 认证逻辑 + String encryptPassword = encrypt256(password + userEntity.getSalt()); + if (encryptPassword.equals(userEntity.getPassword())) { + // 设置权限列表 + ArrayList permissions = new ArrayList<>(); + List permissionList = customAuthenticationProvider.sysAuthorityService. + getSysAuthorityListByUserName(userName); + for(SysAuthorityEntity sysAuthorityEntity : permissionList) { + permissions.add(new CustomGrantedAuthority(sysAuthorityEntity.getAuthorityName())); + } + // 生成令牌 + return new UsernamePasswordAuthenticationToken(userName, encryptPassword, permissions); + } + else { + throw new BadCredentialsException("user password error"); + } + } + + /** + * 是否可以提供输入类型的认证服务 + * @param authentication 认证类 + */ + @Override + public boolean supports(Class authentication) { + return authentication.equals(UsernamePasswordAuthenticationToken.class); + } +} diff --git a/src/main/java/com/xkrs/microservice/common/account/CustomGrantedAuthority.java b/src/main/java/com/xkrs/microservice/common/account/CustomGrantedAuthority.java new file mode 100644 index 0000000..6e1d18e --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/account/CustomGrantedAuthority.java @@ -0,0 +1,25 @@ +package com.xkrs.microservice.common.account; + +import org.springframework.security.core.GrantedAuthority; + +/** + * 权限认证服务 + * @author tajochen + */ +public class CustomGrantedAuthority implements GrantedAuthority { + + private String authority; + + public CustomGrantedAuthority(String authority) { + this.authority = authority; + } + + public void setAuthority(String authority) { + this.authority = authority; + } + + @Override + public String getAuthority() { + return this.authority; + } +} diff --git a/src/main/java/com/xkrs/microservice/common/account/JwtAuthenticationFilter.java b/src/main/java/com/xkrs/microservice/common/account/JwtAuthenticationFilter.java new file mode 100644 index 0000000..9d1d8d2 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/account/JwtAuthenticationFilter.java @@ -0,0 +1,28 @@ +package com.xkrs.microservice.common.account; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.filter.GenericFilterBean; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +/** + * 拦截所有需要JWT的请求,然后调用TokenAuthenticationService类的静态方法去做JWT验证 + * @author tajochen + */ +public class JwtAuthenticationFilter extends GenericFilterBean { + + @Override + public void doFilter(ServletRequest request, + ServletResponse response, + FilterChain filterChain) throws IOException, ServletException { + Authentication authentication = TokenAuthenticationProvider.inspectAuthentication((HttpServletRequest)request); + SecurityContextHolder.getContext().setAuthentication(authentication); + filterChain.doFilter(request,response); + } +} diff --git a/src/main/java/com/xkrs/microservice/common/account/JwtLoginFilter.java b/src/main/java/com/xkrs/microservice/common/account/JwtLoginFilter.java new file mode 100644 index 0000000..2613b9b --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/account/JwtLoginFilter.java @@ -0,0 +1,146 @@ +package com.xkrs.microservice.common.account; + +import com.xkrs.microservice.common.encapsulation.PromptMessageEnum; +import com.xkrs.microservice.service.SysUserService; +import com.xkrs.microservice.util.IpUtil; +import com.xkrs.microservice.common.encapsulation.OutputEncapsulation; +import nl.basjes.parse.useragent.UserAgent; +import nl.basjes.parse.useragent.UserAgentAnalyzer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; + +import javax.annotation.Resource; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.util.Locale; + +/** + * jwt登录过滤器 + * @author tajochen + */ +public class JwtLoginFilter extends AbstractAuthenticationProcessingFilter { + + private static final Logger logger = LoggerFactory.getLogger(JwtLoginFilter.class); + + + @Resource + private SysUserService sysUserService; + + public JwtLoginFilter(String url, AuthenticationManager authManager) { + super(new AntPathRequestMatcher(url)); + setAuthenticationManager(authManager); + } + + /** + * 登录时验证 + * @param req 请求 + * @param res 响应 + */ + @Override + public Authentication attemptAuthentication(HttpServletRequest req, HttpServletResponse res) { + try { + req.setCharacterEncoding("UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + logger.error(String.valueOf(e)); + } + res.setHeader("Access-Control-Allow-Origin","*"); + res.setHeader("Access-Control-Allow-Credentials", "false"); + AccountCredentials cred = new AccountCredentials(); + //获取表单数据 + String userName = req.getParameter("userName"); + String password = req.getParameter("password"); + String rememberMe = req.getParameter("remember"); + //如果用户名密码为空 + if(userName == null||password == null|| userName.trim().isEmpty()||password.trim().isEmpty()){ + throw new BadCredentialsException("user or password is null"); + } + if(rememberMe == null||rememberMe.isEmpty()){ + rememberMe = "false"; + } + cred.setUserName(userName.trim()); + cred.setPassword(password.trim()); + // 返回一个验证令牌 + return getAuthenticationManager().authenticate( + new UsernamePasswordAuthenticationToken( + cred.getUserName(), + cred.getPassword() + ) + ); + } + + /** + * 验证成功后调用 + * @param req 请求 + * @param response 响应 + * @param chain 过滤器声明 + * @param auth 认证 + */ + @Override + protected void successfulAuthentication( + HttpServletRequest req, HttpServletResponse response, FilterChain chain, Authentication auth) { + if(sysUserService==null){ + ServletContext servletContext = req.getServletContext(); + WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext); + assert webApplicationContext != null; + sysUserService = webApplicationContext.getBean(SysUserService.class); + } + UserAgentAnalyzer uaa = UserAgentAnalyzer + .newBuilder() + .hideMatcherLoadStats() + .withCache(5000) + .build(); + UserAgent agent = uaa.parse(req.getHeader("User-Agent")); + System.out.println("获取 UA 信息:"); + for (String fieldName: agent.getAvailableFieldNamesSorted()) { + System.out.println(fieldName + " = " + agent.getValue(fieldName)); + } + //更新用户登录信息 + sysUserService.updateSysUserLogin(auth.getName(), IpUtil.getIpAddr(req)); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Credentials", "false"); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + TokenAuthenticationProvider.createAuthentication(response, auth.getName(),auth.getAuthorities()); + } + + /** + * 验证失败后调用 + * @param request 请求 + * @param response 响应 + * @param failed 失败 + */ + @Override + protected void unsuccessfulAuthentication(HttpServletRequest request, + HttpServletResponse response, + AuthenticationException failed) { + Locale locale = LocaleContextHolder.getLocale(); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Credentials", "false"); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + // 将 JWT 写入 body + PrintWriter out = null; + try { + out = response.getWriter(); + } catch (IOException e) { + e.printStackTrace(); + logger.warn(String.valueOf(e)); + } + assert out != null; + out.append(OutputEncapsulation.outputEncapsulationObject(PromptMessageEnum.DATA_WRONG, failed.getLocalizedMessage(), locale)); + response.setStatus(HttpServletResponse.SC_OK); + } +} diff --git a/src/main/java/com/xkrs/microservice/common/account/TokenAuthenticationProvider.java b/src/main/java/com/xkrs/microservice/common/account/TokenAuthenticationProvider.java new file mode 100644 index 0000000..de73851 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/account/TokenAuthenticationProvider.java @@ -0,0 +1,125 @@ +package com.xkrs.microservice.common.account; + + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.xkrs.microservice.common.encapsulation.PromptMessageEnum; +import com.xkrs.microservice.common.encapsulation.OutputEncapsulation; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.AuthorityUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.*; + +/** + * token认证服务 + * @author tajochen + */ +public class TokenAuthenticationProvider { + + private static final Logger logger = LoggerFactory.getLogger(TokenAuthenticationProvider.class); + + /** + * Token前缀 + */ + static public final String TOKEN_PREFIX = "Bearer "; + + /** + * 过期时间6小时 + */ + static public final long EXPIRATIONTIME = 21_600_000; + + /** + * 加密密钥 + */ + static public final String SECRET_KEY = "J928A503V4wmF05Ka0HWN2dmW11hTfwqU97sR9E4DpF82B52542033Ok785x8173"; + + /** + * 存放Token的Header Key + */ + static final String HEADER_STRING = "Authorization"; + + /** + * JWT生成方法 + * @param response 响应 + * @param userName 用户名 + * @param authorities 认证 + */ + static void createAuthentication(HttpServletResponse response, String userName, + Collection authorities) { + + Locale locale = new Locale("zh", "CN"); + StringBuilder auths = new StringBuilder(); + String authsList = ""; + for(GrantedAuthority r : authorities) { + auths.append(",").append(r.getAuthority()); + } + authsList = auths.toString(); + if(authsList.length()>1){ + authsList=authsList.substring(1); + } else { + logger.warn(userName +" has no permission!"); + } + // 加密算法 + Algorithm algorithm = Algorithm.HMAC384(SECRET_KEY); + // 生成JWT + String jwt = JWT.create().withSubject(userName). + withIssuer("https://www.star-rising.com"). + withAudience(userName). + withClaim("auths", authsList). + withNotBefore(new Date(System.currentTimeMillis())). + withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATIONTIME)). + sign(algorithm); + // 将 JWT 写入 body + PrintWriter out = null; + response.setStatus(HttpServletResponse.SC_OK); + try { + out = response.getWriter(); + out.append(OutputEncapsulation.outputEncapsulationObject(PromptMessageEnum.SUCCESS, jwt, locale)); + } + catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * JWT验证方法 + * @param request 请求体 + */ + static Authentication inspectAuthentication(HttpServletRequest request) { + // 从Header中拿到token + String token = request.getHeader(HEADER_STRING); + if (token != null) { + try { + String realToken = token.replace(TOKEN_PREFIX, ""); + Algorithm algorithm = Algorithm.HMAC384(SECRET_KEY); + JWTVerifier verifier = JWT.require(algorithm) + .withIssuer("https://www.star-rising.com") + .build(); + DecodedJWT jwt = verifier.verify(realToken); + // 获取用户名 + String userName = jwt.getSubject(); + // 获取权限 + Claim claim = jwt.getClaim("auths"); + List authorities = AuthorityUtils.commaSeparatedStringToAuthorityList( claim.asString()); + return new UsernamePasswordAuthenticationToken(userName, null, authorities); + } catch(Exception e) { + // 数据域丢失或者没有值 + return null; + } + } else { + return null; + } + } +} diff --git a/src/main/java/com/xkrs/microservice/common/config/ConfigConstant.java b/src/main/java/com/xkrs/microservice/common/config/ConfigConstant.java new file mode 100644 index 0000000..48fd05c --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/config/ConfigConstant.java @@ -0,0 +1,36 @@ +package com.xkrs.microservice.common.config; + +import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; +import java.util.Objects; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; + +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +/** + * spring 静态工具类里读取配置文件 + * @author tajochen + */ +@Component +public class ConfigConstant { + + @Resource + private Environment env; + + @PostConstruct + public void readConfig() throws Exception { + String prefix = "my."; + Field[] fields = ConfigConstant.class.getFields(); + for(Field field : fields ){ + field.set(null, getProperty(prefix + field.getName())); + } + } + + private String getProperty(String key) { + return new String(Objects.requireNonNull(env.getProperty(key)).getBytes(StandardCharsets.ISO_8859_1), + StandardCharsets.UTF_8); + } +} diff --git a/src/main/java/com/xkrs/microservice/common/config/CorsConfig.java b/src/main/java/com/xkrs/microservice/common/config/CorsConfig.java new file mode 100644 index 0000000..f5f908b --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/config/CorsConfig.java @@ -0,0 +1,32 @@ +package com.xkrs.microservice.common.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 跨域配置 + * @author tajochen + */ +public class CorsConfig { + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 允许任何域名 + corsConfiguration.addAllowedOrigin("*"); + // 允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 允许任何方法 + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } + + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + // 注册 + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } +} diff --git a/src/main/java/com/xkrs/microservice/common/config/MetricsRepositoryMethodConfig.java b/src/main/java/com/xkrs/microservice/common/config/MetricsRepositoryMethodConfig.java new file mode 100644 index 0000000..73c0786 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/config/MetricsRepositoryMethodConfig.java @@ -0,0 +1,18 @@ +package com.xkrs.microservice.common.config; + +import io.micrometer.prometheus.PrometheusMeterRegistry; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.annotation.Bean; + +/** + * Prometheus 度量设置 + * @author tajochen + */ +public class MetricsRepositoryMethodConfig { + + @Bean + InitializingBean forcePrometheusPostProcessor(BeanPostProcessor meterRegistryPostProcessor, PrometheusMeterRegistry registry) { + return () -> meterRegistryPostProcessor.postProcessAfterInitialization(registry, ""); + } +} diff --git a/src/main/java/com/xkrs/microservice/common/config/MvcConfig.java b/src/main/java/com/xkrs/microservice/common/config/MvcConfig.java new file mode 100644 index 0000000..e3b4618 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/config/MvcConfig.java @@ -0,0 +1,37 @@ +package com.xkrs.microservice.common.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * WebMVC配置 + * @author Tajochen + */ +@Configuration +public class MvcConfig implements WebMvcConfigurer { + + /** + * 放行跨域请求 + */ + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowedMethods("*") + .allowedHeaders("*"); + } + + /** + * 定时任务线程池更改,防止多个任务并行 + */ + @Bean + public TaskScheduler taskScheduler() { + final ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); + scheduler.setPoolSize(5); + return scheduler; + } +} diff --git a/src/main/java/com/xkrs/microservice/common/config/RedisCacheAutoConfiguration.java b/src/main/java/com/xkrs/microservice/common/config/RedisCacheAutoConfiguration.java new file mode 100644 index 0000000..e1980d8 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/config/RedisCacheAutoConfiguration.java @@ -0,0 +1,30 @@ +package com.xkrs.microservice.common.config; + +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.io.Serializable; + +/** + * Redis 缓存自动配置 + * @author tajochen + */ +@Configuration +@AutoConfigureAfter(RedisAutoConfiguration.class) +public class RedisCacheAutoConfiguration { + + @Bean + public RedisTemplate redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + template.setConnectionFactory(redisConnectionFactory); + return template; + } +} diff --git a/src/main/java/com/xkrs/microservice/common/config/RedisConfig.java b/src/main/java/com/xkrs/microservice/common/config/RedisConfig.java new file mode 100644 index 0000000..61793ab --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/config/RedisConfig.java @@ -0,0 +1,196 @@ +package com.xkrs.microservice.common.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.interceptor.CacheErrorHandler; +import org.springframework.cache.interceptor.CacheResolver; +import org.springframework.cache.interceptor.KeyGenerator; +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.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.data.redis.serializer.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.time.Duration; + +/** + * redis配置 + * @author tajochen + */ +@Configuration +@EnableCaching +public class RedisConfig extends CachingConfigurerSupport{ + + private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class); + + @Resource + private LettuceConnectionFactory lettuceConnectionFactory; + + private static final Duration TIME_TO_LIVE = Duration.ofSeconds(3600*6); + + @Bean + @Override + public KeyGenerator keyGenerator() { + + // 设置自动key的生成规则,配置spring boot的注解,进行方法级别的缓存 + return (target, method, params) -> { + StringBuilder sb = new StringBuilder(); + sb.append(target.getClass().getName()); + sb.append(":"); + sb.append(method.getName()); + for (Object obj : params) { + sb.append(":").append(obj); + } + // logger.info("自动生成Redis Key -> [{}]", rsToUse); + return String.valueOf(sb); + }; + } + + @Bean + @Override + public CacheManager cacheManager() { + // 关键点,spring cache的注解使用的序列化都从这来,没有这个配置的话使用的jdk自己的序列化 + RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() + //key序列化方式 + .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer())) + //value序列化方式 + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer())) + .disableCachingNullValues() + .entryTtl(TIME_TO_LIVE); + + RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder + .fromConnectionFactory(lettuceConnectionFactory) + .cacheDefaults(config) + .transactionAware(); + + return builder.build(); + } + + @Bean + public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(connectionFactory); + // 根据需要添加其他配置,例如设置消息监听器 + return container; + } + + + /** + * RedisTemplate配置 在单独使用redisTemplate的时候 重新定义序列化方式 + */ + @Bean(name = "redisTemplate") + public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { + // 设置序列化 + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper om = new ObjectMapper(); + // 配置null值序列化成空字符串 + om.getSerializerProvider().setNullValueSerializer(new JsonSerializer<>() { + @Override + public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(""); + } + }); + // 解决jackson无法反序列化LocalDateTime的问题,引入jsr310标准 + JavaTimeModule javaTimeModule = new JavaTimeModule(); + om.registerModule(javaTimeModule); + om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + // 其他设置 + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance , + ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + jackson2JsonRedisSerializer.setObjectMapper(om); + // 配置redisTemplate + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(lettuceConnectionFactory); + RedisSerializer stringSerializer = new StringRedisSerializer(); + redisTemplate.setKeySerializer(stringSerializer); + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); + redisTemplate.setHashKeySerializer(stringSerializer); + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + + private RedisSerializer keySerializer() { + return new StringRedisSerializer(); + } + + private RedisSerializer valueSerializer() { + // 设置序列化 + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>( + Object.class); + ObjectMapper om = new ObjectMapper(); + // 解决jackson无法反序列化LocalDateTime的问题,引入jsr310标准 + JavaTimeModule javaTimeModule = new JavaTimeModule(); + om.registerModule(javaTimeModule); + om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + // 其他设置 + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance , + ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + jackson2JsonRedisSerializer.setObjectMapper(om); + return jackson2JsonRedisSerializer; + } + + @Override + public CacheResolver cacheResolver() { + return null; + } + + /** + * 设置数据存入 redis 的序列化方式,并开启事务 + * + * @param redisTemplate 模版 + * @param factory 工厂类 + */ + private void initRedisTemplate(RedisTemplate redisTemplate, RedisConnectionFactory factory) { + //如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String! + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); + redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + // 开启事务 + redisTemplate.setEnableTransactionSupport(true); + redisTemplate.setConnectionFactory(factory); + } + + /** + * 注入封装RedisTemplate 给RedisUtil提供操作类 + * @param redisTemplate redis模版 + * @return RedisUtil + */ + @Bean(name = "redisUtil") + public RedisUtil redisUtil(RedisTemplate redisTemplate) { + RedisUtil redisUtil = new RedisUtil(); + redisUtil.setRedisTemplate(redisTemplate); + return redisUtil; + } + + @Override + @Bean + public CacheErrorHandler errorHandler() { + // 异常处理,当Redis发生异常时,打印日志,但是程序正常走 + logger.info("初始化 -> [{}]", "Redis CacheErrorHandler"); + return null; + } + +} diff --git a/src/main/java/com/xkrs/microservice/common/config/RedisKeyExpirationListener.java b/src/main/java/com/xkrs/microservice/common/config/RedisKeyExpirationListener.java new file mode 100644 index 0000000..5914933 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/config/RedisKeyExpirationListener.java @@ -0,0 +1,42 @@ +package com.xkrs.microservice.common.config; + +import com.xkrs.microservice.dao.DataFileDao; +import com.xkrs.microservice.model.entity.DataFileEntity; +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Optional; + +/** + * 监听redis key 过期事件 + */ +@Component +public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener { + + @Resource + private DataFileDao dataFileDao; + + public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { + super(listenerContainer); + } + + @Override + public void onMessage(Message message, byte[] pattern) { + String expiredKey = message.toString(); + if (expiredKey.contains("runFile_")){ + String[] key = expiredKey.split("_"); + Optional optional = dataFileDao.findById(Integer.valueOf(key[1])); + //如果文件的状态还在运行中,就修改运行状态为 未运行 + if (optional.get().getRunFlag().equals("1")){ + DataFileEntity dataFileEntity = new DataFileEntity(); + dataFileEntity.setId(optional.get().getId()); + dataFileEntity.setRunFlag(0); + dataFileDao.save(dataFileEntity); + } + } + } + +} diff --git a/src/main/java/com/xkrs/microservice/common/config/RedisUtil.java b/src/main/java/com/xkrs/microservice/common/config/RedisUtil.java new file mode 100644 index 0000000..912cf45 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/config/RedisUtil.java @@ -0,0 +1,533 @@ +package com.xkrs.microservice.common.config; + +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +/** + * redis工具类 + * @author tajochen + */ +public class RedisUtil { + + private RedisTemplate redisTemplate; + + public void setRedisTemplate(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + /** + * 指定缓存失效时间 + * @param key 键 + * @param time 时间(秒) + * @return + */ + 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 可以传一个值 或多个 + */ + @SuppressWarnings("unchecked") + public void del(String ... key){ + if(key!=null&&key.length>0){ + if(key.length==1){ + redisTemplate.delete(key[0]); + }else{ + redisTemplate.delete(String.valueOf(CollectionUtils.arrayToList(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 delta 要增加几(大于0) + * @return + */ + 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 + */ + 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); + } + + /** + * 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 + */ + 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 + */ + public double hdecr(String key, String item,double by){ + return redisTemplate.opsForHash().increment(key, item,-by); + } + + //============================set============================= + /** + * 根据key获取Set中的所有值 + * @param key 键 + * @return + */ + 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 Boolean.TRUE.equals(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 + */ + 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 + */ + 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 + */ + public long lGetListSize(String key){ + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + 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 + */ + 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 + */ + 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 + */ + 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 + */ + 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 + */ + 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/src/main/java/com/xkrs/microservice/common/config/WebSecurityConfig.java b/src/main/java/com/xkrs/microservice/common/config/WebSecurityConfig.java new file mode 100644 index 0000000..dbec4b4 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/config/WebSecurityConfig.java @@ -0,0 +1,64 @@ +package com.xkrs.microservice.common.config; + +import com.xkrs.microservice.common.account.CustomAuthenticationProvider; +import com.xkrs.microservice.common.account.JwtAuthenticationFilter; +import com.xkrs.microservice.common.account.JwtLoginFilter; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(prePostEnabled=true) +class WebSecurityConfig extends WebSecurityConfigurerAdapter { + + /** + * 设置 HTTP 验证规则 + * @param http http隐私认证 + * @throws Exception + */ + @Override + protected void configure(HttpSecurity http) throws Exception { + // 关闭csrf验证 + http.csrf().disable() + // 对请求进行认证 + .authorizeRequests() + // 所有 / 的所有请求 都放行 + .antMatchers("/").permitAll() + // 所有OPTIONS请求都放行 + .antMatchers(HttpMethod.OPTIONS).permitAll() + // 所有 /user/add 用户注册 的POST请求 都放行 + .antMatchers(HttpMethod.POST, "/api/user/register").permitAll() + // 所有 /user/check/duplicate 检查用户名是否重复 的POST请求 都放行 + .antMatchers(HttpMethod.GET, "/api/user/check/duplicate").permitAll() + // 所有 prometheus 度量接口 的Get请求 都放行 + .antMatchers(HttpMethod.GET, "/actuator/prometheus").permitAll() + // 所有 mbtile 服务接口 的Get请求 都放行 + .antMatchers(HttpMethod.GET, "/api/mbtile/get/**").permitAll() + // 所有 /login 用户登录 的POST请求 都放行 + .antMatchers(HttpMethod.POST, "/api/login").permitAll() + // 所有 统计数据的 的POST请求 都放行 + .antMatchers(HttpMethod.POST, "/api/statistical-data/add").permitAll() + // 所有其它请求需要身份认证 + .anyRequest().authenticated() + .and() + // 添加一个过滤器 所有访问 /login 的请求交给 JWTLoginFilter 来处理 这个类处理所有的JWT相关内容 + .addFilterBefore(new JwtLoginFilter("/api/login", authenticationManager()), + UsernamePasswordAuthenticationFilter.class) + // 添加一个过滤器验证其他请求的Token是否合法 + .addFilterBefore(new JwtAuthenticationFilter(), + UsernamePasswordAuthenticationFilter.class); + } + + @Override + protected void configure(AuthenticationManagerBuilder auth) { + // 使用自定义身份验证组件 + auth.authenticationProvider(new CustomAuthenticationProvider()); + } +} + diff --git a/src/main/java/com/xkrs/microservice/common/encapsulation/EncapsulationObject.java b/src/main/java/com/xkrs/microservice/common/encapsulation/EncapsulationObject.java new file mode 100644 index 0000000..67ac342 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/encapsulation/EncapsulationObject.java @@ -0,0 +1,59 @@ +package com.xkrs.microservice.common.encapsulation; + +import java.io.Serializable; + +/** + * 输出信息对象 + * @author tajochen + * @param + */ +public class EncapsulationObject implements Serializable { + + /** + * 状态码 + */ + int status; + + /** + * 提示信息 + */ + String msg; + + /** + * 数据 + */ + T data; + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + @Override + public String toString() { + return "EncapsulationObejct{" + + "status=" + status + + ", msg='" + msg + '\'' + + ", data=" + data + + '}'; + } +} diff --git a/src/main/java/com/xkrs/microservice/common/encapsulation/OutputEncapsulation.java b/src/main/java/com/xkrs/microservice/common/encapsulation/OutputEncapsulation.java new file mode 100644 index 0000000..4ef30cd --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/encapsulation/OutputEncapsulation.java @@ -0,0 +1,94 @@ +package com.xkrs.microservice.common.encapsulation; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.MessageSource; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.stereotype.Component; +import org.springframework.validation.FieldError; + +import java.io.IOException; +import java.io.InputStream; +import java.util.*; + +/** + * 输出信息封装 + * @author tajochen + */ +@Component +public class OutputEncapsulation { + + private static final Logger logger = LoggerFactory.getLogger(OutputEncapsulation.class); + + /** + * 读取多国语言文件 + */ + public static MessageSource messageSource() { + + // 使用ClassLoader加载properties配置文件生成对应的输入流 + InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties"); + // 使用properties对象加载输入流 + try { + Properties properties = new Properties(); + properties.load(in); + } catch (IOException e) { + e.printStackTrace(); + } + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("i18n/messages"); + messageSource.setDefaultEncoding("UTF-8"); + return messageSource; + } + + /** + * 封装输出数据 + * @param promptMessageEnum 封装枚举 + * @param obj 对象 + * @param locale 本地语言 + */ + public static String outputEncapsulationObject(PromptMessageEnum promptMessageEnum, Object obj, Locale locale) { + + EncapsulationObject encapsulationObject = new EncapsulationObject<>(); + encapsulationObject.setStatus(promptMessageEnum.getCode()); + encapsulationObject.setMsg(messageSource().getMessage(promptMessageEnum.getText(),null,locale)); + encapsulationObject.setData(obj); + + ObjectMapper objectMapper = new ObjectMapper(); + // 忽略无法转换的对象 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false); + // 忽略json字符串中不识别的属性 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 解决jackson无法反序列化LocalDateTime的问题,引入jsr310标准 + JavaTimeModule javaTimeModule = new JavaTimeModule(); + objectMapper.registerModule(javaTimeModule); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + String strByEo = ""; + try { + strByEo = objectMapper.writeValueAsString(encapsulationObject); + } catch (JsonProcessingException e) { + e.printStackTrace(); + logger.warn(e.toString()); + } + return strByEo; + } + + /** + * 输出请求值检验错误信息 + * @param fieldErrors 错误列表 + * @param locale 本地语言 + */ + public static String outputEncapsulationErrorList(List fieldErrors, Locale locale){ + List errorMsg = new ArrayList<>(); + for (FieldError fieldError : fieldErrors) { + String errMessage = Objects.requireNonNull(fieldError.getDefaultMessage()). + subSequence(1,fieldError.getDefaultMessage().length()-1).toString(); + errorMsg.add(messageSource().getMessage(errMessage,null,locale)); + } + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,errorMsg,locale); + } +} diff --git a/src/main/java/com/xkrs/microservice/common/encapsulation/PromptMessageEnum.java b/src/main/java/com/xkrs/microservice/common/encapsulation/PromptMessageEnum.java new file mode 100644 index 0000000..a886182 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/encapsulation/PromptMessageEnum.java @@ -0,0 +1,65 @@ +package com.xkrs.microservice.common.encapsulation; + +/** + * 提示信息枚举 + * @author tajochen + */ +public enum PromptMessageEnum{ + + // 执行成功 + SUCCESS(0, "sys.message.success"), + + // 用户与权限相关操作: 1001-1999 + USER_NOT_LOGGED(1001, "sys.message.user.not_logged_in"), + USER_LOGIN_ERROR(1002, "sys.message.user.login_error"), + USER_ACCOUNT_FORBIDDEN(1003, "sys.message.user.account_forbidden"), + USER_ACCOUNT_NOT_ACTIVATED(1004, "sys.message.user.account_not_activated"), + USER_HAS_OVERTIME(1005, "sys.message.user.overtime"), + USER_NO_PERMISSION(1006,"sys.message.user.no_permission"), + USER_ALREADY_LOGGED(1007, "sys.message.user.already_logged"), + USER_ALREADY_EXIST(1008, "sys.message.user.already_exist"), + USER_NOT_EXIST(1008, "sys.message.user.not_exist"), + + // 业务请求参数相关操作:2001-2999 + PARAM_NULL(2001, "sys.message.param.null"), + PARAM_ILLEGAL(2002, "sys.message.param.illegal"), + + // 业务数据相关操作:3001-3999 + DATA_NONE(3001, "sys.message.data.none"), + DATA_WRONG(3002, "sys.message.data.wrong"), + DATA_REPEAT(3003, "sys.message.data.repeat"), + + // 业务执行相关异常:4001-4999 + PROCESS_FAIL(4001,"sys.message.process.fail"), + PROCESS_OVERTIME(4002,"sys.message.process.overtime"), + FILE_EXISTS(4003,"sys.message.file.exists"), + FILE_WRITE_ERROR(4004,"sys.message.file.write.error"), + FILE_READ_ERROR(4005,"sys.message.file.read.error"), + + // 系统内部错误或异常:5001-5999 + SYSTEM_INNER_ERROR(5001,"sys.message.system.inner_error"), + SYSTEM_ABNORMAL(5002,"sys.message.system.abnormal"), + SYSTEM_BUSY(5003,"sys.message.system.busy"), + SYSTEM_MAINTAIN(5004,"sys.message.system.maintain"), + + // 数据库错误:6001-6999 + DATABASE_ERROR(6001,"sys.message.database.error"); + + private final int code; + + private final String text; + + PromptMessageEnum(int code,String text) { + this.code = code; + this.text = text; + } + + public String getText() { + return this.text; + } + + public int getCode() { + return this.code; + } + +} diff --git a/src/main/java/com/xkrs/microservice/common/tool/FileServerManageTool.java b/src/main/java/com/xkrs/microservice/common/tool/FileServerManageTool.java new file mode 100644 index 0000000..132c68d --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/tool/FileServerManageTool.java @@ -0,0 +1,92 @@ +package com.xkrs.microservice.common.tool; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.xkrs.microservice.model.vo.FileServerResultVo; +import com.xkrs.microservice.util.RequestUtil; +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 文件服务器管理工具 + * @author tajochen + */ +public class FileServerManageTool { + + private static final String FIREFOX_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) " + + "Gecko/20100101 Firefox/91.0"; + + /** + * 发送管理命令到文件服务器 + * @param url 文件服务器路径 + * @param map 命令参数集 + * @return + */ + public static FileServerResultVo postFileManage(String url, Map map){ + Logger log = LoggerFactory.getLogger(RequestUtil.class); + String body = ""; + // 创建httpclient对象 + CloseableHttpClient client = HttpClients.createDefault(); + // 创建post方式请求对象 + HttpPost httpPost = new HttpPost(url); + // 装填参数 + List nvps = new ArrayList<>(); + if(map!=null){ + for (Map.Entry entry : map.entrySet()) { + nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + } + try { + // 设置参数到请求对象中 + httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8")); + // 设置header报文头信息 + httpPost.setHeader("Content-type", "application/x-www-form-urlencoded"); + httpPost.setHeader("User-Agent", FIREFOX_UA); + httpPost.setHeader("Accept", "application"); + httpPost.setHeader("Accept-Encoding", "gzip, deflate"); + // 执行请求操作,并拿到结果(同步阻塞) + CloseableHttpResponse response = client.execute(httpPost); + // 获取结果实体 + HttpEntity entity = response.getEntity(); + if (entity != null) { + // 按指定编码转换结果实体为String类型 + body = EntityUtils.toString(entity, "UTF-8"); + } + EntityUtils.consume(entity); + // 释放链接 + response.close(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + client.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + FileServerResultVo fileServerResultVo = new FileServerResultVo(); + ObjectMapper mapper = new ObjectMapper(); + try { + fileServerResultVo = mapper.readValue(body, FileServerResultVo.class); + } catch (JsonProcessingException e) { + e.printStackTrace(); + log.warn(e.toString()); + + } + return fileServerResultVo; + } +} diff --git a/src/main/java/com/xkrs/microservice/common/tool/JackSonUtil.java b/src/main/java/com/xkrs/microservice/common/tool/JackSonUtil.java new file mode 100644 index 0000000..7cce311 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/tool/JackSonUtil.java @@ -0,0 +1,139 @@ +package com.xkrs.microservice.common.tool; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; + +/** + * Jackson 序列化与反序列化工具 + * @author tajochen + */ +public class JackSonUtil { + + Logger logger = LoggerFactory.getLogger(JackSonUtil.class); + + private static ObjectMapper objectMapper = new ObjectMapper(); + + static { + // 忽略空Bean转json的错误 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false); + // 忽略在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); + + // 配置null值序列化成空字符串 + objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<>() { + @Override + public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(""); + } + }); + // 解决jackson无法反序列化LocalDateTime的问题,引入jsr310标准 + JavaTimeModule javaTimeModule = new JavaTimeModule(); + objectMapper.registerModule(javaTimeModule); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + } + + /** + * 对象转Json格式字符串 + * @param obj 对象 + * @return Json格式字符串 + */ + public static String obj2String(T obj) { + if (obj == null) { + return null; + } try { + return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj); + } catch (JsonProcessingException e) { + return null; + } + } + + /** + * 对象转Json格式字符串(格式化的Json字符串) + * @param obj 对象 + * @return 美化的Json格式字符串 + */ + public static String obj2StringPretty(T obj) { + if (obj == null) { + return null; + } try { + return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj); + } catch (JsonProcessingException e) { + return null; + } + } + + /** + * 字符串转换为自定义对象 + * @param str 要转换的字符串 + * @param clazz 自定义对象的class对象 + * @return 自定义对象 + */ + public static T string2Obj(String str, Class clazz){ + if(str==null || str.isEmpty() || clazz == null){ + return null; + } + try { + return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz); + } catch (Exception e) { + return null; + } + } + + public static T string2Obj(String str, TypeReference typeReference) { + if (str==null || str.isEmpty() || typeReference == null) { + return null; + } + try { + return (T) (typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference)); + } catch (IOException e) { + return null; + } + } + + public static T string2Obj(String str, Class collectionClazz, Class... elementClazzes) { + JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClazz, elementClazzes); + try { + return objectMapper.readValue(str, javaType); + } catch (IOException e) { + return null; + } + } + +// public static void main(String[] args) { +// User user1 = new User(); +// user1.setId(1); +// user1.setEmail("chenhaifei@163.com"); +// String userJsonstr = JsonUtil.obj2String(user1); +// String userJsonPretty = JsonUtil.obj2StringPretty(user1); +// log.info("userJson: {}", userJsonPretty); +// +// User user2 = JsonUtil.string2Obj(userJsonstr, User.class); +// user2.setId(2); +// user2.setEmail("tianxiaorui@126.com"); +// +// List userList = new ArrayList<>(); +// userList.add(user1); +// userList.add(user2); +// String userListJson = JsonUtil.obj2String(userList); +// List userListBean = JsonUtil.string2Obj(userListJson, new TypeReference>() {}); +// if (userListBean != null) { +// userListBean.forEach(user -> { +// System.out.println(user.getId() + " : " + user.getEmail()); +// }); +// } +// List userListBean2 = JsonUtil.string2Obj(userListJson, List.class, User.class); +// if (userListBean2 != null) { +// userListBean2.forEach(user -> { +// System.out.println(user.getId() + " : " + user.getEmail()); +// }); +// } +// } +} diff --git a/src/main/java/com/xkrs/microservice/common/tool/TokenUtil.java b/src/main/java/com/xkrs/microservice/common/tool/TokenUtil.java new file mode 100644 index 0000000..23a39b4 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/tool/TokenUtil.java @@ -0,0 +1,45 @@ +package com.xkrs.microservice.common.tool; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.DecodedJWT; + +/** + * token工具 + * @author tajochen + */ +public class TokenUtil { + + /** + * Token前缀 + */ + static public final String TOKEN_PREFIX = "Bearer "; + + /** + * 加密密钥 + */ + static public final String SECRET_KEY = "J928A503V4wmF05Ka0HWN2dmW11hTfwqU97sR9E4DpF82B52542033Ok785x8173"; + + public static String getTokenUserName(String token) { + String userName = ""; + if (token != null) { + try { + String realToken = token.replace(TOKEN_PREFIX, ""); + Algorithm algorithm = Algorithm.HMAC384(SECRET_KEY); + JWTVerifier verifier = JWT.require(algorithm) + .withIssuer("https://www.star-rising.com") + .build(); + DecodedJWT jwt = verifier.verify(realToken); + // 获取用户名 + userName = jwt.getSubject(); + } catch(Exception e) { + return null; + } + } else { + return null; + } + return userName; + } + +} diff --git a/src/main/java/com/xkrs/microservice/common/tool/VarcharArrayType.java b/src/main/java/com/xkrs/microservice/common/tool/VarcharArrayType.java new file mode 100644 index 0000000..a0820f4 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/common/tool/VarcharArrayType.java @@ -0,0 +1,30 @@ +package com.xkrs.microservice.common.tool; + +import com.vladmihalcea.hibernate.type.AbstractHibernateType; +import com.vladmihalcea.hibernate.type.array.internal.ArraySqlTypeDescriptor; +import com.vladmihalcea.hibernate.type.array.internal.StringArrayTypeDescriptor; + +/** + * 数据库专用字符串数组工具 + * @author tajochen + */ +public class VarcharArrayType extends AbstractHibernateType { + + public static VarcharArrayType INSTANCE = new VarcharArrayType(); + + public VarcharArrayType() { + super(ArraySqlTypeDescriptor.INSTANCE, new TypeDescriptor()); + } + + @Override + public String getName() { + return "varchar-array"; + } + + public static class TypeDescriptor extends StringArrayTypeDescriptor { + @Override + protected String getSqlArrayType() { + return "varchar"; + } + } +} diff --git a/src/main/java/com/xkrs/microservice/controller/DataFileController.java b/src/main/java/com/xkrs/microservice/controller/DataFileController.java new file mode 100644 index 0000000..e7844c9 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/controller/DataFileController.java @@ -0,0 +1,109 @@ +package com.xkrs.microservice.controller; + +import com.xkrs.microservice.common.config.RedisUtil; +import com.xkrs.microservice.common.encapsulation.PromptMessageEnum; +import com.xkrs.microservice.model.entity.DataFileEntity; +import com.xkrs.microservice.model.qo.DataFileQo; +import com.xkrs.microservice.model.qo.ZipFileInfoQo; +import com.xkrs.microservice.model.validation.DataFileQoInsert; +import com.xkrs.microservice.model.vo.ResultVo; +import com.xkrs.microservice.service.DataFileService; +import com.xkrs.microservice.util.CopyPropertiesUtil; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.Locale; + +import static com.xkrs.microservice.common.encapsulation.OutputEncapsulation.outputEncapsulationErrorList; +import static com.xkrs.microservice.common.encapsulation.OutputEncapsulation.outputEncapsulationObject; +import static com.xkrs.microservice.common.tool.TokenUtil.getTokenUserName; + +/** + * 数据文件服务 + * @author tajochen + */ +@RestController +@RequestMapping("/api/data-file") +public class DataFileController { + + /** + * 获取区域信息 + */ + Locale locale = LocaleContextHolder.getLocale(); + + @Resource + private DataFileService dataFileService; + + @Resource + private RedisUtil redisUtil; + + + @RequestMapping(value="/get/all",method = RequestMethod.GET) + public String getAllDataFile() { + Iterable list = dataFileService.getAllDataFile(); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,list,locale); + } + + /** + * 上传tif文件 + * @param dataFileQo 数据文件实体 + * @param leftFile 左影像文件 + * @param rightFile 右影像文件 + * @param token + * @return + */ + @RequestMapping(value="/add",method = RequestMethod.POST) + public String uploadDataFile(DataFileQo dataFileQo, + @RequestPart("leftFile") MultipartFile leftFile, + @RequestPart("rightFile") MultipartFile rightFile, + @RequestHeader(value="Authorization") String token) { + if(dataFileQo.getFileName() == null){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"文件参数不能为空!",locale); + } + if(leftFile.isEmpty()){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"左影像文件为空!",locale); + } + if(rightFile.isEmpty()){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"右影像文件为空!",locale); + } + // 获取当前用户名 + String userName = getTokenUserName(token); + ResultVo resVo = dataFileService.uploadDataFile(dataFileQo,leftFile,rightFile,userName); + if(resVo.getResultCode()!=0){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,resVo.getResultMessage(),locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,resVo.getResultMessage(),locale); + } + + /** + * 运行文件 + * @param dataFileQo + * @return + */ + @RequestMapping(value="/runDataFile",method = RequestMethod.POST) + public String runDataFile(@RequestBody DataFileQo dataFileQo){ + String key = "runFile_" + dataFileQo.getId(); + if (redisUtil.hasKey(key)){ + return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG,"当前文件运行中,请稍后再试!",locale); + } + ResultVo resultVo = dataFileService.runDataFile(dataFileQo); + if(resultVo.getResultCode()!=0){ + return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG,resultVo.getResultMessage(),locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,resultVo.getResultMessage(),locale); + } + + @RequestMapping(value="/delete",method = RequestMethod.DELETE) + public String deleteDataFile(@RequestParam(value = "id") Integer id) { + int res = dataFileService.deleteDataFile(id); + if(res==1){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"id 不存在",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + +} diff --git a/src/main/java/com/xkrs/microservice/controller/FileServerController.java b/src/main/java/com/xkrs/microservice/controller/FileServerController.java new file mode 100644 index 0000000..d5e8f3d --- /dev/null +++ b/src/main/java/com/xkrs/microservice/controller/FileServerController.java @@ -0,0 +1,119 @@ +package com.xkrs.microservice.controller; + +import com.xkrs.microservice.model.vo.FileServerResultVo; +import com.xkrs.microservice.service.FileServerService; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Locale; + +/** + * 文件服务器管理服务 + * @author tajochen + */ +@RestController +@RequestMapping("/api/file") +public class FileServerController { + + /** + * 获取区域信息 + */ + Locale locale = LocaleContextHolder.getLocale(); + + @Resource + private FileServerService fileServerService; + + /** + * 文件统计 + * @return + */ + @RequestMapping(value="/stat",method = RequestMethod.GET) + @PreAuthorize("hasAnyAuthority('auth_system_manager','auth_administor')") + @CrossOrigin + public FileServerResultVo getFileStat() { + return fileServerService.getFileStat(); + } + + /** + * 文件删除 + * @param md5 信息摘要 + * @param path 路径 + * @return + */ + @RequestMapping(value="/delete",method = RequestMethod.DELETE) + @PreAuthorize("hasAnyAuthority('auth_system_manager','role_administor')") + @CrossOrigin + public FileServerResultVo deleteFile(@RequestParam(value = "md5",required = false) String md5, + @RequestParam(value = "path",required = false) String path) { + FileServerResultVo fileServerResultVo = new FileServerResultVo(); + boolean existed = (md5==null||md5.isEmpty())&&(path==null||path.isEmpty()); + if(existed){ + fileServerResultVo.setStatus("fail"); + fileServerResultVo.setData(""); + fileServerResultVo.setMessage("参数为空"); + return fileServerResultVo; + } + return fileServerService.deleteFile(md5,path); + } + + /** + * 获取文件信息 + * @param md5 信息摘要 + * @param path 路径 + * @return + */ + @RequestMapping(value="/get/info",method = RequestMethod.DELETE) + @PreAuthorize("hasAnyAuthority('auth_system_manager','role_administor')") + @CrossOrigin + public FileServerResultVo getFileInfo(@RequestParam(value = "md5",required = false) String md5, + @RequestParam(value = "path",required = false) String path) { + boolean existed = (md5==null||md5.isEmpty())&&(path==null||path.isEmpty()); + if(existed){ + FileServerResultVo fileServerResultVo = new FileServerResultVo<>(); + fileServerResultVo.setStatus("fail"); + fileServerResultVo.setData(""); + fileServerResultVo.setMessage("参数为空"); + return fileServerResultVo; + } + return fileServerService.getFileInfo(md5,path); + } + + /** + * 获取文件列表 + * @param dir 文件夹 + * @return + */ + @RequestMapping(value="/get/list",method = RequestMethod.DELETE) + @PreAuthorize("hasAnyAuthority('auth_system_manager','role_administor')") + @CrossOrigin + public FileServerResultVo getFileList(@RequestParam(value = "dir") String dir) { + return fileServerService.getFileList(dir); + } + + /** + * 修复统计信息 + * @param date 要修复的日期,格式如:20190725 + * @return + */ + @RequestMapping(value="/get/repair-stat",method = RequestMethod.DELETE) + @PreAuthorize("hasAnyAuthority('auth_system_manager','role_administor')") + @CrossOrigin + public FileServerResultVo getFileRepairStat(@RequestParam(value = "date") String date) { + return fileServerService.getFileRepairStat(date); + } + + /** + * 同步失败修复 + * @param force 是否强行修复(0|1) + * @return + */ + @RequestMapping(value="/get/repair",method = RequestMethod.DELETE) + @PreAuthorize("hasAnyAuthority('auth_system_manager','role_administor')") + @CrossOrigin + public FileServerResultVo getFileRepair(@RequestParam(value = "force") String force) { + return fileServerService.getFileRepair(force); + } + +} diff --git a/src/main/java/com/xkrs/microservice/controller/MapServiceController.java b/src/main/java/com/xkrs/microservice/controller/MapServiceController.java new file mode 100644 index 0000000..94ab811 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/controller/MapServiceController.java @@ -0,0 +1,158 @@ +package com.xkrs.microservice.controller; + +import com.xkrs.microservice.common.encapsulation.PromptMessageEnum; +import com.xkrs.microservice.model.entity.MapServiceEntity; +import com.xkrs.microservice.model.qo.MapServiceQo; +import com.xkrs.microservice.model.validation.MapServiceQoInsert; +import com.xkrs.microservice.model.validation.MapServiceUpdate; +import com.xkrs.microservice.model.vo.MapLayerGroupVo; +import com.xkrs.microservice.service.MapServiceService; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Locale; + +import static com.xkrs.microservice.common.encapsulation.OutputEncapsulation.outputEncapsulationErrorList; +import static com.xkrs.microservice.common.encapsulation.OutputEncapsulation.outputEncapsulationObject; +import static com.xkrs.microservice.common.tool.TokenUtil.getTokenUserName; +import static com.xkrs.microservice.util.NumberUtil.isStrNumeric; + +/** + * 地图服务 + * @author tajochen + */ +@RestController +@RequestMapping("/api/map-service") +public class MapServiceController { + + /** + * 获取区域信息 + */ + Locale locale = LocaleContextHolder.getLocale(); + + @Resource + private MapServiceService mapServiceService; + + @RequestMapping(value="/get/all",method = RequestMethod.GET) + public String getAllMapService() { + Iterable list = mapServiceService.getAllService(); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,list,locale); + } + + @RequestMapping(value="/get/menu-code",method = RequestMethod.GET) + public String getAllMapServiceByMenuCode(@RequestParam(value = "menuCode") String menuCode) { + Iterable list = mapServiceService.getByMenuCode(menuCode); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,list,locale); + } + + @RequestMapping(value="/get/layername",method = RequestMethod.GET) + public String getAllMapServiceByLayerName(@RequestParam(value = "layerName") String layerName) { + Iterable list = mapServiceService.getByLayerName(layerName); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,list,locale); + } + + @RequestMapping(value="/add",method = RequestMethod.POST) + public String addMapService(@Validated({MapServiceQoInsert.class}) @RequestBody + MapServiceQo mapServiceQo, + BindingResult bindingResult, @RequestHeader(value="Authorization") String token) { + // 验证数据合法性 + if(bindingResult.hasErrors()){ + return outputEncapsulationErrorList(bindingResult.getFieldErrors(),locale); + } + // 获取当前用户名 + String userName = getTokenUserName(token); + mapServiceService.add(mapServiceQo,userName); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + + @RequestMapping(value="/update",method = RequestMethod.POST) + public String updateMapService(@Validated({MapServiceUpdate.class}) @RequestBody + MapServiceQo mapServiceQo, + BindingResult bindingResult, @RequestHeader(value="Authorization") String token) { + // 验证数据合法性 + if(bindingResult.hasErrors()){ + return outputEncapsulationErrorList(bindingResult.getFieldErrors(),locale); + } + // 获取当前用户名 + String userName = getTokenUserName(token); + int res = mapServiceService.updateById(mapServiceQo,userName); + if(res==1){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"地图服务不存在!",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + + @RequestMapping(value="/delete",method = RequestMethod.DELETE) + public String deleteMapService(@RequestParam(value = "id") Integer id) { + int res = mapServiceService.delete(id); + if(res==1){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"id 不存在",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + + @RequestMapping(value="/map-layer-group/menu-code",method = RequestMethod.GET) + public String getAllMapLayerGroupByMenuCode(@RequestParam(value = "menuCode") String menuCode) { + List list = mapServiceService.getAllMapLayerGroupByMenuCode(menuCode); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,list,locale); + } + + @RequestMapping(value="/map-layer-group/group-code",method = RequestMethod.GET) + public String getAllMapLayerGroupByLayerGroupCode(@RequestParam(value = "groupCode") String groupCode) { + List list = mapServiceService.getAllMapLayerGroupByLayerGroupCode(groupCode); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,list,locale); + } + + @RequestMapping(value="/map-layer-group/add",method = RequestMethod.POST) + public String addMapLayerGroup(@RequestParam(value = "layerIds") String layerIds, + @RequestParam(value = "layerGroupOrders") String layerGroupOrders, + @RequestHeader(value="Authorization") String token) { + // 获取当前用户名 + String userName = getTokenUserName(token); + + String[] layerIdsArr = layerIds.split(","); + String[] layerGroupOrdersArr = layerGroupOrders.split(","); + if(layerIdsArr.length<=0||layerGroupOrdersArr.length<=0){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"图层列表或顺序列表错误!",locale); + } + Integer[] layerIdsArrNum = new Integer[layerIdsArr.length]; + Integer[] layerGroupOrdersAraNum = new Integer[layerGroupOrdersArr.length]; + for (String numStr:layerIdsArr) { + if(!isStrNumeric(numStr)){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"图层列表错误!",locale); + } + } + for (String numStr2:layerGroupOrdersArr) { + if(!isStrNumeric(numStr2)){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"顺序列表错误!",locale); + } + } + for(int i=0;i list = sysMenuService.getAllSysMenu(); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,list,locale); + } + + @RequestMapping(value="/get/menu-code",method = RequestMethod.GET) + public String getAllSysMenuByMenuCode(@RequestParam(value = "menuCode") String menuCode) { + Iterable list = sysMenuService.getSysMenuByMenuCode(menuCode); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,list,locale); + } + + @RequestMapping(value="/get/menu-name",method = RequestMethod.GET) + public String getAllSysMenuByMenuName(@RequestParam(value = "menuName") String menuName) { + Iterable list = sysMenuService.getSysMenuByMenuName("%"+menuName+"%"); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,list,locale); + } + + @RequestMapping(value="/add",method = RequestMethod.POST) + public String addSysMenu(@Validated({SysMenuQoInsert.class}) @RequestBody + SysMenuQo sysMenuQo, + BindingResult bindingResult, @RequestHeader(value="Authorization") String token) { + // 验证数据合法性 + if(bindingResult.hasErrors()){ + return outputEncapsulationErrorList(bindingResult.getFieldErrors(),locale); + } + SysMenuEntity sysMenuEntity = new SysMenuEntity(); + CopyPropertiesUtil.copy( sysMenuQo, sysMenuEntity); + // 获取当前用户名 + String userName = getTokenUserName(token); + sysMenuEntity.setCreatedBy(userName); + sysMenuService.insertSysMenu(sysMenuEntity); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + + @RequestMapping(value="/update",method = RequestMethod.POST) + public String updateSysMenu(@Validated({SysMenuQoUpdate.class}) @RequestBody + SysMenuQo sysMenuQo, + BindingResult bindingResult, @RequestHeader(value="Authorization") String token) { + // 验证数据合法性 + if(bindingResult.hasErrors()){ + return outputEncapsulationErrorList(bindingResult.getFieldErrors(),locale); + } + SysMenuEntity sysMenuEntity = new SysMenuEntity(); + CopyPropertiesUtil.copy( sysMenuQo, sysMenuEntity); + // 获取当前用户名 + String userName = getTokenUserName(token); + sysMenuEntity.setUpdatedBy(userName); + sysMenuService.updateSysMenu(sysMenuEntity); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + + @RequestMapping(value="/delete",method = RequestMethod.DELETE) + public String deleteSysMenu(@RequestParam(value = "id") Integer id) { + int res = sysMenuService.deleteSysMenu(id); + if(res==1){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"id 不存在!",locale); + } + if(res==2){ + return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"存在 关联子菜单!",locale); + } + if(res==3){ + return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"存在 关联数据文件!",locale); + } + if(res==4){ + return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"存在 关联地图服务!",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + +} diff --git a/src/main/java/com/xkrs/microservice/controller/SysUserController.java b/src/main/java/com/xkrs/microservice/controller/SysUserController.java new file mode 100644 index 0000000..4d20938 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/controller/SysUserController.java @@ -0,0 +1,260 @@ +package com.xkrs.microservice.controller; + +import com.aliyun.dysmsapi20170525.models.SendSmsRequest; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.xkrs.microservice.common.config.RedisUtil; +import com.xkrs.microservice.common.encapsulation.PromptMessageEnum; +import com.xkrs.microservice.model.entity.SysRoleEntity; +import com.xkrs.microservice.model.qo.SysUserQo; +import com.xkrs.microservice.model.validation.SysUserQoInsert; +import com.xkrs.microservice.model.vo.SysUserVo; +import com.xkrs.microservice.service.SysRoleService; +import com.xkrs.microservice.service.SysUserService; +import com.xkrs.microservice.util.AliMsgUtil; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +import java.util.List; +import java.util.Locale; + +import static com.xkrs.microservice.common.encapsulation.OutputEncapsulation.outputEncapsulationErrorList; +import static com.xkrs.microservice.common.encapsulation.OutputEncapsulation.outputEncapsulationObject; +import static com.xkrs.microservice.common.tool.TokenUtil.getTokenUserName; +import static com.xkrs.microservice.util.NumberUtil.getRandomNumber; +import static com.xkrs.microservice.util.NumberUtil.isStrNumeric; + +/** + * 系统用户服务 + * @author tajocehn + */ +@RestController +@RequestMapping(value = "/api/user") +public class SysUserController { + + /** + * 获取区域信息 + */ + Locale locale = LocaleContextHolder.getLocale(); + + @Resource + private SysUserService sysUserService; + + @Resource + private SysRoleService sysRoleService; + + @Resource + private RedisUtil redisUtil; + + /** + * 登录用户Token验证 + * @return + */ + @RequestMapping(value = "/logged/check",method = RequestMethod.POST) + public String loginUserTokenCheck(){ + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + + @RequestMapping(value = "/check/duplicate", method = RequestMethod.GET) + public String checkDuplicate(@RequestParam(value="userName") String userName){ + // 验证用户名是否重复 + if(!sysUserService.checkUserName(userName)){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"OK",locale); + } + + @RequestMapping(value = "/register", method = RequestMethod.POST) + public String addUser(@Validated({SysUserQoInsert.class}) @RequestBody SysUserQo userQo, + BindingResult bindingResult){ + // 验证数据合法性 + if(bindingResult.hasErrors()){ + return outputEncapsulationErrorList(bindingResult.getFieldErrors(),locale); + } + // 验证用户名是否重复 + if(!sysUserService.checkUserName(userQo.getUserName())){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"",locale); + } + // 添加新用户 + sysUserService.addUser(userQo); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"OK",locale); + } + + @RequestMapping(value="/get/all", method = RequestMethod.GET) + @PreAuthorize("hasAnyAuthority('auth_administor','auth_system_manager','auth_general_manager')") + public String getAllSysUser(){ + Iterable sysUserDtoList = sysUserService.getAllSysUser(); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,sysUserDtoList,locale); + } + + @RequestMapping(value="/send-msg/telephone", method = RequestMethod.POST) + public String checkTelephone(@RequestParam(value="telephone") String telephone) throws Exception { + // 最大过期时间 + final long maxExpiredTime = 60*10; + // 最小重发时间 + final long minReplayTime = 60*9; + if(telephone.isEmpty()){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"参数不合法!",locale); + } + SysUserVo sysUserVo = sysUserService.findByTelephone(telephone); + if(sysUserVo==null){ + return outputEncapsulationObject(PromptMessageEnum.USER_NOT_EXIST,"用户不存在!",locale); + } + // 如果短信过期时间小于60秒 + long expiredTime = redisUtil.getExpire("verification_"+telephone); + if(expiredTime>=minReplayTime) { + return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"同一手机号1分钟内只能发送一次!",locale); + } + // 调用阿里短信接口 + String verificationCode = getRandomNumber(6); + com.aliyun.dysmsapi20170525.Client client = AliMsgUtil.createClient("LTAI5tMSjLfu8Xu2w6WeguFF", "hvqM5zpi72hvX4VXM71wq6AE0XYtDI"); + SendSmsRequest sendSmsRequest = new SendSmsRequest() + .setSignName("青岛星科瑞升") + .setTemplateCode("SMS_221082764") + .setTemplateParam("{\"code\":" + verificationCode + "}") + .setPhoneNumbers(sysUserVo.getTelephone()); + SendSmsResponse response = client.sendSms(sendSmsRequest); + // 写入缓存,过期时间10分钟 + redisUtil.set("verification_"+telephone,verificationCode,maxExpiredTime); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + + @RequestMapping(value="/verification/telephone", method = RequestMethod.POST) + public String verificationTelephone(@RequestParam(value="telephone") String telephone,@RequestParam(value="verificationCode") String verificationCode) throws Exception { + // 最大过期时间 + final long maxExpiredTime = 60*10; + // 最小重发时间 + final long minReplayTime = 60*9; + if(telephone.isEmpty()){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"参数不合法!",locale); + } + SysUserVo sysUserVo = sysUserService.findByTelephone(telephone); + if(sysUserVo==null){ + return outputEncapsulationObject(PromptMessageEnum.USER_NOT_EXIST,"用户不存在!",locale); + } + // 获取验证码 + Object msgCode = redisUtil.get("verification_"+telephone); + if(msgCode==null){ + return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"验证码不存在!",locale); + } + // 如果验证码不正确 + if(msgCode.toString().equals(verificationCode)){ + return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG,"验证码不正确!",locale); + } + // 手机号验证成功 + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + + /** + * 软删除指定id的普通用户 + * @param id + * @return + */ + @RequestMapping(value = "/general/delete", method = RequestMethod.DELETE) + @PreAuthorize("hasAnyAuthority('auth_administor','auth_system_manager','auth_general_manager')") + public String deleteCustomUser(@RequestParam(value="userId", required=false) int id){ + + // 验证数据合法性 + int res = sysUserService.softDeleteGeneralUser(id); + if(res==1){ + return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"",locale); + } else { + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + } + +// @RequestMapping(value = "/update", method = RequestMethod.POST) +// @PreAuthorize("hasAnyAuthority('auth_system_manager','auth_administor')") +// public String updateUser(@Validated({SysUserQoUpdate.class}) @RequestBody SysUserQo userQo, +// BindingResult bindingResult){ +// // 验证数据合法性 +// if(bindingResult.hasErrors()){ +// return outputEncapsulationErrorList(bindingResult.getFieldErrors(),locale); +// } +// // 修改用户 +// sysUserService.updateSysUser(userQo); +// return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"OK",locale); +// } + + @RequestMapping(value = "/update/portrait", method = RequestMethod.POST) + public String updateUserPortrait(@RequestParam(value="portraitId") String portraitId, + @RequestHeader(value="Authorization") String token){ + + if(!isStrNumeric(portraitId)){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"",locale); + } + // 获取当前用户名 + String userName = getTokenUserName(token); + // 头像是否正确 + int res = sysUserService.updateSysUserPortrait(userName, Integer.valueOf(portraitId)); + if(res==1){ + return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG,"",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"OK",locale); + } + + @RequestMapping(value = "/update/password", method = RequestMethod.POST) + public String updateUserPassword(@RequestParam(value="oldPassword") String oldPassword, + @RequestParam(value="newPassword") String newPassword, + @RequestHeader(value="Authorization") String token){ + // 获取当前用户名 + String userName = getTokenUserName(token); + int res = sysUserService.updateSysUserPassword(userName,oldPassword,newPassword); + final int r1 = 1; + final int r2 = 2; + final int r3 = 3; + if(res==r1){ + return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG,"未知错误",locale); + } else if(res==r2){ + return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG,"旧密码错误",locale); + } else if(res==r3){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"新密码不符合规则",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"OK",locale); + } + + @RequestMapping(value = "/get/info", method = RequestMethod.GET) + public String getUserInfo(@RequestHeader(value="Authorization") String token){ + // 获取当前用户名 + String userName = getTokenUserName(token); + SysUserVo sysUserVo = sysUserService.getSysUserVoByUserName(userName); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,sysUserVo,locale); + } + + @RequestMapping(value="/set/forbidden",method = RequestMethod.POST) + @PreAuthorize("hasAnyAuthority('auth_administor','auth_system_manager','auth_general_manager')") + public String setUserForbidden(@RequestParam(value="userName", required=true) String userName) { + String generalRole = "role_general_user"; + if(sysUserService.checkUserName(userName)){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"userName 错误",locale); + } + List list1 = sysRoleService.getSysRoleListByUserName(userName); + SysRoleEntity sysRoleEntity = list1.get(0); + if(generalRole.equals(sysRoleEntity.getRoleName())){ + sysUserService.disableSysUser(userName); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + return outputEncapsulationObject(PromptMessageEnum.USER_NO_PERMISSION,"",locale); + } + + @RequestMapping(value="/set/enable",method = RequestMethod.POST) + @PreAuthorize("hasAnyAuthority('auth_administor','auth_system_manager','auth_general_manager')") + public String setUserEnable(@RequestParam(value="userName", required=true) String userName) { + String generalRole = "role_general_user"; + if(sysUserService.checkUserName(userName)){ + return outputEncapsulationObject(PromptMessageEnum.PARAM_ILLEGAL,"userName 错误",locale); + } + List list1 = sysRoleService.getSysRoleListByUserName(userName); + SysRoleEntity sysRoleEntity = list1.get(0); + if(generalRole.equals(sysRoleEntity.getRoleName())){ + sysUserService.enableSysUser(userName); + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale); + } + return outputEncapsulationObject(PromptMessageEnum.USER_NO_PERMISSION,"",locale); + } + +} diff --git a/src/main/java/com/xkrs/microservice/dao/DataFileDao.java b/src/main/java/com/xkrs/microservice/dao/DataFileDao.java new file mode 100644 index 0000000..ed3ddaa --- /dev/null +++ b/src/main/java/com/xkrs/microservice/dao/DataFileDao.java @@ -0,0 +1,60 @@ +package com.xkrs.microservice.dao; + +import com.xkrs.microservice.model.entity.DataFileEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +/** + * DataFileDao + * @author tajochen + */ +public interface DataFileDao extends JpaRepository { + + /** + * 获取文件数据根据菜单代码 + * @param menuCode 菜单代码 + * @return + */ + List findAllByMenuCode(String menuCode); + + /** + * 获取文件数据根据菜单代码和数据类型 + * @param menuCode 菜单代码 + * @param dataType 数据类型 + * @return + */ + List findAllByMenuCodeAndDataType(String menuCode,String dataType); + + /** + * 获取文件数据根据菜单代码和数据类型和发布标记 + * @param menuCode 菜单代码 + * @param dataType 数据类型 + * @param publishFlag 发布标记 + * @return + */ + List findAllByMenuCodeAndDataTypeAndPublishFlag(String menuCode,String dataType,Integer publishFlag); + + /** + * 获取文件数据根据菜单代码 + * @param menuCode 菜单代码 + * @param publishFlag 发布标记 + * @returnh + */ + List findAllByMenuCodeAndPublishFlag(String menuCode,Integer publishFlag); + + /** + * 查找数据根据数据类型 + * @param dataType 数据类型 + * @return + */ + List findAllByDataType(String dataType); + + /** + * 获取文件数据根据根据文件代码 + * @param dataFileCode 数据文件代码 + * @return + */ + DataFileEntity findByDataFileCode(String dataFileCode); + +} diff --git a/src/main/java/com/xkrs/microservice/dao/MapServiceDao.java b/src/main/java/com/xkrs/microservice/dao/MapServiceDao.java new file mode 100644 index 0000000..e5fcc01 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/dao/MapServiceDao.java @@ -0,0 +1,59 @@ +package com.xkrs.microservice.dao; + +import com.xkrs.microservice.model.entity.MapServiceEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +/** + * MapServiceDao + * @author tajochen + */ +public interface MapServiceDao extends JpaRepository { + + /** + * 根据菜单代码查找 + * @param menuCode 菜单代码 + * @return + */ + List findAllByMenuCode(String menuCode); + + /** + * 根据图层名称查找 + * @param layerName 图层名称 + * @return + */ + List findAllByLayerName(String layerName); + + /** + * 根据文件代码查找服务 + * @param dataFileCode 文件代码 + * @return + */ + List findAllByDataFileCode(String dataFileCode); + + /** + * 根据图层组查找服务 + * @param layerGroupCode 图层组代码 + * @return + */ + List findAllByLayerGroupCode(String layerGroupCode); + + /** + * 根据产品类型查找 + * @param productType 产品类型 + * @return + */ + List findAllByProductType(String productType); + + + /** + * 根据产品类型和行政区划代码和产品类型 + * @param productType 产品类型 + * @param admCode 行政区划代码 + * @return + */ + List findAllByProductTypeAndAdmCode(String productType, Integer admCode); + + +} diff --git a/src/main/java/com/xkrs/microservice/dao/SysAuthorityDao.java b/src/main/java/com/xkrs/microservice/dao/SysAuthorityDao.java new file mode 100644 index 0000000..5ca13f2 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/dao/SysAuthorityDao.java @@ -0,0 +1,27 @@ +package com.xkrs.microservice.dao; + +import com.xkrs.microservice.model.entity.SysAuthorityEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + * SysAuthorityDao + * @author tajochen + */ +public interface SysAuthorityDao extends JpaRepository { + /** + * 查询权限实体列表根据用户名 Object[] + * @param userName 用户名 + * @return 用户实体 + */ + @Query(value = "SELECT a.id, a.authority_name, a.authority_name_zh, a.authority_desc ,a.authority_name_en " + + "FROM sys_authority a,rel_role_authority ra,sys_role r " + + "WHERE r.id = ra.role_id AND ra.authority_id = a.id AND r.id " + + "IN (SELECT r.id FROM sys_user u,sys_role r,rel_user_role ur " + + " WHERE u.user_name = :userName AND u.id = ur.user_id AND ur.role_id = r.id)", nativeQuery = true) + List selectByUserName(@Param("userName") String userName); + +} diff --git a/src/main/java/com/xkrs/microservice/dao/SysMenuDao.java b/src/main/java/com/xkrs/microservice/dao/SysMenuDao.java new file mode 100644 index 0000000..28adfdf --- /dev/null +++ b/src/main/java/com/xkrs/microservice/dao/SysMenuDao.java @@ -0,0 +1,35 @@ +package com.xkrs.microservice.dao; + +import com.xkrs.microservice.model.entity.SysMenuEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +/** + * SysMenuDao + * @author tajochen + */ +public interface SysMenuDao extends JpaRepository { + + /** + * 获取系统菜单根据菜单代码 + * @param menuCode 菜单代码 + * @return + */ + List findAllByMenuCode(String menuCode); + + /** + * 获取系统菜单根据菜单名称模糊搜索 + * @param menuName 菜单名称 + * @return + */ + List findAllByMenuNameLike(String menuName); + + /** + * 获取系统菜单列表根据父级菜单代码 + * @param parentCode 父级菜单代码 + * @return + */ + List findAllByParentCode(String parentCode); + +} diff --git a/src/main/java/com/xkrs/microservice/dao/SysRoleDao.java b/src/main/java/com/xkrs/microservice/dao/SysRoleDao.java new file mode 100644 index 0000000..1ddfac6 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/dao/SysRoleDao.java @@ -0,0 +1,61 @@ +package com.xkrs.microservice.dao; + +import com.xkrs.microservice.model.entity.SysRoleEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + * SysRoleDao + * @author tajochen + */ +public interface SysRoleDao extends JpaRepository { + + /** + * 查询用户角色列表根据用户id + * @param id 编号 + * @return + */ + @Query(value = "SELECT sys_role.id,sys_role.role_name,sys_role.role_name_zh,sys_role.role_name_en,sys_role.role_desc " + + "FROM sys_role,rel_user_role " + + "WHERE sys_role.id = rel_user_role.role_id " + + "AND rel_user_role.user_id = :id ", nativeQuery = true) + List selectByUserId(@Param("id") Integer id); + + /** + * 查询用户角色列表根据用户名 + * @param userName 用户名 + * @return + */ + @Query(value = "SELECT sys_role.id,sys_role.role_name,sys_role.role_name_zh,sys_role.role_name_en,sys_role.role_desc " + + "FROM sys_role,rel_user_role,sys_user "+ + "WHERE sys_role.ID = rel_user_role.role_id " + + "AND rel_user_role.user_id = sys_user.id " + + "AND rel_user_role.user_id = sys_user.id " + + "AND sys_user.user_name = :userName ", nativeQuery = true) + List selectByUserName(@Param("userName") String userName); + + +// /** +// * 根据用户名修改用户角色 +// */ +// @Modifying +// @Query(value = "UPDATE sys_user SET last_entry_time = now(), last_entry_ip = :ipAddress " + +// "WHERE user_name = :userName ;", nativeQuery = true) +// int updateUserRoleByUserName(@Param("userName") String userName); + + /** + * 添加用户角色根据用户名和角色名 + * @param userName 用户名 + * @param roleName 角色名 + * @return + */ + @Modifying + @Query(value = "INSERT INTO rel_user_role (id,role_id, user_id) " + + "SELECT nextval('rel_user_role_seq'),sys_role.ID,sys_user.ID FROM sys_role,sys_user " + + "WHERE sys_role.role_name = :roleName AND sys_user.user_name = :userName ", nativeQuery = true) + int insertRelUserRole(@Param("userName") String userName,@Param("roleName") String roleName); +} diff --git a/src/main/java/com/xkrs/microservice/dao/SysUserDao.java b/src/main/java/com/xkrs/microservice/dao/SysUserDao.java new file mode 100644 index 0000000..477c5ee --- /dev/null +++ b/src/main/java/com/xkrs/microservice/dao/SysUserDao.java @@ -0,0 +1,111 @@ +package com.xkrs.microservice.dao; + +import com.xkrs.microservice.model.entity.SysUserEntity; +import com.xkrs.microservice.model.vo.SysUserVo; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + * SysUserDao + * @author tajochen + */ +public interface SysUserDao extends JpaRepository { + + /** + * 获取指定userName + * @param userName 用户名 + * @return + */ + SysUserEntity findByUserName(String userName); + + /** + * 获取指定手机号的用户 + * @param telephone 手机号 + * @return + */ + @Query(value = "select new com.xkrs.microservice.model.vo.SysUserVo (u.id, u.userName, u.userCode, u.nickName,\n" + + "u.realName, u.idCard, u.address, u.admCode,u.birthday,u.email,u.sex,u.telephone ,u.signature,\n" + + "u.statusCode,u.portraitId,u.activeFlag,u.lastEntryIp,u.lastEntryTime,u.memo,u.createdTime,\n" + + "r.roleName,r.roleNameZh) from SysUserEntity u ,SysRoleEntity r," + + "RelUserRoleEntity u_r " + + "WHERE u.deleteFlag = 0 AND u.activeFlag = 0 AND r.id = u_r.roleId AND u.id = u_r.userId " + + "AND u.telephone = :telephone") + SysUserVo findByTelephone(String telephone); + + /** + * 获取指定用户Vo(未软删除用户) + * @param userName 用户名 + * @return + */ + @Query(value = "select new com.xkrs.microservice.model.vo.SysUserVo (u.id, u.userName, u.userCode, u.nickName,\n" + + "u.realName, u.idCard, u.address, u.admCode,u.birthday,u.email,u.sex,u.telephone ,u.signature,\n" + + "u.statusCode,u.portraitId,u.activeFlag,u.lastEntryIp,u.lastEntryTime,u.memo,u.createdTime,\n" + + "r.roleName,r.roleNameZh) from SysUserEntity u ,SysRoleEntity r," + + "RelUserRoleEntity u_r " + + "WHERE u.deleteFlag = 0 AND u.activeFlag = 0 AND r.id = u_r.roleId AND u.id = u_r.userId " + + "AND u.userName = :userName") + SysUserVo selectSysUserByUserName(@Param("userName") String userName); + + /** + * 检查系统用户名是否存在 + * @param userName 用户名 + * @return + */ + @Query(value = "SELECT COUNT(*) FROM sys_user WHERE user_name = :userName", nativeQuery = true) + int checkUserName(@Param("userName") String userName); + + /** + * 查找用户实体根据用户名 + * @param userName 用户名 + * @return + */ + @Query(value = "SELECT * FROM sys_user WHERE user_name = :userName", nativeQuery = true) + SysUserEntity selectByUserName(@Param("userName") String userName); + + /** + * 更新用户登录信息 + * @param userName 用户名 + * @param ipAddress ip地址 + * @return + */ + @Modifying + @Query(value = "UPDATE sys_user SET last_entry_time = now(), last_entry_ip = :ipAddress " + + "WHERE user_name = :userName ;", nativeQuery = true) + int updateSysUserLogin(@Param("userName") String userName,@Param("ipAddress") String ipAddress); + + /** + * 软删除系统用户根据用户名 + * @param userName 用户名 + * @return + */ + @Modifying + @Query(value = "UPDATE sys_user SET delete_flag = 1 " + + "WHERE user_name = :userName ;", nativeQuery = true) + int softDeleteSysUserByUserName(@Param("userName") String userName); + + /** + * 软删除系统用户根据id + * @param id 编号 + * @return + */ + @Modifying + @Query(value = "UPDATE sys_user SET delete_flag = 1 " + + "WHERE id = :id ;", nativeQuery = true) + int softDeleteGeneralUserById(@Param("id") Integer id); + + /** + * 获取所有系统用户Vo(未软删除用户) + * @return + */ + @Query(value = "select new com.xkrs.microservice.model.vo.SysUserVo (u.id, u.userName, u.userCode, u.nickName," + + "u.realName, u.idCard, u.address, u.admCode,u.birthday,u.email,u.sex,u.telephone ,u.signature," + + "u.statusCode,u.portraitId,u.activeFlag,u.lastEntryIp,u.lastEntryTime,u.memo,u.createdTime," + + "r.roleName,r.roleNameZh) from SysUserEntity u ,SysRoleEntity r,RelUserRoleEntity u_r " + + "WHERE u.deleteFlag = 0 AND r.id = u_r.roleId AND u.id = u_r.userId") + List selectAllSysUser(); + +} diff --git a/src/main/java/com/xkrs/microservice/model/entity/DataFileEntity.java b/src/main/java/com/xkrs/microservice/model/entity/DataFileEntity.java new file mode 100644 index 0000000..8411431 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/entity/DataFileEntity.java @@ -0,0 +1,215 @@ +package com.xkrs.microservice.model.entity; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * DataFileEntity 表实体类 + * @author tajochen + */ +@Entity +@Table(name="data_file") +public class DataFileEntity implements Serializable { + + /** + * 指定主键,建立自增序列,主键值取自序列 + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "data_file_seq_gen") + @SequenceGenerator(name = "data_file_seq_gen", sequenceName = "data_file_seq",allocationSize = 1) + private Integer id; + + @Column( length = 128, nullable = false, columnDefinition = "varchar(128)") + private String dataFileCode; + + @Column( length = 128, nullable = false, columnDefinition = "varchar(128)") + private String dataType; + + @Column( length = 128,columnDefinition = "varchar(128)") + private String menuCode; + + @Column( length = 128, nullable = false, columnDefinition = "varchar(128)") + private String fileName; + + @Column( length = 511, columnDefinition = "varchar(511)") + private String leftFilePath; + + @Column( length = 511, columnDefinition = "varchar(511)") + private String rightFilePath; + + @Column( length = 128, columnDefinition = "varchar(128)") + private String leftFileMd5; + + @Column( length = 128, columnDefinition = "varchar(128)") + private String rightFileMd5; + + @Column( length = 128, columnDefinition = "varchar(128)") + private Long leftFileSize; + + @Column( length = 128, columnDefinition = "varchar(128)") + private Long rightFileSize; + + private Integer publishFlag; + + /** + * 运行状态(0-未运行,1-运行中,2-已完成) + */ + private Integer runFlag; + + @Column( length = 128, columnDefinition = "varchar(128)") + private String remarks; + + @Column( length = 32,nullable = false, columnDefinition = "varchar(32)") + private String createdBy; + + private LocalDateTime createdTime; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDataFileCode() { + return dataFileCode; + } + + public void setDataFileCode(String dataFileCode) { + this.dataFileCode = dataFileCode; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public String getMenuCode() { + return menuCode; + } + + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getLeftFilePath() { + return leftFilePath; + } + + public void setLeftFilePath(String leftFilePath) { + this.leftFilePath = leftFilePath; + } + + public String getRightFilePath() { + return rightFilePath; + } + + public void setRightFilePath(String rightFilePath) { + this.rightFilePath = rightFilePath; + } + + public String getLeftFileMd5() { + return leftFileMd5; + } + + public void setLeftFileMd5(String leftFileMd5) { + this.leftFileMd5 = leftFileMd5; + } + + public String getRightFileMd5() { + return rightFileMd5; + } + + public void setRightFileMd5(String rightFileMd5) { + this.rightFileMd5 = rightFileMd5; + } + + public Long getLeftFileSize() { + return leftFileSize; + } + + public void setLeftFileSize(Long leftFileSize) { + this.leftFileSize = leftFileSize; + } + + public Long getRightFileSize() { + return rightFileSize; + } + + public void setRightFileSize(Long rightFileSize) { + this.rightFileSize = rightFileSize; + } + + public Integer getPublishFlag() { + return publishFlag; + } + + public void setPublishFlag(Integer publishFlag) { + this.publishFlag = publishFlag; + } + + public Integer getRunFlag() { + return runFlag; + } + + public void setRunFlag(Integer runFlag) { + this.runFlag = runFlag; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public LocalDateTime getCreatedTime() { + return createdTime; + } + + public void setCreatedTime(LocalDateTime createdTime) { + this.createdTime = createdTime; + } + + @Override + public String toString() { + return "DataFileEntity{" + + "id=" + id + + ", dataFileCode='" + dataFileCode + '\'' + + ", dataType='" + dataType + '\'' + + ", menuCode='" + menuCode + '\'' + + ", fileName='" + fileName + '\'' + + ", leftFilePath='" + leftFilePath + '\'' + + ", rightFilePath='" + rightFilePath + '\'' + + ", leftFileMd5='" + leftFileMd5 + '\'' + + ", rightFileMd5='" + rightFileMd5 + '\'' + + ", rightFileSize=" + rightFileSize + + ", publishFlag=" + publishFlag + + ", remarks='" + remarks + '\'' + + ", createdBy='" + createdBy + '\'' + + ", createdTime=" + createdTime + + '}'; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/entity/MapServiceEntity.java b/src/main/java/com/xkrs/microservice/model/entity/MapServiceEntity.java new file mode 100644 index 0000000..49142c6 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/entity/MapServiceEntity.java @@ -0,0 +1,296 @@ +package com.xkrs.microservice.model.entity; + +import javax.persistence.*; +import java.time.LocalDateTime; + +/** + * MapServiceEntity 表实体类 + * @author tajochen + */ +@Entity +@Table(name="map_service") +public class MapServiceEntity { + + private static final long serialVersionUID = 4359709211352400087L; + + /** + * 指定主键,建立自增序列,主键值取自序列 + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "map_service_seq_gen") + @SequenceGenerator(name = "map_service_seq_gen", sequenceName = "map_service_seq",allocationSize = 1) + private Integer id; + + @Column( length = 128,nullable = false, columnDefinition = "varchar(128)") + private String dataFileCode; + + @Column( length = 64,nullable = false, columnDefinition = "varchar(64)") + private String menuCode; + + @Column(length = 255,nullable = false, columnDefinition = "varchar(255)") + private String layerName; + + @Column(length = 255, columnDefinition = "varchar(255)") + private String layerShowName; + + @Column(length = 255, columnDefinition = "varchar(255)") + private String layerGroupCode; + + private Integer layerGroupOrder; + + @Column( length = 64,nullable = false, columnDefinition = "varchar(64)") + private String serviceType; + + @Column( length = 64, columnDefinition = "varchar(64)") + private String dataType; + + @Column(length = 64, columnDefinition = "varchar(64)") + private String productType; + + private LocalDateTime productStartTime; + + private LocalDateTime productEndTime; + + @Column(length = 64,nullable = false, columnDefinition = "varchar(64)") + private String spatialReference; + + @Column(length = 128, columnDefinition = "varchar(128)") + private String styleName; + + @Column(length = 128, columnDefinition = "varchar(128)") + private String dataStorage; + + @Column(length = 128, columnDefinition = "varchar(128)") + private String workSpace; + + private Integer admCode; + + @Column( length = 64, columnDefinition = "varchar(64)") + private String admName; + + @Column(length = 128, columnDefinition = "varchar(128)") + private String remarks; + + @Column(length = 32, columnDefinition = "varchar(32)") + private String createdBy; + + private LocalDateTime createdTime; + + @Column( length = 32, columnDefinition = "varchar(32)") + private String updatedBy; + + private LocalDateTime updatedTime; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDataFileCode() { + return dataFileCode; + } + + public void setDataFileCode(String dataFileCode) { + this.dataFileCode = dataFileCode; + } + + public String getMenuCode() { + return menuCode; + } + + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + + public String getLayerName() { + return layerName; + } + + public void setLayerName(String layerName) { + this.layerName = layerName; + } + + public String getLayerShowName() { + return layerShowName; + } + + public void setLayerShowName(String layerShowName) { + this.layerShowName = layerShowName; + } + + public String getLayerGroupCode() { + return layerGroupCode; + } + + public void setLayerGroupCode(String layerGroupCode) { + this.layerGroupCode = layerGroupCode; + } + + public Integer getLayerGroupOrder() { + return layerGroupOrder; + } + + public void setLayerGroupOrder(Integer layerGroupOrder) { + this.layerGroupOrder = layerGroupOrder; + } + + public String getServiceType() { + return serviceType; + } + + public void setServiceType(String serviceType) { + this.serviceType = serviceType; + } + + public String getProductType() { + return productType; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public void setProductType(String productType) { + this.productType = productType; + } + + public LocalDateTime getProductStartTime() { + return productStartTime; + } + + public void setProductStartTime(LocalDateTime productStartTime) { + this.productStartTime = productStartTime; + } + + public LocalDateTime getProductEndTime() { + return productEndTime; + } + + public void setProductEndTime(LocalDateTime productEndTime) { + this.productEndTime = productEndTime; + } + + public String getSpatialReference() { + return spatialReference; + } + + public void setSpatialReference(String spatialReference) { + this.spatialReference = spatialReference; + } + + public String getStyleName() { + return styleName; + } + + public void setStyleName(String styleName) { + this.styleName = styleName; + } + + public String getDataStorage() { + return dataStorage; + } + + public void setDataStorage(String dataStorage) { + this.dataStorage = dataStorage; + } + + public String getWorkSpace() { + return workSpace; + } + + public void setWorkSpace(String workSpace) { + this.workSpace = workSpace; + } + + public Integer getAdmCode() { + return admCode; + } + + public void setAdmCode(Integer admCode) { + this.admCode = admCode; + } + + public String getAdmName() { + return admName; + } + + public void setAdmName(String admName) { + this.admName = admName; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public LocalDateTime getCreatedTime() { + return createdTime; + } + + public void setCreatedTime(LocalDateTime createdTime) { + this.createdTime = createdTime; + } + + public String getUpdatedBy() { + return updatedBy; + } + + public void setUpdatedBy(String updatedBy) { + this.updatedBy = updatedBy; + } + + public LocalDateTime getUpdatedTime() { + return updatedTime; + } + + public void setUpdatedTime(LocalDateTime updatedTime) { + this.updatedTime = updatedTime; + } + + @Override + public String toString() { + return "MapServiceEntity{" + + "id=" + id + + ", dataFileCode='" + dataFileCode + '\'' + + ", menuCode='" + menuCode + '\'' + + ", layerName='" + layerName + '\'' + + ", layerShowName='" + layerShowName + '\'' + + ", layerGroupCode='" + layerGroupCode + '\'' + + ", layerGroupOrder=" + layerGroupOrder + + ", serviceType='" + serviceType + '\'' + + ", dataType='" + dataType + '\'' + + ", productType='" + productType + '\'' + + ", productStartTime=" + productStartTime + + ", productEndTime=" + productEndTime + + ", spatialReference='" + spatialReference + '\'' + + ", styleName='" + styleName + '\'' + + ", dataStorage='" + dataStorage + '\'' + + ", workSpace='" + workSpace + '\'' + + ", admCode=" + admCode + + ", admName='" + admName + '\'' + + ", remarks='" + remarks + '\'' + + ", createdBy='" + createdBy + '\'' + + ", createdTime=" + createdTime + + ", updatedBy='" + updatedBy + '\'' + + ", updatedTime=" + updatedTime + + '}'; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/entity/RelRoleAuthorityEntity.java b/src/main/java/com/xkrs/microservice/model/entity/RelRoleAuthorityEntity.java new file mode 100644 index 0000000..2152b1c --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/entity/RelRoleAuthorityEntity.java @@ -0,0 +1,60 @@ +package com.xkrs.microservice.model.entity; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * RelRoleAuthority 表实体类 + * @author tajochen + */ +@Entity +@Table(name="rel_role_authority") +public class RelRoleAuthorityEntity implements Serializable { + + /** + * 指定主键,建立自增序列,主键值取自序列 + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "rel_role_authority_seq_gen") + @SequenceGenerator(name = "rel_role_authority_seq_gen", sequenceName = "rel_role_authority_seq",allocationSize = 1) + private Integer id; + + @Column(nullable = false) + private Integer roleId; + + @Column(nullable = false) + private Integer authorityId; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getRoleId() { + return roleId; + } + + public void setRoleId(Integer roleId) { + this.roleId = roleId; + } + + public Integer getAuthorityId() { + return authorityId; + } + + public void setAuthorityId(Integer authorityId) { + this.authorityId = authorityId; + } + + @Override + public String toString() { + return "RelRoleAuthorityEntity{" + + "id=" + id + + ", roleId=" + roleId + + ", authorityId=" + authorityId + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/xkrs/microservice/model/entity/RelUserRoleEntity.java b/src/main/java/com/xkrs/microservice/model/entity/RelUserRoleEntity.java new file mode 100644 index 0000000..f1a9061 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/entity/RelUserRoleEntity.java @@ -0,0 +1,60 @@ +package com.xkrs.microservice.model.entity; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * RelUserRole 表实体类 + * @author tajochen + */ +@Entity +@Table(name="rel_user_role") +public class RelUserRoleEntity implements Serializable { + + /** + * 指定主键,建立自增序列,主键值取自序列 + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "rel_user_role_seq_gen") + @SequenceGenerator(name = "rel_user_role_seq_gen", sequenceName = "rel_user_role_seq",allocationSize = 1) + private Integer id; + + @Column(nullable = false) + private Long userId; + + @Column(nullable = false) + private Integer roleId; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Integer getRoleId() { + return roleId; + } + + public void setRoleId(Integer roleId) { + this.roleId = roleId; + } + + @Override + public String toString() { + return "RelUserRoleEntity{" + + "id=" + id + + ", userId=" + userId + + ", roleId=" + roleId + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/xkrs/microservice/model/entity/SysAuthorityEntity.java b/src/main/java/com/xkrs/microservice/model/entity/SysAuthorityEntity.java new file mode 100644 index 0000000..30b6a43 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/entity/SysAuthorityEntity.java @@ -0,0 +1,84 @@ +package com.xkrs.microservice.model.entity; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * SysAuthority 表实体类 + * @author tajochen + */ +@Entity +@Table(name="sys_authority") +public class SysAuthorityEntity implements Serializable { + + /** + * 指定主键,建立自增序列,主键值取自序列 + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sys_authority_seq_gen") + @SequenceGenerator(name = "sys_authority_seq_gen", sequenceName = "sys_authority_seq",allocationSize = 1) + private Integer id; + + @Column(length = 64, nullable = false, unique = true,columnDefinition = "varchar(64)") + private String authorityName; + + @Column(length = 32, columnDefinition = "varchar(32)") + private String authorityNameZh; + + @Column(length = 64, columnDefinition = "varchar(64)") + private String authorityNameEn; + + @Column(length = 128, columnDefinition = "varchar(128)") + private String authorityDesc; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getAuthorityName() { + return authorityName; + } + + public void setAuthorityName(String authorityName) { + this.authorityName = authorityName == null ? null : authorityName.trim(); + } + + public String getAuthorityNameZh() { + return authorityNameZh; + } + + public void setAuthorityNameZh(String authorityNameZh) { + this.authorityNameZh = authorityNameZh == null ? null : authorityNameZh.trim(); + } + + public String getAuthorityNameEn() { + return authorityNameEn; + } + + public void setAuthorityNameEn(String authorityNameEn) { + this.authorityNameEn = authorityNameEn; + } + + public String getAuthorityDesc() { + return authorityDesc; + } + + public void setAuthorityDesc(String authorityDesc) { + this.authorityDesc = authorityDesc == null ? null : authorityDesc.trim(); + } + + @Override + public String toString() { + return "SysAuthorityEntity{" + + "id=" + id + + ", authorityName='" + authorityName + '\'' + + ", authorityNameZh='" + authorityNameZh + '\'' + + ", authorityNameEn='" + authorityNameEn + '\'' + + ", authorityDesc='" + authorityDesc + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/xkrs/microservice/model/entity/SysMenuEntity.java b/src/main/java/com/xkrs/microservice/model/entity/SysMenuEntity.java new file mode 100644 index 0000000..9d6f67e --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/entity/SysMenuEntity.java @@ -0,0 +1,187 @@ +package com.xkrs.microservice.model.entity; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * SysAuthority 表实体类 + * @author tajochen + */ +@Entity +@Table(name="sys_menu") +public class SysMenuEntity implements Serializable { + + /** + * 指定主键,建立自增序列,主键值取自序列 + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sys_menu_seq_gen") + @SequenceGenerator(name = "sys_menu_seq_gen", sequenceName = "sys_menu_seq",allocationSize = 1) + private Integer id; + + @Column(length = 64, nullable = false,columnDefinition = "varchar(64)") + private String menuName; + + @Column(length = 64, nullable = false, unique = true,columnDefinition = "varchar(64)") + private String menuCode; + + private Integer menuType; + + @Column( length = 64, columnDefinition = "varchar(64)") + private String parentCode; + + private Integer sortOrder; + + private Integer visibleFlag; + + @Column( length = 255, columnDefinition = "varchar(255)") + private String icon; + + @Column( length = 255, columnDefinition = "varchar(255)") + private String componentUrl; + + private Integer revision; + + @Column( length = 32, columnDefinition = "varchar(32)") + private String createdBy; + + private LocalDateTime createdTime; + + @Column( length = 32, columnDefinition = "varchar(32)") + private String updatedBy; + + private LocalDateTime updatedTime; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getMenuName() { + return menuName; + } + + public void setMenuName(String menuName) { + this.menuName = menuName; + } + + public String getMenuCode() { + return menuCode; + } + + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + + public Integer getMenuType() { + return menuType; + } + + public void setMenuType(Integer menuType) { + this.menuType = menuType; + } + + public String getParentCode() { + return parentCode; + } + + public void setParentCode(String parentCode) { + this.parentCode = parentCode; + } + + public Integer getSortOrder() { + return sortOrder; + } + + public void setSortOrder(Integer sortOrder) { + this.sortOrder = sortOrder; + } + + public Integer getVisibleFlag() { + return visibleFlag; + } + + public void setVisibleFlag(Integer visibleFlag) { + this.visibleFlag = visibleFlag; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getComponentUrl() { + return componentUrl; + } + + public void setComponentUrl(String componentUrl) { + this.componentUrl = componentUrl; + } + + public Integer getRevision() { + return revision; + } + + public void setRevision(Integer revision) { + this.revision = revision; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public LocalDateTime getCreatedTime() { + return createdTime; + } + + public void setCreatedTime(LocalDateTime createdTime) { + this.createdTime = createdTime; + } + + public String getUpdatedBy() { + return updatedBy; + } + + public void setUpdatedBy(String updatedBy) { + this.updatedBy = updatedBy; + } + + public LocalDateTime getUpdatedTime() { + return updatedTime; + } + + public void setUpdatedTime(LocalDateTime updatedTime) { + this.updatedTime = updatedTime; + } + + @Override + public String toString() { + return "SysMenuEntity{" + + "id=" + id + + ", menuName='" + menuName + '\'' + + ", menuCode='" + menuCode + '\'' + + ", menuType=" + menuType + + ", parentCode='" + parentCode + '\'' + + ", sortOrder=" + sortOrder + + ", visibleFlag=" + visibleFlag + + ", icon='" + icon + '\'' + + ", componentUrl='" + componentUrl + '\'' + + ", revision=" + revision + + ", createdBy='" + createdBy + '\'' + + ", createdTime=" + createdTime + + ", updatedBy='" + updatedBy + '\'' + + ", updatedTime=" + updatedTime + + '}'; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/entity/SysRoleEntity.java b/src/main/java/com/xkrs/microservice/model/entity/SysRoleEntity.java new file mode 100644 index 0000000..22bb252 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/entity/SysRoleEntity.java @@ -0,0 +1,84 @@ +package com.xkrs.microservice.model.entity; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * SysRole 表实体类 + * @author tajochen + */ +@Entity +@Table(name="sys_role") +public class SysRoleEntity implements Serializable { + + /** + * 指定主键,建立自增序列,主键值取自序列 + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sys_role_seq_gen") + @SequenceGenerator(name = "sys_role_seq_gen", sequenceName = "sys_role_seq",allocationSize = 1) + private Integer id; + + @Column(length = 32, nullable = false, unique = true,columnDefinition = "varchar(32)") + private String roleName; + + @Column(length = 32, columnDefinition = "varchar(32)") + private String roleNameZh; + + @Column(length = 64, columnDefinition = "varchar(64)") + private String roleNameEn; + + @Column(length = 64, columnDefinition = "varchar(64)") + private String roleDesc; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName == null ? null : roleName.trim(); + } + + public String getRoleDesc() { + return roleDesc; + } + + public void setRoleDesc(String roleDesc) { + this.roleDesc = roleDesc == null ? null : roleDesc.trim(); + } + + public String getRoleNameZh() { + return roleNameZh; + } + + public void setRoleNameZh(String roleNameZh) { + this.roleNameZh = roleNameZh == null ? null : roleNameZh.trim(); + } + + public String getRoleNameEn() { + return roleNameEn; + } + + public void setRoleNameEn(String roleNameEn) { + this.roleNameEn = roleNameEn; + } + + @Override + public String toString() { + return "SysRoleEntity{" + + "id=" + id + + ", roleName='" + roleName + '\'' + + ", roleNameZh='" + roleNameZh + '\'' + + ", roleNameEn='" + roleNameEn + '\'' + + ", roleDesc='" + roleDesc + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/xkrs/microservice/model/entity/SysUserEntity.java b/src/main/java/com/xkrs/microservice/model/entity/SysUserEntity.java new file mode 100644 index 0000000..a7a0b3a --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/entity/SysUserEntity.java @@ -0,0 +1,299 @@ +package com.xkrs.microservice.model.entity; + +import javax.persistence.*; +import java.io.Serializable; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * SysUser 表实体类 + * @author tajochen + */ +@Entity +@Table(name="sys_user") +public class SysUserEntity implements Serializable { + + /** + * 指定主键,建立自增序列,主键值取自序列 + */ + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sys_user_seq_gen") + @SequenceGenerator(name = "sys_user_seq_gen", sequenceName = "sys_user_seq",allocationSize = 1) + private Integer id; + + @Column(length = 32, nullable = false, unique = true, columnDefinition = "varchar(32)") + private String userName; + + @Column(length = 32,columnDefinition = "varchar(32)") + private String userCode; + + @Column(length = 32, columnDefinition = "varchar(32)") + private String nickName; + + @Column(length = 32, columnDefinition = "varchar(32)") + private String realName; + + @Column(length = 64, columnDefinition = "varchar(64)") + private String idCard; + + @Column(length = 64,columnDefinition = "varchar(64)") + private String address; + + private Integer admCode; + + private LocalDate birthday; + + @Column(length = 32, columnDefinition = "varchar(32)") + private String email; + + @Column(length = 64, nullable = false, columnDefinition = "varchar(64)") + private String password; + + @Column(length = 32, nullable = false, columnDefinition = "varchar(32)") + private String salt; + + @Column(columnDefinition = "smallint") + private Integer sex; + + @Column(length = 16, columnDefinition = "varchar(16)") + private String telephone; + + @Column(length = 128,columnDefinition = "varchar(128)") + private String signature; + + @Column(nullable = false,columnDefinition = "smallint") + private Integer statusCode; + + private Integer portraitId; + + @Column(nullable = false,columnDefinition = "smallint") + private Integer activeFlag; + + @Column(length = 64,columnDefinition = "varchar(64)") + private String lastEntryIp; + + private LocalDateTime lastEntryTime; + + @Column(length = 128,columnDefinition = "varchar(128)") + private String memo; + + @Column(nullable = false) + private LocalDateTime createdTime; + + @Column(nullable = false,columnDefinition = "smallint") + private Integer deleteFlag; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserCode() { + return userCode; + } + + public void setUserCode(String userCode) { + this.userCode = userCode; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public Integer getAdmCode() { + return admCode; + } + + public void setAdmCode(Integer admCode) { + this.admCode = admCode; + } + + public LocalDate getBirthday() { + return birthday; + } + + public void setBirthday(LocalDate birthday) { + this.birthday = birthday; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getSalt() { + return salt; + } + + public void setSalt(String salt) { + this.salt = salt; + } + + public Integer getSex() { + return sex; + } + + public void setSex(Integer sex) { + this.sex = sex; + } + + public String getTelephone() { + return telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + public Integer getStatusCode() { + return statusCode; + } + + public void setStatusCode(Integer statusCode) { + this.statusCode = statusCode; + } + + public Integer getPortraitId() { + return portraitId; + } + + public void setPortraitId(Integer portraitId) { + this.portraitId = portraitId; + } + + public Integer getActiveFlag() { + return activeFlag; + } + + public void setActiveFlag(Integer activeFlag) { + this.activeFlag = activeFlag; + } + + public String getLastEntryIp() { + return lastEntryIp; + } + + public void setLastEntryIp(String lastEntryIp) { + this.lastEntryIp = lastEntryIp; + } + + public LocalDateTime getLastEntryTime() { + return lastEntryTime; + } + + public void setLastEntryTime(LocalDateTime lastEntryTime) { + this.lastEntryTime = lastEntryTime; + } + + public String getMemo() { + return memo; + } + + public void setMemo(String memo) { + this.memo = memo; + } + + public LocalDateTime getCreatedTime() { + return createdTime; + } + + public void setCreatedTime(LocalDateTime createdTime) { + this.createdTime = createdTime; + } + + public Integer getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(Integer deleteFlag) { + this.deleteFlag = deleteFlag; + } + + @Override + public String toString() { + return "SysUserEntity{" + + "id=" + id + + ", userName='" + userName + '\'' + + ", userCode='" + userCode + '\'' + + ", nickName='" + nickName + '\'' + + ", realName='" + realName + '\'' + + ", idCard='" + idCard + '\'' + + ", address='" + address + '\'' + + ", admCode=" + admCode + + ", birthday=" + birthday + + ", email='" + email + '\'' + + ", password='" + password + '\'' + + ", salt='" + salt + '\'' + + ", sex=" + sex + + ", telephone='" + telephone + '\'' + + ", signature='" + signature + '\'' + + ", statusCode=" + statusCode + + ", portraitId=" + portraitId + + ", activeFlag=" + activeFlag + + ", lastEntryIp='" + lastEntryIp + '\'' + + ", lastEntryTime=" + lastEntryTime + + ", memo='" + memo + '\'' + + ", createdTime=" + createdTime + + ", deleteFlag=" + deleteFlag + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/xkrs/microservice/model/qo/DataFileQo.java b/src/main/java/com/xkrs/microservice/model/qo/DataFileQo.java new file mode 100644 index 0000000..7c924de --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/qo/DataFileQo.java @@ -0,0 +1,152 @@ +package com.xkrs.microservice.model.qo; + +import com.xkrs.microservice.model.validation.DataFileQoInsert; +import com.xkrs.microservice.model.validation.DataFileQoUpdate; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * DataFileQo + * @author tajochen + */ +public class DataFileQo { + + private Integer id; + + @Size(max = 128, message = "{DataFile.dataFileCode.length.illegal}",groups = {DataFileQoInsert.class, DataFileQoUpdate.class}) + private String dataFileCode; + + @Size(max = 128, message = "{DataFile.menuCode.length.illegal}",groups = {DataFileQoInsert.class, DataFileQoUpdate.class}) + private String menuCode; + + @Size(max = 128, message = "{DataFile.dataType.length.illegal}",groups = {DataFileQoInsert.class, DataFileQoUpdate.class}) + private String dataType; + + @Size(max = 128, message = "{DataFile.fileName.length.illegal}",groups = {DataFileQoInsert.class, DataFileQoUpdate.class}) + private String fileName; + + @Size(max = 128, message = "{DataFile.filePath.length.illegal}",groups = {DataFileQoInsert.class, DataFileQoUpdate.class}) + private String leftFilePath; + + @Size(max = 128, message = "{DataFile.filePath.length.illegal}",groups = {DataFileQoInsert.class, DataFileQoUpdate.class}) + private String rightFilePath; + + private Long fileSize; + + private String maxX; + + private String maxY; + + private String minX; + + private String minY; + + @Size(max = 128, message = "{DataFile.remarks.length.illegal}",groups = {DataFileQoInsert.class, DataFileQoUpdate.class}) + private String remarks; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDataFileCode() { + return dataFileCode; + } + + public void setDataFileCode(String dataFileCode) { + this.dataFileCode = dataFileCode; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public String getMenuCode() { + return menuCode; + } + + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getLeftFilePath() { + return leftFilePath; + } + + public void setLeftFilePath(String leftFilePath) { + this.leftFilePath = leftFilePath; + } + + public String getRightFilePath() { + return rightFilePath; + } + + public void setRightFilePath(String rightFilePath) { + this.rightFilePath = rightFilePath; + } + + public Long getFileSize() { + return fileSize; + } + + public void setFileSize(Long fileSize) { + this.fileSize = fileSize; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public String getMaxX() { + return maxX; + } + + public void setMaxX(String maxX) { + this.maxX = maxX; + } + + public String getMaxY() { + return maxY; + } + + public void setMaxY(String maxY) { + this.maxY = maxY; + } + + public String getMinX() { + return minX; + } + + public void setMinX(String minX) { + this.minX = minX; + } + + public String getMinY() { + return minY; + } + + public void setMinY(String minY) { + this.minY = minY; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/qo/MapServiceQo.java b/src/main/java/com/xkrs/microservice/model/qo/MapServiceQo.java new file mode 100644 index 0000000..6b76673 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/qo/MapServiceQo.java @@ -0,0 +1,231 @@ +package com.xkrs.microservice.model.qo; + +import com.xkrs.microservice.model.validation.MapServiceQoInsert; +import com.xkrs.microservice.model.validation.MapServiceUpdate; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * MapServiceQo + * @author tajochen + */ +public class MapServiceQo { + + @NotNull(message = "{MapService.id.null}",groups={MapServiceUpdate.class}) + private Integer id; + + @NotBlank(message = "{MapService.dataFileCode.null}",groups = {MapServiceQoInsert.class}) + @Size(max = 128, message = "{MapService.dataFileCode.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String dataFileCode; + + @NotBlank(message = "{MapService.menuCode.null}",groups = {MapServiceQoInsert.class}) + @Size(max = 64, message = "{MapService.menuCode.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String menuCode; + + @NotBlank(message = "{MapService.layerName.null}",groups = {MapServiceQoInsert.class}) + @Size(max = 128, message = "{MapService.layerName.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String layerName; + + @NotBlank(message = "{MapService.layerGroupCode.null}",groups = {MapServiceQoInsert.class}) + @Size(max = 128, message = "{MapService.layerGroupCode.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String layerGroupCode; + + private Integer layerGroupOrder; + + @NotBlank(message = "{MapService.layerShowName.null}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + @Size(max = 128, message = "{MapService.layerShowName.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String layerShowName; + + @NotBlank(message = "{MapService.serviceType.null}",groups = {MapServiceQoInsert.class}) + @Size(max = 64, message = "{MapService.serviceType.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String serviceType; + + @NotBlank(message = "{MapService.dataType.null}",groups = {MapServiceQoInsert.class}) + @Size(max = 64, message = "{MapService.dataType.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String dataType; + + @Size(max = 64, message = "{MapService.productType.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String productType; + + private Long productStartTimeTs; + + private Long productEndTimeTs; + + @NotBlank(message = "{MapService.spatialReference.null}",groups = {MapServiceQoInsert.class}) + @Size(max = 64, message = "{MapService.spatialReference.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String spatialReference; + + @Size(max = 128, message = "{MapService.styleName.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String styleName; + + @Size(max = 128, message = "{MapService.dataStorage.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String dataStorage; + + @NotBlank(message = "{MapService.workSpace.null}",groups = {MapServiceQoInsert.class}) + @Size(max = 128, message = "{MapService.workSpace.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String workSpace; + + @NotNull(message = "{MapService.admCode.null}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private Integer admCode; + + @NotBlank(message = "{MapService.admName.null}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + @Size(max = 64, message = "{MapService.admName.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String admName; + + @Size(max = 128, message = "{MapService.remarks.length.illegal}",groups = {MapServiceQoInsert.class, MapServiceUpdate.class}) + private String remarks; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDataFileCode() { + return dataFileCode; + } + + public void setDataFileCode(String dataFileCode) { + this.dataFileCode = dataFileCode; + } + + public String getMenuCode() { + return menuCode; + } + + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + + public String getLayerName() { + return layerName; + } + + public void setLayerName(String layerName) { + this.layerName = layerName; + } + + public String getLayerShowName() { + return layerShowName; + } + + public void setLayerShowName(String layerShowName) { + this.layerShowName = layerShowName; + } + + public String getLayerGroupCode() { + return layerGroupCode; + } + + public void setLayerGroupCode(String layerGroupCode) { + this.layerGroupCode = layerGroupCode; + } + + public Integer getLayerGroupOrder() { + return layerGroupOrder; + } + + public void setLayerGroupOrder(Integer layerGroupOrder) { + this.layerGroupOrder = layerGroupOrder; + } + + public String getServiceType() { + return serviceType; + } + + public void setServiceType(String serviceType) { + this.serviceType = serviceType; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public String getProductType() { + return productType; + } + + public void setProductType(String productType) { + this.productType = productType; + } + + public Long getProductStartTimeTs() { + return productStartTimeTs; + } + + public void setProductStartTimeTs(Long productStartTimeTs) { + this.productStartTimeTs = productStartTimeTs; + } + + public Long getProductEndTimeTs() { + return productEndTimeTs; + } + + public void setProductEndTimeTs(Long productEndTimeTs) { + this.productEndTimeTs = productEndTimeTs; + } + + public String getSpatialReference() { + return spatialReference; + } + + public void setSpatialReference(String spatialReference) { + this.spatialReference = spatialReference; + } + + public String getStyleName() { + return styleName; + } + + public void setStyleName(String styleName) { + this.styleName = styleName; + } + + public String getDataStorage() { + return dataStorage; + } + + public void setDataStorage(String dataStorage) { + this.dataStorage = dataStorage; + } + + public String getWorkSpace() { + return workSpace; + } + + public void setWorkSpace(String workSpace) { + this.workSpace = workSpace; + } + + public Integer getAdmCode() { + return admCode; + } + + public void setAdmCode(Integer admCode) { + this.admCode = admCode; + } + + public String getAdmName() { + return admName; + } + + public void setAdmName(String admName) { + this.admName = admName; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/qo/StatisticalDataIndependentQo.java b/src/main/java/com/xkrs/microservice/model/qo/StatisticalDataIndependentQo.java new file mode 100644 index 0000000..8f93b62 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/qo/StatisticalDataIndependentQo.java @@ -0,0 +1,130 @@ +package com.xkrs.microservice.model.qo; + +import com.xkrs.microservice.model.validation.StatisticalDataIndependentQoInsert; +import com.xkrs.microservice.model.validation.StatisticalDataIndependentQoUpdate; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; + +/** + * StatisticalDataIndependentQo + * @author tajochen + */ +public class StatisticalDataIndependentQo implements Serializable { + + @NotNull(message = "{StatisticalDataIndependent.id.null}",groups={StatisticalDataIndependentQoUpdate.class}) + private Integer id; + + @NotBlank(message = "{StatisticalDataIndependent.menuCode.null}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + @Size(max = 128, message = "{StatisticalDataIndependent.menuCode.length.illegal}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + private String menuCode; + + @NotBlank(message = "{StatisticalDataIndependent.classifyName.null}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + @Size(max = 128, message = "{StatisticalDataIndependent.classifyName.length.illegal}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + private String statisticsName; + + @NotBlank(message = "{StatisticalDataIndependent.classifyCode.null}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + @Size(max = 128, message = "{StatisticalDataIndependent.classifyCode.length.illegal}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + private String statisticsCode; + + private Long statisticsTimeTs; + + private Double statisticsValue; + + @NotBlank(message = "{StatisticalDataIndependent.statisticsValueArr.null}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + @Size(max = 4095, message = "{StatisticalDataIndependent.statisticsValueArr.length.illegal}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + private String statisticsValueArr; + + @NotBlank(message = "{StatisticalDataIndependent.admName.null}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + @Size(max = 128, message = "{StatisticalDataIndependent.admName.length.illegal}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + private String admName; + + @NotBlank(message = "{StatisticalDataIndependent.admCode.null}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + @Size(max = 128, message = "{StatisticalDataIndependent.admCode.length.illegal}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + private String admCode; + + @Size(max = 128, message = "{StatisticalDataIndependent.remark.length.illegal}",groups = {StatisticalDataIndependentQoInsert.class, StatisticalDataIndependentQoUpdate.class}) + private String remark; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getMenuCode() { + return menuCode; + } + + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + + public String getStatisticsName() { + return statisticsName; + } + + public void setStatisticsName(String statisticsName) { + this.statisticsName = statisticsName; + } + + public String getStatisticsCode() { + return statisticsCode; + } + + public void setStatisticsCode(String statisticsCode) { + this.statisticsCode = statisticsCode; + } + + public Long getStatisticsTimeTs() { + return statisticsTimeTs; + } + + public void setStatisticsTimeTs(Long statisticsTimeTs) { + this.statisticsTimeTs = statisticsTimeTs; + } + + public Double getStatisticsValue() { + return statisticsValue; + } + + public void setStatisticsValue(Double statisticsValue) { + this.statisticsValue = statisticsValue; + } + + public String getStatisticsValueArr() { + return statisticsValueArr; + } + + public void setStatisticsValueArr(String statisticsValueArr) { + this.statisticsValueArr = statisticsValueArr; + } + + public String getAdmName() { + return admName; + } + + public void setAdmName(String admName) { + this.admName = admName; + } + + public String getAdmCode() { + return admCode; + } + + public void setAdmCode(String admCode) { + this.admCode = admCode; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/qo/StatisticalDataQo.java b/src/main/java/com/xkrs/microservice/model/qo/StatisticalDataQo.java new file mode 100644 index 0000000..02698f4 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/qo/StatisticalDataQo.java @@ -0,0 +1,135 @@ +package com.xkrs.microservice.model.qo; + +import com.xkrs.microservice.model.validation.StatisticalDataQoInsert; +import com.xkrs.microservice.model.validation.StatisticalDataQoUpdate; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; + +/** + * StatisticalDataQo + * @author tajochen + */ +public class StatisticalDataQo implements Serializable { + + @NotNull(message = "{StatisticalData.id.null}",groups={StatisticalDataQoUpdate.class}) + private Integer id; + + @NotBlank(message = "{StatisticalData.menuCode.null}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + @Size(max = 128, message = "{StatisticalData.menuCode.length.illegal}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + private String menuCode; + + @NotBlank(message = "{StatisticalData.classifyName.null}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + @Size(max = 128, message = "{StatisticalData.classifyName.length.illegal}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + private String classifyName; + + @NotBlank(message = "{StatisticalData.classifyCode.null}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + @Size(max = 128, message = "{StatisticalData.classifyCode.length.illegal}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + private String classifyCode; + + @NotBlank(message = "{StatisticalData.admName.null}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + @Size(max = 128, message = "{StatisticalData.admName.length.illegal}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + private String admName; + + @NotBlank(message = "{StatisticalData.admCode.null}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + @Size(max = 128, message = "{StatisticalData.admCode.length.illegal}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + private String admCode; + + @NotBlank(message = "{StatisticalData.layerName.null}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + @Size(max = 128, message = "{StatisticalData.layerName.length.illegal}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + private String layerName; + + private Double area; + + @Size(max = 128, message = "{StatisticalData.remark.length.illegal}",groups = {StatisticalDataQoInsert.class, StatisticalDataQoUpdate.class}) + private String remark; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getMenuCode() { + return menuCode; + } + + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + + public String getClassifyName() { + return classifyName; + } + + public void setClassifyName(String classifyName) { + this.classifyName = classifyName; + } + + public String getClassifyCode() { + return classifyCode; + } + + public void setClassifyCode(String classifyCode) { + this.classifyCode = classifyCode; + } + + public String getAdmName() { + return admName; + } + + public void setAdmName(String admName) { + this.admName = admName; + } + + public String getAdmCode() { + return admCode; + } + + public void setAdmCode(String admCode) { + this.admCode = admCode; + } + + public String getLayerName() { + return layerName; + } + + public void setLayerName(String layerName) { + this.layerName = layerName; + } + + public Double getArea() { + return area; + } + + public void setArea(Double area) { + this.area = area; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return "StatisticalDataQo{" + + "id=" + id + + ", menuCode='" + menuCode + '\'' + + ", classifyName='" + classifyName + '\'' + + ", classifyCode='" + classifyCode + '\'' + + ", admName='" + admName + '\'' + + ", admCode='" + admCode + '\'' + + ", layerName='" + layerName + '\'' + + ", area=" + area + + ", remark='" + remark + '\'' + + '}'; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/qo/SysMenuQo.java b/src/main/java/com/xkrs/microservice/model/qo/SysMenuQo.java new file mode 100644 index 0000000..b8dd448 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/qo/SysMenuQo.java @@ -0,0 +1,101 @@ +package com.xkrs.microservice.model.qo; + +import com.xkrs.microservice.model.validation.SysMenuQoInsert; +import com.xkrs.microservice.model.validation.SysMenuQoUpdate; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * SysMenuQo + * @author tajochen + */ +public class SysMenuQo { + + @NotNull(message = "{SysMenu.id.null}",groups={SysMenuQoUpdate.class}) + private Integer id; + + @NotBlank(message = "{SysMenu.menuName.null}",groups = {SysMenuQoInsert.class, SysMenuQoUpdate.class}) + @Size(max = 64, message = "{SysMenu.menuName.length.illegal}",groups = {SysMenuQoInsert.class, SysMenuQoUpdate.class}) + private String menuName; + + private Integer menuType; + + @Size(max = 64, message = "{SysMenu.parentCode.length.illegal}",groups = {SysMenuQoInsert.class, SysMenuQoUpdate.class}) + private String parentCode; + + private Integer sortOrder; + + private Integer visibleFlag; + + @Size(max = 255, message = "{SysMenu.icon.length.illegal}",groups = {SysMenuQoInsert.class, SysMenuQoUpdate.class}) + private String icon; + + @Size(max = 255, message = "{SysMenu.componentUrl.length.illegal}",groups = {SysMenuQoInsert.class, SysMenuQoUpdate.class}) + private String componentUrl; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getMenuName() { + return menuName; + } + + public void setMenuName(String menuName) { + this.menuName = menuName; + } + + public Integer getMenuType() { + return menuType; + } + + public void setMenuType(Integer menuType) { + this.menuType = menuType; + } + + public String getParentCode() { + return parentCode; + } + + public void setParentCode(String parentCode) { + this.parentCode = parentCode; + } + + public Integer getSortOrder() { + return sortOrder; + } + + public void setSortOrder(Integer sortOrder) { + this.sortOrder = sortOrder; + } + + public Integer getVisibleFlag() { + return visibleFlag; + } + + public void setVisibleFlag(Integer visibleFlag) { + this.visibleFlag = visibleFlag; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getComponentUrl() { + return componentUrl; + } + + public void setComponentUrl(String componentUrl) { + this.componentUrl = componentUrl; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/qo/SysUserQo.java b/src/main/java/com/xkrs/microservice/model/qo/SysUserQo.java new file mode 100644 index 0000000..77de149 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/qo/SysUserQo.java @@ -0,0 +1,206 @@ +package com.xkrs.microservice.model.qo; + +import com.xkrs.microservice.model.validation.SysUserQoInsert; +import com.xkrs.microservice.model.validation.SysUserQoUpdate; +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.*; + +/** + * SysUserQo + * @author tajochen + */ +public class SysUserQo { + + @NotNull( message = "{SysUser.id.blank}",groups={SysUserQoUpdate.class}) + private Integer id; + + @NotBlank(message = "{SysUser.userName.blank}",groups={SysUserQoInsert.class}) + @Size(min = 3,max = 24, message = "{SysUser.userName.length.illegal}",groups = {SysUserQoInsert.class, + SysUserQoUpdate.class}) + @Pattern(regexp = "^([A-Za-z0-9_]+)$",message = "{SysUser.userName.format.illegal}",groups = {SysUserQoInsert.class, + SysUserQoUpdate.class}) + private String userName; + + @Size(min = 0,max = 16, message = "{SysUser.userCode.length.illegal}",groups = {SysUserQoInsert.class, + SysUserQoUpdate.class}) + @Pattern(regexp = "/^[A-Za-z0-9_-]{3,16}$/g",message = "{SysUser.userCode.format.illegal}", + groups = {SysUserQoInsert.class, SysUserQoUpdate.class}) + private String userCode; + + @Size(min = 2,max = 24, message = "{SysUser.nickName.length.illegal}",groups = {SysUserQoInsert.class, + SysUserQoUpdate.class}) + private String nickName; + + @Size(min = 2,max = 24, message = "{SysUser.realName.length.illegal}",groups = {SysUserQoInsert.class, + SysUserQoUpdate.class}) + private String realName; + + @Size(min = 17,max = 19, message = "{SysUser.idCard.length.illegal}",groups = {SysUserQoInsert.class, + SysUserQoUpdate.class}) + private String idCard; + + @Size(max = 64, message = "{SysUser.address.length.illegal}",groups = {SysUserQoInsert.class, SysUserQoUpdate.class}) + private String address; + + private Integer admCode; + + private Long birthdayTs; + + @Size(max = 32, message = "{SysUser.email.length.illegal}",groups = {SysUserQoInsert.class, SysUserQoUpdate.class}) + @Email(message = "{SysUser.email.format.illegal}",groups = {SysUserQoInsert.class, SysUserQoUpdate.class}) + private String email; + + @NotBlank(message = "{SysUser.password.blank}",groups = {SysUserQoInsert.class}) + @Size(min = 6,max = 16, message = "{SysUser.password.length.illegal}",groups = {SysUserQoInsert.class, + SysUserQoUpdate.class}) + @Pattern(regexp = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$",message = "{SysUser.password.format.illegal}", + groups = {SysUserQoInsert.class,SysUserQoUpdate.class}) + private String password; + + @Range(min=0,max=2,message = "{SysUser.sex.num.illegal}",groups = {SysUserQoInsert.class, SysUserQoUpdate.class}) + private Integer sex; + + @Pattern(regexp = "^(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\\d{8}$", + message = "{SysUser.telephone.format.illegal}",groups = {SysUserQoInsert.class,SysUserQoUpdate.class}) + private String telephone; + + @Size(max = 128, message = "{SysUser.personalSignature.length.illegal}",groups = {SysUserQoInsert.class, + SysUserQoUpdate.class}) + private String signature; + + @NotNull(message = "{SysUser.portraitId.illegal}",groups = { SysUserQoUpdate.class}) + private Integer portraitId; + + @Size(max = 128, message = "{SysUser.memo.length.illegal}",groups = {SysUserQoInsert.class, + SysUserQoUpdate.class}) + private String memo; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getUserCode() { + return userCode; + } + + public void setUserCode(String userCode) { + this.userCode = userCode; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Integer getSex() { + return sex; + } + + public void setSex(Integer sex) { + this.sex = sex; + } + + public String getTelephone() { + return telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Integer getAdmCode() { + return admCode; + } + + public void setAdmCode(Integer admCode) { + this.admCode = admCode; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public Long getBirthdayTs() { + return birthdayTs; + } + + public void setBirthdayTs(Long birthdayTs) { + this.birthdayTs = birthdayTs; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + public Integer getPortraitId() { + return portraitId; + } + + public void setPortraitId(Integer portraitId) { + this.portraitId = portraitId; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + public String getMemo() { + return memo; + } + + public void setMemo(String memo) { + this.memo = memo; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/qo/ZipFileInfoQo.java b/src/main/java/com/xkrs/microservice/model/qo/ZipFileInfoQo.java new file mode 100644 index 0000000..5f5a5aa --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/qo/ZipFileInfoQo.java @@ -0,0 +1,141 @@ +package com.xkrs.microservice.model.qo; + +import com.xkrs.microservice.model.validation.ZipFileQoInsert; +import com.xkrs.microservice.model.validation.ZipFileQoUpdate; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * zip文件信息 + * @author tajochen + */ +public class ZipFileInfoQo { + + @NotBlank(message = "{ZipFile.dataType.null}",groups = {ZipFileQoInsert.class, ZipFileQoUpdate.class}) + @Size(max = 128, message = "{ZipFile.dataType.length.illegal}",groups = {ZipFileQoInsert.class, ZipFileQoUpdate.class}) + private String dataType; + + @NotBlank(message = "{ZipFile.fileName.null}",groups = {ZipFileQoInsert.class, ZipFileQoUpdate.class}) + @Size(max = 128, message = "{ZipFile.fileName.length.illegal}",groups = {ZipFileQoInsert.class, ZipFileQoUpdate.class}) + private String fileName; + + @NotBlank(message = "{ZipFile.menuCode.null}",groups = {ZipFileQoInsert.class, ZipFileQoUpdate.class}) + @Size(max = 64, message = "{ZipFile.menuCode.length.illegal}",groups = {ZipFileQoInsert.class, ZipFileQoUpdate.class}) + private String menuCode; + + private String ServiceType; + + private String LayerShowName; + + private String LayerName; + + private String productType; + + private Long productStartTimeTs; + + private Long productEndTimeTs; + + private Integer admCode; + + private String admName; + + private String remarks; + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getMenuCode() { + return menuCode; + } + + public void setMenuCode(String menuCode) { + this.menuCode = menuCode; + } + + public String getServiceType() { + return ServiceType; + } + + public void setServiceType(String serviceType) { + ServiceType = serviceType; + } + + public String getLayerShowName() { + return LayerShowName; + } + + public void setLayerShowName(String layerShowName) { + LayerShowName = layerShowName; + } + + public String getLayerName() { + return LayerName; + } + + public void setLayerName(String layerName) { + LayerName = layerName; + } + + public String getProductType() { + return productType; + } + + public void setProductType(String productType) { + this.productType = productType; + } + + public Long getProductStartTimeTs() { + return productStartTimeTs; + } + + public void setProductStartTimeTs(Long productStartTimeTs) { + this.productStartTimeTs = productStartTimeTs; + } + + public Long getProductEndTimeTs() { + return productEndTimeTs; + } + + public void setProductEndTimeTs(Long productEndTimeTs) { + this.productEndTimeTs = productEndTimeTs; + } + + public Integer getAdmCode() { + return admCode; + } + + public void setAdmCode(Integer admCode) { + this.admCode = admCode; + } + + public String getAdmName() { + return admName; + } + + public void setAdmName(String admName) { + this.admName = admName; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/DataFileQoInsert.java b/src/main/java/com/xkrs/microservice/model/validation/DataFileQoInsert.java new file mode 100644 index 0000000..e2f7188 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/DataFileQoInsert.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * DataFileQoInsert + * @author tajochen + */ +public interface DataFileQoInsert { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/DataFileQoUpdate.java b/src/main/java/com/xkrs/microservice/model/validation/DataFileQoUpdate.java new file mode 100644 index 0000000..1fea91a --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/DataFileQoUpdate.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * DataFileQoUpdate + * @author tajochen + */ +public interface DataFileQoUpdate { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/MapServiceQoInsert.java b/src/main/java/com/xkrs/microservice/model/validation/MapServiceQoInsert.java new file mode 100644 index 0000000..c7293f5 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/MapServiceQoInsert.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * MapServiceQoInsert + * @author tajochen + */ +public interface MapServiceQoInsert { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/MapServiceUpdate.java b/src/main/java/com/xkrs/microservice/model/validation/MapServiceUpdate.java new file mode 100644 index 0000000..d808c39 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/MapServiceUpdate.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * MapServiceUpdate + * @author tajochen + */ +public interface MapServiceUpdate { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataIndependentQoInsert.java b/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataIndependentQoInsert.java new file mode 100644 index 0000000..6da651d --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataIndependentQoInsert.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * StatisticalDataIndependentQoInsert + * @author tajochen + */ +public interface StatisticalDataIndependentQoInsert { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataIndependentQoUpdate.java b/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataIndependentQoUpdate.java new file mode 100644 index 0000000..f33958b --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataIndependentQoUpdate.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * StatisticalDataIndependentQoUpdate + * @author tajochen + */ +public interface StatisticalDataIndependentQoUpdate { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataQoInsert.java b/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataQoInsert.java new file mode 100644 index 0000000..12bda7c --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataQoInsert.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * StatisticalDataQoInsert + * @author tajochen + */ +public interface StatisticalDataQoInsert { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataQoUpdate.java b/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataQoUpdate.java new file mode 100644 index 0000000..f60b4ca --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/StatisticalDataQoUpdate.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * StatisticalDataQoUpdate + * @author tajochen + */ +public interface StatisticalDataQoUpdate { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/SysMenuQoInsert.java b/src/main/java/com/xkrs/microservice/model/validation/SysMenuQoInsert.java new file mode 100644 index 0000000..aebc52e --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/SysMenuQoInsert.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * SysMenuQoInsert + * @author tajochen + */ +public interface SysMenuQoInsert { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/SysMenuQoUpdate.java b/src/main/java/com/xkrs/microservice/model/validation/SysMenuQoUpdate.java new file mode 100644 index 0000000..8b9d561 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/SysMenuQoUpdate.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * SysMenuQoUpdate + * @author tajochen + */ +public interface SysMenuQoUpdate { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/SysUserQoInsert.java b/src/main/java/com/xkrs/microservice/model/validation/SysUserQoInsert.java new file mode 100644 index 0000000..8fe5289 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/SysUserQoInsert.java @@ -0,0 +1,8 @@ +package com.xkrs.microservice.model.validation; + +/** + * SysUserQoInsert + * @author tajochen + */ +public interface SysUserQoInsert { +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/SysUserQoUpdate.java b/src/main/java/com/xkrs/microservice/model/validation/SysUserQoUpdate.java new file mode 100644 index 0000000..3589f48 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/SysUserQoUpdate.java @@ -0,0 +1,8 @@ +package com.xkrs.microservice.model.validation; + +/** + * SysUserQoUpdate + * @author tajochen + */ +public interface SysUserQoUpdate { +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/ZipFileQoInsert.java b/src/main/java/com/xkrs/microservice/model/validation/ZipFileQoInsert.java new file mode 100644 index 0000000..0e94bc5 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/ZipFileQoInsert.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * ZipFileQoInsert + * @author tajochen + */ +public interface ZipFileQoInsert { + +} diff --git a/src/main/java/com/xkrs/microservice/model/validation/ZipFileQoUpdate.java b/src/main/java/com/xkrs/microservice/model/validation/ZipFileQoUpdate.java new file mode 100644 index 0000000..fb1c727 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/validation/ZipFileQoUpdate.java @@ -0,0 +1,9 @@ +package com.xkrs.microservice.model.validation; + +/** + * ZipFileQoUpdate + * @author tajochen + */ +public interface ZipFileQoUpdate { + +} diff --git a/src/main/java/com/xkrs/microservice/model/vo/AliWeatherAllVo.java b/src/main/java/com/xkrs/microservice/model/vo/AliWeatherAllVo.java new file mode 100644 index 0000000..480cdbc --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/AliWeatherAllVo.java @@ -0,0 +1,353 @@ +package com.xkrs.microservice.model.vo; + +import java.io.Serializable; +import java.util.List; + +/** + * @author wudong + * @date 2021/8/18 14:47 + */ +public class AliWeatherAllVo implements Serializable { + + /** + * 返回状态 值为0或1 1:成功;0:失败 + */ + private String status; + + /** + * 返回结果总数目 + */ + private String count; + + /** + * 返回的状态信息 + */ + private String info; + + /** + * 返回状态说明,10000代表正确 + */ + private String infocode; + + /** + * 预报天气信息数据 + */ + private List forecasts; + + public AliWeatherAllVo() { + } + + public AliWeatherAllVo(String status, String count, String info, String infocode, List forecasts) { + this.status = status; + this.count = count; + this.info = info; + this.infocode = infocode; + this.forecasts = forecasts; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getCount() { + return count; + } + + public void setCount(String count) { + this.count = count; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getInfocode() { + return infocode; + } + + public void setInfocode(String infocode) { + this.infocode = infocode; + } + + public List getForecasts() { + return forecasts; + } + + public void setForecasts(List forecasts) { + this.forecasts = forecasts; + } + + @Override + public String toString() { + return "AliWeatherBaseVo{" + + "status='" + status + '\'' + + ", count='" + count + '\'' + + ", info='" + info + '\'' + + ", infocode='" + infocode + '\'' + + ", lives=" + forecasts + + '}'; + } + + static class AliWeatherAllExVo { + + /** + * 城市 + */ + private String city; + + /** + * 城市编码 + */ + private String adcode; + + /** + * 省份名称 + */ + private String province; + + /** + * 预报发布时间 + */ + private String reporttime; + + /** + * 预报发布时间 + */ + private List casts; + + public AliWeatherAllExVo() { + } + + public AliWeatherAllExVo(String city, String adcode, String province, String reporttime, List casts) { + this.city = city; + this.adcode = adcode; + this.province = province; + this.reporttime = reporttime; + this.casts = casts; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getAdcode() { + return adcode; + } + + public void setAdcode(String adcode) { + this.adcode = adcode; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getReporttime() { + return reporttime; + } + + public void setReporttime(String reporttime) { + this.reporttime = reporttime; + } + + public List getCasts() { + return casts; + } + + public void setCasts(List casts) { + this.casts = casts; + } + + @Override + public String toString() { + return "AliWeatherBaseExVo{" + + "city='" + city + '\'' + + ", adcode='" + adcode + '\'' + + ", province='" + province + '\'' + + ", reporttime='" + reporttime + '\'' + + ", casts=" + casts + + '}'; + } + + static class AliWeatherAllExCastVo { + + /** + * 日期 + */ + private String date; + + /** + * 星期几 + */ + private String week; + + /** + * 白天天气现象 + */ + private String dayweather; + + /** + * 晚上天气现象 + */ + private String nightweather; + + /** + * 白天天气现象 + */ + private String daytemp; + + /** + * 晚上天气现象 + */ + private String nighttemp; + + /** + * 白天风向 + */ + private String daywind; + + /** + * 晚上风向 + */ + private String nightwind; + + /** + * 白天风力 + */ + private String daypower; + + /** + * 晚上风力 + */ + private String nightpower; + + public AliWeatherAllExCastVo() { + } + + public AliWeatherAllExCastVo(String date, String week, String dayweather, String nightweather, String daytemp, String nighttemp, String daywind, String nightwind, String daypower, String nightpower) { + this.date = date; + this.week = week; + this.dayweather = dayweather; + this.nightweather = nightweather; + this.daytemp = daytemp; + this.nighttemp = nighttemp; + this.daywind = daywind; + this.nightwind = nightwind; + this.daypower = daypower; + this.nightpower = nightpower; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public String getWeek() { + return week; + } + + public void setWeek(String week) { + this.week = week; + } + + public String getDayweather() { + return dayweather; + } + + public void setDayweather(String dayweather) { + this.dayweather = dayweather; + } + + public String getNightweather() { + return nightweather; + } + + public void setNightweather(String nightweather) { + this.nightweather = nightweather; + } + + public String getDaytemp() { + return daytemp; + } + + public void setDaytemp(String daytemp) { + this.daytemp = daytemp; + } + + public String getNighttemp() { + return nighttemp; + } + + public void setNighttemp(String nighttemp) { + this.nighttemp = nighttemp; + } + + public String getDaywind() { + return daywind; + } + + public void setDaywind(String daywind) { + this.daywind = daywind; + } + + public String getNightwind() { + return nightwind; + } + + public void setNightwind(String nightwind) { + this.nightwind = nightwind; + } + + public String getDaypower() { + return daypower; + } + + public void setDaypower(String daypower) { + this.daypower = daypower; + } + + public String getNightpower() { + return nightpower; + } + + public void setNightpower(String nightpower) { + this.nightpower = nightpower; + } + + @Override + public String toString() { + return "AliWeatherBaseExCastVo{" + + "date='" + date + '\'' + + ", week='" + week + '\'' + + ", dayweather='" + dayweather + '\'' + + ", nightweather='" + nightweather + '\'' + + ", daytemp='" + daytemp + '\'' + + ", nighttemp='" + nighttemp + '\'' + + ", daywind='" + daywind + '\'' + + ", nightwind='" + nightwind + '\'' + + ", daypower='" + daypower + '\'' + + ", nightpower='" + nightpower + '\'' + + '}'; + } + } + } +} diff --git a/src/main/java/com/xkrs/microservice/model/vo/AliWeatherBaseVo.java b/src/main/java/com/xkrs/microservice/model/vo/AliWeatherBaseVo.java new file mode 100644 index 0000000..9e7ea0a --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/AliWeatherBaseVo.java @@ -0,0 +1,248 @@ +package com.xkrs.microservice.model.vo; + +import java.io.Serializable; +import java.util.List; + +/** + * @author wudong + * @date 2021/8/18 14:40 + */ +public class AliWeatherBaseVo implements Serializable { + + /** + * 返回状态 值为0或1 1:成功;0:失败 + */ + private String status; + + /** + * 返回结果总数目 + */ + private String count; + + /** + * 返回的状态信息 + */ + private String info; + + /** + * 返回状态说明,10000代表正确 + */ + private String infocode; + + /** + * 实况天气数据信息 + */ + private List lives; + + public AliWeatherBaseVo() { + } + + public AliWeatherBaseVo(String status, String count, String info, String infocode, List lives) { + this.status = status; + this.count = count; + this.info = info; + this.infocode = infocode; + this.lives = lives; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getCount() { + return count; + } + + public void setCount(String count) { + this.count = count; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getInfocode() { + return infocode; + } + + public void setInfocode(String infocode) { + this.infocode = infocode; + } + + public List getLives() { + return lives; + } + + public void setLives(List lives) { + this.lives = lives; + } + + @Override + public String toString() { + return "AliWeatherAllVo{" + + "status='" + status + '\'' + + ", count='" + count + '\'' + + ", info='" + info + '\'' + + ", infocode='" + infocode + '\'' + + ", lives=" + lives + + '}'; + } + + static class AliWeatherBaseExVo { + + /** + * 省份名 + */ + private String province; + + /** + * 城市名 + */ + private String city; + + /** + * 区域编码 + */ + private String adcode; + + /** + * 天气现象(汉字描述) + */ + private String weather; + + /** + * 实时气温,单位:摄氏度 + */ + private String temperature; + + /** + * 风向描述 + */ + private String winddirection; + + /** + * 风力级别,单位:级 + */ + private String windpower; + + /** + * 空气湿度 + */ + private String humidity; + + /** + * 数据发布的时间 + */ + private String reporttime; + + public AliWeatherBaseExVo() { + } + + public AliWeatherBaseExVo(String province, String city, String adcode, String weather, String temperature, String winddirection, String windpower, String humidity, String reporttime) { + this.province = province; + this.city = city; + this.adcode = adcode; + this.weather = weather; + this.temperature = temperature; + this.winddirection = winddirection; + this.windpower = windpower; + this.humidity = humidity; + this.reporttime = reporttime; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getAdcode() { + return adcode; + } + + public void setAdcode(String adcode) { + this.adcode = adcode; + } + + public String getWeather() { + return weather; + } + + public void setWeather(String weather) { + this.weather = weather; + } + + public String getTemperature() { + return temperature; + } + + public void setTemperature(String temperature) { + this.temperature = temperature; + } + + public String getWinddirection() { + return winddirection; + } + + public void setWinddirection(String winddirection) { + this.winddirection = winddirection; + } + + public String getWindpower() { + return windpower; + } + + public void setWindpower(String windpower) { + this.windpower = windpower; + } + + public String getHumidity() { + return humidity; + } + + public void setHumidity(String humidity) { + this.humidity = humidity; + } + + public String getReporttime() { + return reporttime; + } + + public void setReporttime(String reporttime) { + this.reporttime = reporttime; + } + + @Override + public String toString() { + return "AliWeatherAllExVo{" + + "province='" + province + '\'' + + ", city='" + city + '\'' + + ", adcode='" + adcode + '\'' + + ", weather='" + weather + '\'' + + ", temperature='" + temperature + '\'' + + ", winddirection='" + winddirection + '\'' + + ", windpower='" + windpower + '\'' + + ", humidity='" + humidity + '\'' + + ", reporttime='" + reporttime + '\'' + + '}'; + } + } +} diff --git a/src/main/java/com/xkrs/microservice/model/vo/FileServerResultVo.java b/src/main/java/com/xkrs/microservice/model/vo/FileServerResultVo.java new file mode 100644 index 0000000..9e70b92 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/FileServerResultVo.java @@ -0,0 +1,67 @@ +package com.xkrs.microservice.model.vo; + +import java.io.Serializable; + +/** + * FileServerResultVo 文件服务器查询结果 + * @author tajochen + */ +public class FileServerResultVo implements Serializable { + + /** + * 状态信息 + */ + String status; + + /** + * 提示信息 + */ + String message; + + /** + * 数据 + */ + T data; + + public FileServerResultVo() { + } + + public FileServerResultVo(String status, String msg, T data) { + this.status = status; + this.message = msg; + this.data = data; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + @Override + public String toString() { + return "FileServerResultVo{" + + "status='" + status + '\'' + + ", message='" + message + '\'' + + ", data=" + data + + '}'; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/vo/FileServiceResDetailVo.java b/src/main/java/com/xkrs/microservice/model/vo/FileServiceResDetailVo.java new file mode 100644 index 0000000..2be4962 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/FileServiceResDetailVo.java @@ -0,0 +1,170 @@ +package com.xkrs.microservice.model.vo; + +import java.io.Serializable; + +/** + * FileServiceResDetailVo + * @author tajochen + */ +public class FileServiceResDetailVo implements Serializable { + + /** + * 域名 + */ + String domain; + + /** + * 信息摘要 + */ + String md5; + + /** + * 上传时间戳 + */ + Long mtime; + + /** + * 文件路径 + */ + String path; + + /** + * 返回信息代码 + */ + int retcode; + + /** + * 返回信息文本 + */ + String retmsg; + + /** + * 场景 + */ + String scene; + + /** + * 场景集合 + */ + String scenes; + + /** + * 文件大小 + */ + long size; + + /** + * 文件路径 + */ + String src; + + /** + * 文件完整链接 + */ + String url; + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public Long getMtime() { + return mtime; + } + + public void setMtime(Long mtime) { + this.mtime = mtime; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public int getRetcode() { + return retcode; + } + + public void setRetcode(int retcode) { + this.retcode = retcode; + } + + public String getRetmsg() { + return retmsg; + } + + public void setRetmsg(String retmsg) { + this.retmsg = retmsg; + } + + public String getScene() { + return scene; + } + + public void setScene(String scene) { + this.scene = scene; + } + + public String getScenes() { + return scenes; + } + + public void setScenes(String scenes) { + this.scenes = scenes; + } + + public long getSize() { + return size; + } + + public void setSize(long size) { + this.size = size; + } + + public String getSrc() { + return src; + } + + public void setSrc(String src) { + this.src = src; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @Override + public String toString() { + return "FileServiceResVo{" + + "domain='" + domain + '\'' + + ", md5='" + md5 + '\'' + + ", mtime=" + mtime + + ", path='" + path + '\'' + + ", retcode=" + retcode + + ", retmsg='" + retmsg + '\'' + + ", scene='" + scene + '\'' + + ", scenes='" + scenes + '\'' + + ", size=" + size + + ", src='" + src + '\'' + + ", url='" + url + '\'' + + '}'; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/vo/HardDiskInfoVo.java b/src/main/java/com/xkrs/microservice/model/vo/HardDiskInfoVo.java new file mode 100644 index 0000000..06211ea --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/HardDiskInfoVo.java @@ -0,0 +1,61 @@ +package com.xkrs.microservice.model.vo; + +import java.io.Serializable; + +/** + * 磁盘盘符信息 + * @author tajochen + */ +public class HardDiskInfoVo implements Serializable { + + private String hardDiskName; + + private Long freeSpace; + + private Long usedSpace; + + private Long totalSpace; + + public String getHardDiskName() { + return hardDiskName; + } + + public void setHardDiskName(String hardDiskName) { + this.hardDiskName = hardDiskName; + } + + public Long getFreeSpace() { + return freeSpace; + } + + public void setFreeSpace(Long freeSpace) { + this.freeSpace = freeSpace; + } + + public Long getUsedSpace() { + return usedSpace; + } + + public void setUsedSpace(Long usedSpace) { + this.usedSpace = usedSpace; + } + + public Long getTotalSpace() { + return totalSpace; + } + + public void setTotalSpace(Long totalSpace) { + this.totalSpace = totalSpace; + } + + @Override + public String toString() { + return "HardDiskInfoVo{" + + "hardDiskName='" + hardDiskName + '\'' + + ", freeSpace=" + freeSpace + + ", usedSpace=" + usedSpace + + ", totalSpace=" + totalSpace + + '}'; + } + +} diff --git a/src/main/java/com/xkrs/microservice/model/vo/MapLayerGroupVo.java b/src/main/java/com/xkrs/microservice/model/vo/MapLayerGroupVo.java new file mode 100644 index 0000000..f50419a --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/MapLayerGroupVo.java @@ -0,0 +1,52 @@ +package com.xkrs.microservice.model.vo; + +import com.xkrs.microservice.model.entity.MapServiceEntity; + +import java.io.Serializable; +import java.util.List; + +/** + * 图层组 + * @author tajochen + */ +public class MapLayerGroupVo implements Serializable { + + int count; + + String layerGroupCode; + + List layers; + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getLayerGroupCode() { + return layerGroupCode; + } + + public void setLayerGroupCode(String layerGroupCode) { + this.layerGroupCode = layerGroupCode; + } + + public List getLayers() { + return layers; + } + + public void setLayers(List layers) { + this.layers = layers; + } + + @Override + public String toString() { + return "MapLayerGroupVo{" + + "count=" + count + + ", layerGroupCode='" + layerGroupCode + '\'' + + ", layers=" + layers + + '}'; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/vo/ResultVo.java b/src/main/java/com/xkrs/microservice/model/vo/ResultVo.java new file mode 100644 index 0000000..d9971e5 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/ResultVo.java @@ -0,0 +1,44 @@ +package com.xkrs.microservice.model.vo; + +import java.io.Serializable; + +/** + * @author tajochen + * @date 2021/8/18 14:47 + */ +public class ResultVo implements Serializable { + + /** + * 返回结果值 为0或1 1:成功;0:失败 + */ + private int resultCode; + + /** + * 返回结果消息 + */ + private String resultMessage; + + public int getResultCode() { + return resultCode; + } + + public void setResultCode(int resultCode) { + this.resultCode = resultCode; + } + + public String getResultMessage() { + return resultMessage; + } + + public void setResultMessage(String resultMessage) { + this.resultMessage = resultMessage; + } + + @Override + public String toString() { + return "ResultVo{" + + "resultCode='" + resultCode + '\'' + + ", resultMessage='" + resultMessage + '\'' + + '}'; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/vo/ShpCityVo.java b/src/main/java/com/xkrs/microservice/model/vo/ShpCityVo.java new file mode 100644 index 0000000..148717b --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/ShpCityVo.java @@ -0,0 +1,108 @@ +package com.xkrs.microservice.model.vo; + +import java.io.Serializable; + +/** + * ShpCityVo + * @author tajochen + */ +public class ShpCityVo implements Serializable { + + private Integer id; + + private Integer cityCode; + + private String cityName; + + private Integer proCode; + + private String proName; + + private double shapeArea; + + private Integer year; + + public ShpCityVo(Integer id, Integer cityCode, String cityName, Integer proCode, String proName, double shapeArea, Integer year) { + this.id = id; + this.cityCode = cityCode; + this.cityName = cityName; + this.proCode = proCode; + this.proName = proName; + this.shapeArea = shapeArea; + this.year = year; + } + + public ShpCityVo() { + + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getCityCode() { + return cityCode; + } + + public void setCityCode(Integer cityCode) { + this.cityCode = cityCode; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public Integer getProCode() { + return proCode; + } + + public void setProCode(Integer proCode) { + this.proCode = proCode; + } + + public String getProName() { + return proName; + } + + public void setProName(String proName) { + this.proName = proName; + } + + public double getShapeArea() { + return shapeArea; + } + + public void setShapeArea(double shapeArea) { + this.shapeArea = shapeArea; + } + + public Integer getYear() { + return year; + } + + public void setYear(Integer year) { + this.year = year; + } + + @Override + public String toString() { + return "ShpCityVo{" + + "id=" + id + + ", cityCode=" + cityCode + + ", cityName='" + cityName + '\'' + + ", proCode=" + proCode + + ", proName='" + proName + '\'' + + ", shapeArea=" + shapeArea + + ", year=" + year + + '}'; + } +} + diff --git a/src/main/java/com/xkrs/microservice/model/vo/ShpCountyVo.java b/src/main/java/com/xkrs/microservice/model/vo/ShpCountyVo.java new file mode 100644 index 0000000..9d1b3cc --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/ShpCountyVo.java @@ -0,0 +1,131 @@ +package com.xkrs.microservice.model.vo; + +import java.io.Serializable; + +/** + * ShpCountyVo + * @author tajochen + */ +public class ShpCountyVo implements Serializable { + + private Integer id; + + private Integer coCode; + + private String coName; + + private Integer cityCode; + + private String cityName; + + private Integer proCode; + + private String proName; + + private double shapeArea; + + private Integer year; + + public ShpCountyVo(Integer id, Integer coCode, String coName, Integer cityCode, String cityName, Integer proCode, String proName, double shapeArea, Integer year) { + this.id = id; + this.coCode = coCode; + this.coName = coName; + this.cityCode = cityCode; + this.cityName = cityName; + this.proCode = proCode; + this.proName = proName; + this.shapeArea = shapeArea; + this.year = year; + } + + public ShpCountyVo() { + + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getCoCode() { + return coCode; + } + + public void setCoCode(Integer coCode) { + this.coCode = coCode; + } + + public String getCoName() { + return coName; + } + + public void setCoName(String coName) { + this.coName = coName; + } + + public Integer getCityCode() { + return cityCode; + } + + public void setCityCode(Integer cityCode) { + this.cityCode = cityCode; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public Integer getProCode() { + return proCode; + } + + public void setProCode(Integer proCode) { + this.proCode = proCode; + } + + public String getProName() { + return proName; + } + + public void setProName(String proName) { + this.proName = proName; + } + + public double getShapeArea() { + return shapeArea; + } + + public void setShapeArea(double shapeArea) { + this.shapeArea = shapeArea; + } + + public Integer getYear() { + return year; + } + + public void setYear(Integer year) { + this.year = year; + } + + @Override + public String toString() { + return "ShpCountyVo{" + + "id=" + id + + ", coCode=" + coCode + + ", coName='" + coName + '\'' + + ", cityCode=" + cityCode + + ", cityName='" + cityName + '\'' + + ", proCode=" + proCode + + ", proName='" + proName + '\'' + + ", shapeArea=" + shapeArea + + ", year=" + year + + '}'; + } +} diff --git a/src/main/java/com/xkrs/microservice/model/vo/ShpProvinceVo.java b/src/main/java/com/xkrs/microservice/model/vo/ShpProvinceVo.java new file mode 100644 index 0000000..3298b78 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/ShpProvinceVo.java @@ -0,0 +1,84 @@ +package com.xkrs.microservice.model.vo; + +import java.io.Serializable; + +/** + * ShpProvinceVo + * @author tajochen + */ +public class ShpProvinceVo implements Serializable { + + private Integer id; + + private Integer proCode; + + private String proName; + + private double shapeArea; + + private Integer year; + + public ShpProvinceVo(Integer id, Integer proCode, String proName, double shapeArea, Integer year) { + this.id = id; + this.proCode = proCode; + this.proName = proName; + this.shapeArea = shapeArea; + this.year = year; + } + + public ShpProvinceVo() { + + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getProCode() { + return proCode; + } + + public void setProCode(Integer proCode) { + this.proCode = proCode; + } + + public String getProName() { + return proName; + } + + public void setProName(String proName) { + this.proName = proName; + } + + public double getShapeArea() { + return shapeArea; + } + + public void setShapeArea(double shapeArea) { + this.shapeArea = shapeArea; + } + + public Integer getYear() { + return year; + } + + public void setYear(Integer year) { + this.year = year; + } + + @Override + public String toString() { + return "ShpProvinceVo{" + + "id=" + id + + ", proCode=" + proCode + + ", proName='" + proName + '\'' + + ", shapeArea=" + shapeArea + + ", year=" + year + + '}'; + } +} + diff --git a/src/main/java/com/xkrs/microservice/model/vo/SysUserVo.java b/src/main/java/com/xkrs/microservice/model/vo/SysUserVo.java new file mode 100644 index 0000000..c8b4502 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/model/vo/SysUserVo.java @@ -0,0 +1,257 @@ +package com.xkrs.microservice.model.vo; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * SysUserVo + * @author tajochen + */ +public class SysUserVo implements Serializable { + private Integer id; + + private String userName; + + private String userCode; + + private String nickName; + + private String realName; + + private String idCard; + + private String address; + + private Integer admCode; + + private LocalDate birthday; + + private String email; + + private Integer sex; + + private String telephone; + + private String signature; + + private Integer statusCode; + + private Integer portraitId; + + private Integer activeFlag; + + private String lastEntryIp; + + private LocalDateTime lastEntryTime; + + private String memo; + + private LocalDateTime createdTime; + + private String roleName; + + private String roleNameZh; + + public SysUserVo(Integer id, String userName, String userCode, String nickName, String realName, String idCard, String address, Integer admCode, LocalDate birthday, String email, Integer sex, String telephone, String signature, Integer statusCode, Integer portraitId, Integer activeFlag, String lastEntryIp, LocalDateTime lastEntryTime, String memo, LocalDateTime createdTime, String roleName, String roleNameZh) { + this.id = id; + this.userName = userName; + this.userCode = userCode; + this.nickName = nickName; + this.realName = realName; + this.idCard = idCard; + this.address = address; + this.admCode = admCode; + this.birthday = birthday; + this.email = email; + this.sex = sex; + this.telephone = telephone; + this.signature = signature; + this.statusCode = statusCode; + this.portraitId = portraitId; + this.activeFlag = activeFlag; + this.lastEntryIp = lastEntryIp; + this.lastEntryTime = lastEntryTime; + this.memo = memo; + this.createdTime = createdTime; + this.roleName = roleName; + this.roleNameZh = roleNameZh; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserCode() { + return userCode; + } + + public void setUserCode(String userCode) { + this.userCode = userCode; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public Integer getAdmCode() { + return admCode; + } + + public void setAdmCode(Integer admCode) { + this.admCode = admCode; + } + + public LocalDate getBirthday() { + return birthday; + } + + public void setBirthday(LocalDate birthday) { + this.birthday = birthday; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Integer getSex() { + return sex; + } + + public void setSex(Integer sex) { + this.sex = sex; + } + + public String getTelephone() { + return telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + public Integer getStatusCode() { + return statusCode; + } + + public void setStatusCode(Integer statusCode) { + this.statusCode = statusCode; + } + + public Integer getPortraitId() { + return portraitId; + } + + public void setPortraitId(Integer portraitId) { + this.portraitId = portraitId; + } + + public Integer getActiveFlag() { + return activeFlag; + } + + public void setActiveFlag(Integer activeFlag) { + this.activeFlag = activeFlag; + } + + public String getLastEntryIp() { + return lastEntryIp; + } + + public void setLastEntryIp(String lastEntryIp) { + this.lastEntryIp = lastEntryIp; + } + + public LocalDateTime getLastEntryTime() { + return lastEntryTime; + } + + public void setLastEntryTime(LocalDateTime lastEntryTime) { + this.lastEntryTime = lastEntryTime; + } + + public String getMemo() { + return memo; + } + + public void setMemo(String memo) { + this.memo = memo; + } + + public LocalDateTime getCreatedTime() { + return createdTime; + } + + public void setCreatedTime(LocalDateTime createdTime) { + this.createdTime = createdTime; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + public String getRoleNameZh() { + return roleNameZh; + } + + public void setRoleNameZh(String roleNameZh) { + this.roleNameZh = roleNameZh; + } +} + diff --git a/src/main/java/com/xkrs/microservice/service/DataFileService.java b/src/main/java/com/xkrs/microservice/service/DataFileService.java new file mode 100644 index 0000000..77947c9 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/DataFileService.java @@ -0,0 +1,82 @@ +package com.xkrs.microservice.service; + +import com.xkrs.microservice.model.entity.DataFileEntity; +import com.xkrs.microservice.model.qo.DataFileQo; +import com.xkrs.microservice.model.qo.ZipFileInfoQo; +import com.xkrs.microservice.model.vo.ResultVo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 数据文件服务 + * @author tajochen + */ +public interface DataFileService { + + /** + * 获取所有数据文件 + * @return + */ + Iterable getAllDataFile(); + + /** + * 获取所有数据文件根据菜单代码 + * @param menuCode 菜单代码 + * @return + */ + Iterable getAllDataFileByMenuCode(String menuCode); + + /** + * 获取所有数据文件根据数据类型 + * @param dataType 数据类型 + * @return + */ + Iterable getAllDataFileByDataType(String dataType); + + /** + * 获取文件数据根据菜单代码和数据类型和发布标记 + * @param menuCode 菜单代码 + * @param dataType 数据类型 + * @param publishFlag 发布标记 + * @return + */ + Iterable getAllDataFileByMenuCodeAndDataTypeAndPublishFlag(String menuCode,String dataType,Integer publishFlag); + + /** + * 获取数据文件根据文件代码 + * @param dataFileCode 文件代码 + * @return + */ + DataFileEntity getDataFileByDataFileCode(String dataFileCode); + + /** + * 添加数据文件 + * @param dataFileEntity + * @return + */ + ResultVo insertDataFile(DataFileEntity dataFileEntity); + + /** + * 运行数据文件 + * @param dataFileEntity + * @return + */ + ResultVo runDataFile(DataFileQo dataFileQo); + + /** + * 上传影像文件 + * @param dataFileQo + * @param leftFile + * @param rightFile + * @param userName + * @return + */ + ResultVo uploadDataFile(DataFileQo dataFileQo,MultipartFile leftFile,MultipartFile rightFile,String userName); + + /** + * 删除数据文件 + * @param id 编号 + * @return + */ + int deleteDataFile(Integer id); + +} diff --git a/src/main/java/com/xkrs/microservice/service/FileServerService.java b/src/main/java/com/xkrs/microservice/service/FileServerService.java new file mode 100644 index 0000000..0579d79 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/FileServerService.java @@ -0,0 +1,64 @@ +package com.xkrs.microservice.service; + +import com.xkrs.microservice.model.vo.FileServerResultVo; +import com.xkrs.microservice.model.vo.FileServiceResDetailVo; + +import java.io.File; + +/** + * 文件服务器接口 + * @author tajochen + */ +public interface FileServerService { + + /** + * 上传文件 + * @param postFile 文件 + * @param path 路径 + * @return + */ + FileServiceResDetailVo uploadFile(File postFile, String path); + + /** + * 获取文件统计信息 + * @return + */ + FileServerResultVo getFileStat(); + + /** + * 删除文件 + * @param md5 信息摘要 + * @param path 路径 + * @return + */ + FileServerResultVo deleteFile(String md5,String path); + + /** + * 获取文件信息 + * @param md5 信息摘要 + * @param path 路径 + * @return + */ + FileServerResultVo getFileInfo(String md5,String path); + + /** + * 获取文件列表 + * @param dir 目录名 + * @return + */ + FileServerResultVo getFileList(String dir); + + /** + * 修复统计信息 + * @param date 要修复的日期,格式如:20190725 + * @return + */ + FileServerResultVo getFileRepairStat(String date); + + /** + * 同步失败修复 + * @param force 是否强行修复(0|1) + * @return + */ + FileServerResultVo getFileRepair(String force); +} diff --git a/src/main/java/com/xkrs/microservice/service/MapServiceService.java b/src/main/java/com/xkrs/microservice/service/MapServiceService.java new file mode 100644 index 0000000..b2b7972 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/MapServiceService.java @@ -0,0 +1,111 @@ +package com.xkrs.microservice.service; + +import com.xkrs.microservice.model.entity.MapServiceEntity; +import com.xkrs.microservice.model.qo.MapServiceQo; +import com.xkrs.microservice.model.vo.MapLayerGroupVo; + +import java.util.List; +import java.util.Optional; + +/** + * 地图服务管理接口 + * @author tajochen + */ +public interface MapServiceService { + + /** + * 获取所有地图服务 + * @return + */ + Iterable getAllService(); + + /** + * 获取指定菜单编号的地图服务 + * @param menuCode 菜单编号 + * @return + */ + Iterable getByMenuCode(String menuCode); + + /** + * 获取指定图层名称的地图服务 + * @param layerName 图层名称 + * @return + */ + List getByLayerName(String layerName); + + /** + * 获取指定id的地图服务 + * @param id 产品编号 + * @return + */ + Optional getById(Integer id); + + /** + * 获取指定类型的所有服务 + * @param productType 产品类型 + * @return + */ + Iterable getByProductType(String productType); + + /** + * 获取指定类型和行政区划的所有服务 + * @param admCode 行政区划 + * @param productType 产品类型 + * @return + */ + Iterable getByAdmCodeAndProductType(Integer admCode, String productType); + + /** + * 新增地图服务 + * @param mapServiceQo + * @param userName 用户名 + */ + void add(MapServiceQo mapServiceQo, String userName); + + /** + * 获取指定编号的地图服务 + * @param mapServiceQo 地图服务修改 + * @param userName 地图服务 + * @return + */ + int updateById(MapServiceQo mapServiceQo, String userName); + + /** + * 删除地图服务 + * @param id 编号 + * @return + */ + int delete(Integer id); + + /** + * 获取指定菜单下的图层组 + * @param menuCode 产品类型 + * @return + */ + List getAllMapLayerGroupByMenuCode(String menuCode); + + /** + * 获取指定菜单下的图层组 + * @param layerGroupCode 图层组代码 + * @return + */ + List getAllMapLayerGroupByLayerGroupCode(String layerGroupCode); + + /** + * 创建图层组 + * @param layerIds 图层组ids + * @param layerGroupOrdersAraNum 图层组顺序 + * @param userName 用户名 + * @return + */ + int createMapLayerGroup(Integer[] layerIds,Integer[] layerGroupOrdersAraNum,String userName); + + /** + * 解散图层组 + * @param layerId 图层组id + * @param userName 用户名 + * @return + */ + int dismissMapLayerGroup(Integer layerId,String userName); + +} diff --git a/src/main/java/com/xkrs/microservice/service/SysAuthorityService.java b/src/main/java/com/xkrs/microservice/service/SysAuthorityService.java new file mode 100644 index 0000000..2c285d1 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/SysAuthorityService.java @@ -0,0 +1,19 @@ +package com.xkrs.microservice.service; + +import com.xkrs.microservice.model.entity.SysAuthorityEntity; + +import java.util.List; + +/** + * 系统权限服务接口 + * @author tajochen + */ +public interface SysAuthorityService { + + /** + * 获取权限实体列表根据用户名 + * @param userName + * @return + */ + List getSysAuthorityListByUserName(String userName); +} diff --git a/src/main/java/com/xkrs/microservice/service/SysMenuService.java b/src/main/java/com/xkrs/microservice/service/SysMenuService.java new file mode 100644 index 0000000..7edabf0 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/SysMenuService.java @@ -0,0 +1,52 @@ +package com.xkrs.microservice.service; + +import com.xkrs.microservice.model.entity.SysMenuEntity; + +/** + * 系统菜单服务接口 + * @author tajochen + */ +public interface SysMenuService { + + /** + * 获取所有系统菜单服务 + * @return + */ + Iterable getAllSysMenu(); + + /** + * 获取系统菜单服务根据菜单代码 + * @param menuCode 菜单代码 + * @return + */ + Iterable getSysMenuByMenuCode(String menuCode); + + /** + * 获取系统菜单服务根据菜单代码 + * @param menuName 菜单代码 + * @return + */ + Iterable getSysMenuByMenuName(String menuName); + + /** + * 添加系统菜单服务 + * @param sysMenuEntity + * @return + */ + void insertSysMenu(SysMenuEntity sysMenuEntity); + + /** + * 修改系统菜单服务 + * @param sysMenuEntity + * @return + */ + void updateSysMenu(SysMenuEntity sysMenuEntity); + + /** + * 删除系统菜单服务 + * @param id 编号 + * @return + */ + int deleteSysMenu(Integer id); + +} diff --git a/src/main/java/com/xkrs/microservice/service/SysRoleService.java b/src/main/java/com/xkrs/microservice/service/SysRoleService.java new file mode 100644 index 0000000..5c270fc --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/SysRoleService.java @@ -0,0 +1,19 @@ +package com.xkrs.microservice.service; + +import com.xkrs.microservice.model.entity.SysRoleEntity; + +import java.util.List; + +/** + * 系统角色服务接口 + * @author tajochen + */ +public interface SysRoleService { + + /** + * 获取角色实体列表根据用户名 + * @param userName + * @return + */ + List getSysRoleListByUserName(String userName); +} diff --git a/src/main/java/com/xkrs/microservice/service/SysUserService.java b/src/main/java/com/xkrs/microservice/service/SysUserService.java new file mode 100644 index 0000000..72e2ee8 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/SysUserService.java @@ -0,0 +1,105 @@ +package com.xkrs.microservice.service; + +import com.xkrs.microservice.model.entity.SysUserEntity; +import com.xkrs.microservice.model.qo.SysUserQo; +import com.xkrs.microservice.model.vo.SysUserVo; + +/** + * 系统用户服务接口 + * @author tajochen + */ +public interface SysUserService { + + /** + * 获取指定用户Vo + * @param userName 用户名 + * @return + */ + SysUserVo getSysUserVoByUserName(String userName); + + /** + * 获取指定手机号用户 + * @param telephone 手机号 + * @return + */ + SysUserVo findByTelephone(String telephone); + + /** + * 用户头像更新 + * @param userName 用户名 + * @param portraitId 编号 + * @return + */ + int updateSysUserPortrait(String userName,Integer portraitId); + + /** + * 用户密码更新 + * @param userName 用户名 + * @param oldPassword 旧密码 + * @param newPassword 新密码 + * @return + */ + int updateSysUserPassword(String userName,String oldPassword,String newPassword); + + /** + * 检查用户名 + * @param userName 用户名 + * @return + */ + boolean checkUserName(String userName); + + /** + * 获取所有用户 + * @return + */ + Iterable getAllSysUser(); + + /** + * 保存用户 + * @param sysUserQo + */ + void addUser(SysUserQo sysUserQo); + + /** + * 获取系统用户实体根据用户名 + * @param userName 用户名 + * @return + */ + SysUserEntity getSysUserByUserName(String userName); + + /** + * 用户登录更新 + * @param userName 用户名 + * @param ipAddress ip地址 + * @return + */ + int updateSysUserLogin(String userName,String ipAddress); + + /** + * 系统用户更新 + * @param sysUserQo + * @return + */ + int updateSysUser(SysUserQo sysUserQo); + + /** + * 禁用用户账号 + * @param userName + * @return + */ + int disableSysUser(String userName); + + /** + * 启用用户账号 + * @param userName + * @return + */ + int enableSysUser(String userName); + + /** + * 软删除系统用户 + * @param id 编号 + * @return + */ + int softDeleteGeneralUser(Integer id); +} diff --git a/src/main/java/com/xkrs/microservice/service/impl/DataFileServiceImpl.java b/src/main/java/com/xkrs/microservice/service/impl/DataFileServiceImpl.java new file mode 100644 index 0000000..f415e34 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/impl/DataFileServiceImpl.java @@ -0,0 +1,281 @@ +package com.xkrs.microservice.service.impl; + +import com.xkrs.microservice.common.config.RedisUtil; +import com.xkrs.microservice.common.encapsulation.EncapsulationObject; +import com.xkrs.microservice.dao.DataFileDao; +import com.xkrs.microservice.dao.MapServiceDao; +import com.xkrs.microservice.model.entity.DataFileEntity; +import com.xkrs.microservice.model.entity.MapServiceEntity; +import com.xkrs.microservice.model.qo.DataFileQo; +import com.xkrs.microservice.model.qo.ZipFileInfoQo; +import com.xkrs.microservice.model.vo.FileServiceResDetailVo; +import com.xkrs.microservice.model.vo.ResultVo; +import com.xkrs.microservice.service.DataFileService; +import com.xkrs.microservice.service.FileServerService; +import com.xkrs.microservice.util.CopyPropertiesUtil; +import com.xkrs.microservice.util.OpenGeoGisUtil; +import com.xkrs.microservice.util.SnowFlakeUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cache.annotation.Caching; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.List; +import java.util.Optional; + +import static com.xkrs.microservice.util.DateTimeUtil.getNowTime; +import static com.xkrs.microservice.util.DateTimeUtil.timeMillisToTime; +import static com.xkrs.microservice.util.FileUtil.multipartToFile; +import static com.xkrs.microservice.util.ZipUtil.unZip; + +/** + * 数据文件服务 + * @author tajochen + */ +@Service +@CacheConfig(cacheNames = "DataFileServiceCache") +public class DataFileServiceImpl implements DataFileService { + + @Value("${my.TempFilePath}") + private String tempFilePath; + + @Value("${my.FileServerPath}") + private String fileServerPath; + + @Value("${my.gsmExePath}") + private String gsmExePath; + + @Value("${my.gsmOutPath}") + private String gsmOutPath; + + Logger logger = LoggerFactory.getLogger(DataFileServiceImpl.class); + + @Resource + private DataFileDao dataFileDao; + + @Resource + private MapServiceDao mapServiceDao; + + @Resource + private RedisUtil redisUtil; + + + /** + * 获取所有数据文件 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator",unless="#result == null") + @Override + public Iterable getAllDataFile(){ + return dataFileDao.findAll(); + } + + /** + * 获取数据文件根据菜单代码 + * @param menuCode 菜单代码 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator",unless="#result == null") + @Override + public Iterable getAllDataFileByMenuCode(String menuCode){ + return dataFileDao.findAllByMenuCode(menuCode); + } + + /** + * 获取所有数据文件根据数据类型 + * @param dataType 数据类型 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator",unless="#result == null") + @Override + public Iterable getAllDataFileByDataType(String dataType){ + return dataFileDao.findAllByDataType(dataType); + } + + /** + * 获取文件数据根据菜单代码和数据类型和发布标记 + * @param menuCode 菜单代码 + * @param dataType 数据类型 + * @param publishFlag 发布标记 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator",unless="#result == null") + @Override + public Iterable getAllDataFileByMenuCodeAndDataTypeAndPublishFlag(String menuCode,String dataType,Integer publishFlag){ + return dataFileDao.findAllByMenuCodeAndDataTypeAndPublishFlag(menuCode,dataType,publishFlag); + } + + /** + * 获取数据文件根据文件代码 + * @param dataFileCode 文件代码 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator",unless="#result == null") + @Override + public DataFileEntity getDataFileByDataFileCode(String dataFileCode){ + return dataFileDao.findByDataFileCode(dataFileCode); + } + + /** + * 添加数据文件 + * @param dataFileEntity + * @return + */ + @Transactional(rollbackFor=Exception.class) + @Override + @CacheEvict(value = "DataFileServiceCache",allEntries = true) + public ResultVo insertDataFile(DataFileEntity dataFileEntity){ + ResultVo resultVo = new ResultVo(); + // 设置文件代码 + SnowFlakeUtil snowFlake = new SnowFlakeUtil(5, 5); + String dataFileCode = String.valueOf(snowFlake.nextId()); + dataFileEntity.setDataFileCode(dataFileCode); + // 设置发布标记 + dataFileEntity.setPublishFlag(0); + // 设置系统时间 + dataFileEntity.setCreatedTime(getNowTime()); + dataFileDao.save(dataFileEntity); + resultVo.setResultCode(0); + resultVo.setResultMessage(dataFileCode); + return resultVo; + } + + @Override + public ResultVo runDataFile(DataFileQo dataFileQo) { + ResultVo resultVo = new ResultVo(); + //给这个文件加个锁 + redisUtil.set("runFile_" + dataFileQo.getId(),"lock",3*60*60); + DataFileEntity dataFileEntity = dataFileDao.findById(dataFileQo.getId()).get(); + dataFileEntity.setRunFlag(1); + dataFileDao.save(dataFileEntity); + Optional optional = dataFileDao.findById(dataFileQo.getId()); + //线程池,执行GSM操作 + executeRunData(dataFileQo.getId(),optional.get().getDataFileCode(),optional.get().getLeftFilePath(), + optional.get().getRightFilePath(), + dataFileQo.getMaxX(),dataFileQo.getMaxY(), + dataFileQo.getMinX(),dataFileQo.getMinY()); + resultVo.setResultCode(0); + resultVo.setResultMessage("执行成功"); + return resultVo; + } + + /** + * 执行文件操作 + * @param id 文件的id + * @param dataFileCode 上传的文件编码 + * @param leftFilePath 左影像文件 + * @param rightFilePath 右影像文件 + * @param maxX + * @param maxY + * @param minX + * @param minY + */ + @Async + public void executeRunData(Integer id,String dataFileCode,String leftFilePath,String rightFilePath,String maxX,String maxY,String minX,String minY){ + String[] params = {gsmExePath,"-l",leftFilePath,"-r",rightFilePath,"-o",gsmOutPath + dataFileCode, + "--maxx",maxX,"--maxy",maxY,"--minx",minX,"--miny",minY}; + try { + // 执行命令 + Process process = Runtime.getRuntime().exec(params); + + // 读取执行结果 + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + System.out.println(line); + } + + // 等待执行结束 + int exitCode = process.waitFor(); + DataFileEntity dataFileEntity = dataFileDao.findById(id).get(); + dataFileEntity.setRunFlag(2); + dataFileDao.save(dataFileEntity); + }catch (IOException | InterruptedException e){ + e.printStackTrace(); + // 如果出现异常将文件的运行状态改为未运行 + DataFileEntity dataFileEntity = dataFileDao.findById(id).get(); + dataFileEntity.setRunFlag(0); + dataFileDao.save(dataFileEntity); + } + //不管运行结果怎么样都把文件锁去掉 + redisUtil.del("runFile_" + id); + } + + + @Override + public ResultVo uploadDataFile(DataFileQo dataFileQo, MultipartFile leftFile, MultipartFile rightFile, String userName) { + ResultVo resultVo = new ResultVo(); + // 设置文件代码 + SnowFlakeUtil snowFlake = new SnowFlakeUtil(5, 5); + String dataFileCode = String.valueOf(snowFlake.nextId()); + File tempLeftFile = multipartToFile(leftFile,fileServerPath + "/GSM_GUI/source/" + dataFileCode + "/"); + //将左影像文件加压到当前目录 + unZip(tempLeftFile,tempLeftFile.getParent()); + File tempRightFile = multipartToFile(rightFile,fileServerPath + "/GSM_GUI/source/" + dataFileCode + "/"); + //将右影像解压到当前目录 + unZip(tempRightFile,tempRightFile.getParent()); + DataFileEntity dataFileEntity = new DataFileEntity(); + dataFileEntity.setFileName(dataFileQo.getFileName()); + dataFileEntity.setDataType(dataFileQo.getDataType()); + dataFileEntity.setDataFileCode(dataFileCode); + dataFileEntity.setRemarks(dataFileQo.getRemarks()); +// dataFileEntity.setLeftFileMd5(tempLeftFile.getMd5()); + dataFileEntity.setLeftFileSize(tempLeftFile.length()); + dataFileEntity.setLeftFilePath(tempLeftFile.getPath().replace(".zip",".tif")); +// dataFileEntity.setRightFileMd5(tempLeftFile.getMd5()); + dataFileEntity.setRightFileSize(tempRightFile.length()); + dataFileEntity.setRightFilePath(tempRightFile.getPath().replace(".zip",".tif")); + // 设置发布标记 + dataFileEntity.setPublishFlag(0); + dataFileEntity.setRunFlag(0); + dataFileEntity.setCreatedBy(userName); + // 设置系统时间 + dataFileEntity.setCreatedTime(getNowTime()); + dataFileDao.save(dataFileEntity); + return resultVo; + } + + /** + * 删除数据文件 + * @param id 编号 + */ + @Transactional(rollbackFor=Exception.class) + @Override + @Caching(evict={@CacheEvict(value = "MapServiceCache",allEntries = true), + @CacheEvict(value = "DataFileServiceCache",allEntries = true)}) + public int deleteDataFile(Integer id){ + Optional dataFileEntityOptional = dataFileDao.findById(id); + if(dataFileEntityOptional.isPresent()){ + // 删除文件对应地图服务,解散图层组 + dataFileDao.deleteById(id); + Iterable mapServiceEntityIterable = mapServiceDao.findAllByDataFileCode(dataFileEntityOptional.get().getDataFileCode()); + for(MapServiceEntity mapServiceEntity:mapServiceEntityIterable){ + mapServiceDao.deleteById(mapServiceEntity.getId()); + List mapServiceEntityList = mapServiceDao.findAllByLayerGroupCode(mapServiceEntity.getLayerGroupCode()); + // 设置图层组代码为空 + for(MapServiceEntity mapServiceEntityOne:mapServiceEntityList){ + mapServiceEntityOne.setLayerGroupCode(""); + mapServiceEntityOne.setLayerGroupOrder(0); + mapServiceDao.save(mapServiceEntityOne); + } + } + + return 0; + } + return 1; + } + +} diff --git a/src/main/java/com/xkrs/microservice/service/impl/FileServerServiceImpl.java b/src/main/java/com/xkrs/microservice/service/impl/FileServerServiceImpl.java new file mode 100644 index 0000000..1ec1bc4 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/impl/FileServerServiceImpl.java @@ -0,0 +1,151 @@ +package com.xkrs.microservice.service.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.xkrs.microservice.model.vo.FileServerResultVo; +import com.xkrs.microservice.model.vo.FileServiceResDetailVo; +import com.xkrs.microservice.service.FileServerService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import static com.xkrs.microservice.common.tool.FileServerManageTool.postFileManage; +import static com.xkrs.microservice.util.RequestUtil.postFile; + +/** + * 文件服务器接口 + * @author tajochen + */ +@Service +public class FileServerServiceImpl implements FileServerService { + + Logger logger = LoggerFactory.getLogger(FileServerServiceImpl.class); + + @Value("${my.FileServerAdminAdress}") + private String fileServerAdminAdress; + + @Value("${my.FileServerAdress}") + private String fileServerAdress; + + @Value("${my.FileServerPath}") + private String fileServerPath; + + /** + * 上传文件 + * @param theFile 本地文件 + * @param path 文件服务器路径 + * @return + */ + @Override + public FileServiceResDetailVo uploadFile(File theFile, String path){ + Map postParam = new HashMap<>(16); + postParam.put("output","json"); + postParam.put("path",path); + postParam.put("scene",""); + String resFileServer = postFile(theFile, fileServerAdress+"/gsm/upload", postParam); + ObjectMapper objectMapper = new ObjectMapper(); + FileServiceResDetailVo result = null; + try { + result = objectMapper.readValue(resFileServer,FileServiceResDetailVo.class); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + return result; + } + + /** + * 获取文件统计信息 + * @return + */ + @Override + public FileServerResultVo getFileStat(){ + String requestUrl = fileServerAdminAdress + "/group1/stat"; + Map map = new HashMap<>(16); + return postFileManage(requestUrl,map); + } + + /** + * 删除文件 + * @param md5 信息摘要 + * @param path 路径 + * @return + */ + @Override + public FileServerResultVo deleteFile(String md5,String path){ + String requestUrl = fileServerAdminAdress + "/group1/delete"; + Map map = new HashMap<>(16); + if(md5 != null && !md5.isEmpty()){ + map.put("md5",md5); + } + if(path != null && !path.isEmpty()){ + map.put("path",path); + } + return postFileManage(requestUrl,map); + } + + /** + * 获取文件信息 + * @param md5 信息摘要 + * @param path 路径 + * @return + */ + @Override + public FileServerResultVo getFileInfo(String md5,String path){ + String requestUrl = fileServerAdminAdress + "/group1/get_file_info"; + Map map = new HashMap<>(16); + if(md5 != null && !md5.isEmpty()){ + map.put("md5",md5); + } + if(path != null && !path.isEmpty()){ + map.put("path",path); + } + return postFileManage(requestUrl,map); + } + + /** + * 获取文件列表 + * @param dir 目录名 + * @return + */ + @Override + public FileServerResultVo getFileList(String dir){ + String requestUrl = fileServerAdminAdress + "/group1/list_dir"; + Map map = new HashMap<>(16); + map.put("dir",dir); + return postFileManage(requestUrl,map); + } + + /** + * 修复统计信息 + * @param date 要修复的日期,格式如:20190725 + * @return + */ + @Override + public FileServerResultVo getFileRepairStat(String date){ + String requestUrl = fileServerAdminAdress + "/group1/repair_stat"; + Map map = new HashMap<>(16); + map.put("date",date); + return postFileManage(requestUrl,map); + } + + /** + * 同步失败修复 + * @param force 是否强行修复(0|1) + * @return + */ + @Override + public FileServerResultVo getFileRepair(String force){ + String requestUrl = fileServerAdminAdress + "/group1/repair"; + Map map = new HashMap<>(16); + map.put("force",force); + return postFileManage(requestUrl,map); + } + + + +} diff --git a/src/main/java/com/xkrs/microservice/service/impl/MapServiceServiceServiceImpl.java b/src/main/java/com/xkrs/microservice/service/impl/MapServiceServiceServiceImpl.java new file mode 100644 index 0000000..fe3f911 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/impl/MapServiceServiceServiceImpl.java @@ -0,0 +1,311 @@ +package com.xkrs.microservice.service.impl; + +import com.xkrs.microservice.dao.DataFileDao; +import com.xkrs.microservice.dao.MapServiceDao; +import com.xkrs.microservice.model.entity.DataFileEntity; +import com.xkrs.microservice.model.entity.MapServiceEntity; +import com.xkrs.microservice.model.qo.MapServiceQo; +import com.xkrs.microservice.model.vo.MapLayerGroupVo; +import com.xkrs.microservice.service.MapServiceService; +import com.xkrs.microservice.util.CopyPropertiesUtil; +import com.xkrs.microservice.util.SnowFlakeUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cache.annotation.Caching; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import static com.xkrs.microservice.util.DateTimeUtil.*; +import static com.xkrs.microservice.util.DateTimeUtil.timeMillisToTime; + +/** + * 地图服务管理接口 + * @author tajochen + */ +@Service +@CacheConfig(cacheNames = "MapServiceCache") +public class MapServiceServiceServiceImpl implements MapServiceService { + + Logger logger = LoggerFactory.getLogger(MapServiceServiceServiceImpl.class); + + @Resource + private MapServiceDao mapServiceDao; + + @Resource + private DataFileDao dataFileDao; + + /** + * 获取所有地图服务 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public Iterable getAllService(){ + return mapServiceDao.findAll(); + } + + /** + * 获取指定菜单编号的地图服务 + * @param menuCode 菜单编号 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public Iterable getByMenuCode(String menuCode){ + return mapServiceDao.findAllByMenuCode(menuCode); + } + + /** + * 获取指定图层名称的地图服务 + * @param layerName 图层名称 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public List getByLayerName(String layerName){ + return mapServiceDao.findAllByLayerName(layerName); + } + + /** + * 获取指定id的地图服务 + * @param id 产品编号 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public Optional getById(Integer id){ + return mapServiceDao.findById(id); + } + + /** + * 获取指定类型的所有地图服务 + * @param productType 产品类型 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public Iterable getByProductType(String productType){ + return mapServiceDao.findAllByProductType(productType); + } + + /** + * 获取指定类型和行政区划的所有服务 + * @param admCode 行政区划 + * @param productType 产品类型 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public Iterable getByAdmCodeAndProductType(Integer admCode, String productType) { + return mapServiceDao.findAllByProductTypeAndAdmCode(productType,admCode); + } + + /** + * 新增地图服务记录 + * @param mapServiceQo + * @param userName 用户名 + */ + @Transactional(rollbackFor=Exception.class) + @Caching(evict={@CacheEvict(value = "MapServiceCache",allEntries = true), + @CacheEvict(value = "DataFileServiceCache",allEntries = true)}) + @Override + public void add(MapServiceQo mapServiceQo, String userName){ + MapServiceEntity mapservice = new MapServiceEntity(); + CopyPropertiesUtil.copy(mapServiceQo, mapservice); + mapservice.setProductStartTime(timeMillisToTime(mapServiceQo.getProductStartTimeTs())); + mapservice.setProductEndTime(timeMillisToTime(mapServiceQo.getProductEndTimeTs())); + // 设置添加用户 + mapservice.setCreatedBy(userName); + // 设置系统时间 + mapservice.setCreatedTime(getNowTime()); + // 获取原始文件 + DataFileEntity dataFileEntity = dataFileDao.findByDataFileCode(mapservice.getDataFileCode()); + // 设置发布标记 + dataFileEntity.setPublishFlag(1); + mapServiceDao.save(mapservice); + dataFileDao.save(dataFileEntity); + }; + + + /** + * 修改指定编号的地图服务 + * @param mapServiceQo 地图服务修改 + * @param userName 地图服务 + * @return + */ + @Transactional(rollbackFor=Exception.class) + @Caching(evict={@CacheEvict(value = "MapServiceCache",allEntries = true)}) + @Override + public int updateById(MapServiceQo mapServiceQo, String userName){ + + Optional mapServiceEntityOptional = mapServiceDao.findById(mapServiceQo.getId()); + if(mapServiceEntityOptional.isEmpty()){ + return 1; + } + mapServiceEntityOptional.get().setRemarks(mapServiceQo.getRemarks()); + mapServiceEntityOptional.get().setStyleName(mapServiceQo.getStyleName()); + mapServiceEntityOptional.get().setProductStartTime(timeMillisToTime(mapServiceQo.getProductStartTimeTs())); + mapServiceEntityOptional.get().setProductEndTime(timeMillisToTime(mapServiceQo.getProductEndTimeTs())); + mapServiceEntityOptional.get().setAdmCode(mapServiceQo.getAdmCode()); + mapServiceEntityOptional.get().setAdmName(mapServiceQo.getAdmName()); + mapServiceEntityOptional.get().setLayerShowName(mapServiceQo.getLayerShowName()); + // 图层组不改变 + mapServiceEntityOptional.get().setLayerGroupCode(mapServiceEntityOptional.get().getLayerGroupCode()); + // 设置修改用户 + mapServiceEntityOptional.get().setUpdatedBy(userName); + // 设置系统时间 + mapServiceEntityOptional.get().setUpdatedTime(getNowTime()); + mapServiceDao.save(mapServiceEntityOptional.get()); + return 0; + } + + /** + * 删除地图服务 + * @param id 编号 + */ + @Transactional(rollbackFor=Exception.class) + @Caching(evict={@CacheEvict(value = "MapServiceCache",allEntries = true), + @CacheEvict(value = "DataFileServiceCache",allEntries = true)}) + @Override + public int delete(Integer id){ + Optional mapServiceEntityOptional = mapServiceDao.findById(id); + if(mapServiceEntityOptional.isPresent()){ + // 解散图层组 + if(!mapServiceEntityOptional.get().getLayerGroupCode().isEmpty()){ + List mapServiceEntityList = mapServiceDao.findAllByLayerGroupCode(mapServiceEntityOptional.get().getLayerGroupCode()); + // 设置图层组代码为空 + for(MapServiceEntity mapServiceEntity:mapServiceEntityList){ + mapServiceEntity.setLayerGroupCode(""); + mapServiceEntity.setLayerGroupOrder(0); + mapServiceDao.save(mapServiceEntity); + } + } + // 文件标识改回未发布 + DataFileEntity dataFileEntity = dataFileDao.findByDataFileCode(mapServiceEntityOptional.get().getDataFileCode()); + dataFileEntity.setPublishFlag(0); + dataFileDao.save(dataFileEntity); + mapServiceDao.deleteById(id); + return 0; + } + return 1; + } + + /** + * 获取指定菜单下的图层组 + * @param menuCode 产品类型 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public List getAllMapLayerGroupByMenuCode(String menuCode){ + List res = new ArrayList<>(); + List oriMapServiceList = mapServiceDao.findAllByMenuCode(menuCode); + // 图层组列表 + List groupCodes = new ArrayList<>(); + for(MapServiceEntity obj: oriMapServiceList){ + if(!groupCodes.contains(obj.getLayerGroupCode()) ){ + // 新建图层组Vo + MapLayerGroupVo mapLayerGroupVo = new MapLayerGroupVo(); + List list = new ArrayList<>(); + mapLayerGroupVo.setCount(1); + mapLayerGroupVo.setLayerGroupCode(obj.getLayerGroupCode()); + list.add(obj); + mapLayerGroupVo.setLayers(list); + groupCodes.add(obj.getLayerGroupCode()); + // 追加结果 + res.add(mapLayerGroupVo); + } else { + // 更新图层组Vo + for(MapLayerGroupVo resVo: res){ + // 查找相同图层 + if(Objects.equals(resVo.getLayerGroupCode(), obj.getLayerGroupCode())){ + resVo.setCount(resVo.getCount()+1); + List list = resVo.getLayers(); + list.add(obj); + resVo.setLayers(list); + } + } + } + } + return res; + } + + /** + * 获取指定菜单下的图层组 + * @param layerGroupCode 图层组代码 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public List getAllMapLayerGroupByLayerGroupCode(String layerGroupCode){ + return mapServiceDao.findAllByLayerGroupCode(layerGroupCode); + } + + /** + * 创建图层组 + * @param layerIds 图层组ids + * @param layerGroupOrdersAraNum 图层组顺序 + * @param userName 用户名 + * @return + */ + @Transactional(rollbackFor=Exception.class) + @Caching(evict={@CacheEvict(value = "MapServiceCache",allEntries = true)}) + @Override + public int createMapLayerGroup(Integer[] layerIds,Integer[] layerGroupOrdersAraNum,String userName){ + List mapServiceEntityList = new ArrayList<>(); + for(Integer id:layerIds){ + Optional mapServiceEntityOptional = mapServiceDao.findById(id); + if(mapServiceEntityOptional.isEmpty()){ + return 1; + } + mapServiceEntityList.add(mapServiceEntityOptional.get()); + } + // 设置图层组编号 + SnowFlakeUtil snowFlake = new SnowFlakeUtil(5, 5); + String layerGroupCode = String.valueOf(snowFlake.nextId()); + int n = 0; + // 设置图层组和图层顺序 + for(MapServiceEntity mapServiceEntity:mapServiceEntityList){ + mapServiceEntity.setLayerGroupCode(layerGroupCode); + mapServiceEntity.setLayerGroupOrder(layerGroupOrdersAraNum[n]); + mapServiceDao.save(mapServiceEntity); + n=n+1; + } + return 0; + } + + /** + * 解散图层组 + * @param layerId 图层组id + * @param userName 用户名 + * @return + */ + @Transactional(rollbackFor=Exception.class) + @Caching(evict={@CacheEvict(value = "MapServiceCache",allEntries = true)}) + @Override + public int dismissMapLayerGroup(Integer layerId,String userName){ + Optional mapServiceEntityOptional = mapServiceDao.findById(layerId); + if(mapServiceEntityOptional.isEmpty()){ + return 1; + } + String layerGroupCode = mapServiceEntityOptional.get().getLayerGroupCode(); + List mapServiceEntityList = mapServiceDao.findAllByLayerGroupCode(layerGroupCode); + // 设置图层组代码为空 + for(MapServiceEntity mapServiceEntity:mapServiceEntityList){ + mapServiceEntity.setLayerGroupCode(""); + mapServiceEntity.setLayerGroupOrder(0); + mapServiceDao.save(mapServiceEntity); + } + return 0; + } + +} diff --git a/src/main/java/com/xkrs/microservice/service/impl/SysAuthorityServiceImpl.java b/src/main/java/com/xkrs/microservice/service/impl/SysAuthorityServiceImpl.java new file mode 100644 index 0000000..dd94e60 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/impl/SysAuthorityServiceImpl.java @@ -0,0 +1,29 @@ +package com.xkrs.microservice.service.impl; + +import com.xkrs.microservice.dao.SysAuthorityDao; +import com.xkrs.microservice.model.entity.SysAuthorityEntity; +import com.xkrs.microservice.service.SysAuthorityService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 系统权限服务实现 + * @author tajochen + */ +@Service +public class SysAuthorityServiceImpl implements SysAuthorityService { + + Logger logger = LoggerFactory.getLogger(SysAuthorityServiceImpl.class); + + @Resource + private SysAuthorityDao sysAuthorityDao; + + @Override + public List getSysAuthorityListByUserName(String userName) { + return sysAuthorityDao.selectByUserName(userName); + } +} diff --git a/src/main/java/com/xkrs/microservice/service/impl/SysMenuServiceImpl.java b/src/main/java/com/xkrs/microservice/service/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000..bab0d31 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,143 @@ +package com.xkrs.microservice.service.impl; + +import com.xkrs.microservice.dao.DataFileDao; +import com.xkrs.microservice.dao.MapServiceDao; +import com.xkrs.microservice.dao.SysMenuDao; +import com.xkrs.microservice.model.entity.DataFileEntity; +import com.xkrs.microservice.model.entity.MapServiceEntity; +import com.xkrs.microservice.model.entity.SysMenuEntity; +import com.xkrs.microservice.service.SysMenuService; +import com.xkrs.microservice.util.SnowFlakeUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Optional; + +import static com.xkrs.microservice.util.DateTimeUtil.getNowTime; + +/** + * 系统菜单服务接口 + * @author tajochen + */ +@Service +@CacheConfig(cacheNames = "SysMenuServiceCache") +public class SysMenuServiceImpl implements SysMenuService { + + Logger logger = LoggerFactory.getLogger(SysMenuServiceImpl.class); + + @Resource + private SysMenuDao sysMenuDao; + + @Resource + private MapServiceDao mapServiceDao; + + @Resource + private DataFileDao dataFileDao; + + /** + * 获取所有系统菜单服务 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public Iterable getAllSysMenu(){ + return sysMenuDao.findAll(); + } + + /** + * 获取系统菜单服务根据菜单代码 + * @param menuCode 菜单代码 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public Iterable getSysMenuByMenuCode(String menuCode){ + return sysMenuDao.findAllByMenuCode(menuCode); + } + + /** + * 获取系统菜单服务根据菜单代码 + * @param menuName 菜单代码 + * @return + */ + @Cacheable(keyGenerator = "keyGenerator", unless="#result == null") + @Override + public Iterable getSysMenuByMenuName(String menuName){ + return sysMenuDao.findAllByMenuNameLike(menuName); + } + + /** + * 添加系统菜单服务 + * @param sysMenuEntity + * @return + */ + @Transactional(rollbackFor=Exception.class) + @CacheEvict(value = "SysMenuServiceCache",allEntries = true) + @Override + public void insertSysMenu(SysMenuEntity sysMenuEntity){ + // 设置菜单代码 + SnowFlakeUtil snowFlake = new SnowFlakeUtil(5, 5); + sysMenuEntity.setMenuCode(String.valueOf(snowFlake.nextId())); + // 设置系统时间 + sysMenuEntity.setCreatedTime(getNowTime()); + sysMenuDao.save(sysMenuEntity); + } + + /** + * 修改系统菜单服务 + * @param sysMenuEntity + * @return + */ + @Transactional(rollbackFor=Exception.class) + @CacheEvict(value = "SysMenuServiceCache",allEntries = true) + @Override + public void updateSysMenu(SysMenuEntity sysMenuEntity){ + Optional oldSysMenu = sysMenuDao.findById(sysMenuEntity.getId()); + if(oldSysMenu.isPresent()){ + sysMenuEntity.setMenuCode(oldSysMenu.get().getMenuCode()); + // 设置系统时间 + sysMenuEntity.setUpdatedTime(getNowTime()); + sysMenuDao.save(sysMenuEntity); + } + } + + /** + * 删除系统菜单服务 + * @param id 编号 + * @return + */ + @Transactional(rollbackFor=Exception.class) + @CacheEvict(value = "SysMenuServiceCache",allEntries = true) + @Override + public int deleteSysMenu(Integer id){ + Optional sysMenuEntityOptional = sysMenuDao.findById(id); + if(sysMenuEntityOptional.isEmpty()){ + return 1; + } + // 检查是否关联子菜单 + List sysMenuEntityList= sysMenuDao.findAllByParentCode(sysMenuEntityOptional.get().getMenuCode()); + if(sysMenuEntityList.size()>0){ + return 2; + } + // 检查有无关联数据文件 + List dataFileEntityList = dataFileDao.findAllByMenuCode(sysMenuEntityOptional.get().getMenuCode()); + if(dataFileEntityList.size()>0){ + return 3; + } + // 检查有无关联地图服务 + List mapServiceEntityList = mapServiceDao.findAllByMenuCode(sysMenuEntityOptional.get().getMenuCode()); + if(mapServiceEntityList.size()>0){ + return 4; + } + sysMenuDao.deleteById(id); + return 0; + } + +} diff --git a/src/main/java/com/xkrs/microservice/service/impl/SysRoleServiceImpl.java b/src/main/java/com/xkrs/microservice/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..9f0ba92 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,29 @@ +package com.xkrs.microservice.service.impl; + +import com.xkrs.microservice.dao.SysRoleDao; +import com.xkrs.microservice.model.entity.SysRoleEntity; +import com.xkrs.microservice.service.SysRoleService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 系统角色服务实现 + * @author tajochen + */ +@Service +public class SysRoleServiceImpl implements SysRoleService { + + Logger logger = LoggerFactory.getLogger(SysRoleServiceImpl.class); + + @Resource + private SysRoleDao sysRoleDao; + + @Override + public List getSysRoleListByUserName(String userName) { + return sysRoleDao.selectByUserName(userName); + } +} diff --git a/src/main/java/com/xkrs/microservice/service/impl/SysUserServiceImpl.java b/src/main/java/com/xkrs/microservice/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..6b7b9e1 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/service/impl/SysUserServiceImpl.java @@ -0,0 +1,242 @@ +package com.xkrs.microservice.service.impl; + +import com.xkrs.microservice.common.config.RedisUtil; +import com.xkrs.microservice.dao.SysRoleDao; +import com.xkrs.microservice.dao.SysUserDao; +import com.xkrs.microservice.model.entity.SysRoleEntity; +import com.xkrs.microservice.model.entity.SysUserEntity; +import com.xkrs.microservice.model.qo.SysUserQo; +import com.xkrs.microservice.model.vo.SysUserVo; +import com.xkrs.microservice.service.SysUserService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.crypto.keygen.KeyGenerators; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +import java.util.List; +import java.util.regex.Pattern; + +import static com.xkrs.microservice.util.DateTimeUtil.*; +import static com.xkrs.microservice.util.EncryptDecryptUtil.encrypt256; + +/** + * 系统用户服务实现 + * @author tajochen + */ +@Service +public class SysUserServiceImpl implements SysUserService { + + Logger logger = LoggerFactory.getLogger(SysUserServiceImpl.class); + + @Resource + private SysUserDao sysUserDao; + + @Resource + private SysRoleDao sysRoleDao; + + /** + * 获取指定用户Vo + * @param userName 用户名 + * @return + */ + @Override + public SysUserVo getSysUserVoByUserName(String userName){ + return sysUserDao.selectSysUserByUserName(userName); + } + + /** + * 获取指定手机号用户 + * @param telephone 手机号 + * @return + */ + @Override + public SysUserVo findByTelephone(String telephone){ + return sysUserDao.findByTelephone(telephone); + } + + /** + * 用户头像更新 + * @param userName 用户名 + * @param portraitId 编号 + * @return + */ + @Override + public int updateSysUserPortrait(String userName,Integer portraitId){ + SysUserEntity sysUserEntity = sysUserDao.findByUserName(userName); + if(sysUserEntity==null){ + return 1; + } + sysUserEntity.setPortraitId(portraitId); + sysUserDao.save(sysUserEntity); + return 0; + } + + /** + * 用户密码更新 + * @param userName 用户名 + * @param oldPassword 旧密码 + * @param newPassword 新密码 + * @return + */ + @Override + public int updateSysUserPassword(String userName,String oldPassword,String newPassword){ + // 检查旧密码是否正确 + SysUserEntity sysUserEntity = sysUserDao.findByUserName(userName); + if(sysUserEntity==null){ + return 1; + } + String oldPasswordStr = encrypt256(oldPassword + sysUserEntity.getSalt()); + // 如果旧密码不正确 + if(!oldPasswordStr.equals(sysUserEntity.getPassword())){ + return 2; + } + String pattern = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$"; + boolean isMatch = Pattern.matches(pattern, newPassword); + // 如果新密码不符合规则 + if(!isMatch){ + return 3; + } + String salt = KeyGenerators.string().generateKey(); + sysUserEntity.setSalt(salt); + sysUserEntity.setPassword(encrypt256(newPassword + salt)); + sysUserDao.save(sysUserEntity); + return 0; + } + + /** + * 检查用户名是否存在 + * @param userName 用户名 + * @return + */ + @Override + public boolean checkUserName(String userName) { + if(userName==null){ + return false; + } + int num = sysUserDao.checkUserName(userName); + return (num == 0); + } + + /** + * 禁用用户账号 + * @param userName + * @return + */ + @Transactional(rollbackFor=Exception.class) + @Override + public int disableSysUser(String userName){ + SysUserEntity sysUserEntity = sysUserDao.findByUserName(userName); + sysUserEntity.setStatusCode(2); + sysUserDao.save(sysUserEntity); + return 1; + } + + /** + * 启用用户账号 + * @param userName + * @return + */ + @Transactional(rollbackFor=Exception.class) + @Override + public int enableSysUser(String userName){ + SysUserEntity sysUserEntity = sysUserDao.findByUserName(userName); + sysUserEntity.setStatusCode(0); + sysUserDao.save(sysUserEntity); + return 1; + } + + /** + * 新增用户 + * @param sysUserQo + */ + @Transactional(rollbackFor=Exception.class) + @Override + public void addUser(SysUserQo sysUserQo) { + String salt = KeyGenerators.string().generateKey(); + SysUserEntity sysUserEntity = new SysUserEntity(); + sysUserEntity.setUserName(sysUserQo.getUserName()); + sysUserEntity.setUserCode(sysUserQo.getUserCode()); + sysUserEntity.setNickName(sysUserQo.getNickName()); + sysUserEntity.setRealName(sysUserQo.getRealName()); + sysUserEntity.setIdCard(sysUserQo.getIdCard()); + sysUserEntity.setAddress(sysUserQo.getAddress()); + sysUserEntity.setAdmCode(sysUserQo.getAdmCode()); + if(sysUserQo.getBirthdayTs()!=null){ + sysUserEntity.setBirthday(timeMillisToDate(sysUserQo.getBirthdayTs())); + } + sysUserEntity.setEmail(sysUserQo.getEmail()); + sysUserEntity.setSalt(salt); + sysUserEntity.setPassword(encrypt256(sysUserQo.getPassword() + salt)); + sysUserEntity.setSex(sysUserQo.getSex()); + sysUserEntity.setTelephone(sysUserQo.getTelephone()); + sysUserEntity.setSignature(sysUserQo.getSignature()); + sysUserEntity.setPortraitId(sysUserQo.getPortraitId()); + sysUserEntity.setMemo(sysUserQo.getMemo()); + // 设置账户默认状态 + sysUserEntity.setActiveFlag(0); + sysUserEntity.setStatusCode(0); + sysUserEntity.setCreatedTime(getNowTime()); + sysUserEntity.setDeleteFlag(0); + sysUserDao.save(sysUserEntity); + // 设置账户默认角色 + sysRoleDao.insertRelUserRole(sysUserEntity.getUserName(),"role_general_user"); + } + + /** + * 查询所有用户Vo + * @return + */ + @Transactional(rollbackFor=Exception.class) + @Override + public Iterable getAllSysUser() { + Iterable ls = sysUserDao.selectAllSysUser(); + return ls; + } + + @Transactional(rollbackFor=Exception.class) + @Override + public SysUserEntity getSysUserByUserName(String userName) { + return sysUserDao.selectByUserName(userName); + } + + @Transactional(rollbackFor=Exception.class) + @Override + public int updateSysUserLogin(String userName,String ipAddress) { + return sysUserDao.updateSysUserLogin(userName,ipAddress); + } + + /** + * 更新用户 + * @param sysUserQo + * @return + */ + @Transactional(rollbackFor=Exception.class) + @Override + public int updateSysUser(SysUserQo sysUserQo) { + SysUserEntity sysUserEntity = new SysUserEntity(); + sysUserEntity.setNickName(sysUserQo.getNickName()); + sysUserDao.save(sysUserEntity); + return 1; + } + + /** + * 软删除普通用户 + * @param id 编号 + * @return + */ + @Transactional(rollbackFor=Exception.class) + @Override + public int softDeleteGeneralUser(Integer id) { + List list = sysRoleDao.selectByUserId(id); + if(list.size()>0){ + SysRoleEntity sysRoleEntity = list.get(1); + sysUserDao.softDeleteGeneralUserById(id); + return 0; + } + return 1; + } + +} diff --git a/src/main/java/com/xkrs/microservice/util/AliMapWeather.java b/src/main/java/com/xkrs/microservice/util/AliMapWeather.java new file mode 100644 index 0000000..00c0606 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/AliMapWeather.java @@ -0,0 +1,173 @@ +package com.xkrs.microservice.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.xkrs.microservice.model.vo.AliWeatherBaseVo; +import com.xkrs.microservice.model.vo.AliWeatherAllVo; +import org.apache.http.HttpEntity; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +/** + * 高德地图天气工具 + * @author wd + * @date 2021/2/1 + */ +public class AliMapWeather { + + private static final Logger log = LoggerFactory.getLogger(AliMapWeather.class); + + /** + * 获取天气预报 + * @return + */ + public static AliWeatherAllVo getForecast(String key, int cityCode, String extensions) { + String forecastWeather = getForecastWeather(key, cityCode, extensions); + ObjectMapper objectMapper = new ObjectMapper(); + AliWeatherAllVo aliWeatherAllVo = null; + try { + aliWeatherAllVo = objectMapper.readValue(forecastWeather, AliWeatherAllVo.class); + } catch (JsonProcessingException e) { + log.error("objectMapper出错,获取天气预报:{}", e.getMessage()); + } + return aliWeatherAllVo; + } + + /** + * 获取天气实况 + * @return + */ + public static AliWeatherBaseVo getLives(String key, int cityCode, String extensions) { + String forecastWeather = getForecastWeather(key, cityCode, extensions); + ObjectMapper objectMapper = new ObjectMapper(); + AliWeatherBaseVo aliWeatherBaseVo = null; + try { + aliWeatherBaseVo = objectMapper.readValue(forecastWeather, AliWeatherBaseVo.class); + } catch (JsonProcessingException e) { + log.error("objectMapper出错,获取天气预报:{}", e.getMessage()); + } + return aliWeatherBaseVo; + } + + + public static String getForecastWeather(String key, int cityCode, String extensions) { + // 请求成功标志 + boolean isSuccess = false; + // 重复次数 + int retryTimes = 3; +// String key = "175e6f5cc5469125bf7c49ea5371e9c0"; +// int cityCode = 370100; +// String extensions = "all"; + String url = String.format("https://restapi.amap.com/v3/weather/weatherInfo?key=%s&city=%d&extensions=%s", key, cityCode, extensions); + CloseableHttpResponse response = null; + String line; + String result = ""; + AliWeatherAllVo aliWeatherAllVo; + AliWeatherBaseVo aliWeatherBaseVo; + Map map = new HashMap<>(3); + while (!isSuccess && retryTimes > 0) { + // 创建http对象 + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(60000).setConnectTimeout(60000) + .setConnectionRequestTimeout(60000) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig).build(); + + // 创建并设置URI + URIBuilder uri; + // 创建Get请求 + HttpGet get = null; + + try { + uri = new URIBuilder(url); + get = new HttpGet(uri.build()); + } catch (Exception e) { + log.info("{}", (Object) e.getStackTrace()); + } + //发送请求 + HttpEntity entity; + InputStream is = null; + BufferedReader br = null; + try { + response = client.execute(get); + // 获取请求结果 + entity = response.getEntity(); + is = entity.getContent(); + br = new BufferedReader( + new InputStreamReader(is, StandardCharsets.UTF_8) + ); + StringBuilder sb = new StringBuilder(); + while ((line = br.readLine()) != null) { + sb.append(line); + } + result = sb.toString(); + isSuccess = true; + } catch (ClientProtocolException e) { + // TODO Auto-generated catch block + retryTimes --; + log.info("请求超时等问题{}", (Object) e.getStackTrace()); + } catch (IOException e) { + retryTimes --; + log.info("I/O问题{}", (Object) e.getStackTrace()); + } finally { + closeConn(is, br, response, client); + } + } + return result; + } + + /** + * 关闭连接 + * @param is InputStream + * @param br BufferedReader + * @param response CloseableHttpResponse + * @param client CloseableHttpClient + */ + private static void closeConn(InputStream is, BufferedReader br, CloseableHttpResponse response, + CloseableHttpClient client ){ + try { + if (null != is){ + is.close(); + } + if (null != br){ + br.close(); + } + if (null != response){ + response.close(); + } + if (null != client){ + client.close(); + } + + } catch (IOException e) { + log.info("IO异常{}", (Object) e.getStackTrace()); + } + } + + public static void main(String[] args){ + String key = "175e6f5cc5469125bf7c49ea5371e9c0"; + int cityCode = 370100; + String all = "all"; + String base = "base"; + AliWeatherAllVo forecast = getForecast(key, cityCode, all); + AliWeatherBaseVo lives = getLives(key, cityCode, base); + getForecastWeather(key, cityCode, base); + } +} diff --git a/src/main/java/com/xkrs/microservice/util/AliMsgUtil.java b/src/main/java/com/xkrs/microservice/util/AliMsgUtil.java new file mode 100644 index 0000000..a32c774 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/AliMsgUtil.java @@ -0,0 +1,42 @@ +package com.xkrs.microservice.util; + +import com.aliyun.dysmsapi20170525.models.*; +import com.aliyun.teaopenapi.models.*; + +/** + * 阿里巴巴短信工具 + * @author tajochen + */ +public class AliMsgUtil { + + /** + * 使用AK&SK初始化账号Client + * @param accessKeyId 访问秘钥id + * @param accessKeySecret 访问密钥密码 + * @return Client + * @throws Exception + */ + public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception { + Config config = new Config() + // 您的AccessKey ID + .setAccessKeyId(accessKeyId) + // 您的AccessKey Secret + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = "dysmsapi.aliyuncs.com"; + return new com.aliyun.dysmsapi20170525.Client(config); + } + + public static void main(String[] args1) throws Exception { + java.util.List args = java.util.Arrays.asList(args1); + com.aliyun.dysmsapi20170525.Client client = AliMsgUtil.createClient("LTAI5tMSjLfu8Xu2w6WeguFF", "hvqM5zpi72hvX4VXM71wq6AE0XYtDI"); + SendSmsRequest sendSmsRequest = new SendSmsRequest() + .setSignName("青岛星科瑞升") + .setTemplateCode("SMS_221082764") + .setTemplateParam("{\"code\":\"123456\"}") + .setPhoneNumbers("123456789,123456798"); + // 复制代码运行请自行打印 API 的返回值 + SendSmsResponse response = client.sendSms(sendSmsRequest); + System.out.println(response); + } +} diff --git a/src/main/java/com/xkrs/microservice/util/CopyPropertiesUtil.java b/src/main/java/com/xkrs/microservice/util/CopyPropertiesUtil.java new file mode 100644 index 0000000..7b8c6aa --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/CopyPropertiesUtil.java @@ -0,0 +1,52 @@ +package com.xkrs.microservice.util; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +/** + * 复制源对象的属性值 + * @author tajochen + */ +public class CopyPropertiesUtil { + + /** + * 复制源对象和目标对象的属性值 + * @param source 源对象 + * @param target 目标对象 + */ + public static void copy(Object source, Object target) { + //得到对象的Class + Class sourceClass = source.getClass(); + Class targetClass = target.getClass(); + //得到Class对象的所有属性 + Field[] sourceFields = sourceClass.getDeclaredFields(); + Field[] targetFields = targetClass.getDeclaredFields(); + + for(Field sourceField : sourceFields){ + //属性名 + String name = sourceField.getName(); + //属性类型 + Class type = sourceField.getType(); + String methodName = name.substring(0, 1).toUpperCase() + name.substring(1); + try{ + //得到属性对应get方法 + Method getMethod = sourceClass.getMethod("get" + methodName); + //执行源对象的get方法得到属性值 + Object value = getMethod.invoke(source); + //目标对象的属性名 + for(Field targetField : targetFields){ + String targetName = targetField.getName(); + if(targetName.equals(name)){ + //属性对应的set方法 + Method setMethod = targetClass.getMethod("set" + methodName, type); + //执行目标对象的set方法 + setMethod.invoke(target, value); + } + } + } + catch (Exception e){ + e.printStackTrace(); + } + } + } +} diff --git a/src/main/java/com/xkrs/microservice/util/DateTimeUtil.java b/src/main/java/com/xkrs/microservice/util/DateTimeUtil.java new file mode 100644 index 0000000..17273a4 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/DateTimeUtil.java @@ -0,0 +1,211 @@ +package com.xkrs.microservice.util; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 日期时间工具 + * @author tajochen + */ +public class DateTimeUtil { + + private final static String COMMON_PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss"; + private final static String COMMON_PATTERN_DATE = "yyyy-MM-dd"; + private final static String COMMON_PATTERN_DATE_NO_LINE = "yyyyMMdd"; + private final static DateTimeFormatter COMMON_FORMATTER_DATETIME = DateTimeFormatter.ofPattern(COMMON_PATTERN_DATETIME); + private final static DateTimeFormatter COMMON_FORMATTER_DATE = DateTimeFormatter.ofPattern(COMMON_PATTERN_DATE); + private final static DateTimeFormatter COMMON_FORMATTER_DATE_NO_LINE = DateTimeFormatter.ofPattern(COMMON_PATTERN_DATE_NO_LINE); + private final static ZoneOffset DEFAULT_ZONE_OFFSET = ZoneOffset.of("+8"); + + /** + * 字符串转LocalDate + * @param dateStr 日期字符串 + * @return + */ + public static LocalDate stringToDate(String dateStr) { + assert dateStr != null; + return LocalDate.parse(dateStr, COMMON_FORMATTER_DATE); + } + + /** + * LocalDate转字符串 + * @param date 日期 + * @return + */ + public static String dateToString(LocalDate date) { + assert date != null; + return COMMON_FORMATTER_DATE.format(date); + } + + /** + * LocalDate转字符串无横线 + * @param date 日期 + * @return + */ + public static String dateToStringNoLine(LocalDate date) { + assert date != null; + return COMMON_FORMATTER_DATE_NO_LINE.format(date); + } + + /** + * LocalDateTime转字符串 + * @param dateTime 日期时间 + * @return + */ + public static String dateTimeToString(LocalDateTime dateTime) { + assert dateTime != null; + return COMMON_FORMATTER_DATETIME.format(dateTime); + } + + /** + * 字符串转LocalDateTime + * @param dateTimeStr 日期时间字符串 + * @return + */ + public static LocalDateTime stringToDateTime(String dateTimeStr) { + assert dateTimeStr != null; + return LocalDateTime.parse(dateTimeStr, COMMON_FORMATTER_DATETIME); + } + + /** + * 字符串转Instant时间戳 + * @param str 字符串 + * @return + */ + public static Instant stringToInstant(String str) { + assert str != null; + return stringToDateTime(str).toInstant(DEFAULT_ZONE_OFFSET); + } + + /** + * LocalDateTime转字符串(格式化) + * @param dateTime 日期时间 + * @param formatter 格式化标准 + * @return + */ + public static String dateToStringFormatter(LocalDateTime dateTime, DateTimeFormatter formatter) { + assert dateTime != null; + return formatter.format(dateTime); + } + + /** + * 字符串转LocalDateTime(格式化) + * @param dateTimeStr 日期时间字符串 + * @param formatter 格式化标准 + * @return + */ + public static LocalDateTime stringToDateTimeFormatter(String dateTimeStr, DateTimeFormatter formatter) { + assert dateTimeStr != null; + return LocalDateTime.parse(dateTimeStr, formatter); + } + + /** + * 字符串转 local date + * @param dateStr 日期字符串 + * @return + */ + public static LocalDate stringToDateFormatter(String dateStr){ + return LocalDate.parse(dateStr, COMMON_FORMATTER_DATE); + } + + + /** + * 日期转时间戳 + * @param dateTime 日期时间 + * @return + */ + public static long dateToTimeMillis(LocalDateTime dateTime) { + assert dateTime != null; + return dateTime.toInstant(DEFAULT_ZONE_OFFSET).toEpochMilli(); + } + + /** + * 时间戳转日期 + * @param timeMillis 时间戳(长整型) + * @return + */ + public static LocalDate timeMillisToDate(long timeMillis) { + return Instant.ofEpochMilli(timeMillis).atZone(DEFAULT_ZONE_OFFSET).toLocalDate(); + } + + /** + * 时间戳转时间 + * @param timeMillis 时间戳(长整型) + * @return + */ + public static LocalDateTime timeMillisToTime(long timeMillis) { + return LocalDateTime.ofEpochSecond(timeMillis,0, DEFAULT_ZONE_OFFSET); + } + + /** + * 获取当前时间 hh:mm:ss:nnn + * @return + */ + public static LocalDateTime getNowTime() { + return LocalDateTime.now(); + } + + /** + * 获取当前日期 yyyy-MM-dd + * @return + */ + public static LocalDate getToday() { + return LocalDate.now(); + } + + /** + * 获取当前 Instant 时间戳 + * @return + */ + public static Instant getInstant() { + return Instant.now(); + } + + /** + * 判断日期格式是否合法 "yyyy-MM-dd" + * @param strDate 日期字符串 + * @return + */ + public static boolean isValidDate(String strDate) { + final int minLen = 10; + if(strDate == null || strDate.length() < minLen) { + return false; + } + //正则表达式校验日期格式 yyyy-MM-dd + String eL = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-" + + "(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|" + + "((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)" + + "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|" + + "1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))" + + "|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)"; + Pattern pat = Pattern.compile(eL); + Matcher matcher = pat.matcher(strDate); + return matcher.matches(); + } + + /** + * 判断时间格式 格式必须为 "YYYY-MM-DD HH:mm:ss" + * @param sDateTime 日期时间字符串 + * @return + */ + public static boolean isValidDateTime(String sDateTime) { + final int minLen = 19; + if ((sDateTime == null) || (sDateTime.length() < minLen)) { + return false; + } + String eL = "(((01[0-9]{2}|0[2-9][0-9]{2}|[1-9][0-9]{3})-(0?[13578]|1[02])-" + + "(0?[1-9]|[12]\\\\d|3[01]))|((01[0-9]{2}|0[2-9][0-9]{2}|[1-9][0-9]{3})-" + + "(0?[13456789]|1[012])-(0?[1-9]|[12]\\\\d|30))|((01[0-9]{2}|0[2-9][0-9]{2}|[1-9][0-9]{3})-0?2-" + + "(0?[1-9]|1\\\\d|2[0-8]))|(((1[6-9]|[2-9]\\\\d)(0[48]|[2468][048]|[13579][26])|" + + "((04|08|12|16|[2468][048]|[3579][26])00))-0?2-29)) (20|21|22|23|[0-1]?\\\\d):[0-5]?\\\\d:[0-5]?\\\\d"; + Pattern pat = Pattern.compile(eL); + Matcher matcher = pat.matcher(sDateTime); + return matcher.matches(); + } + +} diff --git a/src/main/java/com/xkrs/microservice/util/EncryptDecryptUtil.java b/src/main/java/com/xkrs/microservice/util/EncryptDecryptUtil.java new file mode 100644 index 0000000..0b32f1d --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/EncryptDecryptUtil.java @@ -0,0 +1,96 @@ +package com.xkrs.microservice.util; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * SHA加密解密工具 + * @author tajochen + */ +public class EncryptDecryptUtil { + + /** + * SHA-256加密 + * @param strText 字符串 + * @return + */ + public static String encrypt256(final String strText){ + return encryptSha(strText,"SHA-256"); + } + + /** + * SHA-512加密 + * @param strText 字符串 + * @return + */ + public static String encrypt512(final String strText){ + return encryptSha(strText,"SHA-512"); + } + + /** + * 基础SHA加密 + * @param strText 字符串 + * @param strType 字符串类型 + * @return + */ + private static String encryptSha(final String strText, final String strType){ + // 返回值 + String strResult=null; + // 是否是有效的字符串 + if (strText != null && strText.length()>0){ + // 加密开始,创建加密对象,并传入加密类型 + try { + MessageDigest messageDigest = MessageDigest.getInstance(strType); + // 传入加密的字符串 + messageDigest.update(strText.getBytes()); + // 得到bytes类型结果 + byte[] byteBuffer = messageDigest.digest(); + StringBuilder strHexString = new StringBuilder(); + for (byte b : byteBuffer) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + strHexString.append('0'); + } + strHexString.append(hex); + } + // 得到返回的结果 + strResult = strHexString.toString(); + } + catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + } + return strResult; + } + + /** + * MD5 消息摘要 + * @param password + * @return + */ + public static String md5Encode(String password) { + MessageDigest md5 = null; + try { + md5 = MessageDigest.getInstance("MD5"); + } catch (Exception e) { + throw new RuntimeException(e); + } + char[] charArray = password.toCharArray(); + byte[] byteArray = new byte[charArray.length]; + for (int i = 0; i < charArray.length; i++){ + byteArray[i] = (byte) charArray[i]; + } + byte[] md5Bytes = md5.digest(byteArray); + StringBuilder hexValue = new StringBuilder(); + for (byte md5Byte : md5Bytes) { + int val = ((int) md5Byte) & 0xff; + if (val < 16) { + hexValue.append("0"); + } + hexValue.append(Integer.toHexString(val)); + } + return hexValue.toString(); + } + +} + diff --git a/src/main/java/com/xkrs/microservice/util/FileUtil.java b/src/main/java/com/xkrs/microservice/util/FileUtil.java new file mode 100644 index 0000000..498a4cb --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/FileUtil.java @@ -0,0 +1,80 @@ +package com.xkrs.microservice.util; + +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.util.Objects; + +/** + * 文件工具 + * @author tajochen + */ +public class FileUtil { + + /** + * multipart 转 file + * @param multipartFile 二进制流文件 + * @param tempPath 临时目录 + * @return + */ + public static File multipartToFile(MultipartFile multipartFile,String tempPath){ + File toFile = null; + if (multipartFile.isEmpty()) { + multipartFile = null; + } else { + InputStream ins = null; + try { + ins = multipartFile.getInputStream(); + } catch (IOException e) { + e.printStackTrace(); + } + File dir = new File(tempPath); + if (!dir.exists()) { + boolean res = dir.mkdirs(); + } + toFile = new File(tempPath+multipartFile.getOriginalFilename()); + inputStreamToFile(ins, toFile); + try { + assert ins != null; + ins.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return toFile; + } + + /** + * 获取流文件 + * @param ins 流 + * @param file 文件 + */ + private static void inputStreamToFile(InputStream ins, File file) { + try { + final int streamSize = 8192; + OutputStream os = new FileOutputStream(file); + int bytesRead = 0; + byte[] buffer = new byte[streamSize]; + while ((bytesRead = ins.read(buffer, 0, streamSize)) != -1) { + os.write(buffer, 0, bytesRead); + } + os.close(); + ins.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 删除文件 + * @param file 文件 + */ + private static boolean deleteFile(File file) { + boolean res = false; + if (file.exists()) { + res = file.delete(); + } + return res; + } + +} diff --git a/src/main/java/com/xkrs/microservice/util/HardDiskInfo.java b/src/main/java/com/xkrs/microservice/util/HardDiskInfo.java new file mode 100644 index 0000000..83b0366 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/HardDiskInfo.java @@ -0,0 +1,65 @@ +package com.xkrs.microservice.util; + +import com.xkrs.microservice.model.vo.HardDiskInfoVo; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 磁盘工具 + * @author tajochen + */ +public class HardDiskInfo { + + /** + * 获取硬盘信息 + * @return + */ + public static List getHardDiskInfo() { + List hardDiskInfoList = new ArrayList<>(); + File[] roots = File.listRoots(); + for (File file : roots) { + HardDiskInfoVo hardDiskInfo = new HardDiskInfoVo(); + hardDiskInfo.setHardDiskName(file.getPath()); + hardDiskInfo.setFreeSpace(file.getUsableSpace()); + hardDiskInfo.setUsedSpace(file.getTotalSpace()-file.getFreeSpace()); + hardDiskInfo.setTotalSpace(file.getTotalSpace()); + hardDiskInfoList.add(hardDiskInfo); + } + return hardDiskInfoList; + } + + /** + * 获取指定目录下的文件和文件夹 + * @return + */ + public static Map getHardDiskFileList(String rootPath) { + Map fileListMap = new HashMap<>(1024); + String fatherNodePath = ""; + String fullPath = rootPath+File.separator+fatherNodePath; + File hdd = new File(fullPath); + File[] fileList = hdd.listFiles(); + if(fileList != null){ + System.out.println(fullPath+"目录结构:"); + for (File file : fileList) { + if (file.isDirectory()) { + System.out.println(file.getName() + "(文件夹)"); + fileListMap.put(file.getName(),"(文件夹)"); + } else if (file.isFile()) { + System.out.println(file.getName() + "(文件)"); + fileListMap.put(file.getName(),"(文件)"); + } + } + } + return fileListMap; + } + + public static void main(String[] args) { + List ss = getHardDiskInfo(); + System.out.println(ss); + } + +} diff --git a/src/main/java/com/xkrs/microservice/util/IpUtil.java b/src/main/java/com/xkrs/microservice/util/IpUtil.java new file mode 100644 index 0000000..66b456b --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/IpUtil.java @@ -0,0 +1,43 @@ +package com.xkrs.microservice.util; + +import javax.servlet.http.HttpServletRequest; + +/** + * IP地址处理工具 + * @author tajochen + */ +public class IpUtil { + + public static String getIpAddr(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + final String unkonwMsg = "unknown"; + final char splitChar = ','; + if (ip != null && ip.length() != 0 && !unkonwMsg.equalsIgnoreCase(ip)) { + // 多次反向代理后会有多个ip值,第一个ip才是真实ip + if( ip.indexOf(splitChar)!=-1 ){ + ip = ip.split(",")[0]; + } + } + if (ip == null || ip.length() == 0 || unkonwMsg.equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || unkonwMsg.equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || unkonwMsg.equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || unkonwMsg.equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || unkonwMsg.equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + if (ip == null || ip.length() == 0 || unkonwMsg.equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + System.out.println("获取客户端ip: " + ip); + return ip; + } + +} diff --git a/src/main/java/com/xkrs/microservice/util/MbTilesUtils.java b/src/main/java/com/xkrs/microservice/util/MbTilesUtils.java new file mode 100644 index 0000000..4d7014d --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/MbTilesUtils.java @@ -0,0 +1,103 @@ +package com.xkrs.microservice.util; + +import ch.poole.geo.mbtiles4j.*; +import ch.poole.geo.mbtiles4j.model.MetadataBounds; +import ch.poole.geo.mbtiles4j.model.MetadataEntry; + +import java.io.File; +import java.io.InputStream; + +/** + * MBTiles 处理工具 + * @author tajochen + */ +public class MbTilesUtils { + + /** + * 加载 MBTiles 特定瓦片 + * @param filePath 文件路径 + * @param zoom 缩放级别 + * @param column 列号 + * @param row 行号 + * @return + * @throws MBTilesReadException + */ + public static Tile readMbTile(String filePath,int zoom, int column, int row) throws MBTilesReadException { + MBTilesReader r = new MBTilesReader(new File(filePath)); + Tile tile = r.getTile(zoom,column,row); + r.close(); + return tile; + } + + /** + * 加载 MBTiles 元信息 + * @param filePath 文件路径 + * @return + * @throws MBTilesReadException + */ + public static MetadataEntry readMbTileMetadata(String filePath) throws MBTilesReadException { + MBTilesReader r = new MBTilesReader(new File(filePath)); + MetadataEntry metadata = r.getMetadata(); + r.close(); + return metadata; + } + + /** + * 加载 MBTiles 全部瓦片 + * @param filePath 文件路径 + * @return + * @throws MBTilesReadException + */ + public static String readTiles(String filePath) throws MBTilesReadException { + MBTilesReader r = new MBTilesReader(new File(filePath)); + // tiles + TileIterator tiles = r.getTiles(); + while (tiles.hasNext()) { + Tile next = tiles.next(); + int zoom = next.getZoom(); + int column = next.getColumn(); + int row = next.getRow(); + InputStream tileData = next.getData(); + } + tiles.close(); + r.close(); + return ""; + } + + /** + * 设置 MBTile 元信息 + * @param filePath 文件路径 + * @throws MBTilesWriteException + */ + public static void setMetadata(String filePath,String tilesetName,String tilesetVersion,String tilesetDescription,String attribution,MetadataBounds metadataBounds) throws MBTilesWriteException { + MBTilesWriter w = new MBTilesWriter(new File(filePath)); + MetadataEntry ent = new MetadataEntry(); + // Add metadata parts + ent.setTilesetName(tilesetName) + .setTilesetType(MetadataEntry.TileSetType.BASE_LAYER) + .setTilesetVersion(tilesetVersion) + .setTilesetDescription(tilesetDescription) + .setTileMimeType(MetadataEntry.TileMimeType.PNG) + .setAttribution(attribution) + .setTilesetBounds(metadataBounds.getLeft(), metadataBounds.getBottom(), metadataBounds.getRight(), metadataBounds.getTop()); + w.addMetadataEntry(ent); + File result = w.close(); + } + + /** + * 存储 MBTile 瓦片 + * @param filePath 文件路径 + * @param someTileBytes 图片二进制 + * @param zoom 缩放级别 + * @param column 列号 + * @param row 行号 + * @throws MBTilesWriteException + */ + public static void setTile(String filePath,byte[] someTileBytes,Long zoom,Long column,Long row) throws MBTilesWriteException { + MBTilesWriter w = new MBTilesWriter(new File(filePath)); + //add someTile at Zoom (0), Column(0), Row (0) + w.addTile(someTileBytes, zoom, column, row); + File result = w.close(); + } + +} diff --git a/src/main/java/com/xkrs/microservice/util/NumberUtil.java b/src/main/java/com/xkrs/microservice/util/NumberUtil.java new file mode 100644 index 0000000..7541204 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/NumberUtil.java @@ -0,0 +1,106 @@ +package com.xkrs.microservice.util; + +import java.util.Random; + +/** + * 数字工具 + * @author tajochen + */ +public class NumberUtil { + + /** + * 获取指定位数随机数字 + * @param len 位数 + * @return + */ + public static String getRandomNumber(int len) { + Random r = new Random(); + StringBuilder rs = new StringBuilder(); + for (int i = 0; i < len; i++) { + rs.append(r.nextInt(10)); + } + return rs.toString(); + } + + private final static int MIN_CODE = 110000; + private final static int MAX_CODE = 999999; + + /** + * 检查字符串是否为数字 + * @param str 字符串 + * @return + */ + public static boolean isStrNumeric(String str) { + if(str==null||str.length()==0){ + return false; + } + for (int i = 0; i < str.length(); i++) { + System.out.println(str.charAt(i)); + if (!Character.isDigit(str.charAt(i))) { + return false; + } + } + return true; + } + + /** + * 检查字符串是否为行政区划代码,共六位 + * @param str 字符串 + * @return + */ + public static boolean isStrAdmCode(String str) { + if(isStrNumeric(str)){ + try { + int theNum = Integer.parseInt(str); + if(MIN_CODE < theNum && theNum < MAX_CODE){ + return true; + } + } catch (NumberFormatException e){ + return false; + } + } + return false; + } + + /** + * 快速求质数 + * 欧拉筛法:保证每个合数只会被它的最小质因数筛掉,时间复杂度降低到O(n)。 + * 每一个数都去乘以当前素数表里面已有的数,当 indexI 是合数, + * 且 indexI % primeList[indexJ] == 0 时,只能乘以第一个素数 2 + * @param num 最大数字 + * @return + */ + public static int[] eulerScreening(int num) { + boolean[] check = new boolean[num+1]; + int[] primeList = new int[num+1]; + int count = 0; + for (int indexI = 2; indexI <= num; indexI++) { + if (!check[indexI]) { + primeList[count++] = indexI; + } + // 每一个数都去乘以当前素数表里面已有的数,如果 indexI 是合数,且 indexI % primeList[indexJ] == 0,那么它只能乘以第一个素数 2 + // 如:2×2、3×(2、3)、4×(2)、5×(2、3、5)、6×(2)、7×(2、3、5、7)、8×(2)、9×(2、3)、10×(2) + for (int indexJ = 0; indexJ < count; indexJ++) { + // 过大的时候跳出 + if (indexI * primeList[indexJ] > num) { + break; + } + check[indexI * primeList[indexJ]] = true; + // 如果 indexI 是一个合数,而且 indexI % primeList[indexJ] == 0 + // 保证了每个合数只会被它的最小素因子筛掉 + if (indexI % primeList[indexJ] == 0) { + break; + } + } + } + return primeList; + } + + public static void main(String[] args) { + long start = System.currentTimeMillis(); + int[] primeList = eulerScreening(100000000); + long end = System.currentTimeMillis(); + System.out.println("耗时共 "+ (end - start)+" 毫秒"); + } + +} diff --git a/src/main/java/com/xkrs/microservice/util/OpenGeoGisUtil.java b/src/main/java/com/xkrs/microservice/util/OpenGeoGisUtil.java new file mode 100644 index 0000000..46eb959 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/OpenGeoGisUtil.java @@ -0,0 +1,117 @@ +package com.xkrs.microservice.util; + +import org.geolatte.geom.Geometry; +import org.geolatte.geom.Point; +import org.geolatte.geom.codec.Wkt; + +import org.geotools.data.DataStore; +import org.geotools.data.DataStoreFinder; +import org.geotools.data.FeatureSource; +import org.geotools.feature.FeatureCollection; +import org.geotools.feature.FeatureIterator; + +import org.opengis.feature.simple.SimpleFeature; +import org.opengis.feature.simple.SimpleFeatureType; +import org.opengis.filter.Filter; + +import java.io.*; +import java.util.HashMap; +import java.util.Map; + +/** + * 开源Gis工具集 + * @author tajochen + */ +public class OpenGeoGisUtil { + + /** + * wkt文本转为点数据 + * @param wkt wkt文本 + * @return + */ + public static Point wktStrToPoint(String wkt) { + return (Point) Wkt.fromWkt(wkt); + } + + /** + * wkt文本转geometry + * @param wkt wkt文本 + * @return + */ + public static Geometry wktStrToGeom(String wkt) { + return Wkt.fromWkt(wkt); + } + + /** + * 读取 shapefile 矢量文件 + * @param filePath 文件路径 + */ + public static void readShapeFile(String filePath) { + File file = new File(filePath); + Map map = new HashMap<>(1024); + DataStore dataStore = null; + FeatureSource source = null; + try { + map.put("url", file.toURI().toURL()); + dataStore = DataStoreFinder.getDataStore(map); + String typeName = dataStore.getTypeNames()[0]; + source = dataStore.getFeatureSource(typeName); + } catch (IOException e) { + e.printStackTrace(); + return; + } + // ECQL.toFilter("BBOX(THE_GEOM, 10,20,30,40)") + Filter filter = Filter.INCLUDE; + FeatureCollection collection = null; + try { + collection = source.getFeatures(filter); + } catch (IOException e) { + e.printStackTrace(); + return; + } + try (FeatureIterator features = collection.features()) { + while (features.hasNext()) { + SimpleFeature feature = features.next(); + System.out.print(feature.getID()); + System.out.print(": "); + System.out.println(feature.getDefaultGeometryProperty().getValue()); + } + } + } + +// public SimpleFeatureCollection queryFeatures(String cql_filter) throws Exception { +// SimpleFeatureSource featureSource = null; +// SimpleFeatureCollection featureCollection = null; +// Filter filter = CQL.toFilter(cql_filter); +// Query query = new Query("pois",filter); +// if (dataStore != null) { +// featureSource = dataStore.getFeatureSource(tableName); +// SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource; +// featureCollection = featureStore.getFeatures(query); +// } else { +// throw new Exception("数据库连接未成功"); +// } +// return featureCollection; +// } + + public static void main(String[] args) { +// String filePath = "E:\\shandong-shp2020\\shandong_city_2020.shp"; +// readShapeFile(filePath); + Map params = new HashMap<>(1024); + params.put("dbtype", "postgis"); + params.put("host", "localhost"); + params.put("port", 5432); + params.put("schema", "public"); + params.put("database", "DMS"); + params.put("user", "postgres"); + params.put("passwd", "xkrs301"); + + try { + DataStore dataStore = DataStoreFinder.getDataStore(params); + dataStore.getFeatureSource("shp_city"); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/com/xkrs/microservice/util/RandomStringUtil.java b/src/main/java/com/xkrs/microservice/util/RandomStringUtil.java new file mode 100644 index 0000000..eff8bc0 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/RandomStringUtil.java @@ -0,0 +1,62 @@ +package com.xkrs.microservice.util; + +import java.util.Random; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 随机字符串产生工具 + * @author tajochen + */ +public class RandomStringUtil { + + /** + * 获取随机字母数字组合 + * @param length + * 字符串长度 + * @return + */ + public static String getRandomCharAndNum(Integer length) { + String str = ""; + StringBuilder strBuffer = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < length; i++) { + boolean b = random.nextBoolean(); + // 字符串 + if (b) { + //取得65大写字母还是97小写字母 + int choice = random.nextBoolean() ? 65 : 97; + strBuffer.append((char) (choice + random.nextInt(26))); + } else { + // 数字 + strBuffer.append(random.nextInt(10)); + } + } + str = strBuffer.toString(); + return str; + } + + /** + * 验证随机字母数字组合是否纯数字与纯字母 + * @param str + * @return true 是 , false 否 + */ + public static boolean isRandomUsable(String str) { + // String regExp = + // "^[A-Za-z]+(([0-9]+[A-Za-z0-9]+)|([A-Za-z0-9]+[0-9]+))|[0-9]+(([A-Za-z]+[A-Za-z0-9]+)|([A-Za-z0-9]+[A-Za-z]+))$"; + String regExp = "^([0-9]+)|([A-Za-z]+)$"; + Pattern pat = Pattern.compile(regExp); + Matcher mat = pat.matcher(str); + return mat.matches(); + } + + /** + * 生成UUID + * @return + */ + public static String getUuid32(){ + return UUID.randomUUID().toString().replace("-", "").toLowerCase(); + } + +} diff --git a/src/main/java/com/xkrs/microservice/util/RequestUtil.java b/src/main/java/com/xkrs/microservice/util/RequestUtil.java new file mode 100644 index 0000000..b38535b --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/RequestUtil.java @@ -0,0 +1,188 @@ +package com.xkrs.microservice.util; + +import org.apache.http.Consts; +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.entity.mime.content.StringBody; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.*; + +/** + * http请求工具 + * @author tajochen + **/ +public class RequestUtil { + + private static final String FIREFOX_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0"; + private static final String CHROME_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " + + "(KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"; + + /** + * 模拟 get请求 + * @param url 链接 + * @param map 参数列表 + */ + public static String getStandard(String url, Map map) { + String body = ""; + // 1.拿到一个httpclient的对象 + CloseableHttpClient httpClient = HttpClients.createDefault(); + // 2.1 提交请求体 + ArrayList parameters = new ArrayList<>(); + URIBuilder builder = null; + // 装填参数 + if(map!=null){ + for (Map.Entry entry : map.entrySet()) { + parameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + } + CloseableHttpResponse response = null; + try { + builder = new URIBuilder(url); + builder.setParameters(parameters); + // 2.设置请求方式和请求信息 + HttpGet httpGet = new HttpGet(builder.build()); + // 2.1 提交header头信息 + httpGet.addHeader("user-agent", FIREFOX_UA); + // 3.执行请求 + response = httpClient.execute(httpGet); + // 4.获取返回值 + assert response != null; + // 按指定编码转换结果实体为String类型 + body = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + // 5.关闭连接 + response.close(); + httpClient.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return body; + } + + /** + * 模拟Post请求 application/x-www-form-urlencoded + * @param url 资源地址 + * @param map 参数列表 + * @return + */ + public static String postStandard(String url, Map map) { + String body = ""; + // 创建httpclient对象 + CloseableHttpClient client = HttpClients.createDefault(); + // 创建post方式请求对象 + HttpPost httpPost = new HttpPost(url); + // 装填参数 + List nvps = new ArrayList<>(); + if(map!=null){ + for (Map.Entry entry : map.entrySet()) { + nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + } + try { + // 设置参数到请求对象中 + httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8")); + // 设置header报文头信息 + httpPost.setHeader("Content-type", "application/x-www-form-urlencoded"); + httpPost.setHeader("User-Agent", FIREFOX_UA); + httpPost.setHeader("Accept", "application"); + httpPost.setHeader("Accept-Encoding", "gzip, deflate"); + // 执行请求操作,并拿到结果(同步阻塞) + CloseableHttpResponse response = client.execute(httpPost); + // 获取结果实体 + HttpEntity entity = response.getEntity(); + if (entity != null) { + // 按指定编码转换结果实体为String类型 + body = EntityUtils.toString(entity, "UTF-8"); + } + EntityUtils.consume(entity); + // 释放链接 + response.close(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + client.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return body; + } + + /** + * 模拟Post请求 multipart/form-data + * @param postFile 请求文件 + * @param postUrl 请求链接 + * @param postParam 请求参数 + * @return + */ + public static String postFile(File postFile, String postUrl, Map postParam) { + Logger log = LoggerFactory.getLogger(RequestUtil.class); + String body = ""; + Map resultMap = new HashMap<>(16); + CloseableHttpClient httpClient = HttpClients.createDefault(); + try{ + // 把一个普通参数和文件上传给下面这个地址 + HttpPost httpPost = new HttpPost(postUrl); + + // 设置传输参数 + MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create(); + // 解决乱码问题 + multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); + multipartEntity.setCharset(StandardCharsets.UTF_8); + + // 设置文件参数 ,获取文件名postFile.getName() + // 把文件转换成流对象FileBody + multipartEntity.addBinaryBody("file",postFile,ContentType.create("multipart/form-data", + Consts.UTF_8),postFile.getName()); + // 设计文件以外的参数 + Set keySet = postParam.keySet(); + for (String key : keySet) { + // 相当于 + multipartEntity.addPart(key, new StringBody(postParam.get(key), ContentType.create( + "multipart/form-data", Consts.UTF_8))); + } + HttpEntity reqEntity = multipartEntity.build(); + httpPost.setEntity(reqEntity); + // 设置header报文头信息 + httpPost.setHeader("User-Agent", FIREFOX_UA); + httpPost.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + httpPost.setHeader("Accept-Encoding","gzip, deflate"); + + // 发起请求,返回请求的响应 + try (CloseableHttpResponse response = httpClient.execute(httpPost)) { + resultMap.put("statusCode", response.getStatusLine().getStatusCode()); + // 获取响应对象 + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + // 按指定编码转换结果实体为String类型 + body = EntityUtils.toString(resEntity, StandardCharsets.UTF_8); + } + // 销毁 + EntityUtils.consume(resEntity); + } catch (Exception e) { + e.printStackTrace(); + } + httpClient.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + return body; + } +} diff --git a/src/main/java/com/xkrs/microservice/util/SnowFlakeUtil.java b/src/main/java/com/xkrs/microservice/util/SnowFlakeUtil.java new file mode 100644 index 0000000..db09638 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/SnowFlakeUtil.java @@ -0,0 +1,124 @@ +package com.xkrs.microservice.util; + +/** + * 基于Twitter开源的分布式ID生成算法 snowflake + * @author tajochen + **/ +public class SnowFlakeUtil { + + /** + * 起始时间戳 + * 2018-01-01 00:00:00 + */ + private final static long START_STMP = 1514736000L; + /** + * 序列在id中占用的位数 + */ + private final static long SEQUENCE_BIT = 12L; + /** + * 机器标识占用的位数 + */ + private final static long MACHINE_BIT = 5L; + /** + * 数据中心占用的位数 + */ + private final static long DATACENTER_BIT = 5L; + /** + * 每一部分的最大值 + */ + private final static long MAX_DATACENTER_NUM = ~(-1L << DATACENTER_BIT); + private final static long MAX_MACHINE_NUM = ~(-1L << MACHINE_BIT); + private final static long MAX_SEQUENCE = ~(-1L << SEQUENCE_BIT); + + /** + * 每一部分向左的位移 + */ + private final static long MACHINE_LEFT = SEQUENCE_BIT; + private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT; + private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT; + + /** + * 数据中心 + */ + private final long datacenterId; + /** + * 机器标识 + */ + private final long machineId; + /** + * 序列号 + */ + private long sequence = 0L; + /** + * 上一次时间戳 + */ + private long lastStmp = -1L; + + public SnowFlakeUtil(long datacenterId, long machineId) { + if (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) { + throw new IllegalArgumentException("data center id can't be greater than MAX_DATACENTER_NUM or less than 0"); + } + if (machineId > MAX_MACHINE_NUM || machineId < 0) { + throw new IllegalArgumentException("machine id can't be greater than MAX_MACHINE_NUM or less than 0"); + } + this.datacenterId = datacenterId; + this.machineId = machineId; + } + + /** + * 产生下一个ID + * @return + */ + public synchronized long nextId() { + long currStmp = getNewstmp(); + if (currStmp < lastStmp) { + throw new RuntimeException("Clock moved backwards. Refusing to generate id"); + } + + if (currStmp == lastStmp) { + //相同毫秒内,序列号自增 + sequence = (sequence + 1) & MAX_SEQUENCE; + //同一毫秒的序列数已经达到最大 + if (sequence == 0L) { + currStmp = getNextMill(); + } + } else { + //不同毫秒内,序列号置为0 + sequence = 0L; + } + + lastStmp = currStmp; + //时间戳部分 + return (currStmp - START_STMP) << TIMESTMP_LEFT + //数据中心部分 + | datacenterId << DATACENTER_LEFT + //机器标识部分 + | machineId << MACHINE_LEFT + //序列号部分 + | sequence; + } + + private long getNextMill() { + long mill = getNewstmp(); + while (mill <= lastStmp) { + mill = getNewstmp(); + } + return mill; + } + + private long getNewstmp() { + return System.currentTimeMillis(); + } + + public static void main(String[] args) { + SnowFlakeUtil snowFlake = new SnowFlakeUtil(5, 5); + //测试次数 + int testTimes = 10000; + long start = System.currentTimeMillis(); + for (int i = 0; i < testTimes; i++) { + System.out.println(snowFlake.nextId()); + } + + System.out.println(System.currentTimeMillis() - start); + } +} diff --git a/src/main/java/com/xkrs/microservice/util/StringUtil.java b/src/main/java/com/xkrs/microservice/util/StringUtil.java new file mode 100644 index 0000000..3e3db63 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/StringUtil.java @@ -0,0 +1,14 @@ +package com.xkrs.microservice.util; + +import java.util.Arrays; + +/** + * 字符串增强工具 + * @author tajochen + **/ +public class StringUtil { + + public static boolean stringContainsItemFromList(String inputStr, String[] items) { + return Arrays.stream(items).parallel().anyMatch(inputStr::contains); + } +} diff --git a/src/main/java/com/xkrs/microservice/util/UdpUtil.java b/src/main/java/com/xkrs/microservice/util/UdpUtil.java new file mode 100644 index 0000000..8cfbe54 --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/UdpUtil.java @@ -0,0 +1,13 @@ +package com.xkrs.microservice.util; + +import java.io.IOException; + + +/** + * udp 工具 netty 实现 + * @author tajochen + **/ +public class UdpUtil { + + +} diff --git a/src/main/java/com/xkrs/microservice/util/VersionNumberUtil.java b/src/main/java/com/xkrs/microservice/util/VersionNumberUtil.java new file mode 100644 index 0000000..c41b50a --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/VersionNumberUtil.java @@ -0,0 +1,34 @@ +package com.xkrs.microservice.util; + +/** + * VersionNumberUtil 版本号工具 + * @author tajochen + */ +public class VersionNumberUtil { + + /** + * 比较三位版本号若 版本1>版本2 返回 1,若版本1<版本2 返回 -1,否则返回0 + * @param version1 版本1 + * @param version2 版本2 + * @return 1,-1,0 + */ + public static int compareVersion(String version1, String version2) { + String[] v1 = version1.split("\\."); + String[] v2 = version2.split("\\."); + int n = Math.max(v1.length, v2.length); + for (int i = 0; i < n; i++) { + int v1Int = i < v1.length ? Integer.parseInt(v1[i]) : 0; + int v2Int = i < v2.length ? Integer.parseInt(v2[i]) : 0; + if (v1Int == v2Int) { + continue; + } + if (v1Int > v2Int){ + return 1; + } else { + return -1; + } + } + return 0; + } + +} diff --git a/src/main/java/com/xkrs/microservice/util/ZipUtil.java b/src/main/java/com/xkrs/microservice/util/ZipUtil.java new file mode 100644 index 0000000..b79228d --- /dev/null +++ b/src/main/java/com/xkrs/microservice/util/ZipUtil.java @@ -0,0 +1,172 @@ +package com.xkrs.microservice.util; + +import java.io.*; +import java.util.Enumeration; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipOutputStream; + +/** + * zip 压缩工具 + * @author tajochen + */ +public class ZipUtil { + + static final int BUFFER_SIZE = 2*1024; + + /** + * 压缩成ZIP + * @param srcDir 压缩文件夹路径 + * @param out 压缩文件输出流 + * @param keepDirStructure 是否保留原来的目录结构,true:保留目录结构; + * false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败) + * @throws RuntimeException 压缩失败会抛出运行时异常 + */ + public static void toZip(String srcDir, OutputStream out, boolean keepDirStructure) + throws RuntimeException{ + long start = System.currentTimeMillis(); + ZipOutputStream zos = null ; + try { + zos = new ZipOutputStream(out); + File sourceFile = new File(srcDir); + compress(sourceFile,zos,sourceFile.getName(),keepDirStructure); + long end = System.currentTimeMillis(); + System.out.println("压缩完成,耗时:" + (end - start) +" ms"); + } catch (Exception e) { + throw new RuntimeException("zip error from ZipUtils",e); + } finally { + if(zos != null){ + try { + zos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + /** + * 递归压缩方法 + * @param sourceFile 源文件 + * @param zos zip输出流 + * @param name 压缩后的名称 + * @param keepDirStructure 是否保留原来的目录结构,true:保留目录结构; + * false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败) + * @throws Exception + */ + private static void compress(File sourceFile, ZipOutputStream zos, String name, + boolean keepDirStructure) throws Exception{ + byte[] buf = new byte[BUFFER_SIZE]; + if(sourceFile.isFile()){ + // 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字 + zos.putNextEntry(new ZipEntry(name)); + // copy文件到zip输出流中 + int len; + FileInputStream in = new FileInputStream(sourceFile); + while ((len = in.read(buf)) != -1){ + zos.write(buf, 0, len); + } + // Complete the entry + zos.closeEntry(); + in.close(); + } else { + File[] listFiles = sourceFile.listFiles(); + if(listFiles == null || listFiles.length == 0){ + // 需要保留原来的文件结构时,需要对空文件夹进行处理 + if(keepDirStructure){ + // 空文件夹的处理 + zos.putNextEntry(new ZipEntry(name + "/")); + // 没有文件,不需要文件的copy + zos.closeEntry(); + } + } else { + for (File file : listFiles) { + // 判断是否需要保留原来的文件结构 + if (keepDirStructure) { + // 注意:file.getName()前面需要带上父文件夹的名字加一斜杠, + // 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了 + compress(file, zos, name + "/" + file.getName(),keepDirStructure); + } else { + compress(file, zos, file.getName(),keepDirStructure); + } + } + } + } + } + + /** + * zip解压 + * @param srcFile zip源文件 + * @param destDirPath 解压后的目标文件夹 + * @throws RuntimeException 解压失败会抛出运行时异常 + */ + public static void unZip(File srcFile, String destDirPath) throws RuntimeException { + long start = System.currentTimeMillis(); + // 判断源文件是否存在 + if (!srcFile.exists()) { + throw new RuntimeException(srcFile.getPath() + "所指文件不存在"); + } + // 开始解压 + ZipFile zipFile = null; + try { + zipFile = new ZipFile(srcFile); + Enumeration entries = zipFile.entries(); + while (entries.hasMoreElements()) { + ZipEntry entry = (ZipEntry) entries.nextElement(); + System.out.println("解压" + entry.getName()); + // 如果是文件夹,就创建个文件夹 + if (entry.isDirectory()) { + String dirPath = destDirPath + "/" + entry.getName(); + File dir = new File(dirPath); + dir.mkdirs(); + } else { + // 如果是文件,就先创建一个文件,然后用io流把内容copy过去 + File targetFile = new File(destDirPath + "/" + entry.getName()); + // 保证这个文件的父文件夹必须要存在 + if(!targetFile.getParentFile().exists()){ + targetFile.getParentFile().mkdirs(); + } + targetFile.createNewFile(); + // 将压缩文件内容写入到这个文件中 + InputStream is = zipFile.getInputStream(entry); + FileOutputStream fos = new FileOutputStream(targetFile); + int len; + byte[] buf = new byte[BUFFER_SIZE]; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + } + // 关流顺序,先打开的后关闭 + fos.close(); + is.close(); + } + } + long end = System.currentTimeMillis(); + System.out.println("解压完成,耗时:" + (end - start) +" ms"); + } catch (Exception e) { + throw new RuntimeException("unzip error from ZipUtils", e); + } finally { + if(zipFile != null){ + try { + zipFile.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + public static void main(String[] args) { + String path = "D:\\demo_shape"; + // 测试压缩方法 + FileOutputStream fos1 = null; + try { + fos1 = new FileOutputStream(new File("d:/mytest01.zip")); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + toZip(path,fos1,true); + // 测试解压方法 + File file1 = new File("d:/mytest01.zip"); + unZip(file1,"d:/a"); + } +} diff --git a/src/main/resources/META-INF/MANIFEST.MF b/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000..2377d93 --- /dev/null +++ b/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,92 @@ +Manifest-Version: 1.0 +Main-Class: +Class-Path: antlr-2.7.7.jar org.w3.xlink-28.0.jar okhttp-3.14.9.jar ejml + -ddense-0.41.jar slf4j-api-1.7.36.jar httpclient-4.5.13.jar hibernate-s + patial-5.6.15.Final.jar gt-metadata-28.0.jar tea-util-0.2.16.jar reacto + r-netty-http-1.0.25.jar spring-boot-starter-webflux-2.6.14.jar spring-b + oot-2.6.14.jar netty-all-4.1.86.Final.jar jakarta.websocket-api-1.1.2.j + ar netty-codec-http-4.1.85.Final.jar netty-resolver-dns-native-macos-4. + 1.85.Final-osx-x86_64.jar postgresql-42.3.8.jar dom4j-2.0.3.jar net.ope + ngis.ows-28.0.jar httpmime-4.5.14.jar log4j-jul-2.17.2.jar GeographicLi + b-Java-1.49.jar prefixmap-2.0.jar snakeyaml-1.29.jar spring-boot-starte + r-undertow-2.6.14.jar spring-jdbc-5.3.24.jar micrometer-registry-promet + heus-1.10.2.jar netty-resolver-dns-4.1.85.Final.jar uom-lib-common-2.0. + jar netty-codec-xml-4.1.85.Final.jar spring-orm-5.3.24.jar spring-secur + ity-core-5.6.9.jar spring-boot-starter-data-redis-2.6.14.jar spring-dat + a-commons-2.6.10.jar checker-qual-3.5.0.jar openapiutil-0.2.0.jar sprin + g-expression-5.3.24.jar spring-aspects-5.3.24.jar ejml-core-0.41.jar co + mmons-io-2.4.jar spring-boot-starter-json-2.6.14.jar jackson-datatype-j + sr310-2.13.4.jar spring-boot-starter-reactor-netty-2.6.14.jar netty-tra + nsport-rxtx-4.1.85.Final.jar si-quantity-2.0.1.jar error_prone_annotati + ons-2.10.0.jar gt-main-28.0.jar HdrHistogram-2.1.12.jar reactor-core-3. + 4.25.jar undertow-core-2.2.20.Final.jar spring-security-config-5.6.9.ja + r jakarta.persistence-api-2.2.3.jar commons-codec-1.15.jar netty-resolv + er-dns-classes-macos-4.1.85.Final.jar jgridshift-core-1.3.jar spring-bo + ot-actuator-autoconfigure-2.6.14.jar spring-boot-starter-websocket-2.6. + 14.jar endpoint-util-0.0.7.jar org.jacoco.agent-0.8.4-runtime.jar netty + -transport-4.1.85.Final.jar netty-transport-native-kqueue-4.1.85.Final- + osx-aarch_64.jar caffeine-2.9.3.jar unit-api-2.0.jar netty-codec-memcac + he-4.1.85.Final.jar commons-text-1.10.0.jar tea-openapi-0.2.8.jar aspec + tjweaver-1.9.7.jar commons-dbcp-1.4.jar netty-codec-4.1.85.Final.jar js + oup-1.15.3.jar lettuce-core-6.1.10.RELEASE.jar jakarta.transaction-api- + 1.3.3.jar jackson-annotations-2.13.4.jar dysmsapi20170525-2.0.23.jar ne + tty-transport-native-kqueue-4.1.85.Final-osx-x86_64.jar jts-core-1.18.2 + .jar jandex-2.4.2.Final.jar LatencyUtils-2.0.3.jar netty-codec-haproxy- + 4.1.85.Final.jar netty-transport-native-epoll-4.1.85.Final-linux-aarch_ + 64.jar spring-boot-starter-jdbc-2.6.14.jar jakarta.annotation-api-1.3.5 + .jar spring-boot-starter-security-2.6.14.jar spring-boot-autoconfigure- + 2.6.14.jar HikariCP-4.0.3.jar httpclient5-5.1.4.jar spring-webmvc-5.3.2 + 4.jar jakarta.validation-api-2.0.2.jar ini4j-0.5.4.jar jaxb-impl-2.3.0. + jar org.eclipse.emf.ecore.xmi-2.15.0.jar netty-codec-smtp-4.1.85.Final. + jar hibernate-core-5.6.14.Final.jar alibabacloud-gateway-spi-0.0.1.jar + hutool-all-5.8.10.jar netty-resolver-dns-native-macos-4.1.85.Final-osx- + aarch_64.jar mysql-connector-j-8.0.31.jar hibernate-types-55-2.15.2.jar + log4j-api-2.17.2.jar wildfly-common-1.5.4.Final.jar jakarta.activation + -api-1.2.2.jar netty-transport-udt-4.1.85.Final.jar netty-handler-4.1.8 + 5.Final.jar javax.inject-1.jar micrometer-core-1.8.12.jar gt-shapefile- + 28.0.jar spring-context-5.3.24.jar gt-jdbc-postgis-28.0.jar hibernate-c + ommons-annotations-5.1.2.Final.jar spring-oxm-5.3.24.jar wildfly-client + -config-1.0.1.Final.jar netty-codec-stomp-4.1.85.Final.jar spring-boot- + starter-data-jpa-2.6.14.jar undertow-servlet-2.2.20.Final.jar tea-1.2.0 + .jar jackson-databind-2.13.4.2.jar httpcore5-5.1.5.jar spring-security- + crypto-5.6.9.jar spring-web-5.3.24.jar jakarta.servlet-api-4.0.4.jar co + mmons-pool2-2.11.1.jar simpleclient_common-0.12.0.jar jboss-threads-3.1 + .0.Final.jar spring-data-jpa-2.6.10.jar httpcore-4.4.15.jar gt-referenc + ing-28.0.jar systems-common-2.0.2.jar xnio-nio-3.8.7.Final.jar org.ecli + pse.emf.ecore-2.15.0.jar spring-boot-starter-2.6.14.jar undertow-websoc + kets-jsr-2.2.20.Final.jar netty-handler-ssl-ocsp-4.1.86.Final.jar jsr30 + 5-3.0.2.jar netty-common-4.1.85.Final.jar sqlite-jdbc-3.36.0.3.jar spri + ng-websocket-5.3.24.jar jaxb-core-2.3.0.jar javax.activation-api-1.2.0. + jar bcprov-jdk15on-1.65.jar spring-boot-starter-actuator-2.6.14.jar hib + ernate-validator-7.0.5.Final.jar jakarta.activation-1.2.2.jar spring-tx + -5.3.24.jar txw2-2.3.7.jar gt-http-28.0.jar simpleclient-0.12.0.jar log + 4j-web-2.19.0.jar gt-jdbc-28.0.jar org.eclipse.emf.common-2.15.0.jar is + tack-commons-runtime-3.0.12.jar jul-to-slf4j-1.7.36.jar spring-boot-act + uator-2.6.14.jar yauaa-7.9.0.jar spring-data-redis-2.6.10.jar netty-buf + fer-4.1.85.Final.jar classmate-1.5.1.jar netty-handler-proxy-4.1.85.Fin + al.jar tomcat-embed-el-9.0.69.jar tea-xml-0.1.5.jar simpleclient_tracer + _otel_agent-0.12.0.jar spring-aop-5.3.24.jar bcpkix-jdk15on-1.65.jar sp + ring-beans-5.3.24.jar simpleclient_tracer_otel-0.12.0.jar jai_core-1.1. + 3.jar indriya-2.0.2.jar netty-codec-http2-4.1.85.Final.jar jackson-data + type-jdk8-2.13.4.jar mbtiles4j-1.2.0.jar netty-transport-classes-epoll- + 4.1.85.Final.jar xnio-api-3.8.7.Final.jar log4j-slf4j-impl-2.17.2.jar l + og4j-core-2.17.2.jar netty-codec-redis-4.1.85.Final.jar disruptor-3.4.4 + .jar spring-jcl-5.3.24.jar commons-pool-1.6.jar spring-core-5.3.24.jar + spring-boot-starter-aop-2.6.14.jar httpcore5-h2-5.1.5.jar netty-resolve + r-4.1.85.Final.jar commons-lang3-3.12.0.jar gson-2.8.9.jar netty-codec- + dns-4.1.85.Final.jar jaxb-runtime-2.3.7.jar reactive-streams-1.0.4.jar + spring-security-web-5.6.9.jar spring-webflux-5.3.24.jar jackson-core-2. + 13.4.jar jackson-module-jaxb-annotations-2.13.4.jar netty-transport-nat + ive-unix-common-4.1.85.Final.jar simpleclient_tracer_common-0.12.0.jar + byte-buddy-1.11.22.jar java-jwt-4.2.2.jar si-units-2.0.1.jar spring-boo + t-starter-log4j2-2.6.14.jar spring-boot-devtools-2.6.14.jar spring-data + -keyvalue-2.6.10.jar reactor-netty-core-1.0.25.jar jakarta.xml.bind-api + -2.3.3.jar spring-messaging-5.3.24.jar commons-collections4-4.4.jar net + ty-codec-mqtt-4.1.85.Final.jar credentials-java-0.2.4.jar re2j-1.6.jar + spring-boot-starter-web-2.6.14.jar jackson-module-parameter-names-2.13. + 4.jar jaxb-api-2.3.1.jar netty-transport-native-epoll-4.1.85.Final-linu + x-x86_64.jar okio-1.17.2.jar geolatte-geom-1.8.2.jar netty-codec-socks- + 4.1.85.Final.jar jboss-logging-3.4.3.Final.jar netty-transport-sctp-4.1 + .85.Final.jar spring-context-support-5.3.24.jar gt-opengis-28.0.jar net + ty-transport-classes-kqueue-4.1.85.Final.jar + diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties new file mode 100644 index 0000000..fbe7fbc --- /dev/null +++ b/src/main/resources/application-dev.properties @@ -0,0 +1,56 @@ +## 数据源配置 +spring.datasource.url = jdbc:postgresql://localhost:5432/GSM_GUI +spring.datasource.userName = postgres +spring.datasource.password = xkrs301 +spring.datasource.driverClassName = org.postgresql.Driver + +## 关闭spring data 的redis仓库 +spring.data.redis.repositories.enabled = false + +## Spring Data JPA 配置 +spring.jpa.database = POSTGRESQL +spring.jpa.database-platform = org.hibernate.dialect.PostgreSQLDialect +spring.jpa.show-sql = true +# 指定 ddl mode (none, validate, create, create-drop, update) +spring.jpa.hibernate.ddl-auto = update +# 命名策略 隐式规则 implicit-strategy 物理规则 physical-strategy +spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl +spring.jpa.properties.hibernate.dialect = org.hibernate.spatial.dialect.postgis.PostgisDialect +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false + +## Redis配置 +spring.cache.type = redis +spring.redis.database = 12 +spring.redis.host = localhost +spring.redis.port = 6379 +spring.redis.password = sdust2020 +spring.redis.timeout = 8000 +spring.redis.lettuce.pool.max-active = 100 +spring.redis.lettuce.pool.max-wait = 10000 +spring.redis.lettuce.pool.max-idle = 100 +spring.redis.lettuce.pool.min-idle = 1 +spring.redis.lettuce.shutdown-timeout = 0 + +# 自定义Geoserver服务器地址 +my.GeoserverAdress = http://192.168.2.9:9080/geoserver/ +# 临时文件目录 +my.TempFilePath = D:/temp/ +#my.TempFilePath = /home/sc/web/rs-shandong/temp/ +# 文件服务器路径 +my.FileServerPath = D:/gsm_gui/files/ +#my.FileServerPath = /home/docker/fastdfs/files/ +# 自定义文件服务器地址 +my.FileServerAdress = http://192.168.2.9:4096/ +#my.FileServerAdress = http://192.168.2.105:4096/ +#my.FileServerAdress = http://118.24.27.47:4096/ +my.FileServerAdminAdress = http://127.0.0.1:4096/ +# GSMGUI.exe的文件路径 +my.gsmExePath = D:/gsm/2.cmd_GSM/Release/GSM_GUI.exe +# GSMGUI.exe的运行文件的输出结果路径 +my.gsmOutPath = D:/gsm/out/ +# 结果文件夹中点云的文件路径 +my.lasOutPath = /prj/DSM_Ortho/Point_clouds/ + +# 结果文件中需要QTM运行的文件路径 +my.dsmOutPath = /prj/DSM_Ortho/DSM/ +my.topPutPath = /prj/DSM_Ortho/TOP/ diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties new file mode 100644 index 0000000..f053c18 --- /dev/null +++ b/src/main/resources/application-test.properties @@ -0,0 +1,49 @@ +## 数据源配置 +spring.datasource.url = jdbc:postgresql://localhost:5432/GSM_GUI +spring.datasource.userName = postgres +spring.datasource.password = xkrs301 +spring.datasource.driverClassName = org.postgresql.Driver + +## 关闭spring data 的redis仓库 +spring.data.redis.repositories.enabled = false + +## Spring Data JPA 配置 +spring.jpa.database = POSTGRESQL +spring.jpa.database-platform = org.hibernate.dialect.PostgreSQLDialect +spring.jpa.show-sql = true +# 指定 ddl mode (none, validate, create, create-drop, update) +spring.jpa.hibernate.ddl-auto = update +# 命名策略 隐式规则 implicit-strategy 物理规则 physical-strategy +spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl +spring.jpa.properties.hibernate.dialect = org.hibernate.spatial.dialect.postgis.PostgisDialect +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false + +## Redis配置 +spring.cache.type = redis +spring.redis.database = 12 +spring.redis.host = localhost +spring.redis.port = 6379 +spring.redis.password = sdust2020 +spring.redis.timeout = 8000 +spring.redis.lettuce.pool.max-active = 100 +spring.redis.lettuce.pool.max-wait = 10000 +spring.redis.lettuce.pool.max-idle = 100 +spring.redis.lettuce.pool.min-idle = 1 +spring.redis.lettuce.shutdown-timeout = 0 + +# 自定义Geoserver服务器地址 +my.GeoserverAdress = http://192.168.2.9:9080/geoserver/ + +# 临时文件目录 +my.TempFilePath = D:/temp/ +#my.TempFilePath = /home/sc/web/rs-shandong/temp/ + +# 文件服务器路径 +my.FileServerPath = D:/gsm-gui/files/ +#my.FileServerPath = /home/docker/fastdfs/files/ + +# 自定义文件服务器地址 +my.FileServerAdress = http://192.168.2.9:4096/ +#my.FileServerAdress = http://192.168.2.105:4096/ +#my.FileServerAdress = http://118.24.27.47:4096/ +my.FileServerAdminAdress = http://127.0.0.1:4096/ diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..eb328e2 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,64 @@ +## Web服务配置 +server.servlet.context-path = / +server.port = 9600 + +spring.profiles.active=dev + +# 应用名称 +spring.application.name = RemoteSensing Shandong + +server.tomcat.uri-encoding = UTF-8 + +# 线程池设置 +spring.task.execution.pool.core-size=10 +spring.task.execution.pool.max-size=50 +spring.task.execution.pool.queue-capacity=100 +spring.task.execution.pool.keep-alive=60s + + +## 关闭spring data 的redis仓库 +spring.data.redis.repositories.enabled = false + +## jackson 配置 +spring.jackson.serialization.write-date-keys-as-timestamps = false + +## Hikari连接池设置 +spring.datasource.hikari.auto-commit = true +spring.datasource.hikari.minimum-idle = 5 +spring.datasource.hikari.maximum-pool-size = 12 +spring.datasource.hikari.idle-timeout = 600000 +spring.datasource.hikari.max-lifetime = 1800000 +spring.datasource.hikari.validation-timeout = 5000 +spring.datasource.hikari.connection-test-query = SELECT 1 + +## Devtools配置 +spring.devtools.livereload.enabled = true + +## 多国语言配置 +spring.messages.basename = i18n/messages +spring.messages.encoding = UTF-8 + +# 上传文件配置 +spring.servlet.multipart.enabled = true +# 最大文件大小 +spring.servlet.multipart.max-file-size = 1024MB +# 最大请求大小 +spring.servlet.multipart.max-request-size = 1025MB + +# 日志设置 +logging.charset.console = UTF-8 +logging.charset.file = UTF-8 + +# 管理断点设置 +management.endpoints.web.exposure.include = info,health,metrics,prometheus,loggers +management.endpoints.web.cors.allowed-origins = * +management.endpoints.web.cors.allowed-methods = OPTIONS, GET, POST +management.endpoints.web.cors.allowed-headers = * +management.metrics.tags.application= ${spring.application.name} +management.metrics.tags.region = bj + +# 自定义用户最大登录错误尝试次数 +my.MaxLoginErrorCount = 5 + +# 自定义用户登录错误间隔时间(分钟) +my.LoginErrorIntervalTime = 60 \ No newline at end of file diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt new file mode 100644 index 0000000..10b5be9 --- /dev/null +++ b/src/main/resources/banner.txt @@ -0,0 +1,6 @@ + ____ ____ _ ______ _ +|_ \ / _| (_) .' ____ \ (_) + | \/ | __ .---. _ .--. .--. | (___ \_| .---. _ .--. _ __ __ .---. .---. + | |\ /| | [ | / /'`\][ `/'`\]/ .'`\ \ _.____`. / /__\\[ `/'`\][ \ [ ][ | / /'`\]/ /__\\ + _| |_\/_| |_ | | | \__. | | | \__. || \____) || \__., | | \ \/ / | | | \__. | \__., +|_____||_____|[___]'.___.'[___] '.__.' \______.' '.__.'[___] \__/ [___]'.___.' '.__.' diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..29d9e7d --- /dev/null +++ b/src/main/resources/i18n/messages.properties @@ -0,0 +1,137 @@ +sys.message.success = 成功 +sys.message.user.not_logged_in = 帐号未登录 +sys.message.user.login_error = 帐号登陆失败 +sys.message.user.account_forbidden = 帐号已被停用 +sys.message.user.account_not_activated = 帐号未激活 +sys.message.user.overtime = 帐号登录超时 +sys.message.user.no_permission = 帐号权限不足 +sys.message.user.already_logged = 帐号已经登录 +sys.message.user.already_exist = 用户名已存在 +sys.message.user.not_exist = 用户不存在 +sys.message.param.null = 参数为空 +sys.message.param.illegal = 参数非法 +sys.message.data.none = 数据为空 +sys.message.data.wrong = 数据错误 +sys.message.data.repeat = 数据已存在 +sys.message.process.fail = 处理失败 +sys.message.process.overtime = 处理超时 +sys.message.system.inner_error = 系统内部错误 +sys.message.system.abnormal = 系统异常 +sys.message.system.busy = 系统正忙,请稍后 +sys.message.system.maintain = 系统维护中 +sys.message.database.error = 数据库错误 +sys.message.file.exists = 文件已存在 +sys.message.file.write.error = 文件写入失败 +sys.message.file.read.error = 文件读取失败 + +SysUser.id.blank = 用户id不能为空 +SysUser.userName.blank = 用户名不能为空 +SysUser.userName.length.illegal = 用户名长度不合法 +SysUser.userName.format.illegal = 用户名格式不合法 +SysUser.nickName.length.illegal = 用户昵称长度不合法 +SysUser.userCode.length.illegal = 用户编码长度不合法 +SysUser.userCode.format.illegal = 用户编码含有非法字符 +SysUser.password.blank = 用户密码不能为空 +SysUser.password.length.illegal = 用户密码长度不合法 +SysUser.password.format.illegal = 用户密码格式不合法 +SysUser.sex.num.null = 用户性别数字不能为空 +SysUser.sex.num.illegal = 用户性别数字不合法 +SysUser.telephone.format.illegal = 用户手机号码不合法 +SysUser.email.length.illegal = 用户邮箱长度不合法 +SysUser.email.format.illegal = 用户邮箱格式不合法 +SysUser.admCode.illegal = 用户行政区划代码不合法 +SysUser.address.length.illegal = 用户详细地址长度不合法 +SysUser.birthday.format.illegal = 用户出生日期必须是 yyyy-MM-dd +SysUser.personalSignature.length.illegal = 用户个性签名长度非法 +SysUser.portraitId.illegal = 用户头像id非法 +SysUser.statusCode.null = 用户当前状态编码为空 +SysUser.statusCode.illegal = 用户当前状态编码非法 +SysUser.deleteFlag.null = 用户删除标记不能是空 +SysUser.realName.length.illegal = 用户真实姓名长度过长 +SysUser.memo.length.illegal = 用户备注信息长度过长 +SysUser.idCard.length.illegal = 用户身份证长度非法 + +SysMenu.id.null = id 不能为空 +SysMenu.menuName.null = menuName 不能为空 +SysMenu.menuName.length.illegal = menuName 长度过长 +SysMenu.parentCode.length.illegal = parentCode 长度过长 +SysMenu.icon.length.illegal = icon 长度过长 +SysMenu.componentUrl.length.illegal = componentUrl 长度过长 + +DataFile.id.null = id 不能为空 +DataFile.dataFileCode.null = dataFileCode 不能为空 +DataFile.dataFileCode.length.illegal = dataFileCode 长度过长 +DataFile.menuCode.null = menuCode 不能为空 +DataFile.menuCode.length.illegal =menuCode 长度过长 +DataFile.fileName.null = fileName 不能为空 +DataFile.fileName.length.illegal = fileName 长度过长 +DataFile.filePath.null = filePath 不能为空 +DataFile.filePath.length.illegal = filePath 长度过长 +DataFile.fileMd5.length.illegal = fileMd5 长度过长 +DataFile.remarks.length.illegal = remarks 长度过长 +DataFile.dataType.null = dataType 不能为空 +DataFile.dataType.length.illegal = dataType 长度过长 + +MapService.id.null = id 不能为空 +MapService.dataFileCode.null = dataFileCode 不能为空 +MapService.dataFileCode.length.illegal = dataFileCode 长度过长 +MapService.menuCode.null = menuCode 不能为空 +MapService.menuCode.length.illegal = menuCode 长度过长 +MapService.layerName.null = layerName 不能为空 +MapService.layerName.length.illegal = layerName 长度过长 +MapService.serviceType.null = serviceType 不能为空 +MapService.serviceType.length.illegal = serviceType 长度过长 +MapService.productType.length.illegal = productType 长度过长 +MapService.spatialReference.null = spatialReference 不能为空 +MapService.spatialReference.length.illegal = spatialReference 长度过长 +MapService.styleName.length.illegal = styleName 长度过长 +MapService.dataStorage.length.illegal = dataStorage 长度过长 +MapService.workSpace.null = workSpace 不能为空 +MapService.workSpace.length.illegal = workSpace 长度过长 +MapService.admCode.null = admCode 不能为空 +MapService.admName.null = admName 不能为空 +MapService.admName.length.illegal = admName 长度过长 +MapService.remarks.length.illegal = remarks 长度过长 +MapService.dataType.null = dataType 不能为空 +MapService.dataType.length.illegal = dataType 长度过长 +MapService.layerShowName.null = layerShowName 不能为空 +MapService.layerShowName.length.illegal = layerShowName 长度过长 +MapService.layerGroupCode.null = layerGroupCode 不能为空 +MapService.layerGroupCode.length.illegal = layerGroupCode 长度过长 + +ZipFile.fileName.null = filName 不能为空 +ZipFile.fileName.length.illegal = fileName 长度过长 +ZipFile.menuCode.null = menuCode 不能为空 +ZipFile.menuCode.length.illegal = menuCode 长度过长 +ZipFile.dataType.null = dataType 不能为空 +ZipFile.dataType.length.illegal = dataType 长度过长 + +StatisticalData.id.null = id 不能为空 +StatisticalData.menuCode.null = menuCode 不能为空 +StatisticalData.menuCode.length.illegal = menuCode 长度过长 +StatisticalData.classifyName.null = classifyName 不能为空 +StatisticalData.classifyName.length.illegal = classifyName 长度过长 +StatisticalData.classifyCode.null = classifyCode 不能为空 +StatisticalData.classifyCode.length.illegal = classifyCode 长度过长 +StatisticalData.admName.null = admName 不能为空 +StatisticalData.admName.length.illegal = admName 长度过长 +StatisticalData.admCode.null = admCode 不能为空 +StatisticalData.admCode.length.illegal = admCode 长度过长 +StatisticalData.layerName.null = layerName 不能为空 +StatisticalData.layerName.length.illegal = layerName 长度过长 +StatisticalData.remark.length.illegal = remark 长度过长 + +StatisticalDataIndependent.id.null = id 不能为空 +StatisticalDataIndependent.menuCode.null = menuCode 不能为空 +StatisticalDataIndependent.menuCode.length.illegal = menuCode 长度过长 +StatisticalDataIndependent.classifyName.null = classifyName 不能为空 +StatisticalDataIndependent.classifyName.length.illegal = classifyName 长度过长 +StatisticalDataIndependent.classifyCode.null = classifyCode 不能为空 +StatisticalDataIndependent.classifyCode.length.illegal = classifyCode 长度过长 +StatisticalDataIndependent.statisticsValueArr.null = statisticsValueArr 不能为空 +StatisticalDataIndependent.statisticsValueArr.length.illegal = statisticsValueArr 长度过长 +StatisticalDataIndependent.admName.null = admName 不能为空 +StatisticalDataIndependent.admName.length.illegal = admName 长度过长 +StatisticalDataIndependent.admCode.null = admCode 不能为空 +StatisticalDataIndependent.admCode.length.illegal = admCode 长度过长 +StatisticalDataIndependent.remark.length.illegal = remark 长度过长 diff --git a/src/main/resources/i18n/messages_en_US.properties b/src/main/resources/i18n/messages_en_US.properties new file mode 100644 index 0000000..7c8ce67 --- /dev/null +++ b/src/main/resources/i18n/messages_en_US.properties @@ -0,0 +1,137 @@ +sys.message.success = success +sys.message.user.not_logged_in = user not logged in +sys.message.user.login_error = user login failed +sys.message.user.account_forbidden = this account is forbidden +sys.message.user.account_not_activated = this account not activated +sys.message.user.overtime = user login timeout +sys.message.user.no_permission = user permission denied +sys.message.user.already_logged = user already logged +sys.message.user.already_exist = user already exist +sys.message.user.not_exist = user not exist +sys.message.param.null = parameter is null +sys.message.param.illegal = parameter is illegal +sys.message.data.none = data is none +sys.message.data.wrong = data is wrong +sys.message.data.repeat = data is repeat +sys.message.process.fail = process fail +sys.message.process.overtime = process overtime +sys.message.system.inner_error = system inner error +sys.message.system.abnormal = system abnormal +sys.message.system.busy = system is busy +sys.message.system.maintain = system maintenance +sys.message.database.error = database error +sys.message.file.exists = file exists +sys.message.file.write.error = file write error +sys.message.file.read.error = file read error + +SysUser.id.blank = user id can't be blank +SysUser.userName.blank = user name can't be blank +SysUser.userName.length.illegal = user name length illegal +SysUser.userName.format.illegal = user name format illegal +SysUser.nickName.length.illegal = user nickname length illegal +SysUser.userCode.length.illegal = user code length illegal +SysUser.userCode.format.illegal = user code cantains illegal character +SysUser.password.blank = user password can't be blank +SysUser.password.length.illegal = user password length illegal +SysUser.password.format.illegal = user password format illegal +SysUser.sex.num.null = user sex num can't be blank +SysUser.sex.num.illegal = user sex num illegal +SysUser.telephone.format.illegal = user telephone format illegal +SysUser.email.length.illegal = user email length illegal +SysUser.email.format.illegal = user email format illegal +SysUser.admCode.illegal = user administrative area code illegal +SysUser.address.length.illegal = user address length illegal +SysUser.birthday.format.illegal = user birthday must be yyyy-MM-dd +SysUser.personalSignature.length.illegal = user personal signature length illegal +SysUser.portraitId.illegal = user portrait id illegal +SysUser.statusCode.null = user current status code can't be blank +SysUser.statusCode.illegal = user current status code illegal +SysUser.deleteFlag.null = user delete flag can't be null +SysUser.realName.length.illegal = user realName length illegal +SysUser.memo.length.illegal = user memo length illegal +SysUser.idCard.length.illegal = user id card length illegal + +SysMenu.id.null = id can't be blank +SysMenu.menuName.null = menuName can't be blank +SysMenu.menuName.length.illegal = menuName length illegal +SysMenu.parentCode.length.illegal = parentCode length illegal +SysMenu.icon.length.illegal = icon length illegal +SysMenu.componentUrl.length.illegal = componentUrl length illegal + +DataFile.id.null = id can't be blank +DataFile.dataFileCode.null = dataFileCode can't be blank +DataFile.dataFileCode.length.illegal = dataFileCode length illegal +DataFile.menuCode.null = menuCode can't be blank +DataFile.menuCode.length.illegal =menuCode length illegal +DataFile.fileName.null = fileName can't be blank +DataFile.fileName.length.illegal = fileName length illegal +DataFile.filePath.null = filePath can't be blank +DataFile.filePath.length.illegal = filePath length illegal +DataFile.fileMd5.length.illegal = fileMd5 length illegal +DataFile.remarks.length.illegal = remarks length illegal +DataFile.dataType.null = dataType can't be blanks +DataFile.dataType.length.illegal = dataType length illegal + +MapService.id.null = id can't be blank +MapService.dataFileCode.null = dataFileCode can't be blank +MapService.dataFileCode.length.illegal = dataFileCode length illegal +MapService.menuCode.null = menuCode can't be blank +MapService.menuCode.length.illegal = menuCode length illegal +MapService.layerName.null = layerName can't be blank +MapService.layerName.length.illegal = layerName length illegal +MapService.serviceType.null = serviceType can't be blank +MapService.serviceType.length.illegal = serviceType length illegal +MapService.productType.length.illegal = productType length illegal +MapService.spatialReference.null = spatialReference can't be blank +MapService.spatialReference.length.illegal = spatialReference length illegal +MapService.styleName.length.illegal = styleName length illegal +MapService.dataStorage.length.illegal = dataStorage length illegal +MapService.workSpace.null = workSpace can't be blank +MapService.workSpace.length.illegal = workSpace length illegal +MapService.admCode.null = admCode can't be blank +MapService.admName.null = admName can't be blank +MapService.admName.length.illegal = admName length illegal +MapService.remarks.length.illegal = remarks length illegal +MapService.dataType.null = dataType can't be blank +MapService.dataType.length.illegal = dataType length illegal +MapService.layerShowName.null = layerShowName can't be blank +MapService.layerShowName.length.illegal = layerShowName length illegal +MapService.layerGroupCode.null = layerGroupCode can't be blank +MapService.layerGroupCode.length.illegal = layerGroupCode length illegal + +ZipFile.fileName.null = filName can't be blank +ZipFile.fileName.length.illegal = fileName length illegal +ZipFile.menuCode.null = menuCode can't be blank +ZipFile.menuCode.length.illegal = menuCode length illegal +ZipFile.dataType.null = dataType can't be blank +ZipFile.dataType.length.illegal = dataType length illegal + +StatisticalData.id.null = id can't be blank +StatisticalData.menuCode.null = menuCode can't be blank +StatisticalData.menuCode.length.illegal = menuCode length illegal +StatisticalData.classifyName.null = classifyName can't be blank +StatisticalData.classifyName.length.illegal = classifyName length illegal +StatisticalData.classifyCode.null = classifyCode can't be blank +StatisticalData.classifyCode.length.illegal = classifyCode length illegal +StatisticalData.admName.null = admName can't be blank +StatisticalData.admName.length.illegal = admName length illegal +StatisticalData.admCode.null = admCode can't be blank +StatisticalData.admCode.length.illegal = admCode length illegal +StatisticalData.layerName.null = layerName can't be blank +StatisticalData.layerName.length.illegal = layerName length illegal +StatisticalData.remark.length.illegal = remark length illegal + +StatisticalDataIndependent.id.null = id can't be blank +StatisticalDataIndependent.menuCode.null = menuCode can't be blank +StatisticalDataIndependent.menuCode.length.illegal = menuCode length illegal +StatisticalDataIndependent.classifyName.null = classifyName can't be blank +StatisticalDataIndependent.classifyName.length.illegal = classifyName length illegal +StatisticalDataIndependent.classifyCode.null = classifyCode can't be blank +StatisticalDataIndependent.classifyCode.length.illegal = classifyCode length illegal +StatisticalDataIndependent.statisticsValueArr.null = statisticsValueArr can't be blank +StatisticalDataIndependent.statisticsValueArr.length.illegal = statisticsValueArr length illegal +StatisticalDataIndependent.admName.null = admName can't be blank +StatisticalDataIndependent.admName.length.illegal = admName length illegal +StatisticalDataIndependent.admCode.null = admCode can't be blank +StatisticalDataIndependent.admCode.length.illegal = admCode length illegal +StatisticalDataIndependent.remark.length.illegal = remark length illegal diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 0000000..7311314 --- /dev/null +++ b/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,137 @@ +sys.message.success = 成功 +sys.message.user.not_logged_in = 用户未登录 +sys.message.user.login_error = 用户登陆失败 +sys.message.user.account_forbidden = 用户已被禁止 +sys.message.user.account_not_activated = 用户未激活 +sys.message.user.overtime = 用户登录超时 +sys.message.user.no_permission = 用户权限不足 +sys.message.user.already_logged = 用户已经登录 +sys.message.user.already_exist = 用户名已存在 +sys.message.user.not_exist = 用户不存在 +sys.message.param.null = 参数为空 +sys.message.param.illegal = 参数非法 +sys.message.data.none = 数据为空 +sys.message.data.wrong = 数据错误 +sys.message.data.repeat = 数据已存在 +sys.message.process.fail = 处理失败 +sys.message.process.overtime = 处理超时 +sys.message.system.inner_error = 系统内部错误 +sys.message.system.abnormal = 系统异常 +sys.message.system.busy = 系统正忙,请稍后 +sys.message.system.maintain = 系统维护中 +sys.message.database.error = 数据库错误 +sys.message.file.exists = 文件已存在 +sys.message.file.write.error = 文件写入失败 +sys.message.file.read.error = 文件读取失败 + +SysUser.id.blank = 用户id不能为空 +SysUser.userName.blank = 用户名不能为空 +SysUser.userName.length.illegal = 用户名长度不合法 +SysUser.userName.format.illegal = 用户名格式不合法 +SysUser.nickName.length.illegal = 用户昵称长度不合法 +SysUser.userCode.length.illegal = 用户编码长度不合法 +SysUser.userCode.format.illegal = 用户编码含有非法字符 +SysUser.password.blank = 用户密码不能为空 +SysUser.password.length.illegal = 用户密码长度不合法 +SysUser.password.format.illegal = 用户密码格式不合法 +SysUser.sex.num.null = 用户性别数字不能为空 +SysUser.sex.num.illegal = 用户性别数字不合法 +SysUser.telephone.format.illegal = 用户手机号码不合法 +SysUser.email.length.illegal = 用户邮箱长度不合法 +SysUser.email.format.illegal = 用户邮箱格式不合法 +SysUser.admCode.illegal = 用户行政区划代码不合法 +SysUser.address.length.illegal = 用户详细地址长度不合法 +SysUser.birthday.format.illegal = 用户出生日期必须是 yyyy-MM-dd +SysUser.personalSignature.length.illegal = 用户个性签名长度非法 +SysUser.portraitId.illegal = 用户头像id非法 +SysUser.statusCode.null = 用户当前状态编码为空 +SysUser.statusCode.illegal = 用户当前状态编码非法 +SysUser.deleteFlag.null = 用户删除标记不能是空 +SysUser.realName.length.illegal = 用户真实姓名长度过长 +SysUser.memo.length.illegal = 用户备注信息长度过长 +SysUser.idCard.length.illegal = 用户身份证长度非法 + +SysMenu.id.null = id 不能为空 +SysMenu.menuName.null = menuName 不能为空 +SysMenu.menuName.length.illegal = menuName 长度过长 +SysMenu.parentCode.length.illegal = parentCode 长度过长 +SysMenu.icon.length.illegal = icon 长度过长 +SysMenu.componentUrl.length.illegal = componentUrl 长度过长 + +DataFile.id.null = id 不能为空 +DataFile.dataFileCode.null = dataFileCode 不能为空 +DataFile.dataFileCode.length.illegal = dataFileCode 长度过长 +DataFile.menuCode.null = menuCode 不能为空 +DataFile.menuCode.length.illegal =menuCode 长度过长 +DataFile.fileName.null = fileName 不能为空 +DataFile.fileName.length.illegal = fileName 长度过长 +DataFile.filePath.null = filePath 不能为空 +DataFile.filePath.length.illegal = filePath 长度过长 +DataFile.fileMd5.length.illegal = fileMd5 长度过长 +DataFile.remarks.length.illegal = remarks 长度过长 +DataFile.dataType.null = dataType 不能为空 +DataFile.dataType.length.illegal = dataType 长度过长 + +MapService.id.null = id 不能为空 +MapService.dataFileCode.null = dataFileCode 不能为空 +MapService.dataFileCode.length.illegal = dataFileCode 长度过长 +MapService.menuCode.null = menuCode 不能为空 +MapService.menuCode.length.illegal = menuCode 长度过长 +MapService.layerName.null = layerName 不能为空 +MapService.layerName.length.illegal = layerName 长度过长 +MapService.serviceType.null = serviceType 不能为空 +MapService.serviceType.length.illegal = serviceType 长度过长 +MapService.productType.length.illegal = productType 长度过长 +MapService.spatialReference.null = spatialReference 不能为空 +MapService.spatialReference.length.illegal = spatialReference 长度过长 +MapService.styleName.length.illegal = styleName 长度过长 +MapService.dataStorage.length.illegal = dataStorage 长度过长 +MapService.workSpace.null = workSpace 不能为空 +MapService.workSpace.length.illegal = workSpace 长度过长 +MapService.admCode.null = admCode 不能为空 +MapService.admName.null = admName 不能为空 +MapService.admName.length.illegal = admName 长度过长 +MapService.remarks.length.illegal = remarks 长度过长 +MapService.dataType.null = dataType 不能为空 +MapService.dataType.length.illegal = dataType 长度过长 +MapService.layerShowName.null = layerShowName 不能为空 +MapService.layerShowName.length.illegal = layerShowName 长度过长 +MapService.layerGroupCode.null = layerGroupCode 不能为空 +MapService.layerGroupCode.length.illegal = layerGroupCode 长度过长 + +ZipFile.fileName.null = filName 不能为空 +ZipFile.fileName.length.illegal = fileName 长度过长 +ZipFile.menuCode.null = menuCode 不能为空 +ZipFile.menuCode.length.illegal = menuCode 长度过长 +ZipFile.dataType.null = dataType 不能为空 +ZipFile.dataType.length.illegal = dataType 长度过长 + +StatisticalData.id.null = id 不能为空 +StatisticalData.menuCode.null = menuCode 不能为空 +StatisticalData.menuCode.length.illegal = menuCode 长度过长 +StatisticalData.classifyName.null = classifyName 不能为空 +StatisticalData.classifyName.length.illegal = classifyName 长度过长 +StatisticalData.classifyCode.null = classifyCode 不能为空 +StatisticalData.classifyCode.length.illegal = classifyCode 长度过长 +StatisticalData.admName.null = admName 不能为空 +StatisticalData.admName.length.illegal = admName 长度过长 +StatisticalData.admCode.null = admCode 不能为空 +StatisticalData.admCode.length.illegal = admCode 长度过长 +StatisticalData.layerName.null = layerName 不能为空 +StatisticalData.layerName.length.illegal = layerName 长度过长 +StatisticalData.remark.length.illegal = remark 长度过长 + +StatisticalDataIndependent.id.null = id 不能为空 +StatisticalDataIndependent.menuCode.null = menuCode 不能为空 +StatisticalDataIndependent.menuCode.length.illegal = menuCode 长度过长 +StatisticalDataIndependent.classifyName.null = classifyName 不能为空 +StatisticalDataIndependent.classifyName.length.illegal = classifyName 长度过长 +StatisticalDataIndependent.classifyCode.null = classifyCode 不能为空 +StatisticalDataIndependent.classifyCode.length.illegal = classifyCode 长度过长 +StatisticalDataIndependent.statisticsValueArr.null = statisticsValueArr 不能为空 +StatisticalDataIndependent.statisticsValueArr.length.illegal = statisticsValueArr 长度过长 +StatisticalDataIndependent.admName.null = admName 不能为空 +StatisticalDataIndependent.admName.length.illegal = admName 长度过长 +StatisticalDataIndependent.admCode.null = admCode 不能为空 +StatisticalDataIndependent.admCode.length.illegal = admCode 长度过长 +StatisticalDataIndependent.remark.length.illegal = remark 长度过长 diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..5f661f4 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,97 @@ + + + + + + /home/sc/web/logs/rs-shandong + %d{yyyy-MM-dd HH:mm:ss.SSS} [%level] %c{1} : - %msg%n + + + + + + + + + + ${logPattern} + + + + + + + + + + + + + + + + + + + + + ${logPattern} + + + + + + + + + + + + + + + + + + + + + + + + ${logPattern} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/java/HelloWorld.java b/src/test/java/HelloWorld.java new file mode 100644 index 0000000..0e8bc34 --- /dev/null +++ b/src/test/java/HelloWorld.java @@ -0,0 +1,4 @@ +public class HelloWorld { + + private static void test(){} +} diff --git a/src/test/java/ProcessBuilderDemo.java b/src/test/java/ProcessBuilderDemo.java new file mode 100644 index 0000000..3e26d40 --- /dev/null +++ b/src/test/java/ProcessBuilderDemo.java @@ -0,0 +1,31 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +public class ProcessBuilderDemo { + + public static void main(String[] args){ + try { + // 创建ProcessBuilder实例并添加参数 + List command = new ArrayList<>(); + command.add("npm"); + command.add("-v"); + ProcessBuilder processBuilder = new ProcessBuilder(command); + Process process = processBuilder.start(); + // 读取执行结果 + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + System.out.println(line); + } + + // 等待执行结束 + process.waitFor(); + System.out.println("执行完成"); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/src/test/java/RunTimeDemo.java b/src/test/java/RunTimeDemo.java new file mode 100644 index 0000000..6493209 --- /dev/null +++ b/src/test/java/RunTimeDemo.java @@ -0,0 +1,29 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class RunTimeDemo { + + public static void main(String[] args) { + try { + // 这里的"example.exe"是你想要执行的exe文件的路径 + String[] params = {"C:/Program Files/Java/jdk-17.0.4.1/bin/javac.exe","-d","D:/syg/test/class","D:/syg/test/HelloWorld.java"}; // 这里的参数是可选的 + + // 执行命令 + Process process = Runtime.getRuntime().exec(params); + + // 读取执行结果 + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + System.out.println(line); + } + + // 等待执行结束 + int exitCode = process.waitFor(); + System.out.println("Exited with error code : " + exitCode); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } +}