From e1f967e21f11b0abddf4a25e76685471f9dff4bf Mon Sep 17 00:00:00 2001 From: one Date: Tue, 10 Oct 2023 19:50:51 +0800 Subject: [PATCH] first commit --- .idea/.gitignore | 8 + .idea/compiler.xml | 30 +++ .idea/encodings.xml | 12 ++ .idea/inspectionProfiles/Project_Default.xml | 36 ++++ .idea/jarRepositories.xml | 20 ++ .idea/misc.xml | 14 ++ .idea/uiDesigner.xml | 124 ++++++++++++ bwie-auth/pom.xml | 26 +++ .../java/com/bwie/auth/AuthApplication.java | 20 ++ .../auth/config/ConfirmCallbackConfig.java | 48 +++++ .../auth/config/ReturnCallbackConfig.java | 41 ++++ .../bwie/auth/controller/AuthController.java | 56 ++++++ .../java/com/bwie/auth/feign/FeignSystem.java | 22 +++ .../com/bwie/auth/service/AuthService.java | 32 ++++ .../auth/service/impl/AuthServiceImpl.java | 94 ++++++++++ bwie-auth/src/main/resources/bootstrap.yml | 30 +++ bwie-auth/target/bwie-auth-1.0-SNAPSHOT.jar | Bin 0 -> 9560 bytes bwie-auth/target/classes/bootstrap.yml | 30 +++ .../com/bwie/auth/AuthApplication.class | Bin 0 -> 790 bytes .../auth/config/ConfirmCallbackConfig.class | Bin 0 -> 2283 bytes .../auth/config/ReturnCallbackConfig.class | Bin 0 -> 1929 bytes .../bwie/auth/controller/AuthController.class | Bin 0 -> 1563 bytes .../com/bwie/auth/feign/FeignSystem.class | Bin 0 -> 714 bytes .../com/bwie/auth/service/AuthService.class | Bin 0 -> 551 bytes .../auth/service/impl/AuthServiceImpl.class | Bin 0 -> 4193 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 7 + .../compile/default-compile/inputFiles.lst | 7 + .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 bwie-common/pom.xml | 111 +++++++++++ .../com/bwie/common/config/RedisConfig.java | 40 ++++ .../com/bwie/common/constants/Constants.java | 18 ++ .../bwie/common/constants/JwtConstants.java | 29 +++ .../bwie/common/constants/TokenConstants.java | 24 +++ .../com/bwie/common/domain/BorrowMoney.java | 65 +++++++ .../com/bwie/common/domain/InterestRate.java | 28 +++ .../java/com/bwie/common/domain/Order.java | 15 ++ .../java/com/bwie/common/domain/User.java | 36 ++++ .../common/domain/request/BorrowMoneyReq.java | 32 ++++ .../bwie/common/domain/request/UserReq.java | 22 +++ .../bwie/common/domain/response/UserRes.java | 21 +++ .../com/bwie/common/result/PageResult.java | 34 ++++ .../java/com/bwie/common/result/Result.java | 76 ++++++++ .../java/com/bwie/common/utils/FastUtil.java | 55 ++++++ .../java/com/bwie/common/utils/JwtUtils.java | 109 +++++++++++ .../java/com/bwie/common/utils/OssUtil.java | 153 +++++++++++++++ .../com/bwie/common/utils/StringUtils.java | 68 +++++++ .../com/bwie/common/utils/TelSmsUtils.java | 87 +++++++++ .../main/resources/META-INF/spring.factories | 3 + .../target/bwie-common-1.0-SNAPSHOT.jar | Bin 0 -> 27400 bytes .../target/classes/META-INF/spring.factories | 3 + .../com/bwie/common/config/RedisConfig.class | Bin 0 -> 3159 bytes .../com/bwie/common/constants/Constants.class | Bin 0 -> 651 bytes .../bwie/common/constants/JwtConstants.class | Bin 0 -> 544 bytes .../common/constants/TokenConstants.class | Bin 0 -> 526 bytes .../com/bwie/common/domain/BorrowMoney.class | Bin 0 -> 6161 bytes .../com/bwie/common/domain/InterestRate.class | Bin 0 -> 2480 bytes .../com/bwie/common/domain/Order.class | Bin 0 -> 835 bytes .../classes/com/bwie/common/domain/User.class | Bin 0 -> 2782 bytes .../domain/request/BorrowMoneyReq.class | Bin 0 -> 3950 bytes .../bwie/common/domain/request/UserReq.class | Bin 0 -> 1861 bytes .../bwie/common/domain/response/UserRes.class | Bin 0 -> 1533 bytes .../com/bwie/common/result/PageResult.class | Bin 0 -> 3304 bytes .../com/bwie/common/result/Result.class | Bin 0 -> 4886 bytes .../com/bwie/common/utils/FastUtil.class | Bin 0 -> 2597 bytes .../com/bwie/common/utils/JwtUtils.class | Bin 0 -> 2874 bytes .../com/bwie/common/utils/OssUtil.class | Bin 0 -> 5195 bytes .../com/bwie/common/utils/StringUtils.class | Bin 0 -> 1808 bytes .../com/bwie/common/utils/TelSmsUtils.class | Bin 0 -> 3751 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 18 ++ .../compile/default-compile/inputFiles.lst | 18 ++ .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 bwie-gateway/pom.xml | 37 ++++ .../com/bwie/gateway/GatewayApplication.java | 18 ++ .../gateway/config/IgnoreWhiteConfig.java | 32 ++++ .../bwie/gateway/filters/GatewayFilter.java | 72 +++++++ .../com/bwie/gateway/utils/GatewayUtils.java | 98 ++++++++++ bwie-gateway/src/main/resources/bootstrap.yml | 29 +++ .../target/bwie-gateway-1.0-SNAPSHOT.jar | Bin 0 -> 9115 bytes bwie-gateway/target/classes/bootstrap.yml | 29 +++ .../com/bwie/gateway/GatewayApplication.class | Bin 0 -> 742 bytes .../gateway/config/IgnoreWhiteConfig.class | Bin 0 -> 2590 bytes .../bwie/gateway/filters/GatewayFilter.class | Bin 0 -> 3388 bytes .../com/bwie/gateway/utils/GatewayUtils.class | Bin 0 -> 6222 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 4 + .../compile/default-compile/inputFiles.lst | 4 + .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 bwie-module/bwie-es/pom.xml | 36 ++++ .../main/java/com/bwie/es/ESApplication.java | 22 +++ .../java/com/bwie/es/config/InitData.java | 26 +++ .../es/config/InitEsRestHighLevelClient.java | 41 ++++ .../com/bwie/es/controller/ESController.java | 28 +++ .../java/com/bwie/es/feign/FeignServer.java | 30 +++ .../java/com/bwie/es/service/ESService.java | 21 +++ .../bwie/es/service/impl/ESServiceImpl.java | 59 ++++++ .../main/java/com/bwie/es/task/ESTask.java | 27 +++ .../bwie-es/src/main/resources/bootstrap.yml | 22 +++ .../bwie-es/target/bwie-es-1.0-SNAPSHOT.jar | Bin 0 -> 9700 bytes .../bwie-es/target/classes/bootstrap.yml | 22 +++ .../classes/com/bwie/es/ESApplication.class | Bin 0 -> 847 bytes .../classes/com/bwie/es/config/InitData.class | Bin 0 -> 689 bytes .../es/config/InitEsRestHighLevelClient.class | Bin 0 -> 3533 bytes .../com/bwie/es/controller/ESController.class | Bin 0 -> 733 bytes .../com/bwie/es/feign/FeignServer.class | Bin 0 -> 498 bytes .../com/bwie/es/service/ESService.class | Bin 0 -> 144 bytes .../bwie/es/service/impl/ESServiceImpl.class | Bin 0 -> 4069 bytes .../classes/com/bwie/es/task/ESTask.class | Bin 0 -> 867 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 8 + .../compile/default-compile/inputFiles.lst | 8 + .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 bwie-module/bwie-server/pom.xml | 112 +++++++++++ .../com/bwie/server/ServerApplication.java | 22 +++ .../server/config/ConfirmCallbackConfig.java | 48 +++++ .../java/com/bwie/server/config/InitData.java | 53 ++++++ .../bwie/server/config/RabbitAdminConfig.java | 50 +++++ .../bwie/server/config/RabbitmqConfig.java | 15 ++ .../com/bwie/server/config/RedisMeta.java | 16 ++ .../bwie/server/config/RedissonConfig.java | 33 ++++ .../server/config/ReturnCallbackConfig.java | 41 ++++ .../bwie/server/consumer/RabbitConsumer.java | 74 ++++++++ .../controller/BorrowMoneyController.java | 66 +++++++ .../controller/InterestRateController.java | 36 ++++ .../bwie/server/exception/AllException.java | 28 +++ .../java/com/bwie/server/feign/FeignES.java | 24 +++ .../bwie/server/mapper/BorrowMoneyMapper.java | 44 +++++ .../server/mapper/InterestRateMapper.java | 14 ++ .../server/service/BorrowMoneyService.java | 50 +++++ .../server/service/InterestRateService.java | 22 +++ .../service/impl/BorrowMoneyServiceImpl.java | 176 ++++++++++++++++++ .../service/impl/InterestRateServiceImpl.java | 50 +++++ .../java/com/bwie/server/utils/DLXQueue.java | 77 ++++++++ .../com/bwie/server/utils/DelayedQueue.java | 77 ++++++++ .../java/com/bwie/server/utils/TtlQueue.java | 63 +++++++ .../src/main/resources/bootstrap.yml | 62 ++++++ .../resources/mapper/BorrowMoneyMapper.xml | 48 +++++ .../target/bwie-server-1.0-SNAPSHOT.jar | Bin 0 -> 28634 bytes .../bwie-server/target/classes/bootstrap.yml | 62 ++++++ .../com/bwie/server/ServerApplication.class | Bin 0 -> 890 bytes .../server/config/ConfirmCallbackConfig.class | Bin 0 -> 2287 bytes .../com/bwie/server/config/InitData.class | Bin 0 -> 2659 bytes .../server/config/RabbitAdminConfig.class | Bin 0 -> 1911 bytes .../bwie/server/config/RabbitmqConfig.class | Bin 0 -> 705 bytes .../com/bwie/server/config/RedisMeta.class | Bin 0 -> 394 bytes .../bwie/server/config/RedissonConfig.class | Bin 0 -> 1292 bytes .../server/config/ReturnCallbackConfig.class | Bin 0 -> 1933 bytes .../bwie/server/consumer/RabbitConsumer.class | Bin 0 -> 3670 bytes .../controller/BorrowMoneyController.class | Bin 0 -> 2436 bytes .../controller/InterestRateController.class | Bin 0 -> 974 bytes .../bwie/server/exception/AllException.class | Bin 0 -> 1713 bytes .../com/bwie/server/feign/FeignES.class | Bin 0 -> 344 bytes .../server/mapper/BorrowMoneyMapper.class | Bin 0 -> 1016 bytes .../server/mapper/InterestRateMapper.class | Bin 0 -> 324 bytes .../server/service/BorrowMoneyService.class | Bin 0 -> 971 bytes .../server/service/InterestRateService.class | Bin 0 -> 321 bytes .../service/impl/BorrowMoneyServiceImpl.class | Bin 0 -> 6588 bytes .../impl/InterestRateServiceImpl.class | Bin 0 -> 3062 bytes .../com/bwie/server/utils/DLXQueue.class | Bin 0 -> 3405 bytes .../com/bwie/server/utils/DelayedQueue.class | Bin 0 -> 4648 bytes .../com/bwie/server/utils/TtlQueue.class | Bin 0 -> 2956 bytes .../classes/mapper/BorrowMoneyMapper.xml | 48 +++++ .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 22 +++ .../compile/default-compile/inputFiles.lst | 22 +++ .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 bwie-module/bwie-system/pom.xml | 104 +++++++++++ .../com/bwie/system/SystemApplication.java | 18 ++ .../java/com/bwie/system/config/FastUtil.java | 55 ++++++ .../system/controller/UserController.java | 43 +++++ .../com/bwie/system/mapper/UserMapper.java | 17 ++ .../com/bwie/system/service/UserService.java | 21 +++ .../system/service/impl/UserServiceImpl.java | 49 +++++ .../src/main/resources/bootstrap.yml | 62 ++++++ .../target/bwie-system-1.0-SNAPSHOT.jar | Bin 0 -> 8718 bytes .../bwie-system/target/classes/bootstrap.yml | 62 ++++++ .../com/bwie/system/SystemApplication.class | Bin 0 -> 737 bytes .../com/bwie/system/config/FastUtil.class | Bin 0 -> 2599 bytes .../system/controller/UserController.class | Bin 0 -> 1177 bytes .../com/bwie/system/mapper/UserMapper.class | Bin 0 -> 381 bytes .../com/bwie/system/service/UserService.class | Bin 0 -> 403 bytes .../system/service/impl/UserServiceImpl.class | Bin 0 -> 2343 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 6 + .../compile/default-compile/inputFiles.lst | 6 + .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 bwie-module/pom.xml | 19 ++ pom.xml | 61 ++++++ sjz-last-exam.iml | 2 + 196 files changed, 4393 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 bwie-auth/pom.xml create mode 100644 bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/config/ConfirmCallbackConfig.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/config/ReturnCallbackConfig.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/feign/FeignSystem.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java create mode 100644 bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java create mode 100644 bwie-auth/src/main/resources/bootstrap.yml create mode 100644 bwie-auth/target/bwie-auth-1.0-SNAPSHOT.jar create mode 100644 bwie-auth/target/classes/bootstrap.yml create mode 100644 bwie-auth/target/classes/com/bwie/auth/AuthApplication.class create mode 100644 bwie-auth/target/classes/com/bwie/auth/config/ConfirmCallbackConfig.class create mode 100644 bwie-auth/target/classes/com/bwie/auth/config/ReturnCallbackConfig.class create mode 100644 bwie-auth/target/classes/com/bwie/auth/controller/AuthController.class create mode 100644 bwie-auth/target/classes/com/bwie/auth/feign/FeignSystem.class create mode 100644 bwie-auth/target/classes/com/bwie/auth/service/AuthService.class create mode 100644 bwie-auth/target/classes/com/bwie/auth/service/impl/AuthServiceImpl.class create mode 100644 bwie-auth/target/maven-archiver/pom.properties create mode 100644 bwie-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 bwie-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 bwie-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 bwie-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 bwie-common/pom.xml create mode 100644 bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/Constants.java create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/BorrowMoney.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/InterestRate.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/Order.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/User.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/BorrowMoneyReq.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/UserReq.java create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/UserRes.java create mode 100644 bwie-common/src/main/java/com/bwie/common/result/PageResult.java create mode 100644 bwie-common/src/main/java/com/bwie/common/result/Result.java create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java create mode 100644 bwie-common/src/main/resources/META-INF/spring.factories create mode 100644 bwie-common/target/bwie-common-1.0-SNAPSHOT.jar create mode 100644 bwie-common/target/classes/META-INF/spring.factories create mode 100644 bwie-common/target/classes/com/bwie/common/config/RedisConfig.class create mode 100644 bwie-common/target/classes/com/bwie/common/constants/Constants.class create mode 100644 bwie-common/target/classes/com/bwie/common/constants/JwtConstants.class create mode 100644 bwie-common/target/classes/com/bwie/common/constants/TokenConstants.class create mode 100644 bwie-common/target/classes/com/bwie/common/domain/BorrowMoney.class create mode 100644 bwie-common/target/classes/com/bwie/common/domain/InterestRate.class create mode 100644 bwie-common/target/classes/com/bwie/common/domain/Order.class create mode 100644 bwie-common/target/classes/com/bwie/common/domain/User.class create mode 100644 bwie-common/target/classes/com/bwie/common/domain/request/BorrowMoneyReq.class create mode 100644 bwie-common/target/classes/com/bwie/common/domain/request/UserReq.class create mode 100644 bwie-common/target/classes/com/bwie/common/domain/response/UserRes.class create mode 100644 bwie-common/target/classes/com/bwie/common/result/PageResult.class create mode 100644 bwie-common/target/classes/com/bwie/common/result/Result.class create mode 100644 bwie-common/target/classes/com/bwie/common/utils/FastUtil.class create mode 100644 bwie-common/target/classes/com/bwie/common/utils/JwtUtils.class create mode 100644 bwie-common/target/classes/com/bwie/common/utils/OssUtil.class create mode 100644 bwie-common/target/classes/com/bwie/common/utils/StringUtils.class create mode 100644 bwie-common/target/classes/com/bwie/common/utils/TelSmsUtils.class create mode 100644 bwie-common/target/maven-archiver/pom.properties create mode 100644 bwie-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 bwie-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 bwie-common/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 bwie-common/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 bwie-gateway/pom.xml create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/GatewayApplication.java create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/filters/GatewayFilter.java create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java create mode 100644 bwie-gateway/src/main/resources/bootstrap.yml create mode 100644 bwie-gateway/target/bwie-gateway-1.0-SNAPSHOT.jar create mode 100644 bwie-gateway/target/classes/bootstrap.yml create mode 100644 bwie-gateway/target/classes/com/bwie/gateway/GatewayApplication.class create mode 100644 bwie-gateway/target/classes/com/bwie/gateway/config/IgnoreWhiteConfig.class create mode 100644 bwie-gateway/target/classes/com/bwie/gateway/filters/GatewayFilter.class create mode 100644 bwie-gateway/target/classes/com/bwie/gateway/utils/GatewayUtils.class create mode 100644 bwie-gateway/target/maven-archiver/pom.properties create mode 100644 bwie-gateway/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 bwie-gateway/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 bwie-gateway/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 bwie-gateway/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 bwie-module/bwie-es/pom.xml create mode 100644 bwie-module/bwie-es/src/main/java/com/bwie/es/ESApplication.java create mode 100644 bwie-module/bwie-es/src/main/java/com/bwie/es/config/InitData.java create mode 100644 bwie-module/bwie-es/src/main/java/com/bwie/es/config/InitEsRestHighLevelClient.java create mode 100644 bwie-module/bwie-es/src/main/java/com/bwie/es/controller/ESController.java create mode 100644 bwie-module/bwie-es/src/main/java/com/bwie/es/feign/FeignServer.java create mode 100644 bwie-module/bwie-es/src/main/java/com/bwie/es/service/ESService.java create mode 100644 bwie-module/bwie-es/src/main/java/com/bwie/es/service/impl/ESServiceImpl.java create mode 100644 bwie-module/bwie-es/src/main/java/com/bwie/es/task/ESTask.java create mode 100644 bwie-module/bwie-es/src/main/resources/bootstrap.yml create mode 100644 bwie-module/bwie-es/target/bwie-es-1.0-SNAPSHOT.jar create mode 100644 bwie-module/bwie-es/target/classes/bootstrap.yml create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/ESApplication.class create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/config/InitData.class create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/config/InitEsRestHighLevelClient.class create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/controller/ESController.class create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/feign/FeignServer.class create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/service/ESService.class create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/service/impl/ESServiceImpl.class create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/task/ESTask.class create mode 100644 bwie-module/bwie-es/target/maven-archiver/pom.properties create mode 100644 bwie-module/bwie-es/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 bwie-module/bwie-es/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 bwie-module/bwie-es/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 bwie-module/bwie-es/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 bwie-module/bwie-server/pom.xml create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/ServerApplication.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/config/ConfirmCallbackConfig.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/config/InitData.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/config/RabbitAdminConfig.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/config/RabbitmqConfig.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/config/RedisMeta.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/config/RedissonConfig.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/config/ReturnCallbackConfig.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/consumer/RabbitConsumer.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/controller/BorrowMoneyController.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/controller/InterestRateController.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/exception/AllException.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/feign/FeignES.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/mapper/BorrowMoneyMapper.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/mapper/InterestRateMapper.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/service/BorrowMoneyService.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/service/InterestRateService.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/service/impl/BorrowMoneyServiceImpl.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/service/impl/InterestRateServiceImpl.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/utils/DLXQueue.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/utils/DelayedQueue.java create mode 100644 bwie-module/bwie-server/src/main/java/com/bwie/server/utils/TtlQueue.java create mode 100644 bwie-module/bwie-server/src/main/resources/bootstrap.yml create mode 100644 bwie-module/bwie-server/src/main/resources/mapper/BorrowMoneyMapper.xml create mode 100644 bwie-module/bwie-server/target/bwie-server-1.0-SNAPSHOT.jar create mode 100644 bwie-module/bwie-server/target/classes/bootstrap.yml create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/ServerApplication.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/config/ConfirmCallbackConfig.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/config/InitData.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/config/RabbitAdminConfig.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/config/RabbitmqConfig.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/config/RedisMeta.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/config/RedissonConfig.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/config/ReturnCallbackConfig.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/consumer/RabbitConsumer.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/controller/BorrowMoneyController.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/controller/InterestRateController.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/exception/AllException.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/feign/FeignES.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/mapper/BorrowMoneyMapper.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/mapper/InterestRateMapper.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/service/BorrowMoneyService.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/service/InterestRateService.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/service/impl/BorrowMoneyServiceImpl.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/service/impl/InterestRateServiceImpl.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/utils/DLXQueue.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/utils/DelayedQueue.class create mode 100644 bwie-module/bwie-server/target/classes/com/bwie/server/utils/TtlQueue.class create mode 100644 bwie-module/bwie-server/target/classes/mapper/BorrowMoneyMapper.xml create mode 100644 bwie-module/bwie-server/target/maven-archiver/pom.properties create mode 100644 bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 bwie-module/bwie-system/pom.xml create mode 100644 bwie-module/bwie-system/src/main/java/com/bwie/system/SystemApplication.java create mode 100644 bwie-module/bwie-system/src/main/java/com/bwie/system/config/FastUtil.java create mode 100644 bwie-module/bwie-system/src/main/java/com/bwie/system/controller/UserController.java create mode 100644 bwie-module/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java create mode 100644 bwie-module/bwie-system/src/main/java/com/bwie/system/service/UserService.java create mode 100644 bwie-module/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java create mode 100644 bwie-module/bwie-system/src/main/resources/bootstrap.yml create mode 100644 bwie-module/bwie-system/target/bwie-system-1.0-SNAPSHOT.jar create mode 100644 bwie-module/bwie-system/target/classes/bootstrap.yml create mode 100644 bwie-module/bwie-system/target/classes/com/bwie/system/SystemApplication.class create mode 100644 bwie-module/bwie-system/target/classes/com/bwie/system/config/FastUtil.class create mode 100644 bwie-module/bwie-system/target/classes/com/bwie/system/controller/UserController.class create mode 100644 bwie-module/bwie-system/target/classes/com/bwie/system/mapper/UserMapper.class create mode 100644 bwie-module/bwie-system/target/classes/com/bwie/system/service/UserService.class create mode 100644 bwie-module/bwie-system/target/classes/com/bwie/system/service/impl/UserServiceImpl.class create mode 100644 bwie-module/bwie-system/target/maven-archiver/pom.properties create mode 100644 bwie-module/bwie-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 bwie-module/bwie-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 bwie-module/bwie-system/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 bwie-module/bwie-system/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 bwie-module/pom.xml create mode 100644 pom.xml create mode 100644 sjz-last-exam.iml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..f5db924 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..dd1c0ef --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..6560a98 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,36 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..2a89eda --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4b661a5 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bwie-auth/pom.xml b/bwie-auth/pom.xml new file mode 100644 index 0000000..fce7f05 --- /dev/null +++ b/bwie-auth/pom.xml @@ -0,0 +1,26 @@ + + + + sjz-last-exam + org.example + 1.0-SNAPSHOT + + 4.0.0 + + bwie-auth + + + + + org.example + bwie-common + + + + org.springframework.boot + spring-boot-starter-web + + + diff --git a/bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java b/bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java new file mode 100644 index 0000000..dc8f133 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java @@ -0,0 +1,20 @@ +package com.bwie.auth; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 启动类 + */ +@SpringBootApplication +@EnableFeignClients +public class AuthApplication { + public static void main(String[] args) { + SpringApplication.run(AuthApplication.class,args); + } +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/config/ConfirmCallbackConfig.java b/bwie-auth/src/main/java/com/bwie/auth/config/ConfirmCallbackConfig.java new file mode 100644 index 0000000..7b7c230 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/config/ConfirmCallbackConfig.java @@ -0,0 +1,48 @@ +package com.bwie.auth.config; + +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 消息发送确认配置 + * 消息发送到交换机的回调 + */ +@Component +@Log4j2 +public class ConfirmCallbackConfig implements RabbitTemplate.ConfirmCallback { + + @Autowired + private RabbitTemplate rabbitTemplate; + + /** + * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 + */ + @PostConstruct + public void init() { + rabbitTemplate.setConfirmCallback(this); + } + + /** + * 交换机不管是否收到消息的一个回调方法 + * + * @param correlationData 消息相关数据 + * @param ack 交换机是否收到消息 + * @param cause 失败原因 + */ + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + if (!ack) { + String exchange = correlationData.getReturned().getExchange(); + String message = correlationData.getReturned().getMessage().getBody().toString(); + // 发送异常 + log.error("消息:{},发送到交换机:{}失败,原因是:{}", message, exchange, cause); + // TODO 可以把异常信息 以及 消息的内容直接添加到 MYSQL + } + } + +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/config/ReturnCallbackConfig.java b/bwie-auth/src/main/java/com/bwie/auth/config/ReturnCallbackConfig.java new file mode 100644 index 0000000..f3c2220 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/config/ReturnCallbackConfig.java @@ -0,0 +1,41 @@ +package com.bwie.auth.config; + +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.ReturnedMessage; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 消息发送到队列的确认 + */ +@Component +@Log4j2 +public class ReturnCallbackConfig implements RabbitTemplate.ReturnsCallback { + + @Autowired + private RabbitTemplate rabbitTemplate; + + /** + * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 + */ + @PostConstruct + public void init() { + rabbitTemplate.setReturnsCallback(this); + } + + /** + * 消息发送失败 则会执行这个方法 + * + * @param returnedMessage the returned message and metadata. + */ + @Override + public void returnedMessage(ReturnedMessage returnedMessage) { + log.error("消息:{},被交换机:{} 回退!退回原因为:{}", + returnedMessage.getMessage().toString(), returnedMessage.getExchange(), returnedMessage.getReplyText()); + // TODO 回退了所有的信息,可做补偿机制 + } + +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java b/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java new file mode 100644 index 0000000..c5e5876 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java @@ -0,0 +1,56 @@ +package com.bwie.auth.controller; + +import com.bwie.auth.service.AuthService; +import com.bwie.common.domain.request.UserReq; +import com.bwie.common.domain.response.UserRes; +import com.bwie.common.result.Result; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 鉴权控制层 + */ +@RestController +public class AuthController { + + /** + * 注入鉴权业务 + */ + @Resource + private AuthService authService; + + + /** + * 登录 + * @param userReq + * @return + */ + @PostMapping("/login") + public Result login(@RequestBody UserReq userReq){ + return authService.login(userReq); + } + + /** + * 获取用户信息 + * @return + */ + @GetMapping("/info") + public Result info(){ + return authService.info(); + } + + @PostMapping("/logout") + public Result logout(){ + return authService.logout(); + } + + +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/feign/FeignSystem.java b/bwie-auth/src/main/java/com/bwie/auth/feign/FeignSystem.java new file mode 100644 index 0000000..b2cb496 --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/feign/FeignSystem.java @@ -0,0 +1,22 @@ +package com.bwie.auth.feign; + +import com.bwie.common.domain.request.UserReq; +import com.bwie.common.domain.response.UserRes; +import com.bwie.common.result.Result; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +@FeignClient("bwie-system") +public interface FeignSystem { + + @PostMapping("/selectUser") + public Result selectUser(@RequestBody UserReq userReq); +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java b/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java new file mode 100644 index 0000000..ac409fd --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java @@ -0,0 +1,32 @@ +package com.bwie.auth.service; + +import com.bwie.common.domain.request.UserReq; +import com.bwie.common.domain.response.UserRes; +import com.bwie.common.result.Result; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +public interface AuthService { + /** + * 登录 + * @param userReq + * @return + */ + Result login(UserReq userReq); + /** + * 获取用户信息 + * @return + */ + Result info(); + + /** + * 退出登录 + * @return + */ + Result logout(); +} diff --git a/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java b/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java new file mode 100644 index 0000000..4e4b0da --- /dev/null +++ b/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java @@ -0,0 +1,94 @@ +package com.bwie.auth.service.impl; + +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; +import com.alibaba.fastjson.JSON; +import com.bwie.auth.feign.FeignSystem; +import com.bwie.auth.service.AuthService; +import com.bwie.common.constants.JwtConstants; +import com.bwie.common.constants.TokenConstants; +import com.bwie.common.domain.request.UserReq; +import com.bwie.common.domain.response.UserRes; +import com.bwie.common.result.Result; +import com.bwie.common.utils.JwtUtils; +import com.bwie.common.utils.StringUtils; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.UUID; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 鉴权业务实现 + */ +@Service +public class AuthServiceImpl implements AuthService { + + /** + * 远程调用 + */ + @Resource + private FeignSystem feignSystem; + + /** + * 注入redis + */ + @Resource + private StringRedisTemplate stringRedisTemplate; + + /** + * 注入http请求 + */ + @Resource + private HttpServletRequest request; + + /** + * 登录 + * @param userReq + * @return + */ + @Override + public Result login(UserReq userReq) { + if (StringUtils.isEmpty(userReq.getName())){ + return Result.error(null,"用户名不能为空"); + } + Result userResResult = feignSystem.selectUser(userReq); + UserRes data = userResResult.getData(); + if (!data.getPwd().equals(userReq.getPwd())){ + return Result.error(null,"密码不正确"); + } + //生成token令牌 + HashMap map = new HashMap<>(); + String userKey = UUID.randomUUID().toString().replaceAll("-", ""); + map.put(JwtConstants.USER_KEY,userKey); + String token = JwtUtils.createToken(map); + data.setToken(token); + //用户信息存入redis + stringRedisTemplate.opsForValue().set(TokenConstants.LOGIN_TOKEN_KEY + userKey, JSON.toJSONString(data)); + + return Result.success(data); + } + /** + * 获取用户信息 + * @return + */ + @Override + public Result info() { + String userKey = JwtUtils.getUserKey(request.getHeader("token")); + UserRes userRes = JSON.parseObject(stringRedisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey), UserRes.class); + return Result.success(userRes); + } + + @Override + public Result logout() { + String userKey = JwtUtils.getUserKey(request.getHeader("token")); + stringRedisTemplate.delete(TokenConstants.LOGIN_TOKEN_KEY + userKey); + return Result.success(); + } +} diff --git a/bwie-auth/src/main/resources/bootstrap.yml b/bwie-auth/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..5de29e3 --- /dev/null +++ b/bwie-auth/src/main/resources/bootstrap.yml @@ -0,0 +1,30 @@ +# Tomcat +server: + port: 9001 +# Spring +spring: + main: + allow-circular-references: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + application: + # 应用名称 + name: bwie-auth + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 192.168.59.128:8848 + config: + # 配置中心地址 + server-addr: 192.168.59.128:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + diff --git a/bwie-auth/target/bwie-auth-1.0-SNAPSHOT.jar b/bwie-auth/target/bwie-auth-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..7938cf757182f66b46770c0ffc2828a83ffffa3d GIT binary patch literal 9560 zcmb7J1yod97aoQ#=>`c!x?4a*ItJ+w5Xk{aVd#<$Vd!oUP(-B55s*&lmM#fNC8Yl0 z`Fz-G{b$y!xp&st-`)4@IA`xqSpgA=5CA|!1H4I-*AfOWzVrkD07>vK{9gb_N?n{y zPDz>rB(5YUEv2T;4wBvjb$2N$u(9`JE3h%Y>+UU6d8ql+3Ru9FDdjQld+;JW|!>Q z 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 literal 0 HcmV?d00001 diff --git a/bwie-auth/target/classes/bootstrap.yml b/bwie-auth/target/classes/bootstrap.yml new file mode 100644 index 0000000..5de29e3 --- /dev/null +++ b/bwie-auth/target/classes/bootstrap.yml @@ -0,0 +1,30 @@ +# Tomcat +server: + port: 9001 +# Spring +spring: + main: + allow-circular-references: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + application: + # 应用名称 + name: bwie-auth + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 192.168.59.128:8848 + config: + # 配置中心地址 + server-addr: 192.168.59.128:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + diff --git a/bwie-auth/target/classes/com/bwie/auth/AuthApplication.class b/bwie-auth/target/classes/com/bwie/auth/AuthApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..3543a44643f05bc11458eb1366c5d53957429835 GIT binary patch literal 790 zcmaJ<%Wl&^6g`tBO=<#7(+3nNRd;C?olR9C8C6Onx-t(D6c((;&cvD4o{7few!g&+ z#DWjtqY!u8N)0Gr$@ls`=G=47_~)^Xl65yz1;c)nn4HJgN^()U86S`t%;%X( zgi}U`1e*(`8FqS~qYH5*cqVkpN6spphSgYMQv%vtQfBD9k#1%t?}Zh)bkb5|Ffyf0 z@! z`@LN6;tQELhW{}najBlOljF+j;TJ1#bbo>GS4q^1E|G;tWlgOo{6m=N(_50TPuKVP-zwZ7DU5miWlNIhM_o)<3&B3h~p$)(jvoJB-4VCR=kYSC|-%s(}Q_(31 z^kp5lV9K)0FDjEK1jMitj92u9_!o^N3|z{wQ5aBe%*;1yg_=|MFUa$)0gr3~ege(?wGJhr57DyS^i~q%7BC+c~NH zMQ46W>KgHt%Q&};Jd>n{z_RfSf#RKE8EW) z*o!9(bm8$R&KP(NXQMc0;B}mjB5Pn07Ytm)R1|L*n8u8OS$)!p#~6;a>h-m2-`&4= z^ZgI*-}`9w)6f3=@Y?G2?|;90YwhE2*1otK+^pWZ{l}ee_5CMbu73X2+Krk*6mJ@s z!&@|V_k|S2+XmhNBiOl-x{J9bmVf{YpkV&X9y|O%6q)sHC&oF}m^)FFo~M|QWB-AM zt>h_P<(qp$;OuS+eA~P5pv^&94?o(fhjofTYeD(b%CES#nin{lNH#2=pzmt$R9$wm z)+%h;frrvJQm8SWUT?%bWZcMSy;%j~G^f7~0Gq zlxe1xz#Xj5ppT!rcCg+NLXYleeknux8Q|F-uA4bO!8y#CF9gS@xHCBm&XLql5VyGq zp_`)?1|fPl8Z`ktjb82qo}qFmP(Hy~%f(W65K2|iv;h$36{yler45i+9poQ-_630Z zai9+PH6o-2(!Dp4>aQYPMPxW!TQpY@t)gW(@&jUB@$N`>c;FYbMxZ&H0;Bg*8+eW$ zCeVf?nfv)S81Ro0w+;IkrGvchWt0warRCFgoAl~1jsy;+@how)2Wes*Bz`hr5&cMU z(bhysPzJmOee7S4XJ4StkaQV8qwPn;w0ZpQbF9U*lVEA?LKs+2%OLls`5&ib2Y=6; HYL5L4D6WJr literal 0 HcmV?d00001 diff --git a/bwie-auth/target/classes/com/bwie/auth/config/ReturnCallbackConfig.class b/bwie-auth/target/classes/com/bwie/auth/config/ReturnCallbackConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..5bdde91add99e9f142a88ceee46a477b3fb78999 GIT binary patch literal 1929 zcmbVNT~ixX7=BJjNV058#rlCCEm*J#*siwJRzs^8TU#5nLm4i-J6R54X|fx4PXxws zroHn*{Q=fdr{kR$jvs@SVf+F9j>6~_|G@D%yFlm=7{-g7bKW=a`#kU0Is4bYtA7F* zL&d@oyqrf5PFpCTXig(Jj9PdFXDpnBV@|J{<+UE1!}%=6EL_0rSzOHGl0a8Is0j>K zg0SYurgZ0(Lru-|Yi1u?a4M8kSQ0oI%4*fq)2h*|ORWSh#7MsY zanngm9XAM-GxeAof%>OfzV;ew#*4gaT}}9Ypr!T#KN7gq5wohKA31Z<)j_!I$Q=h~ zqNRgHFI2OH?H>1hPhVk5h2o4rx*W_h$li+Qs}EX@stTti*#!D3fh+4XGW3kRrA+I2 zkMyGzH)uH3MNc`hrRSM|Kj+n)DWzMXUzYWHRl0Y|v675wLnts%S&*N|rQLDe3L;Ij zNQW&~)3P^=5!CFYiXvHK6z2*ZGmWd4l3?TfhJPqld}ASzNL47T(Tc!p1u&+j!S3S5eO5nvM5xU7&dA=4Eli#{0O*0+|Gz zy5zinSY1#q`&r(%$or4=P*S{Tdq&vuJsSIl@2jv}mrs~Co>oh2=1D_yz{4hxQDGQ_0yhhL!FOqr=_nmWW3K9{gLo&U&qsiq zc?O$2umWSd`Qs@mCDlA2`Vt2D;2!~BXQc3)xoG?>q|EK3?n$1zxgY1A=FW@B^%+VI zcfma~@;k)OJf!d}S7Qu9^mDZn1A;zJN#F%Kr()-e+>Kp+7R?yW3u=p3~lA}`_ zB)#P1iR`!b^|=w3mVTaLf{AFwiLGxRYNV2Gg(Gp`}CoQ|1H zaE3Vv*PKpZfME_&n-LVipkCT3z+jvKbLi`N2>Vy04TIQKgkE&v6m=7yR)GGN)r=< z5B>mul<~}N(+fhV4?Abh?74j3IcMhgpP#<~l<+i*43>tG#&QlTc<7c#ZduKMXYiOI zCqjF$EB#|tlMM5fnrZUtiIUu%^C14gH@Ze;hUuM9Th)|%Do|BVZfI?+u*&FwVWx5@ zj>Ts#I){8m1}5}tl04IEN-Mk0FjQRHV@PhAI%OTLC@tTH&8qa@3kt|EUNJS{?FnBw zy?vOp2Z}N*oxxZ$+WN-xq#wcD?5LD4<(Y=k3~!2ECt}z%n%7NJD9wF&6w1Kz4@7lG z9+i8dw+($6gr0RQNKnj77@IN-9F$>fOWFfd-xj`TN-KThF}$l9TG-GhzINbHm*88w zm}k(U2FW(jpuA30o>h$B;6ck*y0Pz&of!WUKao{lRl45W!)+7TEzxR`p)2dL@Ir!} z=I#2<^-n~HX5VNGo{bven)1@rzfiWM())&?P`rdYnN}{d`M>&<2CmO**;^hSBTiFw zOlWCjT%Dp_b~m~Tuauke33si!^SbJ84#V?-lhR1qu6sF;Jg(+(1;ZIU$zuYOdECQn z9``ZJu-JdIFT6E0s}2YEgl_P6)k9e$0)>9(bDjkh=#k0Lqr;GJ5J+Z8OOwozOp+vY zw2qL*NiveDlB>f23e;VDZtIhaXNxJLcea&H}erJz-`>2e;J4KE^U~rB!(gY zCDI(wtOIb0B>N{n@1c-w=Z{krI;rL;Mx1J%cGMz5>uPf*IsrY)u5?axSL=QP4=COO MohGo@=|mCu3!1`@@Bjb+ literal 0 HcmV?d00001 diff --git a/bwie-auth/target/classes/com/bwie/auth/feign/FeignSystem.class b/bwie-auth/target/classes/com/bwie/auth/feign/FeignSystem.class new file mode 100644 index 0000000000000000000000000000000000000000..c8e446dd1ff121a8530770bafeec04844eb48d7d GIT binary patch literal 714 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 + + + sjz-last-exam + org.example + 1.0-SNAPSHOT + + 4.0.0 + + bwie-common + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + org.springframework.cloud + spring-cloud-starter-loadbalancer + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + io.jsonwebtoken + jjwt + 0.9.1 + + + + com.alibaba + fastjson + 1.2.80 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.apache.commons + commons-lang3 + + + + org.projectlombok + lombok + + + + cn.hutool + hutool-all + 5.8.3 + + + + com.aliyun + dysmsapi20170525 + 2.0.1 + + + + com.aliyun.oss + aliyun-sdk-oss + 3.12.0 + + + + org.springframework.boot + spring-boot-starter-amqp + + + + com.github.tobato + fastdfs-client + 1.26.5 + + + diff --git a/bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java b/bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java new file mode 100644 index 0000000..b62e4b1 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java @@ -0,0 +1,40 @@ +package com.bwie.common.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +public class RedisConfig { + + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(factory); + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new + Jackson2JsonRedisSerializer(Object.class); + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(om); + + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + // key采用String的序列化方式 + template.setKeySerializer(stringRedisSerializer); + // hash的key也采用String的序列化方式 + template.setHashKeySerializer(stringRedisSerializer); + // value序列化方式采用jackson + template.setValueSerializer(jackson2JsonRedisSerializer); + // hash的value序列化方式采用jackson + template.setHashValueSerializer(jackson2JsonRedisSerializer); + template.afterPropertiesSet(); + + return template; + } +} diff --git a/bwie-common/src/main/java/com/bwie/common/constants/Constants.java b/bwie-common/src/main/java/com/bwie/common/constants/Constants.java new file mode 100644 index 0000000..2fdc9fe --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/constants/Constants.java @@ -0,0 +1,18 @@ +package com.bwie.common.constants; + +/** + * @description: 系统常量 + * @author DongZl + */ +public class Constants { + /** + * 成功标记 + */ + public static final Integer SUCCESS = 200; + public static final String SUCCESS_MSG = "操作成功"; + /** + * 失败标记 + */ + public static final Integer ERROR = 500; + public static final String ERROR_MSG = "操作异常"; +} diff --git a/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java new file mode 100644 index 0000000..03692c1 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java @@ -0,0 +1,29 @@ +package com.bwie.common.constants; + +/** + * @author DongZl + * @description: Jwt常量 + */ +public class JwtConstants { + + /** + * 用户ID字段 + */ + public static final String DETAILS_USER_ID = "user_id"; + + /** + * 用户名字段 + */ + public static final String DETAILS_USERNAME = "username"; + + /** + * 用户标识 + */ + public static final String USER_KEY = "user_key"; + + /** + * 令牌秘钥 + */ + public final static String SECRET = "abcdefghijklmnopqrstuvwxyz"; + +} diff --git a/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java new file mode 100644 index 0000000..1871fb7 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java @@ -0,0 +1,24 @@ +package com.bwie.common.constants; + +/** + * @author DongZl + * @description: 令牌常量 + */ +public class TokenConstants { + /** + * 缓存有效期,默认720(分钟) + */ + public final static long EXPIRATION = 720; + /** + * 缓存刷新时间,默认120(分钟) + */ + public final static long REFRESH_TIME = 120; + /** + * 权限缓存前缀 + */ + public final static String LOGIN_TOKEN_KEY = "login_tokens:"; + /** + * token标识 + */ + public static final String TOKEN = "token"; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/BorrowMoney.java b/bwie-common/src/main/java/com/bwie/common/domain/BorrowMoney.java new file mode 100644 index 0000000..cd98112 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/BorrowMoney.java @@ -0,0 +1,65 @@ +package com.bwie.common.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 借款实体类 + */ +@Data +public class BorrowMoney { + /** + * 主键 + */ + private Integer id; + /** + * 借款时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date borrowTime; + /** + * 借款金额 + */ + private Integer borrowMoney; + /** + * 还款期数 + */ + private Integer repaymentPlan; + /** + * 最近还款时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date latelyBackTime; + /** + * 利息 + */ + private Double interest; + /** + * 状态 + */ + private Integer status; + + /** + * 手续费 + */ + private Double handlingCharge; + + /** + * 每月还款金额 + */ + private Double everyMonthMoney; + + /** + * 用户id + */ + private Integer userId; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/InterestRate.java b/bwie-common/src/main/java/com/bwie/common/domain/InterestRate.java new file mode 100644 index 0000000..cbafcd2 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/InterestRate.java @@ -0,0 +1,28 @@ +package com.bwie.common.domain; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 利率 + */ +@Data +public class InterestRate { + /** + * 主键 + */ + private Integer id; + /** + * 小于金额 + */ + private Integer money; + /** + * 利率 + */ + private Double InterestRate; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Order.java b/bwie-common/src/main/java/com/bwie/common/domain/Order.java new file mode 100644 index 0000000..618828d --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/Order.java @@ -0,0 +1,15 @@ +package com.bwie.common.domain; + +import lombok.Data; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 账单 + */ +@Data +public class Order { + +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/User.java b/bwie-common/src/main/java/com/bwie/common/domain/User.java new file mode 100644 index 0000000..700dd09 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/User.java @@ -0,0 +1,36 @@ +package com.bwie.common.domain; + +import lombok.Data; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 用户 + */ +@Data +public class User { + /** + * 主键 + */ + private Integer id; + /** + * 用户名 + */ + private String name; + /** + * 密码 + */ + private String pwd; + /** + * 角色标识 + */ + private Integer roleId; + + + /** + * 角色 + */ +// private String roleName; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/BorrowMoneyReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/BorrowMoneyReq.java new file mode 100644 index 0000000..9ba2d8e --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/request/BorrowMoneyReq.java @@ -0,0 +1,32 @@ +package com.bwie.common.domain.request; + +import lombok.Data; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +@Data +public class BorrowMoneyReq { + /** + * 信息id + */ + private Integer id; + /** + * 用户ID + */ + private Integer userId; + /** + * 借款区间 + */ + private Integer borrowMoneyMin; + private Integer borrowMoneyMax; + /** + * 利率区间 + */ + private Double interestMin; + private Double interestMax; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/UserReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/UserReq.java new file mode 100644 index 0000000..e218142 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/request/UserReq.java @@ -0,0 +1,22 @@ +package com.bwie.common.domain.request; + +import lombok.Data; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 用户查询条件 + */ +@Data +public class UserReq { + /** + * 用户名 + */ + private String name; + /** + * 密码 + */ + private String pwd; +} diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/UserRes.java b/bwie-common/src/main/java/com/bwie/common/domain/response/UserRes.java new file mode 100644 index 0000000..7ed3333 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/domain/response/UserRes.java @@ -0,0 +1,21 @@ +package com.bwie.common.domain.response; + +import com.bwie.common.domain.User; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class UserRes extends User { + /** + * token + */ + private String token; +} diff --git a/bwie-common/src/main/java/com/bwie/common/result/PageResult.java b/bwie-common/src/main/java/com/bwie/common/result/PageResult.java new file mode 100644 index 0000000..85ecdda --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/result/PageResult.java @@ -0,0 +1,34 @@ +package com.bwie.common.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author DongZl + * @description: 列表返回结果集 + */ +@Data +public class PageResult implements Serializable { + /** + * 总条数 + */ + private long total; + /** + * 结果集合 + */ + private List list; + public PageResult() { + } + public PageResult(long total, List list) { + this.total = total; + this.list = list; + } + public static PageResult toPageResult(long total, List list){ + return new PageResult(total , list); + } + public static Result> toResult(long total, List list){ + return Result.success(PageResult.toPageResult(total,list)); + } +} diff --git a/bwie-common/src/main/java/com/bwie/common/result/Result.java b/bwie-common/src/main/java/com/bwie/common/result/Result.java new file mode 100644 index 0000000..30b1e73 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/result/Result.java @@ -0,0 +1,76 @@ +package com.bwie.common.result; + +import com.bwie.common.constants.Constants; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author DongZl + * @description: 响应信息主体 + */ +@Data +public class Result implements Serializable { + + private static final long serialVersionUID = 1L; + /** + * 成功 + */ + public static final int SUCCESS = Constants.SUCCESS; + /** + * 失败 + */ + public static final int FAIL = Constants.ERROR; + /** + * 返回状态码 + */ + private int code; + /** + * 响应信息 + */ + private String msg; + /** + * 响应数据 + */ + private T data; + + public static Result success() { + return restResult(null, SUCCESS, Constants.SUCCESS_MSG); + } + + public static Result success(T data) { + return restResult(data, SUCCESS, Constants.SUCCESS_MSG); + } + + public static Result success(T data, String msg) { + return restResult(data, SUCCESS, msg); + } + + public static Result error() { + return restResult(null, FAIL, Constants.ERROR_MSG); + } + + public static Result error(String msg) { + return restResult(null, FAIL, msg); + } + + public static Result error(T data) { + return restResult(data, FAIL, Constants.ERROR_MSG); + } + + public static Result error(T data, String msg) { + return restResult(data, FAIL, msg); + } + + public static Result error(int code, String msg) { + return restResult(null, code, msg); + } + + private static Result restResult(T data, int code, String msg) { + Result apiResult = new Result<>(); + apiResult.setCode(code); + apiResult.setData(data); + apiResult.setMsg(msg); + return apiResult; + } +} diff --git a/bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java b/bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java new file mode 100644 index 0000000..94b1722 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java @@ -0,0 +1,55 @@ +package com.bwie.common.utils; + +import org.springframework.stereotype.Component; +import com.github.tobato.fastdfs.domain.fdfs.StorePath; +import com.github.tobato.fastdfs.service.FastFileStorageClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; + +/** + * @BelongsProject: 0107day02 + * @BelongsPackage: com.bw.config + * @Author: zhupengfei + * @CreateTime: 2023-02-01 08:52 + */ +@Component +public class FastUtil { + private static final Logger log = LoggerFactory.getLogger(FastUtil.class); + + @Resource + private FastFileStorageClient storageClient ; + + /** + * 上传文件 + */ + public String upload(MultipartFile multipartFile) throws Exception{ + String originalFilename = multipartFile.getOriginalFilename(). + substring(multipartFile.getOriginalFilename(). + lastIndexOf(".") + 1); + StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage( + multipartFile.getInputStream(), + multipartFile.getSize(),originalFilename , null); + return storePath.getFullPath() ; + } + /** + * 删除文件 + */ + public String deleteFile(String fileUrl) { + if (StringUtils.isEmpty(fileUrl)) { + log.info("fileUrl == >>文件路径为空..."); + return "文件路径不能为空"; + } + try { + StorePath storePath = StorePath.parseFromUrl(fileUrl); + storageClient.deleteFile(storePath.getGroup(), storePath.getPath()); + } catch (Exception e) { + log.error(e.getMessage()); + } + return "删除成功"; + } + +} diff --git a/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java new file mode 100644 index 0000000..f560aa9 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java @@ -0,0 +1,109 @@ +package com.bwie.common.utils; + +import com.bwie.common.constants.JwtConstants; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; + +import java.util.Map; + +/** + * @description: Jwt工具类 + * @author DongZl + */ +public class JwtUtils { + + /** + * 秘钥 + */ + public static String secret = JwtConstants.SECRET; + + /** + * 从数据声明生成令牌 + * + * @param claims 数据声明 + * @return 令牌 + */ + public static String createToken(Map claims){ + String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact(); + return token; + } + + /** + * 从令牌中获取数据声明 + * + * @param token 令牌 + * @return 数据声明 + */ + public static Claims parseToken(String token){ + return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); + } + /** + * 根据令牌获取用户标识 + * + * @param token 令牌 + * @return 用户ID + */ + public static String getUserKey(String token){ + Claims claims = parseToken(token); + return getValue(claims, JwtConstants.USER_KEY); + } + /** + * 根据令牌获取用户标识 + * + * @param claims 身份信息 + * @return 用户ID + */ + public static String getUserKey(Claims claims){ + return getValue(claims, JwtConstants.USER_KEY); + } + /** + * 根据令牌获取用户ID + * + * @param token 令牌 + * @return 用户ID + */ + public static String getUserId(String token){ + Claims claims = parseToken(token); + return getValue(claims, JwtConstants.DETAILS_USER_ID); + } + /** + * 根据身份信息获取用户ID + * + * @param claims 身份信息 + * @return 用户ID + */ + public static String getUserId(Claims claims){ + return getValue(claims, JwtConstants.DETAILS_USER_ID); + } + /** + * 根据令牌获取用户名 + * + * @param token 令牌 + * @return 用户名 + */ + public static String getUserName(String token){ + Claims claims = parseToken(token); + return getValue(claims, JwtConstants.DETAILS_USERNAME); + } + /** + * 根据身份信息获取用户名 + * + * @param claims 身份信息 + * @return 用户名 + */ + public static String getUserName(Claims claims){ + return getValue(claims, JwtConstants.DETAILS_USERNAME); + } + /** + * 根据身份信息获取键值 + * + * @param claims 身份信息 + * @param key 键 + * @return 值 + */ + public static String getValue(Claims claims, String key){ + Object obj = claims.get(key); + return obj == null ? "" : obj.toString(); + } +} diff --git a/bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java b/bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java new file mode 100644 index 0000000..9c1383f --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java @@ -0,0 +1,153 @@ +package com.bwie.common.utils; + +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.model.GetObjectRequest; +import com.aliyun.oss.model.PutObjectRequest; +import lombok.extern.log4j.Log4j2; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.time.LocalDateTime; +import java.util.UUID; + +/** + * Oss服务调用 + */ +@Log4j2 +public class OssUtil { + + /** + * Endpoint 存储对象概述 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 访问路径前缀 存储对象概述 + */ + private static String endPoint = "oss-cn-shanghai.aliyuncs.com"; + private static String accessKeyId = "LTAI5tD2tppzLQ4Rb6yKYyph"; + private static String accessKeySecret = "KEKNKwVvDq7PZLjE63NPBouqHXox4Q"; + private static String accessPre = "https://dzlmuyu.oss-cn-shanghai.aliyuncs.com/"; + + /** + * bucket名称 + * @return + */ + private static String bucketName = "dzlmuyu"; + + private static OSS ossClient ; + + static { + ossClient = new OSSClientBuilder().build( + endPoint, + accessKeyId, + accessKeySecret); + log.info("oss服务连接成功!"); + } + + /** + * 默认路径上传本地文件 + * @param filePath + */ + public static String uploadFile(String filePath){ + return uploadFileForBucket(bucketName,getOssFilePath(filePath) ,filePath); + } + + /** + * 默认路径上传multipartFile文件 + * @param multipartFile + */ + public static String uploadMultipartFile(MultipartFile multipartFile) { + return uploadMultipartFile(bucketName,getOssFilePath(multipartFile.getOriginalFilename()),multipartFile); + } + /** + * 上传 multipartFile 类型文件 + * @param bucketName + * @param ossPath + * @param multipartFile + */ + public static String uploadMultipartFile(String bucketName , String ossPath , MultipartFile multipartFile){ + InputStream inputStream = null; + try { + inputStream = multipartFile.getInputStream(); + } catch (IOException e) { + e.printStackTrace(); + } + uploadFileInputStreamForBucket(bucketName, ossPath, inputStream); + return accessPre+ossPath; + } + + /** + * 使用File上传PutObject上传文件 ** 程序默认使用次方法上传 + * @param bucketName 实例名称 + * @param ossPath oss存储路径 + * @param filePath 本地文件路径 + */ + public static String uploadFileForBucket(String bucketName , String ossPath , String filePath) { + // 创建PutObjectRequest对象。 + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, ossPath, new File(filePath)); + + // 上传 + ossClient.putObject(putObjectRequest); + return accessPre+ossPath; + } + + /** + * 使用文件流上传到指定的bucket实例 + * @param bucketName 实例名称 + * @param ossPath oss存储路径 + * @param filePath 本地文件路径 + */ + public static String uploadFileInputStreamForBucket(String bucketName , String ossPath , String filePath){ + + // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 + InputStream inputStream = null; + try { + inputStream = new FileInputStream(filePath); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。 + uploadFileInputStreamForBucket(bucketName, ossPath, inputStream); + return accessPre+ossPath; + } + + public static void uploadFileInputStreamForBucket(String bucketName , String ossPath , InputStream inputStream ){ + ossClient.putObject(bucketName, ossPath, inputStream); + } + + /** + * 下载 + * @param ossFilePath + * @param filePath + */ + public static void downloadFile(String ossFilePath , String filePath ){ + downloadFileForBucket(bucketName , ossFilePath , filePath); + } + /** + * 下载 + * @param bucketName 实例名称 + * @param ossFilePath oss存储路径 + * @param filePath 本地文件路径 + */ + public static void downloadFileForBucket(String bucketName , String ossFilePath , String filePath ){ + ossClient.getObject(new GetObjectRequest(bucketName, ossFilePath), new File(filePath)); + } + + /** + * + * @return + */ + public static String getOssDefaultPath(){ + LocalDateTime now = LocalDateTime.now(); + String url = + now.getYear()+"/"+ + now.getMonth()+"/"+ + now.getDayOfMonth()+"/"+ + now.getHour()+"/"+ + now.getMinute()+"/"; + return url; + } + + public static String getOssFilePath(String filePath){ + String fileSuf = filePath.substring(filePath.indexOf(".") + 1); + return getOssDefaultPath() + UUID.randomUUID().toString() + "." + fileSuf; + } + +} diff --git a/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java new file mode 100644 index 0000000..93c47fd --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java @@ -0,0 +1,68 @@ +package com.bwie.common.utils; + +import org.springframework.util.AntPathMatcher; + +import java.util.Collection; +import java.util.List; + +/** + * @author DongZl + * @description: 字符串处理工具类 + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils { + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) { + return object == null; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) { + return isNull(coll) || coll.isEmpty(); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, List strs) { + if (isEmpty(str) || isEmpty(strs)) { + return false; + } + for (String pattern : strs) { + if (isMatch(pattern, str)) + { + return true; + } + } + return false; + } + + /** + * 判断url是否与规则配置: + * ? 表示单个字符; + * * 表示一层路径内的任意字符串,不可跨层级; + * ** 表示任意层路径; + * + * @param pattern 匹配规则 + * @param url 需要匹配的url + * @return + */ + public static boolean isMatch(String pattern, String url) { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } +} diff --git a/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java new file mode 100644 index 0000000..49e8c81 --- /dev/null +++ b/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java @@ -0,0 +1,87 @@ +package com.bwie.common.utils; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.dysmsapi20170525.Client; +import com.aliyun.dysmsapi20170525.models.SendSmsRequest; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.aliyun.teaopenapi.models.Config; +import lombok.extern.log4j.Log4j2; + +import java.util.Map; + +/** + * 短信工具类 + */ +@Log4j2 +public class TelSmsUtils { + + /** + * 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 + */ + private static String accessKeyId = "LTAIEVXszCmcd1T5"; + private static String accessKeySecret = "2zHwciQXln8wExSEnkIYtRTSwLeRNd"; + + /** + * 短信访问域名 + */ + private static String endpoint = "dysmsapi.aliyuncs.com"; + /** + * 短信签名 + */ + private static String signName = "登录验证"; + + /** + * 实例化短信对象 + */ + private static Client client; + + static { + log.info("初始化短信服务开始"); + long startTime = System.currentTimeMillis(); + try { + client = initClient(); + log.info("初始化短信成功:{}",signName); + } catch (Exception e) { + e.printStackTrace(); + } + log.info("初始化短信服务结束:耗时:{}MS",(System.currentTimeMillis()-startTime)); + } + /** + * 初始化短信对象 + * @return + * @throws Exception + */ + private static Client initClient() throws Exception{ + Config config = new Config() + // 您的AccessKey ID + .setAccessKeyId(accessKeyId) + // 您的AccessKey Secret + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = endpoint; + return new Client(config); + } + + /** + * 发送单条短信 + * @param tel + * @param templateCode SMS_153991546 + * @param sendDataMap + */ + public static String sendSms(String tel , String templateCode , Map sendDataMap){ + SendSmsRequest sendSmsRequest = new SendSmsRequest() + .setPhoneNumbers(tel) + .setSignName(signName) + .setTemplateCode(templateCode) + .setTemplateParam(JSONObject.toJSONString(sendDataMap)); + SendSmsResponse sendSmsResponse = null; + try { + log.info("发送短信验证码:消息内容是:【{}】", JSONObject.toJSONString(sendDataMap)); + sendSmsResponse = client.sendSms(sendSmsRequest); + } catch (Exception e) { + log.error("短信发送异常,手机号:【{}】,短信内容:【{}】,异常信息:【{}】", tel, sendDataMap, e); + } + return JSONObject.toJSONString(sendSmsResponse.getBody()); + } + +} diff --git a/bwie-common/src/main/resources/META-INF/spring.factories b/bwie-common/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..95ec018 --- /dev/null +++ b/bwie-common/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration = \ + com.bwie.common.config.RedisConfig,\ + com.bwie.common.utils.FastUtil \ No newline at end of file diff --git a/bwie-common/target/bwie-common-1.0-SNAPSHOT.jar b/bwie-common/target/bwie-common-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..4444f4e696e7ffc41efcd933c014fb063d239d8b GIT binary patch literal 27400 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 VDgJ}lDm)RaD#cR?PZ`IM{|oAmkthHF literal 0 HcmV?d00001 diff --git a/bwie-common/target/classes/com/bwie/common/constants/JwtConstants.class b/bwie-common/target/classes/com/bwie/common/constants/JwtConstants.class new file mode 100644 index 0000000000000000000000000000000000000000..452b534641592a2df98eeb0dd2a45ec22a968bba GIT binary patch literal 544 zcma)(%TB{E5Jj&`OG7D-miJR)gMbCuumd4gZIB89BvLA|s+`mmw}}IJP|9DiLSn%O z@KK0K0FfmNkM9|4u4n9z&$o8~2iPoO3`<2U7qP-H(=b}KrfGGqE#s=wY%o;KK7Zu8 z%T-UeqCl$NA;VPNS7F3e)aGt1G^{erW-Bjh=Z1zg1}*hDGj24jGmKkC{mN)**dTo* zm5h!V#&&kw4Eeg>6?DHTmAHsKTLdj`yOgP#zQf%%4`jkW$$WGtLxvsG@jcxhN}-eR zd_~)LU!i_FjDDL8spFF6$AKeGWa3%L9_}ael`)MOhVB3P(X@Y$a%uO46EPIyPy`*> zrJ)n0xJNgovNI4PhE;AmU2)sHll_6~DgXW<2&4FM_%wRP7IO3pKprc!3ZUm9%7Oj_ zT81ZxOBtRdE@ya(Dp@iL#aVLDQw9oquV62!WrgB6r9tLZise)nFo$^}h6Rc_EPesg Cd3opn literal 0 HcmV?d00001 diff --git a/bwie-common/target/classes/com/bwie/common/constants/TokenConstants.class b/bwie-common/target/classes/com/bwie/common/constants/TokenConstants.class new file mode 100644 index 0000000000000000000000000000000000000000..684ace3b3539ed572fbe090abfff328502045cc6 GIT binary patch literal 526 zcma)2O;5r=5Pbtwkbofgg`e?;9PGuD7!yN^BDEN3h@MD`4K9{#LW}yhJehd#2YB)q z8K)H$Z*H=0=gsWCoi}eEFRuU&u#-j{>q%@Ru}Mg4SC@_UiP>lw1Ue^VYo7E2O9oxb zoj3|V;T3x)WZGK2t#!_NX5&Je=J80#>8;a-(KB03&FD3?YeGRETKAUfT5_Ovg0YZ; zY6@EfCAyQsHev2aND&+p;^n-qD4U;P~s-9@h@X_PJ`NT-WDJjugXdH5O+U+3W)JbaUfr+D}l58sZ{(@8wP z!^3yk$M+aL!^8J^_yG?;H#5FW8MqLCM*A zqftM5w6bIi$|_2`RjHQuS}hxT<8Zsyg7R3US(&Zc_tk3kmes1%YfVAhrt6J`a&x&+ zsV$srSWEWVdgFBYWWBLuwaQk9DP8dd`=tg>2qUe<3g#=x zxM$B+>@qfB2@%iNm#j*yyjz})oD%DcF4!%evbc4`v;6K+rlD6BD&D-y^PXp>LvkX? zLU6cu=W-BD`!+8H8BeA5uiteov#GO#36PFBo5)Tc@ahyz;# zBINze&e*NR`urh_(+#V^?xkVl4ZGmjcB5v)Oo!#h4S_#yh}OgnSvT&YcU?}{>^%Wi zCvf03fkU=7a0uPNWA-C$tBPoPW_WP+ls(s)962FK)O)kmQ6VeptwpPx0H0Hc3%rp=`XK-MOq`4W@|^Ti&v|4@zFkk0y1gr2a(A<@1Wp{VG(;a-Z=(LmW z)oF~zb()|%bljLgck{4~U+9n0+O-7SE?4WT$w{hFQar@KhQF>UXy|hoKk1%?G z(G(Bwp=q6F7#(EvAPO7ZDpC^*7mHC}I{f1uQ z;Z<~(@!@WY>_i`N-(?$tAUi(Xb661N#)o_N7P8d%uzQ4fONe*Ubbs|pL)BMbBNxnqh}j%yghuk_jnp{FP}E!<75;c zMo9|sp#z2Z+(}RwxF2tC2fnjO@1S?OAjC-_naB(IL~7i`0(m2uNFDh^_Q)p^NIsE6 zcpC76{KNQeyp{13ct%IBl6X$b3!^eF z1{x#R0*u3c90FcZ%Zr_|`! z6$%CC=YV23`N`?WMJDJ7?4klMS-c#jhbX+(Wq7?VRlPbcC*YDxHwDL?iWPJ$c-fKl z&cPMmS@vCW+3yQ>8C|bSZXO+%cT1P=58jE`dR?kMwlXaGT zk6iW#f_Fk&uS;%<9hcjs%MS*xGO=El++RB`P3iJO!7h{Qb;+%|<8o5E{BUsKsr9<# zuHSLFL%PI=fjXWrUp|9q>KDgGpQUKz^4K3pf10A<%VWPMeP(=gmD2JRAaigWgBh9l z6QzvE>y*1h`h*c#r9PLDHKU+p&6p8oPV9BcU!t@THDVr8&WwYUGc_a5B+Vhk4b4N! zn+cHeX3|J7Dd~_BM$$tnm?@A7rf#H|q&p-a52@cwgVb+kj5L!n4k>M9Jfx!82U5|@ z8huR4I;1`$>md!8Igkd-ypdy4-XZ0TyoWSs7C;&_`;7vV`W;fi==YE|m_?8_m;*+U zNdpe4XbiZd$Ypewu;(&WH}OBzS-G7~TqKKTakxeCD9zz^4pB)|X&$mLjf#_G14Zb5 zF-0eVqBJA+&;n45s-i@TKyhk_A*ujr^dw!QQ$PuNivC5Xfs(XJf1xT+ihfIP&=QbN zf2Au_14`51>3OOHW$*=Yk(Pn_M2w!GM}V^8cKB!j<-{0P(gezj1Nhi%0Tsj{MAruD z7j=9fodGI}Hf^M{Km&9R@t>p3aqT~piPOrPG!Unc;$IVQ(gp<+|2OE~92SZt!r#+Q zFWZi-=F2F`Rl+Ca{oGL}r0$}qdqUXrImFW`zd2cc_{xR|*IR_kFOBlcXD4?=cFH2# zl$~5eiD}ufOBA12CF5b1XUzyJjEJMrxbT!JXGWz8H7AWUBkHR1W=yJL9Th53SryE< zRG|nRtGKJ`H#Mo!Ix3W=vMQPhsX|pcRtZ-%U?!z1*-@cZmDQk`k}8y`W0i7M8%$lQ z^o~lGs!hQK@VMG7XM4k%Kvs0gBRb zdW9YbiXjP~q0a)v=>l}01JdX@l*H$O67)y>PC5^iq`%>#{0l%S`ZtR22_T)5GjxLb zuR#z&ateWjBq6S0((ZeR1x1Rw1eX)(6*;t+ht_5Kr4BjXOYZUm6po3u#-wW%taA(# zL55x1>#7~|HV2^|>x8+#;Xxi&b?9 zdI>qrzt7IUMz4h3wLF{C&Q|RPb_?D;l8XMnD|T~<*h69 zE}&;PVTT0`VpW{_b>YnO zs?K&btSrksPfAP6^X2R0Oxs|Ec4|I5ARuInM8|iIBu}yY#){wc>Kh8lT7+KKH@ni< zX;$1Do-|B%Jo>D(sf|+@veAzL8-p_B@ruIfWAu)VX`Hq3CQjR!6l+ARGkD9!3}zJu z4!?qs%#|Ilwl13I;w(nJ^;sJa@wp6-D9glfa93vNni!5F=}}`gu7Mim4wHu^rDV?5 zmRn~bC*#c$=@9Sj1RE-pz_)rQ*0@PL-r%dy$G0Snl*mRaCCUXe#pB!oC8~0Km8&9W z#aSPJ2K7?_dyS(JI8Wep+I9%QFq4BeHRYHL{u!wsj|BI&4Q3hI1gDP%53~(t`Pu|) zM}tqb4SpM=)Iw;NIHx!pjDK$PwnGaI3{lk>%BIgV*@U$@g19WY#@F(=|p{Mr>e?Tu!jPJt;mNd-8 z2@WM~@-KAcwdd&Gg*}CaXOT$gv;IHU8egkEE zfOlybs1f}hEfY=l{rj{mT;!Pr*rxRlPMEm#0{tdR{Ik>x42EVVZnnx^q@bF-EK!Xv zk&$$gE=tNpQvbV1*hu=pMRd}ai$sldJ}42NB)Zs}N-`TvbT2nOqs<0|7|KmoSq3Xt z*o8T{kB%?JpDAgwk=LRfONtY2WlMUn#kvGRR$dRbhT2O#7akZfOk){yxJ)|yAA=%Z zCZQ~D<3qAe^W(jME3`CX25^;@9*Fq_#!EUhim4O@gi|Fl&xw6>iG=&e^>l}JM(m!@&Whbjdmkr{z9I3a OZz_^TvAd+iH~#~5f2@iC literal 0 HcmV?d00001 diff --git a/bwie-common/target/classes/com/bwie/common/domain/Order.class b/bwie-common/target/classes/com/bwie/common/domain/Order.class new file mode 100644 index 0000000000000000000000000000000000000000..2f62aa2fd928a4f92dded95789ce45c392a80da4 GIT binary patch literal 835 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 literal 0 HcmV?d00001 diff --git a/bwie-common/target/classes/com/bwie/common/domain/response/UserRes.class b/bwie-common/target/classes/com/bwie/common/domain/response/UserRes.class new file mode 100644 index 0000000000000000000000000000000000000000..b54807066f3a738922990f222bdad45681ee7c8f GIT binary patch literal 1533 zcma)5TW=Fb7(HXJy&GqfY)leJamyWiiL;c3LgIv$tArE>L;wk%*w~|Z!QM^R>+(Z* z;|G+NJQS&Qq#{-AODpv^mCKpkjWJ1(kXAF_H}hT2IrHs*@Ba7`zyfaQ_$~*5g&Ztg zRMz)7TvC>W%gW+nVR3{POFC*frN;u=b-yVECRSZfuJt+_GPv(-w0V+W^&3w6 zp%b{uPY$)P<+505wc&T{jpwekX>@$gZu%X^_3S`)w|uWF?FU^M+>>1*5dNpolHSDa zhbZd>ALYh#&sMYd5akxC-@lxCwZ3@RLi~$2I86r?vl8OaZ6zZ`fc)$yWYfLz4)t1XU$gWTqZLMI{T9m-B zDzBhd`_P}P6b`0djeaXLJvW literal 0 HcmV?d00001 diff --git a/bwie-common/target/classes/com/bwie/common/result/PageResult.class b/bwie-common/target/classes/com/bwie/common/result/PageResult.class new file mode 100644 index 0000000000000000000000000000000000000000..29e968719446abaf49c470a4316b9171a1318eea GIT binary patch literal 3304 zcmb_dZF3V<6n-|@%^O>q7Fr0lkjh({wnU+#HfdF`C?$oySq0zNrfaj1CNXLJSvBQuVUGcw~}@UN)&oZU^bO)2dMr|G@to_p_k&dYP|{`v3EzW^A= zMhyK}h(g7p3`=3W6XU!r!@DuOhwCEUkl}q9K9KVt%J5MbAIH#zg$QoSY{;+@K|$u# z2uztj31cmcq5{pX*hWc#GNV8(Sv6ZhJb%mh%*fPjtCY!8lT{F1wARXoU9Xx7`Z~6A zOH0`)o(biwvSm*x2&RUYY3yQUm8ZM&R@uB-Utck+OU6oxn%;b+V3d}PswHbrsoF)W zrr>zKP+8Bc+_B6Ih4o4~Q#EV#lAW0|*31P*BvSuY3!iT^t)zCp-t_ihYNjKOtau%t zHSJ<$b!xj1=~H6cN!NxP*X>H%GX>|j9nB8!?h+$f&Mi&2?v#x3TISlyEwf-} zr?#2%kaxG)3^QU^+_Wh;yUp6p&b3l~=l^lcwU^tg-$JLznrSb&+$5pM&M*~1M=~fi z+*vyXhqftOIjFTPsi_$$TbLTx)PYo|CD}jRsclz0WPVyVN~A@fcgA0^;TvqEics9? zApaIStzs9=Dtk$&e!^|Fn4|L+r}mJZw4|nM(KZUVXN?V~dH6E0nVGPHQJxm(C>D)c z(d|Fx?lQ6G7B0_D(>cnas?$dlPI$eqc@B^)i+0s2)7ZggHk}w;Es>|5PKWK`x*DsJ zSv1+_CF=|6bsC5*R_fJ)dC8KOpu62WXCz@dj^db(!${~jg69+r?fM$XmD4)X7zxAD zaSOL~Oe3q~1-z)^EY9hekmV)3MT)em;zo3#Zk1N0COvIWQchAPb(F9!Lz#3LO-i{O z9jmJh>zKt=J{E0zZpSijj;bSW1%o>T((KJ}tzIaYHPY(b(`dC5FBY@@46q@5)!UL5Zf`N?y-GWu#}Ge6{a~UI;2-PAPgy`pN!@@W4??HR zGILB)GtF7ytfe17`H4c1Mt~Tvfu>ZNdY+P8;vpQz3C<_CXijk@CQtKjl5(B1%DG!i zrjOl6AU$>;!M5>UXZtY61fukAKm8MsBro!s2O^S0Ai&*D3_%CD-*HV&39!32$eSt3 zQ3)D63@_Ya0+5@YXLF1|AYzZ8UOzhe0NRgSxeT z1sx^m7|wX0*EkDk^yuhAgdQT?iJA0aMq8MYn5~$i*%32C_t|nBlf-(1u1Vgs^gRTA zpx}?OXO9(S^U{oKu1S)62zI*Pw{Ll_~}5LATQ$;8W-P}2_{?)rAM}q@Yx`4%Ls_eg(e8?I8{)Za7PH|#`Y>< z`P6x_{Y7?bygomY{vMjTIr1CS@1O-YM}CDmJDP4F;w&jdNBRHFx3bAq>?)VB33co- z_9fIm&~q31SVC=JpL1T_q*2xBQGW#EE?6r~^T=V64)t-KV$TNn6d%KD)CHND1YW14 z`r2vUOQL&T=ySn|Jsghwjs0O-^{$Fn(gQnGhpAf7D_#gktSef9NC(ZnV+ zQ6;p;h{Q+kB9hP=&~Hu-JS%nMUh0DEp|^3FXc{t@p%h^Ir*VZz3$pzVAy0=j-%}tr z#bHUl@&a0=S!vbOBXnJVfc?GQ4a6m`26}pX nT{+gkf!>3Z8|dq7KR2)L`<(KEXlGM2;#|NZ={3wbtNH%`Ddljg literal 0 HcmV?d00001 diff --git a/bwie-common/target/classes/com/bwie/common/result/Result.class b/bwie-common/target/classes/com/bwie/common/result/Result.class new file mode 100644 index 0000000000000000000000000000000000000000..39ab3dfd2df09fa0efb52e5b4f2651548baaceb0 GIT binary patch literal 4886 zcmb_gTX!2*75+w^(MZZTu@zscByFyMBU?6YOaa?*F1`>2UsBr%v_RXjJlINY$&KYa0$g$1BD?VqRefHUVpKo8z z#Q*ruAO8Yi5Wk7TM%hLshH8T3GqQd*hA-K8PS)3C__7RNk>RTe9LF`0`I-!0m*E?- z@l6??m*HC?@@=8MBh(8vUQD11*J5}{=I_ezatz;#;rl{fkKqS0|1gdSUP<6b__0v0 z+W3i$pBiW@d!@X)dc`Z1^TopD?6?8rqJh@2Vxe4d3zaMGYSpuN7x^&^*z=di#wODtVE zZavs&oAxRz#idJb$zAg*41$3(TX;>cwy_>KKGDSS&{cF$woyg^9@*NHU8@Uxv%FHN zSZV-w#~#gW;nDx>&R|b=*Jp{$>=u6PURi)kf>~WrDQ#e~NdR}RntsOJ^?ac8@V13? z;@%R0t8-gio(Z~pCj+I?k$fRv8D$6PIeCROU0KPq7VKrOqN1mn*vJpCJC+CSJ5LSD!RO$gw#PAy#|gqw*8!bk;((X+eCz&_g=mJ z&p*HR-b=6CdHHn*6PR?+C&%^1oj*N)=k{#__cv-&m(`DmgHL11!DU==@F*U0@ELs8 zK?c1J`Z3_(qj=E43clcA2D1(>;SmR)m*pJh9po`$(*MFDt=kHQ-C- z?)th{STc}lmd~Lusn}|78J9z>hkI;qQl~?FFZul;UD-m#TlPvc(q6xZW-__*`fG!= zF)=qcJBOqE$Ti|6`7?t?`GP$9X{6*I+w-} z_Z=lAiNn?KCeA6YM)+$P+=e!D+BY+*&CGI+a4#-qdbM|9EB(HeE+wR`P+YQ=mh1N7 z+zaf*Bfh=<4V!0p;A~S!tYowaBoBokIg4}J*HapjIH9!C`dB1{$ipE-l!qJlulsV| z_oW%kbzi~&426^?GywH$3n#etT`-?TGnlPrFpvKKU>?(O4eQX_#(}_M7_9Rli?(zi zMhh$h6&yw0`>A(eKl(OeGns=m#53s{5}Cdl_GBc{6_Q<$ z@A^r^@F}$70+Pt08y9^K(n^U&R?19#k0nkcc(@g+fsv(e%}ZmUWQ$=L2jgOLL>WjYDD$> zdNKw^AC= zYV(&Q+F45Nuge}6$r-MaLuTgh*po8fMf*)SnUq<>{y@BA$f8KcP&8$UO!QqOZ=yA2 zrJ{k5DOqZUx~59{3(BF5cvbPZ|EhK3Nj$+qh;TJd`a!>7M&Xh&vA~yek(5P54(S&A4S5B{Tq92e9?IyT{f2aFJ`=t`xF`9fbVfe%apGn1ski_AVp*a zuf}3i*HCE})GkHoygbhJvPXKLv5`5i;1Y@|%R6O)K=>riu~2bF$}bPGGuRlng`ID@B1MbN=4TBX}9 zteI}CkupOU7}ux@mKR}uKtN4mX&8i$e>eGn$Li~dFgjrc0)dRVnME<)pPzyng>`x% zU2^apbg{R0C-18vB|y}0Ajvi_bdpo@kfJ+kxIg&-=^73<_L*=~9n`n3heJ5h1!5>} u^l16Ake~f;;7AQe{{TMt$9%$)5>+2h2|pF~^EK}#rP|awp5}f8rT+r2x1c!y literal 0 HcmV?d00001 diff --git a/bwie-common/target/classes/com/bwie/common/utils/FastUtil.class b/bwie-common/target/classes/com/bwie/common/utils/FastUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..c87c0cf6c05b85794a685c3104182abeabc781ac GIT binary patch literal 2597 zcmbVOYi|@)7=BK-?d)y`D5cm|5DRi?x6lzq6iTaDTP(H|S*VD&&hDPwPMOO(GfN9z z_@Ifz#Kcb~BqsX7#P~_Pq)>?b0DlJ{{t4rAX12>xwnlBz_uSs|zR!C(&+PAi-MkIp z04}HTIELFWf)|r`DUG9eS&7jUy77wI9#dkx4ae|m8WT94#%q{Vr&CFsXu~v4Ch@vD zIi*BaiPK8^jE0#sI`M|mIh(|r8qTHh7T(tIjzGfpN&+2|o?kKoyLe#UnDj~|=?@94 z3qsE~OLEkuF)#w@U$FAh80UK2vSqgZDsA);5h(GVm&XUh-z^5zDp05hCsDpAl#t z^$Jp8!=&ZP6BQ>X{nI85Mj_-)d&cxFwXSY9hjSJ^^hU^Y3zjq(g5$YHCA91yLVJcY z<)%`$J+mM%))(iZ>|1WB=$npQ@ci?}g3K9C#SX2q>4(PD%1p&N)E@<4*rr=DvZ1=C zvRBhqIs*Iuvsr<5&$mjJYud_$ODHN#m8@01QmRt&q#4dBKWkU1;5nw{8bwtxRiWq# zv8Kls^RiqmNBfiv=e)v6Q^g)ipZQA{q|Ip@$nL&JAvDZ@Al%J$x-}>Cs1+H}8Q*4} zvZ0wjKV_DqlCf6>l1K7(wdm<=)CaNWb*j5my#`ed1Tqa%8W6Me!i!~TjCxMlbJ@H@ zI<{knhIe(mhgktJsKL~cLtaM#QpXe6rlW|GjyYHw=5?Hht-;aZVpfBvqm1`;Y{6E6 z9aZeT!^6EJBlo`g?9Q#F``3TGd;8NnH*Ws%!_C1#TK9DX;G^k&`236epZpeU>8Rj> zjs?u>SXAN}Tol;!pt`km>A0lMKTziMyH~#b^Xhl^u6%j-^KS&Usamhy*BU<5@ew{| zCq1w`otu|=nlhp%|L@zJ;7T%_exxHi`x;ii&SU&01lnxYZ^A9e#pxnjqfsAC2&95a zE{I-{(wS&zd_9p&xaCSn)6#SVx>i6~o>6z8I*qDX>k@mB1ae&9`L&VDdMxq&62LexW-pa9;V>3rG73EW0 z85{-2mdtgCpEzm4PD-T=e$jVP>ahZLV-HsXedtFby8Jcunz?siU>QvUvFu1Jp}Bc> z2`y8ZU(w1=nyMwc^CSC8V$MUhHc(Qk-vtMwsgfaTCWbLflG_JLspMbAzZ9 zmQ3ugibegX$zXt(x=62kv5yuFv|x}jfv2gjg6+h9&RR(390W=5S*oenZ&4}1ad_Yc z+ODGgXXqX4ma)DG9UHE3uRRK2?-DlhzhfDj68N5*RO5Q{G9II1*R{w)hQ2##Oyw?) zC&PFKu#u=biKd5WGIYF;SOy8d!D#bPt)APdsQywN-8azl3v^XeQCHK=w0@X-O&F@R#S!3dS2w)W literal 0 HcmV?d00001 diff --git a/bwie-common/target/classes/com/bwie/common/utils/JwtUtils.class b/bwie-common/target/classes/com/bwie/common/utils/JwtUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..bb09882b2a4da342cfbbff4370706bd8bb25cc84 GIT binary patch literal 2874 zcma)7?N{4$6n@fDlC}Z1f|Vgm+>k+G>tHfXR-#o{^$>Z_)B?0=9p79~c@AbLQz4y5{|NQsIp8(!NBZgso9K$Dg7{>}SQLN(A zDBi>)G5t)u9*fvOWKi^u4ra4z2(@3SzP4ql3^OovV`!|^sa=Sj8)Jj3}g*c->g@2 zy1lLCDqKlqt-My*)oeq|{ly;Vz^F+W&*rUaI@d7tGzV47OxGQwQcJHloE14_2CIzBvOw$OTIsT03x@ z=bgo6^1QO4I|o+bnPzKM-O+7Yk8T-7Q*-Jzqp;RS{F1nV?!^u@yLJ|lSs%DLIn!Cg zN|$Pu+0b*Yzv+w{5Ymhlb!Vrh+fVdk36p_$19Cmw9gz0B7z^Yc_3f_}m|B0l$%si% zINQ}Kbq<%iVm8Iz7h<55a9Ow)wsNIb@%s6a(6{Ai`7#CM>XB-f@hvGVqC=J>C(qQSlZ=WqhaNdpwu%LWPE$jJ%2hbQRYyqGBIK6$da>lu(vYQBj4d z!os19mnv*f9?9UishGuW=BB+e@|Ib1G}CdbBXc$(={nQ-oDQq(4GR)vcWyAg?vBae zs&G)3z%oCAAz?(z~;l4b}Tru>`W92xn2vf<84yujH_VF7Vmb5bYO?*3PALJmxh;{^#)TueMtz> z><2rMg=p9rR;&Umy4CgbY7X;2TQ~Ffnj>|7TyZQfYIuh~!D0SXDJW659K|_idGkHS zS(;zg4I-)EA^pNZ2-o@Ubr<{bHpi-W0OJG$VQ%0i!tUjLenVUvJwYgSif{<8(DMqB zQ}l*$3RyyS=4bAQUCfwwmL$ep+@wFBz`Hy%!r3I>5^izk*&M|LrZ}7C6QNT1N%09` zhBVkiI1)ar@+*88If3F@kA^@xu@E`LCHw_dkZ5-7R+D2RuGw=VlRO&59R}tCT==M_ zPSBT~NerCe$_1R~(_KU`*W{DxLq;Hz^j(tkJvalO^TEYeFqczpxL*7pG|}{s&S{ER zL^0o$=G6e28PZ(6Jk5Ffqz3hD`^G&cpo1S z^+T?z2>pwzG9F}PEV|O5U`0aj^HH#LUYyrmaj+T_$zKr>)ycmK-=05%oPESu2+RKi Db_6*|b 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

-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 R_fh9~c!7^%X%g(+e*i$qj(Gq8 literal 0 HcmV?d00001 diff --git a/bwie-common/target/classes/com/bwie/common/utils/TelSmsUtils.class b/bwie-common/target/classes/com/bwie/common/utils/TelSmsUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..da61d7dac4e9ff2dee89bb25a8297aabaf51b53a GIT binary patch literal 3751 zcmbVO?^_ht6@CX6W?4rdt61o_o%@ z|NPHae+RG)p9fHfLo!|ppa_S`@Cbe?c0Ut4RqXo2PAlV1lhGeQ0J@BU02CY&KZD|U zNbC&pGaSHS#KbNx4ibKti;%?2;v*%5Eg7~SX+b;^zzB}Y7!BYUj{EU*KTi1Z3qM}* zV@xoN2k8KCH|{CF*Z<#^qXUk7j!Z^$?$p*Us^N?02-P1227#>!SsG*oj#)zFFKUpdYED>Ex>9z#Fp6E}SMnY^Y zV=&RJ#&rp$TFlS|ZGBiX;~_O>jHVNz{!uG#sY#=8%hv5%ni`uzZ4MXpmbMrP!)~Rw zHJkQJ@U@x!)KU>P5_)$!-lwOcYF~_$VA#~u*nTx-i0>THXAc>cgmsRoz7azY(PrFC zgwnPVvqDil7KvLgh&?R@gdx|igbg*D?$bZbObi&r@i8yIt*d5IPcWiToDS1go5Lo| zv>(;=N^%f5ZxqCX7(n^JkBetp?X7tXrk#Sna85XIGH(6~GD!X)h z$n4*%rg(#GJ;iL5MR=iAJDp+_@&6-p_vzZa`SrK3gxs1avurhGM-5R}QU~u=#7w6& z{aHg)M5X6?H;9}nXu=b$22b5BbWasDAf(_oIICcb*qsx*tq4hY)FVD8_ip(JL+2%I zy%*=aw?x5PxS*g>SbSUT-oXVK?<%;6_Y}M@DD~JZp)q^*{I_G{x37Hu?|)qV_OmnJ zTpz#v;rMsAKA6dzoEg8Kef_oUUvAF4cb$~4$Icx;@%7kw86PP4EiNf|9NQG^#$^dh z?)0%jkw`e?s&!3dZ@rqGn)>e6nVC0E&s_Q{d-jG$C&@Wp$KdP}SCanGA zk@m#lJqPXHXk;X;_ja>aSLIXG;C5QgYM@27fZOj+XaDw&i=Bj(*^`&E*G^~8yz2%u zbLq|OsjJyrV$oNdbpYUgfcqb!0eZ#sYs_zcTEn?QIL&|q3UWW&{X!+*Du4eD{ zj%o zZPBjW`710%XSM&;IrRF}J~cF;TK2HT3E2_p>CUG>u}$%rhkt_?D3@pcNmS{v<#bO8 ztH0;5!3l39222SXy+-DC@4Q)JXUu~6K4Ez_hH8Y>tzKb|!B$rD_~l<##GQY$o`m zl8>mdwB9qoPF>UCorU6fC)V<1TgO*;DOQNFz+FI$EobG>a#oHkXXQw7RyKdGK1gB~ z@^?GGLR=-TCABvoeaTG`p5$+-L#)IO?iH5-&DhDWfM|l`62dQ`*g0E2jiQ4$P&@%& z1|<_H%|Py~oq+$ZD4Ry$AayVLg8Z)TYLsxlotk!_k~)`C-%7L=Y%L|V6;F|87ypI3 z%TdOm^)#)~s~NxVp*JL(0P_`Y%nD$k^-r?UT_fQ;#GgT7ehHvACFqKog)Cu%G`$ zc#-ZOD5U&fbgh{51Hnh8uxgS(te%7~xMmWi!L^g{2Oph8g}`UsO{_1%6drqO3L7S| zOwcwGX$Q`0@ORZ`P$P(&$g@hHLalT1B|)rZPInQ+Vh6-#0s&Oeiz+N8d_m@W8CEl# zjo5%1a@X>uRY#cyO4T#hn;p1bBvstNYR0gepa?LF$h#Q_@gvd&B;^8 + + + sjz-last-exam + org.example + 1.0-SNAPSHOT + + 4.0.0 + + bwie-gateway + + + + + org.example + bwie-common + + + + + org.springframework.cloud + spring-cloud-starter-gateway + + + + com.alibaba.cloud + spring-cloud-alibaba-sentinel-gateway + + + + com.alibaba.csp + sentinel-spring-cloud-gateway-adapter + + + diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/GatewayApplication.java b/bwie-gateway/src/main/java/com/bwie/gateway/GatewayApplication.java new file mode 100644 index 0000000..8be039e --- /dev/null +++ b/bwie-gateway/src/main/java/com/bwie/gateway/GatewayApplication.java @@ -0,0 +1,18 @@ +package com.bwie.gateway; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 网关启动类 + */ +@SpringBootApplication +public class GatewayApplication { + public static void main(String[] args) { + SpringApplication.run(GatewayApplication.class,args); + } +} diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java b/bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java new file mode 100644 index 0000000..5705d6f --- /dev/null +++ b/bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java @@ -0,0 +1,32 @@ +package com.bwie.gateway.config; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.extern.log4j.Log4j2; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + +/** + * @description: 放行白名单配置 + * @author DongZl + */ +@Configuration +@RefreshScope +@ConfigurationProperties(prefix = "ignore") +@Data +@Log4j2 +public class IgnoreWhiteConfig { + /** + * 放行白名单配置,网关不校验此处的白名单 + */ + private List whites = new ArrayList<>(); + + public void setWhites(List whites) { + log.info("加载网关路径白名单:{}", JSONObject.toJSONString(whites)); + this.whites = whites; + } +} diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/filters/GatewayFilter.java b/bwie-gateway/src/main/java/com/bwie/gateway/filters/GatewayFilter.java new file mode 100644 index 0000000..000ffb4 --- /dev/null +++ b/bwie-gateway/src/main/java/com/bwie/gateway/filters/GatewayFilter.java @@ -0,0 +1,72 @@ +package com.bwie.gateway.filters; + +import com.bwie.common.constants.TokenConstants; +import com.bwie.common.utils.JwtUtils; +import com.bwie.common.utils.StringUtils; +import com.bwie.gateway.config.IgnoreWhiteConfig; +import com.bwie.gateway.utils.GatewayUtils; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/6 + * @info: + */ +@Component +public class GatewayFilter implements GlobalFilter, Ordered { + + /** + * redis + */ + @Resource + private StringRedisTemplate stringRedisTemplate; + + /** + * 白名单 + */ + @Resource + private IgnoreWhiteConfig ignoreWhiteConfig; + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + String path = exchange.getRequest().getURI().getPath(); + //校验白名单 + if (StringUtils.matches(path,ignoreWhiteConfig.getWhites())){ + //放行 + return chain.filter(exchange); + } + //token校验 + String token = exchange.getRequest().getHeaders().getFirst("token"); + if (StringUtils.isEmpty(token)){ + return GatewayUtils.errorResponse(exchange,"token不能为空"); + } + try { + JwtUtils.parseToken(token); + }catch (Exception e){ + return GatewayUtils.errorResponse(exchange,"token不合法"); + } + //判断redis中是否存在 + if (!stringRedisTemplate.hasKey(TokenConstants.LOGIN_TOKEN_KEY + JwtUtils.getUserKey(token))){ + return GatewayUtils.errorResponse(exchange,"身份过期 重新登陆"); + } + //放行 + return chain.filter(exchange); + } + + @Override + public int getOrder() { + return 0; + } +} diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java b/bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java new file mode 100644 index 0000000..7b789e5 --- /dev/null +++ b/bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java @@ -0,0 +1,98 @@ +package com.bwie.gateway.utils; + +import com.alibaba.fastjson.JSONObject; +import com.bwie.common.result.Result; +import com.bwie.common.utils.StringUtils; +import lombok.extern.log4j.Log4j2; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +/** + * @author DongZl + * @description: 网关处理工具类 + */ +@Log4j2 +public class GatewayUtils { + /** + * 添加请求头参数 + * @param mutate 修改对象 + * @param key 键 + * @param value 值 + */ + public static void addHeader(ServerHttpRequest.Builder mutate, String key, Object value) { + if (StringUtils.isEmpty(key)){ + log.warn("添加请求头参数键不可以为空"); + return; + } + if (value == null) { + log.warn("添加请求头参数:[{}]值为空",key); + return; + } + String valueStr = value.toString(); + mutate.header(key, valueStr); + log.info("添加请求头参数成功 - 键:[{}] , 值:[{}]", key , value); + } + + /** + * 删除请求头参数 + * @param mutate 修改对象 + * @param key 键 + */ + public static void removeHeader(ServerHttpRequest.Builder mutate, String key) { + if (StringUtils.isEmpty(key)){ + log.warn("删除请求头参数键不可以为空"); + return; + } + mutate.headers(httpHeaders -> httpHeaders.remove(key)).build(); + log.info("删除请求头参数 - 键:[{}]",key); + } + + /** + * 错误结果响应 + * @param exchange 响应上下文 + * @param msg 响应消息 + * @return + */ + public static Mono errorResponse(ServerWebExchange exchange, String msg, HttpStatus httpStatus) { + ServerHttpResponse response = exchange.getResponse(); + //设置HTTP响应头状态 + response.setStatusCode(httpStatus); + //设置HTTP响应头文本格式 + response.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/json"); + //定义响应内容 + Result result = Result.error(msg); + String resultJson = JSONObject.toJSONString(result); + log.error("[鉴权异常处理]请求路径:[{}],异常信息:[{}],响应结果:[{}]", exchange.getRequest().getPath(), msg, resultJson); + DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes()); + //进行响应 + return response.writeWith(Mono.just(dataBuffer)); + } + + /** + * 错误结果响应 + * @param exchange 响应上下文 + * @param msg 响应消息 + * @return + */ + public static Mono errorResponse(ServerWebExchange exchange, String msg) { + ServerHttpResponse response = exchange.getResponse(); + //设置HTTP响应头状态 + response.setStatusCode(HttpStatus.OK); + //设置HTTP响应头文本格式 + response.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/json"); + //定义响应内容 + Result result = Result.error(msg); + String resultJson = JSONObject.toJSONString(result); + log.error("[鉴权异常处理]请求路径:[{}],异常信息:[{}],响应结果:[{}]", exchange.getRequest().getPath(), msg, resultJson); + DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes()); + //进行响应 + return response.writeWith(Mono.just(dataBuffer)); + } + + +} diff --git a/bwie-gateway/src/main/resources/bootstrap.yml b/bwie-gateway/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..3e1609f --- /dev/null +++ b/bwie-gateway/src/main/resources/bootstrap.yml @@ -0,0 +1,29 @@ +# Tomcat +server: + port: 18080 +# Spring +spring: + application: + # 应用名称 + name: bwie-gateway + profiles: + # 环境配置 + active: dev + main: + # 允许使用循环引用 + allow-circular-references: true + # 允许定义相同的bean对象 去覆盖原有的 + allow-bean-definition-overriding: true + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 192.168.59.128:8848 + config: + # 配置中心地址 + server-addr: 192.168.59.128:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/bwie-gateway/target/bwie-gateway-1.0-SNAPSHOT.jar b/bwie-gateway/target/bwie-gateway-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..e7b7e890fbc92ca65d0c769a5c9beb1bf1fbd307 GIT binary patch literal 9115 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 X(v_8fc>ctL{P?1KEdNTlPv8C@GOi?% literal 0 HcmV?d00001 diff --git a/bwie-gateway/target/classes/bootstrap.yml b/bwie-gateway/target/classes/bootstrap.yml new file mode 100644 index 0000000..3e1609f --- /dev/null +++ b/bwie-gateway/target/classes/bootstrap.yml @@ -0,0 +1,29 @@ +# Tomcat +server: + port: 18080 +# Spring +spring: + application: + # 应用名称 + name: bwie-gateway + profiles: + # 环境配置 + active: dev + main: + # 允许使用循环引用 + allow-circular-references: true + # 允许定义相同的bean对象 去覆盖原有的 + allow-bean-definition-overriding: true + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 192.168.59.128:8848 + config: + # 配置中心地址 + server-addr: 192.168.59.128:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/bwie-gateway/target/classes/com/bwie/gateway/GatewayApplication.class b/bwie-gateway/target/classes/com/bwie/gateway/GatewayApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..5f45297d8e09381dab390e064adeb31ebb0f83ce GIT binary patch literal 742 zcma)4%TC)s6g?9H32w?Gyb7g@3RMbOFdM`s2niy=#(k(k>4MeR3}&c36OG5D{VY}> z7X5&JRMk5U5|)}ucyX`pW6op7zyCb`0Bih!(ynk{8VI-wC5s9snZTkEYhK{%GXcLy1Q06!-p_78IQ(F@Qn zCH7O1=e;TSwma1y*>duS~z^?!R literal 0 HcmV?d00001 diff --git a/bwie-gateway/target/classes/com/bwie/gateway/config/IgnoreWhiteConfig.class b/bwie-gateway/target/classes/com/bwie/gateway/config/IgnoreWhiteConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..a84d0200dec19a49eeccf18abe06212fb4622641 GIT binary patch literal 2590 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 literal 0 HcmV?d00001 diff --git a/bwie-gateway/target/classes/com/bwie/gateway/utils/GatewayUtils.class b/bwie-gateway/target/classes/com/bwie/gateway/utils/GatewayUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..ab7f2c5419d418b2c8c389eaf221511ccbdf6e69 GIT binary patch literal 6222 zcmd5=Yj_mZ8GdK8o7rpz2~lXHfFVT4g*YhKYJ!m_TqRs2O2l~S>}HY-+3c({vx(H& z3Q~$z3oY0ds;DitwHFbkkOaiuZLPiE@0W)J`Q?xP@6-3p%r29#S$KHxc?wT<=A84L z@4Vmpo$ou}nYaEsatgp={5ytP+#kaO_;3m4LyIC_iUhi%(8aS`4EM#j=e>{c~JW+~I;mH`D!ly;w?h@?5XTUFo&%5)H0ZqIGqx z(zPz#lJR*7a!bZYvLQiPol5CeYf`gqo%;G}T;O)vBH(UI>(>WOt55B9oV04|)_`uQ zmaZinV?bBi-S#RDZPXvk=(bbsYi(-Vq77(jQlri7j?fhBSs&k`C!8i>a&dpgAx;U) zF2|}QvQOVC_&RTS36TLUnQ_THH|Qgg5OoI$Rl<~ZM@#gr)zUuCWovb(*X-J$2`(Jn zB1ej)_nQN{N2i3%?-6B!peed#nbt<#PMay4=y&B`Yfz78z2iBhLys?iDA7v?=t1hU z&JcSuuZx8iduljAq zNlff4Z$+`0F9sNwwsM5rI{B1B+tuS!#2{5=l8%IH&jk`As^3g;pNkQdp%h#{SaP?t8tRO7Ccx-2(=x@L?I>8v81k?rG zVaze)OGQNZ9TMi{-C9CK6|tI~$e37?NczV~tli9534Mhj4v%TUgW!6R`xGodgN!dI z*pCAW>QFCX{@C#oqfb2l&f()@N4Ae1Iy$<0``FX3oZa{G>7l1acOO1|;>FWLBWGS3 zk?}Jcs8cl$}ew9w`c5z?UT4kXO^#u05kq zJXhIJNf3=fXXS!Qs&!u#d>MxbdUV(GXZIhvAZRY#Vw#TaSX$c4=JwQLyjX^>@bT3$ zd`-bi__~5`;F}7*g_k8%=G7bkBM=;vaah4CI3nX!1+U?#f^XxPgz9|BV4}x(inN+3 zM^8BocQX13QA?+jMnZE8rk*X#F$#`jNXD>&5uA{5Qo-vuCEliNp! zhDHzVIJ0NxeI5nx96vmIYKP0vyCIEN z*Txg7*Dc%J(rjV`HFcgpqjvI)anW=#b%%{qw<+P4i?SquB4=9+f50CnP!t%Pk3UJM z&7Zj^28&lKYKerN=1F}+9!NfO!slvtCdK-cQN#eVGyQI3b#RMt35)V>yn>VI!E1$p zmNep8TvNL>+Y!lKy}fCQ#EJ~wV zwmRZg8?LGCY>}`yA4eC`B$7P~2jTwCmi*B?sS2XFrob(Vs<&k9i774T@&YrdxMa{W z9KFL3UTgM(Dtj}x9lrJ3>W1u{?ShxNx%rsMrQz)TEVO=&dt(x}U)DK6$LBzwORjB( zEv`+j>d6k%wOUH!#}HaWXL%n+=%%1z_sazF3xJbp5ua0J{8_;W}1B&`ugo41YdzyIp!hhg1qZz)3(pOf4!-7AEtzcR79lnNV!b{Itnv0pm|a*7bNDT;mY>)pTrI8+ ze3SXk8wG!_XG`T%;xkfr9MTcKgxCcXyPa2IA>S2G05{-9wo0%FAEcC+JVLoJpUdip z5ZaF`UPV!Pco>lojx2Z+Q$@45ei(8Q+s6=HS63f?9VMHK8rp{uD?*15D6L;G3?&S) zc9FYw9b$Z+NuaYZ4YN^>N`AGQ!~a$MUrmFqBZ7Ho<(t4)=V8FjxP>jEK_i-6%*(I@ zw-W1oYHDU*5pLsn7@_j1Sjx94MVthRgMz}e523|3Z5xF{>{}QxZHi}FUHu5I0ERI& z#Gf+Bvtt?!EvKQJr#}aKp$}U?EP_<-A}k5z z5SGy3WgHR2{|6E31sD=1HZ9P@nf09H{Z#PPdvJJ!&UD*C1kYw3?#d;sex z7oi>n>#>2<-ND&n=Xp{aDYcY6^w@GfR`PEZ|JwN%!kzS7EAH~SIZHKyd7qoL3tq)_ z9y=syJUi + + + bwie-module + org.example + 1.0-SNAPSHOT + + 4.0.0 + + bwie-es + + + + org.example + bwie-common + + + org.springframework.boot + spring-boot-starter-web + + + org.elasticsearch.client + elasticsearch-rest-high-level-client + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/ESApplication.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/ESApplication.java new file mode 100644 index 0000000..da47cb9 --- /dev/null +++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/ESApplication.java @@ -0,0 +1,22 @@ +package com.bwie.es; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.scheduling.annotation.EnableScheduling; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 启动类 + */ +@SpringBootApplication +@EnableFeignClients +@EnableScheduling +public class ESApplication { + public static void main(String[] args) { + SpringApplication.run(ESApplication.class,args); + } +} diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/config/InitData.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/config/InitData.java new file mode 100644 index 0000000..19e7c09 --- /dev/null +++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/config/InitData.java @@ -0,0 +1,26 @@ +package com.bwie.es.config; + +import com.bwie.es.service.ESService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.Resource; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 启动同步es数据 + */ +@Configuration +public class InitData { + + @Resource + private ESService esService; + + @Bean + public void syncESData(){ + esService.addBatch(); + } +} diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/config/InitEsRestHighLevelClient.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/config/InitEsRestHighLevelClient.java new file mode 100644 index 0000000..2dd97e7 --- /dev/null +++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/config/InitEsRestHighLevelClient.java @@ -0,0 +1,41 @@ +package com.bwie.es.config; + +import com.bwie.es.service.ESService; +import lombok.Data; +import lombok.extern.log4j.Log4j2; +import org.apache.http.HttpHost; +import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestClientBuilder; +import org.elasticsearch.client.RestHighLevelClient; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.Resource; + +/** + * @BelongsProject: day20k-6.12 + * @BelongsPackage: com.bwie.es.conifg + * @Author: LiFan + * @CreateTime: 2023-06-12 14:33 + * @Description: //TODO + * @Version: 1.0 + */ +@Configuration +@ConfigurationProperties(prefix = "es") +@Data +@Log4j2 +public class InitEsRestHighLevelClient { + private String hostname; + private Integer port; + private String scheme; + + @Bean + public RestHighLevelClient RestHighLevelClient() { + return new RestHighLevelClient( + RestClient.builder(new HttpHost(hostname,port,scheme)) + ); + } + + +} diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/controller/ESController.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/controller/ESController.java new file mode 100644 index 0000000..a40b3a6 --- /dev/null +++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/controller/ESController.java @@ -0,0 +1,28 @@ +package com.bwie.es.controller; + +import com.bwie.es.service.ESService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +@RestController +public class ESController { + + @Resource + private ESService esService; + + + @GetMapping("/addBatch") + public void addBatch(){ + esService.addBatch(); + } +} diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/feign/FeignServer.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/feign/FeignServer.java new file mode 100644 index 0000000..6cc4947 --- /dev/null +++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/feign/FeignServer.java @@ -0,0 +1,30 @@ +package com.bwie.es.feign; + +import com.bwie.common.domain.BorrowMoney; +import com.bwie.common.domain.request.BorrowMoneyReq; +import com.bwie.common.result.Result; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +@FeignClient("bwie-server") +public interface FeignServer { + + /** + * 查询借款信息 + * @Parment borrowMoneyReq + * @return + */ + @GetMapping("/giveESData") + public Result> giveESData(); +} diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/service/ESService.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/service/ESService.java new file mode 100644 index 0000000..4939c6d --- /dev/null +++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/service/ESService.java @@ -0,0 +1,21 @@ +package com.bwie.es.service; + +import com.bwie.common.domain.BorrowMoney; + +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +public interface ESService { + + /** + * 批量添加 + * @param + */ + void addBatch(); +} diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/service/impl/ESServiceImpl.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/service/impl/ESServiceImpl.java new file mode 100644 index 0000000..0914c1b --- /dev/null +++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/service/impl/ESServiceImpl.java @@ -0,0 +1,59 @@ +package com.bwie.es.service.impl; + +import com.alibaba.fastjson.JSON; +import com.bwie.common.domain.BorrowMoney; +import com.bwie.common.domain.request.BorrowMoneyReq; +import com.bwie.common.result.Result; +import com.bwie.es.feign.FeignServer; +import com.bwie.es.service.ESService; +import org.elasticsearch.action.bulk.BulkRequest; +import org.elasticsearch.action.index.IndexRequest; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.common.xcontent.XContentType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: es + */ +@Service +public class ESServiceImpl implements ESService { + + @Resource + private RestHighLevelClient restHighLevelClient; + + @Resource + private FeignServer feignServer; + + public static final String INDEX_NAME="borrow"; + + @Override + public void addBatch() { + System.out.println("开始同步"); + Result> listResult = feignServer.giveESData(); + List data = listResult.getData(); + BulkRequest bulkRequest = new BulkRequest(); + System.out.println("同步数据数量 "+data.size()); + data.forEach(obj -> { + bulkRequest.add( + new IndexRequest(INDEX_NAME) + .id(obj.getId().toString()) + .source(JSON.toJSONString(obj),XContentType.JSON) + ); + }); + try { + restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/task/ESTask.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/task/ESTask.java new file mode 100644 index 0000000..62b7e91 --- /dev/null +++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/task/ESTask.java @@ -0,0 +1,27 @@ +package com.bwie.es.task; + +import com.bwie.es.service.ESService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 定时同步es + */ +@Component +public class ESTask { + + @Resource + private ESService esService; + + @Scheduled(cron = "*/10 * * * * ?") + public void esTask(){ + System.out.println("定时任务开始"); + esService.addBatch(); + } +} diff --git a/bwie-module/bwie-es/src/main/resources/bootstrap.yml b/bwie-module/bwie-es/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..29234bc --- /dev/null +++ b/bwie-module/bwie-es/src/main/resources/bootstrap.yml @@ -0,0 +1,22 @@ +server: + port: 9006 +spring: + main: + allow-circular-references: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + application: + name: bwie-es + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + serverAddr: 192.168.59.128:8848 + config: + serverAddr: 192.168.59.128:8848 + fileExtension: yml + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/bwie-module/bwie-es/target/bwie-es-1.0-SNAPSHOT.jar b/bwie-module/bwie-es/target/bwie-es-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..f5a53199799f7ac38514f3b4b8e83f17eafeed46 GIT binary patch literal 9700 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 G0`36!C7-JR literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-es/target/classes/com/bwie/es/config/InitEsRestHighLevelClient.class b/bwie-module/bwie-es/target/classes/com/bwie/es/config/InitEsRestHighLevelClient.class new file mode 100644 index 0000000000000000000000000000000000000000..7918e9eb9e8cffd1025b596505f23c2ca61926d0 GIT binary patch literal 3533 zcmb7H>sK395dUqmn_a?EQYy5u5Boq3&seRmP^vA`f`y8pD79*ru#j!TZrp6z`hNSZ z|A2ph{n8J5RN7;Y9{r-{_&53b&F+Q-2#OqX@7%dFbLY zZD_|O8D3B04ZJDT4FyYS9E7c7InBKl8A`%>{WbRausGtftWg+kh*x zXP_eUTLydsRUv~kYPcpRT-R|!L9*YiD<8caAVr78QG zT^=htwo9c)a($r(cG;>1PO)lRezBA;CL>L4TUaOD{}v3pMkmV`B%kgVBZMx*1Bl^jBUB}ICawDNv9a|T;IHc_7yvr zSP$uaj6jQ^>J*v@%~;}dVEep^PQ~b$ zo@S-`DWcUzk@`6)`>mQ)rrw4lURbY@gO7AH5M`(jhNi zbc7oXsO^e28;tf)pbjT9+O97<<^rpDb=susE?_tp^t@mlc@^KQ*nZ#;;TyDP*7*X)if=DFYyb(Hc^s7T-)ZqF z*w@r8NdUkCXV8mj<-#`gYzbOg)@wIb-ZWdeS9E`4`s;n-2YRKCMI#x z#G`o3#E4Lj;JC>q%HesOSFm?;{hX;eiAx;Mm zM`<4=MEXq3;<%1aO?-yWO&r1ltft1P5y}lVsZPNY+b6y z{xvW4?x`=R;Rv6}gM6q} z+%L%{l@Nf3Gcg{{gg567zR?fjA?`oS)kVmg4dm`YSx|pOVj+2tL;rV3@}sUnL5(E0gL@O$r#+O&$$R7Fv6m+Nnvw z)w;>v&?K8)$2cj2QlJe}H~zpb9q0Z;kB$lc8_J*97m;nvWIgSp45%vaNu2hl>5(8wlSs-% zwpLFBqG{yY@wNM)+9{Yq)=N4{2_F zC*sf;m|O3gQf2bj*42I&`@h8jDNsJr9HaKPpU%9*Rf3U~=G#eXp7Se|dbNs$e*nyU B?}z{Z literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-es/target/classes/com/bwie/es/controller/ESController.class b/bwie-module/bwie-es/target/classes/com/bwie/es/controller/ESController.class new file mode 100644 index 0000000000000000000000000000000000000000..0d0f78bc6ce76fb26ac1915c4daa37ae509f78f4 GIT binary patch literal 733 zcma)4O>fgc5Pjq3qjpR`0&OXwR8@u4_P}0xs06A+tHQ;A)Sz5At(|SU#o3M4n}olG zgoNP058y{3#%YuqAtVl-(Hp;+_hxs0{`&p{z%h0s)bTJx4cjd|LZ^wxP3#atRdkh` z=u8oIlgti9I@L<3LKL@UanYRghtKxq4}g_0nr=3PLBjkrVkz$VE|H zs=|(4rns~5LL2Q*2}=iuJwol=_E~W?(MG);4^!pdOCCsQCpMFLPdZ)Vd9miNH7h** z!(V2NcQ((JV~ghtz*@_)-#?Q+yCxhb)(u24a@q{8oE)mDbsxo4r6Sd)U-kN0`8RSj zVjfSZPh>u3H=(#26?JF3ywau3^{V8va&f}Re{1o%_=@8g5n3@CXg2XA#yVPr{pwZx zV^zXhsVs772I5_MqcTs}sW$#~huGs6Q0Esx2ueZD%ZwVFL(Tzb_QEk{Bsdf2`q5X= z=h^Rj97{6L#tO&ymVi~PG2(OK=3v%*!l>j$M_&+p!xG_cLc|>KD-6-8Oo`@GN<%B$ W+ve~72T*|r%-`T@fX#*7E#Nl*k*)Fo literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-es/target/classes/com/bwie/es/feign/FeignServer.class b/bwie-module/bwie-es/target/classes/com/bwie/es/feign/FeignServer.class new file mode 100644 index 0000000000000000000000000000000000000000..84d30e2f6d3199436744e3fac45ce80b36c09d93 GIT binary patch literal 498 zcmah`O-lnY5S`S1*sj)k^x(mp9&`|TYZ3gamn}jU1o4#JPM6f(WJ$6u{xuK&0DqJ? zyFw`_NC-2N_h#PA_SFEXV~XreNP1{31(BC;#87gg^9F8>ruGE>gc6r>kb2G)7EnIi33DX2Dh?&>lE zjyF3chgR%&ty d8zTcF0~63r1_nkJpdAb>AQl5FkYr+D0|40hA-@0s literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-es/target/classes/com/bwie/es/service/impl/ESServiceImpl.class b/bwie-module/bwie-es/target/classes/com/bwie/es/service/impl/ESServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..f7b23c50ff62c98b003992c2bff301b52491a052 GIT binary patch literal 4069 zcmbVP`F9h?9si6iy!Lt%j0vO;fq>(J!Qdrr+B7ktv5hIB@=?n%CMiu<(pX-5wJUa4 z#!io<=|S5hO?ssFebFmvpi~4%)BfDoe*@m@KhgFxyRs}>vLE#6X=irkdw#yh%>MH~ zH{JvADE_Xa2NP}h1SVUN)-i>r+wcIU+i?anI?m!54bN)$q>eUBXgH^%9TTnilp3FF zM=L(9W|n$nIw^5Zt=US%d>a3iPKuKW|FM3PL*@NXyU8nb~O1 zoUErG5a^mLxuIQ<({^BI969K^UTB53=LQ11QuEfLwPae=MJ2>5`B_QM_E~A?-L&)< zr7!SMD(e-@%mrJTGBBep^W-W4>GkB;iIJJ-#s)`61Ue(prenEzGadT2n=AO4BYB9djhDjOS~TZ&crE<#Iz-n4J?4l)57}(e}*b_{dUL78NSW562Ed z;!tvkca7Whzu>th!@?Z}6bF(ga#m;wbi~q1q3xI{3gAwArsOP4%JU@#Mxd`j;Zt~uoSzIS2NbLH~DasC88{Qt2s ztm)9oE{s~mC^F1;4PS^Wh(#c<&9MrZoYk{}e$P>X$=ufKBp&EIJFvVpJQqJcx`)9_UTU&Gf4nSqz_iom@} zm08UrfrIrGzd_yz+#fO5RNYX?c5V%L1B8vCwhJ*Bh5*O-u(=vad0;t{pR(^Y)?~NuP+C)4tw= zbycyxk7;=s#?<$bdOb3@L+GUR{DC{ z*3gTW1lF1nuMX(=3$Ct1C5|0Y(Rl>_Rp3C)nNW#RgQllIY_YPc?+cv1n|@TWKPu7L zk{kDMb+nZV(x<=Ltmltd>X_MEL23h1Wx|2_lBk~N(aA9$ol9&_+KG{qgHNZX*by2u z&xTAi=I|!+8{97v>MRm?>2C12V{01OUEj)rBB4|lkgZV>M2E|iZ)KT6-PP*cFs=ey zn8-<{>5esNoODB(kHWKUHMc8^0!=m<1{>yeJ$@CF>suCW?ot+7j-9bGmO0B?+I+wR z{&aeLjHf{8smV%y@2^$2lEZanM4A2dCRE&C%6fFm4b2&*pPEeZ5Msf_`i?dVOnixH z$VgQ!@$FCGe64Yn+PhnEn}oX|cFnvY2t2b%>NQ~7L`mJXN<-PeHQY3C3T#E)tBGK{ zi{64XQ_)R@$DTFIAbb8YFLAsbth{OX8zD-0-a@I!a3)<>`op}62a@IauUf<^^5O&Z zl;!3e8T7=A1N9-USy{uVqFGCR=bN$0&3S9va7FU4ZHypO0|G?2G_5>FXodLBIDfV%@Y_1xDFKagmjraCRCWk8lFon($;t2Tpf@T1UCr fgt2O>jPv~l|2m1^!Mnu0i%`Uo&e36sS>*o*`th{ziw0-+)(;sf{&!e=1vOadeVS>roC_Br?5Yk&Ls`740yST7)l#XL@7DTmVqEMp}P z3#&z(!C4FEESzV^%gB}Cp7JEaa>LU;Z|y6|WyGT)%mrWI^R#)B$ z0&Rp*I*1q+8#`i8JmumK$TwxA`=KX^nZ2n3Wo|K~Yimu0%!Y1L#_5I%N0xh)E@zKr5Oh8qnXZu6)Ys$ly`D15oE!(ASE z9og=82^;t44pG@Afs7aGfT85@YgbpC(YVb}aFY@qsMuX`m~TCuJPH;r+qi-f z!`%3ljFrqV6Pw^&K_xwE?MTl|K<+_gq)+YEecGrbcf*zDkEt)lHK7zf6+N41Ou`IS z+&t5zZd7VRVv>be)W3RseM{r6{&^@2Ini$46~^mem0nzqo+CplE{tN4R#}QR#S}$q z49(ND;uIOhDd!{DyJUNY=J+shoCb)L96%Yfv|>0x + + + bwie-module + org.example + 1.0-SNAPSHOT + + 4.0.0 + + bwie-server + + + + + + + org.example + bwie-common + + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.alibaba + druid-spring-boot-starter + 1.2.8 + + + + + mysql + mysql-connector-java + + + + + + + + + + + + com.baomidou + mybatis-plus-boot-starter + 3.3.1.tmp + + + + + com.baomidou + mybatis-plus-generator + 3.3.1.tmp + + + + org.apache.velocity + velocity-engine-core + 2.2 + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.4.1 + + + + + com.github.tobato + fastdfs-client + 1.26.5 + + + + + com.github.xiaoymin + knife4j-spring-boot-starter + 2.0.9 + + + + + org.springframework.boot + spring-boot-starter-amqp + + + redis.clients + jedis + + + org.redisson + redisson + 3.16.0 + + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.9.10 + + + + diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/ServerApplication.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/ServerApplication.java new file mode 100644 index 0000000..e5b375b --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/ServerApplication.java @@ -0,0 +1,22 @@ +package com.bwie.server; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +@SpringBootApplication +@EnableFeignClients +@MapperScan("com.bwie.server.mapper") +public class ServerApplication { + public static void main(String[] args) { + SpringApplication.run(ServerApplication.class,args); + } +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/config/ConfirmCallbackConfig.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/ConfirmCallbackConfig.java new file mode 100644 index 0000000..55d95e4 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/ConfirmCallbackConfig.java @@ -0,0 +1,48 @@ +package com.bwie.server.config; + +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 消息发送确认配置 + * 消息发送到交换机的回调 + */ +@Component +@Log4j2 +public class ConfirmCallbackConfig implements RabbitTemplate.ConfirmCallback { + + @Autowired + private RabbitTemplate rabbitTemplate; + + /** + * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 + */ + @PostConstruct + public void init() { + rabbitTemplate.setConfirmCallback(this); + } + + /** + * 交换机不管是否收到消息的一个回调方法 + * + * @param correlationData 消息相关数据 + * @param ack 交换机是否收到消息 + * @param cause 失败原因 + */ + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + if (!ack) { + String exchange = correlationData.getReturned().getExchange(); + String message = correlationData.getReturned().getMessage().getBody().toString(); + // 发送异常 + log.error("消息:{},发送到交换机:{}失败,原因是:{}", message, exchange, cause); + // TODO 可以把异常信息 以及 消息的内容直接添加到 MYSQL + } + } + +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/config/InitData.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/InitData.java new file mode 100644 index 0000000..a2ef464 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/InitData.java @@ -0,0 +1,53 @@ +package com.bwie.server.config; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.bwie.common.domain.InterestRate; +import com.bwie.server.mapper.InterestRateMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.StringRedisTemplate; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 初始化数据 + */ +@Configuration +public class InitData { + + /** + * 注入redis + */ + @Resource + private StringRedisTemplate stringRedisTemplate; + + /** + * 注入利率持久层 + */ + @Resource + private InterestRateMapper interestRateMapper; + + /** + * 项目启动同步将利率存入redis + */ + @Bean + public void syncInterestRate(){ + //初始化前先删除旧数据 + if (stringRedisTemplate.hasKey(RedisMeta.INTEREST_RATE_INFO)){ + stringRedisTemplate.delete(RedisMeta.INTEREST_RATE_INFO); + } + //填入更新数据 + List interestRates = interestRateMapper.selectList(new QueryWrapper<>()); + interestRates.forEach(obj -> { + stringRedisTemplate.opsForList().rightPush(RedisMeta.INTEREST_RATE_INFO, JSON.toJSONString(obj)); + }); + } + + +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RabbitAdminConfig.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RabbitAdminConfig.java new file mode 100644 index 0000000..cec0147 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RabbitAdminConfig.java @@ -0,0 +1,50 @@ +package com.bwie.server.config; + +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * RabbitAdmin是RabbitMQ的一个Java客户端库,它提供了管理RabbitMQ资源的功能。它是通过与RabbitMQ服务器进行交互来执行管理操作的。 + */ +@Configuration +public class RabbitAdminConfig { + + @Value("${spring.rabbitmq.host}") + private String host; + @Value("${spring.rabbitmq.username}") + private String username; + @Value("${spring.rabbitmq.password}") + private String password; + @Value("${spring.rabbitmq.virtualhost}") + private String virtualhost; + + /** + * 构建 RabbitMQ的连接工厂 + * @return + */ + @Bean + public ConnectionFactory connectionFactory() { + CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); + connectionFactory.setAddresses(host); + connectionFactory.setUsername(username); + connectionFactory.setPassword(password); + connectionFactory.setVirtualHost(virtualhost); + return connectionFactory; + } + + /** + * 自己初始化 RabbitAdmin + * @param connectionFactory + * @return + */ + @Bean + public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) { + RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); + rabbitAdmin.setAutoStartup(true); + return rabbitAdmin; + } +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RabbitmqConfig.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RabbitmqConfig.java new file mode 100644 index 0000000..568f7d8 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RabbitmqConfig.java @@ -0,0 +1,15 @@ +package com.bwie.server.config; + +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class RabbitmqConfig { + // 消息转换配置 + @Bean + public MessageConverter jsonMessageConverter() { + return new Jackson2JsonMessageConverter(); + } +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RedisMeta.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RedisMeta.java new file mode 100644 index 0000000..5b0d02c --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RedisMeta.java @@ -0,0 +1,16 @@ +package com.bwie.server.config; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: redis 元数据 + */ +public class RedisMeta { + + /** + * 存放利率集合键 + */ + public static final String INTEREST_RATE_INFO = "interestRateInfo"; +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RedissonConfig.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RedissonConfig.java new file mode 100644 index 0000000..4633eae --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/RedissonConfig.java @@ -0,0 +1,33 @@ +package com.bwie.server.config; + +import org.redisson.Redisson; +import org.redisson.api.RedissonClient; +import org.redisson.config.Config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.io.IOException; + +/** + * @BelongsProject: demo02 + * @BelongsPackage: com.bw.config + * @Author: zhupengfei + * @CreateTime: 2022-12-24 09:26 + */ + +@Configuration +public class RedissonConfig { + + @Bean(destroyMethod="shutdown") // 服务停止后调用 shutdown 方法。 + public RedissonClient redisson() throws IOException { + System.out.println("配置类初始加载......"); + // 1.创建配置 + Config config = new Config(); + // 集群模式 + // config.useClusterServers().addNodeAddress("127.0.0.1:6379", "127.0.0.1:6378"); + // 2.根据 Config 创建出 RedissonClient 实例。 + config.useSingleServer().setAddress("redis://127.0.0.1:6379"); + return Redisson.create(config); + } + +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/config/ReturnCallbackConfig.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/ReturnCallbackConfig.java new file mode 100644 index 0000000..a8b95b0 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/config/ReturnCallbackConfig.java @@ -0,0 +1,41 @@ +package com.bwie.server.config; + +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.ReturnedMessage; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 消息发送到队列的确认 + */ +@Component +@Log4j2 +public class ReturnCallbackConfig implements RabbitTemplate.ReturnsCallback { + + @Autowired + private RabbitTemplate rabbitTemplate; + + /** + * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 + */ + @PostConstruct + public void init() { + rabbitTemplate.setReturnsCallback(this); + } + + /** + * 消息发送失败 则会执行这个方法 + * + * @param returnedMessage the returned message and metadata. + */ + @Override + public void returnedMessage(ReturnedMessage returnedMessage) { + log.error("消息:{},被交换机:{} 回退!退回原因为:{}", + returnedMessage.getMessage().toString(), returnedMessage.getExchange(), returnedMessage.getReplyText()); + // TODO 回退了所有的信息,可做补偿机制 + } + +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/consumer/RabbitConsumer.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/consumer/RabbitConsumer.java new file mode 100644 index 0000000..75566d8 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/consumer/RabbitConsumer.java @@ -0,0 +1,74 @@ +package com.bwie.server.consumer; + +import com.bwie.common.domain.BorrowMoney; +import com.bwie.common.domain.request.BorrowMoneyReq; +import com.bwie.server.feign.FeignES; +import com.bwie.server.mapper.BorrowMoneyMapper; +import com.rabbitmq.client.Channel; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +@Component +public class RabbitConsumer { + + @Resource + private StringRedisTemplate stringRedisTemplate; + + @Autowired + private FeignES feignES; + + @Resource + private BorrowMoneyMapper borrowMoneyMapper; + + @RabbitListener(queuesToDeclare = @Queue(value = "one")) + public void listen(String msg, Message message, Channel channel){ + + String messageId = message.getMessageProperties().getMessageId(); + Long one = stringRedisTemplate.opsForSet().add("one", messageId); + long deliveryTag = message.getMessageProperties().getDeliveryTag(); + if (one>0){ + //根据msg 也就是id查询当前借款表数据状态 被借出不操作 否则状态改为未放款 + BorrowMoneyReq borrowMoneyReq = new BorrowMoneyReq(); + borrowMoneyReq.setId(Integer.parseInt(msg)); + List list = borrowMoneyMapper.selectBorrowMoney(borrowMoneyReq); + BorrowMoney borrowMoney = list.get(0); + //判断状态 + if (borrowMoney.getStatus()==0){ + //代表没人资助 更改状态并发消息 + borrowMoneyMapper.upd(borrowMoney.getId(),2); + //es更新数据 + feignES.addBatch(); + //没手机就控制台打印一下了 + System.out.println("您的借款暂时无人资助 "); + } + //确认收到消息以及不批量确认 + try { + channel.basicAck(deliveryTag,false); + } catch (IOException e) { + e.printStackTrace(); + } + }else { + //消息重复 + try { + channel.basicReject(deliveryTag,true); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/controller/BorrowMoneyController.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/controller/BorrowMoneyController.java new file mode 100644 index 0000000..31aacd3 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/controller/BorrowMoneyController.java @@ -0,0 +1,66 @@ +package com.bwie.server.controller; + +import com.bwie.common.domain.BorrowMoney; +import com.bwie.common.domain.request.BorrowMoneyReq; +import com.bwie.common.result.Result; +import com.bwie.server.service.BorrowMoneyService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 借款控制类 + */ +@RestController +public class BorrowMoneyController { + + @Resource + private BorrowMoneyService borrowMoneyService; + + /** + * 查询借款信息 + * @Parment borrowMoneyReq + * @return + */ + @PostMapping("/selectBorrowMoney") + public Result> selectBorrowMoney(@RequestBody BorrowMoneyReq borrowMoneyReq){ + return borrowMoneyService.selectBorrowMoney(borrowMoneyReq); + } + + + @PostMapping("/calculate") + public Result calculate(@RequestBody BorrowMoney borrowMoney){ + return borrowMoneyService.calculate(borrowMoney); + } + + @PostMapping("/addBorrowMoney") + public Result addBorrowMoney(@RequestBody BorrowMoney borrowMoney){ + return borrowMoneyService.addBorrowMoney(borrowMoney); + } + + + /** + * 查询借款信息 + * @Parment borrowMoneyReq + * @return + */ + @GetMapping("/giveESData") + public Result> giveESData(){ + return borrowMoneyService.giveESData(); + } + + /** + * 更改借款状态 + * @Parment borrowMoneyReq + * @return + */ + @GetMapping("/upd") + public Result upd(@RequestParam Integer id){ + return borrowMoneyService.upd(id); + } +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/controller/InterestRateController.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/controller/InterestRateController.java new file mode 100644 index 0000000..a8f9e65 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/controller/InterestRateController.java @@ -0,0 +1,36 @@ +package com.bwie.server.controller; + +import com.bwie.common.domain.InterestRate; +import com.bwie.common.result.Result; +import com.bwie.server.service.InterestRateService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 控制层 + */ +@RestController +public class InterestRateController { + + /** + * 注入业务层 + */ + @Resource + private InterestRateService interestRateService; + + /** + * 获取利率 + * @return + */ + @GetMapping("/selectInterestRate") + public Result> selectInterestRate(){ + return interestRateService.selectInterestRate(); + } +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/exception/AllException.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/exception/AllException.java new file mode 100644 index 0000000..fc3d3be --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/exception/AllException.java @@ -0,0 +1,28 @@ +package com.bwie.server.exception; + +import cn.hutool.http.server.HttpServerRequest; +import com.bwie.common.result.Result; +import lombok.extern.log4j.Log4j2; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 统一异常处理 + */ +@RestControllerAdvice +@Log4j2 +public class AllException { + + + @ExceptionHandler(Exception.class) + public Result AllException(HttpServerRequest request,Throwable throwable){ + String methodName = throwable.getStackTrace()[0].getMethodName(); + log.info("路径 {} 发生异常,方法名 {}" , request.getURI(),methodName); + return Result.error(null,"系统异常"); + } +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/feign/FeignES.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/feign/FeignES.java new file mode 100644 index 0000000..c9b5d49 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/feign/FeignES.java @@ -0,0 +1,24 @@ +package com.bwie.server.feign; + +import com.bwie.common.domain.response.UserRes; +import com.bwie.common.result.Result; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +@FeignClient("bwie-es") +public interface FeignES{ + /** + * 获取用户信息 + * + * @return + */ + @GetMapping("/addBatch") + void addBatch(); +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/mapper/BorrowMoneyMapper.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/mapper/BorrowMoneyMapper.java new file mode 100644 index 0000000..b38416b --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/mapper/BorrowMoneyMapper.java @@ -0,0 +1,44 @@ +package com.bwie.server.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.bwie.common.domain.BorrowMoney; +import com.bwie.common.domain.request.BorrowMoneyReq; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +public interface BorrowMoneyMapper extends BaseMapper { + /** + * 查询借款表 + * @param borrowMoneyReq + * @return + */ + List selectBorrowMoney(BorrowMoneyReq borrowMoneyReq); + + /** + * 给es数据 + * @return + */ + List giveESData(); + + /** + * 更改状态 + * @param id + * @return + */ + Integer upd(@Param("id") Integer id, @Param("status") Integer status); + + /** + * 添加 + * @param borrowMoney + * @return + */ + Integer addBorrowMoney(BorrowMoney borrowMoney); +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/mapper/InterestRateMapper.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/mapper/InterestRateMapper.java new file mode 100644 index 0000000..3c3c581 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/mapper/InterestRateMapper.java @@ -0,0 +1,14 @@ +package com.bwie.server.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.bwie.common.domain.InterestRate; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 利率持久层 + */ +public interface InterestRateMapper extends BaseMapper { +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/service/BorrowMoneyService.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/service/BorrowMoneyService.java new file mode 100644 index 0000000..d70dbb1 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/service/BorrowMoneyService.java @@ -0,0 +1,50 @@ +package com.bwie.server.service; + +import com.bwie.common.domain.BorrowMoney; +import com.bwie.common.domain.request.BorrowMoneyReq; +import com.bwie.common.result.Result; + +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +public interface BorrowMoneyService { + + /** + * 查询借款信息 + * @return + */ + Result> selectBorrowMoney(BorrowMoneyReq borrowMoneyReq); + + /** + * 计算 + * @param borrowMoney + * @return + */ + Result calculate(BorrowMoney borrowMoney); + + /** + * 添加借款信息 + * @param borrowMoney + * @return + */ + Result addBorrowMoney(BorrowMoney borrowMoney); + + + /** + * 给予es数据 + * @return + */ + Result> giveESData(); + + /** + * 更改借款状态 + * @return + */ + Result upd(Integer id); +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/service/InterestRateService.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/service/InterestRateService.java new file mode 100644 index 0000000..9d54fa3 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/service/InterestRateService.java @@ -0,0 +1,22 @@ +package com.bwie.server.service; + +import com.bwie.common.domain.InterestRate; +import com.bwie.common.result.Result; + +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: + */ +public interface InterestRateService { + + /** + * 查看利率 + * @return + */ + Result> selectInterestRate(); +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/service/impl/BorrowMoneyServiceImpl.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/service/impl/BorrowMoneyServiceImpl.java new file mode 100644 index 0000000..479a312 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/service/impl/BorrowMoneyServiceImpl.java @@ -0,0 +1,176 @@ +package com.bwie.server.service.impl; + +import com.alibaba.fastjson.JSON; +import com.bwie.server.utils.DelayedQueue; +import com.bwie.common.constants.TokenConstants; +import com.bwie.common.domain.BorrowMoney; +import com.bwie.common.domain.request.BorrowMoneyReq; +import com.bwie.common.domain.response.UserRes; +import com.bwie.common.result.Result; +import com.bwie.common.utils.JwtUtils; +import com.bwie.server.feign.FeignES; +import com.bwie.server.mapper.BorrowMoneyMapper; +import com.bwie.server.service.BorrowMoneyService; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.concurrent.DelayQueue; +import java.util.concurrent.TimeUnit; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 业务实现类 + */ +@Service +public class BorrowMoneyServiceImpl implements BorrowMoneyService { + + /** + * 注入借款持久层 + */ + @Resource + private BorrowMoneyMapper borrowMoneyMapper; + + /** + * 远程调用鉴权 查询当前用户信息 + */ + @Resource + private FeignES feignES; + + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Resource + private HttpServletRequest request; + + @Resource + private DelayedQueue delayedQueue; + + @Resource + private RedissonClient redissonClient; + + + /** + * 查询借款信息 + * @Parment borrowMoneyReq + * @return + */ + @Override + public Result> selectBorrowMoney(BorrowMoneyReq borrowMoneyReq) { + UserRes data = getInfo(); + //查询当前用户权限为投资人还是借款人 + Integer roleId = data.getRoleId(); + if (roleId==1){ //借款人 查看自己 + borrowMoneyReq.setUserId(data.getId()); + } + List borrowMonies = borrowMoneyMapper.selectBorrowMoney(borrowMoneyReq); + return Result.success(borrowMonies); + } + + private UserRes getInfo(){ + String userKey = JwtUtils.getUserKey(request.getHeader("token")); + return JSON.parseObject(stringRedisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey), UserRes.class); + } + + /** + * 计算 + * @param borrowMoney + * @return + */ + @Override + public Result calculate(BorrowMoney borrowMoney) { + //借款金额 + Integer borrowMoney1 = borrowMoney.getBorrowMoney(); + //日利率 + Double interest = borrowMoney.getInterest(); + //月利率 综合利率 + double v = interest * 30; + //还款期数 + Integer repaymentPlan = borrowMoney.getRepaymentPlan(); + // 手续费计算公式:比如在2022-11-22日借款12000元,分6期还款,按照利率计算为:0.003% + double one = borrowMoney1 * interest; + // 计算公式为: + // 每月还本付息金额=(本金/还款月数)+(本金-累计已还本金)×月利率 + // 每月本金=总本金/还款月数 + // 每月利息=(本金-累计已还本金)×月利率 + double v1 = (borrowMoney1/repaymentPlan) * v + borrowMoney1/repaymentPlan; + // 还款总额= 贷款额 * 月利率 + 贷款额 + double num = borrowMoney1 * v + borrowMoney1; + //创建返回对象 + BorrowMoney borrowMoneyRes = new BorrowMoney();; + //综合利率 /月利率 + borrowMoneyRes.setInterest(v); + //每月还款 + borrowMoneyRes.setEveryMonthMoney(v1); + //还款总额 + borrowMoneyRes.setBorrowMoney((int) num); + //手续费 + borrowMoneyRes.setHandlingCharge(one); + return Result.success(borrowMoneyRes); + } + + //开启事务 + @Transactional + @Override + public Result addBorrowMoney(BorrowMoney borrowMoney) { + //执行添加操作 + double v = 1 + borrowMoney.getInterest(); + Integer borrowMoney1 = borrowMoney.getBorrowMoney(); + double v2 = borrowMoney1; + double money = v2 / v; + + //转为int + borrowMoney.setBorrowMoney((int) money); + borrowMoney.setUserId(getInfo().getId()); + //执行添加 + Integer i = borrowMoneyMapper.addBorrowMoney(borrowMoney); + System.out.println(borrowMoney.getId()); + //同步es + feignES.addBatch(); + Integer id = borrowMoney.getId(); + //先设置三十秒看效果 + delayedQueue.sendDelayedQueue("one",id.toString(),30000); + return Result.success(); + } + + @Override + public Result> giveESData() { + List list = borrowMoneyMapper.giveESData(); + return Result.success(list); + } + + /** + * 更改状态 + * @return + */ + @Override + public Result upd(Integer id) { + RLock one = redissonClient.getLock("one"); + try { + //获取锁 + one.tryLock(2,5, TimeUnit.MINUTES); + //执行操作 + Integer upd = borrowMoneyMapper.upd(id,1); + if (upd > 0 ){ + one.unlock(); + //es更新数据 + feignES.addBatch(); + return Result.success(); + } + one.unlock(); + return Result.error("","已经被投资过了"); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/service/impl/InterestRateServiceImpl.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/service/impl/InterestRateServiceImpl.java new file mode 100644 index 0000000..a60f232 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/service/impl/InterestRateServiceImpl.java @@ -0,0 +1,50 @@ +package com.bwie.server.service.impl; + +import com.alibaba.fastjson.JSON; +import com.bwie.common.domain.InterestRate; +import com.bwie.common.result.Result; +import com.bwie.server.config.RedisMeta; +import com.bwie.server.mapper.InterestRateMapper; +import com.bwie.server.service.InterestRateService; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 利率业务层 + */ +@Service +public class InterestRateServiceImpl implements InterestRateService { + + /** + * 注入redis 通过redis获取利率信息 + */ + @Resource + private StringRedisTemplate stringRedisTemplate; + + + /** + * 通过redis获取利率信息 + * @return + */ + @Override + public Result> selectInterestRate() { + //获取集合信息 + List range = stringRedisTemplate.opsForList().range(RedisMeta.INTEREST_RATE_INFO, 0, -1); + //断言集合不能为空 + assert range != null; + //转类型并返回 + List collect = range + .stream() + .map(obj -> JSON.parseObject(obj, InterestRate.class)) + .collect(Collectors.toList()); + return Result.success(collect); + } +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/utils/DLXQueue.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/utils/DLXQueue.java new file mode 100644 index 0000000..021ab64 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/utils/DLXQueue.java @@ -0,0 +1,77 @@ +package com.bwie.server.utils; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +@Component +public class DLXQueue { + // routingKey + private static final String DEAD_ROUTING_KEY = "dead.routingkey"; + private static final String ROUTING_KEY = "routingkey"; + private static final String DEAD_EXCHANGE = "dead.exchange"; + private static final String EXCHANGE = "common.exchange"; + @Autowired + RabbitTemplate rabbitTemplate; + @Resource + RabbitAdmin rabbitAdmin; + + /** + * 发送死信队列,过期后进入死信交换机,进入死信队列 + * + * @param queueName 队列名称 + * @param deadQueueName 死信队列名称 + * @param params 消息内容 + * @param expiration 过期时间 毫秒 + */ + public void sendDLXQueue(String queueName, String deadQueueName, Object params, Integer expiration) { + /** + * ----------------------------------先创建一个ttl队列和死信队列-------------------------------------------- + */ + Map map = new HashMap<>(); + // 队列设置存活时间,单位ms, 必须是整形数据。 + map.put("x-message-ttl", expiration); + // 设置死信交换机 + map.put("x-dead-letter-exchange", DEAD_EXCHANGE); + // 设置死信交换器路由 + map.put("x-dead-letter-routing-key", DEAD_ROUTING_KEY); + /*参数1:队列名称 参数2:持久化 参数3:是否排他 参数4:自动删除队列 参数5:队列参数*/ + Queue queue = new Queue(queueName, true, false, false, map); + rabbitAdmin.declareQueue(queue); + /** + * ---------------------------------创建交换机--------------------------------------------- + */ + DirectExchange directExchange = new DirectExchange(EXCHANGE, true, false); + rabbitAdmin.declareExchange(directExchange); + /** + * ---------------------------------队列绑定交换机--------------------------------------------- + */ + Binding binding = BindingBuilder.bind(queue).to(directExchange).with(ROUTING_KEY); + rabbitAdmin.declareBinding(binding); + /** + * ---------------------------------在创建一个死信交换机和队列,接收死信队列--------------------------------------------- + */ + DirectExchange deadExchange = new DirectExchange(DEAD_EXCHANGE, true, false); + rabbitAdmin.declareExchange(deadExchange); + + Queue deadQueue = new Queue(deadQueueName, true, false, false); + rabbitAdmin.declareQueue(deadQueue); + /** + * ---------------------------------队列绑定死信交换机--------------------------------------------- + */ + // 将队列和交换机绑定 + Binding deadbinding = BindingBuilder.bind(deadQueue).to(deadExchange).with(DEAD_ROUTING_KEY); + rabbitAdmin.declareBinding(deadbinding); + // 发送消息 + rabbitTemplate.convertAndSend(EXCHANGE, ROUTING_KEY, params); + } +} diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/utils/DelayedQueue.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/utils/DelayedQueue.java new file mode 100644 index 0000000..9af60be --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/utils/DelayedQueue.java @@ -0,0 +1,77 @@ +package com.bwie.server.utils; + +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.CustomExchange; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * 发送延迟队列的工具类 + */ +@Component +public class DelayedQueue { + + // routingKey + private static final String DELAYED_ROUTING_KEY = "delayed.routingkey"; + + // 延迟队列交换机 + private static final String DELAYED_EXCHANGE = "delayed.exchange"; + + @Autowired + private RabbitTemplate rabbitTemplate; + + @Resource + private RabbitAdmin rabbitAdmin; + + /** + * 发送延迟队列 + * + * @param queueName 队列名称 + * @param params 消息内容 + * @param expiration 延迟时间 毫秒 + */ + public void sendDelayedQueue(String queueName, Object params, Integer expiration) { + // 先创建一个队列 + Queue queue = new Queue(queueName); + rabbitAdmin.declareQueue(queue); + + // 创建延迟队列交换机 + CustomExchange customExchange = createCustomExchange(); + rabbitAdmin.declareExchange(customExchange); + + // 将队列和交换机绑定 + Binding binding = BindingBuilder.bind(queue).to(customExchange).with(DELAYED_ROUTING_KEY).noargs(); + rabbitAdmin.declareBinding(binding); + + // 发送延迟消息 + rabbitTemplate.convertAndSend(DELAYED_EXCHANGE, DELAYED_ROUTING_KEY, params, msg -> { + // 发送消息的时候 延迟时长 + msg.getMessageProperties().setDelay(expiration); + return msg; + }); + } + + private CustomExchange createCustomExchange() { + Map arguments = new HashMap<>(); + /** + * 参数说明: + * 1.交换机的名称 + * 2.交换机的类型 + * 3.是否需要持久化 + * 4.是否自动删除 + * 5.其它参数 + */ + arguments.put("x-delayed-type", "direct"); + return new CustomExchange(DELAYED_EXCHANGE, "x-delayed-message", true, false, arguments); + } + +} + diff --git a/bwie-module/bwie-server/src/main/java/com/bwie/server/utils/TtlQueue.java b/bwie-module/bwie-server/src/main/java/com/bwie/server/utils/TtlQueue.java new file mode 100644 index 0000000..68258b9 --- /dev/null +++ b/bwie-module/bwie-server/src/main/java/com/bwie/server/utils/TtlQueue.java @@ -0,0 +1,63 @@ +package com.bwie.server.utils; + +import org.springframework.amqp.core.*; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * 发送TTL队列 设置 消息的存活时间 如果超过了存活时间 + * 该条消息还没有被消费 则自动从队列中消息 ,如果配置了死信队列则消息会进入死信队列 + */ +@Component +public class TtlQueue { + // routingKey + private static final String TTL_KEY = "ttl.routingkey"; + private static final String TTL_EXCHANGE = "ttl.exchange"; + + @Autowired + RabbitTemplate rabbitTemplate; + + @Resource + RabbitAdmin rabbitAdmin; + + /** + * 发送TTL队列 + * + * @param queueName 队列名称 + * @param params 消息内容 + * @param expiration 过期时间 毫秒 + */ + public void sendTtlQueue(String queueName, Object params, Integer expiration) { + /** + * ----------------------------------先创建一个ttl队列-------------------------------------------- + */ + Map map = new HashMap<>(); + // 队列设置存活时间,单位ms,必须是整形数据。 + map.put("x-message-ttl", expiration); + /*参数1:队列名称 参数2:持久化 参数3:是否排他 参数4:自动删除队列 参数5:队列参数*/ + Queue queue = new Queue(queueName, true, false, false, map); + rabbitAdmin.declareQueue(queue); + + /** + * ---------------------------------创建交换机--------------------------------------------- + */ + DirectExchange directExchange = new DirectExchange(TTL_EXCHANGE, true, false); + rabbitAdmin.declareExchange(directExchange); + /** + * ---------------------------------队列绑定交换机--------------------------------------------- + */ + // 将队列和交换机绑定 + Binding binding = BindingBuilder.bind(queue).to(directExchange).with(TTL_KEY); + rabbitAdmin.declareBinding(binding); + + // 发送消息 + rabbitTemplate.convertAndSend(TTL_EXCHANGE, TTL_KEY, params); + } +} + diff --git a/bwie-module/bwie-server/src/main/resources/bootstrap.yml b/bwie-module/bwie-server/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..73f2ef7 --- /dev/null +++ b/bwie-module/bwie-server/src/main/resources/bootstrap.yml @@ -0,0 +1,62 @@ +# Tomcat +server: + port: 9004 +# Spring +spring: + main: + allow-circular-references: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + application: + # 应用名称 + name: bwie-server + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 192.168.59.128:8848 + config: + # 配置中心地址 + server-addr: 192.168.59.128:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + rabbitmq: + host: 192.168.59.128 + port: 5672 + username: guest + password: guest + virtual-host: / + publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange) + publisher-returns: true #确认消息已发送到队列(Queue) + listener: + simple: + prefetch: 1 # 每次只能获取一条,处理完成才能获取下一条 + acknowledge-mode: manual # 设置消费端手动ack确认 + retry: + enabled: true # 是否支持重试 + template: + # 只要消息抵达Queue,就会异步发送优先回调return firm + mandatory: true + redis: + host: 127.0.0.1 +fdfs: + so-timeout: 1500 # socket 连接时长 + connect-timeout: 600 # 连接 tracker 服务器超时时长 upload + # 这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流 + tracker-list: 192.168.59.128:22122 + web-server-url: 192.168.59.128:8888 + pool: + jmx-enabled: false + # 生成缩略图 + thumb-image: + height: 500 + width: 500 + + diff --git a/bwie-module/bwie-server/src/main/resources/mapper/BorrowMoneyMapper.xml b/bwie-module/bwie-server/src/main/resources/mapper/BorrowMoneyMapper.xml new file mode 100644 index 0000000..b148258 --- /dev/null +++ b/bwie-module/bwie-server/src/main/resources/mapper/BorrowMoneyMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + insert borrow_money(borrow_time,borrow_money,repayment_plan,interest,status,user_id) + values (now(),#{borrowMoney},#{repaymentPlan},#{interest},0,#{userId}) + + + + + + + update borrow_money set status = #{status} where id = #{id} + + + + + + diff --git a/bwie-module/bwie-server/target/bwie-server-1.0-SNAPSHOT.jar b/bwie-module/bwie-server/target/bwie-server-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..0878ebe54e229ecb31332c064520ee7d0253c49c GIT binary patch literal 28634 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 literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/com/bwie/server/config/ConfirmCallbackConfig.class b/bwie-module/bwie-server/target/classes/com/bwie/server/config/ConfirmCallbackConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..fff542b4fe876b911d4ad51e4233f488e202540c GIT binary patch literal 2287 zcmbtWTXR!Y7+pI}nkGHHSP^ZlK)GmoJt9T0sc2h3kQ8cLtHRSxx|^PooD=ssp>!N) zCzw{nQb7hv;Ap7imo$avv@EJcPhYlW z@%@rr6}5AoR`%p3H3GFymfgT9su{<3vIRBbx?Ugy$8&vw+= z{D5M9pv$>{lJO8p7X>C$+d8>9aIULzCMIOoS~1{UpOk@2Uks`2f@FrK0u%eRakoKT z&CT;HbkG>HNrLo6<@?fHw=gRk5e0_-k3Ebx10o|Lr(@el4;YUGdbTyxC!+F#rIKQ>iY3ogZjiRH z8&6wk!;^8Gw(thd#BtWbn>ZIo#=#NtkzjycM z2Or+M`|-+Wpa1pIwUz5X{IPs%^^w=K-z z9f7{bDWy2xweTJo!`AiWUC1u52n1LHdHXT@?BIQIWZt)&SZ7&fdaNLQUoj;|{sRr$ z$ycV%H+F}>nMWz{EpNm9Hiv~h^l+;l)GGpwc@<2mpsZarD{wf~y=?)7omYLUYO>?i zW?|d*KahSqg(~BzwN~6k#`S#G+EpM)vuYFq-4C^D-I_x?TeF54C&8#UyTk`7)qQD{ z?G|`dc7eSHV~3}nZLGBRw7|L4R^vCERLe8{C@1EHIoTHriMsR$FJDaoM9P9ZR;x-o% zv~x7VAVdd8t15tJ(aD{_b5xFm%EvexxkS$$M0zTyTL(z;3RG#J(mF_@2J){xdqTjy z*jEGm1~F0teVsSa(_2Bbg4j^Bx~Q)pUO~f9>_;TplI^kfX#cNhjKOf$g+}kDHt+&H zOrZ(gWbWnPK*)cBxJ}r@DDCHcC!=(LDm IIa#0h2kZ-l{Qv*} literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/com/bwie/server/config/InitData.class b/bwie-module/bwie-server/target/classes/com/bwie/server/config/InitData.class new file mode 100644 index 0000000000000000000000000000000000000000..0183f3900f9a63078da620831fc5f532e3ffa286 GIT binary patch literal 2659 zcmbVO3sVzU6#i~_tb|1(Qd(-O)uINdT%;CiW37r>(I5yEs(s#UZo-A#y>TBZf21@0 z8J+29u`~Svo&Kgy&)wa?^3Y*Ane5)jIp_P%Gx_`9*M9-Hf~Q3cfcM}8CM{e(hN&Vx z#g!sH!?an=n48ZnTrHvpycb`fGC+DadvOc1M&Nc4cW}2CU*n#IIScn0PKHsS{N|FZ zt8hhnEmuU6;c8U}O&+$)RU;6de6E8{UKf$zfsy2n4kTYbs9IqdUW)xld2&^Ss^-d@ zzON$@DeZ?0r>Yy`nRvm)&LLltp^gJblIDQ&BN@mrS|SqjqScZC!+6!v9N>g8Usb+*7<)AttO(*nP*v>+cU1(+?6bqp zXk8J>vj-3z?Kf1D5LI-WVn8^haLae{3>fgzA!EpXa@)VkR8LjL3qA;aJDW_-^my;^Et4wzK+L4|x<-#z1RHtT> zM8!c;ZxtKEc;CiJ3^IJQzlyS)CWTLQ2&I%y;GEyk79QBBV&1|-8w*&p@d)!a-o<+i zmBgOVo~rAZds{Vv3|nrTwFX(QtEA}p(^v*u{E>OC1xe{zShBH<6@t8_bwnK~T4_YW z{%(9z!fL;TwGzrUzQtn;Pi%aL?``~mA1(Z3<7Ws9H5(4<3}@cpSUZFSVuHwB;Wzn0 zZ9_T{!_5C|Z)&i05k8Px3>V93&F1V@Msr8xnVXi_iCz5ckio8{*Q>&fDdE(uPsny% zx>ODfqx*e&W6M+Fgrwv|ro$L+XBB&tykyB}liuyqA|x6N?;PgfYLP~4lc);Eku5^J zk?WCcK4q2FPQV_3M(jJLEI3ta7<)3H7CfHBX9u6bYUtpOaMr16GY-k+L0!{%McoST z>LB%hx;%PltL&fLMtXt9YdV+B7%&kRuBwTe;0+N*8zGUrzr65}ausQ_NT)r+g~Q^K zOMEIvHm8nKWP6z~^aQH89xcWpc|Uy!QVu9B=5~0KI;?8HS+THgL&39g5oLyRyXB|+ zXL?ieYBKUn(>H_@>42)am*!A=XF*eft6FcyE%JWO_hm5aiZGNkr~b)v%Iu}Rdr$av zSB4|0VkJj3i%9NdkKzjb4&=p;ewjkPT{qv8ndMpGy2~n(6e)7>{DJr!<`2W^x69!y zb%y!7QJ@cvTu=wmuAAON$tjJ^ePK&Wg@MkO=z59nU(wgzT5GgA_9uECzd~^vy#-Xq$6k{` zY@@FL1J?-yH-s*Fj-emp#BG9B9MhOe;D=I(41NrK02Jg=0;T^*1lL7l nvt+#Zgf<0S+JT;+y-VLB32wm0Ci!)Z_J;A7MB_TX!j1m`x{~r3 literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/com/bwie/server/config/RabbitAdminConfig.class b/bwie-module/bwie-server/target/classes/com/bwie/server/config/RabbitAdminConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..bdac91d3413e6ce10ae3399fe9df7e559a9856f2 GIT binary patch literal 1911 zcmbtVYflqF6g^WOg|^oEek&?!DcD8DCqAes`k^QhZKB_%?EtIoF3wI-WBgB=7)Uhn z2l%6m=WY=ptr6pg?!7bj&N+9^%-nwe@#PzU2|P$4hw&sXq>#Y)Aa>%Sc$dVR5bv^h zSH!z2-Zk;ACvhW%3?}7sGl^SC+*asa3L~emyZlnGXs@AzMQ`3&KUkbpIP|0yIKOEs ze&kmhrW6FB)6NfrNMWKJ+C?u~med8So90buUwKudgUDOZH5b}3WA_wBVstE*MtHD4E{kPiw2t;pDbfC@)ClYRvyaal(ZS?gUBe+8MCUh%DK=|+2} z$2&nc#hKoJ(+_+{X?pS_6$&&R)>+HWvLBd7t!CBOrp zlxtzrtG@A#$K9+L>(#qrb-R&X%N#8#la|XMxJA*rz%HV)_CGif4cUQb4;!R^pVf^oGTZNG- z?`3cwGYa|bz6yoh?|$^S`jW3hArl!_s@JWFB13KW=cFMs}P;t zcLokJK5QVpFR~kA7r!o8d4yK$HRU<;Zi8 z_(NpK6JJdh{SJpba8k6h#FEi3%zKk3C~Mc9Q9iJw3+H(o;ae5AdVJ znu$9ev=6nse)Xs->iOm23BW3*O6bQ}9^)ls5h~Fz8{$SV zto>E8H+gK+Ue*VZL!M#(AG00^zezh=Irw#PvwvDVLnUdOw}cM(vDc8k!wj-?4#~@a zt^j$m1@46 zrJQ)D&GJs5)w3q|%J`|uHdM#4KfnmseAPO3%(o;2_k7Mw@j)E>=m#q#N2) zWmDyJ;eTMoKkHoJB24XCCNG*~PHsz1rq(R+qqXa9{6==}X^oUADIjI{CODEE=_G&Bo~bCmc#fWRp#sB)~aD3Z)3WnySw8Z0LAuXJz zW;#!vNYc)j`DN3Qo?UhZ)v9zE`jZ*Ez|)&ja921R!r>X)T9G-vB(l|yAM4J2(R$B#YST$g_X@={oe0zxGwhR$kmIYEV3zrU3c>q^>|t6_wpeW_?ESrE(8 zl~nJ%W!cK~w;6_gDtFzHR&K>H3u4oDUV0@fv8A|Kf%1F8w5W#0tZj;;wz-+BzYL4t_DoPryN_sp;-uROkie_srR+Fq; z_5W`Yx^a&F9lR$18fi4q+DsOwH=}p`;2zkHzuiJ>$al8lJpDFG07TGA7Q+QZQRfH0 zAhH1Yy1pO~soOb(a10iLg7H~;_u literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/com/bwie/server/config/ReturnCallbackConfig.class b/bwie-module/bwie-server/target/classes/com/bwie/server/config/ReturnCallbackConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..6d2987a90ae78ada8e219b6e1055526d1f769cb8 GIT binary patch literal 1933 zcmbVNTW=dh6#mAsN()X4!L+p0fhvviz}t8;aW=Jg&Fr{I zgpk@d9)KS}5ul1U9uTw&C5rd~{EjAqr~CuNH@mr2aiYS5XXYHA^L^(wvw!}x@&|xX zl=C=*S99pZ$vg%yXiq~O7|!E0jO1|&u06eOmp3|b8fUT?&EqWI%;H=Y=LOnoVO5~F z9O|ko8`7IoE;Us@sM>vW-Yrv7x+rj1%Sy#JQ>xymNuvbL#!gW~(|A_Px>^YJO;^@G zZMcc4>xEjmlaIL(sC%**7{9Kj{m8G>)OZktMjAg1B7yTQF)K<2kvl6r6Y3>bZacW+ zO%pEoTFnr)easJhbCD?x3{DHAOW_QI>?-?#`lwm2C_N>~CQvAco~%tv?OS{ zky0o_fhjt82G2Tp3WY2v zjNyWVE*ufKu)h4o`kkLQR=@e|^NrOn|GM|nqm>`mzq+^n?MkfcS-bn)-?wjXtlr_u z^V-+nuigFO(Zl55EG{~D2k&Mv?%+L?9K3IrODJV=*}(_6A~5_P+Ly&u2Or`ZOJq}Y zYmzhnab;e4>}YA=+Z%_ z9gy56$W}Zr$AHIhd=u~!WD>t$kuGG0m(jkAEVmB+a=#;=!45-#nE-tZwV!$Qk>zB} zWP`KJNx1fO3_T39m)eY=00#BSb^&_h446Zq^C6u3NLvQ6s|a0a!wKqARv$|L>& literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/com/bwie/server/consumer/RabbitConsumer.class b/bwie-module/bwie-server/target/classes/com/bwie/server/consumer/RabbitConsumer.class new file mode 100644 index 0000000000000000000000000000000000000000..b18863e74f75fdec8308e7f9c306bca73eab838c GIT binary patch literal 3670 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 Knt;XB^T2=ERp00U literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/com/bwie/server/feign/FeignES.class b/bwie-module/bwie-server/target/classes/com/bwie/server/feign/FeignES.class new file mode 100644 index 0000000000000000000000000000000000000000..77ea1b75490123edc1476226a991133910e33c43 GIT binary patch literal 344 zcmZvYu};H442JE}Hf^yQYM=8`8!@I! z)}>vfR~ywRgzJA}a^vcPT*Y?X(X`*WH=1pfj3jF{U$Pu|mb)!=iURwFJ^jHKDZ)t? yLPpt=p0f?-afpD>leYk1U)}(H(F0L4=|idH6)?a^n6XTIFxk6@;&hb+n0^DqTwHqq literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/com/bwie/server/mapper/BorrowMoneyMapper.class b/bwie-module/bwie-server/target/classes/com/bwie/server/mapper/BorrowMoneyMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..7251e8c1f97650af35d5482715bf7553a0122304 GIT binary patch literal 1016 zcmbtTOKaOe5T14XsGZhz(l+VyQYbi=?4^emg+f9b2-vj5(EG?5lnv6ZvJZ#+wI2Ed z`lCw5l4Gk)0)`w0?To&i`R1G1KYxGy27r(7t^=<-@TLQA1#CIWXzGuQwdQhcG+hZe z9FC?Ym+_?{$%ou%nV1}vmXvoEndApr%*m5= z0{Zc)2;UOWov2i!50(U^53PA{ALkm^=nFIJrD{gsCSTE`fbHQO+&|q4uAO`%6p4Un zSP7D$PUVUAl#-3^2rX*=0~63toTBYKE5oY2KMmTeoPH{&;*6Gp9%^kEqKszHhmoutnl1u9-z$F&b~ESy_-@wbDnQlx{2rh4Zbj8( z(BvvHLFQK_zak5cx66{uu_(yOBXl$_k87*lo0wpybgVM&X{W}t%CkS;N&&;=GCQ&} zu5?pywT=~@x3=8lvcHPEfcXoM@%rT30(gXM8~oOqO#w}4vEOE|C7{EfM{Et~@~<9j zGO+R=v;PG83uw0iPZ>5~+hW_DC){Rx<~Y7Q4*1ScIy7|~sB~V)aMOsVB?tNF+xh9>TT5Cn##!1r!`jljjp8N5FOHHga)rspwZ4>< zu9Nfha(q&nbu0?6JwT@y#P5^W+4A;4;pG}%p`*Bmf25%BkYbQNh13oE{D@Isvwy09 BWt0E_ literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/com/bwie/server/service/BorrowMoneyService.class b/bwie-module/bwie-server/target/classes/com/bwie/server/service/BorrowMoneyService.class new file mode 100644 index 0000000000000000000000000000000000000000..ee62e9e7571a218d4f26a0c830ef99ab09cee8ab GIT binary patch literal 971 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 literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/com/bwie/server/utils/DLXQueue.class b/bwie-module/bwie-server/target/classes/com/bwie/server/utils/DLXQueue.class new file mode 100644 index 0000000000000000000000000000000000000000..d2a26e740b446105a86c3e85679b45afae7ed165 GIT binary patch literal 3405 zcmb_fYf}?v6n>V3BrMA<3L0&#w^l&IS}j(ImvU1O1O-H)Ub;zM!b-9mcQ;&mx0i37 ze)n^KL1!GWb=sMJtUs#L=iLO748ho$e#quMXV3jS=j`t5e}4ZHz(@E|#bJzxaZ^PD z#v_<$#w2b6fb!KoXg3L@oWt79aSrZ*>Y`K;klvwzZdGP;|W zhL;>8C)R9dMK^L!^LkNKPuY&pXR6c~L2RaAd1g+`o35G6ib2b=J;O5@mV%2lZ6<|b zx%!fk@@!{AH+B^C!GdS6nT|-)Y;)1+U^-`73eMFuv`28h4ow{P3$|YAVMe%i!AS|; z4P7=Z)4Qr5(A_hyAUJHNS%tPq(-KpKTv9l52Gfycw^K%T-f&DwmzY6s*<^l4CsTG# zPp+9lcZIVm9KGO~SyvyKynm-43et_{3M;)$E12xw-NiR@rjt)Z%1czpj9Z?_2qz(< zZh9)+OtD*pLRuJU-))f&HE+g%$qc~C}PmkfGX{Cuv1*ht$4iyDu;bl3> zKAU!`Lu|?Oj>)d-25;oIo7`WW`Q?ftmFBO4Q!4CLdTzfZyk$FmTb5sV!eI;4Ss!-S zO^K+MZ8-GF$|~rsnUhORVS5ZmAGULO+Y*+S(9nZk1s&y!b`0nNC*22RIc*PJ;zo!I?MfRbzvWnMKaFcEXe<^BSJQ3B%RkVJ(bx4IB7^T`0#F z#+Mqt!q*zU!M9T9nTF#y5yp2KzQ+%2VtLsXTg!TstL|4kkS}=Lag`Ijds<7Jp50I( zm@8FFkXl?^tcIOG=V$jU%I@7Mo zY`gEIJZGot`Pmlr^QzPA(lieh%xqdXT+(uA6?BdWm(cT<7oUGiW~SiC+uFEg31>KK zxUS&Pt<(#pxS)FK6s9_elQn&F>WB7hkzd}ov7(^C;{+V9#`sKe&L+f0WvfQ`$^OQ+*>BVuv$x?ER~!KwqC7Dl0GC4*6_`tlxRP{ zXTH0qu>4}xnzAjv8hC?NdY113{wS80%kC%1ZqD`&na44{B_8H0X$Xh#4&H@=BcvLj zl76p(?j(J*f{u_rRzbH@i|da1Cw*&tnDZZU6IbxM$!Q?XXAZBYN$LDo_}|#O1?5-& z_8DG7KC=UHp0%O?`X~&Z&*DQGp|bLl!E5BbeuajGEd&M{V~x>ZEchE51GvX?C>q&0 zH$~Or`4yTMP6q>lSmPG7fl%)Yw8TQ2XubCeZ41%%U|tC?nah(+6@ zo$*Z^k`)L*R^TS0ymq6BrRpT-81s)a_sh)wI{Gn-3w-$>Kn@A4;u@bZpWr79;W>u! z3&!vQH1kpEJHe%BhT?i}76Jx5zLp$}SeIjnLXCIUPZU m06Lc+M4&^N`gL9#XlxrrW29I4i<0|@2^SFKXU+qr6Z;pj8qJab literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/com/bwie/server/utils/DelayedQueue.class b/bwie-module/bwie-server/target/classes/com/bwie/server/utils/DelayedQueue.class new file mode 100644 index 0000000000000000000000000000000000000000..3472f3c6a1ff8dceb0efb1d9d4f5d3efb9464abf GIT binary patch literal 4648 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 Zp)@mdm+KAwCn;U##aS??Ili}$`WLYeT^9fV literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-server/target/classes/mapper/BorrowMoneyMapper.xml b/bwie-module/bwie-server/target/classes/mapper/BorrowMoneyMapper.xml new file mode 100644 index 0000000..b148258 --- /dev/null +++ b/bwie-module/bwie-server/target/classes/mapper/BorrowMoneyMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + insert borrow_money(borrow_time,borrow_money,repayment_plan,interest,status,user_id) + values (now(),#{borrowMoney},#{repaymentPlan},#{interest},0,#{userId}) + + + + + + + update borrow_money set status = #{status} where id = #{id} + + + + + + diff --git a/bwie-module/bwie-server/target/maven-archiver/pom.properties b/bwie-module/bwie-server/target/maven-archiver/pom.properties new file mode 100644 index 0000000..cd9e6bf --- /dev/null +++ b/bwie-module/bwie-server/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=bwie-server +groupId=org.example +version=1.0-SNAPSHOT diff --git a/bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..3070cc9 --- /dev/null +++ b/bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,22 @@ +com\bwie\server\mapper\InterestRateMapper.class +com\bwie\server\controller\InterestRateController.class +com\bwie\server\config\RedisMeta.class +com\bwie\server\ServerApplication.class +com\bwie\server\utils\TtlQueue.class +com\bwie\server\feign\FeignES.class +com\bwie\server\utils\DLXQueue.class +com\bwie\server\mapper\BorrowMoneyMapper.class +com\bwie\server\config\ReturnCallbackConfig.class +com\bwie\server\service\InterestRateService.class +com\bwie\server\config\RabbitmqConfig.class +com\bwie\server\service\BorrowMoneyService.class +com\bwie\server\utils\DelayedQueue.class +com\bwie\server\config\RabbitAdminConfig.class +com\bwie\server\controller\BorrowMoneyController.class +com\bwie\server\service\impl\BorrowMoneyServiceImpl.class +com\bwie\server\config\ConfirmCallbackConfig.class +com\bwie\server\config\InitData.class +com\bwie\server\config\RedissonConfig.class +com\bwie\server\exception\AllException.class +com\bwie\server\consumer\RabbitConsumer.class +com\bwie\server\service\impl\InterestRateServiceImpl.class diff --git a/bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..f7636c5 --- /dev/null +++ b/bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,22 @@ +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\controller\BorrowMoneyController.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\config\RabbitAdminConfig.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\utils\TtlQueue.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\ServerApplication.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\mapper\BorrowMoneyMapper.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\config\RabbitmqConfig.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\exception\AllException.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\config\RedisMeta.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\consumer\RabbitConsumer.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\config\ConfirmCallbackConfig.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\utils\DelayedQueue.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\config\RedissonConfig.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\service\impl\BorrowMoneyServiceImpl.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\controller\InterestRateController.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\service\BorrowMoneyService.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\service\impl\InterestRateServiceImpl.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\config\ReturnCallbackConfig.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\config\InitData.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\mapper\InterestRateMapper.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\utils\DLXQueue.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\feign\FeignES.java +D:\java-item\sjz-last-exam\bwie-module\bwie-server\src\main\java\com\bwie\server\service\InterestRateService.java diff --git a/bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/bwie-module/bwie-server/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/bwie-module/bwie-system/pom.xml b/bwie-module/bwie-system/pom.xml new file mode 100644 index 0000000..d6ecfaa --- /dev/null +++ b/bwie-module/bwie-system/pom.xml @@ -0,0 +1,104 @@ + + + + bwie-module + org.example + 1.0-SNAPSHOT + + 4.0.0 + + bwie-system + + + + + + org.example + bwie-common + + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.alibaba + druid-spring-boot-starter + 1.2.8 + + + + + mysql + mysql-connector-java + + + + + + + + com.baomidou + mybatis-plus-boot-starter + 3.3.1.tmp + + + + + com.baomidou + mybatis-plus-generator + 3.3.1.tmp + + + + org.apache.velocity + velocity-engine-core + 2.2 + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.4.1 + + + + + com.github.tobato + fastdfs-client + 1.26.5 + + + + + com.github.xiaoymin + knife4j-spring-boot-starter + 2.0.9 + + + + + org.springframework.boot + spring-boot-starter-amqp + + + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.9.10 + + + + + diff --git a/bwie-module/bwie-system/src/main/java/com/bwie/system/SystemApplication.java b/bwie-module/bwie-system/src/main/java/com/bwie/system/SystemApplication.java new file mode 100644 index 0000000..d857b57 --- /dev/null +++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/SystemApplication.java @@ -0,0 +1,18 @@ +package com.bwie.system; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 启动类 + */ +@SpringBootApplication +public class SystemApplication { + public static void main(String[] args) { + SpringApplication.run(SystemApplication.class,args); + } +} diff --git a/bwie-module/bwie-system/src/main/java/com/bwie/system/config/FastUtil.java b/bwie-module/bwie-system/src/main/java/com/bwie/system/config/FastUtil.java new file mode 100644 index 0000000..693c811 --- /dev/null +++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/config/FastUtil.java @@ -0,0 +1,55 @@ +package com.bwie.system.config; + +import com.github.tobato.fastdfs.domain.fdfs.StorePath; +import com.github.tobato.fastdfs.service.FastFileStorageClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; + +/** + * @BelongsProject: 0107day02 + * @BelongsPackage: com.bw.config + * @Author: zhupengfei + * @CreateTime: 2023-02-01 08:52 + */ +@Component +public class FastUtil { + private static final Logger log = LoggerFactory.getLogger(FastUtil.class); + + @Resource + private FastFileStorageClient storageClient ; + + /** + * 上传文件 图片 + */ + public String upload(MultipartFile multipartFile) throws Exception{ + String originalFilename = multipartFile.getOriginalFilename(). + substring(multipartFile.getOriginalFilename(). + lastIndexOf(".") + 1); + StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage( + multipartFile.getInputStream(), + multipartFile.getSize(),originalFilename , null); + return storePath.getFullPath() ; + } + /** + * 删除文件 + */ + public String deleteFile(String fileUrl) { + if (StringUtils.isEmpty(fileUrl)) { + log.info("fileUrl == >>文件路径为空..."); + return "文件路径不能为空"; + } + try { + StorePath storePath = StorePath.parseFromUrl(fileUrl); + storageClient.deleteFile(storePath.getGroup(), storePath.getPath()); + } catch (Exception e) { + log.error(e.getMessage()); + } + return "删除成功"; + } + +} diff --git a/bwie-module/bwie-system/src/main/java/com/bwie/system/controller/UserController.java b/bwie-module/bwie-system/src/main/java/com/bwie/system/controller/UserController.java new file mode 100644 index 0000000..060be8f --- /dev/null +++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/controller/UserController.java @@ -0,0 +1,43 @@ +package com.bwie.system.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.bwie.common.domain.User; +import com.bwie.common.domain.request.UserReq; +import com.bwie.common.domain.response.UserRes; +import com.bwie.common.result.Result; +import com.bwie.common.utils.StringUtils; +import com.bwie.system.service.UserService; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 控制层 + */ +@RestController +public class UserController { + + /** + * 注入用户业务层 + */ + @Resource + private UserService userService; + + /** + * 查询用户 + * @param userReq + * @return + */ + @PostMapping("/selectUser") + public Result selectUser(@RequestBody UserReq userReq) { + return userService.selectUser(userReq); + } +} diff --git a/bwie-module/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java b/bwie-module/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java new file mode 100644 index 0000000..e7f3fbf --- /dev/null +++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java @@ -0,0 +1,17 @@ +package com.bwie.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.bwie.common.domain.User; +import org.apache.ibatis.annotations.Mapper; +import org.mybatis.spring.annotation.MapperScan; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 用户持久层 + */ +@Mapper +public interface UserMapper extends BaseMapper { +} diff --git a/bwie-module/bwie-system/src/main/java/com/bwie/system/service/UserService.java b/bwie-module/bwie-system/src/main/java/com/bwie/system/service/UserService.java new file mode 100644 index 0000000..c52e60a --- /dev/null +++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/service/UserService.java @@ -0,0 +1,21 @@ +package com.bwie.system.service; + +import com.bwie.common.domain.User; +import com.bwie.common.domain.request.UserReq; +import com.bwie.common.domain.response.UserRes; +import com.bwie.common.result.Result; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 用户业务层 + */ +public interface UserService { + + /** + * 条件查询用户 + */ + Result selectUser(UserReq userReq); +} diff --git a/bwie-module/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java b/bwie-module/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..4941dc8 --- /dev/null +++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java @@ -0,0 +1,49 @@ +package com.bwie.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.bwie.common.domain.User; +import com.bwie.common.domain.request.UserReq; +import com.bwie.common.domain.response.UserRes; +import com.bwie.common.result.Result; +import com.bwie.common.utils.StringUtils; +import com.bwie.system.mapper.UserMapper; +import com.bwie.system.service.UserService; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/10/10 + * @info: 业务实现类 + */ +@Service +public class UserServiceImpl implements UserService { + + /** + * 注入用户持久层 + */ + @Resource + private UserMapper userMapper; + + + /** + * 查询用户 + * @param userReq + * @return + */ + @Override + public Result selectUser(UserReq userReq) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotEmpty(userReq.getName()),"name",userReq.getName()); + List users = userMapper.selectList(queryWrapper); + User user = users.get(0); + UserRes userRes = new UserRes(); + BeanUtils.copyProperties(user,userRes); + return Result.success(userRes); + } +} diff --git a/bwie-module/bwie-system/src/main/resources/bootstrap.yml b/bwie-module/bwie-system/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..dcd750d --- /dev/null +++ b/bwie-module/bwie-system/src/main/resources/bootstrap.yml @@ -0,0 +1,62 @@ +# Tomcat +server: + port: 9003 +# Spring +spring: + main: + allow-circular-references: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + application: + # 应用名称 + name: bwie-system + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 192.168.59.128:8848 + config: + # 配置中心地址 + server-addr: 192.168.59.128:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + rabbitmq: + host: 192.168.59.128 + port: 5672 + username: guest + password: guest + virtual-host: / + publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange) + publisher-returns: true #确认消息已发送到队列(Queue) + listener: + simple: + prefetch: 1 # 每次只能获取一条,处理完成才能获取下一条 + acknowledge-mode: manual # 设置消费端手动ack确认 + retry: + enabled: true # 是否支持重试 + template: + # 只要消息抵达Queue,就会异步发送优先回调return firm + mandatory: true + redis: + host: 127.0.0.1 +fdfs: + so-timeout: 1500 # socket 连接时长 + connect-timeout: 600 # 连接 tracker 服务器超时时长 upload + # 这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流 + tracker-list: 192.168.59.128:22122 + web-server-url: 192.168.59.128:8888 + pool: + jmx-enabled: false + # 生成缩略图 + thumb-image: + height: 500 + width: 500 + + diff --git a/bwie-module/bwie-system/target/bwie-system-1.0-SNAPSHOT.jar b/bwie-module/bwie-system/target/bwie-system-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..84fe78741a1724acd28324947cfd51e6472ee955 GIT binary patch literal 8718 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 literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-system/target/classes/bootstrap.yml b/bwie-module/bwie-system/target/classes/bootstrap.yml new file mode 100644 index 0000000..dcd750d --- /dev/null +++ b/bwie-module/bwie-system/target/classes/bootstrap.yml @@ -0,0 +1,62 @@ +# Tomcat +server: + port: 9003 +# Spring +spring: + main: + allow-circular-references: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + application: + # 应用名称 + name: bwie-system + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 192.168.59.128:8848 + config: + # 配置中心地址 + server-addr: 192.168.59.128:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + rabbitmq: + host: 192.168.59.128 + port: 5672 + username: guest + password: guest + virtual-host: / + publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange) + publisher-returns: true #确认消息已发送到队列(Queue) + listener: + simple: + prefetch: 1 # 每次只能获取一条,处理完成才能获取下一条 + acknowledge-mode: manual # 设置消费端手动ack确认 + retry: + enabled: true # 是否支持重试 + template: + # 只要消息抵达Queue,就会异步发送优先回调return firm + mandatory: true + redis: + host: 127.0.0.1 +fdfs: + so-timeout: 1500 # socket 连接时长 + connect-timeout: 600 # 连接 tracker 服务器超时时长 upload + # 这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流 + tracker-list: 192.168.59.128:22122 + web-server-url: 192.168.59.128:8888 + pool: + jmx-enabled: false + # 生成缩略图 + thumb-image: + height: 500 + width: 500 + + diff --git a/bwie-module/bwie-system/target/classes/com/bwie/system/SystemApplication.class b/bwie-module/bwie-system/target/classes/com/bwie/system/SystemApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..d27617edd5c6957d89a309d86b47242f7224903d GIT binary patch literal 737 zcmah{%TC)s6g?9H32t}=NK2s$#3p3HY!I6uBpQj8`%qJ*i>}6IFa!2XG#>N#ELI>E zd;lMXddDDPiBx!TukK^cW5$n9_YVMe@g+bVs||Dle8i^)));2?l~(S6VXC`5VyF+y zv1C{Xm6qR&ERy!Oh*IjbLlcX1B&_oFOSA4yRnD*##wO#@rII|q&YjHouuO;JajIhB zl+k^H&VeyFu^r6NK&2#rm6KK2q$Jn*Hl=R7jTaZxxE8-1dZ z!b(0YSH9AqYN>^3%rI=eYrcWcEv#dMY`i-E5uM4{G4%ec;hD9}rn*iAWZQuJeB z9XLrwTr_5!YnWY79 zA2gAenE1(r#6&-s7(a=Z6bg|a;P0S_f5P~jneDQaEm52FJ-7F~@AF>HGyBKiH*W(t zh)>dZ97Amw#*0b3l*TcO1}op?j(oJ-H%3vX+9M<8K)C4r6!&o3E)T|78vOn9Y|^almj z1)=AgB{^bS(hUU;PvkwvC|TibC1-?Q&I~=HXa-@S7#M-{FIstNjB!0?*)m&ym9~0L zSKQEYxFL|@|sO4JWFp>85O$#)S zcm*l2VZw6d$%>Pc{uz@7qY(0@J#G4yT30ul!&!?Sc0|Z?^OiJ%OF<|dBk#FIs}#XK z8(OyVQz_e?Sr8cQjgwLKEw@zkO-Igq{sm)R<_xD|hgRA2Lt}Dfrh*;piy|;=(=8d< zP~B7Mt7$78fdl{9tU$ZxTP4diZDqnG6cwk+)+%2qRVsPP3}=;}waZlS9Mf`*qAHmx zQFMh^)1wP{S+3TjeNu+AUg4CfVh^Ry1f~np<}?muPw&GJ8fHKc?&dn(niG1|ij3&2 zZ!=HX(9B<$G|N%V*sKD{qj|ep^>j9BgxK>s)n2Mz11bjsnT9E4fqm(Pm&(!@@tm^f zvU>-0?7&V9@9KCDGXi2jgQ+8jyp95-jwi59M-e3*v#>PG>9_z}gQLU6j0R6f8Sm@Z zf~^8OtJt>>4Q(GDzWep(cWy1-yZ+Pi?a%JqxcTRgHwOl2-PaL-ucrIK^Dpmx`g^RU zqk@Y%<}ssVL5XK@Nnq3c>ekYwn)ZcgTD%ZMKRzwdLRE6H%`p_c6IZCL&~kMW}rXtP7;oT?sM5SXDT9Ee6=;#Z@A+)1 z)t|*NGf&!NI#N`Rzmx*I>z$0S#RHaf_02&NP&YsEKocc-B$|muI zD4*iW;3zn@WUfQ}%t;e=Q7UEdo4%V;j}@>7d$|(mMIRE;?n>cn6;#Pv(Nk4s@ z8$_kBWMY3+Eb3=X2K~g;MSk6f{j_MH1p|}`JWYKSY$pzI)+|?NI>x7O|249ZT4hzz^J{8rPeb@E8@lu0z?W*R@J_J_KexV?XkqjCrhd`|nZi8s~RJw~Iv7l}<#Gfp!&p zGPvaBi`&uHdSOk*Z;2}olX+p|h_?!3$OUGzsxEzFs9~3R&S(flj85Kfv*h}!r zu#>O_Sn$GGgU4YRY-#-)u`hY}GR}}pbd#oV*3J@Wnr7g!pabxs_!+GA{GUnxALUh L`FW?W>MqeAbGSxJ literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-system/target/classes/com/bwie/system/mapper/UserMapper.class b/bwie-module/bwie-system/target/classes/com/bwie/system/mapper/UserMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..b740891ee9f5442dfa2158c790a99641738a4f21 GIT binary patch literal 381 zcmb7=u};G<5QcvjNN54U%E-dVEo?zZFfaunwSxVUo`S2`j%)|iS7YD-cqoLE2vuTZ z@SSDf`TNda-yfde=GvBG?%8_TixqEM9^eq(CcHuO|&q>e>dJ3|#aqt~t{ zv#mJl(6xP_+IbLIImqLakqrl2rOYcG8(Qru5*h67|{&T*J>mhR`k52b2!_W%F@ literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-system/target/classes/com/bwie/system/service/UserService.class b/bwie-module/bwie-system/target/classes/com/bwie/system/service/UserService.class new file mode 100644 index 0000000000000000000000000000000000000000..ea14aa1023cbbe1dcc5fdde445b9b4118f526bd3 GIT binary patch literal 403 zcmb`DO-=(b427Rd+o1!MdIvVJAscpsSRx^TiaO!|>C`HzCJD_?5m#fu0XP)GGgRGl z%fhlPe|BEp_s{1SfE!E;oE11Hl#yF*(o5t(c({CQyj9D0!%7P4omzRTjZ=ZQnPXBN zx8QAcbp!^ExlL-(r;0Fp;`HiQ&pK$!i9;k5`EQ#rsm?`l|c|*=%~$ literal 0 HcmV?d00001 diff --git a/bwie-module/bwie-system/target/classes/com/bwie/system/service/impl/UserServiceImpl.class b/bwie-module/bwie-system/target/classes/com/bwie/system/service/impl/UserServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..3c053d424b03fa45222c82925f6d26b5cba118ba GIT binary patch literal 2343 zcmbtVYj+bx7=9*~E=`wG5URBnMTDl;5sSB`6ic~SO-pHLD-}O%(y?94?uOk7n17|` zc(}+p96$R9{5Kw-*(_<&5b4nm`_9hHdwt%^{Q39qF9BS}4>_E~oQ2Cdq%fDmr}!*~ z&+)}Ed}&VR`!R&V02Xj%0E@V4;VTPEIoO8x8kTdojvE$kTDWE5Yk^!nQsJsotEo`n ze6bREvi#UpGHOIxdD4q-sV9@qzQm`B^%x zL%E@%pdMBfCHod!-_?r(>HNf&KxR4ERRSl9uCLbWURi~A9V!$!RSYUlb;}7|vri5) zdf%mm*)AXH+atH4r0dnHv8Scx!3y^@nu}CbRkR5~U?qPb&RD&`m%D-IxV{Y4!@7!e ztYAYuEKGDUhAOI8wTXud66vI-nosenx@VPiW?5Wmv2;sl<%8`P!OC=} z5`>Dx-*sbbWh^M~w29M)tnq=U48^$1x^}Cw=tjo9jJXmR>xv@@*Z^`61$A^s+=3>m zF}o_kCZg1EXNDTJS6RCMe*#+gS6>%tS00M<%@RYaO791|>rUu+O2=UJm)t$y(e;p} zrjMMvZg@HhqNgY1>O{}Pkt@YLanm*Be%hp>bWpUjriV;b1>v5IYN6}z{b;;@9E3kf zwq>XSO~hp)Qn2wh-VrFo&HLX<$-;__Z}6>!qK#Fov3z`5v~e5jHr~Q%3wLa6pk(2$ zjZLt7M_aR^vyn_N0^>by52ImW+s1deXJN<2_qZ=G-I7dZ5cT!!Z&tnmOI96!Pu?y+ zV54)4_0rIWv%tj`7k_#W0`~cy(rW~RiONqj>n}D}(k3%Z=DEX~OdCeBdB17?nQ%8+ z3-k@IrW=GV-==1H-(m9E-9BgJ#EwA9j1(uo)5g<`tk8Xu6y;HpzEqBM=u~tvdpi8? zHSJr|)65is>q)a5#oQ}131aP&X)sP%>x9n%5f(U;UulOoiJ9qqT^p2@<45uuX#((I zC8#yl!+;N&b`=pHZwI+IfUM-P!};rIY!*ONuT)e-opZ0z`G&brz&XCiC&5>ZU&{0n z*E4*}`?wBsO>t!dla6pFxeBh?$)^y%#@FwX8fK7Tl+g$y}? zTQ88h_Y~>X>8U5kJVW+WpZR$LYkTrH9GiZQ{uI_`($A4g;SUVVXI{Xj!14L)NM + + + sjz-last-exam + org.example + 1.0-SNAPSHOT + + 4.0.0 + pom + bwie-module + + + bwie-system + bwie-server + bwie-es + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..17d3548 --- /dev/null +++ b/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + org.example + sjz-last-exam + pom + 1.0-SNAPSHOT + + bwie-common + bwie-gateway + bwie-auth + bwie-module + + + + + + spring-boot-starter-parent + org.springframework.boot + 2.6.2 + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + 2021.0.0 + pom + import + + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + 2021.1 + pom + import + + + + com.alibaba.nacos + nacos-client + 2.0.4 + + + + + org.example + bwie-common + 1.0-SNAPSHOT + + + + + diff --git a/sjz-last-exam.iml b/sjz-last-exam.iml new file mode 100644 index 0000000..78b2cc5 --- /dev/null +++ b/sjz-last-exam.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file