From d422211f70b6f3306e4da258a36c263a1c90368b Mon Sep 17 00:00:00 2001
From: Cui YongXing <2835316714@qq.com>
Date: Mon, 12 Aug 2024 21:50:38 +0800
Subject: [PATCH] 1
---
.gitignore | 35 ++
.idea/.gitignore | 8 +
.idea/encodings.xml | 19 ++
.idea/inspectionProfiles/Project_Default.xml | 5 +
.idea/misc.xml | 17 +
.idea/setting.xml | 8 +
.idea/vcs.xml | 6 +
bwie-auth/pom.xml | 32 ++
.../java/com/bwie/auth/AuthApplication.java | 15 +
.../auth/config/ConfirmCallbackConfig.java | 39 +++
.../bwie/auth/config/InitPasswordEncode.java | 14 +
.../bwie/auth/config/RabbitAdminConfig.java | 48 +++
.../com/bwie/auth/config/RabbitmqConfig.java | 15 +
.../auth/config/ReturnsCallbackConfig.java | 36 ++
.../bwie/auth/controller/AuthController.java | 74 +++++
.../java/com/bwie/auth/feign/UserFeign.java | 22 ++
.../auth/feign/factory/UserFeignFactory.java | 29 ++
.../com/bwie/auth/service/AuthService.java | 29 ++
.../auth/service/impl/AuthServiceImpl.java | 164 +++++++++
bwie-auth/src/main/resources/bootstrap.yml | 46 +++
bwie-common/pom.xml | 132 ++++++++
.../com/bwie/common/config/RedisConfig.java | 40 +++
.../bwie/common/config/RedissonConfig.java | 31 ++
.../com/bwie/common/constants/Constants.java | 17 +
.../bwie/common/constants/JwtConstants.java | 28 ++
.../common/constants/RabbitMQConstants.java | 5 +
.../bwie/common/constants/TokenConstants.java | 23 ++
.../java/com/bwie/common/domain/Cart.java | 27 ++
.../java/com/bwie/common/domain/Goods.java | 50 +++
.../java/com/bwie/common/domain/Middle.java | 27 ++
.../java/com/bwie/common/domain/Seckill.java | 47 +++
.../java/com/bwie/common/domain/Type.java | 21 ++
.../java/com/bwie/common/domain/User.java | 42 +++
.../common/domain/request/CartAddReq.java | 20 ++
.../common/domain/request/CartPayReq.java | 18 +
.../common/domain/request/GoodsAddReq.java | 50 +++
.../common/domain/request/GoodsListReq.java | 17 +
.../common/domain/request/GoodsUpdateReq.java | 43 +++
.../common/domain/request/MiddleAddReq.java | 18 +
.../common/domain/request/RegisterUser.java | 26 ++
.../common/domain/request/SeckillAddReq.java | 41 +++
.../common/domain/request/SeckillListReq.java | 24 ++
.../common/domain/request/UserLoginReq.java | 21 ++
.../bwie/common/domain/response/CartResp.java | 28 ++
.../common/domain/response/GoodsListResp.java | 23 ++
.../common/domain/response/JwtResponse.java | 11 +
.../common/domain/response/MiddleResp.java | 37 +++
.../common/domain/response/SeckillResp.java | 47 +++
.../common/domain/response/UserLoginResp.java | 50 +++
.../bwie/common/domain/response/UserResp.java | 30 ++
.../bwie/common/domain/vo/GoodsMiddle.java | 21 ++
.../java/com/bwie/common/domain/vo/Pay.java | 20 ++
.../bwie/common/exception/AllException.java | 23 ++
.../common/handle/AllExceptionAdvice.java | 20 ++
.../com/bwie/common/result/PageResult.java | 33 ++
.../java/com/bwie/common/result/Result.java | 75 +++++
.../java/com/bwie/common/utils/FastUtil.java | 50 +++
.../com/bwie/common/utils/GenCodeUtils.java | 83 +++++
.../java/com/bwie/common/utils/HttpUtils.java | 312 ++++++++++++++++++
.../java/com/bwie/common/utils/JwtUtils.java | 115 +++++++
.../java/com/bwie/common/utils/OssUtil.java | 153 +++++++++
.../bwie/common/utils/SendMessageUtil.java | 54 +++
.../com/bwie/common/utils/StringUtils.java | 67 ++++
.../com/bwie/common/utils/TelSmsUtils.java | 92 ++++++
.../main/resources/META-INF/spring.factories | 2 +
bwie-gateway/pom.xml | 43 +++
.../com/bwie/gateway/GatewayApplication.java | 11 +
.../gateway/config/IgnoreWhiteConfig.java | 29 ++
.../com/bwie/gateway/filters/AuthFilter.java | 62 ++++
.../com/bwie/gateway/utils/GatewayUtils.java | 95 ++++++
bwie-gateway/src/main/resources/bootstrap.yml | 31 ++
bwie-modules/bwie-es/pom.xml | 48 +++
.../main/java/com/bwie/es/EsApplication.java | 15 +
.../bwie/es/config/ConfirmCallbackConfig.java | 40 +++
.../java/com/bwie/es/config/EsConfigInit.java | 28 ++
.../com/bwie/es/config/RabbitAdminConfig.java | 50 +++
.../com/bwie/es/config/RabbitmqConfig.java | 15 +
.../bwie/es/config/ReturnsCallbackConfig.java | 37 +++
.../com/bwie/es/consumers/EsConsumer.java | 50 +++
.../com/bwie/es/controller/EsContoller.java | 50 +++
.../java/com/bwie/es/feign/GoodsFeign.java | 16 +
.../es/feign/factory/GoodsFeignFactory.java | 24 ++
.../java/com/bwie/es/service/EsService.java | 26 ++
.../bwie/es/service/impl/EsServiceImpl.java | 140 ++++++++
.../bwie-es/src/main/resources/bootstrap.yml | 57 ++++
bwie-modules/bwie-goods/pom.xml | 56 ++++
.../java/com/bwie/goods/GoodsApplication.java | 66 ++++
.../goods/config/ConfirmCallbackConfig.java | 40 +++
.../com/bwie/goods/config/EsConfigInit.java | 27 ++
.../bwie/goods/config/RabbitAdminConfig.java | 50 +++
.../com/bwie/goods/config/RabbitmqConfig.java | 15 +
.../com/bwie/goods/config/RedissonConfig.java | 31 ++
.../goods/config/ReturnsCallbackConfig.java | 37 +++
.../bwie/goods/controller/CartController.java | 66 ++++
.../goods/controller/GoodsController.java | 64 ++++
.../goods/controller/MiddleController.java | 47 +++
.../goods/controller/SeckillController.java | 57 ++++
.../bwie/goods/controller/TypeController.java | 24 ++
.../java/com/bwie/goods/feign/UserFeign.java | 27 ++
.../goods/feign/factory/UserFeignFactory.java | 33 ++
.../com/bwie/goods/mapper/CartMapper.java | 24 ++
.../com/bwie/goods/mapper/GoodsMapper.java | 33 ++
.../com/bwie/goods/mapper/MiddleMapper.java | 26 ++
.../com/bwie/goods/mapper/SeckillMapper.java | 23 ++
.../com/bwie/goods/mapper/TypeMapper.java | 14 +
.../com/bwie/goods/service/CartService.java | 18 +
.../com/bwie/goods/service/GoodsService.java | 27 ++
.../com/bwie/goods/service/MiddleService.java | 27 ++
.../bwie/goods/service/SeckillService.java | 32 ++
.../com/bwie/goods/service/TypeService.java | 9 +
.../goods/service/impl/CartServiceImpl.java | 87 +++++
.../goods/service/impl/GoodsServiceImpl.java | 69 ++++
.../goods/service/impl/MiddleServiceImpl.java | 52 +++
.../service/impl/SeckillServiceImpl.java | 42 +++
.../goods/service/impl/TypeServiceImpl.java | 20 ++
.../src/main/resources/bootstrap.yml | 49 +++
.../src/main/resources/mapper/CartMapper.xml | 34 ++
.../src/main/resources/mapper/GoodsMapper.xml | 11 +
.../main/resources/mapper/MiddleMapper.xml | 42 +++
.../main/resources/mapper/SeckillMapper.xml | 26 ++
bwie-modules/bwie-rabbit/pom.xml | 36 ++
.../com/bwie/rabbitmq/RabbitApplication.java | 11 +
.../config/ConfirmCallbackConfig.java | 40 +++
.../rabbitmq/config/RabbitAdminConfig.java | 50 +++
.../bwie/rabbitmq/config/RabbitmqConfig.java | 15 +
.../config/ReturnsCallbackConfig.java | 37 +++
.../bwie/rabbitmq/consumer/SMSConsumer.java | 47 +++
.../src/main/resources/bootstrap.yml | 50 +++
bwie-modules/bwie-system/pom.xml | 51 +++
.../com/bwie/system/SystemApplication.java | 11 +
.../system/controller/UserController.java | 61 ++++
.../com/bwie/system/mapper/UserMapper.java | 31 ++
.../com/bwie/system/service/UserService.java | 27 ++
.../system/service/impl/UserServiceImpl.java | 55 +++
.../src/main/resources/bootstrap.yml | 31 ++
bwie-modules/pom.xml | 27 ++
pom.xml | 125 +++++++
137 files changed, 5652 insertions(+)
create mode 100644 .gitignore
create mode 100644 .idea/.gitignore
create mode 100644 .idea/encodings.xml
create mode 100644 .idea/inspectionProfiles/Project_Default.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/setting.xml
create mode 100644 .idea/vcs.xml
create mode 100644 bwie-auth/pom.xml
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/config/ConfirmCallbackConfig.java
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/config/InitPasswordEncode.java
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/config/RabbitAdminConfig.java
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/config/RabbitmqConfig.java
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/config/ReturnsCallbackConfig.java
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/feign/UserFeign.java
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/feign/factory/UserFeignFactory.java
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java
create mode 100644 bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java
create mode 100644 bwie-auth/src/main/resources/bootstrap.yml
create mode 100644 bwie-common/pom.xml
create mode 100644 bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/config/RedissonConfig.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/Constants.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/RabbitMQConstants.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/Cart.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/Goods.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/Middle.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/Seckill.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/Type.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/User.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/CartAddReq.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/CartPayReq.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/GoodsAddReq.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/GoodsListReq.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/GoodsUpdateReq.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/MiddleAddReq.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/RegisterUser.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/SeckillAddReq.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/SeckillListReq.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/request/UserLoginReq.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/CartResp.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/GoodsListResp.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/MiddleResp.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/SeckillResp.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/UserLoginResp.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/response/UserResp.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/vo/GoodsMiddle.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/domain/vo/Pay.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/exception/AllException.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/handle/AllExceptionAdvice.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/result/PageResult.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/result/Result.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/GenCodeUtils.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/HttpUtils.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/SendMessageUtil.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java
create mode 100644 bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java
create mode 100644 bwie-common/src/main/resources/META-INF/spring.factories
create mode 100644 bwie-gateway/pom.xml
create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/GatewayApplication.java
create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java
create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java
create mode 100644 bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java
create mode 100644 bwie-gateway/src/main/resources/bootstrap.yml
create mode 100644 bwie-modules/bwie-es/pom.xml
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/EsApplication.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/config/ConfirmCallbackConfig.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/config/EsConfigInit.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/config/RabbitAdminConfig.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/config/RabbitmqConfig.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/config/ReturnsCallbackConfig.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/consumers/EsConsumer.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/controller/EsContoller.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/feign/GoodsFeign.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/feign/factory/GoodsFeignFactory.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/service/EsService.java
create mode 100644 bwie-modules/bwie-es/src/main/java/com/bwie/es/service/impl/EsServiceImpl.java
create mode 100644 bwie-modules/bwie-es/src/main/resources/bootstrap.yml
create mode 100644 bwie-modules/bwie-goods/pom.xml
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/GoodsApplication.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/ConfirmCallbackConfig.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/EsConfigInit.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RabbitAdminConfig.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RabbitmqConfig.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RedissonConfig.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/ReturnsCallbackConfig.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/CartController.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/GoodsController.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/MiddleController.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/SeckillController.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/TypeController.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/feign/UserFeign.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/feign/factory/UserFeignFactory.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/CartMapper.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/GoodsMapper.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/MiddleMapper.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/SeckillMapper.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/TypeMapper.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/CartService.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/GoodsService.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/MiddleService.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/SeckillService.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/TypeService.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/CartServiceImpl.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/GoodsServiceImpl.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/MiddleServiceImpl.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/SeckillServiceImpl.java
create mode 100644 bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/TypeServiceImpl.java
create mode 100644 bwie-modules/bwie-goods/src/main/resources/bootstrap.yml
create mode 100644 bwie-modules/bwie-goods/src/main/resources/mapper/CartMapper.xml
create mode 100644 bwie-modules/bwie-goods/src/main/resources/mapper/GoodsMapper.xml
create mode 100644 bwie-modules/bwie-goods/src/main/resources/mapper/MiddleMapper.xml
create mode 100644 bwie-modules/bwie-goods/src/main/resources/mapper/SeckillMapper.xml
create mode 100644 bwie-modules/bwie-rabbit/pom.xml
create mode 100644 bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/RabbitApplication.java
create mode 100644 bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/ConfirmCallbackConfig.java
create mode 100644 bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/RabbitAdminConfig.java
create mode 100644 bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/RabbitmqConfig.java
create mode 100644 bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/ReturnsCallbackConfig.java
create mode 100644 bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/consumer/SMSConsumer.java
create mode 100644 bwie-modules/bwie-rabbit/src/main/resources/bootstrap.yml
create mode 100644 bwie-modules/bwie-system/pom.xml
create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/SystemApplication.java
create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/UserController.java
create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java
create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/service/UserService.java
create mode 100644 bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java
create mode 100644 bwie-modules/bwie-system/src/main/resources/bootstrap.yml
create mode 100644 bwie-modules/pom.xml
create mode 100644 pom.xml
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3e403e3
--- /dev/null
+++ b/.gitignore
@@ -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
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..6688259
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..8d66637
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..544713a
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/setting.xml b/.idea/setting.xml
new file mode 100644
index 0000000..ed05fd8
--- /dev/null
+++ b/.idea/setting.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bwie-auth/pom.xml b/bwie-auth/pom.xml
new file mode 100644
index 0000000..c150953
--- /dev/null
+++ b/bwie-auth/pom.xml
@@ -0,0 +1,32 @@
+
+
+ 4.0.0
+
+ com.bwie
+ month_maven_8_12
+ 1.0-SNAPSHOT
+
+
+ bwie-auth
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+ com.bwie
+ bwie-common
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
diff --git a/bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java b/bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java
new file mode 100644
index 0000000..f01b2f1
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/AuthApplication.java
@@ -0,0 +1,15 @@
+package com.bwie.auth;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@SpringBootApplication
+@EnableFeignClients
+public class AuthApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(AuthApplication.class,args);
+ }
+
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/config/ConfirmCallbackConfig.java b/bwie-auth/src/main/java/com/bwie/auth/config/ConfirmCallbackConfig.java
new file mode 100644
index 0000000..496c331
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/config/ConfirmCallbackConfig.java
@@ -0,0 +1,39 @@
+package com.bwie.auth.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;
+
+@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("消息发送到 broker 成功");
+ } else {
+ System.out.println("消息发送到 broker 失败,失败的原因:" + cause);
+ }
+ }
+
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/config/InitPasswordEncode.java b/bwie-auth/src/main/java/com/bwie/auth/config/InitPasswordEncode.java
new file mode 100644
index 0000000..9b31e9b
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/config/InitPasswordEncode.java
@@ -0,0 +1,14 @@
+package com.bwie.auth.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Component;
+
+@Component
+public class InitPasswordEncode {
+
+ @Bean
+ public BCryptPasswordEncoder bCryptPasswordEncoder(){
+ return new BCryptPasswordEncoder();
+ }
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/config/RabbitAdminConfig.java b/bwie-auth/src/main/java/com/bwie/auth/config/RabbitAdminConfig.java
new file mode 100644
index 0000000..a29519d
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/config/RabbitAdminConfig.java
@@ -0,0 +1,48 @@
+package com.bwie.auth.config;
+
+import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+public class RabbitAdminConfig {
+
+ @Value("${spring.rabbitmq.host}")
+ private String host;
+ @Value("${spring.rabbitmq.username}")
+ private String username;
+ @Value("${spring.rabbitmq.password}")
+ private String password;
+ @Value("${spring.rabbitmq.virtual-host}")
+ private String virtualhost;
+
+ @Bean
+ public ConnectionFactory connectionFactory() {
+ CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
+ connectionFactory.setAddresses(host);
+ connectionFactory.setUsername(username);
+ connectionFactory.setPassword(password);
+ connectionFactory.setVirtualHost(virtualhost);
+ // 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效
+ connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);
+ connectionFactory.setPublisherReturns(true);
+ return connectionFactory;
+ }
+
+
+ /**
+ * rabbitAdmin
+ * @param connectionFactory
+ * @return
+ */
+ @Bean
+ public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
+ RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
+ rabbitAdmin.setAutoStartup(true);
+ return rabbitAdmin;
+ }
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/config/RabbitmqConfig.java b/bwie-auth/src/main/java/com/bwie/auth/config/RabbitmqConfig.java
new file mode 100644
index 0000000..aa96f40
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/config/RabbitmqConfig.java
@@ -0,0 +1,15 @@
+package com.bwie.auth.config;
+
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class RabbitmqConfig {
+ // 消息转换配置
+ @Bean
+ public MessageConverter jsonMessageConverter(){
+ return new Jackson2JsonMessageConverter();
+ }
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/config/ReturnsCallbackConfig.java b/bwie-auth/src/main/java/com/bwie/auth/config/ReturnsCallbackConfig.java
new file mode 100644
index 0000000..4ba234b
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/config/ReturnsCallbackConfig.java
@@ -0,0 +1,36 @@
+package com.bwie.auth.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 ReturnsCallbackConfig implements RabbitTemplate.ReturnsCallback {
+
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+
+ /**
+ * 当前bean初始化的时候执行
+ */
+ @PostConstruct
+ public void init() {
+ this.rabbitTemplate.setReturnsCallback(this);
+ }
+
+ /**
+ * 消息发送达到 queue 失败执行
+ *
+ * @param returnedMessage the returned message and metadata.
+ */
+ @Override
+ public void returnedMessage(ReturnedMessage returnedMessage) {
+ System.out.println("消息" + returnedMessage.getMessage().toString() +
+ "被交换机" + returnedMessage.getExchange() + "回退!"
+ + "退回原因为:" + returnedMessage.getReplyText());
+ // TODO 回退了所有的信息,可做补偿机制
+ }
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java b/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java
new file mode 100644
index 0000000..90b1ec8
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/controller/AuthController.java
@@ -0,0 +1,74 @@
+package com.bwie.auth.controller;
+
+import com.bwie.auth.service.AuthService;
+import com.bwie.common.domain.request.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.domain.response.JwtResponse;
+import com.bwie.common.domain.response.UserLoginResp;
+import com.bwie.common.result.Result;
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@RequestMapping("auth")
+public class AuthController {
+
+ @Autowired
+ private AuthService authService;
+
+
+ /**
+ * 用户登录
+ * @param req
+ * @return
+ */
+ @PostMapping("login")
+ public Result login(@RequestBody UserLoginReq req){
+ JwtResponse jwtResponse = authService.login(req);
+ return Result.success(jwtResponse);
+ }
+
+ /**
+ * 验证
+ */
+ @GetMapping("info")
+ public Result info(HttpServletRequest request){
+ UserLoginResp info = authService.info(request);
+ return Result.success(info);
+ }
+ /**
+ * 退出登录
+ */
+ @PostMapping("logout")
+ public Result logout(HttpServletRequest request){
+ authService.logout(request);
+ return Result.success();
+ }
+
+
+ /**
+ * 获取验证码
+ * @param userTel
+ * @return
+ */
+ @PostMapping("getCode/{userTel}")
+ public Result getCode(@PathVariable String userTel){
+ authService.sendCode(userTel);
+ return Result.success("","发送完成");
+ }
+
+ /**
+ * 注册
+ * @param user
+ * @return
+ */
+ @PostMapping("register")
+ public Result register(@RequestBody RegisterUser user){
+ int register = authService.register(user);
+ return Result.success("","注册成功");
+ }
+
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/feign/UserFeign.java b/bwie-auth/src/main/java/com/bwie/auth/feign/UserFeign.java
new file mode 100644
index 0000000..4170ded
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/feign/UserFeign.java
@@ -0,0 +1,22 @@
+package com.bwie.auth.feign;
+
+import com.bwie.auth.feign.factory.UserFeignFactory;
+import com.bwie.common.domain.User;
+import com.bwie.common.domain.request.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.result.Result;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(value = "bwie-system",fallbackFactory = UserFeignFactory.class)
+public interface UserFeign {
+
+ @PostMapping("/user/login")
+ public Result login(@RequestBody UserLoginReq req);
+
+ @PostMapping("user/register")
+ public Result register(@RequestBody RegisterUser user);
+
+
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/feign/factory/UserFeignFactory.java b/bwie-auth/src/main/java/com/bwie/auth/feign/factory/UserFeignFactory.java
new file mode 100644
index 0000000..326541b
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/feign/factory/UserFeignFactory.java
@@ -0,0 +1,29 @@
+package com.bwie.auth.feign.factory;
+
+import com.bwie.auth.feign.UserFeign;
+import com.bwie.common.domain.User;
+import com.bwie.common.domain.request.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.result.Result;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class UserFeignFactory implements FallbackFactory {
+
+
+ @Override
+ public UserFeign create(Throwable cause) {
+ return new UserFeign() {
+ @Override
+ public Result login(UserLoginReq req) {
+ return Result.error("网络出错.....");
+ }
+
+ @Override
+ public Result register(RegisterUser user) {
+ return Result.error("网络出错.....");
+ }
+ };
+ }
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java b/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java
new file mode 100644
index 0000000..30ed85f
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/service/AuthService.java
@@ -0,0 +1,29 @@
+package com.bwie.auth.service;
+
+import com.bwie.common.domain.request.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.domain.response.JwtResponse;
+import com.bwie.common.domain.response.UserLoginResp;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface AuthService {
+ /**
+ * 登录
+ * @param req
+ * @return
+ */
+ JwtResponse login(UserLoginReq req);
+ /**
+ * 验证
+ */
+ UserLoginResp info(HttpServletRequest request);
+ /**
+ * 退出登录
+ */
+ void logout(HttpServletRequest request);
+
+ void sendCode(String userTel);
+
+ int register(RegisterUser user);
+}
diff --git a/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java b/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java
new file mode 100644
index 0000000..1fdaa31
--- /dev/null
+++ b/bwie-auth/src/main/java/com/bwie/auth/service/impl/AuthServiceImpl.java
@@ -0,0 +1,164 @@
+package com.bwie.auth.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.bwie.auth.feign.UserFeign;
+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.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.domain.response.JwtResponse;
+import com.bwie.common.domain.response.UserLoginResp;
+import com.bwie.common.exception.AllException;
+import com.bwie.common.result.Result;
+import com.bwie.common.utils.JwtUtils;
+import com.bwie.common.utils.StringUtils;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+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.Map;
+import java.util.Random;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+
+@Log4j2
+@Service
+public class AuthServiceImpl implements AuthService {
+
+ @Autowired
+ private UserFeign userFeign;
+
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+
+
+
+ /**
+ * 登录
+ * @param req
+ * @return
+ */
+ @Override
+ public JwtResponse login(UserLoginReq req) {
+ Result loginResult = userFeign.login(req);
+ User user = loginResult.getData();
+ if (user==null){
+ throw new AllException("用户不存在");
+ }
+
+ if (!req.getUserPwd().equals(user.getUserPwd())){
+ throw new AllException("密码错误");
+ }
+
+ String userKay = UUID.randomUUID().toString();
+ Map map = new HashMap<>();
+ map.put(JwtConstants.DETAILS_USER_ID,user.getUserId());
+ map.put(JwtConstants.USER_KEY,userKay);
+ map.put(JwtConstants.DETAILS_USERNAME,user.getUserName());
+
+
+ if (user.getUserRole()==2){
+ HashMap mapSMS = new HashMap<>();
+ mapSMS.put("userTel" ,user.getUserTel());
+ mapSMS.put("text","欢迎登陆,尊敬的"+user.getUserName());
+ rabbitTemplate.convertAndSend("SEND_SMS",mapSMS,message -> {
+ String string = UUID.randomUUID().toString();
+ message.getMessageProperties().setMessageId(string);
+ return message;
+ });
+ }
+ redisTemplate.opsForValue().set(TokenConstants.LOGIN_TOKEN_KEY+userKay,
+ JSON.toJSONString(user),300, TimeUnit.MINUTES);
+ String token = JwtUtils.createToken(map);
+
+ return JwtResponse.builder().token(token).existTime("300MIN").build();
+ }
+
+ /**
+ * 验证
+ *
+ * @param request
+ * @return
+ */
+ @Override
+ public UserLoginResp info(HttpServletRequest request) {
+ String token = request.getHeader(TokenConstants.TOKEN);
+ String userKey = JwtUtils.getUserKey(token);
+ String userString = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey);
+ User user = JSON.parseObject(userString, User.class);
+ UserLoginResp userLoginResp = UserLoginResp.buildUser(user);
+
+ return userLoginResp;
+ }
+ /**
+ * 退出登录
+ */
+ @Override
+ public void logout(HttpServletRequest request) {
+ String token = request.getHeader(TokenConstants.TOKEN);
+ String userKey = JwtUtils.getUserKey(token);
+ redisTemplate.delete(TokenConstants.LOGIN_TOKEN_KEY + userKey);
+ }
+
+ @Override
+ public void sendCode(String userTel) {
+ HashMap map = new HashMap<>();
+ map.put("userTel" ,userTel);
+ Random random = new Random();
+ int i = random.nextInt(9000)+1000;
+ map.put("text","验证码是:"+i);
+ log.info("验证码是:{}",i);
+ redisTemplate.opsForValue().set("code:"+userTel,String.valueOf(i),5,TimeUnit.MINUTES);
+ rabbitTemplate.convertAndSend("SEND_SMS",map,message -> {
+ String string = UUID.randomUUID().toString();
+ message.getMessageProperties().setMessageId(string);
+ return message;
+ });
+
+
+ }
+
+ @Override
+ public int register(RegisterUser user) {
+ if (StringUtils.isBlank(user.getUserTel())){
+ throw new AllException("手机号不能为空");
+ }
+ if (StringUtils.isEmpty(user.getCode())){
+ throw new AllException("验证码不能为空");
+ }
+ if (StringUtils.isBlank(user.getUserName())){
+ throw new AllException("用户名不能为空");
+ }
+ if (StringUtils.isEmpty(user.getUserPwd())){
+ throw new AllException("密码不能为空");
+ }
+
+ String code = redisTemplate.opsForValue().get("code:" + user.getUserTel());
+ if (!user.getCode().equals(code)){
+ throw new AllException("验证码错误");
+ }
+ Result register = userFeign.register(user);
+ Integer data = register.getData();
+ if (data>0){
+ HashMap map = new HashMap<>();
+ map.put("userTel" ,user.getUserTel());
+ map.put("text","注册成功");
+ rabbitTemplate.convertAndSend("SEND_SMS",map,message -> {
+ String string = UUID.randomUUID().toString();
+ message.getMessageProperties().setMessageId(string);
+ return message;
+ });
+ }
+
+ return data;
+ }
+}
diff --git a/bwie-auth/src/main/resources/bootstrap.yml b/bwie-auth/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..6003aab
--- /dev/null
+++ b/bwie-auth/src/main/resources/bootstrap.yml
@@ -0,0 +1,46 @@
+# Tomcat
+server:
+ port: 9004
+# Spring
+spring:
+ rabbitmq:
+ host: 139.224.34.9
+ port: 5672
+ username: guest
+ password: guest
+ virtual-host: /
+ listener:
+ simple:
+ prefetch: 1 # 默认每次取出一条消息消费, 消费完成取下一条
+ acknowledge-mode: manual # 设置消费端手动ack确认
+ retry:
+ enabled: true # 是否支持重试
+ publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
+ publisher-returns: true #确认消息已发送到队列(Queue)
+ 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: 139.224.34.9:8848
+ namespace: week1
+ config:
+ # 配置中心地址
+ server-addr: 139.224.34.9:8848
+ namespace: week1
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+
diff --git a/bwie-common/pom.xml b/bwie-common/pom.xml
new file mode 100644
index 0000000..79b5a42
--- /dev/null
+++ b/bwie-common/pom.xml
@@ -0,0 +1,132 @@
+
+
+ 4.0.0
+
+ com.bwie
+ month_maven_8_12
+ 1.0-SNAPSHOT
+
+
+ bwie-common
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bootstrap
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+ io.jsonwebtoken
+ jjwt
+
+
+
+ com.alibaba
+ fastjson
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+ org.apache.commons
+ commons-lang3
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+ cn.hutool
+ hutool-all
+
+
+
+ com.aliyun
+ dysmsapi20170525
+
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.12.0
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+
+ com.github.tobato
+ fastdfs-client
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+
+
+ org.redisson
+ redisson
+ 3.16.0
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.2.1
+
+
+ org.apache.httpcomponents
+ httpcore
+ 4.2.1
+
+
+
+
diff --git a/bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java b/bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java
new file mode 100644
index 0000000..b62e4b1
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/config/RedisConfig.java
@@ -0,0 +1,40 @@
+package com.bwie.common.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+
+ @Bean
+ public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
+ RedisTemplate template = new RedisTemplate<>();
+ template.setConnectionFactory(factory);
+ Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new
+ Jackson2JsonRedisSerializer(Object.class);
+ ObjectMapper om = new ObjectMapper();
+ om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+ om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+ jackson2JsonRedisSerializer.setObjectMapper(om);
+
+ StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+ // key采用String的序列化方式
+ template.setKeySerializer(stringRedisSerializer);
+ // hash的key也采用String的序列化方式
+ template.setHashKeySerializer(stringRedisSerializer);
+ // value序列化方式采用jackson
+ template.setValueSerializer(jackson2JsonRedisSerializer);
+ // hash的value序列化方式采用jackson
+ template.setHashValueSerializer(jackson2JsonRedisSerializer);
+ template.afterPropertiesSet();
+
+ return template;
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/config/RedissonConfig.java b/bwie-common/src/main/java/com/bwie/common/config/RedissonConfig.java
new file mode 100644
index 0000000..f19fb6d
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/config/RedissonConfig.java
@@ -0,0 +1,31 @@
+package com.bwie.common.config;
+
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.io.IOException;
+
+
+@Configuration
+public class RedissonConfig {
+
+ @Bean(destroyMethod="shutdown") // 服务停止后调用 shutdown 方法。
+ public RedissonClient redisson() throws IOException {
+ System.out.println("配置类初始加载......");
+ // 1.创建配置
+ Config config = new Config();
+ // config.useClusterServers().addNodeAddress("127.0.0.1:6379", "127.0.0.1:6378");
+ // 2.根据 Config 创建出 RedissonClient 实例。
+ config.useSingleServer()
+ .setAddress("redis://139.224.34.9:6379")
+ .setPassword("cyx12345")
+ .setConnectionPoolSize(64)
+ .setConnectionMinimumIdleSize(10)
+ .setTimeout(30000);
+ return Redisson.create(config);
+ }
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/constants/Constants.java b/bwie-common/src/main/java/com/bwie/common/constants/Constants.java
new file mode 100644
index 0000000..c487780
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/constants/Constants.java
@@ -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 = "操作异常";
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java
new file mode 100644
index 0000000..b8cf9d3
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/constants/JwtConstants.java
@@ -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";
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQConstants.java
new file mode 100644
index 0000000..1f09187
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/constants/RabbitMQConstants.java
@@ -0,0 +1,5 @@
+package com.bwie.common.constants;
+
+public class RabbitMQConstants {
+ public static final String SEND_SMS_QUEUE = "send_sms_queue";
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java b/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java
new file mode 100644
index 0000000..a1bd255
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/constants/TokenConstants.java
@@ -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";
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Cart.java b/bwie-common/src/main/java/com/bwie/common/domain/Cart.java
new file mode 100644
index 0000000..0b91a94
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/Cart.java
@@ -0,0 +1,27 @@
+package com.bwie.common.domain;
+
+import lombok.Data;
+
+@Data
+public class Cart {
+ /**
+ * 主键
+ */
+ private Integer cartId;
+ /**
+ * 用户id
+ */
+ private Integer userId;
+ /**
+ * 商品id
+ */
+ private Integer goodsId;
+ /**
+ * 数量
+ */
+ private Integer goodsNum;
+ /**
+ * 秒杀id
+ */
+ private Integer seckillId;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Goods.java b/bwie-common/src/main/java/com/bwie/common/domain/Goods.java
new file mode 100644
index 0000000..d8852f2
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/Goods.java
@@ -0,0 +1,50 @@
+package com.bwie.common.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Goods {
+
+ /**
+ * 主键
+ */
+ private Integer goodsId;
+ /**
+ * 商品名称
+ */
+ private String goodsName;
+ /**
+ * 类型
+ */
+ private Integer typeId;
+ /**
+ * 图片
+ */
+ private String goodsPic;
+ /**
+ * 状态
+ */
+ private Integer goodsStatus;
+ /**
+ * 价钱
+ */
+ private BigDecimal goodsPrice;
+ /**
+ * 库存
+ */
+ private Integer goodsNum;
+
+ /**
+ * 操作时间
+ */
+ private Date time;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Middle.java b/bwie-common/src/main/java/com/bwie/common/domain/Middle.java
new file mode 100644
index 0000000..d6c4e75
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/Middle.java
@@ -0,0 +1,27 @@
+package com.bwie.common.domain;
+
+import lombok.Data;
+
+@Data
+public class Middle {
+ /**
+ * 编号
+ */
+ private Integer id;
+ /**
+ * 秒杀规则
+ */
+ private Integer seckillId;
+ /**
+ * 商品id
+ */
+ private Integer goodsId;
+ /**
+ * 秒杀价格
+ */
+ private Integer seckillPrice;
+ /**
+ * 秒杀数量
+ */
+ private Integer seckillNum;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Seckill.java b/bwie-common/src/main/java/com/bwie/common/domain/Seckill.java
new file mode 100644
index 0000000..3317577
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/Seckill.java
@@ -0,0 +1,47 @@
+package com.bwie.common.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Seckill {
+ /**
+ * 主键
+ */
+ private Integer seckillId;
+ /**
+ * 秒杀名称
+ */
+ private String seckillName;
+ /**
+ * 秒杀开始时间
+ */
+ @JsonFormat(pattern = "HH:mm")
+ private Date seckillStartTime;
+ /**
+ * 秒杀结束时间
+ */
+ @JsonFormat(pattern = "HH:mm")
+ private Date seckillEndTime;
+ /**
+ * 图片
+ */
+ private String seckillPic;
+ /**
+ * 状态
+ */
+ private Integer seckillStatus;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/Type.java b/bwie-common/src/main/java/com/bwie/common/domain/Type.java
new file mode 100644
index 0000000..7871a3f
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/Type.java
@@ -0,0 +1,21 @@
+package com.bwie.common.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Type {
+ /**
+ * 主键
+ */
+ private Integer typeId;
+ /**
+ * 类型名称
+ */
+ private String typeName;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/User.java b/bwie-common/src/main/java/com/bwie/common/domain/User.java
new file mode 100644
index 0000000..38ee2ba
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/User.java
@@ -0,0 +1,42 @@
+package com.bwie.common.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class User {
+
+ /**
+ * 主键
+ */
+ private Integer userId;
+ /**
+ * 手机号
+ */
+ private String userTel;
+ /**
+ * 用户名
+ */
+ private String userName;
+ /**
+ * 密码
+ */
+ private String userPwd;
+ /**
+ *余额
+ */
+ private BigDecimal userMoney;
+ /**
+ * 角色 1.管理员 2.普通用户
+ */
+ private Integer userRole;
+
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/CartAddReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/CartAddReq.java
new file mode 100644
index 0000000..2823c48
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/CartAddReq.java
@@ -0,0 +1,20 @@
+package com.bwie.common.domain.request;
+
+import lombok.Data;
+
+@Data
+public class CartAddReq {
+ /**
+ * 商品id
+ */
+ private Integer goodsId;
+ /**
+ * 秒杀id
+ */
+ private Integer seckillId;
+ /**
+ * id
+ *
+ */
+ private Integer id;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/CartPayReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/CartPayReq.java
new file mode 100644
index 0000000..21aad3c
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/CartPayReq.java
@@ -0,0 +1,18 @@
+package com.bwie.common.domain.request;
+
+import com.bwie.common.domain.vo.Pay;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class CartPayReq {
+ /**
+ * 总价
+ */
+ private BigDecimal sumPrice;
+
+ List pays;
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/GoodsAddReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/GoodsAddReq.java
new file mode 100644
index 0000000..f50cb52
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/GoodsAddReq.java
@@ -0,0 +1,50 @@
+package com.bwie.common.domain.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class GoodsAddReq {
+
+ /**
+ * 主键
+ */
+ private Integer goodsId;
+ /**
+ * 商品名称
+ */
+ private String goodsName;
+ /**
+ * 类型
+ */
+ private Integer typeId;
+ /**
+ * 图片
+ */
+ private String goodsPic;
+ /**
+ * 状态
+ */
+ private Integer goodsStatus;
+ /**
+ * 价钱
+ */
+ private BigDecimal goodsPrice;
+ /**
+ * 库存
+ */
+ private Integer goodsNum;
+
+ /**
+ * 操作时间
+ */
+ private Date time;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/GoodsListReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/GoodsListReq.java
new file mode 100644
index 0000000..03e4a28
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/GoodsListReq.java
@@ -0,0 +1,17 @@
+package com.bwie.common.domain.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class GoodsListReq {
+ /**
+ * 商品名称
+ */
+ private String goodsName;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/GoodsUpdateReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/GoodsUpdateReq.java
new file mode 100644
index 0000000..a48a0aa
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/GoodsUpdateReq.java
@@ -0,0 +1,43 @@
+package com.bwie.common.domain.request;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class GoodsUpdateReq {/**
+ * 主键
+ */
+private Integer goodsId;
+ /**
+ * 商品名称
+ */
+ private String goodsName;
+ /**
+ * 类型
+ */
+ private Integer typeId;
+ /**
+ * 图片
+ */
+ private String goodsPic;
+ /**
+ * 状态
+ */
+ private Integer goodsStatus;
+ /**
+ * 价钱
+ */
+ private BigDecimal goodsPrice;
+ /**
+ * 库存
+ */
+ private Integer goodsNum;
+
+ /**
+ * 操作时间
+ */
+ private Date time;
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/MiddleAddReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/MiddleAddReq.java
new file mode 100644
index 0000000..6e3e5d4
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/MiddleAddReq.java
@@ -0,0 +1,18 @@
+package com.bwie.common.domain.request;
+
+import com.bwie.common.domain.vo.GoodsMiddle;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MiddleAddReq {
+ /**
+ * 秒杀id
+ */
+ private Integer seckillId;
+ /**
+ * 商品id
+ */
+ private List goods;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/RegisterUser.java b/bwie-common/src/main/java/com/bwie/common/domain/request/RegisterUser.java
new file mode 100644
index 0000000..2030f99
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/RegisterUser.java
@@ -0,0 +1,26 @@
+package com.bwie.common.domain.request;
+
+import lombok.Data;
+
+@Data
+public class RegisterUser {
+
+ /**
+ * 手机号
+ */
+ private String userTel;
+ /**
+ * 用户名
+ */
+ private String userName;
+ /**
+ * 密码
+ */
+ private String userPwd;
+ /**
+ * 验证码
+ */
+ private String code;
+
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/SeckillAddReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/SeckillAddReq.java
new file mode 100644
index 0000000..080b8fc
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/SeckillAddReq.java
@@ -0,0 +1,41 @@
+package com.bwie.common.domain.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SeckillAddReq {
+ /**
+ * 主键
+ */
+ private Integer seckillId;
+ /**
+ * 秒杀名称
+ */
+ private String seckillName;
+ /**
+ * 秒杀开始时间
+ */
+ @JsonFormat(pattern = "HH:mm")
+ private Date seckillStartTime;
+ /**
+ * 秒杀结束时间
+ */
+ @JsonFormat(pattern = "HH:mm")
+ private Date seckillEndTime;
+ /**
+ * 图片
+ */
+ private String seckillPic;
+ /**
+ * 状态
+ */
+ private Integer seckillStatus;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/SeckillListReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/SeckillListReq.java
new file mode 100644
index 0000000..ccef9c7
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/SeckillListReq.java
@@ -0,0 +1,24 @@
+package com.bwie.common.domain.request;
+
+import lombok.Data;
+
+@Data
+public class SeckillListReq {
+ /**
+ * 秒杀名称
+ */
+ private String seckillName;
+ /**
+ * 页数
+ */
+ private Integer pageNum=1;
+ /**
+ * 每页条数
+ */
+ private Integer pageSize=3;
+
+ /**
+ * 状态
+ */
+ private Integer seckillStatus;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/request/UserLoginReq.java b/bwie-common/src/main/java/com/bwie/common/domain/request/UserLoginReq.java
new file mode 100644
index 0000000..ba0d2f8
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/request/UserLoginReq.java
@@ -0,0 +1,21 @@
+package com.bwie.common.domain.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserLoginReq {
+ /**
+ * 用户名
+ */
+ private String userName;
+ /**
+ * 密码
+ */
+ private String userPwd;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/CartResp.java b/bwie-common/src/main/java/com/bwie/common/domain/response/CartResp.java
new file mode 100644
index 0000000..f609c4e
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/CartResp.java
@@ -0,0 +1,28 @@
+package com.bwie.common.domain.response;
+
+import com.bwie.common.domain.Cart;
+import lombok.Data;
+
+@Data
+public class CartResp extends Cart {
+ /**
+ * 中间id
+ */
+ private Integer id;
+ /**
+ * 商品名称
+ */
+ private String goodsName;
+ /**
+ * 商品图片
+ */
+ private String goodsPic;
+ /**
+ * 秒杀名称
+ */
+ private String seckillName;
+ /**
+ * 秒杀价格
+ */
+ private Integer seckillPrice;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/GoodsListResp.java b/bwie-common/src/main/java/com/bwie/common/domain/response/GoodsListResp.java
new file mode 100644
index 0000000..7298346
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/GoodsListResp.java
@@ -0,0 +1,23 @@
+package com.bwie.common.domain.response;
+
+import com.bwie.common.domain.Goods;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class GoodsListResp extends Goods {
+
+ /**
+ * 类型名称
+ */
+ private String typeName;
+}
+
+
+
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java b/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java
new file mode 100644
index 0000000..3aec3ef
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/JwtResponse.java
@@ -0,0 +1,11 @@
+package com.bwie.common.domain.response;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class JwtResponse {
+ private String token;
+ private String existTime;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/MiddleResp.java b/bwie-common/src/main/java/com/bwie/common/domain/response/MiddleResp.java
new file mode 100644
index 0000000..ac0d771
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/MiddleResp.java
@@ -0,0 +1,37 @@
+package com.bwie.common.domain.response;
+
+import com.bwie.common.domain.Middle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class MiddleResp extends Middle {
+ /**
+ * 商品名称
+ */
+ private String goodsName;
+ /**
+ * 商品图片
+ */
+ private String goodsPic;
+ /**
+ * 类型
+ */
+ private String typeName;
+ /**
+ * 秒杀名称
+ */
+ private String seckillName;
+ /**
+ * 秒杀开始时间
+ */
+ @JsonFormat(pattern = "HH:mm")
+ private Date seckillStartTime;
+ /**
+ * 秒杀结束时间
+ */
+ @JsonFormat(pattern = "HH:mm")
+ private Date seckillEndTime;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/SeckillResp.java b/bwie-common/src/main/java/com/bwie/common/domain/response/SeckillResp.java
new file mode 100644
index 0000000..50b77c1
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/SeckillResp.java
@@ -0,0 +1,47 @@
+package com.bwie.common.domain.response;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SeckillResp {
+ /**
+ * 主键
+ */
+ private Integer seckillId;
+ /**
+ * 秒杀名称
+ */
+ private String seckillName;
+ /**
+ * 秒杀开始时间
+ */
+ @JsonFormat(pattern = "HH:mm")
+ private Date seckillStartTime;
+ /**
+ * 秒杀结束时间
+ */
+ @JsonFormat(pattern = "HH:mm")
+ private Date seckillEndTime;
+ /**
+ * 图片
+ */
+ private String seckillPic;
+ /**
+ * 状态
+ */
+ private Integer seckillStatus;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/UserLoginResp.java b/bwie-common/src/main/java/com/bwie/common/domain/response/UserLoginResp.java
new file mode 100644
index 0000000..9b0d265
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/UserLoginResp.java
@@ -0,0 +1,50 @@
+package com.bwie.common.domain.response;
+
+import com.bwie.common.domain.User;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserLoginResp {
+
+ /**
+ * 主键
+ */
+ private Integer userId;
+ /**
+ * 手机号
+ */
+ private String userTel;
+ /**
+ * 用户名
+ */
+ private String userName;
+ /**
+ *余额
+ */
+ private BigDecimal userMoney;
+ /**
+ * 角色 1.管理员 2.普通用户
+ */
+ private Integer userRole;
+
+ public static UserLoginResp buildUser(User user){
+ return UserLoginResp.builder()
+ .userId(user.getUserId())
+ .userTel(user.getUserTel())
+ .userName(user.getUserName())
+ .userMoney(user.getUserMoney())
+ .userRole(user.getUserRole())
+ .build();
+ }
+
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/response/UserResp.java b/bwie-common/src/main/java/com/bwie/common/domain/response/UserResp.java
new file mode 100644
index 0000000..8bc0d3e
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/response/UserResp.java
@@ -0,0 +1,30 @@
+package com.bwie.common.domain.response;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class UserResp {
+
+ /**
+ * 主键
+ */
+ private Integer userId;
+ /**
+ * 手机号
+ */
+ private String userTel;
+ /**
+ * 用户名
+ */
+ private String userName;;
+ /**
+ *余额
+ */
+ private BigDecimal userMoney;
+ /**
+ * 角色 1.管理员 2.普通用户
+ */
+ private Integer userRole;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/vo/GoodsMiddle.java b/bwie-common/src/main/java/com/bwie/common/domain/vo/GoodsMiddle.java
new file mode 100644
index 0000000..7f0892e
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/vo/GoodsMiddle.java
@@ -0,0 +1,21 @@
+package com.bwie.common.domain.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class GoodsMiddle {
+ /**
+ * 商品id
+ */
+ private Integer goodsId;
+ /**
+ * 秒杀价格
+ */
+ private BigDecimal seckillPrice;
+ /**
+ * 数量
+ */
+ private Integer seckillNum;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/domain/vo/Pay.java b/bwie-common/src/main/java/com/bwie/common/domain/vo/Pay.java
new file mode 100644
index 0000000..6ec6fc2
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/domain/vo/Pay.java
@@ -0,0 +1,20 @@
+package com.bwie.common.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class Pay {
+ /**
+ * 商品id
+ */
+ private Integer goodsId;
+ /**
+ * 中间表id
+ */
+ private Integer id;
+
+ /**
+ * 数量
+ */
+ private Integer goodsNum;
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/exception/AllException.java b/bwie-common/src/main/java/com/bwie/common/exception/AllException.java
new file mode 100644
index 0000000..db3e6c5
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/exception/AllException.java
@@ -0,0 +1,23 @@
+package com.bwie.common.exception;
+
+public class AllException extends RuntimeException{
+ public AllException(Throwable cause) {
+ super(cause);
+ }
+
+ public AllException() {
+ super();
+ }
+
+ public AllException(String message) {
+ super(message);
+ }
+
+ public AllException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ protected AllException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/handle/AllExceptionAdvice.java b/bwie-common/src/main/java/com/bwie/common/handle/AllExceptionAdvice.java
new file mode 100644
index 0000000..060e491
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/handle/AllExceptionAdvice.java
@@ -0,0 +1,20 @@
+package com.bwie.common.handle;
+
+import com.bwie.common.exception.AllException;
+import com.bwie.common.result.Result;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+@Log4j2
+@RestControllerAdvice
+public class AllExceptionAdvice {
+
+ @ExceptionHandler(AllException.class)
+ public Result allExceptionHandle(Throwable e){
+ log.error("错误信息:{}",e);
+ return Result.error(e.getMessage());
+ }
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/result/PageResult.java b/bwie-common/src/main/java/com/bwie/common/result/PageResult.java
new file mode 100644
index 0000000..6ffa8d7
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/result/PageResult.java
@@ -0,0 +1,33 @@
+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));
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/result/Result.java b/bwie-common/src/main/java/com/bwie/common/result/Result.java
new file mode 100644
index 0000000..961ff96
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/result/Result.java
@@ -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;
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java b/bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java
new file mode 100644
index 0000000..6d92a56
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/FastUtil.java
@@ -0,0 +1,50 @@
+package com.bwie.common.utils;
+
+import org.springframework.stereotype.Component;
+import com.github.tobato.fastdfs.domain.fdfs.StorePath;
+import com.github.tobato.fastdfs.service.FastFileStorageClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+
+@Component
+public class FastUtil {
+ private static final Logger log = LoggerFactory.getLogger(FastUtil.class);
+
+ @Resource
+ private FastFileStorageClient storageClient ;
+
+ /**
+ * 上传文件
+ */
+ public String upload(MultipartFile multipartFile) throws Exception{
+ String originalFilename = multipartFile.getOriginalFilename().
+ substring(multipartFile.getOriginalFilename().
+ lastIndexOf(".") + 1);
+ StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
+ multipartFile.getInputStream(),
+ multipartFile.getSize(),originalFilename , null);
+ return storePath.getFullPath();
+ }
+ /**
+ * 删除文件
+ */
+ public String deleteFile(String fileUrl) {
+ if (StringUtils.isEmpty(fileUrl)) {
+ log.info("fileUrl == >>文件路径为空...");
+ return "文件路径不能为空";
+ }
+ try {
+ StorePath storePath = StorePath.parseFromUrl(fileUrl);
+ storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ return "删除成功";
+ }
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/GenCodeUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/GenCodeUtils.java
new file mode 100644
index 0000000..274a763
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/GenCodeUtils.java
@@ -0,0 +1,83 @@
+package com.bwie.common.utils;
+
+import java.util.Random;
+
+
+public class GenCodeUtils {
+
+ /**
+ * 数字类型
+ */
+ private static final String NUMBER_STR = "0123456789";
+ /**
+ * 字母类型
+ */
+ private static final String LETTERS_STR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ /**
+ * 短信验证码长度
+ */
+ private static final Integer SMS_CODE_LENGTH = 4;
+
+ /**
+ * 生成短信四位验证码
+ * @return 验证码
+ */
+ public static String genLetterStrSms(){
+ return genCode(LETTERS_STR, SMS_CODE_LENGTH);
+ }
+
+ /**
+ * 生成短信四位验证码
+ * @return 验证码
+ */
+ public static String genNumberCodeSms(){
+ return genCode(NUMBER_STR, SMS_CODE_LENGTH);
+ }
+
+ /**
+ * 生成验证码
+ * @param codeLength 验证码长度
+ * @return 验证码
+ */
+ public static String genLetterStr(int codeLength){
+ return genCode(LETTERS_STR, codeLength);
+ }
+
+ /**
+ * 生成验证码
+ * @param codeLength 验证码长度
+ * @return 验证码
+ */
+ public static String genNumberCode( int codeLength){
+ return genCode(NUMBER_STR, codeLength);
+ }
+
+ /**
+ * 生成验证码
+ * @param str 验证码字符串
+ * @param codeLength 验证码长度
+ * @return 验证码
+ */
+ public static String genCode (String str, int codeLength){
+ //将字符串转换为一个新的字符数组。
+ char[] verificationCodeArray = str.toCharArray();
+ Random random = new Random();
+ //计数器
+ int count = 0;
+ StringBuilder stringBuilder = new StringBuilder();
+ do {
+ //随机生成一个随机数
+ int index = random.nextInt(verificationCodeArray.length);
+ char c = verificationCodeArray[index];
+ //限制四位不重复数字
+ if (stringBuilder.indexOf(String.valueOf(c)) == -1) {
+ stringBuilder.append(c);
+ //计数器加1
+ count++;
+ }
+ //当count等于4时结束,随机生成四位数的验证码
+ } while (count != codeLength);
+ return stringBuilder.toString();
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/HttpUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/HttpUtils.java
new file mode 100644
index 0000000..f62bd24
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/HttpUtils.java
@@ -0,0 +1,312 @@
+package com.bwie.common.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+
+public class HttpUtils {
+
+ /**
+ * get
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doGet(String host, String path, String method,
+ Map headers,
+ Map querys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpGet request = new HttpGet(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * post form
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param bodys
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPost(String host, String path, String method,
+ Map headers,
+ Map querys,
+ Map bodys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (bodys != null) {
+ List nameValuePairList = new ArrayList();
+
+ for (String key : bodys.keySet()) {
+ nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
+ }
+ UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
+ formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
+ request.setEntity(formEntity);
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Post String
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPost(String host, String path, String method,
+ Map headers,
+ Map querys,
+ String body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (StringUtils.isNotBlank(body)) {
+ request.setEntity(new StringEntity(body, "utf-8"));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Post stream
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPost(String host, String path, String method,
+ Map headers,
+ Map querys,
+ byte[] body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (body != null) {
+ request.setEntity(new ByteArrayEntity(body));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Put String
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPut(String host, String path, String method,
+ Map headers,
+ Map querys,
+ String body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPut request = new HttpPut(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (StringUtils.isNotBlank(body)) {
+ request.setEntity(new StringEntity(body, "utf-8"));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Put stream
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPut(String host, String path, String method,
+ Map headers,
+ Map querys,
+ byte[] body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPut request = new HttpPut(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (body != null) {
+ request.setEntity(new ByteArrayEntity(body));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Delete
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doDelete(String host, String path, String method,
+ Map headers,
+ Map querys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ return httpClient.execute(request);
+ }
+
+ private static String buildUrl(String host, String path, Map querys) throws UnsupportedEncodingException {
+ StringBuilder sbUrl = new StringBuilder();
+ sbUrl.append(host);
+ if (!StringUtils.isBlank(path)) {
+ sbUrl.append(path);
+ }
+ if (null != querys) {
+ StringBuilder sbQuery = new StringBuilder();
+ for (Map.Entry query : querys.entrySet()) {
+ if (0 < sbQuery.length()) {
+ sbQuery.append("&");
+ }
+ if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
+ sbQuery.append(query.getValue());
+ }
+ if (!StringUtils.isBlank(query.getKey())) {
+ sbQuery.append(query.getKey());
+ if (!StringUtils.isBlank(query.getValue())) {
+ sbQuery.append("=");
+ sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
+ }
+ }
+ }
+ if (0 < sbQuery.length()) {
+ sbUrl.append("?").append(sbQuery);
+ }
+ }
+
+ return sbUrl.toString();
+ }
+
+ private static HttpClient wrapClient(String host) {
+ HttpClient httpClient = new DefaultHttpClient();
+ if (host.startsWith("https://")) {
+ sslClient(httpClient);
+ }
+
+ return httpClient;
+ }
+
+ private static void sslClient(HttpClient httpClient) {
+ try {
+ SSLContext ctx = SSLContext.getInstance("TLS");
+ X509TrustManager tm = new X509TrustManager() {
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+ public void checkClientTrusted(X509Certificate[] xcs, String str) {
+
+ }
+ public void checkServerTrusted(X509Certificate[] xcs, String str) {
+
+ }
+ };
+ ctx.init(null, new TrustManager[] { tm }, null);
+ SSLSocketFactory ssf = new SSLSocketFactory(ctx);
+ ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+ ClientConnectionManager ccm = httpClient.getConnectionManager();
+ SchemeRegistry registry = ccm.getSchemeRegistry();
+ registry.register(new Scheme("https", 443, ssf));
+ } catch (KeyManagementException ex) {
+ throw new RuntimeException(ex);
+ } catch (NoSuchAlgorithmException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java
new file mode 100644
index 0000000..75f3c7b
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/JwtUtils.java
@@ -0,0 +1,115 @@
+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();
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java b/bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java
new file mode 100644
index 0000000..7762b61
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/OssUtil.java
@@ -0,0 +1,153 @@
+package com.bwie.common.utils;
+
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.GetObjectRequest;
+import com.aliyun.oss.model.PutObjectRequest;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.time.LocalDateTime;
+import java.util.UUID;
+
+/**
+ * Oss服务调用
+ */
+@Log4j2
+public class OssUtil {
+
+ /**
+ * Endpoint 存储对象概述 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 访问路径前缀 存储对象概述
+ */
+ private static String endPoint = "oss-cn-shanghai.aliyuncs.com";
+ private static String accessKeyId = "LTAI5t9DTVRFV23Wo19Umcos";
+ private static String accessKeySecret = "owUdTSqMMJySlMAO1whSMgoGOTaalR";
+ private static String accessPre = "https://aly-oss-cyx.oss-cn-shanghai.aliyuncs.com/";
+
+ /**
+ * bucket名称
+ * @return
+ */
+ private static String bucketName = "aly-oss-cyx";
+
+ private static OSS ossClient ;
+
+ static {
+ ossClient = new OSSClientBuilder().build(
+ endPoint,
+ accessKeyId,
+ accessKeySecret);
+ log.info("oss服务连接成功!");
+ }
+
+ /**
+ * 默认路径上传本地文件
+ * @param filePath
+ */
+ public static String uploadFile(String filePath){
+ return uploadFileForBucket(bucketName,getOssFilePath(filePath) ,filePath);
+ }
+
+ /**
+ * 默认路径上传multipartFile文件
+ * @param multipartFile
+ */
+ public static String uploadMultipartFile(MultipartFile multipartFile) {
+ return uploadMultipartFile(bucketName,getOssFilePath(multipartFile.getOriginalFilename()),multipartFile);
+ }
+ /**
+ * 上传 multipartFile 类型文件
+ * @param bucketName
+ * @param ossPath
+ * @param multipartFile
+ */
+ public static String uploadMultipartFile(String bucketName , String ossPath , MultipartFile multipartFile){
+ InputStream inputStream = null;
+ try {
+ inputStream = multipartFile.getInputStream();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ uploadFileInputStreamForBucket(bucketName, ossPath, inputStream);
+ return accessPre+ossPath;
+ }
+
+ /**
+ * 使用File上传PutObject上传文件 ** 程序默认使用次方法上传
+ * @param bucketName 实例名称
+ * @param ossPath oss存储路径
+ * @param filePath 本地文件路径
+ */
+ public static String uploadFileForBucket(String bucketName , String ossPath , String filePath) {
+ // 创建PutObjectRequest对象。
+ PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, ossPath, new File(filePath));
+
+ // 上传
+ ossClient.putObject(putObjectRequest);
+ return accessPre+ossPath;
+ }
+
+ /**
+ * 使用文件流上传到指定的bucket实例
+ * @param bucketName 实例名称
+ * @param ossPath oss存储路径
+ * @param filePath 本地文件路径
+ */
+ public static String uploadFileInputStreamForBucket(String bucketName , String ossPath , String filePath){
+
+ // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
+ InputStream inputStream = null;
+ try {
+ inputStream = new FileInputStream(filePath);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
+ uploadFileInputStreamForBucket(bucketName, ossPath, inputStream);
+ return accessPre+ossPath;
+ }
+
+ public static void uploadFileInputStreamForBucket(String bucketName , String ossPath , InputStream inputStream ){
+ ossClient.putObject(bucketName, ossPath, inputStream);
+ }
+
+ /**
+ * 下载
+ * @param ossFilePath
+ * @param filePath
+ */
+ public static void downloadFile(String ossFilePath , String filePath ){
+ downloadFileForBucket(bucketName , ossFilePath , filePath);
+ }
+ /**
+ * 下载
+ * @param bucketName 实例名称
+ * @param ossFilePath oss存储路径
+ * @param filePath 本地文件路径
+ */
+ public static void downloadFileForBucket(String bucketName , String ossFilePath , String filePath ){
+ ossClient.getObject(new GetObjectRequest(bucketName, ossFilePath), new File(filePath));
+ }
+
+ /**
+ *
+ * @return
+ */
+ public static String getOssDefaultPath(){
+ LocalDateTime now = LocalDateTime.now();
+ String url =
+ now.getYear()+"/"+
+ now.getMonth()+"/"+
+ now.getDayOfMonth()+"/"+
+ now.getHour()+"/"+
+ now.getMinute()+"/";
+ return url;
+ }
+
+ public static String getOssFilePath(String filePath){
+ String fileSuf = filePath.substring(filePath.indexOf(".") + 1);
+ return getOssDefaultPath() + UUID.randomUUID().toString() + "." + fileSuf;
+ }
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/SendMessageUtil.java b/bwie-common/src/main/java/com/bwie/common/utils/SendMessageUtil.java
new file mode 100644
index 0000000..e71512c
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/SendMessageUtil.java
@@ -0,0 +1,54 @@
+package com.bwie.common.utils;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.util.EntityUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class SendMessageUtil {
+
+
+ public String sendSms(String phone,String code){
+ String host = "https://wwsms.market.alicloudapi.com";
+ String path = "/send_sms";
+ String method = "POST";
+ String appcode = "024ae6ea68ef43f88a8107a71a10de39";
+ Map headers = new HashMap();
+ //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
+ headers.put("Authorization", "APPCODE " + appcode);
+ //根据API的要求,定义相对应的Content-Type
+ headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
+ Map querys = new HashMap();
+ Map bodys = new HashMap();
+ bodys.put("content","code:"+code+"");
+ bodys.put("template_id", "CST_11253"); //注意,模板CST_11253 仅作调试使用,下发短信不稳定,请联系客服报备自己的专属签名模板,以保障业务稳定使用
+ bodys.put("phone_number", phone);
+
+//可以提交工单联系客服,或者钉钉联系,钉钉号:1ko_t720ssqc54
+ try {
+ /**
+ * 重要提示如下:
+ * HttpUtils请从\r\n\t \t* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java\r\n\t \t* 下载
+ *
+ * 相应的依赖请参照
+ * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
+ */
+ HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
+ System.out.println(response.toString());
+ //获取response的body
+ String string = EntityUtils.toString(response.getEntity());
+ return string;
+ //System.out.println();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+
+
+
+
+}
+
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java
new file mode 100644
index 0000000..7cf6a15
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/StringUtils.java
@@ -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);
+ }
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java b/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java
new file mode 100644
index 0000000..1377336
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/utils/TelSmsUtils.java
@@ -0,0 +1,92 @@
+package com.common.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.dysmsapi20170525.Client;
+import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
+import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
+import com.aliyun.teaopenapi.models.Config;
+import lombok.extern.log4j.Log4j2;
+
+import java.util.Map;
+
+/**
+ * 短信工具类
+ */
+@Log4j2
+public class TelSmsUtils {
+
+ /**
+ * 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限
+ */
+ private static String accessKeyId = "LTAI5tHU282xbcCSKZJSuKyH";
+
+ private static String accessKeySecret = "mX4tPoqoI55x3ACK1Z7IFiuAMVxuQr";
+
+ /**
+ * 短信访问域名
+ */
+ 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
+ * @param sendDataMap
+ */
+ public static String 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 JSONObject.toJSONString(sendSmsResponse.getBody());
+ }
+
+}
diff --git a/bwie-common/src/main/resources/META-INF/spring.factories b/bwie-common/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..4954274
--- /dev/null
+++ b/bwie-common/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+com.bwie.common.handle.AllExceptionAdvice
diff --git a/bwie-gateway/pom.xml b/bwie-gateway/pom.xml
new file mode 100644
index 0000000..1f441e8
--- /dev/null
+++ b/bwie-gateway/pom.xml
@@ -0,0 +1,43 @@
+
+
+ 4.0.0
+
+ com.bwie
+ month_maven_8_12
+ 1.0-SNAPSHOT
+
+
+ bwie-gateway
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+ 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
+
+
+
diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/GatewayApplication.java b/bwie-gateway/src/main/java/com/bwie/gateway/GatewayApplication.java
new file mode 100644
index 0000000..dbc5bbe
--- /dev/null
+++ b/bwie-gateway/src/main/java/com/bwie/gateway/GatewayApplication.java
@@ -0,0 +1,11 @@
+package com.bwie.gateway;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class GatewayApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(GatewayApplication.class,args);
+ }
+}
diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java b/bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java
new file mode 100644
index 0000000..eea0d7c
--- /dev/null
+++ b/bwie-gateway/src/main/java/com/bwie/gateway/config/IgnoreWhiteConfig.java
@@ -0,0 +1,29 @@
+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;
+
+
+@Configuration
+@RefreshScope
+@ConfigurationProperties(prefix = "ignore")
+@Data
+@Log4j2
+public class IgnoreWhiteConfig {
+ /**
+ * 放行白名单配置,网关不校验此处的白名单
+ */
+ private List whites = new ArrayList<>();
+
+ public void setWhites(List whites) {
+ log.info("加载网关路径白名单:{}", JSONObject.toJSONString(whites));
+ this.whites = whites;
+ }
+}
diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java b/bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java
new file mode 100644
index 0000000..bc868f1
--- /dev/null
+++ b/bwie-gateway/src/main/java/com/bwie/gateway/filters/AuthFilter.java
@@ -0,0 +1,62 @@
+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 lombok.AllArgsConstructor;
+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;
+
+@Component
+public class AuthFilter implements GlobalFilter, Ordered {
+
+ @Autowired
+ private IgnoreWhiteConfig ignoreWhiteConfig;
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+
+
+ @Override
+ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ ServerHttpRequest request = exchange.getRequest();
+ List whites = ignoreWhiteConfig.getWhites();
+ String path = request.getURI().getPath();
+ if (StringUtils.matches(path,whites)){
+ return chain.filter(exchange);
+ }
+
+ String token = request.getHeaders().getFirst(TokenConstants.TOKEN);
+ if (StringUtils.isEmpty(token)){
+ return GatewayUtils.errorResponse(exchange,"token为空");
+ }
+
+ try {
+ JwtUtils.parseToken(token);
+ } catch (Exception e) {
+ return GatewayUtils.errorResponse(exchange,"token不合法");
+ }
+ String userKey = JwtUtils.getUserKey(token);
+ Boolean b = redisTemplate.hasKey(TokenConstants.LOGIN_TOKEN_KEY + userKey);
+ if (!b){
+ return GatewayUtils.errorResponse(exchange,"身份过期,请重新登录" );
+ }
+
+ return chain.filter(exchange);
+ }
+
+ @Override
+ public int getOrder() {
+ return 0;
+ }
+}
diff --git a/bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java b/bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java
new file mode 100644
index 0000000..cf24c5e
--- /dev/null
+++ b/bwie-gateway/src/main/java/com/bwie/gateway/utils/GatewayUtils.java
@@ -0,0 +1,95 @@
+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;
+
+
+@Log4j2
+public class GatewayUtils {
+ /**
+ * 添加请求头参数
+ * @param mutate 修改对象
+ * @param key 键
+ * @param value 值
+ */
+ public static void addHeader(ServerHttpRequest.Builder mutate, String key, Object value) {
+ if (StringUtils.isEmpty(key)){
+ log.warn("添加请求头参数键不可以为空");
+ return;
+ }
+ if (value == null) {
+ log.warn("添加请求头参数:[{}]值为空",key);
+ return;
+ }
+ String valueStr = value.toString();
+ mutate.header(key, valueStr);
+ log.info("添加请求头参数成功 - 键:[{}] , 值:[{}]", key , value);
+ }
+
+ /**
+ * 删除请求头参数
+ * @param mutate 修改对象
+ * @param key 键
+ */
+ public static void removeHeader(ServerHttpRequest.Builder mutate, String key) {
+ if (StringUtils.isEmpty(key)){
+ log.warn("删除请求头参数键不可以为空");
+ return;
+ }
+ mutate.headers(httpHeaders -> httpHeaders.remove(key)).build();
+ log.info("删除请求头参数 - 键:[{}]",key);
+ }
+
+ /**
+ * 错误结果响应
+ * @param exchange 响应上下文
+ * @param msg 响应消息
+ * @return
+ */
+ public static Mono errorResponse(ServerWebExchange exchange, String msg, HttpStatus httpStatus) {
+ ServerHttpResponse response = exchange.getResponse();
+ //设置HTTP响应头状态
+ response.setStatusCode(httpStatus);
+ //设置HTTP响应头文本格式
+ response.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/json");
+ //定义响应内容
+ Result> result = Result.error(msg);
+ String resultJson = JSONObject.toJSONString(result);
+ log.error("[鉴权异常处理]请求路径:[{}],异常信息:[{}],响应结果:[{}]", exchange.getRequest().getPath(), msg, resultJson);
+ DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes());
+ //进行响应
+ return response.writeWith(Mono.just(dataBuffer));
+ }
+
+ /**
+ * 错误结果响应
+ * @param exchange 响应上下文
+ * @param msg 响应消息
+ * @return
+ */
+ public static Mono errorResponse(ServerWebExchange exchange, String msg) {
+ ServerHttpResponse response = exchange.getResponse();
+ //设置HTTP响应头状态
+ response.setStatusCode(HttpStatus.OK);
+ //设置HTTP响应头文本格式
+ response.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/json");
+ //定义响应内容
+ Result> result = Result.error(msg);
+ String resultJson = JSONObject.toJSONString(result);
+ log.error("[鉴权异常处理]请求路径:[{}],异常信息:[{}],响应结果:[{}]", exchange.getRequest().getPath(), msg, resultJson);
+ DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes());
+ //进行响应
+ return response.writeWith(Mono.just(dataBuffer));
+ }
+
+
+}
diff --git a/bwie-gateway/src/main/resources/bootstrap.yml b/bwie-gateway/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..0193000
--- /dev/null
+++ b/bwie-gateway/src/main/resources/bootstrap.yml
@@ -0,0 +1,31 @@
+# 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: 139.224.34.9:8848
+ namespace: week1
+ config:
+ # 配置中心地址
+ server-addr: 139.224.34.9:8848
+ namespace: week1
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
diff --git a/bwie-modules/bwie-es/pom.xml b/bwie-modules/bwie-es/pom.xml
new file mode 100644
index 0000000..632d950
--- /dev/null
+++ b/bwie-modules/bwie-es/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ com.bwie
+ bwie-modules
+ 1.0-SNAPSHOT
+
+
+ bwie-es
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ com.bwie
+ bwie-common
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.elasticsearch.client
+ elasticsearch-rest-high-level-client
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/EsApplication.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/EsApplication.java
new file mode 100644
index 0000000..ddc8c95
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/EsApplication.java
@@ -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,args);
+ }
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/ConfirmCallbackConfig.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/ConfirmCallbackConfig.java
new file mode 100644
index 0000000..f22bbb6
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/ConfirmCallbackConfig.java
@@ -0,0 +1,40 @@
+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;
+
+
+@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("消息发送到 broker 成功");
+ } else {
+ System.out.println("消息发送到 broker 失败,失败的原因:" + cause);
+ }
+ }
+
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/EsConfigInit.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/EsConfigInit.java
new file mode 100644
index 0000000..e981dde
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/EsConfigInit.java
@@ -0,0 +1,28 @@
+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.beans.factory.annotation.Value;
+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 EsConfigInit {
+
+ private String host;
+ private int port;
+ private String scheme;
+
+
+ @Bean// RestHighLevelClient 用来 做 es 操作
+ public RestHighLevelClient initRestHighLevelClient(){
+
+ return new RestHighLevelClient(RestClient.builder(new HttpHost(host,port,scheme)));
+ }
+
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/RabbitAdminConfig.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/RabbitAdminConfig.java
new file mode 100644
index 0000000..aff0d0e
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/RabbitAdminConfig.java
@@ -0,0 +1,50 @@
+package com.bwie.es.config;
+
+import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 构建 RabbitAdmin
+ */
+@Configuration
+public class RabbitAdminConfig {
+
+ @Value("${spring.rabbitmq.host}")
+ private String host;
+ @Value("${spring.rabbitmq.username}")
+ private String username;
+ @Value("${spring.rabbitmq.password}")
+ private String password;
+ @Value("${spring.rabbitmq.virtual-host}")
+ private String virtualhost;
+
+ @Bean
+ public ConnectionFactory connectionFactory() {
+ CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
+ connectionFactory.setAddresses(host);
+ connectionFactory.setUsername(username);
+ connectionFactory.setPassword(password);
+ connectionFactory.setVirtualHost(virtualhost);
+ // 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效
+ connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);
+ connectionFactory.setPublisherReturns(true);
+ return connectionFactory;
+ }
+
+
+ /**
+ * rabbitAdmin
+ * @param connectionFactory
+ * @return
+ */
+ @Bean
+ public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
+ RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
+ rabbitAdmin.setAutoStartup(true);
+ return rabbitAdmin;
+ }
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/RabbitmqConfig.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/RabbitmqConfig.java
new file mode 100644
index 0000000..8a1996e
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/RabbitmqConfig.java
@@ -0,0 +1,15 @@
+package com.bwie.es.config;
+
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class RabbitmqConfig {
+ // 消息转换配置
+ @Bean
+ public MessageConverter jsonMessageConverter(){
+ return new Jackson2JsonMessageConverter();
+ }
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/ReturnsCallbackConfig.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/ReturnsCallbackConfig.java
new file mode 100644
index 0000000..cd282ef
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/config/ReturnsCallbackConfig.java
@@ -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 ReturnsCallbackConfig implements RabbitTemplate.ReturnsCallback {
+
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+
+ /**
+ * 当前bean初始化的时候执行
+ */
+ @PostConstruct
+ public void init() {
+ this.rabbitTemplate.setReturnsCallback(this);
+ }
+
+ /**
+ * 消息发送达到 queue 失败执行
+ *
+ * @param returnedMessage the returned message and metadata.
+ */
+ @Override
+ public void returnedMessage(ReturnedMessage returnedMessage) {
+ System.out.println("消息" + returnedMessage.getMessage().toString() +
+ "被交换机" + returnedMessage.getExchange() + "回退!"
+ + "退回原因为:" + returnedMessage.getReplyText());
+ // TODO 回退了所有的信息,可做补偿机制
+ }
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/consumers/EsConsumer.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/consumers/EsConsumer.java
new file mode 100644
index 0000000..834c494
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/consumers/EsConsumer.java
@@ -0,0 +1,50 @@
+package com.bwie.es.consumers;
+
+import com.alibaba.fastjson.JSON;
+import com.bwie.common.domain.request.GoodsUpdateReq;
+import com.rabbitmq.client.Channel;
+import org.elasticsearch.action.update.UpdateRequest;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.common.xcontent.XContentType;
+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;
+
+@Component
+public class EsConsumer {
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+
+ @Autowired
+ private RestHighLevelClient restHighLevelClient;
+ @RabbitListener(queuesToDeclare = @Queue("UPD_ES"))
+ public void updEs(GoodsUpdateReq req, Message message, Channel channel){
+ String messageId = message.getMessageProperties().getMessageId();
+ Long updEs = redisTemplate.opsForSet().add("UPD_ES", messageId);
+ if (updEs>0){
+ UpdateRequest updateRequest = new UpdateRequest("goods",req.getGoodsId()+"");
+ updateRequest.doc(JSON.toJSONString(req), XContentType.JSON);
+ try {
+ restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ try {
+ channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
+ } catch (IOException e) {
+ redisTemplate.opsForSet().remove("UPD_ES", messageId);
+ try {
+ channel.basicReject(message.getMessageProperties().getDeliveryTag(),true);
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ }
+ }
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/controller/EsContoller.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/controller/EsContoller.java
new file mode 100644
index 0000000..ca82221
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/controller/EsContoller.java
@@ -0,0 +1,50 @@
+package com.bwie.es.controller;
+
+import com.bwie.common.domain.request.GoodsListReq;
+import com.bwie.common.domain.response.GoodsListResp;
+import com.bwie.common.result.Result;
+import com.bwie.es.service.EsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("es")
+public class EsContoller {
+ @Autowired
+ private EsService esService;
+
+ /**
+ * 商品列表 通过商品名称模糊查
+ * @param req
+ * @return
+ */
+ @PostMapping("findList")
+ public Result findList(@RequestBody GoodsListReq req){
+ List list = esService.findList(req);
+ return Result.success(list);
+ }
+
+
+ @Scheduled(cron = "0/10 * * * * ?")
+ public void synchronizationEs(){
+ esService.synchronizationEs();
+ }
+
+ /**
+ * 获取秒杀商品 状态为已上架
+ */
+ @PostMapping("findAll")
+ public Result findAll(){
+ List list = esService.findAll();
+ return Result.success(list);
+ }
+
+
+
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/feign/GoodsFeign.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/feign/GoodsFeign.java
new file mode 100644
index 0000000..b7a2a09
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/feign/GoodsFeign.java
@@ -0,0 +1,16 @@
+package com.bwie.es.feign;
+
+import com.bwie.common.domain.response.GoodsListResp;
+import com.bwie.common.result.Result;
+import com.bwie.es.feign.factory.GoodsFeignFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.List;
+
+@FeignClient(value = "bwie-goods",fallbackFactory = GoodsFeignFactory.class)
+public interface GoodsFeign {
+
+ @PostMapping("goods/findAll")
+ public Result> findAll();
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/feign/factory/GoodsFeignFactory.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/feign/factory/GoodsFeignFactory.java
new file mode 100644
index 0000000..c04af0f
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/feign/factory/GoodsFeignFactory.java
@@ -0,0 +1,24 @@
+package com.bwie.es.feign.factory;
+
+import com.bwie.common.domain.response.GoodsListResp;
+import com.bwie.common.result.Result;
+import com.bwie.es.feign.GoodsFeign;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public class GoodsFeignFactory implements FallbackFactory {
+
+
+ @Override
+ public GoodsFeign create(Throwable cause) {
+ return new GoodsFeign() {
+ @Override
+ public Result> findAll() {
+ return Result.error("网络出错....");
+ }
+ };
+ }
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/service/EsService.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/service/EsService.java
new file mode 100644
index 0000000..826b1fe
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/service/EsService.java
@@ -0,0 +1,26 @@
+package com.bwie.es.service;
+
+import com.bwie.common.domain.request.GoodsListReq;
+import com.bwie.common.domain.response.GoodsListResp;
+
+import java.util.List;
+
+public interface EsService {
+ /**
+ * 商品列表 通过商品名称模糊查
+ * @param req
+ * @return
+ */
+
+ List findList(GoodsListReq req);
+
+ /**
+ * 同步es
+ */
+ void synchronizationEs();
+
+ /**
+ * 获取秒杀商品 状态为已上架
+ */
+ List findAll();
+}
diff --git a/bwie-modules/bwie-es/src/main/java/com/bwie/es/service/impl/EsServiceImpl.java b/bwie-modules/bwie-es/src/main/java/com/bwie/es/service/impl/EsServiceImpl.java
new file mode 100644
index 0000000..03ff3f0
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/java/com/bwie/es/service/impl/EsServiceImpl.java
@@ -0,0 +1,140 @@
+package com.bwie.es.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.bwie.common.domain.request.GoodsListReq;
+import com.bwie.common.domain.response.GoodsListResp;
+import com.bwie.common.result.Result;
+import com.bwie.common.utils.StringUtils;
+import com.bwie.es.feign.GoodsFeign;
+import com.bwie.es.service.EsService;
+import lombok.extern.log4j.Log4j2;
+import org.elasticsearch.action.bulk.BulkRequest;
+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.xcontent.XContentType;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.MatchQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.index.reindex.DeleteByQueryRequest;
+import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.SearchHits;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.elasticsearch.search.sort.SortOrder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Log4j2
+@Service
+public class EsServiceImpl implements EsService {
+
+
+ public static final String GOODS="goods";
+
+
+ @Autowired
+ private GoodsFeign goodsFeign;
+ @Autowired
+ private RestHighLevelClient restHighLevelClient;
+ /**
+ * 商品列表 通过商品名称模糊查
+ * @param req
+ * @return
+ */
+ @Override
+ public List findList(GoodsListReq req) {
+ ArrayList list = new ArrayList<>();
+ SearchRequest searchRequest = new SearchRequest(GOODS);
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+ if (StringUtils.isNotBlank(req.getGoodsName())){
+ MatchQueryBuilder goodsName = QueryBuilders.matchQuery("goodsName", req.getGoodsName());
+ searchSourceBuilder.query(goodsName);
+ }
+ searchSourceBuilder.sort("goodsId", SortOrder.ASC);
+ searchRequest.source(searchSourceBuilder);
+ try {
+ SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
+ SearchHits searchHits = search.getHits();
+ SearchHit[] hits = searchHits.getHits();
+ if (hits!=null){
+ for (SearchHit hit : hits) {
+ String sourceAsString = hit.getSourceAsString();
+ GoodsListResp goodsListResp = JSON.parseObject(sourceAsString, GoodsListResp.class);
+ list.add(goodsListResp);
+ }
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return list;
+ }
+
+ /**
+ * es同步
+ */
+ @Override
+ public void synchronizationEs() {
+ log.info("开始同步es===============");
+ DeleteByQueryRequest delete = new DeleteByQueryRequest(GOODS);
+ delete.setQuery(QueryBuilders.matchAllQuery());
+ try {
+ restHighLevelClient.deleteByQuery(delete, RequestOptions.DEFAULT);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ Result> all = goodsFeign.findAll();
+ List list = all.getData();
+ if (!CollectionUtils.isEmpty(list)){
+ BulkRequest bulkRequest = new BulkRequest();
+ for (GoodsListResp goodsListResp : list) {
+ bulkRequest.add(new IndexRequest(GOODS)
+ .id(goodsListResp.getGoodsId()+"")
+ .source(JSON.toJSONString(goodsListResp), XContentType.JSON));
+ }
+ try {
+ restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ log.info("es同步完成============");
+
+ }
+
+
+ /**
+ * 获取秒杀商品 状态为已上架
+ * @return
+ */
+ @Override
+ public List findAll() {
+ ArrayList list = new ArrayList<>();
+ SearchRequest searchRequest = new SearchRequest(GOODS);
+ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+ searchSourceBuilder.sort("goodsId", SortOrder.ASC);
+ searchSourceBuilder.query(QueryBuilders.termQuery("goodsStatus",1));
+ searchRequest.source(searchSourceBuilder);
+ try {
+ SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
+ SearchHits searchHits = search.getHits();
+ SearchHit[] hits = searchHits.getHits();
+ if (hits!=null){
+ for (SearchHit hit : hits) {
+ String sourceAsString = hit.getSourceAsString();
+ GoodsListResp goodsListResp = JSON.parseObject(sourceAsString, GoodsListResp.class);
+ list.add(goodsListResp);
+ }
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return list;
+ }
+}
diff --git a/bwie-modules/bwie-es/src/main/resources/bootstrap.yml b/bwie-modules/bwie-es/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..c4f1d2f
--- /dev/null
+++ b/bwie-modules/bwie-es/src/main/resources/bootstrap.yml
@@ -0,0 +1,57 @@
+# Tomcat
+server:
+ port: 9008
+# Spring
+spring:
+ rabbitmq:
+ host: 139.224.34.9
+ port: 5672
+ username: guest
+ password: guest
+ virtual-host: /
+ listener:
+ simple:
+ prefetch: 1 # 默认每次取出一条消息消费, 消费完成取下一条
+ acknowledge-mode: manual # 设置消费端手动ack确认
+ retry:
+ enabled: true # 是否支持重试
+ publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
+ publisher-returns: true #确认消息已发送到队列(Queue)
+ elasticsearch:
+
+ rest:
+
+ uris: http://139.224.34.9:9200
+ 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: 139.224.34.9:8848
+ namespace: week1
+ config:
+ # 配置中心地址
+ server-addr: 139.224.34.9:8848
+ namespace: week1
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+es:
+ host: 139.224.34.9
+ port: 9200
+ scheme: http
+
+
+
diff --git a/bwie-modules/bwie-goods/pom.xml b/bwie-modules/bwie-goods/pom.xml
new file mode 100644
index 0000000..0838178
--- /dev/null
+++ b/bwie-modules/bwie-goods/pom.xml
@@ -0,0 +1,56 @@
+
+
+ 4.0.0
+
+ com.bwie
+ bwie-modules
+ 1.0-SNAPSHOT
+
+
+ bwie-goods
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ com.bwie
+ bwie-common
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ 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.elasticsearch.client
+ elasticsearch-rest-high-level-client
+
+
+
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/GoodsApplication.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/GoodsApplication.java
new file mode 100644
index 0000000..9cfdc48
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/GoodsApplication.java
@@ -0,0 +1,66 @@
+package com.bwie.goods;
+
+import com.alibaba.fastjson.JSON;
+import com.bwie.common.domain.response.GoodsListResp;
+import com.bwie.goods.service.GoodsService;
+import lombok.extern.java.Log;
+import lombok.extern.log4j.Log4j2;
+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.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.index.reindex.DeleteByQueryRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+import javax.annotation.PostConstruct;
+import java.io.IOException;
+import java.util.List;
+
+@Log4j2
+@SpringBootApplication
+@EnableFeignClients
+public class GoodsApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(GoodsApplication.class,args);
+ }
+
+ @Autowired
+ private RestHighLevelClient restHighLevelClient;
+
+ @Autowired
+ private GoodsService goodsService;
+
+ /**
+ * 项目启动初始化es
+ */
+ @PostConstruct
+ public void init(){
+ log.info("开始同步es===============");
+ DeleteByQueryRequest delete = new DeleteByQueryRequest("goods");
+ delete.setQuery(QueryBuilders.matchAllQuery());
+ try {
+ restHighLevelClient.deleteByQuery(delete, RequestOptions.DEFAULT);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ List list = goodsService.findList();
+ BulkRequest bulkRequest = new BulkRequest();
+ for (GoodsListResp goodsListResp : list) {
+ bulkRequest.add(new IndexRequest("goods")
+ .id(goodsListResp.getGoodsId()+"")
+ .source(JSON.toJSONString(goodsListResp),XContentType.JSON));
+ }
+ try {
+ restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ log.info("es同步完成============");
+
+ }
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/ConfirmCallbackConfig.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/ConfirmCallbackConfig.java
new file mode 100644
index 0000000..ae15589
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/ConfirmCallbackConfig.java
@@ -0,0 +1,40 @@
+package com.bwie.goods.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;
+
+
+@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("消息发送到 broker 成功");
+ } else {
+ System.out.println("消息发送到 broker 失败,失败的原因:" + cause);
+ }
+ }
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/EsConfigInit.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/EsConfigInit.java
new file mode 100644
index 0000000..86fc048
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/EsConfigInit.java
@@ -0,0 +1,27 @@
+package com.bwie.goods.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 EsConfigInit {
+
+ private String host;
+ private int port;
+ private String scheme;
+
+
+ @Bean// RestHighLevelClient 用来 做 es 操作
+ public RestHighLevelClient initRestHighLevelClient(){
+
+ return new RestHighLevelClient(RestClient.builder(new HttpHost(host,port,scheme)));
+ }
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RabbitAdminConfig.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RabbitAdminConfig.java
new file mode 100644
index 0000000..a1d4524
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RabbitAdminConfig.java
@@ -0,0 +1,50 @@
+package com.bwie.goods.config;
+
+import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 构建 RabbitAdmin
+ */
+@Configuration
+public class RabbitAdminConfig {
+
+ @Value("${spring.rabbitmq.host}")
+ private String host;
+ @Value("${spring.rabbitmq.username}")
+ private String username;
+ @Value("${spring.rabbitmq.password}")
+ private String password;
+ @Value("${spring.rabbitmq.virtual-host}")
+ private String virtualhost;
+
+ @Bean
+ public ConnectionFactory connectionFactory() {
+ CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
+ connectionFactory.setAddresses(host);
+ connectionFactory.setUsername(username);
+ connectionFactory.setPassword(password);
+ connectionFactory.setVirtualHost(virtualhost);
+ // 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效
+ connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);
+ connectionFactory.setPublisherReturns(true);
+ return connectionFactory;
+ }
+
+
+ /**
+ * rabbitAdmin
+ * @param connectionFactory
+ * @return
+ */
+ @Bean
+ public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
+ RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
+ rabbitAdmin.setAutoStartup(true);
+ return rabbitAdmin;
+ }
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RabbitmqConfig.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RabbitmqConfig.java
new file mode 100644
index 0000000..3947333
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RabbitmqConfig.java
@@ -0,0 +1,15 @@
+package com.bwie.goods.config;
+
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class RabbitmqConfig {
+ // 消息转换配置
+ @Bean
+ public MessageConverter jsonMessageConverter(){
+ return new Jackson2JsonMessageConverter();
+ }
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RedissonConfig.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RedissonConfig.java
new file mode 100644
index 0000000..6279162
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/RedissonConfig.java
@@ -0,0 +1,31 @@
+package com.bwie.goods.config;
+
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.io.IOException;
+
+
+@Configuration
+public class RedissonConfig {
+
+ @Bean(destroyMethod="shutdown") // 服务停止后调用 shutdown 方法。
+ public RedissonClient redisson() throws IOException {
+ System.out.println("配置类初始加载......");
+ // 1.创建配置
+ Config config = new Config();
+ // config.useClusterServers().addNodeAddress("127.0.0.1:6379", "127.0.0.1:6378");
+ // 2.根据 Config 创建出 RedissonClient 实例。
+ config.useSingleServer()
+ .setAddress("redis://139.224.34.9:6379")
+ .setPassword("cyx12345")
+ .setConnectionPoolSize(64)
+ .setConnectionMinimumIdleSize(10)
+ .setTimeout(30000);
+ return Redisson.create(config);
+ }
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/ReturnsCallbackConfig.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/ReturnsCallbackConfig.java
new file mode 100644
index 0000000..ec420c8
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/config/ReturnsCallbackConfig.java
@@ -0,0 +1,37 @@
+package com.bwie.goods.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 ReturnsCallbackConfig implements RabbitTemplate.ReturnsCallback {
+
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+
+ /**
+ * 当前bean初始化的时候执行
+ */
+ @PostConstruct
+ public void init() {
+ this.rabbitTemplate.setReturnsCallback(this);
+ }
+
+ /**
+ * 消息发送达到 queue 失败执行
+ *
+ * @param returnedMessage the returned message and metadata.
+ */
+ @Override
+ public void returnedMessage(ReturnedMessage returnedMessage) {
+ System.out.println("消息" + returnedMessage.getMessage().toString() +
+ "被交换机" + returnedMessage.getExchange() + "回退!"
+ + "退回原因为:" + returnedMessage.getReplyText());
+ // TODO 回退了所有的信息,可做补偿机制
+ }
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/CartController.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/CartController.java
new file mode 100644
index 0000000..199ec71
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/CartController.java
@@ -0,0 +1,66 @@
+package com.bwie.goods.controller;
+
+import com.bwie.common.constants.TokenConstants;
+import com.bwie.common.domain.Cart;
+import com.bwie.common.domain.Middle;
+import com.bwie.common.domain.request.CartAddReq;
+import com.bwie.common.domain.request.CartPayReq;
+import com.bwie.common.domain.response.CartResp;
+import com.bwie.common.domain.response.UserResp;
+import com.bwie.common.exception.AllException;
+import com.bwie.common.result.Result;
+import com.bwie.common.utils.JwtUtils;
+import com.bwie.goods.feign.UserFeign;
+import com.bwie.goods.service.CartService;
+import com.bwie.goods.service.MiddleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.List;
+
+@RestController
+@RequestMapping("cart")
+public class CartController {
+ @Autowired
+ private CartService cartService;
+
+ @Autowired
+ private MiddleService middleService;
+ @Autowired
+ private UserFeign userFeign;
+
+ @Autowired
+ private HttpServletRequest request;
+ @PostMapping("addCart")
+ public Result addCart(@RequestBody CartAddReq req){
+ Middle middle = middleService.selectById(req.getId());
+ if (middle.getSeckillNum()<=0){
+ throw new AllException("库存不足");
+ }else {
+ int i = cartService.addCart(req);
+ return i>0?Result.success("","添加成功"):Result.error("添加失败");
+ }
+ }
+
+ @PostMapping("findList")
+ public Result findList(){
+ List list = cartService.findList();
+ return Result.success(list);
+ }
+ @PostMapping("pay")
+ public Result pay(@RequestBody CartPayReq req){
+ String token = request.getHeader(TokenConstants.TOKEN);
+ String userId = JwtUtils.getUserId(token);
+ Result byId = userFeign.findById(userId);
+ UserResp userResp = byId.getData();
+ BigDecimal userMoney = userResp.getUserMoney();
+ if (userMoney.compareTo(req.getSumPrice())==-1){
+ throw new AllException("余额不足");
+ }
+ int pay = cartService.pay(req);
+ return Result.success();
+ }
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/GoodsController.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/GoodsController.java
new file mode 100644
index 0000000..4d59ffe
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/GoodsController.java
@@ -0,0 +1,64 @@
+package com.bwie.goods.controller;
+
+import com.bwie.common.domain.request.GoodsAddReq;
+import com.bwie.common.domain.request.GoodsUpdateReq;
+import com.bwie.common.domain.response.GoodsListResp;
+import com.bwie.common.result.Result;
+import com.bwie.common.utils.OssUtil;
+import com.bwie.goods.service.GoodsService;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("goods")
+public class GoodsController {
+ @Autowired
+ private GoodsService goodsService;
+
+ /**
+ * 所有数据
+ */
+ @PostMapping("findAll")
+ public Result> findAll(){
+ List list = goodsService.findList();
+ return Result.success(list);
+ }
+
+ /**
+ * 修改商品
+ * @param req
+ * @return
+ */
+ @PostMapping("updateGoods")
+ public Result updateGoods(@RequestBody GoodsUpdateReq req){
+ int i = goodsService.updateGoods(req);
+ return i>0?Result.success(null,"成功"):Result.error("失败");
+ }
+
+ /**
+ * 上传图片
+ * @param file
+ * @return
+ */
+ @PostMapping("upLoad")
+ public Result upLoad(MultipartFile file){
+ String uri = OssUtil.uploadMultipartFile(file);
+ return Result.success(uri);
+ }
+
+ /**
+ * 添加商品
+ */
+ @PostMapping("addGoods")
+ public Result addGoods(@RequestBody GoodsAddReq req){
+ int i = goodsService.addGoods(req);
+ return i>0?Result.success(null,"添加成功"):Result.error("添加失败");
+ }
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/MiddleController.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/MiddleController.java
new file mode 100644
index 0000000..f74937a
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/MiddleController.java
@@ -0,0 +1,47 @@
+package com.bwie.goods.controller;
+
+import com.bwie.common.domain.request.MiddleAddReq;
+import com.bwie.common.domain.response.MiddleResp;
+import com.bwie.common.result.Result;
+import com.bwie.goods.service.MiddleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("middle")
+public class MiddleController {
+ @Autowired
+ private MiddleService middleService;
+
+ /**
+ * 添加秒杀的商品
+ * @param req
+ * @return
+ */
+ @PostMapping("addMiddle")
+ public Result addMiddle(@RequestBody MiddleAddReq req){
+ int i = middleService.addMiddle(req);
+ return i>0?Result.success("","添加成功"):Result.error("添加失败");
+ }
+
+ /**
+ *
+ */
+ @PostMapping("findBySeckillId")
+ public Result findBySeckillId(@RequestParam Integer seckillId){
+ List list = middleService.findList(seckillId);
+ return Result.success(list);
+ }
+
+ /**
+ * 秒杀列表 通过时间
+ */
+ @PostMapping("findMiddleList")
+ public Result findMiddleList(){
+ List list = middleService.findMiddleList();
+ return Result.success(list);
+ }
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/SeckillController.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/SeckillController.java
new file mode 100644
index 0000000..42283df
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/SeckillController.java
@@ -0,0 +1,57 @@
+package com.bwie.goods.controller;
+
+
+import com.bwie.common.domain.request.MiddleAddReq;
+import com.bwie.common.domain.request.SeckillAddReq;
+import com.bwie.common.domain.request.SeckillListReq;
+import com.bwie.common.domain.response.SeckillResp;
+import com.bwie.common.result.Result;
+import com.bwie.goods.service.SeckillService;
+import com.github.pagehelper.PageInfo;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("seckill")
+public class SeckillController {
+ @Autowired
+ private SeckillService seckillService;
+
+ /**
+ * 查询列表 分页和模糊查
+ * @param req
+ * @return
+ */
+ @PostMapping("findList")
+ public Result findList(@RequestBody SeckillListReq req){
+ PageInfo list = seckillService.findList(req);
+ return Result.success(list);
+ }
+
+
+ /**
+ * 添加秒杀规则
+ * @param req
+ * @return
+ */
+ @PostMapping("addSeckill")
+ public Result addSeckill(@RequestBody SeckillAddReq req){
+ int i = seckillService.addSeckill(req);
+ return i>0?Result.success("","添加成功"):Result.error("添加失败");
+ }
+
+
+ @PostMapping("findAll")
+ public Result findAll(){
+ List list = seckillService.findAll();
+ return Result.success(list);
+ }
+
+
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/TypeController.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/TypeController.java
new file mode 100644
index 0000000..2ae025e
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/controller/TypeController.java
@@ -0,0 +1,24 @@
+package com.bwie.goods.controller;
+
+import com.bwie.common.domain.Type;
+import com.bwie.common.result.Result;
+import com.bwie.goods.service.TypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("type")
+public class TypeController {
+ @Autowired
+ private TypeService typeService;
+
+ @PostMapping("findTypeAll")
+ public Result> findTypeAll(){
+ List type = typeService.findType();
+ return Result.success(type);
+ }
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/feign/UserFeign.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/feign/UserFeign.java
new file mode 100644
index 0000000..489f9c5
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/feign/UserFeign.java
@@ -0,0 +1,27 @@
+package com.bwie.goods.feign;
+
+
+import com.bwie.common.domain.User;
+import com.bwie.common.domain.request.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.domain.response.UserResp;
+import com.bwie.common.result.Result;
+import com.bwie.goods.feign.factory.UserFeignFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.math.BigDecimal;
+
+@FeignClient(value = "bwie-system",fallbackFactory = UserFeignFactory.class)
+public interface UserFeign {
+
+ @GetMapping("/user/findById/{userId}")
+ public Result findById(@PathVariable String userId);
+ @PostMapping("user/updMoney/{sumPrice}/{userId}")
+ public Result updMoney(@PathVariable BigDecimal sumPrice, @PathVariable String userId);
+
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/feign/factory/UserFeignFactory.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/feign/factory/UserFeignFactory.java
new file mode 100644
index 0000000..52eb0a5
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/feign/factory/UserFeignFactory.java
@@ -0,0 +1,33 @@
+package com.bwie.goods.feign.factory;
+
+
+import com.bwie.common.domain.User;
+import com.bwie.common.domain.request.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.domain.response.UserResp;
+import com.bwie.common.result.Result;
+import com.bwie.goods.feign.UserFeign;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+
+@Component
+public class UserFeignFactory implements FallbackFactory {
+
+
+ @Override
+ public UserFeign create(Throwable cause) {
+ return new UserFeign() {
+ @Override
+ public Result findById(String userId) {
+ return Result.error("网络出错了...");
+ }
+
+ @Override
+ public Result updMoney(BigDecimal sumPrice, String userId) {
+ return Result.error("网络出错了...");
+ }
+ };
+ }
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/CartMapper.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/CartMapper.java
new file mode 100644
index 0000000..3190425
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/CartMapper.java
@@ -0,0 +1,24 @@
+package com.bwie.goods.mapper;
+
+import com.bwie.common.domain.Cart;
+import com.bwie.common.domain.response.CartResp;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface CartMapper {
+
+ Cart selectByUserIdAndGoodsId(@Param("userId") String userId, @Param("goodsId") Integer goodsId, @Param("seckillId") Integer seckillId);
+
+ int addCart(@Param("userId") String userId, @Param("goodsId") Integer goodsId, @Param("seckillId") Integer seckillId);
+
+ int updCart(@Param("userId") String userId, @Param("goodsId") Integer goodsId);
+
+ List findList(@Param("userId") String userId);
+
+ void deleteAll(String userId);
+
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/GoodsMapper.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/GoodsMapper.java
new file mode 100644
index 0000000..9f31736
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/GoodsMapper.java
@@ -0,0 +1,33 @@
+package com.bwie.goods.mapper;
+
+import com.bwie.common.domain.request.GoodsAddReq;
+import com.bwie.common.domain.request.GoodsUpdateReq;
+import com.bwie.common.domain.response.GoodsListResp;
+import com.bwie.common.domain.vo.Pay;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
+
+@Mapper
+public interface GoodsMapper {
+
+
+ @Select("select * from t_goods g left join t_type t on g.type_id=t.type_id")
+ List findList();
+
+ @Update("UPDATE `month8_12`.`t_goods` SET `goods_name` = #{goodsName}, `type_id` = #{typeId}, `goods_pic` = #{goodsPic}," +
+ " `goods_status` = #{goodsStatus}, `goods_price` = #{goodsPrice}, `goods_num` = #{goodsNum}, `time` = #{time}" +
+ " WHERE `goods_id` = #{goodsId}" )
+ int updateGoods(GoodsUpdateReq req);
+
+ @Insert("INSERT INTO `month8_12`.`t_goods` ( `goods_name`, `type_id`, `goods_pic`, `goods_status`, `goods_price`, `goods_num`, `time`) " +
+ "VALUES ( #{goodsName}, #{typeId}, #{goodsPic}, #{goodsStatus}, #{goodsPrice}, #{goodsNum}, #{time})")
+ int addGoods(GoodsAddReq req);
+
+
+ void updateGoodsNum(Pay pay);
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/MiddleMapper.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/MiddleMapper.java
new file mode 100644
index 0000000..038c04e
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/MiddleMapper.java
@@ -0,0 +1,26 @@
+package com.bwie.goods.mapper;
+
+import com.bwie.common.domain.Cart;
+import com.bwie.common.domain.Middle;
+import com.bwie.common.domain.request.CartAddReq;
+import com.bwie.common.domain.response.MiddleResp;
+import com.bwie.common.domain.vo.GoodsMiddle;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface MiddleMapper {
+ int addMiddle(@Param("seckillId") Integer seckillId, @Param("list") List goods);
+
+ void deleteMiddle(@Param("seckillId") Integer seckillId);
+
+ List findList(@Param("seckillId") Integer seckillId);
+
+ List findMiddleList(String nowTime);
+
+ void updNum(CartAddReq req);
+
+ Middle selectById(Integer id);
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/SeckillMapper.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/SeckillMapper.java
new file mode 100644
index 0000000..8aa2819
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/SeckillMapper.java
@@ -0,0 +1,23 @@
+package com.bwie.goods.mapper;
+
+import com.bwie.common.domain.request.MiddleAddReq;
+import com.bwie.common.domain.request.SeckillAddReq;
+import com.bwie.common.domain.request.SeckillListReq;
+import com.bwie.common.domain.response.SeckillResp;
+import com.bwie.common.domain.vo.GoodsMiddle;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface SeckillMapper {
+ List findList(SeckillListReq req);
+
+ int addSeckill(SeckillAddReq req);
+
+
+
+
+ List findALl();
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/TypeMapper.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/TypeMapper.java
new file mode 100644
index 0000000..277bba1
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/mapper/TypeMapper.java
@@ -0,0 +1,14 @@
+package com.bwie.goods.mapper;
+
+import com.bwie.common.domain.Type;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface TypeMapper {
+
+ @Select("select * from t_type;")
+ List findType();
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/CartService.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/CartService.java
new file mode 100644
index 0000000..3d5c88d
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/CartService.java
@@ -0,0 +1,18 @@
+package com.bwie.goods.service;
+
+import com.bwie.common.domain.Cart;
+import com.bwie.common.domain.request.CartAddReq;
+import com.bwie.common.domain.request.CartPayReq;
+import com.bwie.common.domain.response.CartResp;
+
+import java.util.List;
+
+public interface CartService {
+ int addCart(CartAddReq req);
+
+ List findList();
+
+ int pay(CartPayReq req);
+
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/GoodsService.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/GoodsService.java
new file mode 100644
index 0000000..1120b6e
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/GoodsService.java
@@ -0,0 +1,27 @@
+package com.bwie.goods.service;
+
+import com.bwie.common.domain.request.GoodsAddReq;
+import com.bwie.common.domain.request.GoodsUpdateReq;
+import com.bwie.common.domain.response.GoodsListResp;
+import com.bwie.common.domain.vo.Pay;
+
+import java.util.List;
+
+public interface GoodsService {
+ /**
+ * 查询所有商品
+ * @return
+ */
+ List findList();
+
+ /**
+ * 修改商品状态
+ * @param req
+ * @return
+ */
+ int updateGoods(GoodsUpdateReq req);
+
+ int addGoods(GoodsAddReq req);
+
+ void updateGoodsNum(List pays);
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/MiddleService.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/MiddleService.java
new file mode 100644
index 0000000..0a4f791
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/MiddleService.java
@@ -0,0 +1,27 @@
+package com.bwie.goods.service;
+
+import com.bwie.common.domain.Cart;
+import com.bwie.common.domain.Middle;
+import com.bwie.common.domain.request.CartAddReq;
+import com.bwie.common.domain.request.MiddleAddReq;
+import com.bwie.common.domain.response.MiddleResp;
+
+import java.util.List;
+
+public interface MiddleService {
+ /**
+ * 添加秒杀的商品
+ * @param req
+ * @return
+ */
+ int addMiddle(MiddleAddReq req);
+
+
+ List findList(Integer seckillId);
+
+ List findMiddleList();
+
+ void updNum(CartAddReq req);
+
+ Middle selectById(Integer id);
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/SeckillService.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/SeckillService.java
new file mode 100644
index 0000000..9badfa5
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/SeckillService.java
@@ -0,0 +1,32 @@
+package com.bwie.goods.service;
+
+
+import com.bwie.common.domain.request.MiddleAddReq;
+import com.bwie.common.domain.request.SeckillAddReq;
+import com.bwie.common.domain.request.SeckillListReq;
+import com.bwie.common.domain.response.SeckillResp;
+import com.bwie.common.domain.vo.GoodsMiddle;
+import com.github.pagehelper.PageInfo;
+
+import java.util.List;
+
+public interface SeckillService {
+ /**
+ * 列表
+ * @param req
+ * @return
+ */
+ PageInfo findList(SeckillListReq req);
+
+ /**
+ * 添加秒杀规则
+ * @param req
+ * @return
+ */
+ int addSeckill(SeckillAddReq req);
+
+
+
+
+ List findAll();
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/TypeService.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/TypeService.java
new file mode 100644
index 0000000..c3d0bed
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/TypeService.java
@@ -0,0 +1,9 @@
+package com.bwie.goods.service;
+
+import com.bwie.common.domain.Type;
+
+import java.util.List;
+
+public interface TypeService {
+ List findType();
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/CartServiceImpl.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/CartServiceImpl.java
new file mode 100644
index 0000000..7be2b5f
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/CartServiceImpl.java
@@ -0,0 +1,87 @@
+package com.bwie.goods.service.impl;
+
+import com.bwie.common.constants.TokenConstants;
+import com.bwie.common.domain.Cart;
+import com.bwie.common.domain.request.CartAddReq;
+import com.bwie.common.domain.request.CartPayReq;
+import com.bwie.common.domain.response.CartResp;
+import com.bwie.common.result.Result;
+import com.bwie.common.utils.JwtUtils;
+import com.bwie.goods.feign.UserFeign;
+import com.bwie.goods.mapper.CartMapper;
+import com.bwie.goods.service.CartService;
+import com.bwie.goods.service.GoodsService;
+import com.bwie.goods.service.MiddleService;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class CartServiceImpl implements CartService {
+ @Autowired
+ private HttpServletRequest request;
+ @Autowired
+ private CartMapper cartMapper;
+ @Autowired
+ private GoodsService goodsService;
+ @Autowired
+ private MiddleService middleService;
+ @Autowired
+ private UserFeign userFeign;
+
+ @Autowired
+ private RedissonClient RedissonClient;
+ @Override
+ public int addCart(CartAddReq req) {
+ String token = request.getHeader(TokenConstants.TOKEN);
+ String userId = JwtUtils.getUserId(token);
+ Cart cart = cartMapper.selectByUserIdAndGoodsId(userId, req.getGoodsId(),req.getSeckillId());
+ middleService.updNum(req);
+ int i = 0;
+ if (cart==null){
+ i= cartMapper.addCart(userId, req.getGoodsId(),req.getSeckillId());
+ }else {
+ i = cartMapper.updCart(userId, req.getGoodsId());
+ }
+ return i;
+ }
+
+ @Override
+ public List findList() {
+ String token = request.getHeader(TokenConstants.TOKEN);
+ String userId = JwtUtils.getUserId(token);
+ return cartMapper.findList(userId);
+ }
+
+ @Override
+ @Transactional
+ public int pay(CartPayReq req) {
+ String token = request.getHeader(TokenConstants.TOKEN);
+ String userId = JwtUtils.getUserId(token);
+ RLock lock = RedissonClient.getLock("pay");
+ try {
+ boolean b = lock.tryLock(10, 10, TimeUnit.SECONDS);
+ if (b){
+ Result integerResult = userFeign.updMoney(req.getSumPrice(), userId);
+ Integer data = integerResult.getData();
+ if (data!=null){
+ goodsService.updateGoodsNum(req.getPays());
+ cartMapper.deleteAll(userId);
+ }
+ }
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }finally {
+ lock.unlock();
+ }
+ return 0;
+ }
+
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/GoodsServiceImpl.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/GoodsServiceImpl.java
new file mode 100644
index 0000000..59666d6
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/GoodsServiceImpl.java
@@ -0,0 +1,69 @@
+package com.bwie.goods.service.impl;
+
+import com.bwie.common.domain.request.GoodsAddReq;
+import com.bwie.common.domain.request.GoodsUpdateReq;
+import com.bwie.common.domain.response.GoodsListResp;
+import com.bwie.common.domain.vo.Pay;
+import com.bwie.goods.mapper.GoodsMapper;
+import com.bwie.goods.service.GoodsService;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+@Service
+public class GoodsServiceImpl implements GoodsService {
+
+ @Autowired
+ private GoodsMapper goodsMapper;
+
+
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+ /**
+ * 查询所有商品
+ * @return
+ */
+ @Override
+ public List findList() {
+ List list = goodsMapper.findList();
+ return list;
+ }
+
+ /**
+ * 修改商品状态 并修改同步es
+ * @param req
+ * @return
+ */
+ @Override
+ public int updateGoods(GoodsUpdateReq req) {
+ req.setTime(new Date());
+ int i = goodsMapper.updateGoods(req);
+ rabbitTemplate.convertAndSend("UPD_ES",req,message -> {
+ String string = UUID.randomUUID().toString();
+ message.getMessageProperties().setMessageId(string);
+ return message;
+ });
+ return i;
+ }
+
+ @Override
+ public int addGoods(GoodsAddReq req) {
+ req.setTime(new Date());
+ int i = goodsMapper.addGoods(req);
+ return i;
+ }
+
+ @Override
+ @Transactional
+ public void updateGoodsNum(List pays) {
+ for (Pay pay : pays) {
+ goodsMapper.updateGoodsNum(pay);
+ }
+ }
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/MiddleServiceImpl.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/MiddleServiceImpl.java
new file mode 100644
index 0000000..8a6d3c2
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/MiddleServiceImpl.java
@@ -0,0 +1,52 @@
+package com.bwie.goods.service.impl;
+
+import com.bwie.common.domain.Cart;
+import com.bwie.common.domain.Middle;
+import com.bwie.common.domain.request.CartAddReq;
+import com.bwie.common.domain.request.MiddleAddReq;
+import com.bwie.common.domain.response.MiddleResp;
+import com.bwie.goods.mapper.MiddleMapper;
+import com.bwie.goods.service.MiddleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class MiddleServiceImpl implements MiddleService {
+ @Autowired
+ private MiddleMapper middleMapper;
+ @Override
+ @Transactional
+ public int addMiddle(MiddleAddReq req) {
+ middleMapper.deleteMiddle(req.getSeckillId());
+ return middleMapper.addMiddle(req.getSeckillId(),req.getGoods());
+ }
+
+ @Override
+ public List findList(Integer seckillId) {
+ return middleMapper.findList(seckillId);
+ }
+
+ @Override
+ public List findMiddleList() {
+ Date date = new Date();
+ SimpleDateFormat format = new SimpleDateFormat("HH:mm");
+ String nowTime = format.format(date);
+ return middleMapper.findMiddleList(nowTime);
+ }
+
+ @Override
+ public void updNum(CartAddReq req) {
+ middleMapper.updNum(req);
+ }
+
+ @Override
+ public Middle selectById(Integer id) {
+ return middleMapper.selectById(id);
+ }
+
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/SeckillServiceImpl.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/SeckillServiceImpl.java
new file mode 100644
index 0000000..bb6cc81
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/SeckillServiceImpl.java
@@ -0,0 +1,42 @@
+package com.bwie.goods.service.impl;
+
+import com.bwie.common.domain.request.MiddleAddReq;
+import com.bwie.common.domain.request.SeckillAddReq;
+import com.bwie.common.domain.request.SeckillListReq;
+import com.bwie.common.domain.response.SeckillResp;
+import com.bwie.goods.mapper.SeckillMapper;
+import com.bwie.goods.service.SeckillService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class SeckillServiceImpl implements SeckillService {
+ @Autowired
+ private SeckillMapper seckillMapper;
+
+ @Override
+ public PageInfo findList(SeckillListReq req) {
+ PageHelper.startPage(req.getPageNum(),req.getPageSize());
+ List list = seckillMapper.findList(req);
+ PageInfo pageInfo = new PageInfo<>(list);
+ return pageInfo;
+ }
+
+ @Override
+ public int addSeckill(SeckillAddReq req) {
+ req.setCreateTime(new Date());
+ return seckillMapper.addSeckill(req);
+ }
+
+
+
+ @Override
+ public List findAll() {
+ return seckillMapper.findALl();
+ }
+}
diff --git a/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/TypeServiceImpl.java b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/TypeServiceImpl.java
new file mode 100644
index 0000000..5992bb0
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/java/com/bwie/goods/service/impl/TypeServiceImpl.java
@@ -0,0 +1,20 @@
+package com.bwie.goods.service.impl;
+
+import com.bwie.common.domain.Type;
+import com.bwie.goods.mapper.TypeMapper;
+import com.bwie.goods.service.TypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class TypeServiceImpl implements TypeService {
+ @Autowired
+ private TypeMapper typeMapper;
+
+ @Override
+ public List findType() {
+ return typeMapper.findType();
+ }
+}
diff --git a/bwie-modules/bwie-goods/src/main/resources/bootstrap.yml b/bwie-modules/bwie-goods/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..0b3c473
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/resources/bootstrap.yml
@@ -0,0 +1,49 @@
+# Tomcat
+server:
+ port: 9003
+# Spring
+spring:
+ rabbitmq:
+ host: 139.224.34.9
+ port: 5672
+ username: guest
+ password: guest
+ virtual-host: /
+ listener:
+ simple:
+ prefetch: 1 # 默认每次取出一条消息消费, 消费完成取下一条
+ acknowledge-mode: manual # 设置消费端手动ack确认
+ retry:
+ enabled: true # 是否支持重试
+ publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
+ publisher-returns: true #确认消息已发送到队列(Queue)
+ main:
+ allow-circular-references: true
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
+ application:
+ # 应用名称
+ name: bwie-goods
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: 139.224.34.9:8848
+ namespace: week1
+ config:
+ # 配置中心地址
+ server-addr: 139.224.34.9:8848
+ namespace: week1
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+es:
+ host: 139.224.34.9
+ port: 9200
+ scheme: http
diff --git a/bwie-modules/bwie-goods/src/main/resources/mapper/CartMapper.xml b/bwie-modules/bwie-goods/src/main/resources/mapper/CartMapper.xml
new file mode 100644
index 0000000..ee56e11
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/resources/mapper/CartMapper.xml
@@ -0,0 +1,34 @@
+
+
+
+
+ insert into t_cart (user_id, goods_id,goods_num,seckill_id)
+ values (#{userId},#{goodsId},1,#{seckillId});
+
+
+ update t_cart
+ set goods_num=goods_num+1
+ where user_id=#{userId} and goods_id=#{goodsId};
+
+
+ delete
+ from t_cart
+ where user_id=#{userId}
+
+
+
+
+
+
diff --git a/bwie-modules/bwie-goods/src/main/resources/mapper/GoodsMapper.xml b/bwie-modules/bwie-goods/src/main/resources/mapper/GoodsMapper.xml
new file mode 100644
index 0000000..d26f6c7
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/resources/mapper/GoodsMapper.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+ update t_goods set goods_num = goods_num-#{goodsNum} where goods_id=#{goodsId}
+
+
diff --git a/bwie-modules/bwie-goods/src/main/resources/mapper/MiddleMapper.xml b/bwie-modules/bwie-goods/src/main/resources/mapper/MiddleMapper.xml
new file mode 100644
index 0000000..d0578f6
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/resources/mapper/MiddleMapper.xml
@@ -0,0 +1,42 @@
+
+
+
+
+ INSERT INTO `month8_12`.`t_middle` (`seckill_id`, `goods_id`, `seckill_price`, `seckill_num`)
+ VALUES
+
+ ( #{seckillId}, #{goods.goodsId}, #{goods.seckillPrice}, #{goods.seckillNum})
+
+
+
+
+ update t_middle
+ set seckill_num = seckill_num-1
+ where id = #{id}
+
+
+ delete
+ from t_middle
+ where seckill_id=#{seckillId}
+
+
+
+
+
diff --git a/bwie-modules/bwie-goods/src/main/resources/mapper/SeckillMapper.xml b/bwie-modules/bwie-goods/src/main/resources/mapper/SeckillMapper.xml
new file mode 100644
index 0000000..7f92198
--- /dev/null
+++ b/bwie-modules/bwie-goods/src/main/resources/mapper/SeckillMapper.xml
@@ -0,0 +1,26 @@
+
+
+
+
+ INSERT INTO `month8_12`.`t_seckill` (`seckill_name`, `seckill_start_time`, `seckill_end_time`, `seckill_pic`,
+ `seckill_status`, `create_time`)
+ VALUES (#{seckillName}, #{seckillStartTime}, #{seckillEndTime}, #{seckillPic}, #{seckillStatus}, #{createTime});
+
+
+
+
+
+
diff --git a/bwie-modules/bwie-rabbit/pom.xml b/bwie-modules/bwie-rabbit/pom.xml
new file mode 100644
index 0000000..277c4bc
--- /dev/null
+++ b/bwie-modules/bwie-rabbit/pom.xml
@@ -0,0 +1,36 @@
+
+
+ 4.0.0
+
+ com.bwie
+ bwie-modules
+ 1.0-SNAPSHOT
+
+
+ bwie-rabbit
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+ com.bwie
+ bwie-common
+ 1.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+
+
diff --git a/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/RabbitApplication.java b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/RabbitApplication.java
new file mode 100644
index 0000000..2508c3b
--- /dev/null
+++ b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/RabbitApplication.java
@@ -0,0 +1,11 @@
+package com.bwie.rabbitmq;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class RabbitApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(RabbitApplication.class,args);
+ }
+}
diff --git a/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/ConfirmCallbackConfig.java b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/ConfirmCallbackConfig.java
new file mode 100644
index 0000000..d025002
--- /dev/null
+++ b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/ConfirmCallbackConfig.java
@@ -0,0 +1,40 @@
+package com.bwie.rabbitmq.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;
+
+
+@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("消息发送到 broker 成功");
+ } else {
+ System.out.println("消息发送到 broker 失败,失败的原因:" + cause);
+ }
+ }
+
+}
diff --git a/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/RabbitAdminConfig.java b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/RabbitAdminConfig.java
new file mode 100644
index 0000000..42dca5e
--- /dev/null
+++ b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/RabbitAdminConfig.java
@@ -0,0 +1,50 @@
+package com.bwie.rabbitmq.config;
+
+import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 构建 RabbitAdmin
+ */
+@Configuration
+public class RabbitAdminConfig {
+
+ @Value("${spring.rabbitmq.host}")
+ private String host;
+ @Value("${spring.rabbitmq.username}")
+ private String username;
+ @Value("${spring.rabbitmq.password}")
+ private String password;
+ @Value("${spring.rabbitmq.virtual-host}")
+ private String virtualhost;
+
+ @Bean
+ public ConnectionFactory connectionFactory() {
+ CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
+ connectionFactory.setAddresses(host);
+ connectionFactory.setUsername(username);
+ connectionFactory.setPassword(password);
+ connectionFactory.setVirtualHost(virtualhost);
+ // 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效
+ connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);
+ connectionFactory.setPublisherReturns(true);
+ return connectionFactory;
+ }
+
+
+ /**
+ * rabbitAdmin
+ * @param connectionFactory
+ * @return
+ */
+ @Bean
+ public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
+ RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
+ rabbitAdmin.setAutoStartup(true);
+ return rabbitAdmin;
+ }
+}
diff --git a/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/RabbitmqConfig.java b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/RabbitmqConfig.java
new file mode 100644
index 0000000..f57379c
--- /dev/null
+++ b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/RabbitmqConfig.java
@@ -0,0 +1,15 @@
+package com.bwie.rabbitmq.config;
+
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class RabbitmqConfig {
+ // 消息转换配置
+ @Bean
+ public MessageConverter jsonMessageConverter(){
+ return new Jackson2JsonMessageConverter();
+ }
+}
diff --git a/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/ReturnsCallbackConfig.java b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/ReturnsCallbackConfig.java
new file mode 100644
index 0000000..8d8de0f
--- /dev/null
+++ b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/config/ReturnsCallbackConfig.java
@@ -0,0 +1,37 @@
+package com.bwie.rabbitmq.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 ReturnsCallbackConfig implements RabbitTemplate.ReturnsCallback {
+
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+
+ /**
+ * 当前bean初始化的时候执行
+ */
+ @PostConstruct
+ public void init() {
+ this.rabbitTemplate.setReturnsCallback(this);
+ }
+
+ /**
+ * 消息发送达到 queue 失败执行
+ *
+ * @param returnedMessage the returned message and metadata.
+ */
+ @Override
+ public void returnedMessage(ReturnedMessage returnedMessage) {
+ System.out.println("消息" + returnedMessage.getMessage().toString() +
+ "被交换机" + returnedMessage.getExchange() + "回退!"
+ + "退回原因为:" + returnedMessage.getReplyText());
+ // TODO 回退了所有的信息,可做补偿机制
+ }
+}
diff --git a/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/consumer/SMSConsumer.java b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/consumer/SMSConsumer.java
new file mode 100644
index 0000000..d2dfa6c
--- /dev/null
+++ b/bwie-modules/bwie-rabbit/src/main/java/com/bwie/rabbitmq/consumer/SMSConsumer.java
@@ -0,0 +1,47 @@
+package com.bwie.rabbitmq.consumer;
+
+import com.bwie.common.utils.SendMessageUtil;
+import com.rabbitmq.client.Channel;
+import lombok.extern.log4j.Log4j2;
+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;
+import java.util.HashMap;
+
+@Log4j2
+@Component
+public class SMSConsumer {
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+
+
+ @RabbitListener(queuesToDeclare = @Queue("SEND_SMS"))
+ public void updEs(HashMap map, Message message, Channel channel){
+ log.info("开始发送短信");
+ String messageId = message.getMessageProperties().getMessageId();
+ Long count = redisTemplate.opsForSet().add("SEND_SMS", messageId);
+ if (count>0){
+ String userTel = map.get("userTel");
+ String text = map.get("text");
+ log.info("手机号:{} 内容:{}",userTel,text);
+ SendMessageUtil sendMessageUtil = new SendMessageUtil();
+ sendMessageUtil.sendSms(userTel,text);
+ log.info("短信发送完成");
+ try {
+ channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
+ } catch (IOException e) {
+ redisTemplate.opsForSet().remove("SEND_SMS", messageId);
+ try {
+ channel.basicReject(message.getMessageProperties().getDeliveryTag(),true);
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ }
+ }
+}
diff --git a/bwie-modules/bwie-rabbit/src/main/resources/bootstrap.yml b/bwie-modules/bwie-rabbit/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..72cbda1
--- /dev/null
+++ b/bwie-modules/bwie-rabbit/src/main/resources/bootstrap.yml
@@ -0,0 +1,50 @@
+# Tomcat
+server:
+ port: 9006
+# Spring
+spring:
+ redis:
+ host: 139.224.34.9
+ port: 6379
+ password: cyx12345
+ rabbitmq:
+ host: 139.224.34.9
+ port: 5672
+ username: guest
+ password: guest
+ virtual-host: /
+ listener:
+ simple:
+ prefetch: 1 # 默认每次取出一条消息消费, 消费完成取下一条
+ acknowledge-mode: manual # 设置消费端手动ack确认
+ retry:
+ enabled: true # 是否支持重试
+ publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
+ publisher-returns: true #确认消息已发送到队列(Queue)
+ main:
+ allow-circular-references: true
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
+ application:
+ # 应用名称
+ name: bwie-rabbitmq
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: 139.224.34.9:8848
+ namespace: week1
+ config:
+ # 配置中心地址
+ server-addr: 139.224.34.9:8848
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ namespace: week1
+
diff --git a/bwie-modules/bwie-system/pom.xml b/bwie-modules/bwie-system/pom.xml
new file mode 100644
index 0000000..2ff461b
--- /dev/null
+++ b/bwie-modules/bwie-system/pom.xml
@@ -0,0 +1,51 @@
+
+
+ 4.0.0
+
+ com.bwie
+ bwie-modules
+ 1.0-SNAPSHOT
+
+
+ bwie-system
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ com.bwie
+ bwie-common
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ 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
+
+
+
diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/SystemApplication.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/SystemApplication.java
new file mode 100644
index 0000000..fb03a4e
--- /dev/null
+++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/SystemApplication.java
@@ -0,0 +1,11 @@
+package com.bwie.system;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class SystemApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(SystemApplication.class,args);
+ }
+}
diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/UserController.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/UserController.java
new file mode 100644
index 0000000..6dddfff
--- /dev/null
+++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/controller/UserController.java
@@ -0,0 +1,61 @@
+package com.bwie.system.controller;
+
+import com.bwie.common.domain.User;
+import com.bwie.common.domain.request.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.domain.response.UserResp;
+import com.bwie.common.result.Result;
+import com.bwie.system.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("user")
+public class UserController {
+ @Autowired
+ private UserService userService;
+
+
+ /**
+ * 通过用户查询用户
+ * @param req
+ * @return
+ */
+ @PostMapping("/login")
+ public Result login(@RequestBody UserLoginReq req){
+ User user = userService.selectByUserName(req);
+ return Result.success(user);
+ }
+ @GetMapping("/findUser")
+ public Result findByRole(HttpServletRequest request){
+ UserResp user = userService.findUser();
+ return Result.success(user);
+ }
+ @GetMapping("/findById/{userId}")
+ public Result findById(@PathVariable String userId){
+ UserResp user = userService.findById(userId);
+ return Result.success(user);
+ }
+ @PostMapping("updMoney/{sumPrice}/{userId}")
+ public Result updMoney(@PathVariable BigDecimal sumPrice,@PathVariable String userId){
+ int updMoney = userService.updMoney(sumPrice,userId);
+ return Result.success(updMoney);
+
+ }
+
+ /**
+ * 注册
+ * @param user
+ * @return
+ */
+ @PostMapping("register")
+ public Result register(@RequestBody RegisterUser user){
+ int register = userService.register(user);
+ return Result.success(register);
+
+ }
+
+}
diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java
new file mode 100644
index 0000000..65f911b
--- /dev/null
+++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/mapper/UserMapper.java
@@ -0,0 +1,31 @@
+package com.bwie.system.mapper;
+
+import com.bwie.common.domain.User;
+import com.bwie.common.domain.request.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.domain.response.UserResp;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.math.BigDecimal;
+
+@Mapper
+public interface UserMapper {
+
+
+ @Select("select * from t_user where user_name = #{userName}")
+ User selectByUserName(UserLoginReq req);
+
+ @Select("select * from t_user where user_id =#{userId}")
+ UserResp findById(String userId);
+
+ @Insert("INSERT INTO `month8_12`.`t_user` ( `user_tel`, `user_name`, `user_pwd`,`user_role`) " +
+ "VALUES ( #{userTel}, #{userName}, #{userPwd}, 2)")
+ int addUser(RegisterUser user);
+
+ @Update("update t_user set user_money = user_money -#{sumMoney} where user_id =#{userId} ;")
+ int updMoney(@Param("sumMoney") BigDecimal sumMoney, @Param("userId") String userId);
+}
diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/UserService.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/UserService.java
new file mode 100644
index 0000000..7fc6009
--- /dev/null
+++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/UserService.java
@@ -0,0 +1,27 @@
+package com.bwie.system.service;
+
+import com.bwie.common.domain.User;
+import com.bwie.common.domain.request.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.domain.response.UserResp;
+
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+
+public interface UserService {
+ /**
+ * 通过用户查询用户
+ * @param req
+ * @return
+ */
+ User selectByUserName(UserLoginReq req);
+
+
+ UserResp findUser();
+
+ int register(RegisterUser user);
+
+ UserResp findById(String userId);
+
+ int updMoney(BigDecimal sumPrice, String userId);
+}
diff --git a/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000..7a46ad9
--- /dev/null
+++ b/bwie-modules/bwie-system/src/main/java/com/bwie/system/service/impl/UserServiceImpl.java
@@ -0,0 +1,55 @@
+package com.bwie.system.service.impl;
+
+import com.bwie.common.constants.TokenConstants;
+import com.bwie.common.domain.User;
+import com.bwie.common.domain.request.RegisterUser;
+import com.bwie.common.domain.request.UserLoginReq;
+import com.bwie.common.domain.response.UserResp;
+import com.bwie.common.utils.JwtUtils;
+import com.bwie.system.mapper.UserMapper;
+import com.bwie.system.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+
+@Service
+public class UserServiceImpl implements UserService {
+ @Autowired
+ private UserMapper userMapper;
+
+ @Autowired
+ private HttpServletRequest request;
+ /**
+ * 通过用户查询用户
+ * @param req
+ * @return
+ */
+ @Override
+ public User selectByUserName(UserLoginReq req) {
+ return userMapper.selectByUserName(req);
+ }
+
+ @Override
+ public UserResp findUser() {
+ String token = request.getHeader(TokenConstants.TOKEN);
+ String userId = JwtUtils.getUserId(token);
+ return userMapper.findById(userId);
+ }
+
+ @Override
+ public int register(RegisterUser user) {
+ return userMapper.addUser(user);
+ }
+
+ @Override
+ public UserResp findById(String userId) {
+ return userMapper.findById(userId);
+ }
+
+ @Override
+ public int updMoney(BigDecimal sumPrice,String userId) {
+ return userMapper.updMoney(sumPrice,userId);
+ }
+}
diff --git a/bwie-modules/bwie-system/src/main/resources/bootstrap.yml b/bwie-modules/bwie-system/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..fff5881
--- /dev/null
+++ b/bwie-modules/bwie-system/src/main/resources/bootstrap.yml
@@ -0,0 +1,31 @@
+# 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: 139.224.34.9:8848
+ namespace: week1
+ config:
+ # 配置中心地址
+ server-addr: 139.224.34.9:8848
+ namespace: week1
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
diff --git a/bwie-modules/pom.xml b/bwie-modules/pom.xml
new file mode 100644
index 0000000..0121137
--- /dev/null
+++ b/bwie-modules/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ com.bwie
+ month_maven_8_12
+ 1.0-SNAPSHOT
+
+
+ bwie-modules
+ pom
+
+ bwie-system
+ bwie-goods
+ bwie-es
+ bwie-rabbit
+
+
+
+ 17
+ 17
+ UTF-8
+
+
+
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..eb76424
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,125 @@
+
+
+ 4.0.0
+
+ com.bwie
+ month_maven_8_12
+ 1.0-SNAPSHOT
+ pom
+
+ bwie-auth
+ bwie-common
+ bwie-gateway
+ bwie-modules
+
+
+
+ 8
+ 8
+ UTF-8
+ 2021.0.0
+ 2021.1
+ 0.9.1
+ 1.2.80
+ 5.8.3
+ 2.0.1
+ 1.0-SNAPSHOT
+ 1.2.8
+ 2.2.2
+ 1.4.1
+ 1.26.5
+ 3.12.0
+
+
+
+
+ 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
+ ${jwt.version}
+
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+
+ cn.hutool
+ hutool-all
+ ${hutool.version}
+
+
+
+ com.aliyun
+ dysmsapi20170525
+ ${dysms.version}
+
+
+
+ com.bwie
+ bwie-common
+ ${common.version}
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ ${mybatis.version}
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ ${pagehelper.version}
+
+
+
+ com.github.tobato
+ fastdfs-client
+ ${fastdfs.version}
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ ${oss.version}
+
+
+
+