# EsaleSystem **Repository Path**: phoenix-cities/esale-system ## Basic Information - **Project Name**: EsaleSystem - **Description**: 这是一个电商售后系统,用来完成毕设。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-08 - **Last Updated**: 2026-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 售后管理系统 (EsaleSystem) 一个基于 Spring Boot + Vue.js 的电商售后管理系统,提供订单管理、售后管理、库存管理、物流管理、财务统计等功能。 ## 技术栈 ### 后端技术 - **框架**: Spring Boot 3.2.6 - **数据库**: MySQL 8.0+ - **ORM**: MyBatis 3.5.14 - **缓存**: Redis - **邮件服务**: Spring Mail (Jakarta Mail) ### 前端技术 - **框架**: Vue 3 - **构建工具**: Vite - **UI**: 原生 CSS + Element UI 风格 - **图表**: Chart.js - **路由**: Vue Router ## 功能特性 ### 核心功能 | 模块 | 功能描述 | |------|----------| | 用户管理 | 用户列表、添加、编辑、删除、角色管理 | | 订单管理 | 订单列表、创建订单、查看详情、订单状态更新、发货功能 | | 售后管理 | 售后申请、退货/换货/维修、状态跟踪、金额计算 | | 库存管理 | 库存列表、库存扣减、库存回滚(退货时) | | 物流管理 | 物流记录、快递单号、出发地/目的地、状态跟踪 | | 通知管理 | 系统通知、邮件通知 | | 财务统计 | 订单收入、维修收入、退货支出、总利润统计、图表展示 | ### 特色功能 1. **自动库存管理** - 创建订单时自动扣减库存,退货时自动回滚 2. **智能发货** - 一键发货,自动生成快递单号,自动获取库存地址和收货地址 3. **售后金额计算** - 退货自动计算退款金额,维修支持手动输入费用 4. **邮件通知** - 关键事件自动发送邮件通知 5. **财务报表** - 可视化图表展示财务数据 ## 模块设计实现 ### 用户管理 用户管理模块负责系统用户的注册、登录和权限管理。后端采用 Spring Security 风格的认证机制,用户数据存储在 `user` 表中,包含用户名、密码(加密存储)、邮箱、手机号和角色字段。角色分为四级:普通用户、客服、仓储管理员和系统管理员,不同角色拥有不同的操作权限。前端提供用户列表展示、添加、编辑和删除功能,支持按用户名搜索,密码字段在编辑时自动隐藏。用户登录后通过 Session 保持会话,系统会记录用户的操作日志。 ### 订单管理 订单管理模块实现了完整的订单生命周期管理。创建订单时,系统支持用户名下拉选择、商品多选、数量输入和自动计算金额,订单号由系统自动生成(格式为 ORD + 时间戳 + 随机数)。订单状态流转包括待支付、待发货、已发货、已完成和已取消五个状态,支持手动更新状态或通过发货功能自动更新。订单详情页面展示订单基本信息、商品列表和物流信息,物流信息通过关联 delivery 表实现动态展示。后端采用事务管理确保订单创建和库存扣减的原子性,删除订单时先级联删除订单项以避免外键约束冲突。 ### 售后管理 售后管理模块支持退货、换货和维修三种售后类型。创建售后申请时,用户通过订单ID下拉选择关联订单,系统自动获取订单商品信息。退货订单的金额由系统根据商品单价和数量自动计算(负数表示退款),换货订单金额固定为0,维修订单支持手动输入维修费用。售后状态流转包含待审核、审核通过、审核拒绝、待寄回、待收货、处理中和已完成等状态,状态更新时自动发送系统通知和邮件通知。当退货订单完成时,系统自动将商品数量回滚到库存表中,实现库存的自动恢复。 ### 库存管理 库存管理模块负责商品库存的维护和更新。库存表包含商品ID、商品名称、单价、数量和库存地址字段,支持库存的添加、编辑和删除操作。创建订单时,系统自动检查库存充足性并扣减对应数量,库存不足时禁止下单并提示"已售罄"。退货完成时,库存自动增加退回商品的数量。前端库存列表展示商品基本信息和库存状态,支持按商品名称搜索,库存数量为0的商品会高亮显示"已售罄"标识。 ### 通知管理 通知管理模块实现系统通知和邮件通知的双重通知机制。系统通知存储在 `notification` 表中,包含通知标题、内容、类型和状态字段,用户登录后可查看未读通知。邮件通知通过 Spring Mail 实现,配置了 QQ 邮箱的 SMTP 服务,关键事件(如售后状态更新、订单发货)会自动向用户邮箱发送通知邮件。通知服务采用异步发送方式,避免影响主业务流程,邮件发送失败时记录日志但不影响系统正常运行。前端通知列表支持按用户ID筛选和标记已读功能。 ### 物流管理 物流管理模块负责订单物流信息的跟踪和管理。物流表包含订单ID、快递单号、出发地、目的地和状态字段,出发地自动获取商品的库存地址,目的地自动获取订单的收货地址。发货功能实现一键发货,自动生成快递单号(包含快递公司前缀),并为订单中的每个商品创建一条物流记录。物流状态包括运输中、已完成和已取消三种,支持手动更新状态。前端物流列表展示订单号、快递单号、出发地、目的地和状态,支持按订单号或快递单号搜索。 ### 财务统计 财务统计模块提供系统财务数据的统计和可视化展示。统计数据包括订单收入(所有订单金额总和)、维修收入(售后维修费用总和)、退货支出(退货退款金额总和)和总利润(订单收入 + 维修收入 - 退货支出)。后端通过 JdbcTemplate 实现高效的数据统计查询,支持按月度分组统计订单收入趋势。前端使用 Chart.js 实现三个可视化图表:月度收入趋势折线图、订单状态分布饼图和售后类型统计柱状图。统计页面采用响应式布局,支持不同屏幕尺寸的自适应显示。 ## 项目结构 ``` EsaleSystem/ ├── src/ │ └── main/ │ ├── java/org/example/esalesystem/ │ │ ├── controller/ # REST API 控制器 │ │ ├── service/ # 业务逻辑层 │ │ ├── service/impl/ # 业务逻辑实现 │ │ ├── mapper/ # MyBatis Mapper │ │ ├── entity/ # 实体类 │ │ └── EsaleSystemApplication.java │ └── resources/ │ └── application.properties ├── frontend/ │ ├── src/ │ │ ├── views/ # 页面组件 │ │ ├── router/ # 路由配置 │ │ ├── App.vue │ │ └── main.js │ ├── index.html │ ├── package.json │ └── vite.config.js ├── database.sql # 数据库初始化脚本 ├── test_data.sql # 测试数据 └── pom.xml # Maven 配置 ``` ## 快速开始 ### 环境要求 - JDK 17+ - Maven 3.8+ - MySQL 8.0+ - Redis (可选,用于缓存) - Node.js 16+ ### 数据库配置 1. 创建数据库: ```sql CREATE DATABASE esale_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 2. 执行数据库初始化脚本: ```bash mysql -u root -p esale_system < database.sql ``` 3. (可选)导入测试数据: ```bash mysql -u root -p esale_system < test_data.sql ``` ### 后端启动 ```bash cd EsaleSystem mvn spring-boot:run ``` 服务启动后访问:http://localhost:8080 ### 前端启动 ```bash cd frontend npm install npm run dev ``` 前端启动后访问:http://localhost:5173 ## API 接口 ### 用户相关 | 接口 | 方法 | 描述 | |------|------|------| | `/api/user/list` | GET | 获取用户列表 | | `/api/user/create` | POST | 创建用户 | | `/api/user/update` | PUT | 更新用户 | | `/api/user/delete/{id}` | DELETE | 删除用户 | | `/api/user/login` | POST | 用户登录 | ### 订单相关 | 接口 | 方法 | 描述 | |------|------|------| | `/api/order/list` | GET | 获取订单列表 | | `/api/order/create` | POST | 创建订单 | | `/api/order/update` | PUT | 更新订单 | | `/api/order/delete/{id}` | DELETE | 删除订单 | | `/api/order/detail/{id}` | GET | 获取订单详情 | | `/api/order/ship/{id}` | POST | 订单发货 | ### 售后相关 | 接口 | 方法 | 描述 | |------|------|------| | `/api/afterSales/list` | GET | 获取售后列表 | | `/api/afterSales/create` | POST | 创建售后申请 | | `/api/afterSales/update` | PUT | 更新售后申请 | | `/api/afterSales/updateStatus/{id}/{status}` | PUT | 更新售后状态 | ### 财务统计 | 接口 | 方法 | 描述 | |------|------|------| | `/api/finance/statistics` | GET | 获取财务统计数据 | | `/api/finance/orderRevenue` | GET | 获取订单收入 | | `/api/finance/totalProfit` | GET | 获取总利润 | ## 数据库设计 ### 核心表结构 #### 用户表 (user) | 字段 | 类型 | 说明 | |------|------|------| | id | BIGINT | 主键 | | username | VARCHAR(50) | 用户名 | | password | VARCHAR(100) | 密码 | | email | VARCHAR(100) | 邮箱 | | phone | VARCHAR(20) | 手机号 | | role | INT | 角色(1:用户,2:客服,3:仓储,4:管理员) | #### 订单表 (orders) | 字段 | 类型 | 说明 | |------|------|------| | id | BIGINT | 主键 | | user_id | BIGINT | 用户ID | | order_no | VARCHAR(50) | 订单号 | | total_amount | DECIMAL(10,2) | 总金额 | | shipping_address | VARCHAR(500) | 收货地址 | | status | INT | 状态(1-5) | #### 售后表 (after_sales) | 字段 | 类型 | 说明 | |------|------|------| | id | BIGINT | 主键 | | order_id | BIGINT | 订单ID | | order_item_id | BIGINT | 订单商品ID | | user_id | BIGINT | 用户ID | | type | INT | 类型(1:退货,2:换货,3:维修) | | amount | DECIMAL(10,2) | 金额(退货为负,维修为正,换货为0) | | status | INT | 状态(1-8) | ## 配置说明 ### 数据库配置 ```properties spring.datasource.url=jdbc:mysql://localhost:3306/esale_system spring.datasource.username=root spring.datasource.password=123456 ``` ### 邮件配置 ```properties spring.mail.host=smtp.qq.com spring.mail.port=465 spring.mail.username=your-email@qq.com spring.mail.password=your-password spring.mail.properties.mail.smtp.ssl.enable=true ``` ## 运行测试 ```bash # 后端测试 mvn test # 前端测试 npm test ``` ## 部署 ### 打包构建 ```bash # 后端打包 mvn clean package # 前端打包 cd frontend npm run build ``` ### 运行 ```bash java -jar target/EsaleSystem-0.0.1-SNAPSHOT.jar ``` ## 许可证 MIT License ## 贡献 欢迎提交 Issue 和 Pull Request!