1. 项目背景与核心价值
高校食堂点餐配送系统这个选题源于校园生活的真实痛点。每到饭点,食堂窗口前总是排起长队,学生浪费大量时间在排队上,而食堂工作人员也面临高峰期订单集中、错单漏单等问题。我去年在母校食堂做调研时发现,中午12点到12点半这半小时内,平均每个学生要花费15-20分钟排队,相当于每天损失近1/6的午休时间。
这个系统采用SpringBoot+Android+小程序的混合架构,实现了三大核心功能:
- 线上菜单浏览与下单(解决排队问题)
- 智能分单与配送追踪(优化食堂运营)
- 评价反馈系统(提升服务质量)
技术选型上,SpringBoot后端提供了RESTful API接口,Android原生应用保证配送员端的稳定性,微信小程序则覆盖学生用户群体。这种架构既利用了小程序"即用即走"的特性,又通过原生应用保障了配送环节的可靠性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计详解
2.1 技术栈选型依据
后端选择SpringBoot 2.7.x(非最新3.x版本)主要考虑:
- 社区支持成熟,遇到问题容易找到解决方案
- 与MyBatis、Redis等中间件整合文档丰富
- 毕业生就业市场SpringBoot需求量大
数据库采用MySQL 8.0+,关键配置:
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/canteen?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 加密存储
hikari:
maximum-pool-size: 20 # 根据食堂规模调整
2.2 微服务模块划分
系统按功能拆分为六个微服务:
- 用户服务(学生/配送员/商家)
- 菜单服务(菜品CRUD+分类)
- 订单服务(核心业务逻辑)
- 支付服务(微信支付对接)
- 配送服务(路径规划+状态更新)
- 评价服务(评分+评论)
注意:学生毕设项目建议先用单体架构,后期再拆分为微服务。本示例为展示完整架构设计。
3. 核心功能实现细节
3.1 微信小程序端关键代码
订单创建流程的核心逻辑:
java复制@PostMapping("/orders")
public Result createOrder(@RequestBody OrderDTO orderDTO) {
// 1. 校验库存
List<Dish> dishes = dishService.checkStock(orderDTO.getDishIds());
// 2. 计算总价(考虑优惠券)
BigDecimal amount = calculateTotal(dishes, orderDTO.getCouponId());
// 3. 创建订单(数据库事务)
Order order = orderService.create(orderDTO, amount);
// 4. 触发支付
return payService.createPayment(order);
}
3.2 Android配送端特色功能
配送员接单后,系统会:
- 基于Dijkstra算法计算最优配送路径
- 实时更新订单状态(已接单→配送中→已送达)
- 异常情况处理(如订单超时自动转单)
路径规划核心代码:
kotlin复制fun calculateRoute(buildings: List<Building>): Path {
val graph = buildGraph(buildings)
return Dijkstra.findShortestPath(graph,
currentLocation,
targetLocation)
}
4. 数据库设计要点
4.1 主要表结构
订单表关键字段设计:
sql复制CREATE TABLE `orders` (
`id` BIGINT PRIMARY KEY,
`student_id` BIGINT NOT NULL,
`status` TINYINT DEFAULT 0 COMMENT '0待支付,1已支付,2已接单...',
`total_amount` DECIMAL(10,2),
`delivery_address` VARCHAR(255),
`estimated_time` DATETIME,
`rider_id` BIGINT,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
4.2 索引优化方案
高频查询字段必须加索引:
sql复制ALTER TABLE `orders` ADD INDEX `idx_student_status` (`student_id`, `status`);
ALTER TABLE `dishes` ADD INDEX `idx_canteen_status` (`canteen_id`, `status`);
5. 部署与运维实践
5.1 服务器配置建议
最低生产环境配置:
- 2核4G云服务器(学生可申请教育优惠)
- CentOS 7.6+ 或 Ubuntu 20.04 LTS
- MySQL 8.0+ 独立实例
- Redis 6.x 缓存服务
5.2 监控方案
使用SpringBoot Actuator暴露健康检查端点:
properties复制management.endpoints.web.exposure.include=health,info,metrics
management.endpoint.health.show-details=always
配合Prometheus+Grafana实现可视化监控:
yaml复制# application-prometheus.yml
management:
metrics:
export:
prometheus:
enabled: true
6. 常见问题解决方案
6.1 微信支付回调失败
典型报错:"签名验证失败"
排查步骤:
- 检查商户密钥是否正确
- 验证通知参数是否被篡改
- 确认证书路径配置正确
6.2 订单状态不同步
解决方案:
- 引入状态机明确状态流转规则
- 添加操作日志表记录所有变更
- 使用分布式锁防止并发修改
状态机配置示例:
java复制@Configuration
public class OrderStateMachineConfig {
@Bean
public StateMachine<OrderStatus, OrderEvent> stateMachine() {
StateMachineBuilder.Builder<OrderStatus, OrderEvent> builder = ...;
// 配置状态转移规则
}
}
7. 项目扩展方向
已完成基础功能的同学可以考虑:
- 加入智能推荐算法(基于历史订单)
- 实现食堂人流热力图
- 开发管理端数据分析看板
- 接入人脸识别支付
推荐系统伪代码:
python复制def recommend_dishes(user_id):
history = get_order_history(user_id)
similar_users = find_similar_users(history)
return aggregate_preferences(similar_users)
这个项目我从技术选型到部署上线共耗时3个月,最大的收获是理解了如何平衡技术先进性与项目可行性。建议学弟学妹们先确保核心流程跑通,再考虑添加高级功能。在数据库设计阶段多花时间,后期能避免80%的性能问题
