From 771133a4b70e28ad7362cf52d68113d1f6f2e3fd Mon Sep 17 00:00:00 2001
From: fst1996 <2411194573@qq.com>
Date: Tue, 10 Oct 2023 19:25:04 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/.gitignore | 8 +
.idea/compiler.xml | 28 ++
.idea/encodings.xml | 12 +
.idea/inspectionProfiles/Project_Default.xml | 36 ++
.idea/jarRepositories.xml | 20 ++
.idea/misc.xml | 14 +
.idea/vcs.xml | 6 +
bwie-auth/pom.xml | 28 ++
.../java/com/bwie/auth/AuthApplication.java | 13 +
.../auth/config/ConfirmCallbackConfig.java | 48 +++
.../auth/config/ReturnCallbackConfig.java | 41 +++
.../bwie/auth/controller/AuthController.java | 78 +++++
.../com/bwie/auth/feign/UserFeignService.java | 19 ++
.../com/bwie/auth/service/AuthService.java | 14 +
.../auth/service/impl/AuthServiceImpl.java | 96 ++++++
bwie-auth/src/main/resources/bootstrap.yml | 30 ++
bwie-auth/target/bwie-auth-1.0-SNAPSHOT.jar | Bin 0 -> 10491 bytes
bwie-auth/target/classes/bootstrap.yml | 30 ++
.../com/bwie/auth/AuthApplication.class | Bin 0 -> 815 bytes
.../auth/config/ConfirmCallbackConfig.class | Bin 0 -> 2283 bytes
.../auth/config/ReturnCallbackConfig.class | Bin 0 -> 1929 bytes
.../bwie/auth/controller/AuthController.class | Bin 0 -> 3264 bytes
.../bwie/auth/feign/UserFeignService.class | Bin 0 -> 705 bytes
.../com/bwie/auth/service/AuthService.class | Bin 0 -> 578 bytes
.../auth/service/impl/AuthServiceImpl.class | Bin 0 -> 4915 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 | 113 +++++++
.../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/Repayment.java | 38 +++
.../common/domain/request/LoanRequest.java | 49 +++
.../common/domain/request/LoginRequest.java | 9 +
.../common/domain/response/JwtResponse.java | 9 +
.../com/bwie/common/domain/response/Loan.java | 69 ++++
.../common/domain/response/UserResponse.java | 17 +
.../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/HttpPost.java | 77 +++++
.../java/com/bwie/common/utils/HttpUtils.java | 310 ++++++++++++++++++
.../java/com/bwie/common/utils/JwtUtils.java | 109 ++++++
.../java/com/bwie/common/utils/MsgUitl.java | 76 +++++
.../java/com/bwie/common/utils/OssUtil.java | 153 +++++++++
.../com/bwie/common/utils/StringUtils.java | 68 ++++
.../com/bwie/common/utils/TelSmsUtils.java | 87 +++++
.../target/bwie-common-1.0-SNAPSHOT.jar | Bin 0 -> 36559 bytes
.../com/bawei/common/utils/TelSmsUtils.class | Bin 0 -> 3753 bytes
.../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/Repayment.class | Bin 0 -> 4400 bytes
.../common/domain/request/LoanRequest.class | Bin 0 -> 5444 bytes
.../common/domain/request/LoginRequest.class | Bin 0 -> 1944 bytes
.../common/domain/response/JwtResponse.class | Bin 0 -> 1907 bytes
.../bwie/common/domain/response/Loan.class | Bin 0 -> 7659 bytes
.../common/domain/response/UserResponse.class | Bin 0 -> 3849 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/HttpPost.class | Bin 0 -> 3049 bytes
.../com/bwie/common/utils/HttpUtils$1.class | Bin 0 -> 992 bytes
.../com/bwie/common/utils/HttpUtils.class | Bin 0 -> 10290 bytes
.../com/bwie/common/utils/JwtUtils.class | Bin 0 -> 2874 bytes
.../com/bwie/common/utils/MsgUitl.class | Bin 0 -> 2886 bytes
.../com/bwie/common/utils/OssUtil.class | Bin 0 -> 5195 bytes
.../com/bwie/common/utils/StringUtils.class | Bin 0 -> 1808 bytes
.../target/maven-archiver/pom.properties | 3 +
.../compile/default-compile/createdFiles.lst | 21 ++
.../compile/default-compile/inputFiles.lst | 19 ++
.../default-testCompile/createdFiles.lst | 0
.../default-testCompile/inputFiles.lst | 0
bwie-gateway/pom.xml | 38 +++
.../com/bwie/gateway/GatewayApplication.java | 11 +
.../gateway/config/IgnoreWhiteConfig.java | 32 ++
.../com/bwie/gateway/filters/MyFilter.java | 63 ++++
.../com/bwie/gateway/utils/GatewayUtils.java | 98 ++++++
bwie-gateway/src/main/resources/bootstrap.yml | 29 ++
.../target/bwie-gateway-1.0-SNAPSHOT.jar | Bin 0 -> 9265 bytes
bwie-gateway/target/classes/bootstrap.yml | 29 ++
.../com/bwie/gateway/GatewayApplication.class | Bin 0 -> 767 bytes
.../gateway/config/IgnoreWhiteConfig.class | Bin 0 -> 2590 bytes
.../com/bwie/gateway/filters/MyFilter.class | Bin 0 -> 3960 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-modules/bwie-es/pom.xml | 38 +++
.../main/java/com/bwie/es/EsApplication.java | 24 ++
.../es/config/InitEsRestHighLevelClient.java | 36 ++
.../com/bwie/es/controller/EsController.java | 57 ++++
.../com/bwie/es/feign/LoanFeignService.java | 18 +
.../java/com/bwie/es/service/EsService.java | 12 +
.../bwie/es/service/impl/EsServiceImpl.java | 90 +++++
.../bwie-es/src/main/resources/bootstrap.yml | 22 ++
.../bwie-es/target/bwie-es-1.0-SNAPSHOT.jar | Bin 0 -> 9631 bytes
.../bwie-es/target/classes/bootstrap.yml | 22 ++
.../classes/com/bwie/es/EsApplication.class | Bin 0 -> 1186 bytes
.../es/config/InitEsRestHighLevelClient.class | Bin 0 -> 3505 bytes
.../com/bwie/es/controller/EsController.class | Bin 0 -> 2387 bytes
.../com/bwie/es/feign/LoanFeignService.class | Bin 0 -> 492 bytes
.../com/bwie/es/service/EsService.class | Bin 0 -> 311 bytes
.../bwie/es/service/impl/EsServiceImpl.class | Bin 0 -> 5577 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-modules/bwie-loan/pom.xml | 54 +++
.../java/com/bwie/loan/LoanApplication.java | 29 ++
.../loan/config/ConfirmCallbackConfig.java | 48 +++
.../com/bwie/loan/config/ProductConfig.java | 45 +++
.../loan/config/ReturnCallbackConfig.java | 41 +++
.../bwie/loan/controller/LoanController.java | 62 ++++
.../loan/controller/RepaymentController.java | 77 +++++
.../com/bwie/loan/feign/UserFeignService.java | 18 +
.../java/com/bwie/loan/mapper/LoanMapper.java | 20 ++
.../com/bwie/loan/mapper/RepaymentMapper.java | 18 +
.../com/bwie/loan/service/LoanService.java | 17 +
.../bwie/loan/service/RepaymentService.java | 15 +
.../loan/service/impl/LoanServiceImpl.java | 136 ++++++++
.../service/impl/RepaymentServiceImpl.java | 97 ++++++
.../src/main/resources/bootstrap.yml | 29 ++
.../src/main/resources/mapper/LoanMapper.xml | 26 ++
.../main/resources/mapper/RepaymentMapper.xml | 22 ++
.../target/bwie-loan-1.0-SNAPSHOT.jar | Bin 0 -> 20144 bytes
.../bwie-loan/target/classes/bootstrap.yml | 29 ++
.../com/bwie/loan/LoanApplication.class | Bin 0 -> 1672 bytes
.../loan/config/ConfirmCallbackConfig.class | Bin 0 -> 2283 bytes
.../bwie/loan/config/ProductConfig$1.class | Bin 0 -> 869 bytes
.../com/bwie/loan/config/ProductConfig.class | Bin 0 -> 2702 bytes
.../loan/config/ReturnCallbackConfig.class | Bin 0 -> 1929 bytes
.../bwie/loan/controller/LoanController.class | Bin 0 -> 2664 bytes
.../loan/controller/RepaymentController.class | Bin 0 -> 3470 bytes
.../bwie/loan/feign/UserFeignService.class | Bin 0 -> 689 bytes
.../com/bwie/loan/mapper/LoanMapper.class | Bin 0 -> 820 bytes
.../bwie/loan/mapper/RepaymentMapper.class | Bin 0 -> 694 bytes
.../com/bwie/loan/service/LoanService.class | Bin 0 -> 639 bytes
.../bwie/loan/service/RepaymentService.class | Bin 0 -> 622 bytes
.../loan/service/impl/LoanServiceImpl.class | Bin 0 -> 7006 bytes
.../service/impl/RepaymentServiceImpl.class | Bin 0 -> 3837 bytes
.../target/classes/mapper/LoanMapper.xml | 26 ++
.../target/classes/mapper/RepaymentMapper.xml | 22 ++
.../target/maven-archiver/pom.properties | 3 +
.../compile/default-compile/createdFiles.lst | 14 +
.../compile/default-compile/inputFiles.lst | 9 +
.../default-testCompile/createdFiles.lst | 0
.../default-testCompile/inputFiles.lst | 0
bwie-modules/bwie-system/bwie-system.iml | 2 +
bwie-modules/bwie-system/pom.xml | 51 +++
.../com/bwie/system/SystemApplication.java | 11 +
.../system/controller/UserController.java | 59 ++++
.../com/bwie/system/mapper/UserMapper.java | 14 +
.../com/bwie/system/service/UserService.java | 10 +
.../system/service/impl/UserServiceImpl.java | 37 +++
.../src/main/resources/bootstrap.yml | 29 ++
.../src/main/resources/mapper/UserMapper.xml | 14 +
.../target/bwie-system-1.0-SNAPSHOT.jar | Bin 0 -> 6983 bytes
.../bwie-system/target/classes/bootstrap.yml | 29 ++
.../com/bwie/system/SystemApplication.class | Bin 0 -> 762 bytes
.../system/controller/UserController.class | Bin 0 -> 2711 bytes
.../com/bwie/system/mapper/UserMapper.class | Bin 0 -> 549 bytes
.../com/bwie/system/service/UserService.class | Bin 0 -> 416 bytes
.../system/service/impl/UserServiceImpl.class | Bin 0 -> 1381 bytes
.../target/classes/mapper/UserMapper.xml | 14 +
.../target/maven-archiver/pom.properties | 3 +
.../compile/default-compile/createdFiles.lst | 5 +
.../compile/default-compile/inputFiles.lst | 5 +
.../default-testCompile/createdFiles.lst | 0
.../default-testCompile/inputFiles.lst | 0
bwie-modules/pom.xml | 21 ++
month1010-fst.iml | 2 +
pom.xml | 62 ++++
181 files changed, 3911 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/vcs.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/UserFeignService.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/UserFeignService.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/Repayment.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/LoanRequest.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/LoginRequest.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/Loan.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/UserResponse.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/HttpPost.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/HttpUtils.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/MsgUitl.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/target/bwie-common-1.0-SNAPSHOT.jar
create mode 100644 bwie-common/target/classes/com/bawei/common/utils/TelSmsUtils.class
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/Repayment.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/request/LoanRequest.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/request/LoginRequest.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/response/JwtResponse.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/response/Loan.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/response/UserResponse.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/HttpPost.class
create mode 100644 bwie-common/target/classes/com/bwie/common/utils/HttpUtils$1.class
create mode 100644 bwie-common/target/classes/com/bwie/common/utils/HttpUtils.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/MsgUitl.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/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/MyFilter.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/MyFilter.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-modules/bwie-es/pom.xml
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/EsApplication.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/config/InitEsRestHighLevelClient.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/controller/EsController.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/feign/LoanFeignService.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/service/EsService.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/service/impl/EsServiceImpl.java
create mode 100644 bwie-modules/bwie-es/src/main/resources/bootstrap.yml
create mode 100644 bwie-modules/bwie-es/target/bwie-es-1.0-SNAPSHOT.jar
create mode 100644 bwie-modules/bwie-es/target/classes/bootstrap.yml
create mode 100644 bwie-modules/bwie-es/target/classes/com/bwie/es/EsApplication.class
create mode 100644 bwie-modules/bwie-es/target/classes/com/bwie/es/config/InitEsRestHighLevelClient.class
create mode 100644 bwie-modules/bwie-es/target/classes/com/bwie/es/controller/EsController.class
create mode 100644 bwie-modules/bwie-es/target/classes/com/bwie/es/feign/LoanFeignService.class
create mode 100644 bwie-modules/bwie-es/target/classes/com/bwie/es/service/EsService.class
create mode 100644 bwie-modules/bwie-es/target/classes/com/bwie/es/service/impl/EsServiceImpl.class
create mode 100644 bwie-modules/bwie-es/target/maven-archiver/pom.properties
create mode 100644 bwie-modules/bwie-es/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
create mode 100644 bwie-modules/bwie-es/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
create mode 100644 bwie-modules/bwie-es/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
create mode 100644 bwie-modules/bwie-es/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
create mode 100644 bwie-modules/bwie-loan/pom.xml
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/LoanApplication.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/config/ConfirmCallbackConfig.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/config/ProductConfig.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/config/ReturnCallbackConfig.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/controller/LoanController.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/controller/RepaymentController.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/feign/UserFeignService.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/mapper/LoanMapper.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/mapper/RepaymentMapper.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/service/LoanService.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/service/RepaymentService.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/service/impl/LoanServiceImpl.java
create mode 100644 bwie-modules/bwie-loan/src/main/java/com/bwie/loan/service/impl/RepaymentServiceImpl.java
create mode 100644 bwie-modules/bwie-loan/src/main/resources/bootstrap.yml
create mode 100644 bwie-modules/bwie-loan/src/main/resources/mapper/LoanMapper.xml
create mode 100644 bwie-modules/bwie-loan/src/main/resources/mapper/RepaymentMapper.xml
create mode 100644 bwie-modules/bwie-loan/target/bwie-loan-1.0-SNAPSHOT.jar
create mode 100644 bwie-modules/bwie-loan/target/classes/bootstrap.yml
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/LoanApplication.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/config/ConfirmCallbackConfig.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/config/ProductConfig$1.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/config/ProductConfig.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/config/ReturnCallbackConfig.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/controller/LoanController.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/controller/RepaymentController.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/feign/UserFeignService.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/mapper/LoanMapper.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/mapper/RepaymentMapper.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/service/LoanService.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/service/RepaymentService.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/service/impl/LoanServiceImpl.class
create mode 100644 bwie-modules/bwie-loan/target/classes/com/bwie/loan/service/impl/RepaymentServiceImpl.class
create mode 100644 bwie-modules/bwie-loan/target/classes/mapper/LoanMapper.xml
create mode 100644 bwie-modules/bwie-loan/target/classes/mapper/RepaymentMapper.xml
create mode 100644 bwie-modules/bwie-loan/target/maven-archiver/pom.properties
create mode 100644 bwie-modules/bwie-loan/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
create mode 100644 bwie-modules/bwie-loan/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
create mode 100644 bwie-modules/bwie-loan/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
create mode 100644 bwie-modules/bwie-loan/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
create mode 100644 bwie-modules/bwie-system/bwie-system.iml
create mode 100644 bwie-modules/bwie-system/pom.xml
create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/SystemApplication.java
create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/UserController.java
create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java
create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/service/UserService.java
create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java
create mode 100644 bwie-modules/bwie-system/src/main/resources/bootstrap.yml
create mode 100644 bwie-modules/bwie-system/src/main/resources/mapper/UserMapper.xml
create mode 100644 bwie-modules/bwie-system/target/bwie-system-1.0-SNAPSHOT.jar
create mode 100644 bwie-modules/bwie-system/target/classes/bootstrap.yml
create mode 100644 bwie-modules/bwie-system/target/classes/com/bwie/system/SystemApplication.class
create mode 100644 bwie-modules/bwie-system/target/classes/com/bwie/system/controller/UserController.class
create mode 100644 bwie-modules/bwie-system/target/classes/com/bwie/system/mapper/UserMapper.class
create mode 100644 bwie-modules/bwie-system/target/classes/com/bwie/system/service/UserService.class
create mode 100644 bwie-modules/bwie-system/target/classes/com/bwie/system/service/impl/UserServiceImpl.class
create mode 100644 bwie-modules/bwie-system/target/classes/mapper/UserMapper.xml
create mode 100644 bwie-modules/bwie-system/target/maven-archiver/pom.properties
create mode 100644 bwie-modules/bwie-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
create mode 100644 bwie-modules/bwie-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
create mode 100644 bwie-modules/bwie-system/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
create mode 100644 bwie-modules/bwie-system/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
create mode 100644 bwie-modules/pom.xml
create mode 100644 month1010-fst.iml
create mode 100644 pom.xml
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..9201a2f
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..9bb4b5b
--- /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/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bwie-auth/pom.xml b/bwie-auth/pom.xml
new file mode 100644
index 0000000..27a2320
--- /dev/null
+++ b/bwie-auth/pom.xml
@@ -0,0 +1,28 @@
+
+
+
+ month1010-fst
+ com.bwie
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ bwie-auth
+
+
+
+
+ com.bwie
+ 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..74f582d
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java
@@ -0,0 +1,13 @@
+package com.bwie.auth;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@SpringBootApplication
+@EnableFeignClients
+public class AuthApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(AuthApplication.class);
+ }
+}
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..5aec95e
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java
@@ -0,0 +1,78 @@
+package com.bwie.auth.controller;
+
+import com.bwie.auth.service.impl.AuthServiceImpl;
+import com.bwie.common.domain.request.LoginRequest;
+import com.bwie.common.domain.response.JwtResponse;
+import com.bwie.common.domain.response.UserResponse;
+import com.bwie.common.result.Result;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+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.servlet.http.HttpServletRequest;
+
+@RestController
+@Log4j2
+public class AuthController {
+ @Autowired
+ private AuthServiceImpl authService;
+
+ @Autowired
+ private HttpServletRequest request;
+
+ /**
+ * 登录
+ * @param loginRequest
+ * @return
+ */
+ @PostMapping("login")
+ public Result login(@RequestBody LoginRequest loginRequest){
+ log.info("功能:登录,请求路径:{},请求方式:{},请求参数:{}",
+ request.getRequestURI(),request.getMethod(),loginRequest);
+
+ Result result = authService.login(loginRequest);
+
+ log.info("功能:登录,请求路径:{},请求方式:{},响应结果:{}",
+ request.getRequestURI(),request.getMethod(),result);
+
+ return result;
+ }
+
+ /**
+ * 获取当前用户信息
+ * @return
+ */
+ @GetMapping("getInfo")
+ public Result getInfo(){
+ log.info("功能:获取当前用户信息,请求路径:{},请求方式:{},请求参数:{}",
+ request.getRequestURI(),request.getMethod(),"");
+
+ Result result = authService.getInfo();
+
+ log.info("功能:获取当前用户信息,请求路径:{},请求方式:{},响应结果:{}",
+ request.getRequestURI(),request.getMethod(),result);
+
+ return result;
+ }
+
+
+ /**
+ * 登出
+ * @return
+ */
+ @PostMapping("logout")
+ public Result logout(){
+ log.info("功能:登出,请求路径:{},请求方式:{},请求参数:{}",
+ request.getRequestURI(),request.getMethod(),"");
+
+ Result result = authService.logout();
+
+ log.info("功能:登出,请求路径:{},请求方式:{},响应结果:{}",
+ request.getRequestURI(),request.getMethod(),result);
+
+ return result;
+ }
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/feign/UserFeignService.java b/bwie-auth/src/main/java/com/bwie/auth/feign/UserFeignService.java
new file mode 100644
index 0000000..d89b2b9
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/feign/UserFeignService.java
@@ -0,0 +1,19 @@
+package com.bwie.auth.feign;
+
+import com.bwie.common.domain.response.UserResponse;
+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.PathVariable;
+
+@FeignClient("bwie-system")
+public interface UserFeignService {
+
+ /**
+ * 根据用户名查找用户
+ * @param userName
+ * @return
+ */
+ @GetMapping("/findByUserName/{userName}")
+ public Result findByUserName(@PathVariable String userName);
+}
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..a77e116
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java
@@ -0,0 +1,14 @@
+package com.bwie.auth.service;
+
+import com.bwie.common.domain.request.LoginRequest;
+import com.bwie.common.domain.response.JwtResponse;
+import com.bwie.common.domain.response.UserResponse;
+import com.bwie.common.result.Result;
+
+public interface AuthService {
+ Result login(LoginRequest loginRequest);
+
+ Result getInfo();
+
+ 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..a72754b
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java
@@ -0,0 +1,96 @@
+package com.bwie.auth.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.bwie.auth.feign.UserFeignService;
+import com.bwie.auth.service.AuthService;
+import com.bwie.common.constants.JwtConstants;
+import com.bwie.common.constants.TokenConstants;
+import com.bwie.common.domain.request.LoginRequest;
+import com.bwie.common.domain.response.JwtResponse;
+import com.bwie.common.domain.response.UserResponse;
+import com.bwie.common.result.Result;
+import com.bwie.common.utils.JwtUtils;
+import com.bwie.common.utils.StringUtils;
+import io.jsonwebtoken.Jwt;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class AuthServiceImpl implements AuthService {
+
+ @Autowired
+ private UserFeignService userFeignService;
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ @Autowired
+ private HttpServletRequest request;
+
+ /**
+ * 登录
+ * @param loginRequest
+ * @return
+ */
+ @Override
+ public Result login(LoginRequest loginRequest) {
+ //非空验证
+ if (StringUtils.isAnyBlank(loginRequest.getUserName(),loginRequest.getPassword())){
+ return Result.error("账号密码不能为空");
+ }
+ Result byUserName = userFeignService.findByUserName(loginRequest.getUserName());
+ UserResponse user = byUserName.getData();
+ //判断用户是否存在
+ if (user==null){
+ return Result.error("账号未注册");
+ }
+ //判断密码是否正确
+ if (!user.getPassword().equals(loginRequest.getPassword())){
+ return Result.error("账号密码错误");
+ }
+ //登录成功 生成token 用户数据存入redis
+ String userKey = UUID.randomUUID().toString().replaceAll("-", "");
+ HashMap map = new HashMap<>();
+ map.put(JwtConstants.USER_KEY,userKey);
+ map.put(JwtConstants.DETAILS_USER_ID,user.getId());
+ String token = JwtUtils.createToken(map);
+ redisTemplate.opsForValue().set(TokenConstants.LOGIN_TOKEN_KEY+userKey,
+ JSON.toJSONString(user),60, TimeUnit.MINUTES);
+ //生成jwt
+ JwtResponse jwtResponse = new JwtResponse();
+ jwtResponse.setToken(token);
+ jwtResponse.setExpire("60Min");
+ return Result.success(jwtResponse);
+ }
+
+ /**
+ * 获取用户信息
+ * @return
+ */
+ @Override
+ public Result getInfo() {
+ String token = request.getHeader("token");
+ String userKey = JwtUtils.getUserKey(token);
+ String s = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey);
+ UserResponse userResponse = JSON.parseObject(s, UserResponse.class);
+ return Result.success(userResponse);
+ }
+
+ /**
+ * 登出
+ * @return
+ */
+ @Override
+ public Result logout() {
+ String token = request.getHeader("token");
+ String userKey = JwtUtils.getUserKey(token);
+ redisTemplate.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..2a1fe00
--- /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.111.133:8848
+ config:
+ # 配置中心地址
+ server-addr: 192.168.111.133: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..b29c4da4643b5326123fd2c4de09e5955e3058ad
GIT binary patch
literal 10491
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
literal 0
HcmV?d00001
diff --git a/bwie-auth/target/classes/com/bwie/auth/config/ConfirmCallbackConfig.class b/bwie-auth/target/classes/com/bwie/auth/config/ConfirmCallbackConfig.class
new file mode 100644
index 0000000000000000000000000000000000000000..b70cddb5a8d94d480683ac09e707f829d82eb73d
GIT binary patch
literal 2283
zcmbtWTT@$A7+pIggoMLItW^-((u*b`aIB@a5=4Qvwl=f~h}u5wgiSa!IVYZTB4r$B
z>{}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
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
+
+
+ month1010-fst
+ com.bwie
+ 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/Repayment.java b/bwie-common/src/main/java/com/bwie/common/domain/Repayment.java
new file mode 100644
index 0000000..72a8955
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/Repayment.java
@@ -0,0 +1,38 @@
+package com.bwie.common.domain;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 还款计划
+ */
+@Data
+public class Repayment {
+ private Integer id;
+ private Integer loanId;
+ /**
+ * 还款金额
+ */
+ private Double repaymentAmount;
+
+ /**
+ * 本期利息
+ */
+ private Double currentProfit;
+
+ /**
+ * 状态 0未还款 1已还款
+ */
+ private Integer status;
+
+ /**
+ * 代表还款第几期
+ */
+ private Integer period;
+
+ /**
+ * 还款日期
+ */
+ private Date repaymentDate;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/LoanRequest.java b/bwie-common/src/main/java/com/bwie/common/domain/request/LoanRequest.java
new file mode 100644
index 0000000..131a362
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/LoanRequest.java
@@ -0,0 +1,49 @@
+package com.bwie.common.domain.request;
+
+import lombok.Data;
+
+import java.util.Date;
+@Data
+public class LoanRequest {
+ private Integer id;
+ /**
+ * 借款金额
+ */
+ private Double loanAmount;
+
+ /**
+ * 期数
+ */
+ private Integer periods;
+
+ /**
+ * 手续费
+ */
+ private Double handlingCharge;
+
+ /**
+ * 借款人
+ */
+ private Integer createBy;
+
+ /**
+ * 借款时间
+ */
+ private Date createTime;
+
+ /**
+ * 放款机构id
+ */
+ private Integer lendingInstitutionId;
+
+
+ /**
+ * 状态 0申请中 1申请通过 2申请失败
+ */
+ private Integer status;
+
+ /**
+ * 利息
+ */
+ private Double loanInterest;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/LoginRequest.java b/bwie-common/src/main/java/com/bwie/common/domain/request/LoginRequest.java
new file mode 100644
index 0000000..e312b3f
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/LoginRequest.java
@@ -0,0 +1,9 @@
+package com.bwie.common.domain.request;
+
+import lombok.Data;
+
+@Data
+public class LoginRequest {
+ private String userName;
+ private String password;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java b/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java
new file mode 100644
index 0000000..1bb9b44
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java
@@ -0,0 +1,9 @@
+package com.bwie.common.domain.response;
+
+import lombok.Data;
+
+@Data
+public class JwtResponse {
+ private String token;
+ private String expire;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/Loan.java b/bwie-common/src/main/java/com/bwie/common/domain/response/Loan.java
new file mode 100644
index 0000000..afb4267
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/Loan.java
@@ -0,0 +1,69 @@
+package com.bwie.common.domain.response;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class Loan {
+ private Integer id;
+ /**
+ * 借款金额
+ */
+ private Double loanAmount;
+
+ /**
+ * 期数
+ */
+ private Integer periods;
+
+ /**
+ * 最近还款时间
+ */
+ private Date lastPaymentDate;
+
+ /**
+ * 手续费
+ */
+ private Double handlingCharge;
+
+ /**
+ * 借款人
+ */
+ private Integer createBy;
+
+ /**
+ * 借款时间
+ */
+ private Date createTime;
+
+ /**
+ * 放款机构id
+ */
+ private Integer lendingInstitutionId;
+
+ /**
+ * 放款机构
+ */
+ private String lendingInstitution;
+
+ /**
+ * 状态 0申请中 1申请通过 2申请失败
+ */
+ private Integer status;
+
+ /**
+ * 已还本金
+ */
+ private Double repaidPrincipal;
+
+ /**
+ * 未还本金
+ */
+ private Double outstandingPrincipal;
+
+ /**
+ * 利息
+ */
+ private Double loanInterest;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/UserResponse.java b/bwie-common/src/main/java/com/bwie/common/domain/response/UserResponse.java
new file mode 100644
index 0000000..026ea54
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/UserResponse.java
@@ -0,0 +1,17 @@
+package com.bwie.common.domain.response;
+
+import lombok.Data;
+
+@Data
+public class UserResponse {
+ private Integer id;
+ private String userName;
+ private String password;
+ private Integer roleId;
+ /**
+ * 借款额度额度
+ */
+ private Double loanLimit;
+
+ private String phone;
+}
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/HttpPost.java b/bwie-common/src/main/java/com/bwie/common/utils/HttpPost.java
new file mode 100644
index 0000000..93380f0
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/HttpPost.java
@@ -0,0 +1,77 @@
+package com.bwie.common.utils;
+
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+
+public class HttpPost {
+ public static void main(String[] args) {
+ //你的本地地址 配你的项目地址 这个是我电脑本地的地址
+ String doGet = doGet("http://127.0.0.1:8081/sell/list");
+ System.out.println("----------SSSS---DDS--S--"+doGet);
+ }
+ public static String doGet(String httpUrl){
+ //链接
+ HttpURLConnection connection=null;
+
+ InputStream is=null;
+ BufferedReader br = null;
+ StringBuffer result=new StringBuffer();
+ try {
+ //创建连接
+ URL url=new URL(httpUrl);
+ connection= (HttpURLConnection) url.openConnection();
+ //设置请求方式
+ connection.setRequestMethod("GET");
+ //设置连接超时时间
+ connection.setConnectTimeout(15000);
+ //设置读取超时时间
+ connection.setReadTimeout(15000);
+
+ //开始连接
+ connection.connect();
+ //获取响应数据
+ if(connection.getResponseCode()==200){
+ //获取返回的数据
+ is=connection.getInputStream();
+ if(is!=null){
+ br=new BufferedReader(new InputStreamReader(is,"UTF-8"));
+ String temp = null;
+ while ((temp=br.readLine())!=null){
+ result.append(temp);
+ }
+ }
+ }
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }finally {
+ if(br!=null){
+ try {
+ br.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if(is!=null){
+ try {
+ is.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ connection.disconnect();// 关闭远程连接
+ }
+ return result.toString();
+ }
+
+
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/HttpUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/HttpUtils.java
new file mode 100644
index 0000000..1c7e2f3
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/HttpUtils.java
@@ -0,0 +1,310 @@
+package com.bwie.common.utils;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class HttpUtils {
+ /**
+ * get
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doGet(String host, String path, String method,
+ Map headers,
+ Map querys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpGet request = new HttpGet(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * post form
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param bodys
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPost(String host, String path, String method,
+ Map headers,
+ Map querys,
+ Map bodys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (bodys != null) {
+ List nameValuePairList = new ArrayList();
+
+ for (String key : bodys.keySet()) {
+ nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
+ }
+ UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
+ formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
+ request.setEntity(formEntity);
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Post String
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPost(String host, String path, String method,
+ Map headers,
+ Map querys,
+ String body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (StringUtils.isNotBlank(body)) {
+ request.setEntity(new StringEntity(body, "utf-8"));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Post stream
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPost(String host, String path, String method,
+ Map headers,
+ Map querys,
+ byte[] body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (body != null) {
+ request.setEntity(new ByteArrayEntity(body));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Put String
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPut(String host, String path, String method,
+ Map headers,
+ Map querys,
+ String body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPut request = new HttpPut(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (StringUtils.isNotBlank(body)) {
+ request.setEntity(new StringEntity(body, "utf-8"));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Put stream
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPut(String host, String path, String method,
+ Map headers,
+ Map querys,
+ byte[] body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPut request = new HttpPut(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (body != null) {
+ request.setEntity(new ByteArrayEntity(body));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Delete
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doDelete(String host, String path, String method,
+ Map headers,
+ Map querys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ return httpClient.execute(request);
+ }
+
+ private static String buildUrl(String host, String path, Map querys) throws UnsupportedEncodingException {
+ StringBuilder sbUrl = new StringBuilder();
+ sbUrl.append(host);
+ if (!StringUtils.isBlank(path)) {
+ sbUrl.append(path);
+ }
+ if (null != querys) {
+ StringBuilder sbQuery = new StringBuilder();
+ for (Map.Entry query : querys.entrySet()) {
+ if (0 < sbQuery.length()) {
+ sbQuery.append("&");
+ }
+ if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
+ sbQuery.append(query.getValue());
+ }
+ if (!StringUtils.isBlank(query.getKey())) {
+ sbQuery.append(query.getKey());
+ if (!StringUtils.isBlank(query.getValue())) {
+ sbQuery.append("=");
+ sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
+ }
+ }
+ }
+ if (0 < sbQuery.length()) {
+ sbUrl.append("?").append(sbQuery);
+ }
+ }
+
+ return sbUrl.toString();
+ }
+
+ private static HttpClient wrapClient(String host) {
+ HttpClient httpClient = new DefaultHttpClient();
+ if (host.startsWith("https://")) {
+ sslClient(httpClient);
+ }
+
+ return httpClient;
+ }
+
+ private static void sslClient(HttpClient httpClient) {
+ try {
+ SSLContext ctx = SSLContext.getInstance("TLS");
+ X509TrustManager tm = new X509TrustManager() {
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+ public void checkClientTrusted(X509Certificate[] xcs, String str) {
+
+ }
+ public void checkServerTrusted(X509Certificate[] xcs, String str) {
+
+ }
+ };
+ ctx.init(null, new TrustManager[] { tm }, null);
+ SSLSocketFactory ssf = new SSLSocketFactory(ctx);
+ ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+ ClientConnectionManager ccm = httpClient.getConnectionManager();
+ SchemeRegistry registry = ccm.getSchemeRegistry();
+ registry.register(new Scheme("https", 443, ssf));
+ } catch (KeyManagementException ex) {
+ throw new RuntimeException(ex);
+ } catch (NoSuchAlgorithmException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+}
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/MsgUitl.java b/bwie-common/src/main/java/com/bwie/common/utils/MsgUitl.java
new file mode 100644
index 0000000..f8fb683
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/MsgUitl.java
@@ -0,0 +1,76 @@
+package com.bwie.common.utils;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.util.EntityUtils;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author markguo
+ * @version 1.0.0
+ * @ClassName MsgUitl.java
+ * @Description TODO
+ * @createTime 2022年07月22日 15:38:00
+ */
+@Component
+public class MsgUitl {
+
+ public static String sendMsg(String phone,String code) {
+ String host = "https://gyytz.market.alicloudapi.com";
+ String path = "/sms/smsSend";
+ String method = "POST";
+ String appcode = "b491bc5d56bb4fa59171e19aaab030bb";
+ Map headers = new HashMap();
+ //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
+ headers.put("Authorization", "APPCODE " + appcode);
+ Map querys = new HashMap();
+ querys.put("mobile", phone);
+ querys.put("param", "code"+code);
+ querys.put("smsSignId", "2e65b1bb3d054466b82f0c9d125465e2");
+ querys.put("templateId", "908e94ccf08b4476ba6c876d13f084ad");
+ Map bodys = new HashMap();
+
+ String message="";
+ try {
+ /**
+ * 重要提示如下:
+ * HttpUtils请从
+ * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java
+ * 下载
+ *
+ * 相应的依赖请参照
+ * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
+ */
+ HttpResponse response = com.bwie.common.utils.HttpUtils.doPost(host, path, method, headers, querys, bodys);
+ System.out.println(response.toString());
+// 获取response的body
+ message = EntityUtils.toString(response.getEntity());
+ System.out.println(EntityUtils.toString(response.getEntity()));
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return message;
+ }
+
+ @CachePut(value="aaa", key="#mobile")
+ public String saveCode(String mobile,String code){
+ return code;
+ }
+
+ /**
+ * 获得验证码
+ * @param mobile
+ * @return
+ */
+
+ @Cacheable(value="aaa", key="#mobile")
+ public String getCode(String mobile){
+ return "1234";
+ }
+
+}
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..3c8930c
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java
@@ -0,0 +1,87 @@
+package com.bawei.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/target/bwie-common-1.0-SNAPSHOT.jar b/bwie-common/target/bwie-common-1.0-SNAPSHOT.jar
new file mode 100644
index 0000000000000000000000000000000000000000..8a82b9a694617a946a777be01d9dcb99026aba81
GIT binary patch
literal 36559
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