# bakery-system **Repository Path**: Marsfactory/bakery-system ## Basic Information - **Project Name**: bakery-system - **Description**: 面包房系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-11-04 - **Last Updated**: 2025-12-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 面包房管理系统 ## 项目简介 本面包房管理系统是基于 **Spring Boot 3 + Vue 3** 开发的前后端分离项目,旨在解决面包房日常运营中的人员管理、商品管理、销售流程记录等核心业务需求。 ### 技术栈 **后端:** - Spring Boot 3.2.0 - MyBatis-Plus 3.5.5 - Sa-Token 1.37.0(权限认证) - Redis(缓存和Session存储) - MySQL 8.0+(数据库) **前端:** - Vue 3.4 - Vite 5.0 - Naive UI 2.38(UI组件库) - Pinia(状态管理) - Axios(HTTP客户端) - @vicons/ionicons5(图标库) ## 功能模块 ### 1. 员工管理模块 - ✅ 员工信息增删改查 - ✅ 角色管理(店长/店员) - ✅ 员工登录认证 - ✅ 密码修改 - ✅ 权限控制(店长可管理所有员工,店员只能修改自己的密码) ### 2. 面包管理模块 - ✅ 面包信息增删改查 - ✅ 分类管理(甜面包/咸面包/吐司) - ✅ 库存实时显示 - ✅ 上架/下架管理 - ✅ 价格、规格、描述等详细信息 ### 3. 销售记录模块 - ✅ 销售订单登记(支持多商品组合) - ✅ 自动计算订单金额 - ✅ 自动扣减库存(库存不足时提示) - ✅ 支付方式管理(现金/微信/支付宝) - ✅ 订单查询和筛选 - ✅ 订单详情查看 - ✅ 订单取消(仅店长可操作,自动恢复库存) - ✅ 销售统计(今日、本月销售额和订单数) - ✅ 热销商品排行榜 ### 4. 销售日志模块 - ✅ 基于MySQL触发器自动记录销售日志 - ✅ 新增销售自动记录 - ✅ 取消销售自动记录 - ✅ 日志查询和筛选 - ✅ 日志不可修改/删除,确保数据完整性 ### 5. 库存管理模块 - ✅ 库存实时查看 - ✅ 入库/出库操作 - ✅ 库存变动记录 - ✅ 变动记录查询和统计 ## 项目结构 ``` bakery-system/ ├── bakery-backend/ # 后端项目 │ ├── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/bakery/ │ │ │ ├── common/ # 通用类(统一响应) │ │ │ ├── config/ # 配置类(Sa-Token、CORS) │ │ │ ├── controller/ # 控制器层 │ │ │ ├── dto/ # 数据传输对象 │ │ │ ├── entity/ # 实体类 │ │ │ ├── exception/ # 异常处理 │ │ │ ├── mapper/ # Mapper接口 │ │ │ ├── service/ # 服务层 │ │ │ └── vo/ # 视图对象 │ │ └── resources/ │ │ └── application.yml # 配置文件 │ └── pom.xml │ ├── bakery-frontend/ # 前端项目 │ ├── src/ │ │ ├── api/ # API接口 │ │ ├── assets/ # 静态资源 │ │ ├── layout/ # 布局组件 │ │ ├── router/ # 路由配置 │ │ ├── stores/ # 状态管理 │ │ ├── utils/ # 工具类 │ │ ├── views/ # 页面组件 │ │ ├── App.vue │ │ └── main.js │ ├── index.html │ ├── package.json │ └── vite.config.js │ ├── database/ │ └── schema.sql # 数据库脚本 │ └── README.md ``` ## 安装和运行 ### 1. 环境准备 - JDK 17+ - Node.js 16+ - MySQL 8.0+ - Redis 5.0+ - Maven 3.6+ ### 2. 数据库初始化 ```bash # 1. 登录MySQL mysql -u root -p # 2. 执行数据库脚本 source database/schema.sql ``` 数据库脚本会自动创建: - 数据库:`bakery_system` - 6张数据表:员工表、面包表、销售订单表、订单明细表、销售日志表、库存变动表 - 2个触发器:自动记录销售日志 - 默认管理员账号:`admin` / `123456` - 6个示例面包数据 ### 3. 后端启动 ```bash # 1. 进入后端目录 cd bakery-backend # 2. 修改配置文件(如需要) # 编辑 src/main/resources/application.yml # 修改数据库连接信息和Redis配置 # 3. 安装依赖并启动 mvn clean install mvn spring-boot:run ``` 后端服务默认运行在 `http://localhost:8080/api` ### 4. 前端启动 ```bash # 1. 进入前端目录 cd bakery-frontend # 2. 安装依赖 npm install # 3. 启动开发服务器 npm run dev ``` 前端服务默认运行在 `http://localhost:3000` ### 5. 访问系统 打开浏览器访问:`http://localhost:3000` 默认管理员账号: - 账号:`admin` - 密码:`123456` ## 主要配置说明 ### 后端配置(application.yml) ```yaml # 数据库配置 spring: datasource: url: jdbc:mysql://localhost:3306/bakery_system?... username: root password: root # 修改为你的MySQL密码 # Redis配置 data: redis: host: localhost port: 6379 password: # 如果有密码,在此填写 # Sa-Token配置 sa-token: timeout: 2592000 # token有效期30天 ``` ### 前端配置(vite.config.js) ```javascript export default defineConfig({ server: { port: 3000, // 前端端口 proxy: { '/api': { target: 'http://localhost:8080', // 后端地址 changeOrigin: true } } } }) ``` ## API接口文档 ### 员工相关 - `POST /api/employee/login` - 员工登录 - `POST /api/employee/logout` - 员工登出 - `GET /api/employee/current` - 获取当前登录员工信息 - `GET /api/employee/page` - 分页查询员工 - `POST /api/employee` - 新增员工(仅店长) - `PUT /api/employee` - 更新员工 - `DELETE /api/employee/{id}` - 删除员工(仅店长) - `POST /api/employee/changePassword` - 修改密码 ### 面包相关 - `GET /api/bread/page` - 分页查询面包 - `GET /api/bread/list` - 查询所有在售面包 - `GET /api/bread/{id}` - 获取面包详情 - `POST /api/bread` - 新增面包 - `PUT /api/bread` - 更新面包 - `DELETE /api/bread/{id}` - 下架面包 - `POST /api/bread/changeStock` - 库存变动 - `GET /api/bread/stockRecord/page` - 查询库存变动记录 ### 销售相关 - `POST /api/sales/order` - 创建销售订单 - `GET /api/sales/order/page` - 分页查询订单 - `GET /api/sales/order/{id}` - 获取订单详情 - `POST /api/sales/order/cancel/{id}` - 取消订单(仅店长) - `GET /api/sales/statistics` - 销售统计 - `GET /api/sales/log/page` - 分页查询销售日志 ## 核心功能实现 ### 1. 权限认证 使用 **Sa-Token** 实现: - 基于Token的无状态认证 - Redis存储Session - 拦截器统一鉴权 - 注解式权限控制(`@SaCheckRole("MANAGER")`) ### 2. 库存管理 - 销售时自动扣减库存 - 库存不足时拒绝销售 - 取消订单时自动恢复库存 - 所有库存变动都有记录可追溯 ### 3. 销售日志 使用 **MySQL触发器** 实现: - 新增订单自动触发日志记录 - 取消订单自动触发日志记录 - 日志包含完整的操作详情 - 不可修改和删除,确保数据完整性 ### 4. 数据统计 - 实时计算今日/本月销售额 - 订单数量统计 - 热销商品排行榜 - 支持自定义时间范围统计 ## 注意事项 1. **数据库时区**:确保MySQL时区设置为 `Asia/Shanghai` 2. **Redis连接**:确保Redis服务正常运行 3. **端口占用**:确保8080(后端)和3000(前端)端口未被占用 4. **BCrypt密码**:系统使用BCrypt加密密码,默认密码为 `123456` 5. **触发器**:数据库脚本会自动创建触发器,无需手动创建 ## 生产部署 ### 后端打包 ```bash cd bakery-backend mvn clean package # 生成的jar包位于 target/bakery-backend-1.0.0.jar java -jar target/bakery-backend-1.0.0.jar ``` ### 前端打包 ```bash cd bakery-frontend npm run build # 生成的静态文件位于 dist/ 目录 # 可以部署到Nginx等Web服务器 ``` ## 常见问题 ### 1. 后端启动失败 - 检查JDK版本是否为17+ - 检查MySQL和Redis是否正常运行 - 检查配置文件中的数据库连接信息 ### 2. 前端无法访问后端 - 检查后端是否正常启动 - 检查vite.config.js中的代理配置 - 检查浏览器控制台是否有跨域错误 ### 3. 登录后提示未授权 - 检查Redis是否正常运行 - 清除浏览器localStorage - 检查Sa-Token配置 ## 贡献 欢迎提交Issue和Pull Request! ## 许可 MIT License ## 联系方式 如有问题,请通过以下方式联系: - 提交Issue - 发送邮件 --- **开发日期:** 2025年11月 **版本:** v1.0.0