文章目录
项目演示视频
是否包含论文文档
否
详细描述
基于遗传算法的外卖配送系统
源码乐园出品-必属精品
1. 项目概述
1.1 项目背景
随着外卖与同城即时配送需求增长,订单呈现“高频、小单、时效强、分布离散”的特点,且存在“取餐点(门店/站点)—送达点(用户地址)”的双节点约束与承诺送达时间窗。传统人工派单与固定路线难以兼顾成本与准时率,常出现配送员负载不均、绕路里程大、峰值拥堵与延迟投诉等问题。本项目面向“用户下单支付—门店出餐/备货—配送员取送—签收评价”的全链路,构建可实时跟踪、可度量、可优化的外卖配送系统,并引入遗传算法在时间窗内对订单聚合与路径求解,生成更优的派单与路线方案,提升整体履约效率与用户体验。
整体功能介绍(约200字):系统由后台管理端(Admin)与客户前台(C端)组成,覆盖“商品供给—下单支付—出餐—派送—签收—评价”的履约闭环。后台侧包含外卖管理员、商家、配送员、外卖用户等角色:商家维护商品与出餐;配送员在任务中心一键推进节点状态,并可在遗传算法页面查看基于高德地图的路线规划;外卖管理员统一维护站点、配送员、商品/分类、订单、任务、评价、服务区域,并可在 GA/AI 模块辅助调度。系统以“取餐坐标 + 送达坐标 + 承诺时间窗”为核心约束,引入遗传算法生成可执行的配送顺序与派单结果,并提供可视化线路验证。
1.2 角色作用(每个角色100字以内)
-
客户(C端):浏览商品、下单支付、查看订单进度并评价,驱动业务流转与体验反馈闭环。
-
配送员(takeout_courier):执行配送任务、上报节点状态、维护当前位置并查看路线规划,为时效与成本优化提供一线数据。
-
商家(takeout_merchant):维护商品供给与出餐节奏,确保“可取餐”状态准确,保障履约起点可控。
-
外卖管理员(takeout_admin):运营与管控全局,维护站点/配送员/商品与订单,处理异常并监控 GA/AI 调度。
2. 角色设计
2.1 角色清单与介绍(每个角色100字以内)
-
外卖管理员(takeout_admin):后台运营管理员,拥有外卖配送模块全量菜单权限,负责运力/订单/任务/评价与站点配置,并可进行 GA/AI 辅助调度。
-
配送员(takeout_courier):仅可见配送任务、遗传算法规划、抢单大厅菜单;数据范围严格限定为“仅本人任务/路线”。
-
商家(takeout_merchant):仅可见商品管理、订单管理、出餐管理菜单;订单数据范围按“该商家发布的商品产生的订单”进行过滤。
-
客户(C端):前台用户,走
/c/*路由;查看订单详情、状态时间线与评价(与后台 RBAC 菜单体系分离)。
2.2 菜单与角色映射(以现有 SQL 为准)
外卖配送模块菜单(route.takeout_*)与角色绑定关系如下:
| 角色 | roleKey | 可见菜单(Admin 端) |
|---|---|---|
| 外卖管理员 | takeout_admin | 站点、配送员、商品分类、商品、订单、任务、评价、GA、AI、服务区域、出餐、抢单大厅管理、商家管理 |
| 配送员 | takeout_courier | 配送任务、GA、抢单大厅 |
| 外卖用户 | takeout_customer | 订单、评价、抢单大厅 |
| 商家 | takeout_merchant | 商品、订单、出餐 |
3. 角色功能设计
3.1 普通用户(客户)(功能点≤5)
-
注册/登录与个人信息:支持手机号/账号登录与基础资料维护,保障下单身份一致性;可管理默认地址与联系方式,减少重复输入并提升下单效率。
-
商品浏览与搜索:提供分类、关键字与排序筛选,展示库存、价格与销量等关键信息;支持查看商品详情与评价摘要,帮助用户快速做出购买决策。
-
购物车管理:支持加入/删除商品、修改数量与规格,实时计算合计金额与优惠信息;下单前可核对商品清单,降低错买漏买并提升转化率。
-
在线下单与支付:生成订单并校验库存、地址与配送范围,支持选择承诺送达时间窗与配送方式;支付成功后进入履约流程并生成配送费与预计送达时间,减少人工干预与延迟。
-
订单跟踪与评价:提供订单状态、取餐点与配送员信息及关键节点时间线,支持查看预计送达与超时预警;订单完成后可对配送服务进行评价并可追溯处理结果。
3.2 配送员(功能点≤5)
-
任务中心(/takeout/task):只展示“配送员用户ID=当前登录用户”的任务;配送员不可见新增/删除按钮,仅可编辑自己的任务;提供“快捷下一状态”按钮(10→20→30→40)减少操作成本。
-
抢单大厅(/takeout/grab):展示待接单(20)与待取餐(30)订单,可查看取餐地址与送达地址并执行抢单;页面不提供站点ID筛选,不提供批量删除。
-
遗传算法路线规划(/takeout/ga):仅可选择本人;查询本人当前位置 + 未完成任务关联订单,按规则生成路线并在高德地图绘制(未取餐→目标为取餐点;已取餐→目标为送达点)。
-
位置上报(档案):配送员维护当前经纬度与地址(用于就近匹配/GA 规划);位置为空时 GA 规划需提示维护当前位置。
-
状态回传:任务状态变更需联动订单状态推进(后端强制映射,避免前端篡改)。
3.3 管理员(管理员功能点不限制)
-
用户管理:对普通用户进行查询、禁用与信息核验,支持查看下单与评价行为摘要;用于处理投诉、识别异常账号并保障交易与履约秩序稳定。
-
配送员管理:维护配送员档案、所属站点、服务区域与可用时段,支持启停用与能力标签配置;用于匹配派单策略并在高峰期进行临时运力调度与补位。
-
订单管理与指派:统一查看订单全生命周期,支持编辑收货信息、取消/退款、手动指派与改派;可按异常状态快速定位问题订单并触发补救流程。
-
商品管理:维护商品分类、价格、库存与上下架状态,支持批量导入与库存预警;确保前台展示与下单校验一致,降低超卖与错误定价带来的损失。
-
站点管理:维护取件/中转/仓库等站点名称、经纬度与地址,支持启停用与覆盖区域配置;用于约束派单与路线规划输入,保证地图导航与计算坐标准确。
-
派送评价管理:审核与屏蔽不当评价,支持关联订单与配送记录核验;对配送服务问题进行归因分析,推动配送端改进并降低负面舆情。
-
统计分析:按时间、区域、品类统计订单量与完成率,提供配送时长、里程、成本等效率指标;用于运营决策、绩效考核与资源投放优化。
-
路径规划模块(/takeout/ga):支持选择任意配送员查看当前位置与未完成任务线路;管理员可用于调度校验与策略验证(高德地图可视化)。
-
自动派单/策略:GA 适应度以“配送员当前位置→取餐点”为核心距离度量(不使用送达终点参与最近订单排序),并叠加负载/超时惩罚;输出可解释的排序与指派结果。
-
AI 调度辅助(/takeout/ai):支持提问并以 Markdown 形式展示输出;接口确认超时时间为 10 分钟;输出为空时不展示输出区。
3.4 商家(功能点≤5)
-
商品管理(/takeout/product):仅商家角色可新增商品;管理员不得新建商品(见“必看.md”约束);商家可维护价格、库存、上下架与商品信息。
-
订单管理(/takeout/order):商家只可看到“自己发布的商品产生的订单”(按
wm_order_item.product_id -> wm_product.create_by=当前商家过滤),不可查看/操作其他商家订单。 -
出餐管理(/takeout/meal):对待接单/待出餐订单进行“出餐”,写入出餐时间并推进订单状态到待取餐;页面不展示站点ID字段。
-
商家信息维护(/takeout/merchant):由管理员新增商家时后端自动绑定“商家角色”,商家地址支持高德联想并自动写入经纬度。
-
配送协同:商家在出餐后为配送端提供确定“可取餐”时点,减少配送员空跑。
3.4 针对不同角色开发的主要内容(端侧范围)
-
用户端:实现用户注册/登录、商品浏览、购物车、在线下单、支付、订单状态实时跟踪、对已完成订单进行评价等功能。
-
配送员端:支持上报并保存配送员当前所处位置,基于位置获取最近派送任务;实现配送员注册/登录、获取附近订单、查看详细订单信息、基于遗传算法一键规划路线并在高德地图展示线路、更新订单状态(如“已取件”、“已送达”)、查看个人配送统计信息等功能。
-
商家端:支持商品分类/商品管理,订单列表与详情处理,出餐操作(写入出餐时间并推进订单状态),为配送环节提供可取餐的确定性。
-
管理端:
-
订单管理:统一管理所有订单,包括查看、编辑、取消、指派等。
-
用户/配送员管理:对注册用户和配送员进行增删改查,设置配送员的所属站点、区域、可用时间等。
-
商品管理:添加、修改、删除商品信息。
-
站点管理:维护站点名称与经纬度位置,配置站点类型与覆盖区域,为派单与路线规划提供可靠位置基准。
-
自动派单:结合配送员当前位置与已派送订单负载,按最近距离初筛并用遗传算法输出指派方案,支持异常改派与一键复算。
-
统计分析模块:包含订单统计(按时间、区域、商品类别统计订单数量、完成率)、配送效率统计(平均配送时间、每单成本、里程等)、热门区域/商品分析(需求热度辅助资源调配)。
-
路径规划模块:订单批量规划——基于遗传算法,对一定时间窗口内的订单进行聚合,生成配送员最优配送路径,并可在高德地图一键规划展示路线用于验证与调度。
-
4. AI 功能设计点(每点≤200字)
-
遗传算法外卖配送路径规划:在固定时间窗口内聚合订单,将“取餐点(站点)+送达点(用户地址)”建模为带时间窗的取送路径问题,结合配送员位置、容量、站点可取时间与承诺送达时间窗迭代求解,输出“订单分配+取送访问顺序”;结果转为A-B多点路径并对接高德地图绘制线路,支持一键规划、复算与方案对比。
-
智能派单与运力均衡:结合遗传算法规划结果与实时运力,综合配送员所属站点、当前位置、可用时段与负载情况,给出可解释的指派建议与备选方案;当出现拒单、超时风险或新增高优订单时触发快速重算与局部调整,减少改派成本并提升整体准时率与骑手负载均衡。
5. 权限与数据范围规则(落地约束)
-
配送员数据范围:
takeout_courier角色在任务列表/详情/修改/删除均强制校验courier_user_id = 当前登录用户ID;GA 路线规划接口禁止查看他人配送员路线;前端下拉仅显示本人。 -
商家数据范围:
takeout_merchant角色查看订单范围按商品归属过滤(订单中包含任一“本商家商品”即可查看),不再依赖订单 createBy;商家新增商品仅允许商家角色操作。 -
状态联动:任务状态变更需联动订单状态推进,避免出现“任务已送达但订单未完成”等不一致。
-
菜单行为限制:系统角色页(/system/role)仅允许编辑,新增/删除按钮禁用;抢单大厅/管理页不提供批量删除。
6. 状态流转(简化版)
-
订单状态(示例):20 待接单 → 30 待取餐 → 40 配送中/已取餐 → 50 已送达/已完成 → 60 已取消(具体枚举以字典为准)。
-
任务状态:10 待接单 → 20 已接单 → 30 已取餐 → 40 已送达 → 50 已取消。
-
快捷按钮:配送员在任务中心按“下一状态”一键推进(带确认)。
5、亮点与创新点
-
取送一体的遗传算法建模:把外卖履约拆解为“站点取餐+用户送达”的成对约束,并纳入站点出餐时间、承诺时间窗与骑手容量,避免只做最短路导致的超时与违规;输出可执行的取送顺序,兼顾里程成本与准时率。
-
高德地图可视化一键规划:将遗传算法输出转为A-B多点线路,直接在高德地图绘制与对比路线,并支持一键复算生成备选方案;管理员可快速校验路径合理性,配送员端降低理解与操作成本,提升落地效率。
-
智能派单与动态重算机制:在规划结果基础上叠加运力均衡与异常处理规则,支持拒单、临时加单、超时风险等场景的局部重算与改派;减少大范围扰动带来的成本与体验波动,使高峰期调度稳定可控。
6. 业务表结构设计(仅业务表,不包含RBAC基础表)
6.1 核心业务表
userAddress(用户收货地址)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| userId | long |
| receiverName | String |
| receiverPhone | String |
| province | String |
| city | String |
| district | String |
| detailAddress | String |
| latitude | BigDecimal |
| longitude | BigDecimal |
| isDefault | Integer |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
deliverySite(站点)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| siteCode | String |
| siteName | String |
| siteType | Integer |
| province | String |
| city | String |
| district | String |
| detailAddress | String |
| latitude | BigDecimal |
| longitude | BigDecimal |
| serviceRegionCode | String |
| contactName | String |
| contactPhone | String |
| openTime | String |
| closeTime | String |
| avgPrepareMin | Integer |
| status | Integer |
| remark | String |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
courierProfile(配送员档案)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| userId | long |
| siteId | long |
| realName | String |
| idCardNo | String |
| vehicleType | Integer |
| availableStartTime | String |
| availableEndTime | String |
| capacityOrderCount | Integer |
| ratingAvg | BigDecimal |
| currentLatitude | BigDecimal |
| currentLongitude | BigDecimal |
| currentAddress | String |
| locationUpdateTime | Date |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
productCategory(商品分类)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| name | String |
| parentId | long |
| sortNo | Integer |
| status | Integer |
| iconUrl | String |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
product(商品)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| categoryId | long |
| name | String |
| subtitle | String |
| coverUrl | String |
| intro | String |
| price | BigDecimal |
| stock | Integer |
| unit | String |
| status | Integer |
| saleCount | Integer |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
cartItem(购物车项)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| userId | long |
| productId | long |
| productNameSnapshot | String |
| priceSnapshot | BigDecimal |
| quantity | Integer |
| selected | Integer |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
orderMain(订单主表)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| orderNo | String |
| userId | long |
| pickupAddressSnapshot | String |
| pickupLatitude | BigDecimal |
| pickupLongitude | BigDecimal |
| addressId | long |
| receiverNameSnapshot | String |
| receiverPhoneSnapshot | String |
| dropoffAddressSnapshot | String |
| dropoffLatitude | BigDecimal |
| dropoffLongitude | BigDecimal |
| totalAmount | BigDecimal |
| payAmount | BigDecimal |
| deliveryFee | BigDecimal |
| payStatus | Integer |
| payChannel | Integer |
| payTradeNo | String |
| payTime | Date |
| orderStatus | Integer |
| deliveryMode | Integer |
| mealReadyTime | Date |
| promisedDeliverStartTime | Date |
| promisedDeliverEndTime | Date |
| expectedDeliveryTime | Date |
| remark | String |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
orderItem(订单明细)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| orderId | long |
| productId | long |
| productNameSnapshot | String |
| unitPriceSnapshot | BigDecimal |
| quantity | Integer |
| lineAmount | BigDecimal |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
deliveryTask(配送任务,订单与配送员的履约关系)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| orderId | long |
| courierUserId | long |
| pickupSiteId | long(可空,历史字段,当前版本不再作为核心计算输入) |
| gaBatchId | long |
| assignType | Integer |
| taskStatus | Integer |
| pickupReadyTime | Date |
| promisedDeliverEndTime | Date |
| packageCount | Integer |
| plannedDurationMin | Integer |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
deliveryStatusLog(配送状态日志)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| deliveryTaskId | long |
| status | Integer |
| statusTime | Date |
| locationText | String |
| latitude | BigDecimal |
| longitude | BigDecimal |
| evidenceUrl | String |
| exceptionReason | String |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
deliveryRating(派送评价)
| 字段名称 | 字段类型 |
|---|---|
| id | long |
| orderId | long |
| userId | long |
| courierUserId | long |
| deliveryScore | Integer |
| content | String |
| imagesUrl | String |
| auditStatus | Integer |
| createBy | long |
| createTime | Date |
| updateBy | long |
| updateTime | Date |
| delFlag | String |
技术描述
后端
- 语言与框架:Java 17 + Spring Boot 3(Spring Web MVC、Validation、AOP、Actuator)
- Web 容器:Undertow
- 构建与工程:Maven 多模块
- 认证鉴权:Sa-Token + JWT(配合自定义 Security 配置、登录/验证码等)
- 数据访问:MyBatis-Plus + Mapper XML;动态数据源 dynamic-datasource;连接池 HikariCP;SQL 监控 P6Spy(dev 可开)
- 数据库:默认 MySQL
- 数据库迁移:Liquibase(changelog/sql 方式管理变更)
- 缓存与 Redis:Spring Data Redis + Redisson;本地缓存 Caffeine(并有自定义 Cache 管理封装)
- 文件/对象存储:支持本地上传策略;OSS 能力
- 其它通用能力:ip2region(离线 IP 定位)、MapStruct Plus、Hutool、邮件组件(可选)、全局异常处理、XSS 防护、国际化资源
- 推送:SSE 服务端模块(含通用 SSE 与 Chat SSE)
前端
- 框架与构建:Vue 3 + Vite + TypeScript(ESM 工程)
- UI 组件:Naive UI
- 状态管理:Pinia
- 路由:Vue Router 4 + elegant-router(路由/类型自动生成)
- 工具库:@vueuse/core、dayjs、iconify、echarts、streamsaver、jsencrypt
- 样式体系:UnoCSS(并配合 tailwind-merge 做 class 合并)
- 请求与鉴权:基于 axios 的二次封装(@sa/axios),在请求拦截中统一注入 token、支持统一错误处理;本地存储使用 localStorage/sessionStorage 封装(localStg/sessionStg)
- 实时通信:SSE(EventSource/useEventSource)+ WebSocket 工具封装
- 国际化:vue-i18n(中/英资源)
项目截图描述
























