# mealengine **Repository Path**: sukizi/mealengine ## Basic Information - **Project Name**: mealengine - **Description**: 基于SpringBoot的餐饮会员储蓄管理系统 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-15 - **Last Updated**: 2026-05-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringBoot, Spring, Java, MySQL, MyBatis ## README # MealEngine 餐饮管理系统 MealEngine 是一个基于 Spring Boot 构建的现代化餐饮管理与会员积分系统,提供菜品展示、VIP会员管理、储值卡管理、优惠券兑换、预点单服务、客服工单、通知系统等功能的完整解决方案。 ## 项目简介 MealEngine 为餐饮商家提供了一套完整的数字化经营管理系统,包括: - **菜品管理**:浏览、添加、修改、删除菜品,支持分类和上下架状态管理 - **用户系统**:用户注册、登录、积分管理、个人中心 - **VIP会员体系**:根据累计消费金额自动升级会员等级(VIP0-VIP5),享受不同等级折扣优惠(7.5-9.5折) - **储值卡管理**:创建储值卡、绑定用户、充值扣费、余额查询 - **优惠券系统**:通过CDK兑换码领取积分、VIP等级或余额奖励,支持单品赠送和种类任选优惠券 - **预点单服务**:用户在线下单,支持堂食、外送,生成取餐号,管理员后台处理 - **订单与流水记录**:完整的消费记录、余额变动日志 - **管理后台**:数据统计看板、用户/卡/券/权益全生命周期管理 - **实时通知**:WebSocket实时推送订单状态更新、系统通知 - **广告管理**:发布轮播广告、公告信息 - **客服工单**:处理用户反馈、投诉、建议,支持实时聊天 - **用户画像分析**:基于消费数据分析用户偏好 - **线上支付**:支持线上充值和支付开关控制 ## 技术栈 - **后端框架**: Spring Boot 3.5.13 - **持久层**: MyBatis-Spring-Boot-Starter 3.0.4 - **安全框架**: Spring Security - **数据库驱动**: MySQL Connector/J(runtime) - **辅助库**: Lombok、Spring Websocket - **前端**: 原生 HTML + JavaScript(无框架) - **构建工具**: Maven 3.x ## 在线演示 - **演示地址**:meal.sukiz.uno - **演示管理员账号**:admin - **演示管理员密码**:mealengine ## 快速开始 ### 环境要求 - JDK 17+ - Maven 3.8+ - MySQL 5.7+ ### 配置数据库 创建数据库并导入初始化脚本: ```sql CREATE DATABASE mealengine DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE mealengine; SOURCE sql/schema.sql; ``` 修改 `src/main/resources/application.yml` 中的数据库连接配置: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/mealengine?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: your_username password: your_password ``` ### 构建运行 ```bash mvn clean install java -jar target/MealEngine-1.6.4-RELEASE.jar ``` 访问 http://localhost:8080 进入系统。 ## 系统功能 ### 用户端 | 功能 | 说明 | |------|------| | 注册登录 | 用户注册、账号登录、密码找回 | | 浏览菜品 | 查看在售菜品及价格、分类筛选 | | 积分查询 | 查看累计积分、当前VIP等级、历史积分变动 | | 储值卡 | 绑定储值卡、查看余额、充值、消费扣费 | | VIP福利 | 查看会员等级对应的折扣优惠、VIP权益 | | CDK兑换 | 输入兑换码领取积分、VIP等级或余额奖励 | | 预点单 | 在线下单、生成取餐号、查看订单状态,支持堂食和外送 | | 优惠券 | 查看可用优惠券、使用优惠券 | | 个人中心 | 个人信息管理、订单历史、消费记录、通知中心 | | 客服支持 | 创建工单、与客服实时聊天 | ### 管理端 | 功能 | 说明 | |------|------| | 数据面板 | 实时统计:用户数、订单数、营收、VIP分布等 | | 菜品管理 | 添加、修改、删除菜品、上下架管理 | | 用户管理 | 查看、创建、编辑用户、重置密码、角色管理 | | 储值卡管理 | 创建卡、绑定用户、充值/扣费、冻结/解冻 | | 消费记录 | 查看所有订单记录、导出报表 | | VIP权益管理 | 配置各等级会员权益、折扣比例、升级规则 | | CDK生成 | 批量生成兑换码、设置类型和面值 | | 预点单管理 | 查看待处理订单、完成/取消预点单 | | 广告管理 | 发布轮播广告、公告信息 | | 客服工单 | 处理用户反馈、投诉、建议,支持实时回复 | | 优惠券管理 | 创建优惠券、发放优惠券、查看使用情况 | | 通知管理 | 向用户发送系统通知、查看通知历史 | | 系统设置 | 线上支付开关、其他配置 | ## 项目结构 ``` src/main/java/com/suki/mealengine/ ├── MealEngineApplication.java # 启动类 ├── config/ # 配置类 │ ├── GlobalExceptionHandler # 全局异常处理 │ ├── SecurityConfig # 安全配置(Spring Security) │ ├── WebConfig # Web配置(CORS、静态资源) │ └── WebSocketConfig # WebSocket配置 ├── controller/ # 控制器 │ └── ApiController # REST API接口 ├── dto/ # 数据传输对象 │ ├── Result # 统一响应结果封装 │ └── UserPortraitDTO # 用户画像数据传输对象 ├── entity/ # 实体类 │ ├── User # 用户实体 │ ├── Dish # 菜品实体 │ ├── ConsumptionRecord # 消费记录实体 │ ├── SavingsCard # 储值卡实体 │ ├── VipBenefit # VIP权益实体 │ ├── Cdk # 兑换码实体 │ ├── BalanceLog # 余额日志实体 │ ├── Preorder # 预点单实体 │ ├── Advertisement # 广告实体 │ ├── SupportTicket # 客服工单实体 │ ├── SupportMessage # 客服消息实体 │ ├── Notification # 通知实体 │ ├── Coupon # 优惠券实体 │ └── UserCoupon # 用户优惠券实体 ├── mapper/ # MyBatis Mapper接口 │ ├── UserMapper │ ├── DishMapper │ ├── ConsumptionRecordMapper │ ├── SavingsCardMapper │ ├── VipBenefitMapper │ ├── CdkMapper │ ├── BalanceLogMapper │ ├── PreorderMapper │ ├── AdvertisementMapper │ ├── SupportTicketMapper │ ├── SupportMessageMapper │ ├── NotificationMapper │ ├── CouponMapper │ └── UserCouponMapper └── service/ # 业务服务 ├── BusinessLogicService # 核心业务逻辑(事务管理) ├── CustomUserDetailsService # 用户认证服务 ├── SupportCleanupService # 客服工单清理服务 ├── WebSocketNotifyService # WebSocket通知服务 └── NotificationService # 通知服务 ``` ## API 接口 ### 用户接口 - `POST /api/login` - 用户登录 - `POST /api/register` - 用户注册 - `GET /api/dishes` - 获取菜品列表(支持分页和分类) - `GET /api/user/{id}` - 获取用户信息 - `GET /api/user/{id}/benefits` - 获取用户VIP权益 - `GET /api/user/{id}/card` - 获取储值卡信息 - `GET /api/user/{id}/records` - 获取消费记录(分页) - `GET /api/user/{id}/preorders` - 获取用户预点单列表 - `POST /api/user/redeem` - CDK兑换 - `POST /api/user/bind-card` - 绑定储值卡 - `POST /api/user/recharge` - 储值卡充值 - `POST /api/user/checkout` - 散客结账 - `POST /api/user/preorder` - 创建预点单 - `GET /api/user/{id}/coupons` - 获取用户优惠券 - `POST /api/user/coupon/{userCouponId}/use` - 使用优惠券 - `GET /api/user/{id}/notifications` - 获取用户通知 - `POST /api/user/notification/{id}/read` - 标记通知已读 - `POST /api/user/{userId}/notifications/read-all` - 标记所有通知已读 - `DELETE /api/user/notification/{id}` - 删除通知 - `POST /api/user/support/ticket` - 创建客服工单 - `GET /api/user/{id}/support/tickets` - 获取用户工单 - `GET /api/user/support/ticket/{ticketId}/messages` - 获取工单消息 - `POST /api/user/support/ticket/{ticketId}/message` - 发送工单消息 - `POST /api/user/support/ticket/{ticketId}/close` - 关闭工单 - `GET /api/advertisements` - 获取广告列表 ### 管理接口 - `GET /api/admin/dishes` - 获取所有菜品(分页) - `POST /api/admin/dish` - 添加菜品 - `PUT /api/admin/dish/{id}` - 更新菜品 - `DELETE /api/admin/dish/{id}` - 删除菜品 - `GET /api/admin/users` - 获取所有用户(分页) - `POST /api/admin/user` - 创建用户 - `PUT /api/admin/user/{id}` - 更新用户信息 - `PUT /api/admin/user/{id}/role` - 更新用户角色 - `GET /api/admin/user/{id}/portrait` - 获取用户画像 - `GET /api/admin/cards` - 获取所有储值卡(分页) - `POST /api/admin/card/create` - 创建储值卡 - `POST /api/admin/card/toggle-status` - 切换卡状态 - `POST /api/admin/card/cancel` - 注销储值卡 - `POST /api/admin/bind-card` - 绑定储值卡 - `POST /api/admin/recharge` - 储值卡充值 - `POST /api/admin/deduct` - 储值卡扣费 - `POST /api/admin/checkout` - 结账下单 - `GET /api/admin/records` - 获取所有消费记录(分页) - `GET /api/admin/benefits` - 获取VIP权益配置 - `POST /api/admin/benefit` - 添加VIP权益 - `PUT /api/admin/benefit/{id}` - 更新VIP权益 - `DELETE /api/admin/benefit/{id}` - 删除VIP权益 - `POST /api/admin/cdk/generate` - 批量生成CDK - `DELETE /api/admin/cdk/{id}` - 删除CDK - `GET /api/admin/preorders` - 获取所有预点单(分页) - `POST /api/admin/preorder/{id}/complete` - 完成预点单 - `POST /api/admin/preorder/{id}/advance` - 推进预点单状态 - `POST /api/admin/preorder/{id}/cancel` - 取消预点单 - `GET /api/admin/advertisements` - 获取广告列表 - `POST /api/admin/advertisement` - 添加广告 - `PUT /api/admin/advertisement/{id}` - 更新广告 - `DELETE /api/admin/advertisement/{id}` - 删除广告 - `GET /api/admin/support/tickets` - 获取所有工单 - `GET /api/admin/support/ticket/{ticketId}/messages` - 获取工单消息 - `POST /api/admin/support/ticket/{ticketId}/message` - 回复工单 - `POST /api/admin/support/ticket/{ticketId}/close` - 关闭工单 - `GET /api/admin/support/tickets/count-open` - 获取未处理工单数 - `GET /api/admin/coupons` - 获取所有优惠券 - `POST /api/admin/coupon/create` - 创建优惠券 - `POST /api/admin/coupon/issue` - 发放优惠券 - `PUT /api/admin/coupon/update` - 更新优惠券 - `DELETE /api/admin/coupon/{couponId}` - 删除优惠券 - `GET /api/admin/coupon/{couponId}/users` - 获取优惠券用户持有情况 - `GET /api/admin/notifications` - 获取所有通知 - `POST /api/admin/notification/send` - 发送通知 - `DELETE /api/admin/notification/{id}` - 删除通知 - `GET /api/settings/online-payment` - 获取线上支付设置 - `POST /api/admin/settings/online-payment` - 设置线上支付开关 ## 会员等级规则 系统根据用户累计消费金额自动计算VIP等级: | 等级 | 消费金额要求 | 折扣 | |------|--------------|------| | VIP 0 | ¥0 | 无折扣 | | VIP 1 | ¥100 | 9.5折 | | VIP 2 | ¥500 | 9折 | | VIP 3 | ¥1000 | 8.5折 | | VIP 4 | ¥2000 | 8折 | | VIP 5 | ¥5000 | 7.5折 | ## 页面说明 - `index.html` - 食客观看菜品页面(前台首页) - `login.html` - 登录/注册页面 - `user.html` - 用户个人中心(含预点单、储值卡、VIP权益、优惠券、通知) - `admin.html` - 管理后台(数据看板、各项管理功能) ## 许可证 MIT License ## 版本信息 - 当前版本: 1.7.1-RELEASE - Spring Boot: 3.5.13 - MyBatis: 3.0.4