💖💖作者:计算机编程小咖
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
深度学习实战项目
目录
- 美食配送平台介绍
- 美食配送平台演示视频
- 美食配送平台演示图片
- 美食配送平台代码展示
- 美食配送平台文档展示
美食配送平台介绍
本系统《基于Spring Boot的美食配送平台》是一个面向餐饮外卖场景的综合性毕业设计项目,旨在为计算机专业学生提供一套从订单生成到配送完成的全链路管理解决方案。系统采用B/S架构,服务端以Spring Boot作为核心框架,整合Spring MVC处理请求路由、MyBatis作为持久层组件与MySQL数据库交互,前端则运用Vue.js配合ElementUI组件库构建响应式界面,并辅以HTML页面提升交互流畅度。在功能层面,平台划分了用户、商家、骑手三种核心角色:普通用户可以浏览首页轮播图与美食资讯,按美食类型筛选菜品并下单,随后追踪配送订单的实时状态,完成后还能对骑手进行评价,同时提供厨师预约和在线客服功能;商家端负责管理自家的美食信息、接收并处理美食订单;骑手端则聚焦配送订单的获取与状态更新,将已送订单归档以便结算;系统管理员拥有全局权限,包括用户与骑手审核、商家入驻审批、美食类型维护、轮播图动态配置、订单全流程监控以及账户权限分配等后台管理操作。整个项目贴合真实外卖平台业务逻辑,涵盖数据表设计、多角色权限控制、订单状态机流转、前后端联调等毕设核心考察点,代码量适中且模块清晰,既便于学生快速理解业务,又为二次功能扩展留足空间,是计算机专业毕业生锻炼工程实践能力的理想选题。
美食配送平台演示视频
项目演示视频
美食配送平台演示图片
美食配送平台代码展示
// ==================== 功能一:美食订单创建与状态初始化 ====================@Transactional(rollbackFor=Exception.class)publicApiResponsecreateFoodOrder(OrderCreateDTOdto){// 构建SparkSession用于离线分析用户下单行为(大数据引用)SparkSessionspark=SparkSession.builder().appName("FoodOrderAnalysis").master("local[*]").config("spark.sql.shuffle.partitions","4").getOrCreate();// 1. 校验美食库存(MyBatis查询)Foodfood=foodMapper.selectByPrimaryKey(dto.getFoodId());if(food.getStock()<dto.getQuantity()){spark.stop();returnApiResponse.error("库存不足,当前剩余:"+food.getStock());}// 2. 扣减库存并更新food.setStock(food.getStock()-dto.getQuantity());foodMapper.updateByPrimaryKeySelective(food);// 3. 生成订单号(时间戳+随机数)StringorderNo="FOOD"+System.currentTimeMillis()+(int)(Math.random()*1000);// 4. 构建订单实体(状态:0-待接单,1-已接单,2-配送中,3-已完成,4-已取消)FoodOrderorder=newFoodOrder();order.setOrderNo(orderNo);order.setUserId(dto.getUserId());order.setFoodId(dto.getFoodId());order.setShopId(food.getShopId());order.setQuantity(dto.getQuantity());order.setTotalPrice(food.getPrice()*dto.getQuantity());order.setStatus(0);order.setCreateTime(newDate());order.setPayStatus(0);// 0-未支付order.setAddress(dto.getAddress());order.setPhone(dto.getPhone());// 5. 插入订单主表foodOrderMapper.insertSelective(order);// 6. 记录订单日志(大数据Spark写入Hive模拟,此处仅作展示)Dataset<Row>orderDF=spark.createDataFrame(Arrays.asList(RowFactory.create(orderNo,dto.getUserId(),food.getShopId(),dto.getTotalPrice(),newTimestamp(System.currentTimeMillis()))),StructType.fromDDL("orderNo STRING, userId INT, shopId INT, amount DOUBLE, createTime TIMESTAMP"));orderDF.write().mode("append").format("parquet").save("/user/hive/warehouse/order_log");spark.stop();returnApiResponse.success("订单创建成功",orderNo);}// ==================== 功能二:配送订单接单与状态流转 ====================@Transactional(rollbackFor=Exception.class)publicApiResponseacceptDeliveryOrder(IntegerorderId,IntegerriderId){// SparkSession用于实时分析配送超时风险(大数据引用)SparkSessionspark=SparkSession.builder().appName("DeliveryRiskAnalysis").master("local[*]").config("spark.sql.adaptive.enabled","true").getOrCreate();// 1. 查询订单当前状态(必须是待接单状态0)FoodOrderorder=foodOrderMapper.selectByPrimaryKey(orderId);if(order==null||order.getStatus()!=0){spark.stop();returnApiResponse.error("订单状态异常,当前状态:"+(order==null?"不存在":order.getStatus()));}// 2. 校验骑手是否已被占用(查询该骑手是否有进行中的订单)FoodOrderexample=newFoodOrder();example.setRiderId(riderId);example.setStatus(2);// 配送中List<FoodOrder>runningOrders=foodOrderMapper.selectByCondition(example);if(runningOrders!=null&&runningOrders.size()>=3){spark.stop();returnApiResponse.error("该骑手已有3单配送中,无法继续接单");}// 3. 更新订单状态为“已接单”(状态1),并绑定骑手order.setStatus(1);order.setRiderId(riderId);order.setAcceptTime(newDate());foodOrderMapper.updateByPrimaryKeySelective(order);// 4. 插入配送明细表(记录接单动作)DeliveryDetaildetail=newDeliveryDetail();detail.setOrderId(orderId);detail.setRiderId(riderId);detail.setActionType(1);// 1-接单detail.setActionTime(newDate());detail.setRemark("骑手已接单,准备取餐");deliveryDetailMapper.insertSelective(detail);// 5. 大数据分析:计算该骑手今日接单总量,用于后续调度优化(仅记录)Dataset<Row>riderStatDF=spark.sql("SELECT rider_id, COUNT(*) as total FROM delivery_detail "+"WHERE action_type=1 AND DATE(action_time)=CURRENT_DATE() GROUP BY rider_id");riderStatDF.show(10,false);spark.stop();returnApiResponse.success("接单成功,请前往取餐");}// ==================== 功能三:骑手评价提交与评分聚合 ====================publicApiResponsesubmitRiderComment(CommentCreateDTOdto){// SparkSession用于离线计算骑手平均评分(大数据引用)SparkSessionspark=SparkSession.builder().appName("RiderRatingAggregation").master("local[*]").config("spark.sql.warehouse.dir","/user/hive/warehouse").getOrCreate();// 1. 校验订单是否已完成(状态3)且未被评价FoodOrderorder=foodOrderMapper.selectByPrimaryKey(dto.getOrderId());if(order==null||order.getStatus()!=3){spark.stop();returnApiResponse.error("订单未完成或不存在,无法评价");}Commentexisting=commentMapper.selectByOrderId(dto.getOrderId());if(existing!=null){spark.stop();returnApiResponse.error("该订单已评价,不可重复提交");}// 2. 构建评价实体(评分1-5星)Commentcomment=newComment();comment.setOrderId(dto.getOrderId());comment.setRiderId(order.getRiderId());comment.setUserId(order.getUserId());comment.setScore(dto.getScore());comment.setContent(dto.getContent());comment.setCreateTime(newDate());commentMapper.insertSelective(comment);// 3. 更新订单评价标记(已评价)order.setIsCommented(1);foodOrderMapper.updateByPrimaryKeySelective(order);// 4. 大数据计算:该骑手所有历史评价的平均分(写入缓存展示用)Dataset<Row>ratingDF=spark.sql("SELECT rider_id, AVG(score) as avg_score, COUNT(*) as cnt "+"FROM comment WHERE rider_id = "+order.getRiderId()+" GROUP BY rider_id");List<Row>rows=ratingDF.collectAsList();doubleavgScore=0.0;intcnt=0;if(rows!=null&&!rows.isEmpty()){avgScore=rows.get(0).getDouble(1);cnt=rows.get(0).getInt(2);}// 5. 更新骑手表的评分缓存字段Riderrider=riderMapper.selectByPrimaryKey(order.getRiderId());if(rider!=null){rider.setAvgScore(BigDecimal.valueOf(avgScore));rider.setCommentCount(cnt);riderMapper.updateByPrimaryKeySelective(rider);}spark.stop();returnApiResponse.success("评价成功,感谢您的反馈!当前骑手平均分:"+String.format("%.1f",avgScore)+"(共"+cnt+"人评价)");}美食配送平台文档展示
💖💖作者:计算机编程小咖
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
深度学习实战项目