From b4ff68a3b9903a49ef42a321841bd3fc45defe41 Mon Sep 17 00:00:00 2001
From: 86191 <2160251938@qq.com>
Date: Mon, 12 Aug 2024 21:15:38 +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/compiler.xml | 32 +
.idea/jarRepositories.xml | 20 +
.idea/shelf/更改/shelved.patch | 4814 +++++++++++++++++
.idea/vcs.xml | 6 +
.idea/workspace.xml | 303 ++
bwie-auth/target/bwie-auth-1.0-SNAPSHOT.jar | Bin 0 -> 11113 bytes
bwie-auth/target/classes/bootstrap.yml | 43 +
.../com/bwie/auth/AuthApplication.class | Bin 0 -> 884 bytes
.../bwie/auth/controller/AuthController.class | Bin 0 -> 4095 bytes
.../com/bwie/auth/remote/AuthRemote.class | Bin 0 -> 717 bytes
.../com/bwie/auth/remote/impl/Fusing$1.class | Bin 0 -> 1052 bytes
.../com/bwie/auth/remote/impl/Fusing.class | Bin 0 -> 1021 bytes
.../com/bwie/auth/service/AuthService.class | Bin 0 -> 411 bytes
.../auth/service/impl/AuthServiceImpl$1.class | Bin 0 -> 910 bytes
.../auth/service/impl/AuthServiceImpl.class | Bin 0 -> 5101 bytes
.../target/maven-archiver/pom.properties | 3 +
.../compile/default-compile/createdFiles.lst | 8 +
.../compile/default-compile/inputFiles.lst | 6 +
.../default-testCompile/createdFiles.lst | 0
.../default-testCompile/inputFiles.lst | 0
.../target/bwie-common-1.0-SNAPSHOT.jar | Bin 0 -> 38349 bytes
.../classes/com/bwie/common/aop/Aop.class | Bin 0 -> 1436 bytes
.../bwie/common/config/RabbitMQConfig.class | Bin 0 -> 705 bytes
.../com/bwie/common/constants/Constants.class | Bin 0 -> 651 bytes
.../bwie/common/constants/JwtConstants.class | Bin 0 -> 544 bytes
.../RabbitMQQueueNameConstants.class | Bin 0 -> 431 bytes
.../common/constants/TokenConstants.class | Bin 0 -> 526 bytes
.../domain/Consign$ConsignBuilder.class | Bin 0 -> 2412 bytes
.../com/bwie/common/domain/Consign.class | Bin 0 -> 4883 bytes
.../common/domain/Order$OrderBuilder.class | Bin 0 -> 2530 bytes
.../com/bwie/common/domain/Order.class | Bin 0 -> 5402 bytes
.../bwie/common/domain/User$UserBuilder.class | Bin 0 -> 1805 bytes
.../classes/com/bwie/common/domain/User.class | Bin 0 -> 4000 bytes
.../common/domain/Volume$VolumeBuilder.class | Bin 0 -> 2664 bytes
.../com/bwie/common/domain/Volume.class | Bin 0 -> 6358 bytes
.../OrderRequest$OrderRequestBuilder.class | Bin 0 -> 1164 bytes
.../common/domain/request/OrderRequest.class | Bin 0 -> 1898 bytes
.../UserRequest$UserRequestBuilder.class | Bin 0 -> 1288 bytes
.../common/domain/request/UserRequest.class | Bin 0 -> 2513 bytes
.../VolumeRequest$VolumeRequestBuilder.class | Bin 0 -> 1685 bytes
.../common/domain/request/VolumeRequest.class | Bin 0 -> 3028 bytes
.../TokenResponse$TokenResponseBuilder.class | Bin 0 -> 1329 bytes
.../domain/response/TokenResponse.class | Bin 0 -> 2576 bytes
.../common/exception/CustomException.class | Bin 0 -> 1457 bytes
.../handle/GlobalExceptionHandler.class | Bin 0 -> 1401 bytes
.../com/bwie/common/result/PageResult.class | Bin 0 -> 3298 bytes
.../com/bwie/common/result/Result.class | Bin 0 -> 4880 bytes
.../com/bwie/common/utils/JwtUtils.class | Bin 0 -> 2871 bytes
.../com/bwie/common/utils/StringUtils.class | Bin 0 -> 1805 bytes
.../com/bwie/common/utils/TelSmsUtils.class | Bin 0 -> 3812 bytes
.../target/maven-archiver/pom.properties | 3 +
.../compile/default-compile/createdFiles.lst | 29 +
.../compile/default-compile/inputFiles.lst | 21 +
.../default-testCompile/createdFiles.lst | 0
.../default-testCompile/inputFiles.lst | 0
.../target/bwie-gateway-1.0-SNAPSHOT.jar | Bin 0 -> 9457 bytes
bwie-gateway/target/classes/bootstrap.yml | 29 +
.../com/bwie/gateway/GatewayApplication.class | Bin 0 -> 911 bytes
.../gateway/config/IgnoreWhiteConfig.class | Bin 0 -> 2584 bytes
.../com/bwie/gateway/filters/AuthFilter.class | Bin 0 -> 4139 bytes
.../com/bwie/gateway/utils/GatewayUtils.class | Bin 0 -> 6207 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-es/target/bwie-es-1.0-SNAPSHOT.jar | Bin 0 -> 19185 bytes
.../bwie-es/target/classes/bootstrap.yml | 29 +
.../classes/com/bwie/es/EsApplication.class | Bin 0 -> 872 bytes
.../es/config/ConfirmCallbackConfig.class | Bin 0 -> 1773 bytes
.../es/config/InitESRestHighLevelClient.class | Bin 0 -> 2976 bytes
.../bwie/es/config/ReturnCallbackConfig.class | Bin 0 -> 1819 bytes
.../com/bwie/es/consumer/VolumeConsumer.class | Bin 0 -> 3362 bytes
.../com/bwie/es/controller/EsController.class | Bin 0 -> 3239 bytes
.../com/bwie/es/remote/VolumeRemote.class | Bin 0 -> 975 bytes
.../com/bwie/es/remote/impl/Fusing$1.class | Bin 0 -> 1279 bytes
.../com/bwie/es/remote/impl/Fusing.class | Bin 0 -> 1013 bytes
.../com/bwie/es/service/EsService.class | Bin 0 -> 443 bytes
.../bwie/es/service/impl/EsServiceImpl.class | Bin 0 -> 7383 bytes
.../com/bwie/es/synchronous/EsVolume.class | Bin 0 -> 4435 bytes
.../target/classes/mapper/LoginMapper.xml | 22 +
.../target/maven-archiver/pom.properties | 3 +
.../compile/default-compile/createdFiles.lst | 12 +
.../compile/default-compile/inputFiles.lst | 11 +
.../default-testCompile/createdFiles.lst | 0
.../default-testCompile/inputFiles.lst | 0
.../target/bwie-order-1.0-SNAPSHOT.jar | Bin 0 -> 9606 bytes
.../bwie-order/target/classes/bootstrap.yml | 29 +
.../com/bwie/order/OrderApplication.class | Bin 0 -> 888 bytes
.../order/controller/OrderController.class | Bin 0 -> 3807 bytes
.../com/bwie/order/mapper/OrderMapper.class | Bin 0 -> 694 bytes
.../com/bwie/order/service/OrderService.class | Bin 0 -> 491 bytes
.../order/service/impl/OrderServiceImpl.class | Bin 0 -> 1503 bytes
.../bwie/order/synchronization/Timing.class | Bin 0 -> 2782 bytes
.../target/classes/mapper/OrderMapper.xml | 56 +
.../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
.../target/bwie-system-1.0-SNAPSHOT.jar | Bin 0 -> 7425 bytes
.../bwie-system/target/classes/bootstrap.yml | 29 +
.../com/bwie/system/SystemApplication.class | Bin 0 -> 827 bytes
.../system/controller/UserController.class | Bin 0 -> 3363 bytes
.../com/bwie/system/mapper/UserMapper.class | Bin 0 -> 496 bytes
.../com/bwie/system/service/UserService.class | Bin 0 -> 311 bytes
.../system/service/impl/UserServiceImpl.class | Bin 0 -> 1227 bytes
.../target/classes/mapper/LoginMapper.xml | 22 +
.../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
.../target/bwie-volume-1.0-SNAPSHOT.jar | Bin 0 -> 15467 bytes
.../bwie-volume/target/classes/bootstrap.yml | 29 +
.../com/bwie/volume/VolumeApplication.class | Bin 0 -> 890 bytes
.../volume/controller/VolumeController.class | Bin 0 -> 4516 bytes
.../bwie/volume/mapper/ConsignMapper.class | Bin 0 -> 315 bytes
.../com/bwie/volume/mapper/VolumeMapper.class | Bin 0 -> 939 bytes
.../com/bwie/volume/remote/OrderRemote.class | Bin 0 -> 954 bytes
.../bwie/volume/remote/impl/Fusing$1.class | Bin 0 -> 1383 bytes
.../com/bwie/volume/remote/impl/Fusing.class | Bin 0 -> 1059 bytes
.../bwie/volume/service/ConsignService.class | Bin 0 -> 233 bytes
.../bwie/volume/service/VolumeService.class | Bin 0 -> 620 bytes
.../service/impl/ConsignServiceImpl.class | Bin 0 -> 872 bytes
.../service/impl/VolumeServiceImpl.class | Bin 0 -> 7521 bytes
.../target/classes/mapper/ConsignMapper.xml | 17 +
.../target/classes/mapper/VolumeMapper.xml | 68 +
.../target/maven-archiver/pom.properties | 3 +
.../compile/default-compile/createdFiles.lst | 11 +
.../compile/default-compile/inputFiles.lst | 10 +
.../default-testCompile/createdFiles.lst | 0
.../default-testCompile/inputFiles.lst | 0
133 files changed, 5707 insertions(+)
create mode 100644 .idea/compiler.xml
create mode 100644 .idea/jarRepositories.xml
create mode 100644 .idea/shelf/更改/shelved.patch
create mode 100644 .idea/vcs.xml
create mode 100644 .idea/workspace.xml
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/controller/AuthController.class
create mode 100644 bwie-auth/target/classes/com/bwie/auth/remote/AuthRemote.class
create mode 100644 bwie-auth/target/classes/com/bwie/auth/remote/impl/Fusing$1.class
create mode 100644 bwie-auth/target/classes/com/bwie/auth/remote/impl/Fusing.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$1.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/target/bwie-common-1.0-SNAPSHOT.jar
create mode 100644 bwie-common/target/classes/com/bwie/common/aop/Aop.class
create mode 100644 bwie-common/target/classes/com/bwie/common/config/RabbitMQConfig.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/RabbitMQQueueNameConstants.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/Consign$ConsignBuilder.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/Consign.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/Order$OrderBuilder.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$UserBuilder.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/Volume$VolumeBuilder.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/Volume.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/request/OrderRequest$OrderRequestBuilder.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/request/OrderRequest.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/request/UserRequest$UserRequestBuilder.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/request/UserRequest.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/request/VolumeRequest$VolumeRequestBuilder.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/request/VolumeRequest.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/response/TokenResponse$TokenResponseBuilder.class
create mode 100644 bwie-common/target/classes/com/bwie/common/domain/response/TokenResponse.class
create mode 100644 bwie-common/target/classes/com/bwie/common/exception/CustomException.class
create mode 100644 bwie-common/target/classes/com/bwie/common/handle/GlobalExceptionHandler.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/JwtUtils.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/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/AuthFilter.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/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/ConfirmCallbackConfig.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/config/ReturnCallbackConfig.class
create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/consumer/VolumeConsumer.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/remote/VolumeRemote.class
create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/remote/impl/Fusing$1.class
create mode 100644 bwie-module/bwie-es/target/classes/com/bwie/es/remote/impl/Fusing.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/synchronous/EsVolume.class
create mode 100644 bwie-module/bwie-es/target/classes/mapper/LoginMapper.xml
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-order/target/bwie-order-1.0-SNAPSHOT.jar
create mode 100644 bwie-module/bwie-order/target/classes/bootstrap.yml
create mode 100644 bwie-module/bwie-order/target/classes/com/bwie/order/OrderApplication.class
create mode 100644 bwie-module/bwie-order/target/classes/com/bwie/order/controller/OrderController.class
create mode 100644 bwie-module/bwie-order/target/classes/com/bwie/order/mapper/OrderMapper.class
create mode 100644 bwie-module/bwie-order/target/classes/com/bwie/order/service/OrderService.class
create mode 100644 bwie-module/bwie-order/target/classes/com/bwie/order/service/impl/OrderServiceImpl.class
create mode 100644 bwie-module/bwie-order/target/classes/com/bwie/order/synchronization/Timing.class
create mode 100644 bwie-module/bwie-order/target/classes/mapper/OrderMapper.xml
create mode 100644 bwie-module/bwie-order/target/maven-archiver/pom.properties
create mode 100644 bwie-module/bwie-order/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
create mode 100644 bwie-module/bwie-order/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
create mode 100644 bwie-module/bwie-order/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
create mode 100644 bwie-module/bwie-order/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
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/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/classes/mapper/LoginMapper.xml
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/bwie-volume/target/bwie-volume-1.0-SNAPSHOT.jar
create mode 100644 bwie-module/bwie-volume/target/classes/bootstrap.yml
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/VolumeApplication.class
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/controller/VolumeController.class
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/mapper/ConsignMapper.class
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/mapper/VolumeMapper.class
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/remote/OrderRemote.class
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/remote/impl/Fusing$1.class
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/remote/impl/Fusing.class
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/service/ConsignService.class
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/service/VolumeService.class
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/service/impl/ConsignServiceImpl.class
create mode 100644 bwie-module/bwie-volume/target/classes/com/bwie/volume/service/impl/VolumeServiceImpl.class
create mode 100644 bwie-module/bwie-volume/target/classes/mapper/ConsignMapper.xml
create mode 100644 bwie-module/bwie-volume/target/classes/mapper/VolumeMapper.xml
create mode 100644 bwie-module/bwie-volume/target/maven-archiver/pom.properties
create mode 100644 bwie-module/bwie-volume/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
create mode 100644 bwie-module/bwie-volume/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
create mode 100644 bwie-module/bwie-volume/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
create mode 100644 bwie-module/bwie-volume/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..4b30302
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..5a2f139
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/shelf/更改/shelved.patch b/.idea/shelf/更改/shelved.patch
new file mode 100644
index 0000000..fecd3a4
--- /dev/null
+++ b/.idea/shelf/更改/shelved.patch
@@ -0,0 +1,4814 @@
+Index: bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723468474763)
++++ b/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java (date 1723468474763)
+@@ -0,0 +1,102 @@
++package com.bwie.auth.controller;
++
++import com.alibaba.fastjson.JSONObject;
++import com.bwie.auth.service.AuthService;
++import com.bwie.common.domain.User;
++import com.bwie.common.domain.request.UserRequest;
++import com.bwie.common.domain.response.TokenResponse;
++import com.bwie.common.result.Result;
++import lombok.extern.slf4j.Slf4j;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.web.bind.annotation.*;
++
++import javax.servlet.http.HttpServletRequest;
++
++/**
++ * @Author YuPing
++ * @Description 用户控制层
++ * @Version 1.0
++ * @Data 2024-08-12 09:49:40
++ */
++@Slf4j
++@RestController
++public class AuthController {
++
++ @Autowired
++ private AuthService authService;
++
++ @Autowired
++ private HttpServletRequest httpServletRequest;
++
++ /**
++ * 发送验证码
++ * @param phone
++ * @return
++ */
++ @GetMapping("/sendCode")
++ public Result sendCode(@RequestParam String phone){
++ log.info("功能:发送验证码");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+JSONObject.toJSONString(phone));
++ authService.sendCode(phone);
++ log.info("功能:发送验证码");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ return Result.success();
++ }
++
++
++ /**
++ * 登录
++ * @param request
++ * @return
++ */
++ @PostMapping("/login")
++ public Result login(@RequestBody UserRequest request){
++ log.info("功能:登录");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+JSONObject.toJSONString(request));
++ TokenResponse login = authService.login(request);
++ log.info("功能:登录");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("响应结果:"+ JSONObject.toJSONString(login));
++ return Result.success(login);
++ }
++
++
++ /**
++ * 获取用户信息
++ * @return
++ */
++ @GetMapping("/info")
++ public Result info(){
++ log.info("功能:获取用户信息");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ User info = authService.info();
++ log.info("功能:获取用户信息");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("响应结果:"+ JSONObject.toJSONString(info));
++ return Result.success(info);
++ }
++
++ /**
++ * 退出登录
++ */
++ @GetMapping("/logout")
++ public Result logout(){
++ log.info("功能:退出登录");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ authService.logout();
++ log.info("功能:退出登录");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ return Result.success();
++ }
++
++}
+Index: bwie-common/src/main/java/com/bwie/common/domain/response/TokenResponse.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/TokenResponse.java b/bwie-common/src/main/java/com/bwie/common/domain/response/TokenResponse.java
+new file mode 100644
+--- /dev/null (date 1723429293512)
++++ b/bwie-common/src/main/java/com/bwie/common/domain/response/TokenResponse.java (date 1723429293512)
+@@ -0,0 +1,31 @@
++package com.bwie.common.domain.response;
++
++import lombok.AllArgsConstructor;
++import lombok.Builder;
++import lombok.Data;
++import lombok.NoArgsConstructor;
++
++import javax.validation.constraints.NotEmpty;
++
++/**
++ * @Author YuPing
++ * @Description 返回用户数据
++ * @Version 1.0
++ * @Data 2024-08-12 09:44:50
++ */
++@Data
++@Builder
++@NoArgsConstructor
++@AllArgsConstructor
++public class TokenResponse {
++ /**
++ * token
++ */
++ @NotEmpty(message = "token不能为空")
++ private String token;
++ /**
++ * 过期时间
++ */
++ @NotEmpty(message = "过期时间不能为空")
++ private String expireTime;
++}
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/config/ReturnCallbackConfig.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/config/ReturnCallbackConfig.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/config/ReturnCallbackConfig.java
+new file mode 100644
+--- /dev/null (date 1723447119047)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/config/ReturnCallbackConfig.java (date 1723447119047)
+@@ -0,0 +1,37 @@
++package com.bwie.es.config;
++
++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
++public class ReturnCallbackConfig implements RabbitTemplate.ReturnsCallback {
++
++ @Autowired
++ private RabbitTemplate rabbitTemplate;
++
++ @PostConstruct
++ public void init() {
++ rabbitTemplate.setReturnsCallback(this);
++ }
++
++ /**
++ * 消息发送到队列如何未成功会执行
++ *
++ * @param returnedMessage the returned message and metadata.
++ */
++ @Override
++ public void returnedMessage(ReturnedMessage returnedMessage) {
++ System.out.println("消息" + returnedMessage.getMessage().toString() + "被交换机" + returnedMessage.getExchange() + "回退!"
++ + "退回原因为:" + returnedMessage.getReplyText());
++ // TODO 回退了 可做补偿机制
++ // 可以将消息 记录下来 到 MySQL 中
++
++ }
++}
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/config/ConfirmCallbackConfig.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/config/ConfirmCallbackConfig.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/config/ConfirmCallbackConfig.java
+new file mode 100644
+--- /dev/null (date 1723447119037)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/config/ConfirmCallbackConfig.java (date 1723447119037)
+@@ -0,0 +1,45 @@
++package com.bwie.es.config;
++
++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;
++
++/**
++ * @ClassName:
++ * @Description: 消息发送到交换件确认的 回调
++ * @Author: zhuwenqiang
++ * @Date: 2024/4/28
++ */
++@Component
++public class ConfirmCallbackConfig implements RabbitTemplate.ConfirmCallback {
++
++ @Autowired
++ private RabbitTemplate rabbitTemplate;
++
++ /**
++ * bean 初始化方法
++ */
++ @PostConstruct
++ public void init() {
++ this.rabbitTemplate.setConfirmCallback(this);
++ }
++
++ /**
++ * 消息发送到交换机 成功 或者 失败 都会执行
++ * @param correlationData correlation data for the callback.
++ * @param ack true for ack, false for nack
++ * @param cause An optional cause, for nack, when available, otherwise null.
++ */
++ @Override
++ public void confirm(CorrelationData correlationData, boolean ack, String cause) {
++ if (ack) {
++ System.out.println("消息发送到交换机成功...");
++ } else {
++ System.out.println("消息发送到交换机失败,失败的原因:" + cause);
++ }
++ }
++
++}
+Index: bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723428174100)
++++ b/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java (date 1723428174100)
+@@ -0,0 +1,124 @@
++package com.bwie.auth.service.impl;
++
++import cn.hutool.core.util.RandomUtil;
++import com.alibaba.fastjson.JSONObject;
++import com.bwie.auth.remote.AuthRemote;
++import com.bwie.auth.service.AuthService;
++import com.bwie.common.constants.JwtConstants;
++import com.bwie.common.constants.TokenConstants;
++import com.bwie.common.domain.User;
++import com.bwie.common.domain.request.UserRequest;
++import com.bwie.common.domain.response.TokenResponse;
++import com.bwie.common.utils.JwtUtils;
++import com.bwie.common.utils.StringUtils;
++import com.bwie.common.utils.TelSmsUtils;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.data.redis.core.StringRedisTemplate;
++import org.springframework.stereotype.Service;
++
++import javax.servlet.http.HttpServletRequest;
++import java.util.HashMap;
++import java.util.UUID;
++import java.util.concurrent.TimeUnit;
++
++/**
++ * @Author YuPing
++ * @Description 鉴权实现层
++ * @Version 1.0
++ * @Data 2024-08-12 09:36:20
++ */
++@Service
++public class AuthServiceImpl implements AuthService {
++
++ @Autowired
++ private AuthRemote remote;
++
++ @Autowired
++ private StringRedisTemplate redisTemplate;
++
++ @Autowired
++ private HttpServletRequest httpServletRequest;
++
++
++ /**
++ * 发送验证码
++ * @param phone
++ */
++ @Override
++ public void sendCode(String phone) {
++ if (StringUtils.isBlank(phone)){
++ throw new RuntimeException("手机号不能为空");
++ }
++
++ User user = remote.findByPhone(phone).getData();
++ if (user == null){
++ throw new RuntimeException("请注册");
++ }
++
++ String userCode = RandomUtil.randomNumbers(4);
++ redisTemplate.opsForValue().set(phone,userCode,5, TimeUnit.MINUTES);
++
++ TelSmsUtils.sendSms(phone,new HashMap(){{
++ put("code",userCode);
++ }});
++
++ }
++
++ /**
++ * 登录
++ * @param request
++ * @return
++ */
++ @Override
++ public TokenResponse login(UserRequest request) {
++ if (StringUtils.isAnyBlank(request.getPhone(),request.getCode())){
++ throw new RuntimeException("手机号或验证码不能为空");
++ }
++
++ User user = remote.findByPhone(request.getPhone()).getData();
++ if (user == null){
++ throw new RuntimeException("请注册");
++ }
++
++ if (!redisTemplate.hasKey(request.getPhone())){
++ throw new RuntimeException("验证码已过期");
++ }
++
++ if (!redisTemplate.opsForValue().get(request.getPhone()).equals(request.getCode())){
++ throw new RuntimeException("验证码错误");
++ }
++
++ HashMap map = new HashMap<>();
++ String userKey = UUID.randomUUID().toString().replaceAll("-", "");
++ map.put(JwtConstants.USER_KEY,userKey);
++ String token = JwtUtils.createToken(map);
++ redisTemplate.opsForValue().set(TokenConstants.LOGIN_TOKEN_KEY+userKey, JSONObject.toJSONString(user),30,TimeUnit.MINUTES);
++ TokenResponse response = new TokenResponse();
++ response.setToken(token);
++ response.setExpireTime("30MINUTES");
++ return response;
++ }
++
++
++ /**
++ * 获取用户信息
++ * @return
++ */
++ @Override
++ public User info() {
++ String token = httpServletRequest.getHeader(TokenConstants.TOKEN);
++ String userKey = JwtUtils.getUserKey(token);
++ String user = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey);
++ return JSONObject.parseObject(user,User.class);
++ }
++
++ /**
++ * 退出登录
++ */
++ @Override
++ public void logout() {
++ String token = httpServletRequest.getHeader(TokenConstants.TOKEN);
++ String userKey = JwtUtils.getUserKey(token);
++ redisTemplate.delete(TokenConstants.LOGIN_TOKEN_KEY + userKey);
++ }
++}
+Index: .idea/uiDesigner.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
+new file mode 100644
+--- /dev/null (date 1723427464065)
++++ b/.idea/uiDesigner.xml (date 1723427464065)
+@@ -0,0 +1,124 @@
++
++
++
++
++ -
++
++
++ -
++
++
++ -
++
++
++ -
++
++
++ -
++
++
++
++
++
++ -
++
++
++
++
++
++ -
++
++
++
++
++
++ -
++
++
++
++
++
++ -
++
++
++
++
++ -
++
++
++
++
++ -
++
++
++
++
++ -
++
++
++
++
++ -
++
++
++
++
++ -
++
++
++
++
++ -
++
++
++ -
++
++
++
++
++ -
++
++
++
++
++ -
++
++
++
++
++ -
++
++
++
++
++ -
++
++
++
++
++ -
++
++
++ -
++
++
++ -
++
++
++ -
++
++
++ -
++
++
++
++
++ -
++
++
++ -
++
++
++
++
++
+\ No newline at end of file
+Index: bwie-module/bwie-volume/src/main/resources/bootstrap.yml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/resources/bootstrap.yml b/bwie-module/bwie-volume/src/main/resources/bootstrap.yml
+new file mode 100644
+--- /dev/null (date 1723432410398)
++++ b/bwie-module/bwie-volume/src/main/resources/bootstrap.yml (date 1723432410398)
+@@ -0,0 +1,29 @@
++# 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-volume
++ profiles:
++ # 环境配置
++ active: dev
++ cloud:
++ nacos:
++ discovery:
++ # 服务注册地址
++ server-addr: 47.116.168.171:8848
++ config:
++ # 配置中心地址
++ server-addr: 47.116.168.171:8848
++ # 配置文件格式
++ file-extension: yml
++ # 共享配置
++ shared-configs:
++ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+Index: bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1715860196829)
++++ b/bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java (date 1715860196829)
+@@ -0,0 +1,31 @@
++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: 放行白名单配置
++ */
++@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;
++ }
++}
+Index: bwie-module/bwie-volume/src/main/java/com/bwie/volume/VolumeApplication.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/java/com/bwie/volume/VolumeApplication.java b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/VolumeApplication.java
+new file mode 100644
+--- /dev/null (date 1723450483497)
++++ b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/VolumeApplication.java (date 1723450483497)
+@@ -0,0 +1,21 @@
++package com.bwie.volume;
++
++import org.mybatis.spring.annotation.MapperScan;
++import org.springframework.boot.SpringApplication;
++import org.springframework.boot.autoconfigure.SpringBootApplication;
++import org.springframework.cloud.openfeign.EnableFeignClients;
++
++/**
++ * @Author YuPing
++ * @Description
++ * @Version 1.0
++ * @Data 2024-08-12 11:16:19
++ */
++@SpringBootApplication
++@MapperScan("com.bwie.volume.mapper")
++@EnableFeignClients
++public class VolumeApplication {
++ public static void main(String[] args) {
++ SpringApplication.run(VolumeApplication.class, args);
++ }
++}
+Index: bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1715860322709)
++++ b/bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java (date 1715860322709)
+@@ -0,0 +1,97 @@
++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;
++
++/**
++ * @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));
++ }
++
++
++}
+Index: bwie-gateway/src/main/java/com/bwie/gateway/GatewayApplication.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723427946488)
++++ b/bwie-gateway/src/main/java/com/bwie/gateway/GatewayApplication.java (date 1723427946488)
+@@ -0,0 +1,15 @@
++package com.bwie.gateway;
++
++import com.alibaba.cloud.sentinel.gateway.SentinelGatewayAutoConfiguration;
++import org.springframework.boot.SpringApplication;
++import org.springframework.boot.autoconfigure.SpringBootApplication;
++import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
++
++@SpringBootApplication(exclude = {SentinelGatewayAutoConfiguration.class, DataSourceAutoConfiguration.class})
++public class GatewayApplication {
++
++ public static void main(String[] args) {
++ SpringApplication.run(GatewayApplication.class,args);
++ }
++
++}
+Index: bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java b/bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java
+new file mode 100644
+--- /dev/null (date 1723432286395)
++++ b/bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java (date 1723432286395)
+@@ -0,0 +1,116 @@
++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.beans.factory.annotation.Autowired;
++import org.springframework.cloud.gateway.filter.GatewayFilterChain;
++import org.springframework.cloud.gateway.filter.GlobalFilter;
++import org.springframework.core.Ordered;
++import org.springframework.data.redis.core.StringRedisTemplate;
++import org.springframework.http.server.reactive.ServerHttpRequest;
++import org.springframework.stereotype.Component;
++import org.springframework.web.server.ServerWebExchange;
++import reactor.core.publisher.Mono;
++
++import java.util.List;
++import java.util.concurrent.TimeUnit;
++
++/**
++ * @Author YuPing
++ * @Description 鉴权过滤器
++ * @Version 1.0
++ * @Data 2024-08-12 10:52:14
++ */
++@Component
++public class AuthFilter implements GlobalFilter, Ordered {
++
++ @Autowired
++ private IgnoreWhiteConfig ignoreWhiteConfig;
++
++ @Autowired
++ private StringRedisTemplate redisTemplate;
++
++ @Override
++ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
++ List whites = ignoreWhiteConfig.getWhites();
++ ServerHttpRequest request = exchange.getRequest();
++ String path = request.getURI().getPath();
++ if (StringUtils.matches(path, whites)) {
++ return chain.filter(exchange);
++ }
++ String token = request.getHeaders().getFirst(TokenConstants.TOKEN);
++ if (StringUtils.isBlank(token)) {
++ return GatewayUtils.errorResponse(exchange, "无权访问");
++ }
++ try {
++ JwtUtils.parseToken(token);
++ } catch (Exception ex) {
++ return GatewayUtils.errorResponse(exchange, "token不合法");
++ }
++ String userKey = JwtUtils.getUserKey(token);
++ if (!redisTemplate.hasKey(TokenConstants.LOGIN_TOKEN_KEY + userKey)) {
++ return GatewayUtils.errorResponse(exchange, "token过期");
++ } else {
++ Long remainingExpireTime = redisTemplate.getExpire(TokenConstants.LOGIN_TOKEN_KEY + userKey, TimeUnit.SECONDS);
++ if (remainingExpireTime <= 600) {
++ redisTemplate.expire(TokenConstants.LOGIN_TOKEN_KEY + userKey, 900, TimeUnit.SECONDS); // 900 秒即 15 分钟
++ }
++ }
++ return chain.filter(exchange);
++ }
++
++ @Override
++ public int getOrder() {
++ return 0;
++ }
++
++}
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
+Index: bwie-module/bwie-es/pom.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-es/pom.xml b/bwie-module/bwie-es/pom.xml
+new file mode 100644
+--- /dev/null (date 1723433586352)
++++ b/bwie-module/bwie-es/pom.xml (date 1723433586352)
+@@ -0,0 +1,31 @@
++
++
++ 4.0.0
++
++ com.bwie
++ month
++ 1.0-SNAPSHOT
++ ../../pom.xml
++
++
++ bwie-es
++
++
++
++ com.bwie
++ bwie-common
++
++
++ org.springframework.boot
++ spring-boot-starter-web
++
++
++
++ org.elasticsearch.client
++ elasticsearch-rest-high-level-client
++
++
++
++
+Index: bwie-common/src/main/java/com/bwie/common/result/PageResult.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1715860115550)
++++ b/bwie-common/src/main/java/com/bwie/common/result/PageResult.java (date 1715860115550)
+@@ -0,0 +1,37 @@
++package com.bwie.common.result;
++
++import lombok.Data;
++
++import java.io.Serializable;
++import java.util.List;
++
++/**
++ * @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));
++ }
++}
+Index: bwie-common/src/main/java/com/bwie/common/result/Result.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1715860115555)
++++ b/bwie-common/src/main/java/com/bwie/common/result/Result.java (date 1715860115555)
+@@ -0,0 +1,75 @@
++package com.bwie.common.result;
++
++import com.bwie.common.constants.Constants;
++import lombok.Data;
++
++import java.io.Serializable;
++
++/**
++ * @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;
++ }
++}
+Index: bwie-common/src/main/java/com/bwie/common/constants/RabbitMQQueueNameConstants.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQQueueNameConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQQueueNameConstants.java
+new file mode 100644
+--- /dev/null (date 1723447529010)
++++ b/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQQueueNameConstants.java (date 1723447529010)
+@@ -0,0 +1,10 @@
++package com.bwie.common.constants;
++
++public class RabbitMQQueueNameConstants {
++
++ /**
++ * 短信队列名称
++ */
++ public static final String SEND_VOLUME_QUEUE = "SEND_VOLUME_QUEUE";
++
++}
+Index: bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1715860082208)
++++ b/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java (date 1715860082208)
+@@ -0,0 +1,23 @@
++package com.bwie.common.constants;
++
++/**
++ * @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";
++}
+Index: bwie-module/bwie-volume/pom.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/pom.xml b/bwie-module/bwie-volume/pom.xml
+new file mode 100644
+--- /dev/null (date 1723432361080)
++++ b/bwie-module/bwie-volume/pom.xml (date 1723432361080)
+@@ -0,0 +1,25 @@
++
++
++ 4.0.0
++
++ com.bwie
++ bwie-module
++ 1.0-SNAPSHOT
++
++
++ bwie-volume
++
++
++
++ com.bwie
++ bwie-common
++
++
++ org.springframework.boot
++ spring-boot-starter-web
++
++
++
++
+Index: bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1715860082215)
++++ b/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java (date 1715860082215)
+@@ -0,0 +1,28 @@
++package com.bwie.common.constants;
++
++/**
++ * @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";
++
++}
+Index: bwie-common/src/main/java/com/bwie/common/constants/Constants.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1715860082221)
++++ b/bwie-common/src/main/java/com/bwie/common/constants/Constants.java (date 1715860082221)
+@@ -0,0 +1,17 @@
++package com.bwie.common.constants;
++
++/**
++ * @description: 系统常量
++ */
++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 = "操作异常";
++}
+Index: bwie-module/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723429123647)
++++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java (date 1723429123647)
+@@ -0,0 +1,16 @@
++package com.bwie.system.mapper;
++
++import com.bwie.common.domain.User;
++import org.apache.ibatis.annotations.Param;
++import org.springframework.stereotype.Component;
++
++/**
++ * 用户mapper 接口
++ */
++@Component
++public interface UserMapper {
++ // 根据手机号查询用户信息
++ User findByPhone(@Param("phone") String phone);
++ //注册
++ void register(User user);
++}
+Index: bwie-gateway/pom.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-gateway/pom.xml b/bwie-gateway/pom.xml
+new file mode 100644
+--- /dev/null (date 1723424903982)
++++ b/bwie-gateway/pom.xml (date 1723424903982)
+@@ -0,0 +1,38 @@
++
++
++ 4.0.0
++
++ com.bwie
++ month
++ 1.0-SNAPSHOT
++
++
++ bwie-gateway
++
++
++
++
++ com.bwie
++ 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
++
++
++
++
+Index: bwie-common/src/main/java/com/bwie/common/domain/request/UserRequest.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/UserRequest.java b/bwie-common/src/main/java/com/bwie/common/domain/request/UserRequest.java
+new file mode 100644
+--- /dev/null (date 1723429293527)
++++ b/bwie-common/src/main/java/com/bwie/common/domain/request/UserRequest.java (date 1723429293527)
+@@ -0,0 +1,31 @@
++package com.bwie.common.domain.request;
++
++import lombok.AllArgsConstructor;
++import lombok.Builder;
++import lombok.Data;
++import lombok.NoArgsConstructor;
++
++import javax.validation.constraints.NotEmpty;
++
++/**
++ * @Author YuPing
++ * @Description 用户表请求参数
++ * @Version 1.0
++ * @Data 2024-08-12 09:15:46
++ */
++@Data
++@Builder
++@NoArgsConstructor
++@AllArgsConstructor
++public class UserRequest {
++ /**
++ * 手机号
++ */
++ @NotEmpty(message = "手机号不能为空")
++ private String phone;
++ /**
++ * 验证码
++ */
++ @NotEmpty(message = "验证码不能为空")
++ private String code;
++}
+Index: bwie-common/src/main/java/com/bwie/common/domain/User.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723429293519)
++++ b/bwie-common/src/main/java/com/bwie/common/domain/User.java (date 1723429293519)
+@@ -0,0 +1,44 @@
++package com.bwie.common.domain;
++
++import com.baomidou.mybatisplus.annotation.IdType;
++import com.baomidou.mybatisplus.annotation.TableId;
++import com.baomidou.mybatisplus.annotation.TableName;
++import lombok.AllArgsConstructor;
++import lombok.Builder;
++import lombok.Data;
++import lombok.NoArgsConstructor;
++
++/**
++ * @Author YuPing
++ * @Description 用户表实体类
++ * @Version 1.0
++ * @Data 2024-08-12 09:13:12
++ */
++@Data
++@Builder
++@NoArgsConstructor
++@AllArgsConstructor
++@TableName(value = "t_user")
++public class User {
++ /**
++ * 主键
++ */
++ @TableId(type = IdType.AUTO)
++ private Integer userId;
++ /**
++ * 用户名称
++ */
++ private String userName;
++ /**
++ * 用户密码
++ */
++ private String userPwd;
++ /**
++ * 手机号
++ */
++ private String phone;
++ /**
++ * 用户角色1.管理员2.普通员工
++ */
++ private Integer userRole;
++}
+Index: bwie-common/src/main/java/com/bwie/common/exception/CustomException.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/exception/CustomException.java b/bwie-common/src/main/java/com/bwie/common/exception/CustomException.java
+new file mode 100644
+--- /dev/null (date 1720591322647)
++++ b/bwie-common/src/main/java/com/bwie/common/exception/CustomException.java (date 1720591322647)
+@@ -0,0 +1,25 @@
++package com.bwie.common.exception;
++
++import lombok.Data;
++
++/**
++ * TODO 自定义异常
++ */
++@Data
++public class CustomException extends RuntimeException {
++
++ /**
++ * 错误吗
++ */
++ private int code;
++
++ /**
++ * 初始化构造方法
++ * @param code 错误码
++ * @param msg 错误提示消息
++ */
++ public CustomException(int code, String msg) {
++ super(msg);
++ this.code = code;
++ }
++}
+Index: bwie-common/src/main/java/com/bwie/common/aop/Aop.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/aop/Aop.java b/bwie-common/src/main/java/com/bwie/common/aop/Aop.java
+new file mode 100644
+--- /dev/null (date 1723467602933)
++++ b/bwie-common/src/main/java/com/bwie/common/aop/Aop.java (date 1723467602933)
+@@ -0,0 +1,28 @@
++package com.bwie.common.aop;
++
++import lombok.extern.slf4j.Slf4j;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.stereotype.Component;
++
++import java.util.logging.Level;
++import java.util.logging.Logger;
++
++/**
++ * @Author YuPing
++ * @Description
++ * @Version 1.0
++ * @Data 2024-08-12 20:56:26
++ */
++@Component
++@Slf4j
++public class Aop {
++ //使用AOP记录操作所有接口请求、响应日志
++ @Autowired
++ private Logger logger;
++
++ public void log(String request, String response, String error) {
++ logger.log(Level.parse(request), response, error);
++ log.info("请求:" + request + "响应:" + response + "错误:" + error);
++ }
++
++}
+Index: bwie-auth/src/main/java/com/bwie/auth/remote/impl/Fusing.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-auth/src/main/java/com/bwie/auth/remote/impl/Fusing.java b/bwie-auth/src/main/java/com/bwie/auth/remote/impl/Fusing.java
+new file mode 100644
+--- /dev/null (date 1723426459732)
++++ b/bwie-auth/src/main/java/com/bwie/auth/remote/impl/Fusing.java (date 1723426459732)
+@@ -0,0 +1,26 @@
++package com.bwie.auth.remote.impl;
++
++import com.bwie.auth.remote.AuthRemote;
++import com.bwie.common.domain.User;
++import com.bwie.common.result.Result;
++import org.springframework.cloud.openfeign.FallbackFactory;
++import org.springframework.stereotype.Component;
++
++/**
++ * @Author YuPing
++ * @Description 熔断处理器
++ * @Version 1.0
++ * @Data 2024-08-12 09:32:40
++ */
++@Component
++public class Fusing implements FallbackFactory {
++ @Override
++ public AuthRemote create(Throwable cause) {
++ return new AuthRemote() {
++ @Override
++ public Result findByPhone(String phone) {
++ throw new RuntimeException("服务器繁忙,远程调用失败");
++ }
++ };
++ }
++}
+Index: bwie-auth/src/main/java/com/bwie/auth/remote/AuthRemote.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-auth/src/main/java/com/bwie/auth/remote/AuthRemote.java b/bwie-auth/src/main/java/com/bwie/auth/remote/AuthRemote.java
+new file mode 100644
+--- /dev/null (date 1723426459727)
++++ b/bwie-auth/src/main/java/com/bwie/auth/remote/AuthRemote.java (date 1723426459727)
+@@ -0,0 +1,18 @@
++package com.bwie.auth.remote;
++
++import com.bwie.auth.remote.impl.Fusing;
++import com.bwie.common.domain.User;
++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.RequestParam;
++@FeignClient(value = "bwie-system",fallbackFactory = Fusing.class)
++public interface AuthRemote {
++ /**
++ * 根据手机号查询用户
++ * @param phone
++ * @return
++ */
++ @GetMapping("/findByPhone")
++ public Result findByPhone(@RequestParam String phone);
++}
+Index: bwie-module/bwie-system/src/main/java/com/bwie/system/controller/UserController.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723429123639)
++++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/controller/UserController.java (date 1723429123639)
+@@ -0,0 +1,66 @@
++package com.bwie.system.controller;
++
++import com.alibaba.fastjson.JSONObject;
++import com.bwie.common.domain.User;
++import com.bwie.common.result.Result;
++import com.bwie.system.service.UserService;
++import lombok.extern.slf4j.Slf4j;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.web.bind.annotation.*;
++
++import javax.servlet.http.HttpServletRequest;
++
++/**
++ * @Author YuPing
++ * @Description 用户表控制层
++ * @Version 1.0
++ * @Data 2024-08-12 09:24:20
++ */
++@Slf4j
++@RestController
++public class UserController {
++
++ @Autowired
++ private UserService userService;
++
++ @Autowired
++ private HttpServletRequest httpServletRequest;
++
++ /**
++ * 根据手机号查询用户
++ * @param phone
++ * @return
++ */
++ @GetMapping("/findByPhone")
++ public Result findByPhone(@RequestParam String phone){
++ log.info("功能:根据手机号查询用户");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+JSONObject.toJSONString(phone));
++ User byPhone = userService.findByPhone(phone);
++ log.info("功能:根据手机号查询用户");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("响应结果:"+ JSONObject.toJSONString(byPhone));
++ return Result.success(byPhone);
++ }
++
++
++ /**
++ * 注册
++ * @param user
++ */
++ @PostMapping("/register")
++ public Result register(@RequestBody User user){
++ log.info("功能:注册");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+JSONObject.toJSONString(user));
++ userService.register(user);
++ log.info("功能:注册");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ return Result.success();
++ }
++
++}
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/consumer/VolumeConsumer.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/consumer/VolumeConsumer.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/consumer/VolumeConsumer.java
+new file mode 100644
+--- /dev/null (date 1723447528999)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/consumer/VolumeConsumer.java (date 1723447528999)
+@@ -0,0 +1,60 @@
++package com.bwie.es.consumer;
++
++import com.bwie.common.constants.RabbitMQQueueNameConstants;
++import com.bwie.common.domain.Volume;
++import com.bwie.es.remote.VolumeRemote;
++import com.rabbitmq.client.Channel;
++import lombok.extern.slf4j.Slf4j;
++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 java.io.IOException;
++
++/**
++ * @Author YuPing
++ * @Description
++ * @Version 1.0
++ * @Data 2024-08-12 15:16:02
++ */
++@Slf4j
++@Component
++public class VolumeConsumer {
++
++ @Autowired
++ private StringRedisTemplate redisTemplate;
++
++ /**
++ * redis 消息唯一标识 key 名称
++ */
++ private static final String SEND_VOLUME_KEY = "SEND_VOLUME_KEY";
++
++ @Autowired
++ private VolumeRemote volumeRemote;
++
++ @RabbitListener(queuesToDeclare = @Queue(RabbitMQQueueNameConstants.SEND_VOLUME_QUEUE))
++ public void receiveMsg(Volume volume, Message message, Channel channel) {
++ log.info("MQ队列消费者接收到消息,消息内容:{},开始消费....", volume);
++ String messageId = message.getMessageProperties().getMessageId();
++ try {
++ Long count = redisTemplate.opsForSet().add(SEND_VOLUME_KEY, messageId);
++ if (count != null && count == 1) {
++ volumeRemote.saveVolume(volume);
++ channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
++ log.info("MQ队列消费者接收到消息,消息内容:{},消费完毕....", volume);
++ }
++ } catch (Exception e) {
++ log.error("MQ队列消费者接收到消息,消息内容:{},消费消息异常,异常信息:{}", volume, e);
++ redisTemplate.opsForSet().remove(SEND_VOLUME_KEY, messageId);
++ try {
++ channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);
++ } catch (IOException ex) {
++ log.error("MQ队列消费者接收到消息,消息内容:{},消费者拒绝消费消息异常,异常信息:{}", volume, ex);
++ }
++ }
++ }
++
++}
+Index: bwie-module/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723430055430)
++++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java (date 1723430055430)
+@@ -0,0 +1,46 @@
++package com.bwie.system.service.impl;
++
++import cn.hutool.core.util.RandomUtil;
++import com.bwie.common.domain.User;
++import com.bwie.system.mapper.UserMapper;
++import com.bwie.system.service.UserService;
++import org.springframework.stereotype.Service;
++
++import javax.annotation.Resource;
++
++/**
++ * @Author YuPing
++ * @Description 用户实现层
++ * @Version 1.0
++ * @Data 2024-08-12 09:22:18
++ */
++@Service
++public class UserServiceImpl implements UserService {
++
++ @Resource
++ private UserMapper mapper;
++
++ /**
++ * 根据手机号查询用户
++ * @param phone
++ * @return
++ */
++ @Override
++ public User findByPhone(String phone) {
++ User byPhone = mapper.findByPhone(phone);
++ return byPhone;
++ }
++
++
++ /**
++ * 注册
++ * @param user
++ */
++ @Override
++ public void register(User user) {
++ //密码随机生成并赋值
++ String code = RandomUtil.randomNumbers(7);
++ user.setUserPwd(code);
++ mapper.register(user);
++ }
++}
+Index: bwie-module/bwie-order/src/main/java/com/bwie/order/OrderApplication.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-order/src/main/java/com/bwie/order/OrderApplication.java b/bwie-module/bwie-order/src/main/java/com/bwie/order/OrderApplication.java
+new file mode 100644
+--- /dev/null (date 1723459273520)
++++ b/bwie-module/bwie-order/src/main/java/com/bwie/order/OrderApplication.java (date 1723459273520)
+@@ -0,0 +1,21 @@
++package com.bwie.order;
++
++import org.mybatis.spring.annotation.MapperScan;
++import org.springframework.boot.SpringApplication;
++import org.springframework.boot.autoconfigure.SpringBootApplication;
++import org.springframework.scheduling.annotation.EnableScheduling;
++
++/**
++ * @Author YuPing
++ * @Description
++ * @Version 1.0
++ * @Data 2024-08-12 15:47:52
++ */
++@SpringBootApplication
++@MapperScan("com.bwie.order.mapper")
++@EnableScheduling
++public class OrderApplication {
++ public static void main(String[] args) {
++ SpringApplication.run(OrderApplication.class, args);
++ }
++}
+Index: bwie-module/bwie-order/src/main/resources/mapper/OrderMapper.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-order/src/main/resources/mapper/OrderMapper.xml b/bwie-module/bwie-order/src/main/resources/mapper/OrderMapper.xml
+new file mode 100644
+--- /dev/null (date 1723458890396)
++++ b/bwie-module/bwie-order/src/main/resources/mapper/OrderMapper.xml (date 1723458890396)
+@@ -0,0 +1,56 @@
++
++
++
++
++
++
++
++ INSERT INTO t_order(order_number,order_volume_name,order_time,order_price,order_flag,personal_amount)
++ VALUES
++
++ (#{item.orderNumber},#{item.orderVolumeName},#{item.orderTime},#{item.orderPrice},#{item.orderFlag},#{item.personalAmount})
++
++
++
++
++
++
++
++
++
++
++ update t_order set order_flag = "完成" where order_id = #{orderId}
++
++
++
++
++
++
+Index: bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1714979275955)
++++ b/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java (date 1714979275955)
+@@ -0,0 +1,92 @@
++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.dysmsapi20170525.models.SendSmsResponseBody;
++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 = "LTAI5tDbRqXkC5i3SMrCSDcX";
++
++ private static String accessKeySecret = "XUzMZoHPLsjNLafHsdQnMElBWZATsu";
++
++ /**
++ * 短信访问域名
++ */
++ private static String endpoint = "dysmsapi.aliyuncs.com";
++ /**
++ * 短信签名
++ */
++ private static String signName = "乐优购";
++
++ private static String templateCode = "SMS_163851467";
++
++ /**
++ * 实例化短信对象
++ */
++ 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
++ */
++ public static SendSmsResponseBody sendSms(String tel, 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 sendSmsResponse.getBody();
++ }
++
++}
+Index: bwie-module/bwie-order/src/main/java/com/bwie/order/mapper/OrderMapper.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-order/src/main/java/com/bwie/order/mapper/OrderMapper.java b/bwie-module/bwie-order/src/main/java/com/bwie/order/mapper/OrderMapper.java
+new file mode 100644
+--- /dev/null (date 1723458890387)
++++ b/bwie-module/bwie-order/src/main/java/com/bwie/order/mapper/OrderMapper.java (date 1723458890387)
+@@ -0,0 +1,19 @@
++package com.bwie.order.mapper;
++
++import com.bwie.common.domain.Order;
++import org.apache.ibatis.annotations.Param;
++import org.springframework.stereotype.Component;
++
++import java.util.List;
++
++@Component
++public interface OrderMapper {
++ //批量添加订单记录
++ void addOrder(@Param("orders") List orders);
++ //查看订单
++ List queryOrder();
++ //修改订单状态
++ void updateOrderFlag(@Param("orderId") Integer orderId);
++ //查询订单属于完成之外的状态
++ List selectOrderFlag();
++}
+Index: bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1715860147451)
++++ b/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java (date 1715860147451)
+@@ -0,0 +1,67 @@
++package com.bwie.common.utils;
++
++import org.springframework.util.AntPathMatcher;
++
++import java.util.Collection;
++import java.util.List;
++
++/**
++ * @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);
++ }
++}
+Index: bwie-module/bwie-order/src/main/resources/bootstrap.yml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-order/src/main/resources/bootstrap.yml b/bwie-module/bwie-order/src/main/resources/bootstrap.yml
+new file mode 100644
+--- /dev/null (date 1723449392830)
++++ b/bwie-module/bwie-order/src/main/resources/bootstrap.yml (date 1723449392830)
+@@ -0,0 +1,29 @@
++# Tomcat
++server:
++ port: 9005
++# Spring
++spring:
++ main:
++ allow-circular-references: true
++ jackson:
++ date-format: yyyy-MM-dd HH:mm:ss
++ time-zone: GMT+8
++ application:
++ # 应用名称
++ name: bwie-order
++ profiles:
++ # 环境配置
++ active: dev
++ cloud:
++ nacos:
++ discovery:
++ # 服务注册地址
++ server-addr: 47.116.168.171:8848
++ config:
++ # 配置中心地址
++ server-addr: 47.116.168.171:8848
++ # 配置文件格式
++ file-extension: yml
++ # 共享配置
++ shared-configs:
++ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+Index: bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1715860147446)
++++ b/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java (date 1715860147446)
+@@ -0,0 +1,108 @@
++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工具类
++ */
++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();
++ }
++}
+Index: bwie-module/bwie-order/src/main/java/com/bwie/order/controller/OrderController.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-order/src/main/java/com/bwie/order/controller/OrderController.java b/bwie-module/bwie-order/src/main/java/com/bwie/order/controller/OrderController.java
+new file mode 100644
+--- /dev/null (date 1723458622946)
++++ b/bwie-module/bwie-order/src/main/java/com/bwie/order/controller/OrderController.java (date 1723458622946)
+@@ -0,0 +1,85 @@
++package com.bwie.order.controller;
++
++import com.alibaba.fastjson.JSONObject;
++import com.bwie.common.domain.Order;
++import com.bwie.common.domain.response.TokenResponse;
++import com.bwie.common.result.Result;
++import com.bwie.order.service.OrderService;
++import lombok.extern.slf4j.Slf4j;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.web.bind.annotation.*;
++
++import javax.servlet.http.HttpServletRequest;
++import java.util.List;
++
++/**
++ * @Author YuPing
++ * @Description 订单控制层
++ * @Version 1.0
++ * @Data 2024-08-12 16:07:50
++ */
++@Slf4j
++@RestController
++public class OrderController {
++
++ @Autowired
++ private OrderService orderService;
++
++ @Autowired
++ private HttpServletRequest httpServletRequest;
++
++ /**
++ * 批量添加订单
++ * @param orders
++ */
++ @PostMapping("/addOrder")
++ public Result addOrder(@RequestBody List orders){
++ log.info("功能:登录");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+ JSONObject.toJSONString(orders));
++ orderService.addOrder(orders);
++ log.info("功能:登录");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ return Result.success();
++ }
++
++
++ /**
++ * 查询订单
++ * @return
++ */
++ @GetMapping("/queryOrder")
++ public Result> queryOrder(){
++ log.info("功能:查询订单");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ List orders = orderService.queryOrder();
++ log.info("功能:查询订单");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("返回结果:"+ JSONObject.toJSONString(orders));
++ return Result.success(orders);
++ }
++
++
++ /**
++ * 修改订单状态
++ * @param orderId
++ * @return
++ */
++ @GetMapping("/updateOrderFlag")
++ public Result updateOrderFlag(@RequestParam Integer orderId){
++ log.info("功能:修改订单状态");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+JSONObject.toJSONString(orderId));
++ orderService.updateOrderFlag(orderId);
++ log.info("功能:修改订单状态");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ return Result.success();
++ }
++
++}
+Index: bwie-module/bwie-order/src/main/java/com/bwie/order/service/impl/OrderServiceImpl.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-order/src/main/java/com/bwie/order/service/impl/OrderServiceImpl.java b/bwie-module/bwie-order/src/main/java/com/bwie/order/service/impl/OrderServiceImpl.java
+new file mode 100644
+--- /dev/null (date 1723459273512)
++++ b/bwie-module/bwie-order/src/main/java/com/bwie/order/service/impl/OrderServiceImpl.java (date 1723459273512)
+@@ -0,0 +1,61 @@
++package com.bwie.order.service.impl;
++
++import com.bwie.common.domain.Order;
++import com.bwie.order.mapper.OrderMapper;
++import com.bwie.order.service.OrderService;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.stereotype.Service;
++
++import java.util.List;
++
++/**
++ * @Author YuPing
++ * @Description 订单服务实现类
++ * @Version 1.0
++ * @Data 2024-08-12 16:06:31
++ */
++@Service
++public class OrderServiceImpl implements OrderService {
++
++ @Autowired
++ private OrderMapper orderMapper;
++
++ /**
++ * 批量添加订单
++ * @param orders
++ */
++ @Override
++ public void addOrder(List orders) {
++ orderMapper.addOrder(orders);
++ }
++
++ /**
++ * 查询订单
++ * @return
++ */
++ @Override
++ public List queryOrder() {
++ List orders = orderMapper.queryOrder();
++ return orders;
++ }
++
++
++ /**
++ * 修改订单状态完成
++ * @param orderId
++ */
++ @Override
++ public void updateOrderFlag(Integer orderId) {
++ orderMapper.updateOrderFlag(orderId);
++ }
++
++ /**
++ * 查询订单状态属于未完成的订单
++ * @return
++ */
++ @Override
++ public List selectOrderFlag() {
++ List orders = orderMapper.selectOrderFlag();
++ return orders;
++ }
++}
+Index: bwie-common/src/main/java/com/bwie/common/config/RabbitMQConfig.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/config/RabbitMQConfig.java b/bwie-common/src/main/java/com/bwie/common/config/RabbitMQConfig.java
+new file mode 100644
+--- /dev/null (date 1714375795019)
++++ b/bwie-common/src/main/java/com/bwie/common/config/RabbitMQConfig.java (date 1714375795019)
+@@ -0,0 +1,16 @@
++package com.bwie.common.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() {
++ // SimpleMessageConverter 默认的消息转换器 String byte[] serializer
++ return new Jackson2JsonMessageConverter();
++ }
++}
+Index: bwie-module/bwie-order/src/main/java/com/bwie/order/service/OrderService.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-order/src/main/java/com/bwie/order/service/OrderService.java b/bwie-module/bwie-order/src/main/java/com/bwie/order/service/OrderService.java
+new file mode 100644
+--- /dev/null (date 1723459273527)
++++ b/bwie-module/bwie-order/src/main/java/com/bwie/order/service/OrderService.java (date 1723459273527)
+@@ -0,0 +1,16 @@
++package com.bwie.order.service;
++
++import com.bwie.common.domain.Order;
++
++import java.util.List;
++
++public interface OrderService {
++ //批量添加订单记录
++ void addOrder(List orders);
++ //查看订单
++ List queryOrder();
++ //修改订单状态
++ void updateOrderFlag(Integer orderId);
++ //查询订单属于完成之外的状态
++ List selectOrderFlag();
++}
+Index: bwie-common/src/main/java/com/bwie/common/handle/GlobalExceptionHandler.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/handle/GlobalExceptionHandler.java b/bwie-common/src/main/java/com/bwie/common/handle/GlobalExceptionHandler.java
+new file mode 100644
+--- /dev/null (date 1720591393197)
++++ b/bwie-common/src/main/java/com/bwie/common/handle/GlobalExceptionHandler.java (date 1720591393197)
+@@ -0,0 +1,24 @@
++package com.bwie.common.handle;
++
++import com.bwie.common.exception.CustomException;
++import com.bwie.common.result.Result;
++import lombok.extern.log4j.Log4j2;
++import org.springframework.web.bind.annotation.ExceptionHandler;
++import org.springframework.web.bind.annotation.RestControllerAdvice;
++
++/**
++ * TODO 全局异常处理器
++ */
++@Log4j2
++@RestControllerAdvice
++public class GlobalExceptionHandler {
++
++ /**
++ * 自定义异常处理器
++ */
++ @ExceptionHandler(CustomException.class)
++ public Result customExceptionHandler(CustomException e) {
++ log.error("功能异常,异常信息:{}", e.getMessage());
++ return Result.error(e.getCode(), e.getMessage());
++ }
++}
+Index: bwie-module/bwie-volume/src/main/java/com/bwie/volume/remote/impl/Fusing.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/java/com/bwie/volume/remote/impl/Fusing.java b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/remote/impl/Fusing.java
+new file mode 100644
+--- /dev/null (date 1723460201162)
++++ b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/remote/impl/Fusing.java (date 1723460201162)
+@@ -0,0 +1,33 @@
++package com.bwie.volume.remote.impl;
++
++import com.bwie.common.domain.Order;
++import com.bwie.common.result.Result;
++import com.bwie.volume.remote.OrderRemote;
++import org.springframework.cloud.openfeign.FallbackFactory;
++import org.springframework.stereotype.Component;
++
++import java.util.List;
++
++/**
++ * @Author YuPing
++ * @Description 熔断处理类
++ * @Version 1.0
++ * @Data 2024-08-12 16:11:42
++ */
++@Component
++public class Fusing implements FallbackFactory {
++ @Override
++ public OrderRemote create(Throwable cause) {
++ return new OrderRemote() {
++ @Override
++ public Result addOrder(List orders) {
++ throw new RuntimeException("服务器繁忙,远程调用失败");
++ }
++
++ @Override
++ public Result> queryOrder() {
++ throw new RuntimeException("服务器繁忙,远程调用失败");
++ }
++ };
++ }
++}
+Index: bwie-module/bwie-volume/src/main/java/com/bwie/volume/remote/OrderRemote.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/java/com/bwie/volume/remote/OrderRemote.java b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/remote/OrderRemote.java
+new file mode 100644
+--- /dev/null (date 1723460201182)
++++ b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/remote/OrderRemote.java (date 1723460201182)
+@@ -0,0 +1,28 @@
++package com.bwie.volume.remote;
++
++import com.bwie.common.domain.Order;
++import com.bwie.common.result.Result;
++import com.bwie.volume.remote.impl.Fusing;
++import org.springframework.cloud.openfeign.FeignClient;
++import org.springframework.stereotype.Component;
++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;
++
++@FeignClient(value = "bwie-order",fallbackFactory = Fusing.class)
++public interface OrderRemote {
++ /**
++ * 批量添加订单
++ * @param orders
++ */
++ @PostMapping("/addOrder")
++ public Result addOrder(@RequestBody List orders);
++ /**
++ * 查询订单
++ * @return
++ */
++ @GetMapping("/queryOrder")
++ public Result> queryOrder();
++}
+Index: .idea/.gitignore
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/.idea/.gitignore b/.idea/.gitignore
+new file mode 100644
+--- /dev/null (date 1723424627460)
++++ b/.idea/.gitignore (date 1723424627460)
+@@ -0,0 +1,8 @@
++# 默认忽略的文件
++/shelf/
++/workspace.xml
++# 基于编辑器的 HTTP 客户端请求
++/httpRequests/
++# Datasource local storage ignored files
++/dataSources/
++/dataSources.local.xml
+Index: bwie-common/pom.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/pom.xml b/bwie-common/pom.xml
+new file mode 100644
+--- /dev/null (date 1723425175331)
++++ b/bwie-common/pom.xml (date 1723425175331)
+@@ -0,0 +1,127 @@
++
++
++ 4.0.0
++
++ com.bwie
++ month
++ 1.0-SNAPSHOT
++
++
++ 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
++
++
++
++ org.projectlombok
++ lombok
++
++
++
++ org.springframework.cloud
++ spring-cloud-starter-loadbalancer
++
++
++
++ org.springframework.cloud
++ spring-cloud-starter-openfeign
++
++
++
++ io.jsonwebtoken
++ jjwt
++
++
++
++ com.alibaba
++ fastjson
++
++
++
++ org.springframework.boot
++ spring-boot-starter-data-redis
++
++
++
++
++
++
++
++
++
++
++ org.apache.commons
++ commons-lang3
++
++
++
++ cn.hutool
++ hutool-all
++
++
++
++ com.aliyun
++ dysmsapi20170525
++
++
++
++ com.alibaba
++ druid-spring-boot-starter
++
++
++
++ mysql
++ mysql-connector-java
++
++
++
++ org.mybatis.spring.boot
++ mybatis-spring-boot-starter
++
++
++
++ com.github.pagehelper
++ pagehelper-spring-boot-starter
++
++
++
++ org.springframework.boot
++ spring-boot-starter-amqp
++
++
++
++ com.github.tobato
++ fastdfs-client
++
++
++
++
++ com.aliyun.oss
++ aliyun-sdk-oss
++ 3.16.3
++
++
++
++ com.baomidou
++ mybatis-plus-annotation
++
++
++
++
++
+Index: bwie-module/bwie-order/src/main/java/com/bwie/order/synchronization/Timing.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-order/src/main/java/com/bwie/order/synchronization/Timing.java b/bwie-module/bwie-order/src/main/java/com/bwie/order/synchronization/Timing.java
+new file mode 100644
+--- /dev/null (date 1723459273503)
++++ b/bwie-module/bwie-order/src/main/java/com/bwie/order/synchronization/Timing.java (date 1723459273503)
+@@ -0,0 +1,43 @@
++package com.bwie.order.synchronization;
++
++import com.bwie.common.domain.Order;
++import com.bwie.order.service.OrderService;
++import lombok.extern.slf4j.Slf4j;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.scheduling.annotation.Scheduled;
++import org.springframework.stereotype.Component;
++
++import java.util.List;
++
++/**
++ * @Author YuPing
++ * @Description 查询订单自动修改为完成状态
++ * @Version 1.0
++ * @Data 2024-08-12 18:35:30
++ */
++@Slf4j
++@Component
++public class Timing {
++
++ @Autowired
++ private OrderService orderService;
++
++ /**
++ * 每隔2天查询订单状态为未完成状态的订单,修改为已完成状态
++ */
++ @Scheduled(cron = "0 0 0 */2 * ?")
++ public void timing(){
++ long startTime = System.currentTimeMillis();
++ log.info("定时任务开始执行:{}"+startTime);
++ List orders = orderService.selectOrderFlag();
++ orders.forEach(order -> {
++ orderService.updateOrderFlag(order.getOrderId());
++ });
++ long endTime = System.currentTimeMillis();
++ log.info("定时任务执行结束:{}"+endTime);
++
++ long duration = (endTime - startTime) / 1000;
++ log.info("定时任务执行时长:{}"+duration);
++ }
++
++}
+Index: bwie-module/bwie-volume/src/main/resources/mapper/ConsignMapper.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/resources/mapper/ConsignMapper.xml b/bwie-module/bwie-volume/src/main/resources/mapper/ConsignMapper.xml
+new file mode 100644
+--- /dev/null (date 1723462591956)
++++ b/bwie-module/bwie-volume/src/main/resources/mapper/ConsignMapper.xml (date 1723462591956)
+@@ -0,0 +1,17 @@
++
++
++
++
++
++
++
++ INSERT INTO t_consign(consign_flag,consign_number,consign_order_name,consign_time,personal_amount)
++ VALUES(#{consignFlag},#{consignNumber},#{consignOrderName},#{consignTime},#{personalAmount})
++
++
++
+Index: bwie-module/bwie-volume/src/main/java/com/bwie/volume/mapper/ConsignMapper.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/java/com/bwie/volume/mapper/ConsignMapper.java b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/mapper/ConsignMapper.java
+new file mode 100644
+--- /dev/null (date 1723462591966)
++++ b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/mapper/ConsignMapper.java (date 1723462591966)
+@@ -0,0 +1,10 @@
++package com.bwie.volume.mapper;
++
++import com.bwie.common.domain.Consign;
++import org.springframework.stereotype.Component;
++
++@Component
++public interface ConsignMapper {
++ //添加寄售
++ void saveConsign(Consign consign);
++}
+Index: .gitignore
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/.gitignore b/.gitignore
+new file mode 100644
+--- /dev/null (date 1723468522209)
++++ b/.gitignore (date 1723468522209)
+@@ -0,0 +1,35 @@
++target/
++!.mvn/wrapper/maven-wrapper.jar
++!**/src/main/**/target/
++!**/src/test/**/target/
++
++### IntelliJ IDEA ###
++.idea
++*.iws
++*.iml
++*.ipr
++
++### Eclipse ###
++.apt_generated
++.classpath
++.factorypath
++.project
++.settings
++.springBeans
++.sts4-cache
++
++### NetBeans ###
++/nbproject/private/
++/nbbuild/
++/dist/
++/nbdist/
++/.nb-gradle/
++build/
++!**/src/main/**/build/
++!**/src/test/**/build/
++
++### VS Code ###
++.vscode/
++
++### Mac OS ###
++.DS_Store
+Index: bwie-common/src/main/java/com/bwie/common/domain/Consign.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Consign.java b/bwie-common/src/main/java/com/bwie/common/domain/Consign.java
+new file mode 100644
+--- /dev/null (date 1723468474826)
++++ b/bwie-common/src/main/java/com/bwie/common/domain/Consign.java (date 1723468474826)
+@@ -0,0 +1,55 @@
++package com.bwie.common.domain;
++
++import com.baomidou.mybatisplus.annotation.IdType;
++import com.baomidou.mybatisplus.annotation.TableId;
++import com.baomidou.mybatisplus.annotation.TableName;
++import com.fasterxml.jackson.annotation.JsonFormat;
++import lombok.AllArgsConstructor;
++import lombok.Builder;
++import lombok.Data;
++import lombok.NoArgsConstructor;
++import org.springframework.format.annotation.DateTimeFormat;
++
++import java.math.BigDecimal;
++import java.util.Date;
++
++/**
++ * @Author YuPing
++ * @Description 寄售
++ * @Version 1.0
++ * @Data 2024-08-12 19:20:00
++ */
++@Data
++@Builder
++@NoArgsConstructor
++@AllArgsConstructor
++@TableName(value = "t_consign")
++public class Consign {
++ /**
++ * 主键
++ */
++ @TableId(type = IdType.AUTO)
++ private Integer consignId;
++ /**
++ * 寄售订单名称
++ */
++ private String consignOrderName;
++ /**
++ * 寄售数量
++ */
++ private Integer consignNumber;
++ /**
++ * 寄售状态
++ */
++ private String consignFlag;
++ /**
++ * 寄售日期
++ */
++ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
++ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
++ private Date consignTime;
++ /**
++ * 用户余额
++ */
++ private BigDecimal personalAmount;
++}
+Index: .idea/encodings.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/.idea/encodings.xml b/.idea/encodings.xml
+new file mode 100644
+--- /dev/null (date 1723448893821)
++++ b/.idea/encodings.xml (date 1723448893821)
+@@ -0,0 +1,17 @@
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
+\ No newline at end of file
+Index: bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/impl/ConsignServiceImpl.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/impl/ConsignServiceImpl.java b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/impl/ConsignServiceImpl.java
+new file mode 100644
+--- /dev/null (date 1723462591946)
++++ b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/impl/ConsignServiceImpl.java (date 1723462591946)
+@@ -0,0 +1,29 @@
++package com.bwie.volume.service.impl;
++
++import com.bwie.common.domain.Consign;
++import com.bwie.volume.mapper.ConsignMapper;
++import com.bwie.volume.service.ConsignService;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.stereotype.Service;
++
++/**
++ * @Author YuPing
++ * @Description 寄售服务实现类
++ * @Version 1.0
++ * @Data 2024-08-12 19:34:57
++ */
++@Service
++public class ConsignServiceImpl implements ConsignService {
++
++ @Autowired
++ private ConsignMapper consignMapper;
++
++ /**
++ * 保存寄售
++ * @param consign
++ */
++ @Override
++ public void saveConsign(Consign consign) {
++ consignMapper.saveConsign(consign);
++ }
++}
+Index: bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/ConsignService.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/ConsignService.java b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/ConsignService.java
+new file mode 100644
+--- /dev/null (date 1723462591934)
++++ b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/ConsignService.java (date 1723462591934)
+@@ -0,0 +1,8 @@
++package com.bwie.volume.service;
++
++import com.bwie.common.domain.Consign;
++
++public interface ConsignService {
++ //添加寄售
++ void saveConsign(Consign consign);
++}
+Index: bwie-module/bwie-system/src/main/java/com/bwie/system/service/UserService.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723429123627)
++++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/service/UserService.java (date 1723429123627)
+@@ -0,0 +1,13 @@
++package com.bwie.system.service;
++
++import com.bwie.common.domain.User;
++
++/**
++ * 用户业务层接口
++ */
++public interface UserService {
++ // 根据手机号查询用户信息
++ User findByPhone(String phone);
++ //注册
++ void register(User user);
++}
+Index: pom.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/pom.xml b/pom.xml
+new file mode 100644
+--- /dev/null (date 1723432643868)
++++ b/pom.xml (date 1723432643868)
+@@ -0,0 +1,123 @@
++
++
++ 4.0.0
++
++ com.bwie
++ month
++ 1.0-SNAPSHOT
++ pom
++
++ bwie-common
++ bwie-gateway
++ bwie-auth
++ bwie-module
++ bwie-module/bwie-es
++
++
++
++ 8
++ 8
++ UTF-8
++ 2021.0.0
++ 2021.1
++ 0.9.1
++ 1.2.80
++ 5.8.3
++ 2.0.1
++ 1.26.5
++ 3.5.6
++
++
++
++
++ spring-boot-starter-parent
++ org.springframework.boot
++ 2.6.2
++
++
++
++
++
++
++
++ org.springframework.cloud
++ spring-cloud-dependencies
++ ${spring-cloud.version}
++ pom
++ import
++
++
++
++ com.alibaba.cloud
++ spring-cloud-alibaba-dependencies
++ ${spring-cloud-alibaba.version}
++ pom
++ import
++
++
++
++ io.jsonwebtoken
++ jjwt
++ ${jjwt.version}
++
++
++
++ com.alibaba
++ fastjson
++ ${fastjson.version}
++
++
++
++ cn.hutool
++ hutool-all
++ ${hutool.version}
++
++
++
++ com.aliyun
++ dysmsapi20170525
++ ${alidy.version}
++
++
++
++ com.alibaba
++ druid-spring-boot-starter
++ 1.2.8
++
++
++ org.mybatis.spring.boot
++ mybatis-spring-boot-starter
++ 2.2.2
++
++
++
++ com.github.pagehelper
++ pagehelper-spring-boot-starter
++ 1.4.1
++
++
++
++ com.bwie
++ bwie-common
++ 1.0-SNAPSHOT
++
++
++
++ com.github.tobato
++ fastdfs-client
++ ${fastdfs-client}
++
++
++
++
++ com.baomidou
++ mybatis-plus-annotation
++ ${mybatis-plus.version}
++
++
++
++
++
++
+Index: bwie-module/bwie-order/pom.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-order/pom.xml b/bwie-module/bwie-order/pom.xml
+new file mode 100644
+--- /dev/null (date 1723449344515)
++++ b/bwie-module/bwie-order/pom.xml (date 1723449344515)
+@@ -0,0 +1,25 @@
++
++
++ 4.0.0
++
++ com.bwie
++ bwie-module
++ 1.0-SNAPSHOT
++
++
++ bwie-order
++
++
++
++ com.bwie
++ bwie-common
++
++
++ org.springframework.boot
++ spring-boot-starter-web
++
++
++
++
+Index: bwie-module/bwie-system/src/main/resources/mapper/LoginMapper.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-system/src/main/resources/mapper/LoginMapper.xml b/bwie-module/bwie-system/src/main/resources/mapper/LoginMapper.xml
+new file mode 100644
+--- /dev/null (date 1723429123657)
++++ b/bwie-module/bwie-system/src/main/resources/mapper/LoginMapper.xml (date 1723429123657)
+@@ -0,0 +1,22 @@
++
++
++
++
++
++
++
++
++
++
++ insert into t_user(phone,user_name,user_pwd,user_role)
++ values(#{phone},#{userName},#{userPwd},2)
++
++
++
+Index: bwie-common/src/main/java/com/bwie/common/domain/Order.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723468474808)
++++ b/bwie-common/src/main/java/com/bwie/common/domain/Order.java (date 1723468474808)
+@@ -0,0 +1,59 @@
++package com.bwie.common.domain;
++
++import com.baomidou.mybatisplus.annotation.IdType;
++import com.baomidou.mybatisplus.annotation.TableId;
++import com.baomidou.mybatisplus.annotation.TableName;
++import com.fasterxml.jackson.annotation.JsonFormat;
++import lombok.AllArgsConstructor;
++import lombok.Builder;
++import lombok.Data;
++import lombok.NoArgsConstructor;
++import org.springframework.format.annotation.DateTimeFormat;
++
++import java.math.BigDecimal;
++import java.util.Date;
++
++/**
++ * @Author YuPing
++ * @Description 订单记录
++ * @Version 1.0
++ * @Data 2024-08-12 15:43:40
++ */
++@Data
++@Builder
++@NoArgsConstructor
++@AllArgsConstructor
++@TableName("t_order")
++public class Order {
++ /**
++ * 主键
++ */
++ @TableId(type = IdType.AUTO)
++ private Integer orderId;
++ /**
++ * 买单号
++ */
++ private Integer orderNumber;
++ /**
++ * 订单卷名称
++ */
++ private String orderVolumeName;
++ /**
++ * 日期
++ */
++ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
++ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
++ private Date orderTime;
++ /**
++ * 价格
++ */
++ private BigDecimal orderPrice;
++ /**
++ * 订单状态
++ */
++ private String orderFlag;
++ /**
++ * 个人金额
++ */
++ private BigDecimal personalAmount;
++}
+Index: bwie-module/bwie-system/src/main/resources/bootstrap.yml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723425531744)
++++ b/bwie-module/bwie-system/src/main/resources/bootstrap.yml (date 1723425531744)
+@@ -0,0 +1,29 @@
++# Tomcat
++server:
++ port: 9002
++# 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: 47.116.168.171:8848
++ config:
++ # 配置中心地址
++ server-addr: 47.116.168.171:8848
++ # 配置文件格式
++ file-extension: yml
++ # 共享配置
++ shared-configs:
++ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+Index: bwie-module/bwie-system/src/main/java/com/bwie/system/SystemApplication.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723427921186)
++++ b/bwie-module/bwie-system/src/main/java/com/bwie/system/SystemApplication.java (date 1723427921186)
+@@ -0,0 +1,13 @@
++package com.bwie.system;
++
++import org.mybatis.spring.annotation.MapperScan;
++import org.springframework.boot.SpringApplication;
++import org.springframework.boot.autoconfigure.SpringBootApplication;
++
++@SpringBootApplication
++@MapperScan("com.bwie.system.mapper")
++public class SystemApplication {
++ public static void main(String[] args) {
++ SpringApplication.run(SystemApplication.class,args);
++ }
++}
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/EsApplication.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1715784312033)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/EsApplication.java (date 1715784312033)
+@@ -0,0 +1,15 @@
++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;
++
++@SpringBootApplication
++@EnableFeignClients
++@EnableScheduling
++public class EsApplication {
++ public static void main(String[] args) {
++ SpringApplication.run(EsApplication.class);
++ }
++}
+Index: bwie-module/bwie-system/pom.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-system/pom.xml b/bwie-module/bwie-system/pom.xml
+new file mode 100644
+--- /dev/null (date 1723425069738)
++++ b/bwie-module/bwie-system/pom.xml (date 1723425069738)
+@@ -0,0 +1,25 @@
++
++
++ 4.0.0
++
++ com.bwie
++ bwie-module
++ 1.0-SNAPSHOT
++
++
++ bwie-system
++
++
++
++ com.bwie
++ bwie-common
++
++
++ org.springframework.boot
++ spring-boot-starter-web
++
++
++
++
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/remote/impl/Fusing.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/remote/impl/Fusing.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/remote/impl/Fusing.java
+new file mode 100644
+--- /dev/null (date 1723447008299)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/remote/impl/Fusing.java (date 1723447008299)
+@@ -0,0 +1,33 @@
++package com.bwie.es.remote.impl;
++
++import com.bwie.common.domain.Volume;
++import com.bwie.common.result.Result;
++import com.bwie.es.remote.VolumeRemote;
++import org.springframework.cloud.openfeign.FallbackFactory;
++import org.springframework.stereotype.Component;
++
++import java.util.List;
++
++/**
++ * @Author YuPing
++ * @Description 熔断处理器
++ * @Version 1.0
++ * @Data 2024-08-12 11:35:24
++ */
++@Component
++public class Fusing implements FallbackFactory {
++ @Override
++ public VolumeRemote create(Throwable cause) {
++ return new VolumeRemote() {
++ @Override
++ public Result> queryVolume() {
++ throw new RuntimeException("服务繁忙,远程调用失败");
++ }
++
++ @Override
++ public Result saveVolume(Volume volume) {
++ throw new RuntimeException("服务繁忙,远程调用失败");
++ }
++ };
++ }
++}
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/remote/VolumeRemote.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/remote/VolumeRemote.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/remote/VolumeRemote.java
+new file mode 100644
+--- /dev/null (date 1723447008312)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/remote/VolumeRemote.java (date 1723447008312)
+@@ -0,0 +1,28 @@
++package com.bwie.es.remote;
++
++import com.bwie.common.domain.Volume;
++import com.bwie.common.result.Result;
++import com.bwie.es.remote.impl.Fusing;
++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;
++
++@FeignClient(value = "bwie-volume",fallbackFactory = Fusing.class)
++public interface VolumeRemote {
++ /**
++ * 查询所有卷
++ * @return
++ */
++ @GetMapping("/queryVolume")
++ public Result> queryVolume();
++ /**
++ * 保存卷
++ * @param volume
++ * @return
++ */
++ @PostMapping("/saveVolume")
++ public Result saveVolume(@RequestBody Volume volume);
++}
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/synchronous/EsVolume.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-es/src/main/java/com/bwie/es/synchronous/EsVolume.java b/bwie-module/bwie-es/src/main/java/com/bwie/es/synchronous/EsVolume.java
+new file mode 100644
+--- /dev/null (date 1723436295907)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/synchronous/EsVolume.java (date 1723436295907)
+@@ -0,0 +1,63 @@
++package com.bwie.es.synchronous;
++
++import com.alibaba.fastjson.JSONObject;
++import com.bwie.common.domain.Volume;
++import com.bwie.es.remote.VolumeRemote;
++import lombok.extern.slf4j.Slf4j;
++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.boot.ApplicationArguments;
++import org.springframework.boot.ApplicationRunner;
++import org.springframework.stereotype.Component;
++
++import java.io.IOException;
++import java.util.List;
++
++/**
++ * @Author YuPing
++ * @Description es和volume数据同步
++ * @Version 1.0
++ * @Data 2024-08-12 11:46:03
++ */
++@Slf4j
++@Component
++public class EsVolume implements ApplicationRunner{
++
++ @Autowired
++ private RestHighLevelClient restHighLevelClient;
++
++ private static final String INDEX_NAME = "volume";
++
++ @Autowired
++ private VolumeRemote remote;
++
++ @Override
++ public void run(ApplicationArguments args) throws Exception {
++ try {
++ log.info("----------ES和Volume开始同步数据----------");
++ //开始时间
++ long startTime = System.currentTimeMillis();
++ BulkRequest bulkRequest = new BulkRequest();
++ List volumeList = remote.queryVolume().getData();
++ volumeList.forEach(volume -> {
++ bulkRequest.add(
++ new IndexRequest(INDEX_NAME)
++ .id(volume.getVolumeId().toString())
++ .source(JSONObject.toJSONString(volume), XContentType.JSON)
++ );
++ });
++ restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
++ log.info("----------ES和Volume同步数据成功----------");
++ //结束时间
++ long endTime = System.currentTimeMillis();
++ long expendTime = (endTime - startTime) / 1000;
++ log.info("同步数据耗时(秒):{}", expendTime);
++ } catch (IOException e) {
++ throw new RuntimeException(e);
++ }
++ }
++}
+Index: bwie-common/src/main/java/com/bwie/common/domain/request/VolumeRequest.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/VolumeRequest.java b/bwie-common/src/main/java/com/bwie/common/domain/request/VolumeRequest.java
+new file mode 100644
+--- /dev/null (date 1723445768447)
++++ b/bwie-common/src/main/java/com/bwie/common/domain/request/VolumeRequest.java (date 1723445768447)
+@@ -0,0 +1,31 @@
++package com.bwie.common.domain.request;
++
++import lombok.AllArgsConstructor;
++import lombok.Builder;
++import lombok.Data;
++import lombok.NoArgsConstructor;
++
++/**
++ * @Author YuPing
++ * @Description
++ * @Version 1.0
++ * @Data 2024-08-12 11:38:48
++ */
++@Data
++@Builder
++@NoArgsConstructor
++@AllArgsConstructor
++public class VolumeRequest {
++ /**
++ * 卷名称
++ */
++ private String volumeName;
++ /**
++ * 卷库存
++ */
++ private Integer volumeInventory;
++ /**
++ * 卷类型1.腾讯2.爱奇艺3.哔哩哔哩4.优酷5.QQ
++ */
++ private Integer volumeType;
++}
+Index: bwie-common/src/main/java/com/bwie/common/domain/request/OrderRequest.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/OrderRequest.java b/bwie-common/src/main/java/com/bwie/common/domain/request/OrderRequest.java
+new file mode 100644
+--- /dev/null (date 1723468474818)
++++ b/bwie-common/src/main/java/com/bwie/common/domain/request/OrderRequest.java (date 1723468474818)
+@@ -0,0 +1,26 @@
++package com.bwie.common.domain.request;
++
++import lombok.AllArgsConstructor;
++import lombok.Builder;
++import lombok.Data;
++import lombok.NoArgsConstructor;
++
++import javax.validation.constraints.NotEmpty;
++
++/**
++ * @Author YuPing
++ * @Description 订单请求实体类
++ * @Version 1.0
++ * @Data 2024-08-12 19:12:37
++ */
++@Data
++@Builder
++@NoArgsConstructor
++@AllArgsConstructor
++public class OrderRequest {
++ /**
++ * 订单卷名称
++ */
++ @NotEmpty(message = "订单卷名称不能为空")
++ private String orderVolumeName;
++}
+Index: .idea/misc.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/.idea/misc.xml b/.idea/misc.xml
+new file mode 100644
+--- /dev/null (date 1723424919803)
++++ b/.idea/misc.xml (date 1723424919803)
+@@ -0,0 +1,15 @@
++
++
++
++
++
++
++
++
++
++
++
+\ No newline at end of file
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/controller/EsController.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723445619734)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/controller/EsController.java (date 1723445619734)
+@@ -0,0 +1,72 @@
++package com.bwie.es.controller;
++
++import com.alibaba.fastjson.JSONObject;
++import com.bwie.common.domain.Volume;
++import com.bwie.common.domain.request.VolumeRequest;
++import com.bwie.common.domain.response.TokenResponse;
++import com.bwie.common.result.Result;
++import com.bwie.es.service.EsService;
++import lombok.extern.slf4j.Slf4j;
++import org.springframework.beans.factory.annotation.Autowired;
++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;
++import java.util.List;
++
++
++/**
++ * @Author YuPing
++ * @Description es控制层
++ * @Version 1.0
++ * @Data 2024-08-12 12:26:13
++ */
++@Slf4j
++@RestController
++public class EsController {
++
++ @Autowired
++ private EsService esService;
++
++ @Autowired
++ private HttpServletRequest httpServletRequest;
++
++ /**
++ * es查询
++ * @param request
++ * @return
++ */
++ @PostMapping("/esList")
++ public Result> esList(@RequestBody VolumeRequest request){
++ log.info("功能:es查询");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+ JSONObject.toJSONString(request));
++ List volumes = esService.esList(request);
++ log.info("功能:es查询");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("响应结果:"+ JSONObject.toJSONString(volumes));
++ return Result.success(volumes);
++ }
++
++
++ /**
++ * es保存
++ * @param volume
++ */
++ @PostMapping("/saveVolume")
++ public Result esSaveVolume(@RequestBody Volume volume){
++ log.info("功能:es保存");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+ JSONObject.toJSONString(volume));
++ esService.esSaveVolume(volume);
++ log.info("功能:es保存");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ return Result.success();
++ }
++
++}
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/service/impl/EsServiceImpl.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723447529004)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/service/impl/EsServiceImpl.java (date 1723447529004)
+@@ -0,0 +1,112 @@
++package com.bwie.es.service.impl;
++
++import com.alibaba.fastjson.JSONObject;
++import com.bwie.common.constants.RabbitMQQueueNameConstants;
++import com.bwie.common.domain.Volume;
++import com.bwie.common.domain.request.VolumeRequest;
++import com.bwie.es.service.EsService;
++import org.elasticsearch.action.index.IndexRequest;
++import org.elasticsearch.action.search.SearchRequest;
++import org.elasticsearch.action.search.SearchResponse;
++import org.elasticsearch.client.RequestOptions;
++import org.elasticsearch.client.RestHighLevelClient;
++import org.elasticsearch.common.text.Text;
++import org.elasticsearch.common.xcontent.XContentType;
++import org.elasticsearch.index.query.BoolQueryBuilder;
++import org.elasticsearch.index.query.QueryBuilders;
++import org.elasticsearch.search.SearchHit;
++import org.elasticsearch.search.builder.SearchSourceBuilder;
++import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
++import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
++import org.springframework.amqp.rabbit.core.RabbitTemplate;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.stereotype.Service;
++
++import java.io.IOException;
++import java.util.ArrayList;
++import java.util.List;
++import java.util.Map;
++
++/**
++ * @Author YuPing
++ * @Description es实现层
++ * @Version 1.0
++ * @Data 2024-08-12 11:53:47
++ */
++@Service
++public class EsServiceImpl implements EsService {
++
++ @Autowired
++ private RestHighLevelClient restHighLevelClient;
++
++ private static final String INDEX_NAME = "volume";
++
++ @Override
++ public List esList(VolumeRequest request) {
++ List volumeArrayList = new ArrayList<>();
++ try {
++ SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
++ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
++ BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
++ if (request.getVolumeName() != null) {
++ boolQuery.must(QueryBuilders.matchQuery("volumeName", request.getVolumeName()));
++ }
++ if (request.getVolumeInventory() != null) {
++ boolQuery.must(QueryBuilders.matchQuery("volumeInventory", request.getVolumeInventory()));
++ }
++ if (request.getVolumeType() != null){
++ boolQuery.must(QueryBuilders.matchQuery("volumeType", request.getVolumeType()));
++ }
++ searchSourceBuilder.query(boolQuery);
++ searchSourceBuilder.highlighter(
++ new HighlightBuilder()
++ .field("volumeName")
++ .preTags("")
++ .postTags(""));
++ searchRequest.source(searchSourceBuilder);
++ SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
++ SearchHit[] searchHits = searchResponse.getHits().getHits();
++ for (SearchHit searchHit : searchHits) {
++ String sourceAsString = searchHit.getSourceAsString();
++ Volume volume = JSONObject.parseObject(sourceAsString, Volume.class);
++ volume.setVolumeId(Integer.valueOf(searchHit.getId()));
++
++ Map highlightFields = searchHit.getHighlightFields();
++ if (highlightFields != null){
++ HighlightField highlightField = highlightFields.get("volumeName");
++ if (highlightField != null){
++ Text[] fragments = highlightField.getFragments();
++ String str = "";
++ for (Text fragment : fragments) {
++ str += fragment;
++ }
++ volume.setVolumeName(str);
++ }
++ volumeArrayList.add(volume);
++ }
++ }
++ } catch (Exception e) {
++ throw new RuntimeException(e);
++ }
++
++ return volumeArrayList;
++ }
++
++
++ @Autowired
++ private RabbitTemplate rabbitTemplate;
++
++ @Override
++ public void esSaveVolume(Volume volume) {
++ try {
++ IndexRequest indexRequest = new IndexRequest(INDEX_NAME);
++ indexRequest.id(volume.getVolumeId() + "");
++ indexRequest.source(JSONObject.toJSONString(volume), XContentType.JSON);
++ restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
++ } catch (IOException e) {
++ throw new RuntimeException(e);
++ }
++ rabbitTemplate.convertAndSend(RabbitMQQueueNameConstants.SEND_VOLUME_QUEUE,"volume",volume);
++ }
++
++}
+Index: .idea/restkit/RESTKit_CommonSetting.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/.idea/restkit/RESTKit_CommonSetting.xml b/.idea/restkit/RESTKit_CommonSetting.xml
+new file mode 100644
+--- /dev/null (date 1723433542443)
++++ b/.idea/restkit/RESTKit_CommonSetting.xml (date 1723433542443)
+@@ -0,0 +1,6 @@
++
++
++
++
++
++
+\ No newline at end of file
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/config/InitESRestHighLevelClient.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723436940843)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/config/InitESRestHighLevelClient.java (date 1723436940843)
+@@ -0,0 +1,139 @@
++package com.bwie.es.config;
++
++import lombok.Data;
++import org.apache.http.HttpHost;
++import org.elasticsearch.client.RestClient;
++import org.elasticsearch.client.RestHighLevelClient;
++import org.springframework.boot.context.properties.ConfigurationProperties;
++import org.springframework.context.annotation.Bean;
++import org.springframework.context.annotation.Configuration;
++
++
++@Configuration
++@ConfigurationProperties(prefix = "es")
++@Data
++public class InitESRestHighLevelClient {
++
++ /**
++ * es服务 地址
++ */
++ private String host;
++
++ /**
++ * 端口
++ */
++ private int port;
++
++ /**
++ * 请求方式
++ */
++ private String scheme;
++
++ /**
++ * 构建 RestHighLevelClient 用来做 es 操作
++ * @return
++ */
++ @Bean
++ public RestHighLevelClient restHighLevelClient() {
++ return new RestHighLevelClient(
++ RestClient.builder(new HttpHost(host, port, scheme))
++ );
++ }
++
++
++/**
++ * 添加商品表es
++ * @param goods
++ */
++// @Override
++// public void saveGoods(Goods goods) {
++// try {
++// IndexRequest indexRequest = new IndexRequest(INDEX_NAME);
++// indexRequest.id(goods.getGoodsId() + "");
++// indexRequest.source(JSONObject.toJSONString(goods),XContentType.JSON);
++// restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
++// } catch (IOException e) {
++// throw new RuntimeException(e);
++// }
++// }
++//
++//
++//
++///**
++// * 修改es
++// * @param goods
++// */
++// @Override
++// public void update(Goods goods) {
++//
++//
++// try {
++// UpdateRequest updateRequest = new UpdateRequest(INDEX_NAME, String.valueOf(goods.getGoodsId()));
++// SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
++// filter.getExcludes().add("goodsId");
++// updateRequest.doc(JSONObject.toJSONString(goods),XContentType.JSON);
++// restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);
++// } catch (IOException e) {
++// throw new RuntimeException(e);
++// }
++// }
++//
++// /**
++// * 删除es
++// * @param documentId
++// */
++// @Override
++// public void delete(String documentId) {
++//
++// try {
++// DeleteRequest deleteRequest = new DeleteRequest(INDEX_NAME, documentId);
++// restHighLevelClient.delete(deleteRequest,RequestOptions.DEFAULT);
++// } catch (IOException e) {
++// throw new RuntimeException(e);
++// }
++// }
++//
++//
++//
++///**
++// * 统计出各个销售员的保单数量
++// * @return
++// */
++// @Override
++// public List queryEsWarrantyCreatePeopleAndWarrantyCount() {
++// List statisticsArrayList = new ArrayList<>();
++//
++// try {
++// SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
++// SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
++// TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("warranty_number").field("warrantyCreatePeople");
++// searchSourceBuilder.aggregation(aggregationBuilder);
++// searchRequest.source(searchSourceBuilder);
++// //执行查询
++// SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
++// //获取聚合查询结果
++// Aggregations aggregations = searchResponse.getAggregations();
++// //根据聚合名称获取响应数据
++// //这个返回的东西要改成TERMS
++// Terms warrantyNumber = aggregations.get("warranty_number");
++// List extends Terms.Bucket> buckets = warrantyNumber.getBuckets();
++// //遍历
++// buckets.forEach(bucket -> {
++// String keyAsString = bucket.getKeyAsString();
++// long docCount = bucket.getDocCount();
++//
++// Statistics statistics = new Statistics();
++// statistics.setStatisticsId(keyAsString);
++// statistics.setStatisticsCount(docCount);
++// statisticsArrayList.add(statistics);
++// });
++//
++// } catch (Exception e) {
++// throw new RuntimeException(e);
++// }
++//
++// return statisticsArrayList;
++// }
++
++
++}
+Index: bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723426735895)
++++ b/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java (date 1723426735895)
+@@ -0,0 +1,16 @@
++package com.bwie.auth.service;
++
++import com.bwie.common.domain.User;
++import com.bwie.common.domain.request.UserRequest;
++import com.bwie.common.domain.response.TokenResponse;
++
++public interface AuthService {
++ //发送验证码
++ void sendCode(String phone);
++ //登录
++ TokenResponse login(UserRequest request);
++ //获取token
++ User info();
++ //退出登录
++ void logout();
++}
+Index: bwie-auth/src/main/resources/bootstrap.yml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-auth/src/main/resources/bootstrap.yml b/bwie-auth/src/main/resources/bootstrap.yml
+new file mode 100644
+--- /dev/null (date 1723427857911)
++++ b/bwie-auth/src/main/resources/bootstrap.yml (date 1723427857911)
+@@ -0,0 +1,43 @@
++# Tomcat
++server:
++ port: 9001
++# Spring
++spring:
++ rabbitmq:
++ host: 111.229.181.183
++ port: 5672
++ username: guest
++ password: guest
++ virtual-host: /
++ listener:
++ simple:
++ retry:
++ enabled: true
++ prefetch: 1 #配置多劳多得 每次取出一条消息 消息完毕取下一条
++ acknowledge-mode: manual #设置消费端手动ack确认
++ publisher-confirm-type: correlated #确认消息已发送到交换机(exchange)或者broker
++ publisher-returns: true #开启消息发送到队列的确认
++ 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: 47.116.168.171:8848
++ config:
++ # 配置中心地址
++ server-addr: 47.116.168.171:8848
++ # 配置文件格式
++ file-extension: yml
++ # 共享配置
++ shared-configs:
++ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+Index: bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723427946480)
++++ b/bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java (date 1723427946480)
+@@ -0,0 +1,18 @@
++package com.bwie.auth;
++
++import org.springframework.boot.SpringApplication;
++import org.springframework.boot.autoconfigure.SpringBootApplication;
++import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
++import org.springframework.cloud.openfeign.EnableFeignClients;
++import org.springframework.context.annotation.Bean;
++import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
++
++
++@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
++@EnableFeignClients
++public class AuthApplication {
++
++ public static void main(String[] args) {
++ SpringApplication.run(AuthApplication.class,args);
++ }
++}
+Index: bwie-module/pom.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/pom.xml b/bwie-module/pom.xml
+new file mode 100644
+--- /dev/null (date 1723448823245)
++++ b/bwie-module/pom.xml (date 1723448823245)
+@@ -0,0 +1,26 @@
++
++
++ 4.0.0
++
++ com.bwie
++ month
++ 1.0-SNAPSHOT
++
++
++ bwie-module
++ pom
++
++ bwie-system
++ bwie-volume
++ bwie-order
++
++
++
++ 17
++ 17
++ UTF-8
++
++
++
+Index: bwie-module/bwie-es/src/main/java/com/bwie/es/service/EsService.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723445619722)
++++ b/bwie-module/bwie-es/src/main/java/com/bwie/es/service/EsService.java (date 1723445619722)
+@@ -0,0 +1,13 @@
++package com.bwie.es.service;
++
++import com.bwie.common.domain.Volume;
++import com.bwie.common.domain.request.VolumeRequest;
++
++import java.util.List;
++
++public interface EsService {
++ //es查询
++ List esList(VolumeRequest request);
++ //es新增
++ void esSaveVolume(Volume volume);
++}
+Index: bwie-auth/pom.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-auth/pom.xml b/bwie-auth/pom.xml
+new file mode 100644
+--- /dev/null (date 1723424977238)
++++ b/bwie-auth/pom.xml (date 1723424977238)
+@@ -0,0 +1,26 @@
++
++
++ 4.0.0
++
++ com.bwie
++ month
++ 1.0-SNAPSHOT
++
++
++ bwie-auth
++
++
++
++
++ com.bwie
++ bwie-common
++
++
++
++ org.springframework.boot
++ spring-boot-starter-web
++
++
++
+Index: bwie-gateway/src/main/resources/bootstrap.yml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-gateway/src/main/resources/bootstrap.yml b/bwie-gateway/src/main/resources/bootstrap.yml
+new file mode 100644
+--- /dev/null (date 1723427893549)
++++ b/bwie-gateway/src/main/resources/bootstrap.yml (date 1723427893549)
+@@ -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: 47.116.168.171:8848
++ config:
++ # 配置中心地址
++ server-addr: 47.116.168.171:8848
++ # 配置文件格式
++ file-extension: yml
++ # 共享配置
++ shared-configs:
++ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+Index: bwie-module/bwie-es/src/main/resources/mapper/LoginMapper.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-es/src/main/resources/mapper/LoginMapper.xml b/bwie-module/bwie-es/src/main/resources/mapper/LoginMapper.xml
+new file mode 100644
+--- /dev/null (date 1723429123657)
++++ b/bwie-module/bwie-es/src/main/resources/mapper/LoginMapper.xml (date 1723429123657)
+@@ -0,0 +1,22 @@
++
++
++
++
++
++
++
++
++
++
++ insert into t_user(phone,user_name,user_pwd,user_role)
++ values(#{phone},#{userName},#{userPwd},2)
++
++
++
+Index: bwie-module/bwie-volume/src/main/resources/mapper/VolumeMapper.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/resources/mapper/VolumeMapper.xml b/bwie-module/bwie-volume/src/main/resources/mapper/VolumeMapper.xml
+new file mode 100644
+--- /dev/null (date 1723468191092)
++++ b/bwie-module/bwie-volume/src/main/resources/mapper/VolumeMapper.xml (date 1723468191092)
+@@ -0,0 +1,68 @@
++
++
++
++
++
++
++
++
++
++
++ INSERT INTO t_volume(volume_code,volume_name,volume_price,volume_inventory,volume_type,volume_flag)
++ VALUES(#{volumeCode},#{volumeName},#{volumePrice},#{volumeInventory},#{volumeType},#{volumeFlag})
++
++
++
++
++
++
++
++ UPDATE t_volume
++ SET
++ volume_inventory = volume_inventory - 1
++ WHERE
++ volume_id = #{volumeId}
++
++
++
++
++ update t_volume set
++ volume_transfer = #{volumeTransfer}
++ where volume_id = #{volumeId}
++
++
++
+Index: bwie-module/bwie-volume/src/main/java/com/bwie/volume/mapper/VolumeMapper.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/java/com/bwie/volume/mapper/VolumeMapper.java b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/mapper/VolumeMapper.java
+new file mode 100644
+--- /dev/null (date 1723465372399)
++++ b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/mapper/VolumeMapper.java (date 1723465372399)
+@@ -0,0 +1,21 @@
++package com.bwie.volume.mapper;
++
++import com.bwie.common.domain.Volume;
++import org.apache.ibatis.annotations.Param;
++import org.springframework.stereotype.Component;
++
++import java.util.List;
++
++@Component
++public interface VolumeMapper {
++ //查询所有的卷
++ List queryVolume();
++ //添加卷
++ Integer saveVolume(Volume volume);
++ //购买卷
++ List purchase(@Param("volumeIds") List volumeIds);
++ //购买成功之后减去库存
++ void updateVolumeInventory(@Param("volumeIds") List volumeIds);
++ //查看卷码详情
++ void updateVolumeTransfer(Volume volume);
++}
+Index: bwie-common/src/main/java/com/bwie/common/domain/Volume.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Volume.java b/bwie-common/src/main/java/com/bwie/common/domain/Volume.java
+new file mode 100644
+--- /dev/null (date 1723461502792)
++++ b/bwie-common/src/main/java/com/bwie/common/domain/Volume.java (date 1723461502792)
+@@ -0,0 +1,62 @@
++package com.bwie.common.domain;
++
++import com.baomidou.mybatisplus.annotation.IdType;
++import com.baomidou.mybatisplus.annotation.TableId;
++import com.baomidou.mybatisplus.annotation.TableName;
++import lombok.AllArgsConstructor;
++import lombok.Builder;
++import lombok.Data;
++import lombok.NoArgsConstructor;
++
++import java.math.BigDecimal;
++
++/**
++ * @Author YuPing
++ * @Description 卷
++ * @Version 1.0
++ * @Data 2024-08-12 11:21:49
++ */
++@Data
++@Builder
++@NoArgsConstructor
++@AllArgsConstructor
++@TableName(value = "t_volume")
++public class Volume {
++ /**
++ * 主键
++ */
++ @TableId(type = IdType.AUTO)
++ private Integer volumeId;
++ /**
++ * 卷编码
++ */
++ private String volumeCode;
++ /**
++ * 卷名称
++ */
++ private String volumeName;
++ /**
++ * 卷价格
++ */
++ private BigDecimal volumePrice;
++ /**
++ * 卷库存
++ */
++ private Integer volumeInventory;
++ /**
++ * 卷类型1.腾讯2.爱奇艺3.哔哩哔哩4.优酷5.QQ
++ */
++ private Integer volumeType;
++ /**
++ * 卷状态
++ */
++ private String volumeFlag;
++ /**
++ * 质保时长
++ */
++ private Integer volumeDuration;
++ /**
++ * 转让信息
++ */
++ private String volumeTransfer;
++}
+Index: bwie-module/bwie-es/src/main/resources/bootstrap.yml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+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
+--- /dev/null (date 1723432755718)
++++ b/bwie-module/bwie-es/src/main/resources/bootstrap.yml (date 1723432755718)
+@@ -0,0 +1,29 @@
++# 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-es
++ profiles:
++ # 环境配置
++ active: dev
++ cloud:
++ nacos:
++ discovery:
++ # 服务注册地址
++ server-addr: 47.116.168.171:8848
++ config:
++ # 配置中心地址
++ server-addr: 47.116.168.171:8848
++ # 配置文件格式
++ file-extension: yml
++ # 共享配置
++ shared-configs:
++ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+Index: bwie-module/bwie-volume/src/main/java/com/bwie/volume/controller/VolumeController.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/java/com/bwie/volume/controller/VolumeController.java b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/controller/VolumeController.java
+new file mode 100644
+--- /dev/null (date 1723465372384)
++++ b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/controller/VolumeController.java (date 1723465372384)
+@@ -0,0 +1,109 @@
++package com.bwie.volume.controller;
++
++import com.alibaba.fastjson.JSONObject;
++import com.bwie.common.domain.Volume;
++import com.bwie.common.domain.response.TokenResponse;
++import com.bwie.common.result.Result;
++import com.bwie.volume.service.VolumeService;
++import lombok.extern.slf4j.Slf4j;
++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;
++import java.util.List;
++
++/**
++ * @Author YuPing
++ * @Description
++ * @Version 1.0
++ * @Data 2024-08-12 11:29:55
++ */
++@Slf4j
++@RestController
++public class VolumeController {
++
++ @Autowired
++ private VolumeService volumeService;
++
++ @Autowired
++ private HttpServletRequest httpServletRequest;
++
++ /**
++ * 查询所有卷
++ * @return
++ */
++ @GetMapping("/queryVolume")
++ public Result> queryVolume(){
++ log.info("功能:查询所有卷");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ List volumes = volumeService.queryVolume();
++ log.info("功能:查询所有卷");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("响应结果:"+ JSONObject.toJSONString(volumes));
++ return Result.success(volumes);
++ }
++
++
++ /**
++ * 保存卷
++ * @param volume
++ * @return
++ */
++ @PostMapping("/saveVolume")
++ public Result saveVolume(@RequestBody Volume volume){
++ log.info("功能:保存卷");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+ JSONObject.toJSONString(volume));
++ Integer saveVolume = volumeService.saveVolume(volume);
++ log.info("功能:保存卷");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("响应结果:"+ JSONObject.toJSONString(saveVolume));
++ return Result.success(saveVolume);
++ }
++
++
++ /**
++ * 购买卷
++ * @param volumeIds
++ * @return
++ */
++ @PostMapping("/purchase")
++ public Result> purchase(@RequestBody List volumeIds){
++ log.info("功能:购买卷");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+ JSONObject.toJSONString(volumeIds));
++ List volumeList = volumeService.purchase(volumeIds);
++ log.info("功能:购买卷");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("响应结果:"+ JSONObject.toJSONString(volumeList));
++ return Result.success(volumeList);
++ }
++
++ /**
++ * 更新卷
++ * @param volume
++ */
++ @PostMapping("/updateVolumeTransfer")
++ public Result updateVolumeTransfer(@RequestBody Volume volume){
++ log.info("功能:更新卷");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ log.info("请求参数:"+ JSONObject.toJSONString(volume));
++ volumeService.updateVolumeTransfer(volume);
++ log.info("功能:更新卷");
++ log.info("请求路径:"+httpServletRequest.getRequestURL());
++ log.info("请求方法:"+httpServletRequest.getMethod());
++ return Result.success();
++ }
++
++
++}
+Index: bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/impl/VolumeServiceImpl.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/impl/VolumeServiceImpl.java b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/impl/VolumeServiceImpl.java
+new file mode 100644
+--- /dev/null (date 1723468191084)
++++ b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/impl/VolumeServiceImpl.java (date 1723468191084)
+@@ -0,0 +1,152 @@
++package com.bwie.volume.service.impl;
++
++import cn.hutool.core.util.RandomUtil;
++import com.bwie.common.domain.Consign;
++import com.bwie.common.domain.Order;
++import com.bwie.common.domain.Volume;
++import com.bwie.volume.mapper.VolumeMapper;
++import com.bwie.volume.remote.OrderRemote;
++import com.bwie.volume.service.VolumeService;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.data.redis.core.StringRedisTemplate;
++import org.springframework.stereotype.Service;
++
++import javax.annotation.Resource;
++import java.math.BigDecimal;
++import java.util.ArrayList;
++import java.util.Date;
++import java.util.List;
++
++/**
++ * @Author YuPing
++ * @Description
++ * @Version 1.0
++ * @Data 2024-08-12 11:27:49
++ */
++@Service
++public class VolumeServiceImpl implements VolumeService {
++
++ @Resource
++ private VolumeMapper volumeMapper;
++
++ @Autowired
++ private StringRedisTemplate redisTemplate;
++
++ /**
++ * 查询所有卷
++ * @return
++ */
++ @Override
++ public List queryVolume() {
++ List volumes = volumeMapper.queryVolume();
++ //使用Stream流进行遍历输出
++ volumes.stream().forEach(System.out::println);
++ return volumes;
++ }
++
++ /**
++ * 保存卷
++ * @param volume
++ * @return
++ */
++ @Override
++ public Integer saveVolume(Volume volume) {
++ //生成卷码
++ String string = RandomUtil.randomString(4);
++ String number = RandomUtil.randomNumbers(4);
++ volume.setVolumeCode(string + number);
++ //生成库存
++ int randomInt = RandomUtil.randomInt(2);
++ volume.setVolumeInventory(randomInt);
++ //生成价格
++ BigDecimal bigDecimal = RandomUtil.randomBigDecimal();
++ volume.setVolumePrice(bigDecimal);
++ //默认卷状态是可预约状态
++ volume.setVolumeFlag("可预约");
++ Integer saveVolume = volumeMapper.saveVolume(volume);
++ if (saveVolume < 0){
++ throw new RuntimeException("保存失败");
++ }
++ return saveVolume;
++ }
++
++ /**
++ * 远程调用
++ * 订单批量添加
++ */
++ @Autowired
++ private OrderRemote orderRemote;
++
++ /**
++ * 购买卷
++ * @param volumeIds
++ * @return
++ */
++ @Override
++ public List purchase(List volumeIds) {
++ List volumeList = volumeMapper.purchase(volumeIds);
++ ArrayList orderArrayList = new ArrayList<>();
++ //④ 点击购买,会有质保时长,质保时长12小时以内为当前价格0.005%,24小时为0.01%,48小时为0.02%(3分)
++ //⑤ 选择质保时长,自动计算总价(3分)
++ for (Volume volume : volumeList) {
++
++ List orderList = orderRemote.queryOrder().getData();
++ orderList.forEach(order -> {
++ if (order.getOrderVolumeName().equals(volume.getVolumeName())){
++ throw new RuntimeException("该卷已被购买,不能重复购买");
++ }
++ });
++
++ if(volume.getVolumeDuration() <= 12){
++ volume.setVolumePrice(volume.getVolumePrice().multiply(BigDecimal.valueOf(0.005)));
++ }else if (volume.getVolumeDuration() <= 24){
++ volume.setVolumePrice(volume.getVolumePrice().multiply(BigDecimal.valueOf(0.01)));
++ }else if (volume.getVolumeDuration() <= 48){
++ volume.setVolumePrice(volume.getVolumePrice().multiply(BigDecimal.valueOf(0.02)));
++ }
++
++ redisTemplate.opsForValue().set("volumeInventory", String.valueOf(volume.getVolumeInventory()));
++
++ Order order = new Order();
++ order.setPersonalAmount(BigDecimal.valueOf(9999.77));
++ order.setOrderTime(new Date());
++ order.setOrderNumber(Integer.valueOf(RandomUtil.randomNumbers(8)));
++ order.setOrderVolumeName(volume.getVolumeName());
++ order.setOrderPrice(volume.getVolumePrice());
++ order.setOrderFlag("待使用");
++ order.setPersonalAmount(order.getPersonalAmount().subtract(volume.getVolumePrice()));
++ orderArrayList.add(order);
++ orderRemote.addOrder(orderArrayList);
++
++ }
++
++ volumeMapper.updateVolumeInventory(volumeIds);
++
++
++ return volumeList;
++ }
++
++ @Autowired
++ private ConsignServiceImpl consignService;
++
++ /**
++ * 更新卷库存
++ * @param volume
++ */
++ @Override
++ public void updateVolumeTransfer(Volume volume) {
++ Consign consign = new Consign();
++ consign.setConsignOrderName(volume.getVolumeName());
++ int i = 0;
++ consign.setConsignNumber(++i);
++ consign.setPersonalAmount(BigDecimal.valueOf(77.52));
++ consign.setConsignFlag("寄售中");
++ consign.setConsignTime(new Date());
++ if (consign.getConsignFlag().equals("完成")){
++ consign.setPersonalAmount(consign.getPersonalAmount().subtract(volume.getVolumePrice()));
++ }
++ consignService.saveConsign(consign);
++ redisTemplate.opsForValue().set("consignNumber", String.valueOf(consign.getConsignNumber()));
++ volumeMapper.updateVolumeTransfer(volume);
++ }
++}
+Index: bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/VolumeService.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/VolumeService.java b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/VolumeService.java
+new file mode 100644
+--- /dev/null (date 1723465372366)
++++ b/bwie-module/bwie-volume/src/main/java/com/bwie/volume/service/VolumeService.java (date 1723465372366)
+@@ -0,0 +1,17 @@
++package com.bwie.volume.service;
++
++import com.bwie.common.domain.Consign;
++import com.bwie.common.domain.Volume;
++
++import java.util.List;
++
++public interface VolumeService {
++ //查询所有的卷
++ List queryVolume();
++ //添加卷
++ Integer saveVolume(Volume volume);
++ //购买卷
++ List purchase(List volumeIds);
++ //查看卷码详情
++ void updateVolumeTransfer(Volume volume);
++}
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/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..c55abba
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,303 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1704938632481
+
+
+ 1704938632481
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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..9dc746a739bb9a54ab9764bf29bc86969d68ba1d
GIT binary patch
literal 11113
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
Vcruib;$otAnsWhslvMaLz`qu8XF>n~
literal 0
HcmV?d00001
diff --git a/bwie-auth/target/classes/com/bwie/auth/remote/AuthRemote.class b/bwie-auth/target/classes/com/bwie/auth/remote/AuthRemote.class
new file mode 100644
index 0000000000000000000000000000000000000000..7310420464eddfbfdb7c6bf29ad10e7bf726563c
GIT binary patch
literal 717
zcmb7?%}yIJ5XZ+r2oNY~`BG0voamt)RYhDojA4k5avKPb*iS0A4hsUB
z*YZxHmS%wG={03RK%=ir?|6JMw1x!y+3!q4y1^+kX#MC+(Cp;aFx*ESFsV$7v1b&9
zws#?&%qfub0&2wzaJj1nMuzAZo_rqu_lZ;j*PKE
z24xK=anP}DfW9cp=$E;Tth>PxrI>QjC?~OaO5scvMOiNAekXP0d{=R%H+!>6lWJ!q
z4?irK&}}3iDh!LRbZvAQwUuV&_36L;D*r>k?{~SGwy}q{Ak!!AGq%h9L@P3Zk&SX3
ze)_Qwlryt0wN7Pr)0SDVZY*GL+T7POqw+#yJNmL2ivk49^Oyk$o}U^l!UEL!R1>ho
vW|`LgD@p74)^*zg3}4zTM!5YaTXXD}(K4aq!pT
literal 0
HcmV?d00001
diff --git a/bwie-auth/target/classes/com/bwie/auth/remote/impl/Fusing$1.class b/bwie-auth/target/classes/com/bwie/auth/remote/impl/Fusing$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..6a2ac7636e7bbf0aabe9fb2d71842a663e245350
GIT binary patch
literal 1052
zcmb7D&rcIU6#j-53T=^E1QmaPShNM=O7vh-LZSo`lZvEZ6OYsFNQdmslHFO+o5q{Q
zn->x;CYo@RL_^fX-u*vn`74ZXT4I|}L)>KNy_tOPd%u7F{`LdFZOjg!2ay<}N%W$R
zVbb@~i=tk-sC4{N)Py*G!SUNzqB)j#YXe*PH8AkxO?FvCc;&?a2dK4pEq>L
z7+8}VitErP`r`l7&mZ$%@mwyI^(YX2eu2El*SyfT#j-R-O0Ov%$m^V^w6KcD9N*=Es!)X@#&c_VABVP?Kd&!=N7=GQcm
z&9E_CB)yj!@*+i-OSp{45pASp@EwDX(?bV1T_a!*+O(tppdF{6|I&_=(Uqp*BoSY2
VY8gzCjN%%ym?14ra1$GSe*hzG6vY4l
literal 0
HcmV?d00001
diff --git a/bwie-auth/target/classes/com/bwie/auth/remote/impl/Fusing.class b/bwie-auth/target/classes/com/bwie/auth/remote/impl/Fusing.class
new file mode 100644
index 0000000000000000000000000000000000000000..0021690b4a489dee363f915a248fa83050520e58
GIT binary patch
literal 1021
zcmbVKYikoh6upzznr$?xwblA+tre08j-nrg)ItaZg!rH>0YA=erpctcGhuet(0`?0
z6cqdc{wVQm5^0b~!G+Ap?A|%&+%xy*uWvty=mqWjl%u>yg$fm^#HcnF9|ezu9`bj=
zScZ;K=|E}a4jJX^jlM@$81027=D}1+E>bt*R>sCjuHs3=yJ@2IaQ~T49{CyP8ly+`
z-em_`jlNG;>6%B?3e{+x(e7nOU@Wv!ILYW`y?0^zWMs`$1d(htR?D{G`DkXj<M_MB0nV+N3}_LP=y(>Rd!
zBok$Hy=OuZ^@Ua0e(|#4Mk+yYs~s&R*J4x*MVf$Ub7fPwqBqiw%;3Gq%sOeo+xS-i
z7qQH56ZGX{^dnqqAu(Q(SQPaBBaMUAZ7l_T2x0%&q&AdYm8G;cACxDVK}Oq0sdg%s
zeU&JL*4ElM;gr$nt+~=sg2ttB=M%|0CY~5AwSz|Gwbs&hB9SCAp$8bL9N|hZ>Ukh0
z9P172IFJF0&9B5h<4=w@v1XqM^S6byGB2Q;bPGGgPV1=34!;6f4p{z9-UkqrKVh>>
zurVXpninkyP)^%)8$@?dT}00iYJ>Ieg7qmdV=Xlwf1%3Xl+`6qr3K|5q8d?w?#(>h
Wr=1z@qW5__d%%bI`B3(Nczy$p2>ZqW
literal 0
HcmV?d00001
diff --git a/bwie-auth/target/classes/com/bwie/auth/service/AuthService.class b/bwie-auth/target/classes/com/bwie/auth/service/AuthService.class
new file mode 100644
index 0000000000000000000000000000000000000000..6724573a5b58416075af08900793d07245600416
GIT binary patch
literal 411
zcmZ`#yHdk25IhAxAiM%I)C`@|poY#B!wgjzm>B3N6#K9hY+aD#@NX&j06vQ095aL_
zjdZ)ZJMHe*_v#Y>uHZC=fq;vg8aeyWC{^n#>Ci59j`Es8*4Hrv0!DMSRI*m4l=rha
z=3cu%tR+};%Kl9Wb`ihDNWmSV7trHL~Dl$A0)>LXE;3b*-Dd3_Z
zBMWMjHqzpIi_Xg@)->(wbiBRUEyy^OkMxFSiakmN#J_6<1lqikfb(SQlI|xSiC7x7
z>~JUPObjz>ZH~9PX4#{E!CZEpBLUpVfdT}aQwR~`m{G_HF(+UTh8t>sO&!4D`aXhV
L?&Pg}4&dYmZQyOf
literal 0
HcmV?d00001
diff --git a/bwie-auth/target/classes/com/bwie/auth/service/impl/AuthServiceImpl$1.class b/bwie-auth/target/classes/com/bwie/auth/service/impl/AuthServiceImpl$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..b36982405a7dedd3c2e3492cf1fac5ceb3625b99
GIT binary patch
literal 910
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
H<-h*`duR7>
literal 0
HcmV?d00001
diff --git a/bwie-auth/target/maven-archiver/pom.properties b/bwie-auth/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..34c155a
--- /dev/null
+++ b/bwie-auth/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=bwie-auth
+groupId=com.bwie
+version=1.0-SNAPSHOT
diff --git a/bwie-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/bwie-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..5a132e3
--- /dev/null
+++ b/bwie-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,8 @@
+com\bwie\auth\AuthApplication.class
+com\bwie\auth\controller\AuthController.class
+com\bwie\auth\remote\impl\Fusing.class
+com\bwie\auth\remote\impl\Fusing$1.class
+com\bwie\auth\service\impl\AuthServiceImpl$1.class
+com\bwie\auth\service\AuthService.class
+com\bwie\auth\remote\AuthRemote.class
+com\bwie\auth\service\impl\AuthServiceImpl.class
diff --git a/bwie-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/bwie-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..e458dc7
--- /dev/null
+++ b/bwie-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,6 @@
+C:\Users\86191\Desktop\month\bwie-auth\src\main\java\com\bwie\auth\controller\AuthController.java
+C:\Users\86191\Desktop\month\bwie-auth\src\main\java\com\bwie\auth\service\AuthService.java
+C:\Users\86191\Desktop\month\bwie-auth\src\main\java\com\bwie\auth\remote\impl\Fusing.java
+C:\Users\86191\Desktop\month\bwie-auth\src\main\java\com\bwie\auth\service\impl\AuthServiceImpl.java
+C:\Users\86191\Desktop\month\bwie-auth\src\main\java\com\bwie\auth\remote\AuthRemote.java
+C:\Users\86191\Desktop\month\bwie-auth\src\main\java\com\bwie\auth\AuthApplication.java
diff --git a/bwie-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/bwie-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
new file mode 100644
index 0000000..e69de29
diff --git a/bwie-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/bwie-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000..e69de29
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..63ed0682f8e616cbe67bdef8333fe1a6c5abdb75
GIT binary patch
literal 38349
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