# mall **Repository Path**: mosby233/mall ## Basic Information - **Project Name**: mall - **Description**: 电商系统 *大家推送的时候记得把sql一起提交 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-19 - **Last Updated**: 2026-01-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mall 电商系统 这是一个基于 Spring Boot 和 MyBatis-Plus 构建的轻量级电商系统,提供完整的用户认证、商品管理、分类管理、购物车、订单处理、收货地址管理等核心功能。 ## 项目简介 Mall 电商系统是一个完整的电商后端服务,采用前后端分离架构,通过 RESTful API 提供标准化的接口服务。系统实现了用户注册登录、商品浏览搜索、分类管理、购物车管理、订单处理、收货地址管理、后台用户管理等核心电商功能,并集成了 JWT 令牌认证机制确保系统安全。 ## 技术栈 - **Spring Boot 2.7.x** - 应用框架,提供自动配置和快速开发能力 - **Spring Security** - 安全认证框架,处理用户认证和授权 - **MyBatis-Plus** - ORM 持久层框架,简化数据库操作 - **JWT (JSON Web Token)** - 无状态认证机制,支持分布式环境 - **MySQL 5.7+** - 关系型数据库存储业务数据 - **Maven** - 项目构建和管理工具 ## 核心功能 ### 用户模块 用户模块提供了完整的用户生命周期管理功能,包括用户注册、登录认证、个人信息管理等。系统采用 JWT 令牌进行身份验证,用户登录成功后可获得访问令牌,后续请求通过令牌进行身份识别。密码采用 BCrypt 算法加密存储,确保用户数据安全。 注册功能支持用户名、密码、手机号和邮箱等多种方式,用户可以自由选择注册方式。登录功能验证用户凭据后返回 JWT 令牌,令牌包含用户身份信息,可设置过期时间。个人信息管理允许用户查看和修改自己的昵称、头像、性别、手机号、邮箱等基本信息,同时支持密码修改功能。 ### 商品模块 商品模块是电商系统的核心,提供商品的展示、搜索和管理功能。商品信息包含名称、价格、描述、库存、分类等关键字段,支持按分类筛选和关键词搜索。系统提供分页查询接口,可灵活设置每页显示数量和当前页码,适应不同业务场景需求。 商品搜索功能支持按名称模糊查询,并可结合分类进行精确筛选,帮助用户快速找到目标商品。商品状态管理支持上下架操作,管理员可灵活控制商品的展示状态。所有商品列表查询和搜索接口均采用分页机制,确保大数据量下的查询性能和用户体验。 ### 分类模块 分类模块实现电商系统的商品分类管理功能,支持多级分类结构。系统提供分类树形结构查询接口,可获取完整的分类层级关系,便于前端展示和组织商品。每个分类包含名称、父分类ID、层级、排序、状态等属性,支持灵活的分类管理操作。 分类管理接口支持按ID查询单个分类详情,以及修改分类状态等操作。分类与商品关联,通过分类可快速筛选出该分类下的所有商品,形成完整的商品分类体系。 ### 购物车模块 购物车模块为用户提供商品选购管理功能,支持商品的添加、修改数量、删除和列表查询。用户可以将心仪的商品加入购物车,随时调整购买数量,或移除不需要的商品。购物车数据与用户绑定,每个用户拥有独立的购物车数据。 购物车列表接口返回商品名称、价格、数量和小计金额等详细信息,方便用户核对选购商品。系统会自动计算每种商品的小计金额和购物车总金额,为用户提供清晰的消费明细。 ### 订单模块 订单模块是电商系统的核心业务流程,提供订单创建、状态管理、列表查询和详情查看等功能。用户下单时需要选择收货地址和购物车中的商品,系统会自动生成订单号并创建订单记录。 订单状态管理支持多种状态流转,包括待付款、已付款、已发货、已完成、已取消等。管理员可以更新订单状态,用户也可以在特定情况下取消订单或确认收货。订单详情页展示完整的订单信息,包括收货地址、商品清单、支付金额和订单状态等。 ### 收货地址模块 收货地址模块为用户提供收货地址管理功能,支持地址的新增、修改、删除、列表查询和设为默认地址。每个用户可以管理多个收货地址,下单时可以选择使用任意一个地址作为配送地址。 地址信息包含收货人姓名、联系电话、省市区详细地址等完整信息。系统支持设置默认地址功能,下单时会自动使用默认地址作为配送地址,简化用户操作流程。 ### 后台管理模块 后台管理模块为系统管理员提供用户管理、商品管理、订单管理等完整的后台运营功能。支持用户列表查询、状态管理、角色分配和密码重置等操作,管理员可灵活控制系统用户的权限和数据。 商品管理功能支持管理员添加、编辑、删除商品,查询商品列表并按条件筛选。订单管理功能允许管理员查看所有订单、修改订单状态、处理退款等运营操作。所有后台管理接口均需要进行管理员身份验证,确保系统安全。 ### 安全特性 系统安全方面采用 Spring Security 框架集成 JWT 认证机制,实现无状态的分布式认证。所有用户请求需携带有效的 JWT 令牌,服务端验证令牌有效性后才允许访问受保护资源。密码采用 BCrypt 强哈希算法加密存储,即使数据库泄露也无法直接获取用户明文密码。 系统实现了全局异常处理器,统一处理参数校验异常、业务逻辑异常和系统异常,返回规范的错误响应格式。参数校验使用 Spring Validation 框架,在控制器层对请求参数进行严格校验,确保数据合法性。 ## 项目结构 ``` src/main/java/com/mall/ ├── MallApplication.java # 应用启动类 ├── config/ │ ├── CorsConfig.java # 跨域配置 │ └── SecurityConfig.java # Spring Security安全配置 ├── controller/ │ ├── AdminOrderController.java # 后台订单管理控制器 │ ├── AdminProductController.java # 后台商品管理控制器 │ ├── AdminUserController.java # 后台用户管理控制器 │ ├── AddressController.java # 收货地址控制器 │ ├── CartController.java # 购物车控制器 │ ├── CategoryController.java # 商品分类控制器 │ ├── OrderController.java # 用户订单控制器 │ ├── PaymentController.java # 支付控制器 │ ├── ProductController.java # 商品管理控制器 │ ├── RefundController.java # 退款控制器 │ ├── ReviewController.java # 评论控制器 │ ├── UserController.java # 用户认证控制器 │ └── UserInfoController.java # 用户信息控制器 ├── dto/ │ ├── AddressDTO.java # 收货地址请求DTO │ ├── CartDTO.java # 购物车请求DTO │ ├── CreateOrderDTO.java # 创建订单请求DTO │ ├── OrderStatusDTO.java # 订单状态请求DTO │ ├── PasswordDTO.java # 密码修改请求DTO │ ├── PaymentDTO.java # 支付请求DTO │ ├── ProductDTO.java # 商品请求DTO │ ├── RefundRequest.java # 退款请求DTO │ ├── ResetPasswordDTO.java # 重置密码请求DTO │ ├── UserInfoDTO.java # 用户信息更新DTO │ ├── UserLoginDTO.java # 用户登录请求DTO │ └── UserRegisterDTO.java # 用户注册请求DTO ├── entity/ │ ├── Address.java # 收货地址实体 │ ├── Cart.java # 购物车实体 │ ├── Category.java # 商品分类实体 │ ├── Order.java # 订单实体 │ ├── OrderItem.java # 订单项实体 │ ├── PaymentRecord.java # 支付记录实体 │ ├── Product.java # 商品实体 │ ├── RefundRecord.java # 退款记录实体 │ ├── Review.java # 评论实体 │ ├── Role.java # 角色实体 │ └── User.java # 用户实体 ├── exception/ │ └── GlobalExceptionHandler.java # 全局异常处理器 ├── filter/ │ └── JwtAuthenticationFilter.java # JWT认证过滤器 ├── mapper/ │ ├── AddressMapper.java # 收货地址数据访问接口 │ ├── CartMapper.java # 购物车数据访问接口 │ ├── CategoryMapper.java # 分类数据访问接口 │ ├── OrderItemMapper.java # 订单项数据访问接口 │ ├── OrderMapper.java # 订单数据访问接口 │ ├── PaymentRecordMapper.java # 支付记录数据访问接口 │ ├── ProductMapper.java # 商品数据访问接口 │ ├── RefundRecordMapper.java # 退款记录数据访问接口 │ ├── ReviewMapper.java # 评论数据访问接口 │ ├── RoleMapper.java # 角色数据访问接口 │ └── UserMapper.java # 用户数据访问接口 ├── service/ │ ├── AddressService.java # 收货地址服务接口 │ ├── CartService.java # 购物车服务接口 │ ├── CategoryService.java # 分类服务接口 │ ├── OrderService.java # 订单服务接口 │ ├── PaymentService.java # 支付服务接口 │ ├── ProductService.java # 商品服务接口 │ ├── RefundService.java # 退款服务接口 │ ├── ReviewService.java # 评论服务接口 │ ├── RoleService.java # 角色服务接口 │ ├── UserManageService.java # 用户管理服务接口 │ ├── UserService.java # 用户服务接口 │ └── impl/ │ ├── AddressServiceImpl.java # 收货地址服务实现 │ ├── CartServiceImpl.java # 购物车服务实现 │ ├── CategoryServiceImpl.java # 分类服务实现 │ ├── OrderServiceImpl.java # 订单服务实现 │ ├── PaymentServiceImpl.java # 支付服务实现 │ ├── ProductServiceImpl.java # 商品服务实现 │ ├── RefundServiceImpl.java # 退款服务实现 │ ├── ReviewServiceImpl.java # 评论服务实现 │ ├── RoleServiceImpl.java # 角色服务实现 │ ├── UserManageServiceImpl.java# 用户管理服务实现 │ └── UserServiceImpl.java # 用户服务实现 ├── util/ │ ├── AuthUtil.java # 认证工具类 │ └── JwtUtil.java # JWT工具类 └── vo/ ├── AddressVO.java # 收货地址响应VO ├── CartVO.java # 购物车响应VO ├── OrderDetailVO.java # 订单详情响应VO ├── OrderItemVO.java # 订单项响应VO ├── OrderVO.java # 订单响应VO ├── PageVO.java # 分页响应VO ├── PaymentRecordVO.java # 支付记录响应VO ├── ResultVO.java # 统一响应包装VO ├── UserLoginVO.java # 用户登录响应VO └── UserVO.java # 用户信息响应VO ``` ## API 接口 ### 用户接口 用户接口提供用户注册和登录功能,是系统的基础认证入口。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------|----------| | POST | /user/register | 用户注册 | username(必填), password(必填), phone(选填), email(选填) | | POST | /user/login | 用户登录 | username(必填), password(必填) | 注册成功后用户可直接登录获取 JWT 令牌(token)。登录成功返回包含用户ID、用户名和访问令牌的响应数据,令牌可用于后续接口的身份认证。 (*重要*以下接口大部分都需要验证token,请在调试接口时加上Header,参数为Authorization,值为Bearer +token) ### 用户信息接口 用户信息接口提供当前登录用户的个人信息管理和查询功能。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------|----------| | GET | /user/info | 获取当前用户信息 | 无需参数,需登录 | | PUT | /user/info | 更新用户信息 | nickname, avatar, gender, phone, email | | POST | /user/info/password | 修改登录密码 | oldPassword, newPassword | ### 商品接口 商品接口提供商品的查询和管理功能,普通用户可浏览商品,管理员可管理商品状态。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------|----------| | GET | /product/list | 商品分页列表 | pageNum(默认1), pageSize(默认10) | | GET | /product/search | 商品搜索 | name(必填), categoryId(选填), pageNum(默认1), pageSize(默认10) | | GET | /product/category/{categoryId} | 按分类查询商品 | categoryId(路径), pageNum(默认1), pageSize(默认10) | | POST | /product/status/{id} | 更新商品状态 | id(路径), status(请求参数) | ### 分类接口 分类接口提供商品分类的查询和管理功能。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------|----------| | GET | /category/tree | 获取分类树形结构 | 无需参数 | | GET | /category/{id} | 获取单个分类信息 | id(路径) | | POST | /category/status/{id} | 更新分类状态 | id(路径), status(请求参数) | ### 购物车接口 购物车接口提供购物车的增删改查功能。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------|----------| | POST | /user/cart | 添加商品到购物车 | productId(必填), quantity(必填) | | PUT | /user/cart/{cartId} | 修改购物车商品数量 | cartId(路径), quantity(请求参数) | | DELETE | /user/cart/{cartId} | 删除购物车商品 | cartId(路径) | | GET | /user/cart | 获取购物车列表 | 无需参数 | ### 订单接口 订单接口提供订单的创建、查询和管理功能。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------| | /user/order | 创建订单 |----------| | POST addressId(必填), cartIds(选填) | | GET | /user/order/list | 用户订单分页列表 | pageNum(默认1), pageSize(默认10), status(选填) | | GET | /user/order/{orderId} | 获取订单详情 | orderId(路径) | | POST | /user/order/status | 更新订单状态 | orderId(必填), status(必填) | ### 支付接口 支付接口提供订单支付和支付记录查询功能。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------|----------| | POST | /pay | 发起支付 | orderNo(必填), payChannel(必填) | | GET | /pay/record/order/{orderNo} | 获取订单支付记录 | orderNo(路径) | | GET | /pay/records/user/{userId} | 获取用户支付记录 | userId(路径), pageNum(默认1), pageSize(默认10) | ### 退款接口 退款接口提供退款申请功能。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------|----------| | POST | /refund/apply | 申请退款 | orderNo(必填) | ### 收货地址接口 收货地址接口提供收货地址的增删改查功能。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------|----------| | POST | /user/address | 添加或更新收货地址 | receiver, phone, province, city, district, detailAddress, isDefault | | DELETE | /user/address/{addressId} | 删除收货地址 | addressId(路径) | | GET | /user/address | 获取收货地址列表 | 无需参数 | | GET | /user/address/default | 获取默认收货地址 | 无需参数 | ### 评论接口 评论接口提供商品评论的发布、查询和管理功能。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------|----------| | POST | /reviews | 发布评论 | productId, orderNo, rating, content | | GET | /reviews | 获取商品评论列表 | productId(必填), rating(选填), sort(选填) | | GET | /reviews/{id}/replies | 获取评论回复 | id(路径) | | POST | /reviews/{id}/like | 点赞评论 | id(路径) | | POST | /reviews/{id}/report | 举报评论 | id(路径) | ### 后台管理接口 后台管理接口仅限管理员访问,提供用户管理、商品管理和订单管理功能。 | 方法 | 路径 | 说明 | 请求参数 | |------|------|------|----------| | GET | /admin/user/list | 用户列表分页查询 | pageNum(默认1), pageSize(默认10), username(选填), status(选填) | | POST | /admin/user/status/{userId} | 更新用户状态 | userId(路径), status(请求参数) | | POST | /admin/user/role/{userId} | 更新用户角色 | userId(路径), roleId(请求参数) | | POST | /admin/user/reset/password | 重置用户密码 | userId, newPassword | | GET | /admin/product/list | 后台商品分页列表 | pageNum(默认1), pageSize(默认10), name(选填), categoryId(选填), status(选填) | | POST | /admin/product | 添加商品 | name, price, description, stock, categoryId, status | | PUT | /admin/product | 更新商品 | id, name, price, description, stock, categoryId, status | | GET | /admin/product/{id} | 获取商品详情 | id(路径) | | DELETE | /admin/product/{id} | 删除商品 | id(路径), physicalDelete(选填) | | GET | /admin/order/list | 后台订单分页列表 | pageNum(默认1), pageSize(默认10), orderNo(选填), userId(选填), status(选填) | | GET | /admin/order/{orderId} | 获取订单详情 | orderId(路径) | | POST | /admin/order/status | 更新订单状态 | orderId(必填), status(必填) | ## 快速开始 ### 环境要求 在开始部署和运行项目之前,请确保开发环境满足以下要求: - JDK 1.8 或更高版本 - Maven 3.6 或更高版本 - MySQL 5.7 或更高版本 ### 数据库配置 项目使用 MySQL 数据库,请创建名为 `mall` 的数据库,并执行初始化脚本 `mall_demo.sql` 创建所需的数据表结构和初始数据。 ### 项目配置 修改 `src/main/resources/application.yml` 文件中的数据库连接配置,将url、用户名和密码替换为实际值: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: your_username password: your_password ``` 同时需要在配置文件中设置 JWT 令牌的有效期: ```yaml jwt: expiration: 86400000 # 令牌有效期,单位毫秒,默认为24小时 ``` ### 编译项目 使用 Maven 编译和打包项目: ```bash ./mvnw clean package -DskipTests ``` 编译成功后会在 `target` 目录下生成 `mall.jar` 可执行文件。 ### 运行项目 通过以下命令启动应用: ```bash java -jar target/mall.jar ``` 或者使用 IDE 直接运行 `MallApplication.java` 的 main 方法即可启动服务。 ## 响应格式 所有 API 接口返回统一的标准 JSON 格式,便于前端统一处理。响应结构包含状态码、消息和业务数据三个部分。 ### 成功响应 成功时 `code` 为 200,`message` 为 "success": ```json { "code": 200, "message": "success", "data": { // 业务数据 } } ``` ### 错误响应 发生错误时 `code` 为错误码,`message` 为具体的错误信息: ```json { "code": 400, "message": "参数校验失败", "data": null } ``` 常见错误码包括:400 表示请求参数错误,401 表示未登录或令牌无效,403 表示无权访问,500 表示服务器内部错误。 ## License 本项目仅供学习交流使用。