From 51e2791a4982e0c68a71f0988fb5dfd9b51c2df5 Mon Sep 17 00:00:00 2001
From: superlishunqin <852326703@qq.com>
Date: Thu, 25 Sep 2025 05:52:22 +0800
Subject: [PATCH] =?UTF-8?q?=E5=86=9C=E4=BA=A7=E5=93=81=E7=9B=B4=E9=94=80?=
=?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=AE=8C=E6=95=B4=E9=A1=B9=E7=9B=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 204 +++
README.md | 351 ++++
backend/README.md | 0
backend/pom.xml | 133 ++
backend/pom.xml.backup2 | 206 +++
backend/pom.xml.backup3 | 122 ++
.../com/sunnyfarm/SunnyFarmApplication.java | 12 +
.../java/com/sunnyfarm/common/PageResult.java | 22 +
.../java/com/sunnyfarm/common/Result.java | 42 +
.../com/sunnyfarm/config/AlipayConfig.java | 28 +
.../com/sunnyfarm/config/AsyncConfig.java | 9 +
.../java/com/sunnyfarm/config/CosConfig.java | 33 +
.../sunnyfarm/config/MybatisPlusConfig.java | 21 +
.../com/sunnyfarm/config/PasswordConfig.java | 15 +
.../java/com/sunnyfarm/config/WebConfig.java | 93 +
.../config/properties/AlipayProperties.java | 37 +
.../config/properties/CosProperties.java | 25 +
.../config/properties/EmailProperties.java | 14 +
.../controller/AddressController.java | 129 ++
.../sunnyfarm/controller/AdminController.java | 631 +++++++
.../controller/AnnouncementController.java | 99 ++
.../sunnyfarm/controller/CartController.java | 188 ++
.../controller/CategoryController.java | 70 +
.../sunnyfarm/controller/ChatController.java | 143 ++
.../controller/CommentController.java | 204 +++
.../controller/ConfigTestController.java | 34 +
.../controller/FavoriteController.java | 126 ++
.../sunnyfarm/controller/FileController.java | 66 +
.../sunnyfarm/controller/InitController.java | 82 +
.../controller/InventoryController.java | 133 ++
.../controller/MerchantController.java | 431 +++++
.../sunnyfarm/controller/OrderController.java | 212 +++
.../controller/PaymentController.java | 192 ++
.../controller/PaymentStatusController.java | 116 ++
.../controller/ProductController.java | 227 +++
.../controller/StatisticsController.java | 55 +
.../sunnyfarm/controller/UserController.java | 206 +++
.../com/sunnyfarm/dto/AdminDashboardDTO.java | 35 +
.../com/sunnyfarm/dto/AdminLoginRequest.java | 15 +
.../sunnyfarm/dto/AdminMerchantPageDTO.java | 11 +
.../com/sunnyfarm/dto/AdminOrderPageDTO.java | 14 +
.../sunnyfarm/dto/AdminPasswordRequest.java | 20 +
.../sunnyfarm/dto/AdminProductPageDTO.java | 12 +
.../com/sunnyfarm/dto/AdminUpdateRequest.java | 20 +
.../com/sunnyfarm/dto/AdminUserPageDTO.java | 12 +
.../java/com/sunnyfarm/dto/CartItemDTO.java | 32 +
.../com/sunnyfarm/dto/ChatSessionDTO.java | 20 +
.../com/sunnyfarm/dto/EmailCodeRequest.java | 25 +
.../sunnyfarm/dto/InventoryWithProduct.java | 40 +
.../sunnyfarm/dto/MerchantDashboardDTO.java | 87 +
.../dto/MerchantRegisterRequest.java | 47 +
.../com/sunnyfarm/dto/OrderCreateRequest.java | 61 +
.../com/sunnyfarm/dto/OrderDetailDTO.java | 37 +
.../java/com/sunnyfarm/dto/OrderItemDTO.java | 18 +
.../com/sunnyfarm/dto/RegisterRequest.java | 73 +
.../com/sunnyfarm/dto/SendMessageRequest.java | 19 +
.../com/sunnyfarm/dto/VerifyCodeRequest.java | 39 +
.../java/com/sunnyfarm/entity/Address.java | 45 +
.../main/java/com/sunnyfarm/entity/Admin.java | 49 +
.../com/sunnyfarm/entity/Announcement.java | 57 +
.../java/com/sunnyfarm/entity/BaseEntity.java | 23 +
.../main/java/com/sunnyfarm/entity/Cart.java | 31 +
.../java/com/sunnyfarm/entity/Category.java | 76 +
.../com/sunnyfarm/entity/ChatMessage.java | 47 +
.../com/sunnyfarm/entity/ChatSession.java | 46 +
.../java/com/sunnyfarm/entity/Comment.java | 50 +
.../java/com/sunnyfarm/entity/Favorite.java | 22 +
.../java/com/sunnyfarm/entity/Inventory.java | 25 +
.../java/com/sunnyfarm/entity/Merchant.java | 43 +
.../main/java/com/sunnyfarm/entity/Order.java | 91 +
.../com/sunnyfarm/entity/OrderDetail.java | 58 +
.../java/com/sunnyfarm/entity/Payment.java | 45 +
.../java/com/sunnyfarm/entity/Permission.java | 32 +
.../java/com/sunnyfarm/entity/Product.java | 90 +
.../com/sunnyfarm/entity/ProductImage.java | 24 +
.../main/java/com/sunnyfarm/entity/Role.java | 33 +
.../com/sunnyfarm/entity/SystemConfig.java | 40 +
.../java/com/sunnyfarm/entity/SystemLog.java | 91 +
.../main/java/com/sunnyfarm/entity/User.java | 62 +
.../exception/BusinessException.java | 20 +
.../exception/GlobalExceptionHandler.java | 96 +
.../interceptor/JwtAuthInterceptor.java | 105 ++
.../com/sunnyfarm/mapper/AddressMapper.java | 26 +
.../com/sunnyfarm/mapper/AdminMapper.java | 22 +
.../sunnyfarm/mapper/AnnouncementMapper.java | 9 +
.../java/com/sunnyfarm/mapper/CartMapper.java | 18 +
.../com/sunnyfarm/mapper/CategoryMapper.java | 22 +
.../sunnyfarm/mapper/ChatMessageMapper.java | 34 +
.../sunnyfarm/mapper/ChatSessionMapper.java | 27 +
.../com/sunnyfarm/mapper/CommentMapper.java | 45 +
.../com/sunnyfarm/mapper/FavoriteMapper.java | 39 +
.../com/sunnyfarm/mapper/InventoryMapper.java | 50 +
.../com/sunnyfarm/mapper/MerchantMapper.java | 48 +
.../sunnyfarm/mapper/OrderDetailMapper.java | 27 +
.../com/sunnyfarm/mapper/OrderMapper.java | 55 +
.../com/sunnyfarm/mapper/PaymentMapper.java | 9 +
.../sunnyfarm/mapper/PermissionMapper.java | 17 +
.../sunnyfarm/mapper/ProductImageMapper.java | 32 +
.../com/sunnyfarm/mapper/ProductMapper.java | 52 +
.../java/com/sunnyfarm/mapper/RoleMapper.java | 15 +
.../sunnyfarm/mapper/SystemConfigMapper.java | 16 +
.../com/sunnyfarm/mapper/SystemLogMapper.java | 24 +
.../java/com/sunnyfarm/mapper/UserMapper.java | 23 +
.../com/sunnyfarm/service/AddressService.java | 44 +
.../com/sunnyfarm/service/AdminService.java | 48 +
.../com/sunnyfarm/service/AlipayService.java | 32 +
.../service/AnnouncementService.java | 27 +
.../com/sunnyfarm/service/CartService.java | 80 +
.../sunnyfarm/service/CategoryService.java | 59 +
.../com/sunnyfarm/service/ChatService.java | 60 +
.../com/sunnyfarm/service/CommentService.java | 61 +
.../sunnyfarm/service/FavoriteService.java | 44 +
.../sunnyfarm/service/InventoryService.java | 87 +
.../sunnyfarm/service/MerchantService.java | 72 +
.../sunnyfarm/service/OrderDetailService.java | 19 +
.../com/sunnyfarm/service/OrderService.java | 73 +
.../com/sunnyfarm/service/PaymentService.java | 39 +
.../sunnyfarm/service/PermissionService.java | 14 +
.../service/ProductImageService.java | 44 +
.../com/sunnyfarm/service/ProductService.java | 111 ++
.../com/sunnyfarm/service/RoleService.java | 12 +
.../sunnyfarm/service/StatisticsService.java | 26 +
.../service/SystemConfigService.java | 29 +
.../sunnyfarm/service/SystemLogService.java | 92 +
.../com/sunnyfarm/service/UserService.java | 69 +
.../service/impl/AddressServiceImpl.java | 93 +
.../service/impl/AdminServiceImpl.java | 138 ++
.../service/impl/AlipayServiceImpl.java | 281 +++
.../service/impl/AnnouncementServiceImpl.java | 105 ++
.../service/impl/CartServiceImpl.java | 218 +++
.../service/impl/CategoryServiceImpl.java | 122 ++
.../service/impl/ChatServiceImpl.java | 172 ++
.../service/impl/CommentServiceImpl.java | 133 ++
.../service/impl/FavoriteServiceImpl.java | 137 ++
.../service/impl/InventoryServiceImpl.java | 177 ++
.../service/impl/MerchantServiceImpl.java | 227 +++
.../service/impl/OrderDetailServiceImpl.java | 25 +
.../service/impl/OrderServiceImpl.java | 750 ++++++++
.../service/impl/PaymentServiceImpl.java | 111 ++
.../service/impl/PermissionServiceImpl.java | 18 +
.../service/impl/ProductImageServiceImpl.java | 89 +
.../service/impl/ProductServiceImpl.java | 370 ++++
.../service/impl/RoleServiceImpl.java | 16 +
.../service/impl/StatisticsServiceImpl.java | 212 +++
.../service/impl/SystemConfigServiceImpl.java | 145 ++
.../service/impl/SystemLogServiceImpl.java | 197 +++
.../service/impl/UserServiceImpl.java | 263 +++
.../com/sunnyfarm/util/FileUploadUtil.java | 107 ++
.../main/java/com/sunnyfarm/util/JwtUtil.java | 148 ++
.../java/com/sunnyfarm/util/OrderNoUtil.java | 40 +
.../java/com/sunnyfarm/util/PasswordUtil.java | 22 +
.../java/com/sunnyfarm/util/RedisUtil.java | 70 +
.../java/com/sunnyfarm/util/UserContext.java | 48 +
.../resources/application-dev.yml.example | 97 +
.../resources/application-prod.yml.example | 100 ++
.../resources/application-prod.yml.template | 97 +
backend/src/main/resources/application.yml | 5 +
.../src/main/resources/mapper/AdminMapper.xml | 45 +
.../src/main/resources/mapper/CartMapper.xml | 33 +
.../resources/mapper/ChatMessageMapper.xml | 65 +
.../resources/mapper/ChatSessionMapper.xml | 62 +
.../main/resources/mapper/FavoriteMapper.xml | 52 +
.../main/resources/mapper/InventoryMapper.xml | 132 ++
.../main/resources/mapper/MerchantMapper.xml | 165 ++
.../resources/mapper/OrderDetailMapper.xml | 36 +
.../resources/mapper/PermissionMapper.xml | 15 +
.../src/main/resources/mapper/RoleMapper.xml | 39 +
frontend/index.html | 12 +
frontend/package-lock.json | 1371 +++++++++++++++
frontend/package.json | 21 +
frontend/public/alipay-logo.png | 4 +
frontend/public/alipay-logo.svg | 6 +
frontend/public/brands/alipay.svg | 5 +
frontend/src/App.vue | 28 +
frontend/src/api/address.js | 41 +
frontend/src/api/admin.js | 106 ++
frontend/src/api/announcement.js | 33 +
frontend/src/api/cart.js | 64 +
frontend/src/api/category.js | 21 +
frontend/src/api/chat.js | 45 +
frontend/src/api/email.js | 11 +
frontend/src/api/favorite.js | 60 +
frontend/src/api/inventory.js | 53 +
frontend/src/api/merchant.js | 36 +
frontend/src/api/order.js | 48 +
frontend/src/api/payment.js | 35 +
frontend/src/api/product.js | 74 +
frontend/src/api/review.js | 53 +
frontend/src/api/user.js | 31 +
frontend/src/components/AnnouncementModal.vue | 992 +++++++++++
frontend/src/components/ChatWindow.vue | 390 +++++
frontend/src/components/ReviewModal.vue | 206 +++
frontend/src/components/RoleSelector.vue | 165 ++
frontend/src/layouts/AdminLayout.vue | 270 +++
frontend/src/layouts/MerchantLayout.vue | 306 ++++
frontend/src/main.js | 10 +
frontend/src/router/index.js | 240 +++
frontend/src/store/admin.js | 54 +
frontend/src/store/merchant.js | 53 +
frontend/src/store/user.js | 47 +
frontend/src/utils/request.js | 141 ++
frontend/src/views/Home.vue | 1126 ++++++++++++
frontend/src/views/Login.vue | 354 ++++
frontend/src/views/Register.vue | 566 ++++++
frontend/src/views/admin/Dashboard.vue | 382 ++++
frontend/src/views/admin/Login.vue | 197 +++
.../src/views/admin/MerchantManagement.vue | 321 ++++
frontend/src/views/admin/OrderManagement.vue | 391 +++++
.../src/views/admin/ProductManagement.vue | 360 ++++
frontend/src/views/admin/SystemManagement.vue | 654 +++++++
frontend/src/views/admin/UserManagement.vue | 288 +++
.../admin/merchants/MerchantManagement.vue | 444 +++++
.../views/admin/orders/OrderManagement.vue | 249 +++
.../admin/products/ProductManagement.vue | 272 +++
.../views/admin/profile/ProfileSettings.vue | 504 ++++++
.../views/admin/system/SystemManagement.vue | 656 +++++++
.../src/views/admin/users/UserManagement.vue | 242 +++
frontend/src/views/checkout/Checkout.vue | 780 +++++++++
frontend/src/views/merchant/Dashboard.vue | 645 +++++++
frontend/src/views/merchant/Login.vue | 285 +++
frontend/src/views/merchant/Register.vue | 624 +++++++
.../merchant/customers/CustomerManagement.vue | 622 +++++++
.../merchant/customers/CustomerService.vue | 580 ++++++
.../inventory/InventoryManagement.vue | 1069 +++++++++++
.../views/merchant/orders/OrderManagement.vue | 729 ++++++++
.../views/merchant/products/ProductForm.vue | 694 ++++++++
.../merchant/products/ProductManagement.vue | 347 ++++
.../merchant/settings/ProfileSettings.vue | 748 ++++++++
.../merchant/statistics/StatisticsView.vue | 909 ++++++++++
frontend/src/views/payment/PaymentPage.vue | 179 ++
frontend/src/views/product/ProductDetail.vue | 1560 +++++++++++++++++
frontend/src/views/user/Addresses.vue | 645 +++++++
frontend/src/views/user/Announcements.vue | 1194 +++++++++++++
frontend/src/views/user/Cart.vue | 725 ++++++++
frontend/src/views/user/Favorites.vue | 922 ++++++++++
frontend/src/views/user/OrderDetail.vue | 1046 +++++++++++
frontend/src/views/user/Orders.vue | 714 ++++++++
frontend/src/views/user/Profile.vue | 537 ++++++
frontend/vite.config.js | 21 +
sql/init.sql | 960 ++++++++++
vite.config.js | 35 +
241 files changed, 42386 insertions(+)
create mode 100644 .gitignore
create mode 100644 README.md
create mode 100644 backend/README.md
create mode 100644 backend/pom.xml
create mode 100644 backend/pom.xml.backup2
create mode 100644 backend/pom.xml.backup3
create mode 100644 backend/src/main/java/com/sunnyfarm/SunnyFarmApplication.java
create mode 100644 backend/src/main/java/com/sunnyfarm/common/PageResult.java
create mode 100644 backend/src/main/java/com/sunnyfarm/common/Result.java
create mode 100644 backend/src/main/java/com/sunnyfarm/config/AlipayConfig.java
create mode 100644 backend/src/main/java/com/sunnyfarm/config/AsyncConfig.java
create mode 100644 backend/src/main/java/com/sunnyfarm/config/CosConfig.java
create mode 100644 backend/src/main/java/com/sunnyfarm/config/MybatisPlusConfig.java
create mode 100644 backend/src/main/java/com/sunnyfarm/config/PasswordConfig.java
create mode 100644 backend/src/main/java/com/sunnyfarm/config/WebConfig.java
create mode 100644 backend/src/main/java/com/sunnyfarm/config/properties/AlipayProperties.java
create mode 100644 backend/src/main/java/com/sunnyfarm/config/properties/CosProperties.java
create mode 100644 backend/src/main/java/com/sunnyfarm/config/properties/EmailProperties.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/AddressController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/AdminController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/AnnouncementController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/CartController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/CategoryController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/ChatController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/CommentController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/ConfigTestController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/FavoriteController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/FileController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/InitController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/InventoryController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/MerchantController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/OrderController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/PaymentController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/PaymentStatusController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/ProductController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/StatisticsController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/controller/UserController.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/AdminDashboardDTO.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/AdminLoginRequest.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/AdminMerchantPageDTO.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/AdminOrderPageDTO.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/AdminPasswordRequest.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/AdminProductPageDTO.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/AdminUpdateRequest.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/AdminUserPageDTO.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/CartItemDTO.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/ChatSessionDTO.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/EmailCodeRequest.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/InventoryWithProduct.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/MerchantDashboardDTO.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/MerchantRegisterRequest.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/OrderCreateRequest.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/OrderDetailDTO.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/OrderItemDTO.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/RegisterRequest.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/SendMessageRequest.java
create mode 100644 backend/src/main/java/com/sunnyfarm/dto/VerifyCodeRequest.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Address.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Admin.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Announcement.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/BaseEntity.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Cart.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Category.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/ChatMessage.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/ChatSession.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Comment.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Favorite.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Inventory.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Merchant.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Order.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/OrderDetail.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Payment.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Permission.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Product.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/ProductImage.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/Role.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/SystemConfig.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/SystemLog.java
create mode 100644 backend/src/main/java/com/sunnyfarm/entity/User.java
create mode 100644 backend/src/main/java/com/sunnyfarm/exception/BusinessException.java
create mode 100644 backend/src/main/java/com/sunnyfarm/exception/GlobalExceptionHandler.java
create mode 100644 backend/src/main/java/com/sunnyfarm/interceptor/JwtAuthInterceptor.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/AddressMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/AdminMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/AnnouncementMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/CartMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/CategoryMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/ChatMessageMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/ChatSessionMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/CommentMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/FavoriteMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/InventoryMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/MerchantMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/OrderDetailMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/OrderMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/PaymentMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/PermissionMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/ProductImageMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/ProductMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/RoleMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/SystemConfigMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/SystemLogMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/mapper/UserMapper.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/AddressService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/AdminService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/AlipayService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/AnnouncementService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/CartService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/CategoryService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/ChatService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/CommentService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/FavoriteService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/InventoryService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/MerchantService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/OrderDetailService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/OrderService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/PaymentService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/PermissionService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/ProductImageService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/ProductService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/RoleService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/StatisticsService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/SystemConfigService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/SystemLogService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/UserService.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/AddressServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/AdminServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/AlipayServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/AnnouncementServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/CartServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/CategoryServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/ChatServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/CommentServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/FavoriteServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/InventoryServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/MerchantServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/OrderDetailServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/OrderServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/PaymentServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/PermissionServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/ProductImageServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/ProductServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/RoleServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/StatisticsServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/SystemConfigServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/SystemLogServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/service/impl/UserServiceImpl.java
create mode 100644 backend/src/main/java/com/sunnyfarm/util/FileUploadUtil.java
create mode 100644 backend/src/main/java/com/sunnyfarm/util/JwtUtil.java
create mode 100644 backend/src/main/java/com/sunnyfarm/util/OrderNoUtil.java
create mode 100644 backend/src/main/java/com/sunnyfarm/util/PasswordUtil.java
create mode 100644 backend/src/main/java/com/sunnyfarm/util/RedisUtil.java
create mode 100644 backend/src/main/java/com/sunnyfarm/util/UserContext.java
create mode 100644 backend/src/main/resources/application-dev.yml.example
create mode 100644 backend/src/main/resources/application-prod.yml.example
create mode 100644 backend/src/main/resources/application-prod.yml.template
create mode 100644 backend/src/main/resources/application.yml
create mode 100644 backend/src/main/resources/mapper/AdminMapper.xml
create mode 100644 backend/src/main/resources/mapper/CartMapper.xml
create mode 100644 backend/src/main/resources/mapper/ChatMessageMapper.xml
create mode 100644 backend/src/main/resources/mapper/ChatSessionMapper.xml
create mode 100644 backend/src/main/resources/mapper/FavoriteMapper.xml
create mode 100644 backend/src/main/resources/mapper/InventoryMapper.xml
create mode 100644 backend/src/main/resources/mapper/MerchantMapper.xml
create mode 100644 backend/src/main/resources/mapper/OrderDetailMapper.xml
create mode 100644 backend/src/main/resources/mapper/PermissionMapper.xml
create mode 100644 backend/src/main/resources/mapper/RoleMapper.xml
create mode 100644 frontend/index.html
create mode 100644 frontend/package-lock.json
create mode 100644 frontend/package.json
create mode 100644 frontend/public/alipay-logo.png
create mode 100644 frontend/public/alipay-logo.svg
create mode 100644 frontend/public/brands/alipay.svg
create mode 100644 frontend/src/App.vue
create mode 100644 frontend/src/api/address.js
create mode 100644 frontend/src/api/admin.js
create mode 100644 frontend/src/api/announcement.js
create mode 100644 frontend/src/api/cart.js
create mode 100644 frontend/src/api/category.js
create mode 100644 frontend/src/api/chat.js
create mode 100644 frontend/src/api/email.js
create mode 100644 frontend/src/api/favorite.js
create mode 100644 frontend/src/api/inventory.js
create mode 100644 frontend/src/api/merchant.js
create mode 100644 frontend/src/api/order.js
create mode 100644 frontend/src/api/payment.js
create mode 100644 frontend/src/api/product.js
create mode 100644 frontend/src/api/review.js
create mode 100644 frontend/src/api/user.js
create mode 100644 frontend/src/components/AnnouncementModal.vue
create mode 100644 frontend/src/components/ChatWindow.vue
create mode 100644 frontend/src/components/ReviewModal.vue
create mode 100644 frontend/src/components/RoleSelector.vue
create mode 100644 frontend/src/layouts/AdminLayout.vue
create mode 100644 frontend/src/layouts/MerchantLayout.vue
create mode 100644 frontend/src/main.js
create mode 100644 frontend/src/router/index.js
create mode 100644 frontend/src/store/admin.js
create mode 100644 frontend/src/store/merchant.js
create mode 100644 frontend/src/store/user.js
create mode 100644 frontend/src/utils/request.js
create mode 100644 frontend/src/views/Home.vue
create mode 100644 frontend/src/views/Login.vue
create mode 100644 frontend/src/views/Register.vue
create mode 100644 frontend/src/views/admin/Dashboard.vue
create mode 100644 frontend/src/views/admin/Login.vue
create mode 100644 frontend/src/views/admin/MerchantManagement.vue
create mode 100644 frontend/src/views/admin/OrderManagement.vue
create mode 100644 frontend/src/views/admin/ProductManagement.vue
create mode 100644 frontend/src/views/admin/SystemManagement.vue
create mode 100644 frontend/src/views/admin/UserManagement.vue
create mode 100644 frontend/src/views/admin/merchants/MerchantManagement.vue
create mode 100644 frontend/src/views/admin/orders/OrderManagement.vue
create mode 100644 frontend/src/views/admin/products/ProductManagement.vue
create mode 100644 frontend/src/views/admin/profile/ProfileSettings.vue
create mode 100644 frontend/src/views/admin/system/SystemManagement.vue
create mode 100644 frontend/src/views/admin/users/UserManagement.vue
create mode 100644 frontend/src/views/checkout/Checkout.vue
create mode 100644 frontend/src/views/merchant/Dashboard.vue
create mode 100644 frontend/src/views/merchant/Login.vue
create mode 100644 frontend/src/views/merchant/Register.vue
create mode 100644 frontend/src/views/merchant/customers/CustomerManagement.vue
create mode 100644 frontend/src/views/merchant/customers/CustomerService.vue
create mode 100644 frontend/src/views/merchant/inventory/InventoryManagement.vue
create mode 100644 frontend/src/views/merchant/orders/OrderManagement.vue
create mode 100644 frontend/src/views/merchant/products/ProductForm.vue
create mode 100644 frontend/src/views/merchant/products/ProductManagement.vue
create mode 100644 frontend/src/views/merchant/settings/ProfileSettings.vue
create mode 100644 frontend/src/views/merchant/statistics/StatisticsView.vue
create mode 100644 frontend/src/views/payment/PaymentPage.vue
create mode 100644 frontend/src/views/product/ProductDetail.vue
create mode 100644 frontend/src/views/user/Addresses.vue
create mode 100644 frontend/src/views/user/Announcements.vue
create mode 100644 frontend/src/views/user/Cart.vue
create mode 100644 frontend/src/views/user/Favorites.vue
create mode 100644 frontend/src/views/user/OrderDetail.vue
create mode 100644 frontend/src/views/user/Orders.vue
create mode 100644 frontend/src/views/user/Profile.vue
create mode 100644 frontend/vite.config.js
create mode 100644 sql/init.sql
create mode 100644 vite.config.js
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5a28c95
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,204 @@
+# Java编译文件
+*.class
+*.jar
+*.war
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# Maven
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+.mvn/wrapper/maven-wrapper.jar
+
+# Gradle
+.gradle
+/build/
+gradle-app.setting
+!gradle-wrapper.jar
+!gradle-wrapper.properties
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+# Spring Boot
+spring-boot-starter-parent/
+
+# Node.js和Vue
+node_modules/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+dist/
+dist-ssr/
+*.local
+.npmrc
+
+# Vue相关
+.vuepress/dist
+.nuxt
+.nitro
+
+# Python虚拟环境
+venv/
+env/
+ENV/
+.venv/
+.env/
+.python-version
+pyenv.cfg
+
+# Python编译文件
+__pycache__/
+*.py[cod]
+*$py.class
+*.so
+*.egg
+*.egg-info/
+dist/
+build/
+.eggs/
+
+# Python工具
+.pytest_cache/
+.coverage
+.tox/
+.nox/
+htmlcov/
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IDE相关文件
+.idea/
+.vscode/
+*.swp
+*.swo
+*~
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+*.sublime-project
+.spyderproject
+.spyproject
+
+# 系统相关文件
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db
+.fseventsd
+.TemporaryItems
+.DocumentRevisions-V100
+
+# 日志文件
+logs/
+*.log
+log/
+*.log.*
+*.out
+
+# 缓存文件
+.cache/
+.temp/
+.tmp/
+*.cache
+.eslintcache
+.stylelintcache
+
+# 环境配置文件(包含敏感信息)
+.env
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+# 敏感配置文件(重要:包含密钥信息)
+**/application-*.yml
+!**/application.yml
+!**/application-prod.yml.template
+!**/application-dev.yml.template
+*.key
+*.pem
+*.p12
+*.keystore
+*.jks
+
+# 数据库文件
+*.db
+*.sqlite
+*.sqlite3
+
+# 测试覆盖率报告
+coverage/
+*.lcov
+.nyc_output
+
+# 依赖分析文件
+.pnp
+.pnp.js
+
+# 运行时数据
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# 可选的npm缓存目录
+.npm
+
+# 可选的eslint缓存
+.eslintcache
+
+# 可选的stylelint缓存
+.stylelintcache
+
+# TypeScript缓存
+*.tsbuildinfo
+
+# 备份文件
+*.bak
+*.backup
+*.old
+
+# 压缩文件
+*.7z
+*.dmg
+*.gz
+*.iso
+*.tar
+
+# 项目特定文件
+export_code.sh
+temp_*
+*.txt.backup*
+*.yml.backup*
+*.yml.bak*
+SunnyFarm_源代码.txt
+
+# Docker相关
+.dockerignore
+docker-compose.override.yml
+
+# 其他
+.vite-inspect/
+.vite/
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..29b31b3
--- /dev/null
+++ b/README.md
@@ -0,0 +1,351 @@
+# 🌱 农产品直销平台 (SunnyFarm)
+
+一个基于 Spring Boot + Vue.js + MySQL 的现代化农产品电商平台,支持多角色管理(用户、商家、管理员),提供完整的电商功能包括商品管理、订单处理、支付集成、库存管理等。
+
+## 📋 目录
+
+- [功能特性](#功能特性)
+- [技术栈](#技术栈)
+- [环境要求](#环境要求)
+- [快速开始](#快速开始)
+- [配置说明](#配置说明)
+- [部署指南](#部署指南)
+- [API文档](#api文档)
+- [贡献指南](#贡献指南)
+
+## ✨ 功能特性
+
+### 🛒 核心电商功能
+- **商品管理**: 分类管理、商品发布、图片上传、库存管理
+- **购物车**: 添加商品、数量调整、批量操作
+- **订单系统**: 创建订单、支付集成、状态跟踪、物流管理
+- **用户系统**: 注册登录、个人中心、收货地址管理
+- **评价系统**: 商品评价、商家回复、评分统计
+
+### 👥 多角色支持
+- **普通用户**: 浏览商品、下单购买、管理订单
+- **商家**: 商品管理、订单处理、销售统计、客服聊天
+- **平台管理员**: 用户管理、商家审核、系统配置、数据统计
+
+### 🔧 技术亮点
+- **支付集成**: 支付宝沙箱支付,支持异步回调
+- **文件存储**: 腾讯云COS + CDN加速
+- **缓存优化**: Redis缓存用户会话和购物车数据
+- **邮件服务**: 注册验证码、订单通知
+- **实时聊天**: 用户与商家在线客服
+- **响应式设计**: 支持PC端和移动端访问
+
+## 🛠 技术栈
+
+### 后端技术
+- **框架**: Spring Boot 2.7.14
+- **安全**: Spring Security + JWT认证
+- **数据库**: MySQL 8.0 + MyBatis Plus
+- **缓存**: Redis
+- **文件存储**: 腾讯云COS
+- **支付**: 支付宝开放平台
+- **邮件**: Spring Boot Mail
+
+### 前端技术
+- **框架**: Vue 3 + Vite
+- **UI组件**: Element Plus
+- **状态管理**: Pinia
+- **路由**: Vue Router 4
+- **图表**: ECharts
+- **HTTP客户端**: Axios
+
+### 运维部署
+- **容器化**: Docker + Docker Compose
+- **云服务**: 支持各类云平台部署
+- **反向代理**: Nginx
+- **进程管理**: PM2(可选)
+
+## 📋 环境要求
+
+### 开发环境
+- **Java**: JDK 8 或以上
+- **Node.js**: 16.0 或以上
+- **Maven**: 3.6 或以上
+- **MySQL**: 8.0 或以上
+- **Redis**: 6.0 或以上
+
+### 生产环境
+- **服务器**: Linux (推荐 Ubuntu 20.04+)
+- **内存**: 建议 2GB 以上
+- **存储**: 建议 20GB 以上
+- **网络**: 需要公网IP或域名(用于支付回调)
+
+## 🚀 快速开始
+
+### 1. 克隆项目
+
+```bash
+git clone https://git.sq0715.com/qin/SunnyFarm.git
+cd SunnyFarm
+```
+
+### 2. 配置文件设置
+
+#### 后端配置
+
+复制配置模板并填入你的配置信息:
+
+```bash
+# 开发环境配置
+cp backend/src/main/resources/application-dev.yml.example backend/src/main/resources/application-dev.yml
+
+# 生产环境配置
+cp backend/src/main/resources/application-prod.yml.example backend/src/main/resources/application-prod.yml
+```
+
+### 3. 数据库初始化
+
+```bash
+# 创建数据库
+mysql -u root -p -e "CREATE DATABASE sunnyfarm CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
+
+# 导入数据库结构和初始数据
+mysql -u your_username -p sunnyfarm < sql/sunnyfarm.sql
+mysql -u your_username -p sunnyfarm < sql/init_inventory.sql
+```
+
+### 4. 启动后端服务
+
+```bash
+cd backend
+mvn clean install
+mvn spring-boot:run
+```
+
+服务启动后访问: http://localhost:8080/api/init/status
+
+### 5. 启动前端服务
+
+```bash
+cd frontend
+npm install
+npm run dev
+```
+
+前端启动后访问: http://localhost:3000
+
+## ⚙️ 配置说明
+
+### 数据库配置
+```yaml
+spring:
+ datasource:
+ url: jdbc:mysql://your-mysql-host:3306/sunnyfarm
+ username: your-db-username
+ password: your-db-password
+```
+
+### Redis配置
+```yaml
+spring:
+ redis:
+ host: your-redis-host
+ port: 6379
+ password: your-redis-password
+```
+
+### 邮件服务配置 (QQ邮箱示例)
+```yaml
+spring:
+ mail:
+ host: smtp.qq.com
+ port: 465
+ username: your-email@qq.com
+ password: your-email-auth-code # QQ邮箱授权码
+```
+
+### 腾讯云COS配置
+```yaml
+tencent:
+ cos:
+ secret-id: your-tencent-cos-secret-id
+ secret-key: your-tencent-cos-secret-key
+ region: ap-guangzhou
+ bucket: your-bucket-name
+```
+
+### 支付宝配置
+```yaml
+alipay:
+ app-id: your-alipay-app-id
+ app-private-key: your-alipay-app-private-key
+ alipay-public-key: your-alipay-public-key
+ notify-url: http://your-domain:8080/api/payment/alipay/notify
+ return-url: http://your-domain:3000/orders?payment=success
+```
+
+**重要**: 支付宝回调地址必须是公网可访问的地址,不能使用localhost
+
+### JWT配置
+```yaml
+jwt:
+ secret: your-jwt-secret-key
+ expiration: 86400000 # 24小时,单位毫秒
+```
+
+## 🐳 Docker部署
+
+### 使用Docker Compose部署
+
+```bash
+# 构建并启动服务
+docker-compose up -d
+
+# 查看服务状态
+docker-compose ps
+
+# 查看日志
+docker-compose logs -f
+```
+
+### 手动Docker部署
+
+```bash
+# 构建后端镜像
+cd backend
+docker build -t sunnyfarm-backend .
+
+# 构建前端镜像
+cd ../frontend
+docker build -t sunnyfarm-frontend .
+
+# 启动服务
+docker run -d -p 8080:8080 --name sunnyfarm-backend sunnyfarm-backend
+docker run -d -p 3000:3000 --name sunnyfarm-frontend sunnyfarm-frontend
+```
+
+## 🌍 生产环境部署
+
+### 1. 服务器准备
+
+```bash
+# 安装基础软件
+sudo apt update && sudo apt install -y git docker.io docker-compose nginx
+
+# 启动Docker服务
+sudo systemctl start docker
+sudo systemctl enable docker
+```
+
+### 2. 克隆项目并配置
+
+```bash
+git clone https://git.sq0715.com/qin/SunnyFarm.git
+cd SunnyFarm
+
+# 配置生产环境文件
+cp backend/src/main/resources/application-prod.yml.example backend/src/main/resources/application-prod.yml
+# 编辑配置文件,填入生产环境配置信息
+vim backend/src/main/resources/application-prod.yml
+```
+
+### 3. 部署启动
+
+```bash
+# 构建并启动
+docker-compose up -d
+
+# 检查服务状态
+docker-compose ps
+curl http://your-server-ip:8080/api/init/status
+```
+
+## 📚 API文档
+
+### 认证接口
+
+| 方法 | 路径 | 说明 |
+|------|------|------|
+| POST | `/api/user/login` | 用户登录 |
+| POST | `/api/user/register` | 用户注册 |
+| POST | `/api/merchant/login` | 商家登录 |
+| POST | `/api/admin/login` | 管理员登录 |
+
+### 商品接口
+
+| 方法 | 路径 | 说明 |
+|------|------|------|
+| GET | `/api/product/list` | 商品列表 |
+| GET | `/api/product/{id}` | 商品详情 |
+| POST | `/api/product/create` | 创建商品(商家) |
+| PUT | `/api/product/{id}` | 更新商品(商家) |
+
+### 订单接口
+
+| 方法 | 路径 | 说明 |
+|------|------|------|
+| POST | `/api/order/create` | 创建订单 |
+| GET | `/api/order/list` | 订单列表 |
+| GET | `/api/order/{id}` | 订单详情 |
+| POST | `/api/order/{id}/pay` | 订单支付 |
+
+## 🎯 默认账号
+
+### 管理员账号
+- 用户名: `admin`
+- 密码: `admin123`
+
+### 测试商家账号
+- 用户名: `merchant`
+- 密码: `merchant123`
+
+### 测试用户账号
+- 用户名: `user`
+- 密码: `user123`
+
+## 📝 开发说明
+
+### 项目结构
+
+```
+SunnyFarm/
+├── backend/ # 后端Spring Boot项目
+│ ├── src/main/java/ # Java源码
+│ ├── src/main/resources/ # 配置文件
+│ └── pom.xml # Maven配置
+├── frontend/ # 前端Vue项目
+│ ├── src/ # Vue源码
+│ ├── public/ # 静态资源
+│ └── package.json # NPM配置
+├── sql/ # 数据库脚本
+├── docker-compose.yml # Docker编排
+└── README.md # 项目文档
+```
+
+### 开发规范
+
+- 代码格式化: 使用项目配置的格式化规则
+- 提交规范: 使用语义化提交信息
+- 分支管理: 使用Git Flow工作流
+- 代码审查: 重要功能需要代码审查
+
+## 🤝 贡献指南
+
+1. Fork本项目
+2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
+3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
+4. 推送分支 (`git push origin feature/AmazingFeature`)
+5. 创建Pull Request
+
+## 📄 许可证
+
+本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情
+
+## 📞 联系方式
+
+- 项目地址: https://git.sq0715.com/qin/SunnyFarm
+- 问题反馈: 请在GitHub Issues中提交
+- 邮箱联系: 852326703@qq.com
+
+## 🙏 致谢
+
+感谢所有为本项目做出贡献的开发者们!
+
+---
+
+**注意**: 本项目仅供学习和研究使用,请勿用于商业用途。使用前请确保遵守相关法律法规。
\ No newline at end of file
diff --git a/backend/README.md b/backend/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/backend/pom.xml b/backend/pom.xml
new file mode 100644
index 0000000..37ebbe0
--- /dev/null
+++ b/backend/pom.xml
@@ -0,0 +1,133 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.14
+
+
+ com.sunnyfarm
+ sunny-farm
+ 0.0.1-SNAPSHOT
+ sunny-farm
+ Agricultural Product Direct Sales Platform
+
+ 8
+
+
+
+ org.apache.commons
+ commons-pool2
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.5.3
+
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.33
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.12.0
+
+
+
+
+ com.qcloud
+ cos_api
+ 5.6.155
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ com.alipay.sdk
+ alipay-sdk-java
+ 4.38.10.ALL
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
diff --git a/backend/pom.xml.backup2 b/backend/pom.xml.backup2
new file mode 100644
index 0000000..f61c109
--- /dev/null
+++ b/backend/pom.xml.backup2
@@ -0,0 +1,206 @@
+
+
+ 4.0.0
+
+ com.sunnyfarm
+ sunny-farm
+ 1.0.0
+ jar
+
+ SunnyFarm
+ 农产品直销平台
+
+
+
+ 17
+ 17
+ 17
+
+ 2.7.14
+ 3.5.3
+ 8.0.33
+ 2.7.14
+ 0.11.5
+ 5.6.89
+ 4.35.79.ALL
+ 5.8.20
+ 2.0.31
+ 1.18.32
+ UTF-8
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring.boot.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis.plus.version}
+
+
+
+ com.mysql
+ mysql-connector-j
+ ${mysql.version}
+
+
+
+
+ io.jsonwebtoken
+ jjwt-api
+ ${jwt.version}
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ ${jwt.version}
+ runtime
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ ${jwt.version}
+ runtime
+
+
+
+
+ com.qcloud
+ cos_api
+ ${cos.version}
+
+
+
+
+ com.alipay.sdk
+ alipay-sdk-java
+ ${alipay.version}
+
+
+
+
+ cn.hutool
+ hutool-all
+ ${hutool.version}
+
+
+
+ com.alibaba.fastjson2
+ fastjson2
+ ${fastjson.version}
+
+
+
+ org.apache.commons
+ commons-lang3
+
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring.boot.version}
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 3.11.0
+
+
+ ${java.version}
+ ${java.version}
+ UTF-8
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+ org.projectlombok
+ lombok-mapstruct-binding
+ 0.2.0
+
+
+
+
+
+
+
diff --git a/backend/pom.xml.backup3 b/backend/pom.xml.backup3
new file mode 100644
index 0000000..43fc33c
--- /dev/null
+++ b/backend/pom.xml.backup3
@@ -0,0 +1,122 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.14
+
+
+ com.sunnyfarm
+ sunny-farm
+ 0.0.1-SNAPSHOT
+ sunny-farm
+ Agricultural Product Direct Sales Platform
+
+ 8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.5.3
+
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.33
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.12.0
+
+
+
+
+ com.qcloud
+ cos_api
+ 5.6.155
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
diff --git a/backend/src/main/java/com/sunnyfarm/SunnyFarmApplication.java b/backend/src/main/java/com/sunnyfarm/SunnyFarmApplication.java
new file mode 100644
index 0000000..84a46cf
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/SunnyFarmApplication.java
@@ -0,0 +1,12 @@
+package com.sunnyfarm;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
+
+@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
+public class SunnyFarmApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(SunnyFarmApplication.class, args);
+ }
+}
diff --git a/backend/src/main/java/com/sunnyfarm/common/PageResult.java b/backend/src/main/java/com/sunnyfarm/common/PageResult.java
new file mode 100644
index 0000000..a5f1244
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/common/PageResult.java
@@ -0,0 +1,22 @@
+package com.sunnyfarm.common;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PageResult {
+ private Long total;
+ private Long pages;
+ private Long current;
+ private Long size;
+ private List records;
+
+ public static PageResult of(Long total, Long pages, Long current, Long size, List records) {
+ return new PageResult<>(total, pages, current, size, records);
+ }
+}
diff --git a/backend/src/main/java/com/sunnyfarm/common/Result.java b/backend/src/main/java/com/sunnyfarm/common/Result.java
new file mode 100644
index 0000000..6b68a60
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/common/Result.java
@@ -0,0 +1,42 @@
+package com.sunnyfarm.common;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Result {
+ private Integer code;
+ private String message;
+ private T data;
+
+ public static Result success() {
+ return new Result<>(200, "操作成功", null);
+ }
+
+ public static Result success(T data) {
+ return new Result<>(200, "操作成功", data);
+ }
+
+ public static Result success(String message, T data) {
+ return new Result<>(200, message, data);
+ }
+
+ public static Result error() {
+ return new Result<>(500, "操作失败", null);
+ }
+
+ public static Result error(String message) {
+ return new Result<>(500, message, null);
+ }
+
+ public static Result error(Integer code, String message) {
+ return new Result<>(code, message, null);
+ }
+
+ public static Result error(String message, T data) {
+ return new Result<>(500, message, data);
+ }
+}
\ No newline at end of file
diff --git a/backend/src/main/java/com/sunnyfarm/config/AlipayConfig.java b/backend/src/main/java/com/sunnyfarm/config/AlipayConfig.java
new file mode 100644
index 0000000..952d2ab
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/config/AlipayConfig.java
@@ -0,0 +1,28 @@
+package com.sunnyfarm.config;
+
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.sunnyfarm.config.properties.AlipayProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class AlipayConfig {
+
+ @Autowired
+ private AlipayProperties alipayProperties;
+
+ @Bean
+ public AlipayClient alipayClient() {
+ return new DefaultAlipayClient(
+ alipayProperties.getServerUrl(),
+ alipayProperties.getAppId(),
+ alipayProperties.getAppPrivateKey(),
+ alipayProperties.getFormat(),
+ alipayProperties.getCharset(),
+ alipayProperties.getAlipayPublicKey(),
+ alipayProperties.getSignType()
+ );
+ }
+}
diff --git a/backend/src/main/java/com/sunnyfarm/config/AsyncConfig.java b/backend/src/main/java/com/sunnyfarm/config/AsyncConfig.java
new file mode 100644
index 0000000..78ca784
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/config/AsyncConfig.java
@@ -0,0 +1,9 @@
+package com.sunnyfarm.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+
+@Configuration
+@EnableAsync
+public class AsyncConfig {
+}
diff --git a/backend/src/main/java/com/sunnyfarm/config/CosConfig.java b/backend/src/main/java/com/sunnyfarm/config/CosConfig.java
new file mode 100644
index 0000000..20694de
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/config/CosConfig.java
@@ -0,0 +1,33 @@
+package com.sunnyfarm.config;
+
+import com.qcloud.cos.COSClient;
+import com.qcloud.cos.ClientConfig;
+import com.qcloud.cos.auth.BasicCOSCredentials;
+import com.qcloud.cos.auth.COSCredentials;
+import com.qcloud.cos.region.Region;
+import com.sunnyfarm.config.properties.CosProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class CosConfig {
+
+ @Autowired
+ private CosProperties cosProperties;
+
+ @Bean
+ public COSClient cosClient() {
+ // 初始化用户身份信息(secretId, secretKey)
+ COSCredentials cred = new BasicCOSCredentials(
+ cosProperties.getSecretId(),
+ cosProperties.getSecretKey()
+ );
+
+ // 设置bucket的区域
+ ClientConfig clientConfig = new ClientConfig(new Region(cosProperties.getRegion()));
+
+ // 生成cos客户端
+ return new COSClient(cred, clientConfig);
+ }
+}
diff --git a/backend/src/main/java/com/sunnyfarm/config/MybatisPlusConfig.java b/backend/src/main/java/com/sunnyfarm/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..d21927d
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/config/MybatisPlusConfig.java
@@ -0,0 +1,21 @@
+package com.sunnyfarm.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@MapperScan("com.sunnyfarm.mapper")
+public class MybatisPlusConfig {
+
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ // 分页插件
+ interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+ return interceptor;
+ }
+}
diff --git a/backend/src/main/java/com/sunnyfarm/config/PasswordConfig.java b/backend/src/main/java/com/sunnyfarm/config/PasswordConfig.java
new file mode 100644
index 0000000..e9de3b8
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/config/PasswordConfig.java
@@ -0,0 +1,15 @@
+package com.sunnyfarm.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+@Configuration
+public class PasswordConfig {
+
+ @Bean
+ public PasswordEncoder passwordEncoder() {
+ return new BCryptPasswordEncoder();
+ }
+}
diff --git a/backend/src/main/java/com/sunnyfarm/config/WebConfig.java b/backend/src/main/java/com/sunnyfarm/config/WebConfig.java
new file mode 100644
index 0000000..d4f7ae3
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/config/WebConfig.java
@@ -0,0 +1,93 @@
+package com.sunnyfarm.config;
+
+import com.sunnyfarm.interceptor.JwtAuthInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.CorsConfigurationSource;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.Arrays;
+
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+ @Autowired
+ private JwtAuthInterceptor jwtAuthInterceptor;
+
+ @Override
+ public void addCorsMappings(CorsRegistry registry) {
+ registry.addMapping("/**")
+ .allowedOriginPatterns("*")
+ .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
+ .allowedHeaders("*")
+ .allowCredentials(true)
+ .maxAge(3600);
+ }
+
+ @Bean
+ public CorsConfigurationSource corsConfigurationSource() {
+ CorsConfiguration configuration = new CorsConfiguration();
+ configuration.setAllowedOriginPatterns(Arrays.asList("*"));
+ configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
+ configuration.setAllowedHeaders(Arrays.asList("*"));
+ configuration.setAllowCredentials(true);
+ configuration.setMaxAge(3600L);
+
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+ source.registerCorsConfiguration("/**", configuration);
+ return source;
+ }
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(jwtAuthInterceptor)
+ .addPathPatterns("/**")
+ .excludePathPatterns(
+ // 用户认证相关
+ "/api/user/login",
+ "/api/user/register",
+ "/api/user/send-code",
+ "/api/user/send-email-code", // 新增:邮箱验证码接口
+ "/api/user/verify-code",
+ // 商家认证相关
+ "/api/merchant/register",
+ "/api/merchant/login",
+ // 管理员认证相关
+ "/api/admin/login",
+ // 公开接口 - 商品分类
+ "/api/category/**",
+ // 公开接口 - 商品相关(用户端公共访问)
+ "/api/product/list",
+ "/api/product/*/detail",
+ "/api/product/hot",
+ "/api/product/search",
+ // 初始化和测试接口
+ "/api/init/**",
+ // 公共接口 - 公告相关
+ "/api/announcements/published",
+ "/api/announcements/latest",
+ "/api/announcements/*/detail",
+ "/api/test/**",
+ // 支付回调(无需认证)
+ "/api/payment/alipay/notify",
+ "/api/payment/alipay/return",
+ // 系统相关
+ "/error",
+ "/favicon.ico",
+ // 静态资源
+ "/**/*.css",
+ "/**/*.js",
+ "/**/*.png",
+ "/**/*.jpg",
+ "/**/*.jpeg",
+ "/**/*.gif",
+ "/**/*.ico",
+ "/**/*.html"
+ );
+ }
+}
diff --git a/backend/src/main/java/com/sunnyfarm/config/properties/AlipayProperties.java b/backend/src/main/java/com/sunnyfarm/config/properties/AlipayProperties.java
new file mode 100644
index 0000000..6c73d99
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/config/properties/AlipayProperties.java
@@ -0,0 +1,37 @@
+package com.sunnyfarm.config.properties;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+public class AlipayProperties {
+
+ @Value("${alipay.app-id}")
+ private String appId;
+
+ @Value("${alipay.app-private-key}")
+ private String appPrivateKey;
+
+ @Value("${alipay.alipay-public-key}")
+ private String alipayPublicKey;
+
+ @Value("${alipay.server-url}")
+ private String serverUrl;
+
+ @Value("${alipay.format}")
+ private String format;
+
+ @Value("${alipay.charset}")
+ private String charset;
+
+ @Value("${alipay.sign-type}")
+ private String signType;
+
+ @Value("${alipay.notify-url}")
+ private String notifyUrl;
+
+ @Value("${alipay.return-url}")
+ private String returnUrl;
+}
diff --git a/backend/src/main/java/com/sunnyfarm/config/properties/CosProperties.java b/backend/src/main/java/com/sunnyfarm/config/properties/CosProperties.java
new file mode 100644
index 0000000..e08ba80
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/config/properties/CosProperties.java
@@ -0,0 +1,25 @@
+package com.sunnyfarm.config.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "tencent.cos")
+public class CosProperties {
+ private String region;
+ private String bucket;
+ private String secretId;
+ private String secretKey;
+ private String baseUrl;
+ private String cdnUrl;
+ private Boolean cdnEnabled = false;
+
+ /**
+ * 获取实际使用的URL(CDN优先)
+ */
+ public String getActualUrl() {
+ return (cdnEnabled != null && cdnEnabled && cdnUrl != null) ? cdnUrl : baseUrl;
+ }
+}
diff --git a/backend/src/main/java/com/sunnyfarm/config/properties/EmailProperties.java b/backend/src/main/java/com/sunnyfarm/config/properties/EmailProperties.java
new file mode 100644
index 0000000..0979003
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/config/properties/EmailProperties.java
@@ -0,0 +1,14 @@
+package com.sunnyfarm.config.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "system.email")
+public class EmailProperties {
+ private boolean enabled = true;
+ private String from;
+ private String fromName;
+}
diff --git a/backend/src/main/java/com/sunnyfarm/controller/AddressController.java b/backend/src/main/java/com/sunnyfarm/controller/AddressController.java
new file mode 100644
index 0000000..0fcaa8b
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/controller/AddressController.java
@@ -0,0 +1,129 @@
+package com.sunnyfarm.controller;
+
+import com.sunnyfarm.common.Result;
+import com.sunnyfarm.entity.Address;
+import com.sunnyfarm.service.AddressService;
+import com.sunnyfarm.util.UserContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/address")
+@CrossOrigin
+public class AddressController {
+
+ @Autowired
+ private AddressService addressService;
+
+ /**
+ * 获取用户地址列表
+ */
+ @GetMapping("/list")
+ public Result> getAddressList() {
+ Long userId = UserContext.getCurrentUserId();
+ List addresses = addressService.getUserAddresses(userId);
+ return Result.success(addresses);
+ }
+
+ /**
+ * 获取用户默认地址
+ */
+ @GetMapping("/default")
+ public Result getDefaultAddress() {
+ Long userId = UserContext.getCurrentUserId();
+ Address address = addressService.getUserDefaultAddress(userId);
+ return Result.success(address);
+ }
+
+ /**
+ * 获取地址详情
+ */
+ @GetMapping("/{id}")
+ public Result getAddressDetail(@PathVariable Long id) {
+ Address address = addressService.getById(id);
+ if (address != null) {
+ return Result.success(address);
+ } else {
+ return Result.error("地址不存在");
+ }
+ }
+
+ /**
+ * 创建地址
+ */
+ @PostMapping("/create")
+ public Result createAddress(@RequestBody Address address) {
+ try {
+ Long userId = UserContext.getCurrentUserId();
+ address.setUserId(userId);
+
+ Address createdAddress = addressService.createAddress(address);
+ return Result.success("地址创建成功", createdAddress);
+ } catch (Exception e) {
+ return Result.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 更新地址
+ */
+ @PutMapping("/{id}")
+ public Result updateAddress(@PathVariable Long id, @RequestBody Address address) {
+ try {
+ Long userId = UserContext.getCurrentUserId();
+ address.setUserId(userId);
+
+ Address updatedAddress = addressService.updateAddress(id, address);
+ return Result.success("地址更新成功", updatedAddress);
+ } catch (Exception e) {
+ return Result.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 删除地址
+ */
+ @DeleteMapping("/{id}")
+ public Result deleteAddress(@PathVariable Long id) {
+ try {
+ boolean success = addressService.deleteAddress(id);
+ if (success) {
+ return Result.success("地址删除成功");
+ } else {
+ return Result.error("地址删除失败");
+ }
+ } catch (Exception e) {
+ return Result.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 设置默认地址
+ */
+ @PutMapping("/{id}/default")
+ public Result setDefaultAddress(@PathVariable Long id) {
+ try {
+ Long userId = UserContext.getCurrentUserId();
+ boolean success = addressService.setDefaultAddress(userId, id);
+ if (success) {
+ return Result.success("默认地址设置成功");
+ } else {
+ return Result.error("默认地址设置失败");
+ }
+ } catch (Exception e) {
+ return Result.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 获取用户地址数量
+ */
+ @GetMapping("/count")
+ public Result getAddressCount() {
+ Long userId = UserContext.getCurrentUserId();
+ Long count = addressService.getUserAddressCount(userId);
+ return Result.success(count);
+ }
+}
diff --git a/backend/src/main/java/com/sunnyfarm/controller/AdminController.java b/backend/src/main/java/com/sunnyfarm/controller/AdminController.java
new file mode 100644
index 0000000..44c61aa
--- /dev/null
+++ b/backend/src/main/java/com/sunnyfarm/controller/AdminController.java
@@ -0,0 +1,631 @@
+package com.sunnyfarm.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sunnyfarm.common.PageResult;
+import com.sunnyfarm.common.Result;
+import com.sunnyfarm.dto.AdminLoginRequest;
+import com.sunnyfarm.dto.AdminUpdateRequest;
+import com.sunnyfarm.dto.AdminPasswordRequest;
+import com.sunnyfarm.entity.*;
+import com.sunnyfarm.service.*;
+import com.sunnyfarm.util.JwtUtil;
+import com.sunnyfarm.util.UserContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/admin")
+@CrossOrigin
+public class AdminController {
+
+ @Autowired
+ private AdminService adminService;
+
+ @Autowired
+ private UserService userService;
+
+ @Autowired
+ private MerchantService merchantService;
+
+ @Autowired
+ private ProductService productService;
+
+ @Autowired
+ private OrderService orderService;
+
+ @Autowired
+ private StatisticsService statisticsService;
+
+ @Autowired
+ private SystemLogService systemLogService;
+
+ @Autowired
+ private SystemConfigService systemConfigService;
+
+ @Autowired
+ private AnnouncementService announcementService;
+
+ @Autowired
+ private JwtUtil jwtUtil;
+
+ /**
+ * 管理员登录
+ */
+ @PostMapping("/login")
+ public Result